From 5c7f6094e2b4b22b053b725ee6f6c0dcb52e045c Mon Sep 17 00:00:00 2001 From: Alpha Date: Fri, 9 Jan 2026 20:20:47 +0900 Subject: [PATCH 01/35] Sprint Misssion 2-1 Date : 20260109 Today I work's... Server && Channel make test logic --- .gitignore | 1 + discordit.iml | 12 + .../.gradle/9.0.0/checksums/checksums.lock | Bin 0 -> 17 bytes .../executionHistory/executionHistory.bin | Bin 0 -> 28712 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .../.gradle/9.0.0/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 0 -> 20047 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 0 -> 19755 bytes discordit/.gradle/9.0.0/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/outputFiles.bin | Bin 0 -> 18983 bytes discordit/.gradle/file-system.probe | Bin 0 -> 8 bytes discordit/.gradle/vcs-1/gc.properties | 0 discordit/build.gradle | 20 ++ .../discodeit/entity/CRUDInterface.class | Bin 0 -> 200 bytes .../discodeit/entity/DefaultInterface.class | Bin 0 -> 149 bytes .../mission/discodeit/entity/Main.class | Bin 0 -> 4225 bytes .../discodeit/entity/UUIDGenerate.class | Bin 0 -> 454 bytes .../entity/service/GeneralCreater.class | Bin 0 -> 1012 bytes .../entity/service/channel/Channel.class | Bin 0 -> 1680 bytes .../entity/service/channel/Server.class | Bin 0 -> 3485 bytes .../discodeit/entity/service/user/User.class | Bin 0 -> 1122 bytes .../stash-dir/Main.class.uniqueId0 | Bin 0 -> 4246 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 584 bytes discordit/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 45457 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + discordit/gradlew | 251 ++++++++++++++++++ discordit/gradlew.bat | 94 +++++++ discordit/settings.gradle | 1 + .../discodeit/entity/CRUDInterface.java | 7 + .../discodeit/entity/DefaultInterface.java | 5 + .../sprint/mission/discodeit/entity/Main.java | 75 ++++++ .../discodeit/entity/UUIDGenerate.java | 9 + .../entity/service/GeneralCreater.java | 25 ++ .../entity/service/channel/Channel.java | 42 +++ .../entity/service/channel/Server.java | 76 ++++++ .../discodeit/entity/service/user/User.java | 33 +++ 39 files changed, 660 insertions(+) create mode 100644 .gitignore create mode 100644 discordit.iml create mode 100644 discordit/.gradle/9.0.0/checksums/checksums.lock create mode 100644 discordit/.gradle/9.0.0/executionHistory/executionHistory.bin create mode 100644 discordit/.gradle/9.0.0/executionHistory/executionHistory.lock create mode 100644 discordit/.gradle/9.0.0/fileChanges/last-build.bin create mode 100644 discordit/.gradle/9.0.0/fileHashes/fileHashes.bin create mode 100644 discordit/.gradle/9.0.0/fileHashes/fileHashes.lock create mode 100644 discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin create mode 100644 discordit/.gradle/9.0.0/gc.properties create mode 100644 discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 discordit/.gradle/buildOutputCleanup/cache.properties create mode 100644 discordit/.gradle/buildOutputCleanup/outputFiles.bin create mode 100644 discordit/.gradle/file-system.probe create mode 100644 discordit/.gradle/vcs-1/gc.properties create mode 100644 discordit/build.gradle create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/CRUDInterface.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/DefaultInterface.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Main.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/UUIDGenerate.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/GeneralCreater.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/Channel.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/Server.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/user/User.class create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId0 create mode 100644 discordit/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 discordit/gradle/wrapper/gradle-wrapper.jar create mode 100644 discordit/gradle/wrapper/gradle-wrapper.properties create mode 100644 discordit/gradlew create mode 100644 discordit/gradlew.bat create mode 100644 discordit/settings.gradle create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/CRUDInterface.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/DefaultInterface.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/Main.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/UUIDGenerate.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/service/GeneralCreater.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Channel.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Server.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/service/user/User.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..723ef36f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/discordit.iml b/discordit.iml new file mode 100644 index 00000000..0d852a03 --- /dev/null +++ b/discordit.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/discordit/.gradle/9.0.0/checksums/checksums.lock b/discordit/.gradle/9.0.0/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..d3303a17454e74fdc9eaaf4b2318c8942143bdb1 GIT binary patch literal 17 ScmZQh?B-k)TCLg& zg1kf&L2%t8)OytVpwy*W6i-Ps^wL|AR45+FQw2%Qlq2s5eR2sVXPq%nlq3>d{6@i{RJ zXlaJvfKDE{>3C{Lc}4c;;iF%5A9y9*q0bty!+2tdg*577va72rbz2542jKl--ECvcoTP#ff6}Ntmw|PKIG#@{&}-Na|p&*?R>Yz%kiM4Z&%X#5BPV;-TZ!anKo7 zZGs;OP)FzhF@vF#ftF*{LEfyHAt}z=M6$d=H4F!)u#V)^q9bVvs0@>5IR4<_fgji~ zEY;6%TM+x=ijxdHy+zy`si%= zXZtSuI5i*UtruQ)kmZ{h8Wtc&0#@+i!vDsLPAiyvYS@@xPRu*;#Q@n$X+Qma`pMIR zGr!`p99Aey!H>GWfsV;{e|GWRmt3xz!{2xz*zfDNKE86C54j{v2LA<`>D77FW7-_LiLl*0 zCcl<8nc?TEh$K>pQ1SKev^V^rXz|ER?zG0ZVs&<&C8wGc98DXwNd&AEn6iMO2%{nl z=n0FFi?v>{bC>DXgxA=sSC{}tzycy%u^soe!|SyfkuU%Dhh^t)$_s{g#)9lc)Xb_L z6)TJcWv~ziAXW1~yxYdat=BLomcb_6+XE?5-jQit^)`5HX_>lb`bQ2J9)UfXDz=Vv zGrZTjZtU4H{_Yh)nJpaaihX=<(_MlW_H_$n$Gr?GNR!zJOn~ADzWqBEqykDuGqC>v zEvYB9JMXFBk4JO!J$)2|a?By91)k#TmHZwl0i4V1u;!!3 zDy{8S;D702Kw6~`)K3Gcz=#!E7XV62>qyFgt+7ecIY9CEz%Y_wvDH?wo*<3UR5-)X z44!Kf!ke)}=MwlX+6v(Bchkw8OMeHw4fb{<%?gkXv=)xg7y-7vr|U2$1dweQkd&4Y z3(gpkHwwk3aj27@o z0c%=A8ezgZF7pXo%@K?NaNXoi*;?KPT%3g2yd)@!7Fz-wO5nJ}(hQ%HSeezDhNd|< zHWFsRL1A-|^_u8_Aj@L~Y+?kL*e8B{&_RG@v~W-&DK!s(8fKkZoRHLACL|qz6B6uY zFk*G+thlfU{(htL+(cf+-baGSCIFj)LkHbF_n+5tK97m+6(w*81Ly9um7k!YRnlWKu8~*A21jTDp z@`oEiTgRizuei8~uql87{9#{;3|I@1xjz5C$w$Y<*ak)cde(Tl2#*#qNi%?%MtYP4M45mya5)O}DHX zyf!MXeY9?P>zTtVYgI>Zd~LTLBkf4O8oj>kNXhsuUpza@@6z@+e-d^S<9Lox)Y7Vo zj_J;sU!VPPS-b*P&%aSSv%aTe4&$HHyv~_QQ=Z=gZx_N2Nprd$s zkw^B9Z{XI$PdQ@p%aP;T70YXi-MkD%N4@sX#NOvq6weWIRNC&dzp8HgJL3!Lm+p}sPY zr%KEWNF`|t8!8;S#p;BoRQyWc+~G`SewyLW^pX5zV>RO~3I#jf{Bc+TnJ7%&s#pFi zd4G$wgfJ+_{?ao|rg*K}kO15PcD>n3?9!~vooY$Oe1<24ZdAh7fz&w=O%nnLu0 zct{rs0YpFix9_SD{m@tX!5PsH_sgPmo90C#<*}z9S{5zBE>!-e3kthd@$$*R#g8lf zFk!>O(W?gB;3iL%pIFsA`_e<8A3lHd^n-MyQ^&wBXC>CaQGRpY`KIdn+^FwolvC)to7?{xWpvQXi9OPsd*OMnM#s@_oIi*tqpp(CSVXbP(@Lo_xXdT*7 zzK!j__0;XvxwWeHC;LuCflsa;sJP*Cbb35>ZR__}mfSZLRX#62Wu@Q7j{Ln7%HuQA z8(~y!uZJc?CLDZjo$GGnQ*SJ-hoa-dT&iSSQZ}mQuYI9x<%gM2q~CIOn#YNs^UoL$ z-JW@?v<8YQo^bhWPQR&_=<`JI<{b^Ip{Uk(_*eTDW!x&+h@F04Jz*`PqSPWO+np}&zATj85gAWKxn*Yk2i4CJQUCw| literal 0 HcmV?d00001 diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..299954206ff6a46e20c7412ebc728fae6d4f0db0 GIT binary patch literal 17 UcmZQx)_UaMM6cU+3=ohG06!`POaK4? literal 0 HcmV?d00001 diff --git a/discordit/.gradle/9.0.0/fileChanges/last-build.bin b/discordit/.gradle/9.0.0/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..c7a6e80558877dd7088041ab01a7d8b2f1ed8b0b GIT binary patch literal 20047 zcmeI3`BM{D9KaU>EvI0MBvdOSS}rr72wDg@p@SWgpeVy3MH~ejLL0h zf?`udQlqsV6|qrlL7<}|AeVq5UcdmYK?KX;IreSdK9#KhKs(C;$bZ02F`%Pyh-*0Vn_kpa2wr0{@o+ zLFht^@Wt@>y7Y=!B1O$JK`Yj2aW|UtI5n^Ezr`H#{ei+MVQOQA*q7mMgr6DBSr;4< znSuGz48qH1H)Sqx*jRNB%J97{k?sH$Bl;duQGhVJ>kdyj_wkug>JgU@ksL zc!zC#BX8#e=DQNfKEiK}AKxB+ivK0Ep9#Y6)vnF;_?#!h+;4>N`)+L$!Zp#Jn2QVv z@8kA(R_u44q z8@aVqU_TFYk$`Z^?ELD9w*E0@KbHyT)i2Q%)Cxy1_sb@HdhEhj$r}Hu48KJ9%)-=? zv3`CP=Hgd`&*>?sypE36fBRoOnv&CgFgL&RWErgSIiqd7CIc&lb z3P1rU00p1`6o3Ly017|>C;$bZ02F`%Pyh-*0Vn_kpa2wr0#E=7KmjNK1)u;FfC5ke z3P1rU00p1`6o3Ly017|>DDYn_umGL31A5J(U*^f2z8N!gs*A0quCAxt6F#FT9eD|F z{a$=!#@o=l(_~{uy>hg*zBu;RuA<6{-udV^+q4mR8yls0Y{S=w|4(yRbAzd#ed5FW z%UT$t0~^#!woz8uz0=-kaPyK-8*kSeYktEF>WJhowL-)!1{nCrLys;}&IfC`<3 zj@-F@8~&xd;i_P^v9DWLd7`(`D9T6pt#sPUkV!^d@k+KKZcb8FM{X=N9Xq|XFf~^= z$*>A`WE;JDO_^>2y@Bcz>IU~i=}waj&b=*cLlsn0mo;%L`1!i}Hh!m|WRjupOjp*r zA2*WsOifGR%{_Z|kxTf{V$~#rYAt3P8L{gH&n#YZV?wRsPTomEvnSqZr5|6xHbh69 z9}7O-G~>^W-ljcu)YVA_FG9#R+ec-_na{b^>}51zFZ;OM1|=NVJZj zZgB1r$?DScJGs|xS4N>bhKz7yAIV)JV6%NoO?U4jigdM<<3S$Q6o8;2(L58H)Ud2G7oW1u;! z?B%F3Jvj923N0hWz{$AkJ4L|xth>^#M{(CRhE#%@X~ui*;Lajj$H=6u-*XQv4H|Wf zLLYu~<$3DA7^4=wYaL_5p#P8Z+Cqew5@5reQ-bf^AG+wDL~WnM<~JQ_^?zC{3L4bqpet9y(XhLhGz% zMjOnv>+aVbP$@gh#pCE%)m%rfMxb*CITYA^AtApG6#A18)g`pzNF|5=~ lT~qY8w$U==I_~vCb*Sp?VGL z(ohY-T~iSMNuE&Q^D&4*R~|v6UyS(JBkG`_`1X8)bG|@a zEum^yyTp`F@*u=#rdmbC%JnXi^B*8i|6%;NWtVgd$!8!wCy7Zf6#m>xaDEcvOI^IG zF39)x6P#-^$@jC`A0Nr?A-Mu;x0aYak*9fY2+L>;%jej@Y-#(K}>LNF5*IGW?(~yMHV?{9^$^Lp6ww{*&j$= ziuks}TSw>Di2Vr8i$FY_p2%L}U~!J*j7h$oqt9GkkV0^N0OB!!*d%qFjwmBIw{wz@ z<&Veh>Q*PXYaimVdObzEdT#C{xSJ;8aeW8aK~!rEa!wTD@g=_F@pUV25S-_Zc!K&+ z_|3HXDuQ#aBaWUa6tx4yYw!pKpa2wr0#E=7KmjNK1)u;FfC5ke3P1rU00p1`6o3Ly z017|>C;$bZ02F`%Pyh-*0Vn_kpa2wr0#E=7KmjNK1)u;F`0oYmCRC$|Q%`x)^c?2O z81A1{Fd`L^JA1X1SKgca)1cTeZD~5Y=&J|Vdq#p43fvg&-&uGhW!`a>SdCDdGxzu7 zhW(u5k+qk)82%!)FmqeY8MqOrF(Pt46hD$!?r$ex84Tmb6Me46X4T|)XIY;4Kvr%u zZp>qk1nZvg3x8hUm}K^2rSfivDSI)uc#>m(6iZH^OF~ze3>~$n5WA zF20!+ro0}0$~&FENBy_#J=Ujpr`9(O+O2+#8*7Fw-;Hg*Sk-5;)kB!?WP=;Y>(-Rk zR4?1-YP689_5O_rH>`zs&DyGO$+uMYC#>uIJ{LE5X-sj;Ci&OFjS*Uc6)&IShQ(XX zeMy+?*f#=sxkP+Qc@6)Ry|^E4v}-sle`|S7tFlWmT!9;!za*Z|v)dx;mE=?pB|D_z zM*C1*@TyiGzc|afkltV#iW|?{5-xygDWv`bsk=(5jp2=!zSXr3D{Ons&RL^h`0cf5#ExhCf%LuQ=N$x#Ha|t%(iU ziyKe(g&U{;-mujSC%avlo*rTSanN1bPyGu@sEj$OXq zvcwdh;jW!$eD9fVirC+yDb3U`8aJe~7rglLPHVLzOGvvMl@Ws*wn5aPqNt;cL9blR zGKKSE+)&TkW_csj#GrFprmOTG1WY$e zZ@U_%R$%0*{P~$Oez+h9JA>B7O(9^YA^-`5(^bb~_=2 zF5X9n*gLd)OROLO0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|_+JDn)fb79FQdx| z^)KRDh0sT3;*=GeAoQ}_Z0Q-+`sfsHeSe7nrTie_Yn8B*^CE{kJKx;A3nO4 z;IyB;M17Qd%x&NKZ`QnB*-cvR>1)=vtFDF#*^S}cGdfN`v|c{+iuw@u-0HUS&iPL! z>e<|nJ;`ngD>^yik6oPdu2NBoKEtGttrVp+ zH?hAIqyht1j$|N)WHvuXZ0h`r+)-uQ=x0aUI7M4sMwtF(F1k3*5Rc<;KoTnk;OMH- NpAI{X8>2XT$Ua3&FZBQb literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/DefaultInterface.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/DefaultInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..4dbc9304f697a6be751287ddf24ac9e0c7d1507f GIT binary patch literal 149 zcmZ9GF$%&!5Jmq)&4QJU*KitJyC7Iuc!G5^kqODJWG8}Gv+w{ON=#Z`@wx}^^L@Pm z9N-)Z!ak&)^L@~0+-uI7BG;Njszr?@n%a{qY5dsPDVhw858|*SY+C>D-1&Ip^R<;= eg!LtjLy)6(LfHOSyE!NcgvB&4Ls(5NQ2qcpb}FC% literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Main.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..6846da86569d9f7332f4349de607383862452842 GIT binary patch literal 4225 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 literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/GeneralCreater.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/GeneralCreater.class new file mode 100644 index 0000000000000000000000000000000000000000..85cc4a44c00fe4b97e1e900e8a14ccb02061492f GIT binary patch literal 1012 zcmbVLO>fgc5Pj=7ag&&~Nt3pGmh$NYiM`WOsj37biprso`^H&?trEMkHYt2vc`UvsZP#K zsO4K7=|oMA60NLG1ROIGX!aL3o>(Fp@9`b0KGv`@Wlx|y z*7hCgX$75|iUjJ^&V{oSaWfK#EYIxJ4&PSx_!_ze9Y>#*1|FV*?<;V+s+s^^QpOO>?qsMWsjX8^FQ;2p}znC literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/Channel.class new file mode 100644 index 0000000000000000000000000000000000000000..a062ef13c320a5bc44d4ad489c156e12d0dfafe4 GIT binary patch literal 1680 zcma)6Yflqd7=BJEol<7G6vTR2sW<3F88585TR>gBffY4K6F&~a2_Dl<$;{N~H$Je@ zs2@yL<7N{!ejqV!) z8QWm!@+)l|Bd1^+!=dlNo|+mvbDq=ay2E2gph*(BQ^k+i#SnGMG@CGI8M;$xzmCVL zf0~oSBvtIj9!bm$L;UMEF`{&ziv8##!i|b$(NNb!iC+@MqOd(R#wAWlMH(5ZX%LwX zKTV1;@8W=pgWg4DZpOQiuQe5iWYw^#m$+2zh>D{aB)D>gGS>yVBB>1oisBeUw)T8} zZS`JlaXwjlz2Gi9sx2-g-RBS8-q;%6M6{kHNOn%$R3zO5pqht++b{S1nO4HoBrcW2?B%UuDdaHB8QKPTtlqdAwoU1Do64*)aKHU4aoAQYskP z#Hsv01N4$sNe{v2FH+|(Qs*y^O92HVXre!f)mue&T^}E74`J>72A1@S)MBDO)Hv0b tv?t!+aQvrb9GB}btwe8p87J50Z1ZaNk+b?q_tb`Y6Lpy`6H*9QJ^?)PW?=vT literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/Server.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/Server.class new file mode 100644 index 0000000000000000000000000000000000000000..522e7bd74a026864604a6dff3e31fa818bdf7eb5 GIT binary patch literal 3485 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 F{07(G;Yt7i literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..e10ab5c0f54266072ba443a6574a37a9ea2ce561 GIT binary patch literal 4246 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 NLB>MNkp;Pw0RV;mqS62W literal 0 HcmV?d00001 diff --git a/discordit/gradle/wrapper/gradle-wrapper.jar b/discordit/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..8bdaf60c75ab801e22807dde59e12a8735a34077 GIT binary patch literal 45457 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 c82=K%QXLKFx%@O{wJjEi6Y56o#$)Bpeg literal 0 HcmV?d00001 diff --git a/discordit/gradle/wrapper/gradle-wrapper.properties b/discordit/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..2a84e188 --- /dev/null +++ b/discordit/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/discordit/gradlew b/discordit/gradlew new file mode 100644 index 00000000..ef07e016 --- /dev/null +++ b/discordit/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/discordit/gradlew.bat b/discordit/gradlew.bat new file mode 100644 index 00000000..db3a6ac2 --- /dev/null +++ b/discordit/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH= + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/discordit/settings.gradle b/discordit/settings.gradle new file mode 100644 index 00000000..955baf54 --- /dev/null +++ b/discordit/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'discordit' \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/CRUDInterface.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/CRUDInterface.java new file mode 100644 index 00000000..8535c55a --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/CRUDInterface.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.entity; + +public interface CRUDInterface { + public void create(); + public void update(); + public void remove(); +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/DefaultInterface.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/DefaultInterface.java new file mode 100644 index 00000000..0fb6e243 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/DefaultInterface.java @@ -0,0 +1,5 @@ +package com.sprint.mission.discodeit.entity; + +public interface DefaultInterface { + +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Main.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Main.java new file mode 100644 index 00000000..d1844e56 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Main.java @@ -0,0 +1,75 @@ +package com.sprint.mission.discodeit.entity; + +import com.sprint.mission.discodeit.entity.service.channel.Server; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class Main { + public static boolean duplicateCheck(List list, String name) { + int temp = list.stream().filter(e -> e.getName().equals(name)).toArray().length; + + if(temp == 0) { + return true; + } + return false; + } + + public static void main(String[] args) { + boolean run = true; + Scanner sc = new Scanner(System.in); + List server = new ArrayList(); + SimpleDateFormat formattingDate = new SimpleDateFormat("yyyy/MM/dd HH:mm"); + + /// 채널 생성 잘 되는 것 확인함 - 20260109 1605 + /// formatting 부분까지도 추가해서 수정함. + server.add(new Server("코드잇 스프린트: 스프링 백엔드 9기")); + server.add(new Server("스프린트 커뮤니티")); + + /// TODO: 채널 생성 로직 작성 + try { + Thread.sleep(2000); + System.out.println("=== 잠시 대기해주세요! ==="); + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + while(run) { + System.out.println("====================="); + System.out.println("| 0. 종료하기"); + System.out.println("| 1. 서버 생성하기"); + System.out.println("| 2. 서버 조회하기"); + int menu = sc.nextInt(); + sc.nextLine(); + + switch (menu) { + case 0: + System.out.println("See you later"); + run = false; + break; + case 1: + System.out.println("서버 생성에 오신 것을 환영합니다!"); + System.out.println("사용하려는 서버명을 입력해주세요!"); + String serverName = sc.nextLine(); +// System.out.println(server.contains(serverName)); + if(duplicateCheck(server, serverName)) { + server.add(new Server(serverName)); + System.out.println("잘 들어갔어요!"); + } + else System.out.println("error!"); + break; + case 2: +// System.out.println("현재는 지원하지 않는 기능입니다: " + menu); + server.forEach(e -> { + System.out.println(e.getName()); + }); + break; + default: + System.out.println("[Error!] 존재하지 않는 메뉴입니다."); + break; + } + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/UUIDGenerate.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/UUIDGenerate.java new file mode 100644 index 00000000..67bf0f65 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/UUIDGenerate.java @@ -0,0 +1,9 @@ +package com.sprint.mission.discodeit.entity; + +import java.util.UUID; + +public class UUIDGenerate { + public static UUID UUIDGenerate() { + return UUID.randomUUID(); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/GeneralCreater.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/GeneralCreater.java new file mode 100644 index 00000000..1db68b82 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/GeneralCreater.java @@ -0,0 +1,25 @@ +package com.sprint.mission.discodeit.entity.service; + +public class GeneralCreater { + private String id; + private long createAt; + private long updateAt; + private String name; + + public String getId() { return id; } + public long getCreateAt() { + return createAt; + } + public long getUpdateAt() { + return updateAt; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public void setUpdateAt(long updateAt) { + this.updateAt = updateAt; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Channel.java new file mode 100644 index 00000000..9691669b --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Channel.java @@ -0,0 +1,42 @@ +package com.sprint.mission.discodeit.entity.service.channel; + +import com.sprint.mission.discodeit.entity.UUIDGenerate; + +import java.util.Scanner; + +public class Channel { + private String id; + private final long createAt; + private long updateAt; + private String name; + Scanner sc = new Scanner(System.in); + + public Channel(String name) { + this.id = new UUIDGenerate().toString(); + this.createAt = System.currentTimeMillis(); + this.updateAt = System.currentTimeMillis(); + this.name = name; + } + public String getId() { return id; } + public long getCreateAt() { + return createAt; + } + public long getUpdateAt() { + return updateAt; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public void setUpdateAt(long updateAt) { + this.updateAt = updateAt; + } + + public String generateChannel() { + System.out.println("지금은 채널을 만들려고 합니다!"); + System.out.println("만들고자 하는 채널명은 무엇인가요?"); + return sc.nextLine(); + } +} \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Server.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Server.java new file mode 100644 index 00000000..f7f41989 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Server.java @@ -0,0 +1,76 @@ +package com.sprint.mission.discodeit.entity.service.channel; + +import com.sprint.mission.discodeit.entity.UUIDGenerate; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class Server { + private String id; + private final List channel = new ArrayList<>(); + private final long createAt; + private long updateAt; + private String name; + Scanner sc = new Scanner(System.in); + + public Server(String name) { + this.id = new UUIDGenerate().toString(); + this.createAt = System.currentTimeMillis(); + this.updateAt = System.currentTimeMillis(); + this.name = name; + } + + public String getId() { return id; } + public long getCreateAt() { + return createAt; + } + public long getUpdateAt() { + return updateAt; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public void setUpdateAt(long updateAt) { + this.updateAt = updateAt; + } + + public void createChannel() { + System.out.println("지금은 " + this.name + + " 서버에 새로운 채팅 채널을 생성하려 합니다."); + System.out.println("채널명은 무엇인가요? : "); + String channel = sc.nextLine(); + this.channel.add(channel); + }; + + public void renameChannel() { + System.out.println("지금은 " + this.name + + " 서버에서 채팅 채널명을 수정하려 합니다."); + System.out.println("무엇을 수정하고 싶은가요?"); + String channel = sc.nextLine(); + System.out.println("지금 입력한 채널명은 " + channel + "입니다. 맞나요?"); + String test = sc.nextLine().toUpperCase(); + if(test == "Y") { + if(channel.indexOf(channel) == -1) { + System.out.println("어머, 이미 존재하는 채널이에요!"); + } else { + System.out.println("오, 좋은 이름이네요!"); + System.out.println("잠시만 기다려보세요! 지금 열심히 일하는 중입니다."); + setName(channel); + try{ + Thread.sleep(4000); + System.out.println(getName()); + Thread.sleep(4000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + }; + } else { + System.out.println("다시 입력하시려 하는군요. 좋아요."); + renameChannel(); + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/user/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/user/User.java new file mode 100644 index 00000000..9594a4da --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/user/User.java @@ -0,0 +1,33 @@ +package com.sprint.mission.discodeit.entity.service.user; + +import com.sprint.mission.discodeit.entity.UUIDGenerate; + +import java.time.LocalDate; + +public class User { + LocalDate now = LocalDate.now(); + + private String id; + private long createAt; + private long updateAt; + private String name; + private String profilePhoto; /// 사진 경로 사용. 아직은 모르니 패스 + private String details; /// 상세 설명 + + public User(String name) { + this.id = new UUIDGenerate().toString(); + this.createAt = System.currentTimeMillis(); + this.updateAt = System.currentTimeMillis(); + this.name = name; + } + + public long getCreateAt() { + return createAt; + } + public long getUpdateAt() { + return updateAt; + } + public void setUpdateAt(long updateAt) { + this.updateAt = updateAt; + } +} From c51695bf31f39ec719a4ce60a76a02f394dc4bfc Mon Sep 17 00:00:00 2001 From: Alpha Date: Mon, 12 Jan 2026 23:39:51 +0900 Subject: [PATCH 02/35] =?UTF-8?q?20260112=20/=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=A1=9C=EC=A7=81=20=EB=8B=A4=EC=8B=9C=20=ED=95=B4?= =?UTF-8?q?=EC=95=BC=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 28712 -> 33736 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 20047 -> 20147 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 19755 -> 19891 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../mission/discodeit/entity/Main.class | Bin 4225 -> 3571 bytes .../entity/service/channel/CreateServer.class | Bin 0 -> 1519 bytes .../entity/service/channel/Server.class | Bin 3485 -> 4770 bytes .../stash-dir/Main.class.uniqueId0 | Bin 4246 -> 4225 bytes .../stash-dir/Server.class.uniqueId1 | Bin 0 -> 3513 bytes .../compileJava/previous-compilation-data.bin | Bin 584 -> 637 bytes .../discodeit/app/JavaApplication.java | 19 ++ .../mission/discodeit/entity/Channel.java | 35 ++++ .../discodeit/entity/DefaultInterface.java | 5 - .../mission/discodeit/entity/Message.java | 38 ++++ .../sprint/mission/discodeit/entity/User.java | 34 +++ .../discodeit/entity/service/user/User.java | 33 --- .../{entity => entity_}/CRUDInterface.java | 2 +- .../discodeit/entity_/DefaultInterface.java | 5 + .../discodeit/{entity => entity_}/Main.java | 34 +-- .../mission/discodeit/entity_/Route.java | 58 ++++++ .../{entity => entity_}/UUIDGenerate.java | 2 +- .../service/GeneralCreater.java | 2 +- .../service/channel/Channel.java | 4 +- .../service/channel/CreateChannel.java | 4 + .../entity_/service/channel/CreateServer.java | 17 ++ .../service/channel/Server.java | 14 +- .../entity_/service/user/CreateUser.java | 38 ++++ .../discodeit/entity_/service/user/Login.java | 26 +++ .../discodeit/entity_/service/user/User.java | 59 ++++++ .../discodeit/service/ChannelService.java | 5 + .../discodeit/service/MessageService.java | 17 ++ .../discodeit/service/UserService.java | 15 ++ .../service/jfc/JCFChannelService.java | 16 ++ .../service/jfc/JCFMessageService.java | 52 +++++ .../discodeit/service/jfc/JCFUserService.java | 195 ++++++++++++++++++ 38 files changed, 658 insertions(+), 71 deletions(-) create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/CreateServer.class create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId1 create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/DefaultInterface.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/service/user/User.java rename discordit/src/main/java/com/sprint/mission/discodeit/{entity => entity_}/CRUDInterface.java (71%) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/DefaultInterface.java rename discordit/src/main/java/com/sprint/mission/discodeit/{entity => entity_}/Main.java (59%) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/Route.java rename discordit/src/main/java/com/sprint/mission/discodeit/{entity => entity_}/UUIDGenerate.java (74%) rename discordit/src/main/java/com/sprint/mission/discodeit/{entity => entity_}/service/GeneralCreater.java (90%) rename discordit/src/main/java/com/sprint/mission/discodeit/{entity => entity_}/service/channel/Channel.java (89%) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.java rename discordit/src/main/java/com/sprint/mission/discodeit/{entity => entity_}/service/channel/Server.java (85%) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/CreateUser.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/Login.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/User.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index cd96e4f2d4907f8fe9cee2617785d6fc6e0d631b..238634be807745097db2a9d6ddac57142cf75517 100644 GIT binary patch delta 1012 zcmZ4Sfbm2-(*zM&CI&F@m0@5IXn?R|=P)n`^#Iwr8x4gdm~D@rdd$t+E;Ofxmj$|*87N)&Kf#&f;(f`aIz+JGa^tUEbBb7KfGY@U44Lv(Y! z?>@H8ds5ah3yH+~=uSH`W8oz;sT?v;Ia zV4Bm;&Hj-Bj3VD=%(dO}ZsS8+Pp?~XQa@(RJN5JL>n8To!$|9b%W&EqR9%mMFOjTgaupqEHh~nUv{ft#su5R z;?ainU-Qq^Gv=NCa(qilJi7uzHc;~_*3=w@#<&ep;Re%YJ-EIOD8w|CVQJinkMGe56bFFiFcwJ34(@#yW0Iq5u`>VCw}nDoe)v4KIYL*_FI?Ug@w|J#`v22Kx;@8Hj{ zy3V+6^7#;z$#r3qCikZYGo5CdywTensN7klC^fMpH8{1XEVW24E3qt*SwQ;e1Lym; zDXww*TzCK5$8OAc3>d9utYC$cH)hmL4$Tl1+9OpJ>c*9QphtD; zlUQ8LAfPW%CLHmZ>rlekXZ-)!r%qoF*72U3u@~xIsJaNwR>R)p(kBux6s+$(IInwf zFUaIYs=zp#ssHJs+eDFN&AdIo6Z`i%gA>nIfy#SKCnG;w%u$)J>hP4O;KVcYV`QU_ z##$l!!khg)7q?FUYPOoNZULJJ-|mj8+}Cede&hg!GFAz!Q@*Z~`z-z8L#8?PTYy5! z!pgy&f7)x{g`!Y@~Mftj2jgv%Qo0dexAdx9oM<>uGZ~q;+H;&)b;LoH}}@{ z=M#1r&y{9o5OCtTwc9>aB;PFLIdA?lZR5#`xkUo0+ut0V_to&EUu@pnHBVkQP8N?g zte+d*pWS1!@OS?no4K)76_n6(WkG>?sIUpTkNqx^e`jw?2tngSHsWu$m+Z(Y@o z84DS%wZ_;?XIY+KP?DLSSFD$wnwMIXxcPYWc1C%*bPjFxhtHUvZ(DkEr`I>l$6&9X MU||8qk5GFD09Mz%)&Kwi diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index 299954206ff6a46e20c7412ebc728fae6d4f0db0..f4129ebadef5ec6f5254802094e8cc40285402bb 100644 GIT binary patch literal 17 UcmZQx)_UaMM6cU+3=ohH06#JXQ~&?~ literal 17 UcmZQx)_UaMM6cU+3=ohG06!`POaK4? diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index c7a6e80558877dd7088041ab01a7d8b2f1ed8b0b..b1657b6a6864f302b71abca3fc17ed04429bb7b2 100644 GIT binary patch delta 393 zcmX>6}-J|Ed;bT$_lvu*%o>Dc{W(pSK0XxRlJ`k@Ag>{G$}OyhN9Cc zfk=tvANG9D*$q)7&ka$;R12i_jDdtE5G#VPK!iJA!=H^N->s$__P@Ar<2_i%ff=1Z zNg&|1nY`84MInN-)v!0Y^ohg^1?zhc&g(*ql{*MgB(!L>dWa5IpvxHa0Cul^ AC;$Ke delta 251 zcmdlym+|}@#tkMCg7VFImoH3YKJ=FX47`{($4YoGP2MXti;3yyM#UfE8x0ghH#>Uh zF)Ij7H$K_>duOfsN>Pn-fwMaq7#L?SGHT|7=;ZF*-0#i9sPJvZT-z=0Ha@iV^tu%% z^t3Q0k^nBaWn>)R}X+jk}hA3k40MdHKKmsVipa{YO zb1SMBS^Cd@yZzeV51DaJMqnL$KSh9&K)_Wnd8@CBLR{y@yIQxeiC_98QrElV-CVFD P$=6W3dFM`+^fLnh#Hv-0 diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.lock b/discordit/.gradle/9.0.0/fileHashes/fileHashes.lock index e87b9c28f46ae42fb5044d8d890811a39ff4a15c..1c1098cf376bf9bda2a6a08e83fb95dd13866291 100644 GIT binary patch literal 17 UcmZS9oRIJ5aF#!o0Sp+$03{9s3IG5A literal 17 UcmZS9oRIJ5aF#!o0RsL5044PU@&Et; diff --git a/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin b/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin index 52915fc63858e01fc8e7a80239cd0600c8600a9b..ae3ae0970a889e6051326b09ac6c69640dcaea3a 100644 GIT binary patch delta 244 zcmZ2Ii*fU8#tkMCl9~;Lj5W?5Z?9nh1K<4rP%zn4!a!is?mo#!TX%hcO8QQYm6##0 z`CrztnbjetP{E0l-%2zHytvo6*K6+7Ur<5q&8d>XOpGr#D*h1PXkZ|++0o+_%jBt^ z{FSjjy3@`~`Nqk4Xo-@_^bnwWIb$Fp3B-aREU;Jp-2HE7W*9gI7S? B5D@?X diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 6be35e684b1e703515d1493dd548b0d8755872ce..284739a99cbe15572d9a923b4ef384338ac08e8c 100644 GIT binary patch literal 17 UcmZQxwaR1i+k`Ae1_;;#05oOPKKtx_&pzL` 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 vPN|TA;FqE}a^dp-5})y{r+HT42mdK-05+g4r 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 BHA?^h diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId0 index e10ab5c0f54266072ba443a6574a37a9ea2ce561..6846da86569d9f7332f4349de607383862452842 100644 GIT binary patch delta 90 zcmbQH*r>Q+Gn=dhBZELzVp*boPGVlVesD=qW?niY16yigX<|`{hiS5|fVcoBLmxvwkO!1xn8~n`VRF2HIRI+f78U>i delta 129 zcmZovoTj*8Gn;%0BZELzVp*boPGVlVesD=qW?niY14l_dgt_?wn=NNR00R>cGB5~g zZ)2$6#?Yj-jDekHIRgvx8lWIELkEy#V_*c5JPe&cQVgP)p^u>-$OCF)n8~mbC_e?r OW@TXFcbM!YU=9Eu=Na<= diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..336c8debc2918d419bb9db2f7631e4bcb5145454 GIT binary patch literal 3513 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 Kkp(%GkpTeMTZIAu diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java new file mode 100644 index 00000000..191e8f80 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -0,0 +1,19 @@ +package com.sprint.mission.discodeit.app; + +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.entity.User; + +import java.util.ArrayList; +import java.util.List; + +public class JavaApplication { + public static void main(String[] args) { + List users = new ArrayList<>(); + List channels = new ArrayList<>(); + List messages = new ArrayList<>(); + + /// TODO: Test Code Genenrate + users.add(new User("김경한", "rlarudgks")); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java new file mode 100644 index 00000000..d58c5ffa --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -0,0 +1,35 @@ +package com.sprint.mission.discodeit.entity; + +import java.util.HashMap; +import java.util.UUID; + +public class Channel { + private UUID id; + private String name; + private long createAt; + private long updateAt; + HashMap message = new HashMap(); + + public Channel(String name) { + this.name = name; + this.id = UUID.randomUUID(); + this.createAt = System.currentTimeMillis(); + this.updateAt = System.currentTimeMillis(); + } + + /// getter + public UUID getId() {return this.id;} + public String getName() {return this.name;} + public long getCreateAt() {return this.createAt;} + public long getUpdateAt() {return this.updateAt;} + public HashMap getMessage() { + return this.message; + } + + /// setter + public void setUpdateAt() {this.updateAt = System.currentTimeMillis();} + public void setName(String name) { + this.name = name; + setUpdateAt(); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/DefaultInterface.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/DefaultInterface.java deleted file mode 100644 index 0fb6e243..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/DefaultInterface.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.sprint.mission.discodeit.entity; - -public interface DefaultInterface { - -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java new file mode 100644 index 00000000..9cd3d536 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -0,0 +1,38 @@ +package com.sprint.mission.discodeit.entity; + +import java.util.UUID; + +public class Message { + private UUID id; + private UUID channelId; + private UUID userId; + private long createAt; + private long updateAt; + private String content; + + public Message(UUID channelId, UUID userId, String content){ + this.id = UUID.randomUUID(); + this.channelId = channelId; + this.userId = userId; + this.content = content; + this.createAt = System.currentTimeMillis(); + this.updateAt = System.currentTimeMillis(); + } + + public Message(String content){ + this.id = UUID.randomUUID(); + this.content = content; + this.createAt = System.currentTimeMillis(); + this.updateAt = System.currentTimeMillis(); + } + + public UUID getId(){return this.id;}; + public long getUpateAt(){return this.updateAt;}; + public long getCreateAt(){return this.createAt;}; + public void setUpdateAt(){this.updateAt = System.currentTimeMillis();}; + public void editMessage(String msg){ + this.content = msg; + setUpdateAt(); + }; + public void sendMessage(String content){}; +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java new file mode 100644 index 00000000..8869e7a1 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -0,0 +1,34 @@ +package com.sprint.mission.discodeit.entity; + +import java.util.UUID; + +public class User { + private UUID id; + private String name; + private String pw; + private String email; + private String phonenumber; + private long createAt; + private long updateAt; + + public User(String name, String pw) { + this.id = UUID.randomUUID(); + this.name = name; + this.pw = pw; + this.createAt = System.currentTimeMillis(); + this.updateAt = System.currentTimeMillis(); + } + + public UUID getId() {return this.id;} + public String getName() {return this.name;} + public String getPw() {return this.pw;} + public String getEmail() {return this.email;} + public String getPhonenumber() {return this.phonenumber;} + public long getCreateAt() {return this.createAt;} + public long getUpdateAt() {return this.updateAt;} + public void setUpdateAt() {this.updateAt = System.currentTimeMillis();} + public void setPw(String pw) {this.pw = pw;setUpdateAt();} + public void setEmail(String Email) {this.email = email;setUpdateAt();} + public void setName(String name) {this.name = name;setUpdateAt();} + public void setPhonenumber(String phonenumber) {this.phonenumber = phonenumber;setUpdateAt();} +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/user/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/user/User.java deleted file mode 100644 index 9594a4da..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/user/User.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.sprint.mission.discodeit.entity.service.user; - -import com.sprint.mission.discodeit.entity.UUIDGenerate; - -import java.time.LocalDate; - -public class User { - LocalDate now = LocalDate.now(); - - private String id; - private long createAt; - private long updateAt; - private String name; - private String profilePhoto; /// 사진 경로 사용. 아직은 모르니 패스 - private String details; /// 상세 설명 - - public User(String name) { - this.id = new UUIDGenerate().toString(); - this.createAt = System.currentTimeMillis(); - this.updateAt = System.currentTimeMillis(); - this.name = name; - } - - public long getCreateAt() { - return createAt; - } - public long getUpdateAt() { - return updateAt; - } - public void setUpdateAt(long updateAt) { - this.updateAt = updateAt; - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/CRUDInterface.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/CRUDInterface.java similarity index 71% rename from discordit/src/main/java/com/sprint/mission/discodeit/entity/CRUDInterface.java rename to discordit/src/main/java/com/sprint/mission/discodeit/entity_/CRUDInterface.java index 8535c55a..a3405077 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/CRUDInterface.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/CRUDInterface.java @@ -1,4 +1,4 @@ -package com.sprint.mission.discodeit.entity; +package com.sprint.mission.discodeit.entity_; public interface CRUDInterface { public void create(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/DefaultInterface.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/DefaultInterface.java new file mode 100644 index 00000000..20802112 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/DefaultInterface.java @@ -0,0 +1,5 @@ +package com.sprint.mission.discodeit.entity_; + +public interface DefaultInterface { + +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Main.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/Main.java similarity index 59% rename from discordit/src/main/java/com/sprint/mission/discodeit/entity/Main.java rename to discordit/src/main/java/com/sprint/mission/discodeit/entity_/Main.java index d1844e56..87d7a244 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Main.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/Main.java @@ -1,32 +1,29 @@ -package com.sprint.mission.discodeit.entity; +package com.sprint.mission.discodeit.entity_; -import com.sprint.mission.discodeit.entity.service.channel.Server; +import com.sprint.mission.discodeit.entity_.service.channel.CreateServer; +import com.sprint.mission.discodeit.entity_.service.channel.Server; +import com.sprint.mission.discodeit.entity_.service.user.User; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.Scanner; -public class Main { - public static boolean duplicateCheck(List list, String name) { - int temp = list.stream().filter(e -> e.getName().equals(name)).toArray().length; - - if(temp == 0) { - return true; - } - return false; - } +public class Main { public static void main(String[] args) { boolean run = true; Scanner sc = new Scanner(System.in); List server = new ArrayList(); + List user = new ArrayList(); SimpleDateFormat formattingDate = new SimpleDateFormat("yyyy/MM/dd HH:mm"); /// 채널 생성 잘 되는 것 확인함 - 20260109 1605 /// formatting 부분까지도 추가해서 수정함. server.add(new Server("코드잇 스프린트: 스프링 백엔드 9기")); server.add(new Server("스프린트 커뮤니티")); + user.add(new User("이진용", "string", "ddd@naver.com", "010-0000-0000")); + user.add(new User("김경한", "string", "eee@naver.com", "010-0000-0000")); /// TODO: 채널 생성 로직 작성 try { @@ -37,10 +34,7 @@ public static void main(String[] args) { throw new RuntimeException(e); } while(run) { - System.out.println("====================="); - System.out.println("| 0. 종료하기"); - System.out.println("| 1. 서버 생성하기"); - System.out.println("| 2. 서버 조회하기"); + Route.route(sc, 0, user); int menu = sc.nextInt(); sc.nextLine(); @@ -50,15 +44,7 @@ public static void main(String[] args) { run = false; break; case 1: - System.out.println("서버 생성에 오신 것을 환영합니다!"); - System.out.println("사용하려는 서버명을 입력해주세요!"); - String serverName = sc.nextLine(); -// System.out.println(server.contains(serverName)); - if(duplicateCheck(server, serverName)) { - server.add(new Server(serverName)); - System.out.println("잘 들어갔어요!"); - } - else System.out.println("error!"); + CreateServer.createServer(sc, server); break; case 2: // System.out.println("현재는 지원하지 않는 기능입니다: " + menu); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/Route.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/Route.java new file mode 100644 index 00000000..f1beaeab --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/Route.java @@ -0,0 +1,58 @@ +package com.sprint.mission.discodeit.entity_; + +import com.sprint.mission.discodeit.entity_.service.user.CreateUser; +import com.sprint.mission.discodeit.entity_.service.user.User; + +import java.util.List; +import java.util.Scanner; +import static com.sprint.mission.discodeit.entity_.service.user.Login.login; + +public class Route { + public static void route(Scanner sc, int n, List user) { + System.out.println("====================="); + System.out.println("| 0. 종료하기"); + + switch (n){ + /// 비로그인 + case 0: + System.out.println("| 1. 로그인"); + System.out.println("| 2. 회원가입"); + int menu = sc.nextInt(); + sc.nextLine(); + switch(menu) { + case 1: + login(sc, user); + break; + case 2: + CreateUser.createUser(sc, user); + } + break; + /// 로그인 후 + case 1: + System.out.println("| 0. 로그아웃"); + System.out.println("| 1. 서버 조회하기"); + System.out.println("| 2. 서버 접속하기"); + System.out.println("| 3. 서버 생성하기"); + break; + /// 서버 접속했을 때 + case 2: + System.out.println("| 0. 뒤로가기"); + System.out.println("| 1. 현재 서버 확인하기"); + System.out.println("| 2. 현재 서버 수정하기"); + System.out.println("| 3. 채널 확인하기"); + System.out.println("| 4. 채널 접속하기"); + System.out.println("| 5. 채널 생성하기"); + break; + /// 채널에 들어갔을 때 + case 3: + System.out.println("| 0. 뒤로가기"); + System.out.println("| 1. 현재 채널 확인하기"); + System.out.println("| 2. 현재 채널 수정하기"); + System.out.println("| 3. 메시지 확인하기"); + System.out.println("| 4. 메시지 수정하기"); + System.out.println("| 5. 메시지 전송하기"); + System.out.println("| 6. [Wanning!] 채널 삭제하기"); + System.out.println("| 7. [Wanning!] 메시지 삭제하기"); + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/UUIDGenerate.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/UUIDGenerate.java similarity index 74% rename from discordit/src/main/java/com/sprint/mission/discodeit/entity/UUIDGenerate.java rename to discordit/src/main/java/com/sprint/mission/discodeit/entity_/UUIDGenerate.java index 67bf0f65..2ae3ea07 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/UUIDGenerate.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/UUIDGenerate.java @@ -1,4 +1,4 @@ -package com.sprint.mission.discodeit.entity; +package com.sprint.mission.discodeit.entity_; import java.util.UUID; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/GeneralCreater.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/GeneralCreater.java similarity index 90% rename from discordit/src/main/java/com/sprint/mission/discodeit/entity/service/GeneralCreater.java rename to discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/GeneralCreater.java index 1db68b82..1736106a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/GeneralCreater.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/GeneralCreater.java @@ -1,4 +1,4 @@ -package com.sprint.mission.discodeit.entity.service; +package com.sprint.mission.discodeit.entity_.service; public class GeneralCreater { private String id; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Channel.java similarity index 89% rename from discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Channel.java rename to discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Channel.java index 9691669b..cb09d7b8 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Channel.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Channel.java @@ -1,6 +1,6 @@ -package com.sprint.mission.discodeit.entity.service.channel; +package com.sprint.mission.discodeit.entity_.service.channel; -import com.sprint.mission.discodeit.entity.UUIDGenerate; +import com.sprint.mission.discodeit.entity_.UUIDGenerate; import java.util.Scanner; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.java new file mode 100644 index 00000000..b1933a22 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.entity_.service.channel; + +public class CreateChannel { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.java new file mode 100644 index 00000000..5f823041 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.java @@ -0,0 +1,17 @@ +package com.sprint.mission.discodeit.entity_.service.channel; + +import java.util.Scanner; +import java.util.List; + +public class CreateServer { + public static void createServer(Scanner sc, List server) { + System.out.println("서버 생성에 오신 것을 환영합니다!"); + System.out.println("사용하려는 서버명을 입력해주세요!"); + String serverName = sc.nextLine(); + if(Server.duplicateCheck(server, serverName)) { + System.out.println("잘 들어갔어요!"); + server.add(new Server(serverName)); + } + else System.out.println("[Error!] 이미 존재하는 서버명입니다."); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Server.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Server.java similarity index 85% rename from discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Server.java rename to discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Server.java index f7f41989..18f3c7d5 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/service/channel/Server.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Server.java @@ -1,12 +1,18 @@ -package com.sprint.mission.discodeit.entity.service.channel; +package com.sprint.mission.discodeit.entity_.service.channel; -import com.sprint.mission.discodeit.entity.UUIDGenerate; +import com.sprint.mission.discodeit.entity_.UUIDGenerate; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Server { + public static boolean duplicateCheck(List list, String name) { + int temp = list.stream().filter(e -> e.getName().equals(name)).toArray().length; + + return temp == 0; + } + private String id; private final List channel = new ArrayList<>(); private final long createAt; @@ -53,8 +59,8 @@ public void renameChannel() { String channel = sc.nextLine(); System.out.println("지금 입력한 채널명은 " + channel + "입니다. 맞나요?"); String test = sc.nextLine().toUpperCase(); - if(test == "Y") { - if(channel.indexOf(channel) == -1) { + if(test.equals("Y")) { + if(channel.contains(channel)) { System.out.println("어머, 이미 존재하는 채널이에요!"); } else { System.out.println("오, 좋은 이름이네요!"); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/CreateUser.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/CreateUser.java new file mode 100644 index 00000000..aaa521d0 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/CreateUser.java @@ -0,0 +1,38 @@ +package com.sprint.mission.discodeit.entity_.service.user; + +import java.util.Scanner; +import java.util.List; + +public class CreateUser { + public static void createUser(Scanner sc, List user) { + System.out.println("회원가입에 오신 것을 환영합니다!"); + System.out.println("사용하려는 회원명을 입력해주세요!"); + String userName = sc.nextLine(); + if(!User.duplicateCheck(user, userName)) { + System.out.println("[Error!] 이미 존재하는 이름입니다."); + return; + } + System.out.println("사용하려는 비밀번호를 입력해주세요!"); + String userPw = sc.nextLine(); + System.out.println("사용하려는 이메일을 입력해주세요!"); + String userEmail = sc.nextLine(); + System.out.println("사용하려는 전화번호를 입력해주세요!"); + String userPhoneNumber = sc.nextLine(); + System.out.println("입력하신 값은 다음과 같습니다."); + System.out.printf("사용자명 : %s \n", userName); + System.out.printf("사용자명 : %s \n", userEmail); + System.out.printf("사용자명 : %s \n", userPhoneNumber); + System.out.println("이 값이 맞으면 1, 수정하려면 2, 뒤로 가려면 0을 눌러주세요."); + int i = sc.nextInt(); + switch(i){ + case 1: + user.add(new User(userName, userPw, userEmail, userPhoneNumber)); + System.out.println("잘 입력됐습니다!"); + case 2: + createUser(sc, user); + break; + default: + break; + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/Login.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/Login.java new file mode 100644 index 00000000..80d8f298 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/Login.java @@ -0,0 +1,26 @@ +package com.sprint.mission.discodeit.entity_.service.user; + +import java.util.List; +import java.util.Scanner; +import java.util.concurrent.atomic.AtomicBoolean; + +public class Login { + public static void login(Scanner sc, List users) { + System.out.println("로그인 페이지에 오신 것을 환영합니다."); + System.out.println("사용자 아이디를 입력해주세요."); + String id = sc.next(); + sc.nextLine(); + System.out.println("사용자 비밀번호를 입력해주세요."); + String pw = sc.next(); + sc.nextLine(); + boolean isTrue = isLogin(id, pw, users); + } + + public static boolean isLogin(String id, String pw, List users) { + AtomicBoolean isTrue = new AtomicBoolean(false); + users.forEach(e -> { + if(e.getName().equals(id) && e.getPw().equals(pw)) isTrue.set(true); + }); + return isTrue.get(); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/User.java new file mode 100644 index 00000000..92dc93eb --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/User.java @@ -0,0 +1,59 @@ +package com.sprint.mission.discodeit.entity_.service.user; + +import com.sprint.mission.discodeit.entity_.UUIDGenerate; + +import java.time.LocalDate; +import java.util.List; + +public class User { + public static boolean duplicateCheck(List list, String name) { + int temp = list.stream().filter(e -> e.getName().equals(name)).toArray().length; + + return temp == 0; + } + LocalDate now = LocalDate.now(); + + private final String id; + private final long createAt; + private long updateAt; + private String name; + private String pw; + private String profilePhoto; /// 사진 경로 사용. 아직은 모르니 패스 + private String details; /// 상세 설명 + private String email; + private String phoneNumber; + + public User(String name, String pw, String email, String phoneNumber) { + this.id = new UUIDGenerate().toString(); + this.createAt = System.currentTimeMillis(); + this.updateAt = System.currentTimeMillis(); + this.pw = pw; + this.name = name; + this.email = email; + this.phoneNumber = phoneNumber; + } + + public long getCreateAt() { + return createAt; + } + public long getUpdateAt() { + return updateAt; + } + public String getEmail() {return this.email;} + public String getName() {return this.name;} + public String getPw() {return this.pw;} + public String getPhoneNumber() {return this.phoneNumber;} + public String getId() {return this.id;} + public void setEmail(String email) { + this.email = email; + this.updateAt = System.currentTimeMillis(); + } + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + this.updateAt = System.currentTimeMillis(); + } + public void setName(String name) { + this.name = name; + this.updateAt = System.currentTimeMillis(); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java new file mode 100644 index 00000000..79adc9cd --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -0,0 +1,5 @@ +package com.sprint.mission.discodeit.service; + +public interface ChannelService { + +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java new file mode 100644 index 00000000..5e74f4ce --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -0,0 +1,17 @@ +package com.sprint.mission.discodeit.service; + +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.entity.User; + +import java.util.List; +import java.util.Scanner; +import java.util.UUID; + +public interface MessageService { + void data(); + void createMessage(Scanner sc, List messages); + void updateMessage(Scanner sc, List messages); + void getMessageName(Message user); + void getAllMessageName(List users); + void deleteMessage(Scanner sc, List messages); +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java new file mode 100644 index 00000000..ab6f8420 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -0,0 +1,15 @@ +package com.sprint.mission.discodeit.service; + +import com.sprint.mission.discodeit.entity.User; + +import java.util.List; +import java.util.Scanner; + +public interface UserService { + void data(); + void createUser(Scanner sc, List users); + void updateUser(Scanner sc, List users); + void getUserName(User user); + void getAllUserName(List users); + void deleteUser(Scanner sc, List users); +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java new file mode 100644 index 00000000..b01646fe --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -0,0 +1,16 @@ +package com.sprint.mission.discodeit.service.jfc; + +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.service.ChannelService; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class JCFChannelService implements ChannelService { + public void data() { + List channel = new ArrayList<>(); + channel.add(new Channel("스프린트")); + channel.add(new Channel("커뮤니티")); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java new file mode 100644 index 00000000..c46e639f --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -0,0 +1,52 @@ +package com.sprint.mission.discodeit.service.jfc; + +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.service.MessageService; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; +import java.util.UUID; + +public class JCFMessageService implements MessageService { + public void data() { + List messages = new ArrayList<>(); + messages.add(new Message("테스트용 메시지")); + messages.add(new Message("테스트용 메시지2")); + messages.add(new Message("테스트용 메시지3")); + }; + @Override + public void createMessage(Scanner sc, List messages){ + System.out.println("보낼 메시지를 입력해주세요"); + String msg = sc.nextLine(); + System.out.println("해당 메시지를 전송하시겠습니까? 보내려 하면 Y를 눌러주세요."); + String isSend = sc.nextLine(); + if(isSend.toLowerCase().equals("y")) { + messages.add(new Message(msg)); + System.out.println("완료"); + } + }; + @Override + public void updateMessage(Scanner sc, Message message){ + System.out.println("현재 메시지를 무엇으로 변경하겠습니까?"); + String msg = sc.nextLine(); + System.out.println("변경하겠습니까? (변경하려면 Y)"); + String isSend = sc.nextLine(); + if(isSend.toLowerCase().equals("y")) { + System.out.println("완료"); + message.editMessage(msg); + } + }; + @Override + public void getMessageName(Message user){ + + }; + @Override + public void getAllMessageName(List users){ + + }; + @Override + public void deleteMessage(Scanner sc, List messages){ + + }; +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java new file mode 100644 index 00000000..0bd2940d --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -0,0 +1,195 @@ +package com.sprint.mission.discodeit.service.jfc; + +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.UserService; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Scanner; + +public class JCFUserService implements UserService { + @Override + public void data() { + List users = new ArrayList<>(); + users.add(new User("김경한", "pw")); + users.add(new User("이진용", "pw")); + users.add(new User("김수라", "pw")); + } + /// Create + @Override + public void createUser(Scanner sc, List users) { + String name; + String pw; + System.out.println("회원가입에 오신 것을 환영합니다."); + System.out.print("먼저, 사용할 이름을 작성해주세요 : "); + name = sc.next(); + + users.forEach(user -> { + if(Objects.equals(user.getName(), name)) { + System.out.println("이미 존재하는 사용자명입니다."); + return; + } + }); + + System.out.print("사용할 비밀번호를 입력해주세요 : "); + pw = sc.next(); + users.add(new User(name, pw)); + } + + /// Update + @Override + public void updateUser(Scanner sc, List users) { + System.out.println("1. 이름 변경"); + System.out.println("2. 비밀번호 변경"); + System.out.println("3. 이메일 변경"); + System.out.println("4. 전화번호 변경"); + int n = sc.nextInt(); + + switch(n){ + case 1: + updateUserName(sc, users); + break; + case 2: + updateUserPw(sc, users); + break; + case 3: + updateUserEmail(sc, users); + break; + case 4: + updateUserPhonenumber(sc, users); + break; + default: + break; + } + } + public void updateUserName(Scanner sc, List users){ + System.out.println("변경하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String pw = sc.nextLine(); + if(check(users, name, pw) != null) { + System.out.println("변경하고자 하는 이름을 입력해주세요"); + String rename = sc.nextLine(); + for (User u : users) { + if (u.getName().equals(name) && u.getPw().equals(pw)) { + u.setName(rename); + System.out.println(name + "에서 " + rename + "으로 변경되었습니다."); + return; + } + } + } else { + System.out.println("맞는 계정이 없습니다."); + } + } + public void updateUserPw(Scanner sc, List users){ + System.out.println("변경하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String pw = sc.nextLine(); + if(check(users, name, pw) != null) { + System.out.println("변경하고자 하는 비밀번호를 입력해주세요"); + String repw = sc.nextLine(); + for (User u : users) { + if (u.getName().equals(name) && u.getPw().equals(pw)) { + u.setPw(repw); + System.out.println("성공"); + return; + } + } + } else { + System.out.println("맞는 계정이 없습니다."); + } + } + public void updateUserEmail(Scanner sc, List users){ + System.out.println("변경하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String pw = sc.nextLine(); + if(check(users, name, pw) != null) { + System.out.println("변경하고자 하는 이메일을 입력해주세요"); + String remail = sc.nextLine(); + for (User u : users) { + if (u.getName().equals(name) && u.getPw().equals(pw)) { + u.setEmail(remail); + System.out.println(u.getEmail() + "에서 " + remail + "으로 변경되었습니다."); + return; + } + } + } else { + System.out.println("맞는 계정이 없습니다."); + } + } + public void updateUserPhonenumber(Scanner sc, List users){ + System.out.println("변경하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String pw = sc.nextLine(); + if(check(users, name, pw) != null) { + System.out.println("변경하고자 하는 연락처를 입력해주세요"); + String repn = sc.nextLine(); + for (User u : users) { + if (u.getName().equals(name) && u.getPw().equals(pw)) { + u.setPhonenumber(repn); + System.out.println(u.getPhonenumber() + "에서 " + repn + "으로 변경되었습니다."); + return; + } + } + } else { + System.out.println("맞는 계정이 없습니다."); + } + } + + /// Read + @Override + public void getUserName(User user) { + System.out.println(user.getId() + " " + user.getName()); + } + @Override + public void getAllUserName(List users) { + users.forEach(u -> { + System.out.println(u.getId() + " : " + u.getName()); + }); + } + + /// Delete + @Override + public void deleteUser(Scanner sc, List users) { + String name; + String pw; + int n; + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + + n = sc.nextInt(); + if(n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + }; + + System.out.print("삭제하려는 계정의 이름을 알려주세요: "); + name = sc.next(); + System.out.print("삭제하려는 계정의 비밀번호를 알려주세요: "); + pw = sc.next(); + + User target = check(users, name, pw); + + if (target != null) { + users.remove(target); + System.out.println("계정이 삭제되었습니다."); + } else { + System.out.println("일치하는 계정을 찾을 수 없습니다."); + } + } + + public User check(List users, String name, String pw) { + User target = null; + for (User u : users) { + if (u.getName().equals(name) && u.getPw().equals(pw)) { + target = u; // 리스트 안에 있는 "그 객체" + return target; + } + } + return target; + } +} From b2d739b88adc008eba0bd0d6c6aeeac66a13d9cc Mon Sep 17 00:00:00 2001 From: Alpha Date: Tue, 13 Jan 2026 15:15:54 +0900 Subject: [PATCH 03/35] =?UTF-8?q?=EA=B0=95=EC=82=AC=EB=8B=98=EA=BB=98=20?= =?UTF-8?q?=EB=AC=BC=EC=96=B4=EB=B3=B4=EA=B8=B0=20=EC=A0=84,=20=EB=82=B4?= =?UTF-8?q?=EA=B0=80=20=ED=95=B4=EB=B3=B8=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 33736 -> 50949 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 20147 -> 22447 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 19891 -> 21727 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../discodeit/app/JavaApplication.class | Bin 0 -> 1714 bytes .../discodeit/entity/CRUDInterface.class | Bin 200 -> 0 bytes .../mission/discodeit/entity/Channel.class | Bin 0 -> 1502 bytes .../discodeit/entity/DefaultInterface.class | Bin 149 -> 0 bytes .../mission/discodeit/entity/Main.class | Bin 3571 -> 0 bytes .../mission/discodeit/entity/Message.class | Bin 0 -> 1589 bytes .../mission/discodeit/entity/User.class | Bin 0 -> 1784 bytes .../entity/service/channel/CreateServer.class | Bin 1519 -> 0 bytes .../discodeit/entity/service/user/User.class | Bin 1122 -> 0 bytes .../discodeit/entity_/CRUDInterface.class | Bin 0 -> 201 bytes .../discodeit/entity_/DefaultInterface.class | Bin 0 -> 150 bytes .../mission/discodeit/entity_/Main.class | Bin 0 -> 3513 bytes .../mission/discodeit/entity_/Route.class | Bin 0 -> 2274 bytes .../{entity => entity_}/UUIDGenerate.class | Bin 454 -> 456 bytes .../service/GeneralCreater.class | Bin 1012 -> 1014 bytes .../service/channel/Channel.class | Bin 1680 -> 1683 bytes .../service/channel/CreateChannel.class | Bin 0 -> 370 bytes .../service/channel/CreateServer.class | Bin 0 -> 1569 bytes .../service/channel/Server.class | Bin 4770 -> 4777 bytes .../entity_/service/user/CreateUser.class | Bin 0 -> 2395 bytes .../entity_/service/user/Login.class | Bin 0 -> 3043 bytes .../discodeit/entity_/service/user/User.class | Bin 0 -> 3443 bytes .../discodeit/service/ChannelService.class | Bin 0 -> 146 bytes .../discodeit/service/MessageService.class | Bin 0 -> 607 bytes .../discodeit/service/UserService.class | Bin 0 -> 329 bytes .../service/jfc/JCFChannelService.class | Bin 0 -> 4458 bytes .../service/jfc/JCFMessageService.class | Bin 0 -> 6138 bytes .../service/jfc/JCFUserService.class | Bin 0 -> 7200 bytes .../reports/problems/problems-report.html | 663 ++++++++++++++++++ .../JCFMessageService.class.uniqueId1 | Bin 0 -> 2706 bytes .../stash-dir/JavaApplication.class.uniqueId0 | Bin 0 -> 1774 bytes .../stash-dir/Main.class.uniqueId0 | Bin 4225 -> 0 bytes .../stash-dir/Message.class.uniqueId3 | Bin 0 -> 1432 bytes .../stash-dir/MessageService.class.uniqueId2 | Bin 0 -> 607 bytes .../stash-dir/Server.class.uniqueId1 | Bin 3513 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 637 -> 1720 bytes .../discodeit/app/JavaApplication.java | 42 +- .../mission/discodeit/entity/Message.java | 11 +- .../discodeit/service/UserService.java | 10 +- .../service/jfc/JCFChannelService.java | 97 ++- .../service/jfc/JCFMessageService.java | 144 ++-- .../discodeit/service/jfc/JCFUserService.java | 58 +- 49 files changed, 937 insertions(+), 88 deletions(-) create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/CRUDInterface.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/DefaultInterface.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Main.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/CreateServer.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/user/User.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/CRUDInterface.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/DefaultInterface.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/Main.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/Route.class rename discordit/build/classes/java/main/com/sprint/mission/discodeit/{entity => entity_}/UUIDGenerate.class (53%) rename discordit/build/classes/java/main/com/sprint/mission/discodeit/{entity => entity_}/service/GeneralCreater.class (59%) rename discordit/build/classes/java/main/com/sprint/mission/discodeit/{entity => entity_}/service/channel/Channel.class (78%) create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.class rename discordit/build/classes/java/main/com/sprint/mission/discodeit/{entity => entity_}/service/channel/Server.class (81%) create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/CreateUser.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/Login.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/User.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class create mode 100644 discordit/build/reports/problems/problems-report.html create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId0 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Message.class.uniqueId3 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId2 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId1 diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index 238634be807745097db2a9d6ddac57142cf75517..0eafdc5963f7ea7a8fb77bad13e26a946b6d53ff 100644 GIT binary patch delta 5917 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 delta 57 zcmZqeV?NQ&G(kj`i2)3JWf&L)8X)Z0ISdR!JwUeZ#=sNe6B86BOG;=l6=-aBm1xce E07F*{U;qFB diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index f4129ebadef5ec6f5254802094e8cc40285402bb..7011096b803c13d7f759f3d0d3306dcd0f7b796d 100644 GIT binary patch literal 17 UcmZQx)_UaMM6cU+3=nVv06&WbtpET3 literal 17 UcmZQx)_UaMM6cU+3=ohH06#JXQ~&?~ diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index b1657b6a6864f302b71abca3fc17ed04429bb7b2..2001b16f834bfc403f6b3695da236e9aaaa40068 100644 GIT binary patch literal 22447 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 delta 163 zcmZ3#o^kVB#tkMCf{M*~moH3YKJ=FX47`{pUzJdptSTunIaktS@>3u!D&;Y`S4v{? zUa5-7snQ0M*GfxF{tCpcG7^)Y%6LpJl{J`rRaRoMshq^*wQ>fNRpmW+{zCx+1GDBv z#UJ7u4L*o$cJxqURhSf-e?!sflt84!@(+8y=j>)+V4S`Ft2{TvdZyaRilM@rr}@e< F0swr?JedFh diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.lock b/discordit/.gradle/9.0.0/fileHashes/fileHashes.lock index 1c1098cf376bf9bda2a6a08e83fb95dd13866291..b8293784acd42d1109938971501289b481e2e3c7 100644 GIT binary patch literal 17 UcmZS9oRIJ5aF#!o0SuUQ03{{^ApigX literal 17 UcmZS9oRIJ5aF#!o0Sp+$03{9s3IG5A diff --git a/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin b/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin index ae3ae0970a889e6051326b09ac6c69640dcaea3a..f7726eee5ba38200fdadd26563b8e19761b76229 100644 GIT binary patch delta 3096 zcmZvedpMNa9>*ziNtttmxhR8V#w|`^Y+>AT$(_BCoiwh)Aj(eYOigCncJ42QaoO=C zayc}yPndDfL2{QuZiiDLQK4hYruTh0XWriDdH?yW&-$*le(zdqhRxz1FXpc}iKd^w z9?BnWvNTf4_w}&}*@Pa(nH9a5V8#T**)YG!NQk$SjNJseLjug1)%(P#3$fZDcUppZ zY!xO(LHvj7kS_@HU#qe>L`8X{aInEX4{k{CO7AS;?7s+dXBJ?Fws!^IKMy4S#L0wG z{sGJBUaw^qZz;8c+^!$ynXyj}2I}>ifZSGZhcCHL=XoFRfpP+Y1T>z&YK{Jn9@Xav zBx7JXPsTmr;klM-kUP5o_s~>vN|qiUed0aDt^$G>IdM1Fqyme4HK_kN;4lVHc=SN5 z@2=kPG6)@%;Lw`Uq1T$VgDoI;q5@hN61kN)m$=Mq)dZnkB`o*dE4Sp|HyMw~Eh&k$i7MT5|p1IttMIjao=hYvy_pMYx^f7iJwC7Owme;x=O z>tT6;>MhVM5GM$QXuR82KWRhBnjpln3yZ7oj*`P?xYBeVeqKUn=B6zVZj5C zEChVonx24kpZw8Bvs@6`yTb{>DOtgi9VMqBIS4p_CAms@y5TK#(Lx}!ZH8sE>@qHj zt6&B3nH?S}N4up@hJ2ernB#&&uaw63$U=io1NvAz{c!Vl)oxxZx#J|vHQppenHpc}h5TNaYf4vrY&fNx0_ER=`QJ>POF5%V zz#B_MoqYaEUrar126Sxi0!%EPpj}%LHteTPbX2VF(7QP+$nG6KX3Iw$#j5UXhpJtUbir2Rx~Dt}}CS={z^|4`RmFU)0rSU~oAT4doq#^{$O z`@B)e?BP}-jex)I`BzcP@{c9ezW-LEsBPcXJagkJHL{MK?FxL{wocsZC+fOu>{Qy> zrY-b#x?@O<+=b1Ex)IW@0@qPUGrH9|I~h=z%A51LyWEL1MpQmszZ7BpJ8nSiLWmpQ z25IQv;^BnSl)9Hd);9<0dcR8R=8$|TcYK)=K8xSW%rfWgCYS$1|3zu zZ}N-D_=3BfymrMq+4lwr1$CX{byW66Z19&OW~dV{3geK*Fr(HlQ$n?m5%%!Z%zZe6zI&M{hptqvQA;H^WTfN+o=aK4%C6BuTvt6FYo6;u zy2DrGl@f_G!i*mdXjP`@hnDNcTempWBMr(8jrsexJx5Z<3L~XDbj|i7mCqrb56oD; zeoA%>f_})vWu!r&dB}SDSJ|{E9DJ8EY*zL4&XPRM)yt#Q#u%2?hI){;e=d1GXa#nZ zznb1BmSW`>t|C>o{U?COV6>za_uFuiI;O0Pe#$b>h?xl}%`Jm>7{!w14^32tM?)GP{=|54KGHBS?+g+9CA>RMJtg@5 z@o_t(u~dAqg_d-zd^&&iP@a3x(l<`ho+FnDsHB*cF2g3~<#ysEGUT0sxKWVXQA$Uo ztmR&VJAFuFjPT0bBS7zg7L7XgGyjL}y}(m5sZoC8ko=Y3!v+KwSq99+Ii#|woj$qo z!Vq_Awln>u_eoKt5j|2GEUNNr&6wFpiEr*~Ez%f@D!d`_eX90TdA1lwQSz(tC(pDO AvH$=8 delta 135 zcmcb=l5z8F#tkMCf|?D5j5W?5Z?9nh1K<3~S0w@_w@OM(J}a3x*-c7fa+#F)1Cf7s@ZXQ2p`S z>hiCZ{EbS!Fd$+VT0;m+Xv1!Xwi-wbp)AKWOfnVqZF!{0kZz`i`({IEXK3|QbB=Dv z2~{yo&Eov`O6b5ohJensw}>7$v$-ckMMQ9bhvXo`-pBal%l0eW#H$Q3HItTYkBpqw zZClTna#FX|Oj6Sw+19M9x~j>GU#jxd#N-Lhww08Y@OMRY^3cD=aHJlPa|F7D(9IFv zsFTLT0*{5U1=52C0a1qL&A+Z~uKiP8UJ=kwOUqEKTr#y}i|EE%65hrDgQ!v}9gVYK z=&cd^TGH&)#IJpu1C2uZ^+ZO8Cz ze<0x~ug;c~=8PEzw>_hzH37p6l6$kjE9!o+dUHcW4~|I~<#i+ZM7fumCEz1|wOpwD zUZ66o=8FQx89KH+c31Co5rfKa58Qj#XcX`3{k)eFPUxNd4Qx%9kdomJ)y z+6l)qs$$G4md@9YH-pZCZZizU>or8-3Z@la_U+M2wem#gij^Ylwi?IO+g6Tr*+uFd zTct}r#PuXlP2P+(bu@;1!+j+j zqKO`&eazvoR#IMUG+j+HP%;zM7I`C`HoC4BOf={UW?pud1ti1ZFe=<7r~da(zC z*hlTSALBTHX&fZpQJhB~uAmdu2NBoKEtGttrVp+ zH?hAIqyht1j$|N)WHvuXZ0h`r+)-uQ=x0aUI7M4sMwtF(F1k3*5Rc<;KoTnk;OMH- NpAI{X8>2XT$Ua3&FZBQb diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class new file mode 100644 index 0000000000000000000000000000000000000000..43b631347798147167e7dcfe638dea235627a3e3 GIT binary patch literal 1502 zcmb7DTTc@~6#k|cwp|t|_nRUJYFmU=ykfaXFhmUCLxIG{rJa-^yIZomCE-VzXkx`^ z;t%jg8PCiv?OOVvFLUOcIoIzy^XvEbp8(der6Yl)hLnLcdKhwN)`ex-mRmF5pPcbZ zz|gZMToG(AB=d!14HbG`CMJ*X1^Y=5XJ)YMfzs??(EPOg(5|2*V61*K){hD0EY; zmIJC%E9n@;n1*o!6PRS^Z|6BW+I_>IdzM?RJE1a^FT@H-o2oKx;1+H(Bt(_a==9KW z2eTUH4BW;1Uucyt{eU}!O{L*^G~A(Z_`a}h;VaD>lMpBwmc#A$e0RF<#?O(6V=yiO2C#lkEH~T+Aq!H|4cY3+r@G5*qNFa=8W0&P} zVUBo8&__zsNozy5gj`Z3iE1T@S(1>S0u0N_W+FrPG#=6Um@F4asyxNw6|f^C zt>8qMm?|%P?5I56HTYH6;CyHBMAzUF)@V41dwgcSv+b!a!6AL?)GqzasQncpPhyn0 zK~0F=Oe{~Ph22Jr{2gjWE>XnxS1h*4?Wf$pEUn5MvP5Z{Oua>>-Xe38d=q&62Mvo9 A;{X5v literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/DefaultInterface.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/DefaultInterface.class deleted file mode 100644 index 4dbc9304f697a6be751287ddf24ac9e0c7d1507f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmZ9GF$%&!5Jmq)&4QJU*KitJyC7Iuc!G5^kqODJWG8}Gv+w{ON=#Z`@wx}^^L@Pm z9N-)Z!ak&)^L@~0+-uI7BG;Njszr?@n%a{qY5dsPDVhw858|*SY+C>D-1&Ip^R<;= eg!LtjLy)6(LfHOSyE!NcgvB&4Ls(5NQ2qcpb}FC% diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Main.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Main.class deleted file mode 100644 index 55da5a2671f36fe35face539e783208a25308314..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3571 zcmbtX{Zmxe8Gg>P%Uzd65kDeo^okz=BP?RRWKmH90Sjn_V$hi6vU`QAyL-2H@2VuW zF%8B9Oq&>N5=*Q`8j?<@15QSWG;L=((;wRY&`$efr_ImV#w&>7NVG2L1OABq(C{V2xbd9!p5By2q@;4)$YE7}}Q!wj^> z;z_&Hwsb8T^g%(1Tz{#+s)_|gD!b(h%luf56*R<5(yqD54q8SmH<=d?aA?;;j}K*7 ztzeBGYw@7KvYah>>HILdT zW;Bp+fC@y7M8Ys*fv}MXnPJ_q1A5Fh?14Z+w@w)$JrL@b9zsuHTerNRBh{oo8%e!A zn!b8LO%ILDjtr(goR}S&uFJK?Ush8Slj(P)kh+s7`Vd525%yxAf<`}{M3cbcIVY66 zBT!m6{1w(RE*z{p;>A+}W%-M#>6x+AFUL~Dugwlmco++Olt26MEwm|U_oD*`=J|0~ zKYf++dlC^{j|;df_Dg5@wm><3O-*0DmL48eQx~N#%wGN^edAZ@!Rhpskqs(`6?6)$ za}0Kxd$$KBF{qp6#NYWkJ;(}R;aXMDyPr3dCluTRWgx$COW3KVzhx;kJc)d*d}^5J=C z3VQtrfqQTGe|T>sZnmCbU%(%l*W8kgvHV;T%=om^C7C6Cr6lLLAARU&I?_TCF@g0t z?{_4RCu1QAW1!KDC6ZCy3QB)D;m1it7*5Act4Rw{UCm$dUM0yXW54QXlVzFKhGS~_ z`X}kDzaW0;@pEeW@=$7ML`{7>l6sxp=jlDE;jwDzo^e0EE5lRi)9nr|sw+qcRNN0> z?V3!D?nXwBz!DkR9m!~~ZgojcnQPk2kQV9IEJL=loo>6|;QU+L?stJ86NjxQ?93|e ziq^_*t{K&1NdeKyKTU8YLd+a_=x38Vb&ES~Ep)P7i|5vlI!3RoIC^gak~0e$uI3Fb z2Ir5Gab~xBirWhGvyA3$$pla70gRYBSA~$#^#A^Utw7@0q9AMauHU?|(3} zwdh6w@UC9GhM5^7&S(;L_$v}_?f`w zd+=Kb3I*fy&Wd^a%c91R$l!(zT-4rDy9D#3U;&B>9%ZfFGxv zwdLBa6AXL`!-a7aNtq~R#_wF1)BzoOL_D z6>6~pI|%vX?0JHc^=RftNe6aQXD_w(pohI7?Bm(r2$MIz(`X{R&A5Q4NKgwdVLwS} z!!+7)o0^}I*56U<_jm?>!E^W7Oc$;EBVNZ4Nmub(4Aa}))RmFMjNpv@kYnfAvl-qyG~A=$M}ovF z*sJjJ%<7?{FVQCa-r|2jah3RFp2#=@c5+D>iW0c3w_p;wxrmkDXTUL9{A^y-7SaAo j>@UFEe7i7$%PgfeKW5+i_$fZX4fgohGe(#E2xb2P5U%7O diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class new file mode 100644 index 0000000000000000000000000000000000000000..cedcf964a920e5337fd2207c91194e5c0bd05857 GIT binary patch literal 1589 zcmb7E+fEu$6kP`qa2!xkQLu`)Rv0hS+Izhu4NVgpY#$Kc$KeEzfx*lSP5g*{N|QDz zZPSN-KtHPKK4(TmI(=wJW}kg#U)ElG4ZnW>_zBnA9V3W}jP*!&^rU*=SD3yu3|xJ?;iq1sw~x!;rK)j!*R&vOzsHa?K|s%{>iEC?>J2 zV+E_XIH_HEK5sKj*W z2FpD2KOn#2pZr4cFChw3Mf-23000!meM6C657KM zT9bVFt~dnkpMVO)29Tq6a|CFf;NrN9v6#k~Pv@BaLE%$3twC#ed;$1F^ToMc-36%d!yMZC?w%Kka_)aF8ST+9e z0emRqIkRgiWlhW`b7sz*?>pDoU%!9+1h9r34H0z35!Dexx4^);_1-eemUC*pJ2|(D zo8+hr z9ouPCPHa~r{gMuoThLp#y+Xhskj>pp=cXoqOzCe@)dc$Yq+{SZ%mPdq;9HdU%?acq%bRMUT)c zh|@~bNV^CRl9DtkN>cBXq>d>`omY|?O)?3}758aoI>q5 z(g;QH1bPsMNs{kk#up?%(Ix_R)UA{wijYmoARrWYif5$ZB-+90PVi_b_<1OJv=clQ z3Vsm^&US*wL%}PdV51W}5ei<#Y%6CjpkJ`eN7}R(Y%&zQ77Cv41W$#6>6r(fm#MMr zIdNkw{BBLR;S;THt>a~YU#C!cgf*VCQR6G_T@9AcFryfFM98W&KpOuGi9_I3i)$m` zN*Xjb*(S1KbhB-A$rfD_8v)(x7TvYb(qUYgHm>&2_ziMso8eqW7}wlCxcJ>N*Ouz) F_8(z$4$=Ss literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/CreateServer.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/service/channel/CreateServer.class deleted file mode 100644 index 1d607ce1d2de17f5883d3d9a7df92f43c1915210..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1519 zcmbtUTTc@~6#k|Zwv+_{!3!!D6{LVJD&8odf|r+qCN(7Twrn>r+HT42mdK-05+g4r zf)=8LM0~*TAcQDh;t%kr(B&T(6u3`HH>;C2^7L1VbT7y%SZ2+AmdyyJLm%(C?)ol2$Y zqw1)eh^Lf0CO7PuZR%<=5<|B#qL8WAuFgOD3NXtxH!<;GAX+#kR`hF0hC zk~6!wF`doLFXWz1g*+y?cM}5FnVZPXzulN#b>4h+GHcH46hR-rK?yZ74&g9Eg$tdw zc|wV4s$u9RL%`4<+EH%k3{{Qc-=Tx3#Zd_%8Fe_u(5|JDish13lH9U*%249m(o%7q z+lp@3+#XXb-5lkbu4uyogurMou*%};kp$ONTkjdxwFeCKo3*->qTI40zY_=#1aN}L zIdj=i?)ifAVs-uf6j`snS~Q5xSCya^Gf$dzf1c z-O>LAjxfmD4k8Wt5^r{WQ{`>d!vhRHOQYfR^v@p=N?9ZtDjHax7k1ml5cFbwYSJyv z)jfZ78TRe0cx+^=>b_msI{vAAPw_|>@hpwms`j8)9dTuq(7p45yLXA9IL3zz)lQp4 zIQ|#v{3k7;Z7`Nfo0@);iwUU6pOn)=FuGa_J!9hM0}~G!*)z0LXl1k(HhlzJcEe}M zimP9@jL^%`feM#V$V0^? wT&DAck9I_eWi`Tdrjyupk=NrbVpk}3l{^8kA833%SVp*5wA%|qs&J3=dnG(iL|WusrO*u%H*t%YxFIKoThs`q z17#Bx9q1jlbwFjWn7FODBz&h!4KNSG;Jxtp+x_E=olvO#(3z0?it0w~B08UIU6o<7!{zpAU24}D7DKV<>@HE> zRs2%*pclIQIn~54p$1@0jTR|8MO_07`e>SHjj5(+OY&(;YH3RXX}dbKYuYBjX!31Z z*C~38xW-$xPQa|MF#5P;eMjcq31+__*GHb5*ZNo9hxJLr-l26-6GdzeRQqJ7q0^GxW+5xMob96nu1S}0{*p$O4HfDXs@<;lKLBS`rGp}LH zLBbG*;o-=`rT-5vj6A%7N5h*pNr1Sz$}03x`dgWL96*7jDxRq#d0ItM4JBbPJl1rd F{07(G;Yt7i diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/CRUDInterface.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/CRUDInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..926c9d24c309ffaaf51d4d727ddaefa41315df77 GIT binary patch literal 201 zcmY+8!3x4K5JV@fwpuUZSLnrncTbAoNl^4EFF7jZ`hsL z*Zc7Vu*4`u#ITU2;;yzzdtNE$l+ip_PMVyQ=cK*z_cLGZkL#`WWUoR}iXOwb5Ut>) z&^Nxj6eK-EA}t9|4Dob!3fR>77ZXdBX@j2~Ok*W&R2g9MmpSj^5{7Ubo&(}g(MN)= PD*fr8)37lNGeY(Ok7Y1b literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/DefaultInterface.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/DefaultInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..09068c4ce5394965d0fb755747870c4dc3a9f713 GIT binary patch literal 150 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 literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.class new file mode 100644 index 0000000000000000000000000000000000000000..0a4cd4484088234832dd4c6147f473dd4dd65c11 GIT binary patch literal 1569 zcmbtUZBGkk-Z@;7?&L|Db7l?hM9V?T1D;*?Z@nGjpEjJm=i=>YqPf z0yv5@2}Dq*AgW>;>KU3Z7?%t^Z`hOi*u(|P^cd=gxy`*1hPuAwcpNdr6(m$NK&^Q_ zJL7s*f!->X=%bEI5QrD`^A5MYtmjxpAr-@R23?fz`YUBkTw4(3XX4fkO;nb}?2@*z za!o9hwawcVQMs}?|InZP#h+d7PM{er3R+dPp`D@aKLRr-(-J0c6LMb&9ppf`+@4G& z$79&RuuoilEbctqoUiyx%l@x(TFAtIbY0?##q0jk{muDR@%vw*ye{s{5%f;%Qt+{g z-S~u|C4eq@Jg;X>!?rDlA!b{by$rW4hW5VXyU+=A;Zp^gif-&-NSVcg?gnJ_0(V_r zwDlZ!&0@~to^IJ5_hx?9UCX(|O-nbYBnqL?S%PiPm8SFDG(0OkWtkTldbW}cIAyr& zrQT(b{2_+D#7-<$H2=3{adUO!=^U+Lf?ep9rEhOQACe0CRSaN|klv&!!%|s|T<$G# z!v;yo_(LS_kE4!Lbh>}i#KNloWL*>YR>k6DDRzz0q;gQ#AqD#wPP~^MY3e4=daX({ zP3kc;$ts*H6(%g_TVoON=KQJeD2^y{?8-ikK- ze))%*r$&fqW7adwi)W4LKv)GQYsW!w^BCe;K4}|X$sxwp|B&ZHc}aB>*<#5tt zd_f+G8->K(L$en2r-@4=Fo6!5xt+wI2aSZ9vRCnKZvyO13KPL&@@ delta 97 zcmZ3fx=3|HCnKZPWPJ|h$sgFoCm&@zz-R#CZC=GBz{==1S&qX5D51lcJXw~*6v&dA roXa80XfrvHQ)Ti7j=7A1ll?f&f#MRI=W#|dGTCc@Wk7s0?qYTT*smS= diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/CreateUser.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/CreateUser.class new file mode 100644 index 0000000000000000000000000000000000000000..8b3cc031f8702bb44eb3770746aff781f21cf656 GIT binary patch literal 2395 zcmbtW?Nd}`6#qT2aF=xzK>_itYYDM}T$M6&ku<_Y0kH*4&Gd4)$<^Jv%9ArWFxpPQzSeQBzHfcxx!&{XHSyWlD`S?`IOGLR|3%Um1{-j@WlD3%lfuJ$frKIL$ws<2|!{Xn;(w zL$QSQUTnZdhCIh~%rb&XKvPXqk1)7R{T-{pFm;BtWxl1RJ=lz=B*!}e2kkw`eQ<+RL)r|mCiWqxy-k4y+02n3<~yhlXu;9coP zDMQtxP}%o;?8$C>sy7jzwQtQWhn5><%U~>yA0ObubN_&`8{3vK$47e-*9ZQ^Tm?h< zLe}CAgC?)>;cl5&!-xCkznYWhC$IA>UoQq$N%Tnu#z*=o?ebo^Br1CZ!*+PF6T67) zPHx^}s9uIgr_vx!R);^8@+CZfj^P-EP9Bg;)3SYggx{F6$EW3;6*BLQ^U=W+4N0}D zLbk7s**9;{>TW?z((Mp%*}Z-CrxS~OtQ36Q?Zpe&LyQ;1t2e3Cs4VLR&Gw2C_A?w= z#`84CQ#J888eiKAY7sROUh-l;4iF0;RDhry*;YF`9;vwnV2FFQ3`Kk-o+69g-@lj) zDy=#kl<=w-hfq&w|M$A6rH*3h$?EWEX+mjwWuyuf#0Vf<*%GUuDBP_ecKF*8p|tYv1tfip?rpvcg3J2HQOYFXH&vnmymo5 zQkIa)NfP(%uJ4d>BC{ee1Lb&{qS&=WleMU+N*?w6?(Bl>FUUdq?5Do~K*Y5%HQrPH zEjFL1*k0@^&bo&e@1r^cj*XYa{_0MDUbg zB}$QtO43##4}Rq106o;}u@*;Z)o~P}6GeEJ_V=L}16YqCdh!xH_=)=4&yev8W#~6L zNdSH*2`cSvCW+w1F}y~O7vKj3&_ZEU;SO49lu34Opp8Z@TKyqeYN6Z?p%$;>1f}mJ x?M|jooNEexk041{Ct)8+i$8*BgM>4*G6QF6kLrxt{|2%|3`YO} literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/Login.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/Login.class new file mode 100644 index 0000000000000000000000000000000000000000..4f96522ce3e3a3476a51c2b78d2d8a7303a94422 GIT binary patch literal 3043 zcmbtWZEw?76n<_J>NGWNXekWnSbzdaU+`XdU4RWb7_hXkrG(Lqf$O-fsbi;pDReIg zwoXE;H0=Xu1r5YB(1gT?4WUvP+7FoaONjdyrk!gCHKjml`Qm$h?s<96bI!T;KmR@a z8^A7{iy?%tfQX1isA7npmWO3YmyLeuaPMhVaTuz0YKG?QW(X%!xoSjFEg&YM2I36$ z?1=5C1=2EIGHT5Djx1*i!oSm&f-fy=#++sUOF^Yxlh0&wD@r zl<>xHdSf>dkMDlxT^mhIT^aYrFHBv&T^hSs8oRkEhB%f8s29heABw@2RS zq<8fa1$_-G1gsRX3QY`4{GhI*=~7ma4MVjUB8GaF@?Dxt%?`-TSBrRq+eW!wMl;kX z)-beBV<ekvl9p;e!>~ecG9UH0V#&mG!KetD6VBu zP)T;of~H7&{AI6c>Z)wSkVGqQtu|sR*^|oEQ`c=0A>mDGELl<1B9Ujz7t9<{)8$(D z!24W7aX3XCreV7U)k@dkZM-93vxqI&%1}F<4NsC->NBli5%2NRZ=HX=j#AMG2zl(13u+8|uvb8bh!3!D=Fs__O;oBw zuB_Wn^?fkGR5cFhLlFl!nnmRF$Qcg&kcf|XVZt^C9_gU|VW{Ih+T|8{RjXU>)k#vH zF%?OKGwmhGjET9VtFZ_s~;*cP=1rUeok$O1wI& z^&7I|S`_uvOC z>#8sqgN}j#LxhPU!`kUi){J3uP?a)1dt@Q^$%1`NJUOi)|~vrDe|@vaV+}M@`2;H{*=Y`;%)fM{GGU ztb;3}7fKv7-s$8*>&6Q&9^@bS4qdiw)fVt2!}?k5KZ{5KUo)(Ju_|3X0qa;pkVEuc z1R|iT3{~{Z(3?anqjgcseXu`i6GA6F`7t1%i=JYjfWtUKZ`Jr1pO6+eet^x!kf_;b<>(%||h zNd5&$LO4lL>364`&NW^ME}s(*N5Qq5kcUcm`e+{pTSbq4+J-OyjaE+E VX_5`W#xTy3Bu0`Ee1&hY;(xw5b?g8D literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/User.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/User.class new file mode 100644 index 0000000000000000000000000000000000000000..620b4f9d06735516e9a9dee9363634b62b968fe7 GIT binary patch literal 3443 zcmbtWYg5!#7=8{e1VTVWMNwd#oqox z|3JUAGwrl!wKM*JPJdFT)90K7*j<9d*bm9cdCz-&@|^dazy5vp96&$5uSXTOX-F8T zMvXw@eRIi76$9HzjoE%6P~!)lW#$C-w|9)KFNV_8q*_cj(^sv5I_Lt4z>;>S+Cy!} z%+E_TJ3pT;bud@VX9C;JrzSirYiG>BO4q|cgN8-}+tDPjXOn2mY0h>6%M&;s1yT9N zcq|QAp0SM8Y+xsL321>k=y~R{!0z^ryCrGgoV{;lg0zkn?9s5-Kr8kMG^xB)U7-RK z>a+89Fd(q4y<2dNXb={>0P^mofDP8dkxq(GIO6=*KO zHll=%Q+Qp&X#;1_TZZlAvL9IF-HuGr^H}2)5gfN2$MzM>*QEDz2F~LGGs%#nfi+0p z3ANB?klS*hSjegcsr`n5iz=7GLpi-$riN8YT?9iCg7WDCUzP)`OzyF!kM~`ywJ(#~lHq z;JKu=HL>6ZE4)|w7 zv#p$rZQL8NBCIa$a;Ua^Gog``>x8J7UrCp30#kzzCKqv`@6J;$S4eO)y!ud%WoTV z-Nj-dW~Y@9q0DfKo1;{H>x*H?7u!Y$o9eca=ONQ^CT$+0O}Ir=K9hawa{~oDXu_8Q z>GqeUpz2Pec^(2oj_LcBuiK|SUE((~ORbiGIt;p~#Gy9ERt2y>3pI~?L5A0vT;pCq@pf^r{AXhc2sGtdDh{tAxc zAi4-~4`;oEy^kr%qE3gwk%h&XydQ=|$u9}CgrHv@lB)QAc{tLyz#P4V1*E7WORi4- zjrrGd#w4u+q3Q z*4U0U9;h_#iZ#9;YdlhE+#PGY7;D^JX?!Bq*g-C;d6Yj<{?G==pW%p5>)dHn|M(;s z(L)-aQqEdJgEf9MC@x6c^YLy+HgPM7c7|?yH*qV8CEdF5ZU;AUdya0;)9r;#+$uIV z>9Q$CAoQ~$2|``xV_Zu<#<<+^rJU7ET-B-VKm~Rak6VNnQTR$fK#`+l_7Y{E;8T2o PuPD(ed4zB99a{ebhLRUZ literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class new file mode 100644 index 0000000000000000000000000000000000000000..66e4e8384a824abb97cf2347faad39827f552d65 GIT binary patch literal 146 zcmX^0Z`VEs1_oOOc6J6PMh4^L{9OIwf}+g468+rF;^NHwJpGi+;^h34)XWn7;?$zD z%;Z#k=ZwU>ywsdv2$!9Kg^@uZE3qt5KPNFSUEe<`D>b=IU6GbBLg$gb`W4>UxG>(KR;kV-B9%a1L|)Z2GH~vzz*RD literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class new file mode 100644 index 0000000000000000000000000000000000000000..2d99e6c96af9d41b18c8aeae35d1afb1eb23538b GIT binary patch literal 329 zcmaKou}%Xq42J)-v`4Q{I`tWjp@bbVurO6+IKiIgtjbj`S0%Yhycz=!z(XOD04)=X z?L?pL|M$n|+dF`JToo7y-0H5Ce(%@@*|PWCS=q4HT|*qCCwE{?@;MgucU|C2V7^la zC5^IM`Lx-Q4g#fiqyi;UU{S3y(FZoN*2-FPch@hG>i5l&nrJ`9jH0O##z^LhpL~u< SewUc$e3AZR$7PHI%)S8Ji&vEZ literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class new file mode 100644 index 0000000000000000000000000000000000000000..552e1ff47c2b98163c2691f301a7c3a550ee11bc GIT binary patch literal 4458 zcmb7I`&U%g75)yOGY;2?B$_}|Fq0Jh+-9;6}Ng$xBVFjFAwsCr!Wht)`(f7juoT0j?=xj7UG>BR!+**W`M za0|?{gqrkF*k2Nhsm&FkxbA@q>9ddt#f8}lUcwxKO@U~GKi(J%MRb2dC>{?*BmQ70 z9*73DknWFbvE!kD=0AEQ;4d%TQChD?B3iiGUKMZ$?1eausu({|o>k<+T!Fl2YS$uq zNN@H#T0O|ZJPC2Wz=CXBodvR5r*(BjIr}oP5Q|(`tY8V23cNJ&M1og?!AW~_Wc`gcoCc($fC6uGfdV4ZRAO~J$VYLfu6nsnKvb{1< zxq!=}KOFHO2e~ffDac2Gz}#_s)d5L-jEqOL6M97`q6y5;&Y4P*hu-xoSc`89%m~zL zfnx$C(~(*60-hoKb@b&}$Dq+R>@!=sjJqwP11EjvwL!DzHd!$HIq5iSp1p6hwHj@G zg=&X`#@_z^Xq(y7=_oVK zcbb=5%}aySvcip0fsN+1fw8OY&+&K9X`}Z#sY$xrjW<)svSP#R9()E_ZhTi@LxNp< z!{zfnqy6MqN0-m+?J({Q8rL5?p=Dg?GCqBh=IbzFhBlv+E~iM9tGb+wLm8ImNFG|t%OO!DpT%7I%=f4eKO_Bzh?jU z73@#!uW1Zg`@P6OjT=8;I&7KxPbT>f75oTqGulJC7E|>o1ApNJKxNK)Q6>%};6hM= zh9iVMo-zp$dc0nZS21lYyAQ}6^$J2bDv%+wX>ukxB}3W~R?vV5<>H}tnQ??&=4F9u zl(65Cu*;@_?FK`8%fVVT7Gc?1amdH)7=7648@<;;Us^Td)MsXIm#iMWeX@wKocPS1 z*75Xlqe)qCTJUp$LNf*a^Xlg&=JP6?RPalg z&oit-DLwO^f);rP%#3Lb(c_vMX9S!=Y$cm@gp<(xrUm(Ps*!h^GDbD>?qIeB2pgzRGs|k?I-Puv&Z-X8MO3{h z#vt1|=_1|yLY2C>h|yZg%UfWMye6ue8V+l*z3SmGSG*O`fEwPX#zJ!LEN1BSAqMPo zj!9TPZ6m-lm4HRG9D&)@x*9lEsWv*`J+wNQuw=HJl!UGJMuJES)YICa7S?nvAtM;@qKp>k zYK$e36K1NXI@%NqXgflZk)1+E}US_0eE_&P;sf!SC@07Y1ZS zxx>0V&Q~aMJbFy?+d*bupF7k5YhklMXX?f22--^DQX|2z7GG5njUH=iESk!H%F2X| zdz%}zX~Ykv$R~QKlqE++sY=#ZtJx^rV>un`Y++w8-WT~c`GgzyNq@3cvX>r^Uwf%+ zyS*|@m)k4md);Qs9VV;&;nDbq)=sOAIv<`0EKVFa*qx{W%wir&^<}beDh;dgxW)|q zLSXe2il<}Fg+B|t@@!E?flV`3u#-8Av-%ffHQvG+>}C%w8OgPcOG4O#E_BoM+1PG@Nu#!6 z^x$Kj)l2zIh_B#t;jD{|lEAej&i_zA;%tz%Z%f!d5$ASkw*0=s#vu`n&>ROcr)49k zOquQ;!QPZ>yh;90lpA#sG9dp=4${d%vkanP91^I=8wShO73}4pPT&hy5G=F@{kY}m{31{=r{sMtpQ zr8q$!OZ+m7mvj6Hy)1K}*sF(hX+5YtE&igpu zjPn!4GT3XEU$w*hC(>h5{AWY>#dsQQ%2<-|H!PK4mSha$6jM$Lou+g@GUf1nxshkt z;l7QL2b9s(0j{(@sy7lE@Zlp!;BCzC9D#~UyM%n z-*Q;mC@PaNQB~l?#7YkAn2;1OB*@7JSKwZfQJFu`|MXw^14+!UP%qeQry;;_4$?x6 zXCL7?^~4cMhOrNG@jJ^-Sr+UvCr5T&N~5eqk!GQoBT?|L7g_Y~sxP^ijvG8A4L5O% m?==kT+k|n~dJbC8A?x|jdX8An$B=(l@lfuM_!ItuCI1H&OjF(f literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class new file mode 100644 index 0000000000000000000000000000000000000000..6955d4ec28a1627293f77dcb506b15710569511e GIT binary patch literal 6138 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 literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class new file mode 100644 index 0000000000000000000000000000000000000000..5be6fc4360cbdd04ab6d0bdcfd6e971fd42e141d GIT binary patch literal 7200 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 Hr6cD*TH%9f literal 0 HcmV?d00001 diff --git a/discordit/build/reports/problems/problems-report.html b/discordit/build/reports/problems/problems-report.html new file mode 100644 index 00000000..4c5d4cfa --- /dev/null +++ b/discordit/build/reports/problems/problems-report.html @@ -0,0 +1,663 @@ + + + + + + + + + + + + + Gradle Configuration Cache + + + +

+ +
+ Loading... +
+ + + + + + diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..b3f20c4276d3c47b6561fc30ffc2410d39dbd258 GIT binary patch literal 2706 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 CAM3FI literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId2 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId2 new file mode 100644 index 0000000000000000000000000000000000000000..fcab91a37da9fffc62889b83e412abccc1963bb5 GIT binary patch literal 607 zcmbVJK~BRk5L}ni&_YT}cmoO-jKnd31P4w54iVgqvx;0fPGvil_!xG>(KR;kV-B9%a1L|)Z2GH~vzz*RD literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId1 deleted file mode 100644 index 336c8debc2918d419bb9db2f7631e4bcb5145454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3513 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 literal 637 zcmd;N2xfF<(qqtB%`D+%Xiv>6$tU}zL%Xe&xhEJ+n&XamZo z776G}lnF335IsCF+~Cw-koCrY&g>I2tX7?o2r_xJE=tZsyZ{NF|(*iD06V)RRY2N2;!etj{c3ls+v*=J<Ub zfFVN*m^!d*|GHYM35S~Y#CGiZ(a9{#$SB9iz`y{c7#P$UnT1t#fxHGFhJyw;3n&3n z%W0%%>};ZMs&A%mu5Y1lsc)sv$;HjX%f~OEX3fx=l~|StRK=)jqh}jzB4iC>3)|`0 z2Rk^M2tv3Fj(Se+&Mq#VuAy$B?)v7SkPy%Tt5o;U^Yrv`ahH(=b0xj?e0<&I!E8BS zJwIoE_W*q}0dWbih)AGbP-w7zh`yPDfFW1}=YC$e<`^caX6Va}+=hX8-^k CEUe@J diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java index 191e8f80..e37c24d4 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -3,17 +3,49 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.jfc.JCFChannelService; +import com.sprint.mission.discodeit.service.jfc.JCFMessageService; +import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.ArrayList; import java.util.List; +import java.util.Scanner; public class JavaApplication { public static void main(String[] args) { - List users = new ArrayList<>(); - List channels = new ArrayList<>(); - List messages = new ArrayList<>(); + System.out.println("프로그램을 실행합니다."); + boolean run = true; + boolean menu; + Scanner sc = new Scanner(System.in); - /// TODO: Test Code Genenrate - users.add(new User("김경한", "rlarudgks")); + JCFMessageService ms = new JCFMessageService(); + JCFUserService us = new JCFUserService(); + JCFChannelService cs = new JCFChannelService(); + + /// User getname 부분 잘 되는지 테스트하기 + us.createUser("김경한", "rlarudgks"); + us.createUser("강감찬", "rkdrkacks"); + us.createUser("이순신", "dltnstls"); + us.getAllUserName(); + + /// User edit 부분 테스트하기 +// us.updateUser(sc); +// us.getAllUserName(); + /// User delete 부분 테스트하기 +// us.deleteUser(sc); +// us.getAllUserName(); + + /// Server + /// Create, Update Test 완료 + cs.createServer("스프린트"); + cs.createServer("커뮤니티"); + cs.createServer("김경한의 이모저모"); + cs.createServer("강호동의 헛소리"); +// cs.updateServer(sc); + + /// Read, Delete +// cs.readServer(sc); +// cs.deleteServer(sc); + cs.readAllServer(); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index 9cd3d536..8220f609 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -27,12 +27,11 @@ public Message(String content){ } public UUID getId(){return this.id;}; - public long getUpateAt(){return this.updateAt;}; + public UUID getSendChannel(){return this.channelId;}; + public UUID getSendUserId(){return this.userId;}; + public String getContent() {return this.content;} + public void setContent(String content) {this.content = content;setUpdateAt();} + public long getUpdateAt(){return this.updateAt;}; public long getCreateAt(){return this.createAt;}; public void setUpdateAt(){this.updateAt = System.currentTimeMillis();}; - public void editMessage(String msg){ - this.content = msg; - setUpdateAt(); - }; - public void sendMessage(String content){}; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java index ab6f8420..3855aeea 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -6,10 +6,10 @@ import java.util.Scanner; public interface UserService { - void data(); - void createUser(Scanner sc, List users); - void updateUser(Scanner sc, List users); +// void data(); + void createUser(Scanner sc); + void updateUser(Scanner sc); void getUserName(User user); - void getAllUserName(List users); - void deleteUser(Scanner sc, List users); + void getAllUserName(); + void deleteUser(Scanner sc); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index b01646fe..049b4097 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -1,16 +1,105 @@ package com.sprint.mission.discodeit.service.jfc; import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.ChannelService; import java.util.ArrayList; import java.util.List; +import java.util.Scanner; import java.util.UUID; public class JCFChannelService implements ChannelService { - public void data() { - List channel = new ArrayList<>(); - channel.add(new Channel("스프린트")); - channel.add(new Channel("커뮤니티")); + private final List channels = new ArrayList<>(); + + /// create + public void createServer(String name) { + channels.add(new Channel(name)); + } + + public void updateServer(Scanner sc) { + System.out.println("변경하고자 하는 채널명을 알려주세요"); + String name = sc.nextLine(); + + Channel result = check(name); + + if(result == null) { + System.out.println("해당 서버가 존재하지 않습니다."); + return; + } + + System.out.println("현재 채널명 : " + name); + System.out.println("무엇으로 변경하고 싶은가요? "); + + name = sc.nextLine(); + + result.setName(name); + System.out.println(result.getName()); + System.out.println("잘 변경되었어요!"); + } + + public void readServer(Scanner sc) { + System.out.println("조회하고자 하는 채널명을 입력해주세요"); + String name = sc.nextLine(); + Channel result = check(name); + + if(result == null) { + System.out.println("해당 채널이 존재하지 않습니다."); + return; + } + + System.out.println("해당 채널에 대한 정보를 알려드립니다."); + System.out.println("채널명 : " + result.getName()); + System.out.println("채널ID : " + result.getId()); + System.out.println("채널생성일 : " + result.getCreateAt()); + System.out.println("채널수정일 : " + result.getUpdateAt()); + System.out.println("==================="); + } + + public void readAllServer() { + for (Channel ch : channels) { + System.out.println("채널명 : " + ch.getName()); + System.out.println("채널ID : " + ch.getId()); + System.out.println("채널수정일 : " + ch.getUpdateAt()); + System.out.println("채널생성일 : " + ch.getCreateAt()); + System.out.println("==================="); + } + System.out.println("현재 총 채널수 : " + channels.size()); + } + + public void deleteServer(Scanner sc) { + String name; + int n; + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); + + n = sc.nextInt(); + sc.nextLine(); + if(n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + }; + + System.out.print("삭제하려는 채널명을 알려주세요: "); + name = sc.nextLine(); + + Channel target = check(name); + + if (target != null) { + channels.remove(target); + System.out.println("채널이 삭제되었습니다."); + } else { + System.out.println("일치하는 채널을 찾을 수 없습니다."); + } + } + + public Channel check(String name) { + for (Channel u : channels) { + if (u.getName().equals(name)) { + return u; + } + } + return null; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index c46e639f..75d5d834 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -1,52 +1,114 @@ package com.sprint.mission.discodeit.service.jfc; +import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.MessageService; -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; -import java.util.UUID; - -public class JCFMessageService implements MessageService { - public void data() { - List messages = new ArrayList<>(); - messages.add(new Message("테스트용 메시지")); - messages.add(new Message("테스트용 메시지2")); - messages.add(new Message("테스트용 메시지3")); - }; - @Override - public void createMessage(Scanner sc, List messages){ - System.out.println("보낼 메시지를 입력해주세요"); - String msg = sc.nextLine(); - System.out.println("해당 메시지를 전송하시겠습니까? 보내려 하면 Y를 눌러주세요."); - String isSend = sc.nextLine(); - if(isSend.toLowerCase().equals("y")) { - messages.add(new Message(msg)); - System.out.println("완료"); +import java.util.*; + +public class JCFMessageService { + private final List msgs = new ArrayList<>(); + + public void createMessage(Scanner sc, Channel ch, User user) { + System.out.println("현재 메시지를 보낼 채널은 " + ch.getName() + "입니다."); + System.out.println("현재 메시지를 보낼 사람은 " + user.getName() + "입니다."); + System.out.println("무어라 보내고 싶으신가요?"); + + String text = sc.nextLine(); + + System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); + System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); + String n = sc.nextLine(); + if(Objects.equals(n, "0")) { + System.out.println("처음으로 돌아갑니다."); + return; + } else if (Objects.equals(n, "1")) { + msgs.add(new Message(ch.getId(), user.getId(), text)); + System.out.println("처음으로 돌아갑니다."); + return; + } else { + System.out.println("잘못 입력했습니다. 다시 메시지 입력 부분으로 돌아갑니다."); + createMessage(sc, ch, user); } - }; - @Override - public void updateMessage(Scanner sc, Message message){ - System.out.println("현재 메시지를 무엇으로 변경하겠습니까?"); - String msg = sc.nextLine(); - System.out.println("변경하겠습니까? (변경하려면 Y)"); - String isSend = sc.nextLine(); - if(isSend.toLowerCase().equals("y")) { - System.out.println("완료"); - message.editMessage(msg); + } + + /// update logic + public void updateMessage(Scanner sc, User user) { + readMsgForUser(user); + + System.out.println("어떤 것을 수정하고 싶나요?"); + String id = sc.nextLine(); + System.out.println("무슨 내용으로 수정하고 싶나요?"); + String context = sc.nextLine(); + System.out.println("지금 작업중입니다."); + msgs.forEach(m -> { + if(m.getId() == UUID.fromString(id)){ + m.setContent(context); + System.out.println("성공!"); + return; + } + }); + System.out.println("해당 내용을 찾지 못했습니다."); + } + + public void readMsgInChannel(Channel ch) { + UUID chId = ch.getId(); + boolean capture = false; + + for(Message msg : msgs) { + if(msg.getSendChannel().equals(chId)) { + System.out.println("보낸 사용자 : " + msg.getSendUserId()); + System.out.println("보낸 내용 : " + msg.getContent()); + capture = true; + } } - }; - @Override - public void getMessageName(Message user){ - }; - @Override - public void getAllMessageName(List users){ + if (!capture) { + System.out.println("해당 서버에 보낸 메시지가 없어요."); + } + } + + public void readMsgForUser(User user) { + System.out.println("당신이 보낸 메시지는 아래와 같습니다."); + UUID uid = user.getId(); + List msgList = new ArrayList<>(); + for(Message msg : msgs) { + if(msg.getSendUserId() == uid) { + msgList.add(msg); + } + } - }; - @Override - public void deleteMessage(Scanner sc, List messages){ + if(msgList.isEmpty()) { + System.out.println("아쉽지만 아무것도 없네요!"); + return; + } - }; + for(Message msg : msgList) { + System.out.println("ID : " + msg.getId()); + System.out.println("ChannelID : " + msg.getSendChannel()); + System.out.println("Context : " + msg.getContent()); + System.out.println("==============="); + } + } + + public void deleteMsg(Scanner sc, User user) { + readMsgForUser(user); + System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); + String id = sc.nextLine(); + for(Message msg : msgs) { + if (msg.getId() == UUID.fromString(id)) { + System.out.println("해당 메시지를 삭제합니까? : Y or any Key"); + String ins = sc.nextLine(); + if(ins.equals("Y")) { + msgs.remove(msg); + System.out.println("성공!"); + return; + } else { + System.out.println("초기로 돌아갑니다"); + return; + } + } + } + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index 0bd2940d..593699e2 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -9,21 +9,16 @@ import java.util.Scanner; public class JCFUserService implements UserService { - @Override - public void data() { - List users = new ArrayList<>(); - users.add(new User("김경한", "pw")); - users.add(new User("이진용", "pw")); - users.add(new User("김수라", "pw")); - } + private final List users = new ArrayList<>(); + /// Create @Override - public void createUser(Scanner sc, List users) { + public void createUser(Scanner sc) { String name; String pw; System.out.println("회원가입에 오신 것을 환영합니다."); System.out.print("먼저, 사용할 이름을 작성해주세요 : "); - name = sc.next(); + name = sc.nextLine(); users.forEach(user -> { if(Objects.equals(user.getName(), name)) { @@ -33,42 +28,50 @@ public void createUser(Scanner sc, List users) { }); System.out.print("사용할 비밀번호를 입력해주세요 : "); - pw = sc.next(); + pw = sc.nextLine(); + users.add(new User(name, pw)); + } + + /// 테스트 코드 작성용 + public void createUser(String name, String pw) { users.add(new User(name, pw)); } /// Update @Override - public void updateUser(Scanner sc, List users) { + public void updateUser(Scanner sc) { System.out.println("1. 이름 변경"); System.out.println("2. 비밀번호 변경"); System.out.println("3. 이메일 변경"); System.out.println("4. 전화번호 변경"); int n = sc.nextInt(); + sc.nextLine(); switch(n){ case 1: - updateUserName(sc, users); + updateUserName(sc); break; case 2: - updateUserPw(sc, users); + updateUserPw(sc); break; case 3: - updateUserEmail(sc, users); + updateUserEmail(sc); break; case 4: - updateUserPhonenumber(sc, users); + updateUserPhonenumber(sc); break; default: break; } } - public void updateUserName(Scanner sc, List users){ + private void updateUserName(Scanner sc){ System.out.println("변경하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - if(check(users, name, pw) != null) { + + if(check(name, pw) != null) { System.out.println("변경하고자 하는 이름을 입력해주세요"); String rename = sc.nextLine(); for (User u : users) { @@ -82,12 +85,12 @@ public void updateUserName(Scanner sc, List users){ System.out.println("맞는 계정이 없습니다."); } } - public void updateUserPw(Scanner sc, List users){ + private void updateUserPw(Scanner sc){ System.out.println("변경하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - if(check(users, name, pw) != null) { + if(check(name, pw) != null) { System.out.println("변경하고자 하는 비밀번호를 입력해주세요"); String repw = sc.nextLine(); for (User u : users) { @@ -101,12 +104,12 @@ public void updateUserPw(Scanner sc, List users){ System.out.println("맞는 계정이 없습니다."); } } - public void updateUserEmail(Scanner sc, List users){ + private void updateUserEmail(Scanner sc){ System.out.println("변경하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - if(check(users, name, pw) != null) { + if(check(name, pw) != null) { System.out.println("변경하고자 하는 이메일을 입력해주세요"); String remail = sc.nextLine(); for (User u : users) { @@ -120,12 +123,12 @@ public void updateUserEmail(Scanner sc, List users){ System.out.println("맞는 계정이 없습니다."); } } - public void updateUserPhonenumber(Scanner sc, List users){ + private void updateUserPhonenumber(Scanner sc){ System.out.println("변경하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - if(check(users, name, pw) != null) { + if(check(name, pw) != null) { System.out.println("변경하고자 하는 연락처를 입력해주세요"); String repn = sc.nextLine(); for (User u : users) { @@ -146,7 +149,7 @@ public void getUserName(User user) { System.out.println(user.getId() + " " + user.getName()); } @Override - public void getAllUserName(List users) { + public void getAllUserName() { users.forEach(u -> { System.out.println(u.getId() + " : " + u.getName()); }); @@ -154,7 +157,7 @@ public void getAllUserName(List users) { /// Delete @Override - public void deleteUser(Scanner sc, List users) { + public void deleteUser(Scanner sc) { String name; String pw; int n; @@ -162,6 +165,7 @@ public void deleteUser(Scanner sc, List users) { System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); n = sc.nextInt(); + sc.nextLine(); if(n == 0) { System.out.println("처음으로 돌아갑니다."); return; @@ -172,7 +176,7 @@ public void deleteUser(Scanner sc, List users) { System.out.print("삭제하려는 계정의 비밀번호를 알려주세요: "); pw = sc.next(); - User target = check(users, name, pw); + User target = check(name, pw); if (target != null) { users.remove(target); @@ -182,7 +186,7 @@ public void deleteUser(Scanner sc, List users) { } } - public User check(List users, String name, String pw) { + public User check(String name, String pw) { User target = null; for (User u : users) { if (u.getName().equals(name) && u.getPw().equals(pw)) { From afab9e26b141594b3cf519b087416e653749dfbd Mon Sep 17 00:00:00 2001 From: Alpha Date: Tue, 13 Jan 2026 17:29:22 +0900 Subject: [PATCH 04/35] =?UTF-8?q?=EC=9E=91=EB=8F=99=20=ED=99=95=EC=9D=B8.?= =?UTF-8?q?=20=EB=A6=AC=ED=8C=A9=ED=84=B0=EB=A7=81=20=EC=A7=84=ED=96=89=20?= =?UTF-8?q?=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 50949 -> 50949 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 22447 -> 22447 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 21727 -> 22203 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../discodeit/app/JavaApplication.class | Bin 1714 -> 6578 bytes .../discodeit/service/UserService.class | Bin 329 -> 281 bytes .../service/jfc/JCFChannelService.class | Bin 4458 -> 4905 bytes .../service/jfc/JCFMessageService.class | Bin 6138 -> 6718 bytes .../service/jfc/JCFUserService.class | Bin 7200 -> 8029 bytes .../JCFMessageService.class.uniqueId1 | Bin 2706 -> 6433 bytes .../stash-dir/JavaApplication.class.uniqueId0 | Bin 1774 -> 6578 bytes .../stash-dir/Message.class.uniqueId3 | Bin 1432 -> 0 bytes .../stash-dir/MessageService.class.uniqueId2 | Bin 607 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 1720 -> 1721 bytes .../discodeit/app/JavaApplication.java | 261 ++++++++++++++++-- .../discodeit/entity_/CRUDInterface.java | 7 - .../discodeit/entity_/DefaultInterface.java | 5 - .../mission/discodeit/entity_/Main.java | 61 ---- .../mission/discodeit/entity_/Route.java | 58 ---- .../discodeit/entity_/UUIDGenerate.java | 9 - .../entity_/service/GeneralCreater.java | 25 -- .../entity_/service/channel/Channel.java | 42 --- .../service/channel/CreateChannel.java | 4 - .../entity_/service/channel/CreateServer.java | 17 -- .../entity_/service/channel/Server.java | 82 ------ .../entity_/service/user/CreateUser.java | 38 --- .../discodeit/entity_/service/user/Login.java | 26 -- .../discodeit/entity_/service/user/User.java | 59 ---- .../discodeit/service/UserService.java | 2 +- .../service/jfc/JCFChannelService.java | 29 +- .../service/jfc/JCFMessageService.java | 38 ++- .../discodeit/service/jfc/JCFUserService.java | 51 +++- 34 files changed, 336 insertions(+), 478 deletions(-) delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Message.class.uniqueId3 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId2 delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/CRUDInterface.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/DefaultInterface.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/Main.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/Route.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/UUIDGenerate.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/GeneralCreater.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Channel.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Server.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/CreateUser.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/Login.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/User.java diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index 0eafdc5963f7ea7a8fb77bad13e26a946b6d53ff..13545d612bc1b7b9ec23be2e8699bc4a09069619 100644 GIT binary patch delta 573 zcmZqeV{YwZ-VnFc!K~P*DmkSrv$QHXF)Kf-v?R-@up-+$zam#aBW^1DTLCR|i%APY zqjk&9w6S0aF>IcE(L;3dft4JS&-$uuUh6x7ZSu>mdVwjk_8i-|;Cs>0{fRr&%u<9l ztT`1|obvBp6MlV)>|fEk#j|8#vCn4xz3q$wn-?>G`4rB}^U!YRGbIf^hRFvaZsf=_-SDtBgs%wh3oVcd`-1j+q^7?sBn=21^F-zq5YH0<<*DN}pm&X;i<7;xm z&sUpv8?RKGeEYDpMB8KQP3Jyy>;H+L{hZawy>99+kcsX(kg;{qvlnKugxWzD!pQUTOZZEdvU%`o8(P!|SD1^cU5vube->0fo4j z8oL_=5^NtNi+yA=y50&D@?($`(w3jLC26<0tnptP8KBVQwFz?GiwoCJ?7H*p+B3nK zK%p%nR+jDDyOX$=p4s>#yW>&aW`(228Rg!J$ShxCd_ijiOS)w9>Wk;EgMGJ?mxYmm HL2)AhIS>kZ delta 573 zcmZqeV{YwZ-VnFcAu&I>yu`@7Dzzxt*f=w}D&M54uspl4AgxqDX4$mjdBW@d{8;{J zDqFy+XPs;qLJXTHU-S^2d|)NVnNo7ehIV4M81t6t#0+0=)BZ`w=SJUc!0R*DJN zrnPx|0(Uj;xyNN$uQJWayxYe3S#t7)S^AUL?w&1ht$JCbaOfnnGfJCz_Nt2R21*&KL zMF>2_~BGM3$`@Y<=GjBooU`$x{2{C>ZzHoMMx|4yNo4DAs`Og{`4{d%!*%KF{L zn|PTS1giShPQTaUy7bGQGcvuN;_{Q%&vV*bdBBTV;;PYZ$ty8yEq8Jr@YH%~cXRKQ zKPz_|zfzif`>?dctU0e){w0vQS$r)=-` zV(asnbNc+6=|G(eEP&R<>{*%HUiWm{(k$znkH4|`PYyidTCe|Xv+?Y!9mRsLxSX2B z6#TD()t_Vns(&o`dGf;SUeEI9JlkeGFuw;BQv7%#-|I%r-xt4o+4phGlm-e3J}nU3 zb@WPJkJ4xPwU>(y0fqQy&ilGG`SiCf5vzVyKC;sQ3Ry2X*L~E)<@o)EYkJz76}f>z zMvxZJl!qd&^>w?{@IAFfuSG GZUg{1g$>vM diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index 7011096b803c13d7f759f3d0d3306dcd0f7b796d..77f5339b15f3378cd685f008e2d98265fda0deb3 100644 GIT binary patch literal 17 UcmZQx)_UaMM6cU+3=r@Q06)0}+W-In literal 17 UcmZQx)_UaMM6cU+3=nVv06&WbtpET3 diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index 2001b16f834bfc403f6b3695da236e9aaaa40068..bf0ab0dffd2661d8e5ab522a2e644ac0583b07d5 100644 GIT binary patch delta 489 zcmZ3#o^kzp#tq573U5VZmM<~BptXS|U9x%g#q$gdjI+0u+J-ZL0o%^WilM@rr}=6# zDr`D5^(?Pp_{o^HhnL^rKe!UCGFrzLqEh|(=7)YM%=M}F3)kE36pP^6yyUV&v-UKw zs;DWQ5LJR_fwZ16kkABTMGzKypkQlKOdh(-YkG#%U` zrh!wRonFGUO7p62*`2a@rn~6F0tVUYhaMv92cC*T%Y5sr4(Y z9#`CsugPFVQF|I7iiAP_LNm7QvGt~NpSkt_#Ls@t>f~MrG1gWTqC?6KQ^$7m;@eL= z=P_B{n)S4H9taRf0SyA3NDS+(l)h;0DfVf2{(145hgPyJU62=7yaOg_z4I H2{IP|FAa-N delta 489 zcmZ3#o^kzp#tq573j6-|sp*El?UipbySC1`g`I(carV}yf-MYSz_w$uVyN)uX};Qw z3PB%vAADx+XK8CNQY@N&_!n5^lZPLmD&K5==$FD=f3(40O=D+Idfx(pLv009_JdW~ zeM*O@;=2H(^^AdpCJ-xvu)xdzIVXa98|ycoDt6o^J&_r#0VRn8ga7~l literal 17 UcmZS9oRIJ5aF#!o0SuUQ03{{^ApigX diff --git a/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin b/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin index f7726eee5ba38200fdadd26563b8e19761b76229..1dd4966f233212873887a840659f113660fcb57c 100644 GIT binary patch delta 795 zcmcb=l5zK1#tkMCjJcCdB@PJmClx(h{-DN(0SrQwC%={WA+YE)$DGe^_j^DES8u*6 zslljm%-L0Xvs-a0RFv^Q6r6ajJkhf4)>DXh*v!d)r2+)*zWKdqCEu)Ks9@-1S7`-- zhpZDCUVqnAh6)N!j+G7&c)qf~WbXd+)1ZRJo0m#!FbeS1*cMK+ycEZCapXKA{KIga;aQ^fTNmh zA>Wx`X{f@pllRI6@-v5Id^#>B0u@W2%qkxs5Sr!etZwb|2_hI)zS&p)79$gv=SIaJ z;u{Sv@NRbWn8#CZ43w4xVnGlV&`S$!+}C_4N8&{Pf!$IeZ-Ihxs48L&O1qaAy=&s) zJ!^mJ(}r?P6&aTo>~L@0uA+7H#?kd(+j%fmFfU-U{@GOZ^jXWYdX~RS^8zrHY+lU# z&qKSN&y+OyfC|tZ^7~`}-!o;)cKh4M|6kO4REnwM@5lR$3le`%VNdvdoMExv zVoViNX4UUGwsFDtqNDp0cc_`A2w^JuW$GBQJxNnz`JQjtdJ2vOm?}b#t~Yonxx)SE z(Zh3J^xrPQRFS!H&9%S}+aH;#Ii@GBRPaVpAr1}r;tl-?zdl9wuV~%kS+cO$XYxjG uVbh0Iz3Wb_WV-o(O?K!HsqIMGpt_279G>t;;lYL#+pHhjJ(;l)qyhl#e(Wg# delta 87 zcmV-d0I2`FtpVSu0kAX}0bi3f7{HSa8St|e8Xy6aWgAG7#Tyut^&3dDRU9AzvyB}I t0h6vCcauFIF_VTLN0a3rNs~q(N3*3M(g6Yp`LQAR7qKuP53@l?o(zF>AJPB- diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index c8bf62e94f731a5b4aa1f8a750314d4232049a28..800ffda40e9c92dfbd3578cf5decde05c253ad89 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6dk0{}ES1bP4f literal 17 VcmZQxwaR1i+k`Ae1~6cB0{}Df1Tp{s diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index caa590dfae72c92d5d8053a46e752dd042f4f523..9e295dd8ff4083cb1578af67a394246eea7e6ff8 100644 GIT binary patch literal 6578 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 delta 785 zcmZWmOHUI~6#i~Y+v(7uSOkMgBSwXS+5&1-S_FIxB3K^2ikY-y#STrJ7FH%@VN3%i znv6t@kgy=c7-C8_6*anXVdBoe(N5z(P|wW7xG*<4-+A17&i9>L=qd>O_g^2s00`su zCg01{A1v(j!s@_YhM+p)Zc=|TxB9?Zt$t%cwc1{j<*^S|4y_E%(ucWH;d5ninL`_e ziYzKK@kBDsqZtQXIE2Ftd`ywVj5L;(6o!`8!F%GY=$FM*!XL>fQ>jGv{~6ynhk)Kb zzgWsY)$$u0I`#I+xRMmJv1FRV5sI~ycUo>)TUh0AjDd^GnN&I>8^e#gZ~}IQnuL_; zlVyGQkT@-I=w@(f^J|r756kQM%KVltChS5Fwo}1m8j+M)N#W3|U;VUJezR6y$W<2d z9Qqj=OQU}^Yb#58h(h`GD{Xa-EQd1;4aB*!v{iocLN8aIztkQ*F0XIsW6rs7Ugspx zKH@~moa4YnhJdl?tWc-=gtyI>bc~_ST+2*mO7=%$Vk#vm#N9HTW(cXG;H7VAQhy6M z^{adToeQwg7lJH<4R*4ZDDo3BLR;H=uuY>pKvpjUH5er8GB4mVhA4943Wg~|j~Ndu z9F$WEaCn3w+*KiUxb{G{(dKFK_=;#J$M5Mdoi5K&!zm)zX!o2fB1CY?ggz5a8&JgA ze?>=j B2v7h3 delta 73 zcmbQqbdrhd)W2Q(7#J9A8Tco1^)u^g_)HX#)H;! diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class index 552e1ff47c2b98163c2691f301a7c3a550ee11bc..35c093d7da6db214b34b30b12dda80fd165cfb39 100644 GIT binary patch literal 4905 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 jrX8n=z!H!^ApxU^j%EnKkUhvILoh%f zSg|ju1OpWXrXbaXgly1svzyx5)-HC{?lm*CcGH4F`rkLh0R8%v@ZFqy-nr+V|3Ayk zm5iZG$E(){hXCY=m@Y?>60HTBx`w;Yr`xg0NLJRU#X44Fjj>H>QcHB)hx-l1mMuYnE_QjKT_7&!)_-<9Yc$%I*mvTnj$`<|@uodX95)d}eR(!1>VWbPZhsg%dVV+OmdCWMt8nN4(Yb zVt4z~qcjs}nI3Hx$jKF;gt?LHm#q-9j%w0lgi4fW*} z8O6l~3+GHnf7{5Eh#T3B@JGINg=cUd-)urO7D#Qy#s&1A2s|*=J3x(TFfhA z*q9bO&Pa$IErOJ0iN6@@VrRv^=fL0acMbp0@lX7#`*^G(Y##_DO*4cw(YZQK#bpPg zaYe_k@auSdWV{hKYwR_FQGxEB!0vu`aQE5Zk<-Crhuqn2VHYsQ#V0Kk7UqYjO_jph z%HQCrtn^k~SE&NgW*Kd%mo@@=0YBH~S9t2`ymgw05}0gc#NB38$HZDS5p6sdpOe_f zCbFQPRU}w?D%Szyz4-BW4pQ&n7r817^#UcGUx9dB#FzM6$PSbC6!UpfrLMzRoUmea z>^a0c=k~(wN1n^(%@SpM~2DBR6zaI1FBjA$-{ktpi`dSIwY1@HKp$K2uSRSMUu&_!Nrq zO-eR=i}%F9dKGImoaFzESRVd1z7xWN9v<`AXp@(c+KYQ-sB0POj9#P`%FVj)CR>ra zha`#~IMQ6oARY$USZ{&+u#q1mE{ln43Zf`a;_Xv-_f$ABjp(KmQ3|CQn2k?h0X}Ks z%Y@A*ua5xCivY|sVOe;5CSD~ND;-S0YbHQ}*YVvjhReKG=3_mh&Rb^9l@Si0LLggl zDFdh$XvcghZ5E_#ezwhJ>%}(0eY_o$8NE;L8wb$@5C#=;zi$u+%)OH9AGw%(1kn;_ zOBiP;f9Wh0Ad5Kfl+f?t z&oUHZIX=ywVyq+qMJD(ZmZm!lUXg*CS(o{zC?N~FT5CeKn2_V4T!kLOyC960?^_73 z*hg!b_&%AMCz%>Tx_j9LXeE7!DvVHYQyEP9?=omiJq4eh=CTc7i3Mx?BX5zWr)0(G z(&=YqzNxvjn3mk^C0sA9gJ`?Cezpzbb2slv=QG#$&ck%;A2}yGM!}%Oe>W1iuHj_5 zmn~C*BtGL=1Uip&EG9Wi@en!maQ86T^kO@!r3Gai6C3a%%F&IDEZ#>WBO{Al6DqOo zxGPd@eUUEfGkc3;6=&f4u~}?Mcpg7N9EZTAwHK|j zELoznWhR~rd&t&Yn)CTyoM^}G(v3?UfS;L@HfLzlC55w6@Q?VV{1Rn9VnPG#ocusM zPSmo!J5fg>5BMnTz&=wEYV4I5#qcZHOjTs4n&x%59Sv;p$C#-ttnIDL#&+gq2YG*- z&UVsb7d4I4G{J|xroRJd=0M-if!<lRFQ<$bxNJwQv^+cGx@oLvA6&L delta 2339 zcmZWq30PEB6#nlp^WHc-VHndI3mr_8U`FT*Nl^*GB~Z*lG)yx}Komg%P0E@w3Jc5S z=7O4;nzWh-vSqf}zGsW=`zExnT1fwWGmch#eD|Gu?soqF{O8R6q@xLr7ml^>2QW&A z21jqJ^jdSZ90OC3D{HLP+B5@~AWufwGQ_1a*A^#c%Ij^3VwP;M#c25kuE3S@kS#|m zFi?mhd5)GKiehac_4b;f3dLMDCY|)d%3fZZT>~*_=m8cNViz~*?Ur`lyEl6}R<7t=TYY%<>Wa>m|23 zt*-AJ2*>vZUdJ0w{3wtZD@z@|+_R_J@w31w9gR&L%UV61%O339cwgt1Rh|@&u;W*O zsNhP+vL>zs+`kiI=9qx}C-W1`=yBIkIV`H54P63*WP&p~qGI60va)%LD3NY~e##}c zM@9E~n3}X;H!~t&gT}Ez9*l}PZx8(ruBg$|7}KW~Cv!0_-s@||#XOEMsOQEZN*;6#^5?;g z>FA5uI30eRff__(Ir?K2JXntbW+SMyqO$OKBAz6cFkUbKPnq}x4&doPN^peFs+1Hm>h$ceR25+x<_e@( z-PSgg3e+J@S(OTTT8hnWYsM17^~nO5@jATFq57FCjB_vSPa24cou#|d|?QA zp_xx5&U`$F=ZQ+kEWCghiCkr|7p%wN(y>(NDEkW;M_~yk1?;8)B1BD)h!z!UEkh+C zAr}6x9&|p54K8oB{0^JWPj<2~5afrX%Wa=roTqK!H~SMaG`tGgApv zg=%brnH)ch?EhJ*!<3WxRN`FYYsJQ$7_O+=VjhJzMRRMet%1C8)%F zEW!dT!NL%u*_8WhtVNBd(~mQXst}=7#*?4xauS$M}}}AGKN+#sB~S diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class index 5be6fc4360cbdd04ab6d0bdcfd6e971fd42e141d..ad032c9abe05b04994faf1b4b17ff5b7fc2f14cc 100644 GIT binary patch literal 8029 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 Hr6cD*TH%9f diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 index b3f20c4276d3c47b6561fc30ffc2410d39dbd258..b7c054b9bfd6a8b5fff9da3fdb49bd1d07bb44ea 100644 GIT binary patch literal 6433 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 delta 821 zcmZWmTTc^F5dKa}+hy6MST3e&8!;#p#Bxzlxd^C;f(Tadep%bK!7hE+F6e_vc`$~6 zi6$!%BP2W!V+=6`O+}5q_+a9b{*894|3IDHjq$;pWWF(iE%t0Rac$W+;uz zT92Zb&4;83nL|5+V9c%*9^cD9&lF}iOfj7Tx==v@n`uN=r(~5wx0(83CI4zAKQ~jD z%W&vr@aG2pYBrV@wiAW?%NNG-G+7Qu8LEhLVPPZx@TnOtJb7l^e~^E^YPRVUa2)+q zG$t#uCYx>aZ|*>_1}6m!m~2IwRE+4_3_Li+&}6M3Etcyc@pZK$6=f*52R5mVE8$2~ zN+xBMR5>P63>~^825Dgd{kJ%yfA;RYIS2p+lLPeE|Qg~?7ch_E}TP03qJ4pQqJ_QLR z0*D7bfR94Vu8rG<@PHzDc4lYJoINx7`Rn@+0MD_fVF-x~k~&gIGmKtX?<})rxlQx! z*#)-)hV-6rMeu?lQK_D4$Rd}4rXvrXp`g;cfoPeH#^Eal&9hvm(+-_trCPt8P|Kl! zkqkz4jG@S|VRzc5f9VM~Fx$fSMaMNA;oBXDi@@Y=Ac8CNi2J_PCv;3o zyqtY*xh`)VIR7_^ zElrNE{D8L^#_X==QTd5z^CQt}317+cT6SI4v4*=0S=-}Qz+X}irY8J~h zvNv>WO5yW94;oRNVYkx%%EA6k*40ynFRzj><3gF~8-Mz(PoJv~p(ek??uJ0ghZnP~e>^>WvVW7=`2 z>)HH3NY;83-j-WL!zj?Q0%`iv_RwiaPF-1=v$CYTvLv*!G;Fe2Fk0^|`fii=9tkAL zR*kP<#y4bo7&bO~7&kV1m@>9{n5F1^4=bTr|D>Qy`Ysa`FihnI`U8w$lzx*$rbO+R zFpdf)aE~&KumSF4hdgSfh%$AOROK_OaubP)r1l`9)+ArvmHVjulTeA&0H&zjG!dF1 zI0N6EDNM`K@1dAb9JdJ0nu=X3X CAM3FI diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId2 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId2 deleted file mode 100644 index fcab91a37da9fffc62889b83e412abccc1963bb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmbVJK~BRk5L}ni&_YT}cmoO-jKnd31P4w54iVgqvx;0fPGvil_!xG>(KR;kV-B9%a1L|)Z2GH~vzz*RD diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index cc7b880261508f15a88454c3c21686d006ddbaf2..1a2030f7e845897c54e84f2883bdd601f4358e7b 100644 GIT binary patch delta 188 zcmdnNyOVdqX@QM`8#t%^wF>Ytl;#fXlGUAfJ44`d^3*TqrW-l(OgB6%9j`cXaxmi| zjT~Pst)TdtMd$PKxZ-wvO?D6V@O2au7ifEIz3JR%Zv8*;v!Am%xz|m$WtuFo-Mskr z6VG`}mbYd-t?Lz>Hu(Wljw_=Ylf64bG$W994`GO6WOQc~WYA?~_ViU`U@&H6G-Y5g fWn}bbU@!->?STpz7~H{RFjzbU$lg4GS%Vn>n(;VY delta 166 zcmdnVyMuSaX#xFbn~i5*?I;#}#pTp2rrW>H9L#t~ z server = new ArrayList(); - List user = new ArrayList(); - SimpleDateFormat formattingDate = new SimpleDateFormat("yyyy/MM/dd HH:mm"); - - /// 채널 생성 잘 되는 것 확인함 - 20260109 1605 - /// formatting 부분까지도 추가해서 수정함. - server.add(new Server("코드잇 스프린트: 스프링 백엔드 9기")); - server.add(new Server("스프린트 커뮤니티")); - user.add(new User("이진용", "string", "ddd@naver.com", "010-0000-0000")); - user.add(new User("김경한", "string", "eee@naver.com", "010-0000-0000")); - - /// TODO: 채널 생성 로직 작성 - try { - Thread.sleep(2000); - System.out.println("=== 잠시 대기해주세요! ==="); - Thread.sleep(2000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - while(run) { - Route.route(sc, 0, user); - int menu = sc.nextInt(); - sc.nextLine(); - - switch (menu) { - case 0: - System.out.println("See you later"); - run = false; - break; - case 1: - CreateServer.createServer(sc, server); - break; - case 2: -// System.out.println("현재는 지원하지 않는 기능입니다: " + menu); - server.forEach(e -> { - System.out.println(e.getName()); - }); - break; - default: - System.out.println("[Error!] 존재하지 않는 메뉴입니다."); - break; - } - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/Route.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/Route.java deleted file mode 100644 index f1beaeab..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/Route.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.sprint.mission.discodeit.entity_; - -import com.sprint.mission.discodeit.entity_.service.user.CreateUser; -import com.sprint.mission.discodeit.entity_.service.user.User; - -import java.util.List; -import java.util.Scanner; -import static com.sprint.mission.discodeit.entity_.service.user.Login.login; - -public class Route { - public static void route(Scanner sc, int n, List user) { - System.out.println("====================="); - System.out.println("| 0. 종료하기"); - - switch (n){ - /// 비로그인 - case 0: - System.out.println("| 1. 로그인"); - System.out.println("| 2. 회원가입"); - int menu = sc.nextInt(); - sc.nextLine(); - switch(menu) { - case 1: - login(sc, user); - break; - case 2: - CreateUser.createUser(sc, user); - } - break; - /// 로그인 후 - case 1: - System.out.println("| 0. 로그아웃"); - System.out.println("| 1. 서버 조회하기"); - System.out.println("| 2. 서버 접속하기"); - System.out.println("| 3. 서버 생성하기"); - break; - /// 서버 접속했을 때 - case 2: - System.out.println("| 0. 뒤로가기"); - System.out.println("| 1. 현재 서버 확인하기"); - System.out.println("| 2. 현재 서버 수정하기"); - System.out.println("| 3. 채널 확인하기"); - System.out.println("| 4. 채널 접속하기"); - System.out.println("| 5. 채널 생성하기"); - break; - /// 채널에 들어갔을 때 - case 3: - System.out.println("| 0. 뒤로가기"); - System.out.println("| 1. 현재 채널 확인하기"); - System.out.println("| 2. 현재 채널 수정하기"); - System.out.println("| 3. 메시지 확인하기"); - System.out.println("| 4. 메시지 수정하기"); - System.out.println("| 5. 메시지 전송하기"); - System.out.println("| 6. [Wanning!] 채널 삭제하기"); - System.out.println("| 7. [Wanning!] 메시지 삭제하기"); - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/UUIDGenerate.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/UUIDGenerate.java deleted file mode 100644 index 2ae3ea07..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/UUIDGenerate.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.sprint.mission.discodeit.entity_; - -import java.util.UUID; - -public class UUIDGenerate { - public static UUID UUIDGenerate() { - return UUID.randomUUID(); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/GeneralCreater.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/GeneralCreater.java deleted file mode 100644 index 1736106a..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/GeneralCreater.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.sprint.mission.discodeit.entity_.service; - -public class GeneralCreater { - private String id; - private long createAt; - private long updateAt; - private String name; - - public String getId() { return id; } - public long getCreateAt() { - return createAt; - } - public long getUpdateAt() { - return updateAt; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public void setUpdateAt(long updateAt) { - this.updateAt = updateAt; - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Channel.java deleted file mode 100644 index cb09d7b8..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Channel.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.sprint.mission.discodeit.entity_.service.channel; - -import com.sprint.mission.discodeit.entity_.UUIDGenerate; - -import java.util.Scanner; - -public class Channel { - private String id; - private final long createAt; - private long updateAt; - private String name; - Scanner sc = new Scanner(System.in); - - public Channel(String name) { - this.id = new UUIDGenerate().toString(); - this.createAt = System.currentTimeMillis(); - this.updateAt = System.currentTimeMillis(); - this.name = name; - } - public String getId() { return id; } - public long getCreateAt() { - return createAt; - } - public long getUpdateAt() { - return updateAt; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public void setUpdateAt(long updateAt) { - this.updateAt = updateAt; - } - - public String generateChannel() { - System.out.println("지금은 채널을 만들려고 합니다!"); - System.out.println("만들고자 하는 채널명은 무엇인가요?"); - return sc.nextLine(); - } -} \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.java deleted file mode 100644 index b1933a22..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.sprint.mission.discodeit.entity_.service.channel; - -public class CreateChannel { -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.java deleted file mode 100644 index 5f823041..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.sprint.mission.discodeit.entity_.service.channel; - -import java.util.Scanner; -import java.util.List; - -public class CreateServer { - public static void createServer(Scanner sc, List server) { - System.out.println("서버 생성에 오신 것을 환영합니다!"); - System.out.println("사용하려는 서버명을 입력해주세요!"); - String serverName = sc.nextLine(); - if(Server.duplicateCheck(server, serverName)) { - System.out.println("잘 들어갔어요!"); - server.add(new Server(serverName)); - } - else System.out.println("[Error!] 이미 존재하는 서버명입니다."); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Server.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Server.java deleted file mode 100644 index 18f3c7d5..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/channel/Server.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.sprint.mission.discodeit.entity_.service.channel; - -import com.sprint.mission.discodeit.entity_.UUIDGenerate; - -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -public class Server { - public static boolean duplicateCheck(List list, String name) { - int temp = list.stream().filter(e -> e.getName().equals(name)).toArray().length; - - return temp == 0; - } - - private String id; - private final List channel = new ArrayList<>(); - private final long createAt; - private long updateAt; - private String name; - Scanner sc = new Scanner(System.in); - - public Server(String name) { - this.id = new UUIDGenerate().toString(); - this.createAt = System.currentTimeMillis(); - this.updateAt = System.currentTimeMillis(); - this.name = name; - } - - public String getId() { return id; } - public long getCreateAt() { - return createAt; - } - public long getUpdateAt() { - return updateAt; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public void setUpdateAt(long updateAt) { - this.updateAt = updateAt; - } - - public void createChannel() { - System.out.println("지금은 " + this.name - + " 서버에 새로운 채팅 채널을 생성하려 합니다."); - System.out.println("채널명은 무엇인가요? : "); - String channel = sc.nextLine(); - this.channel.add(channel); - }; - - public void renameChannel() { - System.out.println("지금은 " + this.name - + " 서버에서 채팅 채널명을 수정하려 합니다."); - System.out.println("무엇을 수정하고 싶은가요?"); - String channel = sc.nextLine(); - System.out.println("지금 입력한 채널명은 " + channel + "입니다. 맞나요?"); - String test = sc.nextLine().toUpperCase(); - if(test.equals("Y")) { - if(channel.contains(channel)) { - System.out.println("어머, 이미 존재하는 채널이에요!"); - } else { - System.out.println("오, 좋은 이름이네요!"); - System.out.println("잠시만 기다려보세요! 지금 열심히 일하는 중입니다."); - setName(channel); - try{ - Thread.sleep(4000); - System.out.println(getName()); - Thread.sleep(4000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - }; - } else { - System.out.println("다시 입력하시려 하는군요. 좋아요."); - renameChannel(); - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/CreateUser.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/CreateUser.java deleted file mode 100644 index aaa521d0..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/CreateUser.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.sprint.mission.discodeit.entity_.service.user; - -import java.util.Scanner; -import java.util.List; - -public class CreateUser { - public static void createUser(Scanner sc, List user) { - System.out.println("회원가입에 오신 것을 환영합니다!"); - System.out.println("사용하려는 회원명을 입력해주세요!"); - String userName = sc.nextLine(); - if(!User.duplicateCheck(user, userName)) { - System.out.println("[Error!] 이미 존재하는 이름입니다."); - return; - } - System.out.println("사용하려는 비밀번호를 입력해주세요!"); - String userPw = sc.nextLine(); - System.out.println("사용하려는 이메일을 입력해주세요!"); - String userEmail = sc.nextLine(); - System.out.println("사용하려는 전화번호를 입력해주세요!"); - String userPhoneNumber = sc.nextLine(); - System.out.println("입력하신 값은 다음과 같습니다."); - System.out.printf("사용자명 : %s \n", userName); - System.out.printf("사용자명 : %s \n", userEmail); - System.out.printf("사용자명 : %s \n", userPhoneNumber); - System.out.println("이 값이 맞으면 1, 수정하려면 2, 뒤로 가려면 0을 눌러주세요."); - int i = sc.nextInt(); - switch(i){ - case 1: - user.add(new User(userName, userPw, userEmail, userPhoneNumber)); - System.out.println("잘 입력됐습니다!"); - case 2: - createUser(sc, user); - break; - default: - break; - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/Login.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/Login.java deleted file mode 100644 index 80d8f298..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/Login.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.sprint.mission.discodeit.entity_.service.user; - -import java.util.List; -import java.util.Scanner; -import java.util.concurrent.atomic.AtomicBoolean; - -public class Login { - public static void login(Scanner sc, List users) { - System.out.println("로그인 페이지에 오신 것을 환영합니다."); - System.out.println("사용자 아이디를 입력해주세요."); - String id = sc.next(); - sc.nextLine(); - System.out.println("사용자 비밀번호를 입력해주세요."); - String pw = sc.next(); - sc.nextLine(); - boolean isTrue = isLogin(id, pw, users); - } - - public static boolean isLogin(String id, String pw, List users) { - AtomicBoolean isTrue = new AtomicBoolean(false); - users.forEach(e -> { - if(e.getName().equals(id) && e.getPw().equals(pw)) isTrue.set(true); - }); - return isTrue.get(); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/User.java deleted file mode 100644 index 92dc93eb..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity_/service/user/User.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.sprint.mission.discodeit.entity_.service.user; - -import com.sprint.mission.discodeit.entity_.UUIDGenerate; - -import java.time.LocalDate; -import java.util.List; - -public class User { - public static boolean duplicateCheck(List list, String name) { - int temp = list.stream().filter(e -> e.getName().equals(name)).toArray().length; - - return temp == 0; - } - LocalDate now = LocalDate.now(); - - private final String id; - private final long createAt; - private long updateAt; - private String name; - private String pw; - private String profilePhoto; /// 사진 경로 사용. 아직은 모르니 패스 - private String details; /// 상세 설명 - private String email; - private String phoneNumber; - - public User(String name, String pw, String email, String phoneNumber) { - this.id = new UUIDGenerate().toString(); - this.createAt = System.currentTimeMillis(); - this.updateAt = System.currentTimeMillis(); - this.pw = pw; - this.name = name; - this.email = email; - this.phoneNumber = phoneNumber; - } - - public long getCreateAt() { - return createAt; - } - public long getUpdateAt() { - return updateAt; - } - public String getEmail() {return this.email;} - public String getName() {return this.name;} - public String getPw() {return this.pw;} - public String getPhoneNumber() {return this.phoneNumber;} - public String getId() {return this.id;} - public void setEmail(String email) { - this.email = email; - this.updateAt = System.currentTimeMillis(); - } - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - this.updateAt = System.currentTimeMillis(); - } - public void setName(String name) { - this.name = name; - this.updateAt = System.currentTimeMillis(); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java index 3855aeea..af465eb4 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -9,7 +9,7 @@ public interface UserService { // void data(); void createUser(Scanner sc); void updateUser(Scanner sc); - void getUserName(User user); + void getUserName(Scanner sc); void getAllUserName(); void deleteUser(Scanner sc); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 049b4097..84a03add 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -13,8 +13,23 @@ public class JCFChannelService implements ChannelService { private final List channels = new ArrayList<>(); /// create - public void createServer(String name) { - channels.add(new Channel(name)); + public void createServer(String name) { + if (check(name) != null) { + channels.add(new Channel(name)); + System.out.println("잘 들어갔어요!"); + return; + } + System.out.println("이미 존재하는 채널명이에요!"); + } + public void createServer(Scanner sc) { + System.out.println("사용하려는 서버명이 무엇인가요?"); + String name = sc.nextLine(); + if (check(name) == null) { + channels.add(new Channel(name)); + System.out.println("잘 들어갔어요!"); + return; + } + System.out.println("이미 존재하는 채널명이에요!"); } public void updateServer(Scanner sc) { @@ -56,6 +71,16 @@ public void readServer(Scanner sc) { System.out.println("==================="); } +public Channel readServer(String name) { + Channel result = check(name); + + if(result == null) { + System.out.println("해당 채널이 존재하지 않습니다."); + return null; + } + return result; + } + public void readAllServer() { for (Channel ch : channels) { System.out.println("채널명 : " + ch.getName()); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index 75d5d834..93912643 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -22,11 +22,9 @@ public void createMessage(Scanner sc, Channel ch, User user) { String n = sc.nextLine(); if(Objects.equals(n, "0")) { System.out.println("처음으로 돌아갑니다."); - return; } else if (Objects.equals(n, "1")) { msgs.add(new Message(ch.getId(), user.getId(), text)); - System.out.println("처음으로 돌아갑니다."); - return; + System.out.println("성공."); } else { System.out.println("잘못 입력했습니다. 다시 메시지 입력 부분으로 돌아갑니다."); createMessage(sc, ch, user); @@ -42,13 +40,14 @@ public void updateMessage(Scanner sc, User user) { System.out.println("무슨 내용으로 수정하고 싶나요?"); String context = sc.nextLine(); System.out.println("지금 작업중입니다."); - msgs.forEach(m -> { - if(m.getId() == UUID.fromString(id)){ + + for(Message m : msgs) { + if(m.getId().equals(UUID.fromString(id))){ m.setContent(context); System.out.println("성공!"); return; } - }); + } System.out.println("해당 내용을 찾지 못했습니다."); } @@ -69,6 +68,22 @@ public void readMsgInChannel(Channel ch) { } } + public void readMsgInChannel(UUID chId) { + boolean capture = false; + + for(Message msg : msgs) { + if(msg.getSendChannel().equals(chId)) { + System.out.println("보낸 사용자 : " + msg.getSendUserId()); + System.out.println("보낸 내용 : " + msg.getContent()); + capture = true; + } + } + + if (!capture) { + System.out.println("해당 서버에 보낸 메시지가 없어요."); + } + } + public void readMsgForUser(User user) { System.out.println("당신이 보낸 메시지는 아래와 같습니다."); UUID uid = user.getId(); @@ -96,19 +111,22 @@ public void deleteMsg(Scanner sc, User user) { readMsgForUser(user); System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); String id = sc.nextLine(); - for(Message msg : msgs) { - if (msg.getId() == UUID.fromString(id)) { + + UUID targetId = UUID.fromString(id); + for (Message msg : msgs) { + if (msg.getId().equals(targetId)) { System.out.println("해당 메시지를 삭제합니까? : Y or any Key"); String ins = sc.nextLine(); - if(ins.equals("Y")) { + + if (ins.toUpperCase().equals("Y")) { msgs.remove(msg); System.out.println("성공!"); - return; } else { System.out.println("초기로 돌아갑니다"); return; } } } + System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다."); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index 593699e2..d49a8aca 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -20,12 +20,20 @@ public void createUser(Scanner sc) { System.out.print("먼저, 사용할 이름을 작성해주세요 : "); name = sc.nextLine(); - users.forEach(user -> { + /// forEach 안에서 return은 forEach문을 종료하는 것으로 끝남... +// users.forEach(user -> { +// if(Objects.equals(user.getName(), name)) { +// System.out.println("이미 존재하는 사용자명입니다."); +// return; +// } +// }); + + for(User user : users) { if(Objects.equals(user.getName(), name)) { System.out.println("이미 존재하는 사용자명입니다."); return; } - }); + } System.out.print("사용할 비밀번호를 입력해주세요 : "); pw = sc.nextLine(); @@ -40,10 +48,12 @@ public void createUser(String name, String pw) { /// Update @Override public void updateUser(Scanner sc) { + System.out.println("===================="); System.out.println("1. 이름 변경"); System.out.println("2. 비밀번호 변경"); System.out.println("3. 이메일 변경"); System.out.println("4. 전화번호 변경"); + System.out.println("===================="); int n = sc.nextInt(); sc.nextLine(); @@ -145,13 +155,44 @@ private void updateUserPhonenumber(Scanner sc){ /// Read @Override - public void getUserName(User user) { - System.out.println(user.getId() + " " + user.getName()); + public void getUserName(Scanner sc) { + System.out.println("조회하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + + for (User u : users) { + if (u.getName().equals(name)) { + System.out.println("===================="); + System.out.println("사용자ID : " + u.getId()); + System.out.println("사용자명 : " + u.getName()); + System.out.println("이메일 : " + u.getEmail()); + System.out.println("전화번호 : " + u.getPhonenumber()); + System.out.println("생성일 : " + u.getCreateAt()); + System.out.println("수정일 : " + u.getUpdateAt()); + System.out.println("===================="); + return; + } + } + System.out.println("조회하고자 하는 사용자가 없습니다."); + } + public User getUserName(String name) { + for (User u : users) { + if (u.getName().equals(name)) { + return u; + } + } + return null; } @Override public void getAllUserName() { users.forEach(u -> { - System.out.println(u.getId() + " : " + u.getName()); + System.out.println("===================="); + System.out.println("사용자ID : " + u.getId()); + System.out.println("사용자명 : " + u.getName()); + System.out.println("이메일 : " + u.getEmail()); + System.out.println("전화번호 : " + u.getPhonenumber()); + System.out.println("생성일 : " + u.getCreateAt()); + System.out.println("수정일 : " + u.getUpdateAt()); + System.out.println("===================="); }); } From 193683db4ccf90720daf85cab0974ef297b86740 Mon Sep 17 00:00:00 2001 From: Alpha Date: Tue, 13 Jan 2026 18:53:09 +0900 Subject: [PATCH 05/35] =?UTF-8?q?=EC=8B=AC=ED=99=94=EA=B3=BC=EC=A0=95?= =?UTF-8?q?=EA=B9=8C=EC=A7=80=20=EC=99=84=EB=A3=8C!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 50949 -> 50949 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 22447 -> 22447 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 22203 -> 22679 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../discodeit/app/JavaApplication.class | Bin 6578 -> 7249 bytes .../discodeit/entity_/CRUDInterface.class | Bin 201 -> 0 bytes .../discodeit/entity_/DefaultInterface.class | Bin 150 -> 0 bytes .../mission/discodeit/entity_/Main.class | Bin 3513 -> 0 bytes .../mission/discodeit/entity_/Route.class | Bin 2274 -> 0 bytes .../discodeit/entity_/UUIDGenerate.class | Bin 456 -> 0 bytes .../entity_/service/GeneralCreater.class | Bin 1014 -> 0 bytes .../entity_/service/channel/Channel.class | Bin 1683 -> 0 bytes .../service/channel/CreateChannel.class | Bin 370 -> 0 bytes .../service/channel/CreateServer.class | Bin 1569 -> 0 bytes .../entity_/service/channel/Server.class | Bin 4777 -> 0 bytes .../entity_/service/user/CreateUser.class | Bin 2395 -> 0 bytes .../entity_/service/user/Login.class | Bin 3043 -> 0 bytes .../discodeit/entity_/service/user/User.class | Bin 3443 -> 0 bytes .../service/jfc/JCFChannelService.class | Bin 4905 -> 5318 bytes .../service/jfc/JCFMessageService.class | Bin 6718 -> 6633 bytes .../service/jfc/JCFUserService.class | Bin 8029 -> 8466 bytes .../reports/problems/problems-report.html | 2 +- .../JCFChannelService.class.uniqueId1 | Bin 0 -> 5315 bytes .../JCFMessageService.class.uniqueId1 | Bin 6433 -> 0 bytes .../JCFMessageService.class.uniqueId2 | Bin 0 -> 6772 bytes .../stash-dir/JavaApplication.class.uniqueId0 | Bin 6578 -> 7249 bytes .../compileJava/previous-compilation-data.bin | Bin 1721 -> 1442 bytes .../discodeit/app/JavaApplication.java | 18 ++++++++++--- .../service/jfc/JCFChannelService.java | 21 ++++++++++++++- .../service/jfc/JCFMessageService.java | 25 +++++++++++------- .../discodeit/service/jfc/JCFUserService.java | 20 +++++++++++--- 33 files changed, 66 insertions(+), 20 deletions(-) delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/CRUDInterface.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/DefaultInterface.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/Main.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/Route.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/UUIDGenerate.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/GeneralCreater.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/Channel.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/Server.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/CreateUser.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/Login.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/User.class create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFChannelService.class.uniqueId1 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId2 diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index 13545d612bc1b7b9ec23be2e8699bc4a09069619..14ff59313e3c5c1c8419da9d23ae60a8c51b6872 100644 GIT binary patch delta 561 zcmZqeV{YwZ-VnXiS;TvGT1i<+c5!)1c~(ZMah_RjQC6X8VP#IXai)OnP4&jL5^L}8 zQjw6a?R@jOixESJVe{mR9-@;EtmK${)>m!wTHgt5j9im9%t@K-*DWQ$;@wp`|HYq+ z!81bcrayE2vuSM-)8wbKb0+_v@mxUt*70at*K<#tiM-`NuVIFqEEoB$NJZT z!;<&zah#j%A31CC`~9-oN}s+iQ@HTy*@ETAetnB%+IMW~!>zlGFIq4&2<%Cd$#;`- zxcPqWXBWj3m&=pa&vTkwc_4Ul&f##0;Goi%xXeO=!2EdO2=)A-4OM-u91B-V#b<~zMR{Zd5Z<{UN;pt_v!BGJ@>azj3u zqi@exmYxI(tr6b3PUZ~%$J6rCNjDhFTYy5=uM*}-95}w?(5!79x!W0T1BDzpmi*CC zR@|4#!u2V9`m8xXAy22%T)y{X@-v@&ZYW#&iI-)0enClQeqOO&dTL&3QQ~HUquUwf qJ|=49sg9 zCM^h!)-5~J#)2WluzB)D57Eg7R&q=}>#MeTt?vZ3$uGO=1*Xi}b8O>+??p%VC+<)) WOA*?%Hi>ETtzI6U&3U`0a{~Z8CN}^8 diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index 77f5339b15f3378cd685f008e2d98265fda0deb3..f5c3437665a31cc8bead3a746a4586b629b2185b 100644 GIT binary patch literal 17 VcmZQx)_UaMM6cU+3}C>>3jjXS1oHp@ literal 17 UcmZQx)_UaMM6cU+3=r@Q06)0}+W-In diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index bf0ab0dffd2661d8e5ab522a2e644ac0583b07d5..1416a2bd5e0dca4c16572f1433599b17600e8993 100644 GIT binary patch delta 403 zcmZ3#o^kzp#tq573Lg_Sa#dOn`OoTGwe8v}X(a{*#@X9;c>QGn1J*^86+?wLPxIAg zR9I-jIhQ@{f40+=n(f<+qq)HtJ=zkTPoHg(JR{Qh5NR#PD6 z+2=u22`>lIdd5IP6NnW-Siso&SL>DUQda9ea|Y$?QfdL~*!q74P!b44(tre-j*Yjp z*JP<5j+t0qvadVm)Dy6drGGtuDp`S8W%cBfL1hX`pS~_rxbW%Og5}44eT!t;2XTql zF`x<{kO|xz9}INw@{BoJ8{Gs?wcWTQKI^Zi7*y3Yh$<0~YBbyJ*FTyUrYRP3k?COO yOI{8>sE*eV9g;6GbyNqv5IVMxyH88)-j9y-mG)pA%LIafDnag56q@WFo&f+~8hq~n delta 403 zcmZ3#o^kzp#tq573U5VZmM<~BptXS|U9x%g#q$gdjI+0u+J-ZL0o%^WilM@rr}=6# zDr`D5^(?Pp_{o^HhnL^rKe!UCGFrzLqEh|(=7)YM%=M}F3)kE36pP^6yyUV&v-UKw zs;DWQ5LJR_fwZ16kkABTMGzKypkQlKOdh(-YkG#%U` zrh!wRonFGUO7p62*`jw zXFq3ka<7A!Yby%TA!UcDW4n3r?I)h|m@IG2dRo^j2nmz)eII}-LGG20o$MZ-0RX3s BciI2| diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.lock b/discordit/.gradle/9.0.0/fileHashes/fileHashes.lock index 4f9aa18a1b530da16923eddf219decb9824eab7a..e93e4898b403c9aaa7694a06eb3b26eed0942c9a 100644 GIT binary patch literal 17 VcmZS9oRIJ5aF#!o0SuUK0RSb`1J3{e literal 17 UcmZS9oRIJ5aF#!o0SuV>0VRn8ga7~l diff --git a/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin b/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin index 1dd4966f233212873887a840659f113660fcb57c..4ee7529cfc8e6361e84bee68327c37d2969b936a 100644 GIT binary patch delta 805 zcmdnJmT~$<#tkMCjMbY>B{CQVW(8cEseX9hEe0?Me>-`qWPrf@;vLKEC4VPC1y4`D z3lv<8DTKn+mb%q#nnQGIpGt;cOv*Pw#!|DnKiO%2yGCB9z}@vz;S-^wju z6bSshma*mT?oCkD&XZdeECeE&8q=QiG){yHrcU0fprDa3Wk+iDFPQ}p!H80rxe2RR ztQO97xdIjEpL|wfhDP3kS7Nh778^qZ!|uWq=YN#kT6(*`2rB-6bF88iBNO+`jfy|S zHySkXY|Hy=! z4hd`a0TrU@%3d2$Gkf1m&hl$L7Ppta=fG4EnVKI{);H}>!Mga)TWczT3ee4{;XigH zcurf>pKo_rU;QrLjZje!b6lL1#tb3$?^ixw%@XVs-h3UQ1g3&-z4^2_O}?vTlu6KX#mQ$CmbXH(0QUACrfS0kAX}0d2E27-#{LwHZj06&gshbsB&Hvke>w0h28qV6&wi;Q_O@ nAD01>Wg#$=tsxkb^&yb6wIUJ$0t!j7A@~=uFwhONK}dQImBSq6 diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 800ffda40e9c92dfbd3578cf5decde05c253ad89..19c8b6ed486ef043336dc59df7439771776bfd70 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6dU2LLo`1gZc4 literal 17 VcmZQxwaR1i+k`Ae1~6dk0{}ES1bP4f diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index 9e295dd8ff4083cb1578af67a394246eea7e6ff8..187eb54e682913114883514599a1ada8bbd13b10 100644 GIT binary patch delta 1482 zcma)6TWnNS6kU5By`4KVo#_nIW+)7UZOlwts7O*v0Ext;G-*jhhmWc;wQZC~Qyf|` z#!wB!nDD{J2_YeV5Qt9ngU}X6Ljs8jM!~j-qWGXnQQnUtmS;+bb?%*(fIr^koV)Kn z`>egr-s{}H`N!+bqZ0=X0a%RNy=KOg{YuOQuGISWw0h2*rA8&7yafUEk#mlk;SQ=X z^R#1ELbdo~D(La4rDp80kRs*qZ76O`G_G!WyQQYPYt`DCRI1_mDKHJP)wd&QB8DSA z9L0A6&l~MsI%7kdV9|eeUN5ZfPx|{rPN-8wyXC5SKM-+^3KHstK!rLOFs8S@+0gb< z=kk`0c4Bouv>R=r`V8+m{mDleEljQyI94%b@G-6n)mMRNDlDomFRZEw}-ULlcY68wwMZe*scF@*9yNTHRE!L1#c^+2~JMkv*(NmhC;n3LIvQkMIP?*wT}%?J!Sr7H4pY zwY$Mu{fl$R;k>wULHxKVVO)|jT$VVlNCHALTSuU36xT{=5U<1RAMN{c#uG9Pf>3AVN>fz-$8*Y`V4jC0JKK z+>a~*6R64~6H4FV>(&j|KY%EQeyqzc4=+D^~wZ$}O#f%6tNQlxNDl2I*(;~zcf-oq0>2Zj9 zOEI_=6_{ZW)`L)~t+toBRF+!W0xeppee?Sp^w`79oH=vmeBYe&P2-#kGtGv9E7t&| z<71^6GG(C>bFSLyajVUv+8xspRi!6RZ7{v6+p{M!I&s;yyxn;zyGja*QgU*ZE>`El zPgIqAFNoY%*`q7`U4qe8L{Z+3{FId?#RWU^4SZ1E$myyka%$!X2;9(f9Whh53RidX zB}gR=2kJTNV;}+zoIOJUxP{x?h2akF(o?5qL>-lSbt7tJsgBBo!TAvG;XYRr`_PC7 zjPqbG9^w)6`mr64@dQpxz$QG!Gq{k1HF%B}B$S2~Xu?Y(H}ifRoP%^323kZ6_zc7u zh&PY`{KBGe=1<20&4Ppzs*XqdgjCLtIkr(#Sxb_uNxqe^ZiN0?UlC>dAR{d*45rn_ zI6jw_Cgrd!P0DFmnv{zi#J=0CPWfV`PQ4mCLw)zHB5u~$C8-)WnGeb$b&bor*foqn z%f_HJgwd?p{5~TW>+~a->oD_d_5V*E&CmgzCuSPU;4CA$NyddSXNV2iswWN?$9Rqs zjtaU`Rbn7pde#0w(uiuD4uORWB+|V>+sT>O-E_$^z|F9jGZ zm2FI;i(k#=PR9~Ly{3j{A%kG;)Z_|G#9R7CQW7x)?w~jhBHoTWf}kDOL{$#meS?7Q ztHsWtrjw$bg+%Qvq!o|V))lfFPQ&^Scb(R-vI_qytI(3WR#u@Ucb6sig9x86KnMe! z2Hy8$A`LY=CN@`ZdtnY>85O8EeFz)muQB;2=&?Tq+iaa)1_t@z-2WT`1DIlGW-2X; JZr00zoF7jZ`hsL z*Zc7Vu*4`u#ITU2;;yzzdtNE$l+ip_PMVyQ=cK*z_cLGZkL#`WWUoR}iXOwb5Ut>) z&^Nxj6eK-EA}t9|4Dob!3fR>77ZXdBX@j2~Ok*W&R2g9MmpSj^5{7Ubo&(}g(MN)= PD*fr8)37lNGeY(Ok7Y1b diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/DefaultInterface.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/DefaultInterface.class deleted file mode 100644 index 09068c4ce5394965d0fb755747870c4dc3a9f713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/GeneralCreater.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/GeneralCreater.class deleted file mode 100644 index 450986bdf301a652509fb1c280d675bbb7dd1555..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmbtT+iuf95IyTSag&&~Nt3o*OD}+vO85gpD^-<1L{WJtX)&EvV)3?DqMk15Ka8#BG#etCpt-V6#7G*1kq4wz?A1NNsd^)Hw`cV;YzH8CV}@45G$=bZCAPxH7;s z^9XzSLzxw@%s)`BzD3Il+N+3Dl(@Qr?aSCvMQ>&m`>N>omux0m#lRcN4`GzPyGab7 zjj&Xz-;N|Y(2q_GP;{6&JWaPfejS{_S&D!m=}_u|;T+}r-DqA+(`4SE_ccB8;Ujbm zbbBzWw{H$$7=A@xJvrpxQF8yQP02kClgAn+XE!HrYnVLVu&02n{I} zjBMgm{-XhUNvouX;PV%$^B1Y}m&b*Gf)O;)pTz2|BD=1SkF}Su_I(9QdPQn6Q6FlY v>Py-aZ!sAEaT!PCdYo3GH@=J$>vOhwHT%d}{iJ(p!@P;QOcx0$giHSeERJV^ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateChannel.class deleted file mode 100644 index 52802f75aa07ae39cd9be8df88160a3a747b583f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmbu5Jx&8L5QX3DPZpLyB5ptj6!-xA6f8;=K>#I!_$v_LjSjuBzH)?2L_?Vi+Ky|yM2Mi=ZjUJ=sclSP3Y z!nNsI6`no2s9FwzJExW$Ot-Wgm35Kh%cBa`Z`oL7R@yn+sLER%ZS_Nhtdj49$()_N z-L$p!54vu|Ih=P!Hw*2#=U+36D-ML4`Ts|s6UzH;R diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/channel/CreateServer.class deleted file mode 100644 index 0a4cd4484088234832dd4c6147f473dd4dd65c11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1569 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/Login.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/Login.class deleted file mode 100644 index 4f96522ce3e3a3476a51c2b78d2d8a7303a94422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3043 zcmbtWZEw?76n<_J>NGWNXekWnSbzdaU+`XdU4RWb7_hXkrG(Lqf$O-fsbi;pDReIg zwoXE;H0=Xu1r5YB(1gT?4WUvP+7FoaONjdyrk!gCHKjml`Qm$h?s<96bI!T;KmR@a z8^A7{iy?%tfQX1isA7npmWO3YmyLeuaPMhVaTuz0YKG?QW(X%!xoSjFEg&YM2I36$ z?1=5C1=2EIGHT5Djx1*i!oSm&f-fy=#++sUOF^Yxlh0&wD@r zl<>xHdSf>dkMDlxT^mhIT^aYrFHBv&T^hSs8oRkEhB%f8s29heABw@2RS zq<8fa1$_-G1gsRX3QY`4{GhI*=~7ma4MVjUB8GaF@?Dxt%?`-TSBrRq+eW!wMl;kX z)-beBV<ekvl9p;e!>~ecG9UH0V#&mG!KetD6VBu zP)T;of~H7&{AI6c>Z)wSkVGqQtu|sR*^|oEQ`c=0A>mDGELl<1B9Ujz7t9<{)8$(D z!24W7aX3XCreV7U)k@dkZM-93vxqI&%1}F<4NsC->NBli5%2NRZ=HX=j#AMG2zl(13u+8|uvb8bh!3!D=Fs__O;oBw zuB_Wn^?fkGR5cFhLlFl!nnmRF$Qcg&kcf|XVZt^C9_gU|VW{Ih+T|8{RjXU>)k#vH zF%?OKGwmhGjET9VtFZ_s~;*cP=1rUeok$O1wI& z^&7I|S`_uvOC z>#8sqgN}j#LxhPU!`kUi){J3uP?a)1dt@Q^$%1`NJUOi)|~vrDe|@vaV+}M@`2;H{*=Y`;%)fM{GGU ztb;3}7fKv7-s$8*>&6Q&9^@bS4qdiw)fVt2!}?k5KZ{5KUo)(Ju_|3X0qa;pkVEuc z1R|iT3{~{Z(3?anqjgcseXu`i6GA6F`7t1%i=JYjfWtUKZ`Jr1pO6+eet^x!kf_;b<>(%||h zNd5&$LO4lL>364`&NW^ME}s(*N5Qq5kcUcm`e+{pTSbq4+J-OyjaE+E VX_5`W#xTy3Bu0`Ee1&hY;(xw5b?g8D diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/User.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity_/service/user/User.class deleted file mode 100644 index 620b4f9d06735516e9a9dee9363634b62b968fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3443 zcmbtWYg5!#7=8{e1VTVWMNwd#oqox z|3JUAGwrl!wKM*JPJdFT)90K7*j<9d*bm9cdCz-&@|^dazy5vp96&$5uSXTOX-F8T zMvXw@eRIi76$9HzjoE%6P~!)lW#$C-w|9)KFNV_8q*_cj(^sv5I_Lt4z>;>S+Cy!} z%+E_TJ3pT;bud@VX9C;JrzSirYiG>BO4q|cgN8-}+tDPjXOn2mY0h>6%M&;s1yT9N zcq|QAp0SM8Y+xsL321>k=y~R{!0z^ryCrGgoV{;lg0zkn?9s5-Kr8kMG^xB)U7-RK z>a+89Fd(q4y<2dNXb={>0P^mofDP8dkxq(GIO6=*KO zHll=%Q+Qp&X#;1_TZZlAvL9IF-HuGr^H}2)5gfN2$MzM>*QEDz2F~LGGs%#nfi+0p z3ANB?klS*hSjegcsr`n5iz=7GLpi-$riN8YT?9iCg7WDCUzP)`OzyF!kM~`ywJ(#~lHq z;JKu=HL>6ZE4)|w7 zv#p$rZQL8NBCIa$a;Ua^Gog``>x8J7UrCp30#kzzCKqv`@6J;$S4eO)y!ud%WoTV z-Nj-dW~Y@9q0DfKo1;{H>x*H?7u!Y$o9eca=ONQ^CT$+0O}Ir=K9hawa{~oDXu_8Q z>GqeUpz2Pec^(2oj_LcBuiK|SUE((~ORbiGIt;p~#Gy9ERt2y>3pI~?L5A0vT;pCq@pf^r{AXhc2sGtdDh{tAxc zAi4-~4`;oEy^kr%qE3gwk%h&XydQ=|$u9}CgrHv@lB)QAc{tLyz#P4V1*E7WORi4- zjrrGd#w4u+q3Q z*4U0U9;h_#iZ#9;YdlhE+#PGY7;D^JX?!Bq*g-C;d6Yj<{?G==pW%p5>)dHn|M(;s z(L)-aQqEdJgEf9MC@x6c^YLy+HgPM7c7|?yH*qV8CEdF5ZU;AUdya0;)9r;#+$uIV z>9Q$CAoQ~$2|``xV_Zu<#<<+^rJU7ET-B-VKm~Rak6VNnQTR$fK#`+l_7Y{E;8T2o PuPD(ed4zB99a{ebhLRUZ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class index 35c093d7da6db214b34b30b12dda80fd165cfb39..c71aefc151acfa2b8c6dc854834b7e242be6561c 100644 GIT binary patch delta 1844 zcmah}>r+)#6#wlD_nynS=K=u|m^{Mdd9Ub^eA#RN8bDr(yyh71M+b#@1a8m zUO<9?Gtk=5(yj=-WZ-2a3%FWqo40n>y3r>`v?bydIiszJka$(YQ3J0@!=1cH$AJ1C z6o|aHJ`Hc2^Sh@-yrZE;Ao`!x%ikk9B0tk{0iSD_Ruz09oAgWKOS#;WnEthZcXqtz zW>5dk)4iz=rwTW|5iqQyl49%RiVS!X7JerXYn{&?9GD$CI(z(rb^X0OkP# z{*yqmysqCbM|Dj;V8o;xgJ54G5ykaQw#Pkh%w&;ipCIBZTOo*B{@`)!;|Fj6gfOIheM*xArT*8lsR0~Zhj79*6=X* zuf$gzc4VK2K8ei&WjT}BA~1;c+=zgzj(#H8E--~IfXv3}Y*9)_1ozJ(2^-k-Y7}52 zO0kK=YWP)4yO}X{CPg)8Nhrp+DGAes$XYFR+=i~9@fJe`&RQ+y%qB2MDPO-*$+C;d z)w(CN2DwtV=T^}yt4cZsL*4c$ifXfe0taRDeTl&r9jHo%nEcb1MeEJZtVu^lT}4S!!K!frf?l6bAOXJkw(XgB&F4Vw4qb4!zq%|{r)I`0Q zT)SW8zEHoCxCsbcMBG|GhljEp8H6+F9~-{=n;5gpwWhh3T=pXq2lxUH!O#Ed5Ixj1 zC-DtWnD32Q>|%1~{1^;`Sq)3MMK+3E?Z2}N&QEV0>Ag;R^Rqil7JX#bPj*MhPW~@D zYvR>7-ODbl7@zRaflo2XHJyV$MY0!7`;}=gnf9`2zcuYu{6Jrwem`Oc*OB-q9e8o< delta 1505 zcmaKs{Zo`x6vsbzm)&RCeHL_i38)3aT#%Qr$%Zk)AA}zQ5r#>_tfo?s#atvH0^c?Z z%U;E98kiQnl2!(2TacL*Y5GSr{n|i3Hq$too#%PB9e!$d=H9#aobx^Be9!kjmsg#R z_^o(8ETF8qp_>`|f(l{p5DIho&l?%S4>`|P~q+CjO`xm^zpj>%UG%2)VKTA zq>pmc;4KraxA+RZ2FDcl>Z6{p-j(hPyW>0C87I5$7&KLdFMKPs}E`^Cd!ixbBdPhD`#KkFj1 zQeD=~W_jALibCCL7V0rGRP;8A5E*33eq2~~@eb*7_TZIuOkXwctQePjzgWN|jUXrN zlah5A?{ZRh#VPV^|D0f5i{)P+@vt19pcjxu3E8Y5mkMsP<8y7i%49rL@*eLC!h}S* zQ7df74{XSZV3Qix3&GMlD{--yVQngKEg$lc_yv;?E*rv!y1{CLQL%iCgVUO^O>ky1 zYMU&aa%lzHQaEiXoCdoTmlVB@Pxw^wO^9azb(3O2G^7*7WD>L{^MHURGM9qJQlPOE z=#weXt^Ws_CD3EKc3ElMA~9FS02_qLjWU21p|Vwyx7h?bJmjWQC`9QbGJpda_s?Eidni8<7|>cOmRtfEPp8ejAD*wAwlW1xVyy;5zz;1 zCd|V^c{{aip@~Q2x0R=Olnx$ah{sb?4%5JCyC6xJEO$Z>0=RDAH;7)BP{kRCP|;GJ z)Nb`1t(l=HG$hHbeNS@VCwoPL1M6g2-5x%HX;}|iC0d6U6CBd9P=5Tdi+1bcHL*+* zu#Rt7P6F)ov0jLRZKBZaa_SKM?vS3kM5$5fv75WuNi{KQ=#dB6OFex&D4&x}4DbYl z;yGmZxW*|qHHfG^^SF{AN7OEX-N5I3A&Ki*$(KS#nysljaNm?1>Xs}XgMh(3A~0o* z3qv>wi3UXvQsxoi#L{bZYGNBJlM@Te!I~J^EmaBXg_a}Zc;Z!4led0XQ>k_xE$x+B z_EE-u(SMvO`N;kEro!@q&f031EU9Lympn@ow==M!>r#!IuLRr06c(is(bkOA`mMdr cF%ywL7wkV5?e&tq{=~dE`^EMPSGY?4znEz#LI3~& diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class index 55dccb2e756cb5c010fdace9dbfe5a2d814a1d94..67463b3b4a8a581d85377d71a73099ea41aa14bd 100644 GIT binary patch delta 3016 zcma);3w%@69mjvCO>%G3+XunH0t*!7QJ@&9Flq{{BcK+Fb#^?;a9e0^L!nJel2)qB zC|0e*QSeSTDs%IJolcZW32j97azojibFS>|+ zUf=)k|4)uDc>Qwc$)Ut?0851EaZa*lJXB~rX`6A6-Oi6Go`@c9t*_C&Tk2}OEB#mc zHwQu?y`jn)H4fUQPP)Kj4f`Y0mG+o38>>*Gp%%JvpJQfr5Sta$YuJLV#tFwPHHbzH zAv76pIWC^+cOs04f~bZTvI3A6^hEz$Z0@0vB`%Z=C61@ooLb`3sMI#GrjHQa<5 z0?vpY^*4p0dMK*mQv%9hd(Y{^N2aNW83D)K4@uu!HSEL+?i$piReGp4^%gnRuHkk$ zm6Mv1k0`HoArp6Mn1T*tn=*Iur#0-tWS&K*)LAar;8C&LII0xqJFy3Q72Ko2K!?C0 z<0+fxvj0p+Ae$S>ldcIg>hdh^be}P(EFS-P4g0W_uc(i#Xl#zQskq-LRcF1=1v~C^ z;sJb7!Iv~VD39^UV=68<=KL`6%3(cFTg9O1VHX_mxS+_>4hZBeIsZ>Zx3OEjI#b1C z#>A|WlCKDeY9|ijNd-@7ID{U7d^0Q!fl$y}6%E&if*jJfwFDX><-t%>Soa4ay77{j z_`wY__=h$0qEf&S)*G8zbro>|_h4_w>ApkB2lp2wJMSL6xBc{?y~$l2$z6}A=rek< z79Xy3b_j9A=(1h$e=Bj?1rWw4v2^xYzN68YpIvC&uQ@X^YK)hi^CzB~?0Grpe{BLfNQNKljxw$B)^jGH$17{{HQk*y8cc$SvNSs)+B z@l}2bti?Lhf2!-CIA*-)^2emtQtkrmPkBk}YxugkazDO-Z<>4V$8-1=Go=X4_%=@P zgsZRy&(pHw1+LCP<~eLsaFGArTrNI|@5rNg>Owka(WPxp(LA>;j`dF?-?cH0g1K?T zihOq2{kYXF@;PMhlkCmug|i=UPA@CfD!a`kwCLlhVFf+B`iI5|9tMY^OuTOk$aZ*aQ?(2(vjfhi@ywYRtp+xRh1X ziw0bVMileKmt#8?m_)DR($y%yckv=EJ}OPEElsV>WF;ffhVS7e9xbi!<7I-FfExV3 zq&A)WUWw6km;hOZhOo#2s35rTEU^px5CaxPoMB&vsgBf^t><2r0)ua-TTRg%FaRL=+lJvHcgbY6naR2mF52t) z*lMQj223P^5;B%rtDtBqsiA6YVq3$u4!0tRz1WNcs7F74=e&Te%((_8QDZuHOK_1H z5ry8@;#7lUJtkfElGsUg89P&d}L-mE-sY@)+V*IWNnsHIm?n zRPhJk7{bL=v4U09@oWas^$t{;XL&(^U#6;K3}Q34lgjEGTOJ>^!piDsRydzyG^nHH zaNWDhAuAxYUMl1F<&iD2+*z*2<9K2pCdpmgYCoQ4z@^WQm}G9n`v^@I%>#1$sI++} zt7tA`sRXN_ify#QtYJ}j_&aeaTA2qoQ1javhZ`A%o6v+Ev~K3_y%=s|dk5RyXgB$9 z+Ea9n8npAEdElfwcc#h6%C)FZ1$p;<+V zK6nlvQBcP28K|dBInC(B!_6*+U NLMPX}gCUB<{cru@@;U$j delta 3036 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 diff --git a/discordit/build/reports/problems/problems-report.html b/discordit/build/reports/problems/problems-report.html index 4c5d4cfa..46a39b03 100644 --- a/discordit/build/reports/problems/problems-report.html +++ b/discordit/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFChannelService.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFChannelService.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..d11cc2fb032e5326c82d06be20dec8ea0dfe9a65 GIT binary patch literal 5315 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 w6E=L)y#Cs}{uaMyt26iu{%)54XF} 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 Z`tv{f^DX`P4$gC)opUZIijo1>e*tAUXQ==H literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 index 9e295dd8ff4083cb1578af67a394246eea7e6ff8..187eb54e682913114883514599a1ada8bbd13b10 100644 GIT binary patch delta 1482 zcma)6TWnNS6kU5By`4KVo#_nIW+)7UZOlwts7O*v0Ext;G-*jhhmWc;wQZC~Qyf|` z#!wB!nDD{J2_YeV5Qt9ngU}X6Ljs8jM!~j-qWGXnQQnUtmS;+bb?%*(fIr^koV)Kn z`>egr-s{}H`N!+bqZ0=X0a%RNy=KOg{YuOQuGISWw0h2*rA8&7yafUEk#mlk;SQ=X z^R#1ELbdo~D(La4rDp80kRs*qZ76O`G_G!WyQQYPYt`DCRI1_mDKHJP)wd&QB8DSA z9L0A6&l~MsI%7kdV9|eeUN5ZfPx|{rPN-8wyXC5SKM-+^3KHstK!rLOFs8S@+0gb< z=kk`0c4Bouv>R=r`V8+m{mDleEljQyI94%b@G-6n)mMRNDlDomFRZEw}-ULlcY68wwMZe*scF@*9yNTHRE!L1#c^+2~JMkv*(NmhC;n3LIvQkMIP?*wT}%?J!Sr7H4pY zwY$Mu{fl$R;k>wULHxKVVO)|jT$VVlNCHALTSuU36xT{=5U<1RAMN{c#uG9Pf>3AVN>fz-$8*Y`V4jC0JKK z+>a~*6R64~6H4FV>(&j|KY%EQeyqzc4=+D^~wZ$}O#f%6tNQlxNDl2I*(;~zcf-oq0>2Zj9 zOEI_=6_{ZW)`L)~t+toBRF+!W0xeppee?Sp^w`79oH=vmeBYe&P2-#kGtGv9E7t&| z<71^6GG(C>bFSLyajVUv+8xspRi!6RZ7{v6+p{M!I&s;yyxn;zyGja*QgU*ZE>`El zPgIqAFNoY%*`q7`U4qe8L{Z+3{FId?#RWU^4SZ1E$myyka%$!X2;9(f9Whh53RidX zB}gR=2kJTNV;}+zoIOJUxP{x?h2akF(o?5qL>-lSbt7tJsgBBo!TAvG;XYRr`_PC7 zjPqbG9^w)6`mr64@dQpxz$QG!Gq{k1HF%B}B$S2~Xu?Y(H}ifRoP%^323kZ6_zc7u zh&PY`{KBGe=1<20&4Ppzs*XqdgjCLtIkr(#Sxb_uNxqe^ZiN0?UlC>dAR{d*45rn_ zI6jw_Cgrd!P0DFmnv{zi#J=0CPWfV`PQ4mCLw)zHB5u~$C8-)WnGeb$b&bor*foqn z%f_HJgwd?p{5~TW>+~a->oD_d_5V*E&CmgzCuSPU;4CA$NyddSXNV2iswWN?$9Rqs zjtaU`Rbn7pde#0w(uiuD4uORWB+|V>+sT>O-E_$^z|F9jGZ zm2FI;i(k#=PR9~Ly{3j{A%kG;)Z_|G#9R7CQW7x)?w~jhBHoTWf}kDOL{$#meS?7Q ztHsWtrjw$bg+%Qvq!o|V))lfFPQ&^Scb(R-vI_qytI(3WR#u@Ucb6sig9x86KnMe! z2Hy8$A`LY=CN@`ZdtnY>85O8EeFz)muQB;2=&?Tq+iaa)1_t@z-2WT`1DIlGW-2X; JZr00zobxC zp##M3vWDU{kNH84h&KfI&(P*$LoWz>v1f#yHIsRbG%o?Nq$h@G>FR-P_ ztid0RdINq7Kj=>Dj@F3>3a|b*b>E2#j&&=p97$2FlF7yzD!k#aKV-3P9oy2he)jC0 z8CUjbC4qChQ`MWLw8C4Y^r9YgD|P9~YUh^w1iow*>z0c3S#5>3gY_p*_gH&fNw=%L z+-b=cYyP(L8>TwbryMiw3tmo6wDeZ{XeI}%<-jb~Hrw{@Yp#!;R6MMgd2(}~?2Pe! zi*BQSl+d5mdaJ920eqY19mtkfSBHW=Z;a1p?RWL>&3%tvy|{5p$G_L6o7ywgL0X!_ zVqNIDl-kj5Zpq3#`%hz_HGi<=q%2Ap!lw<#g0cC6&AO;-XxG@illvqko;fDS*II|V zoypb(n-=>g3~Jx+vK%^oc>1`6Y|ZJgu5RwJYx~Z$Q|TQ_O2_ckQxa3akjhel4A@z3 zZe+4dFq1ul4dy;ms-0!WcY7uq3fRGzotuoYCH%XwmfSe;0MB84i9}D1I84kHZx@G) z-4eSejbM!i-dVy(R##OM^N(V6b2$q<9d~&0Xf!2^5JuifcWGn9v0}bB%sh_O)o?lm z$EbMDc&&gWl4-PgoZz^d3f(y_&SEgE2Pe4mTnZJr?vaZXw>DABiND^x@s|FGH{OaD znB%rlx3bNl$OmQzgn&Z#0oLjEI2HBPVXSiRUVK-;tZjZzfifiCKL;^rf|$3Dfjve zAXQ4W?5qqwNRjc;qL^4C=Jpo`4Aie@%%g|Yhuwi>qZ*q}3)F>Dz-E{!kI*9RQE{YYmP33TVm?Q2)9l`xkInY{2>)=`su|#+taV>J9LmT)> z=glDO1xOp=dXb~!IUDd2=w(RLjLw@Nd2O$NHbb3OreoOx)m!!|s1?#{aJ|l9>bLaR z8<4ib^(F_Y`?i6$qj*dkxRL^$5_k*61#Ng6v;$hmm_Pd+(7SMllJy!x-vjOBmP@zZ zhui7;0JICrZpb;6hK@dj(hfPVGQ0=0H%^xUc3+$$+kVgixITjXF_aEypYT4qko0<= z!u1*CgHR4ZI}FXKM?MFA0ks*%fJdOVpzJ8<7}Vo%uR`Z5+rI>T1@#1^Rp@-_)UQF` zKsgEdTWH_Ga|)6!X#?eHC}$v_g?0{}?;+`O4*vi;4=H2-9()1xBh=-coqvM55@i=b nKSQ|$`7*R$;Q5tj$59$Je}nQnz`=fG$$!fID zPa)7Ef*&NRFj)=eG@af+TCVCYuvJa#n>uer+<(!na$^Um2I4{3(H)gr4CXwe-avSu zGK0mUOE*Y)Lxjlv+hSXypZyzu^77pwtCn@28_d2#5A;N389I~6kR>G>BdRJ^r=~Uy z?LN*Wrr$d1#lFi8l%W!yQcCV|+wD~Q&xC0)W4&DBDrEsfn4xlsH_x4>%gwTq~OLyX~yV_UpZe3l0&u$*Gv=f-jp zL6&iXP6o5iY9LkBVXv1$+_SbB1JVPohZY6K_>M=m>~y1vT;Oo+%8F|9#n!m01Ink> zhl13SVBVF>pQ^7~Q8pvLJB3}?nch)&Ix~d(fc6bVrDg-qDI<-+{=1kX&0`kpFV#^7D%abEBSJmNxOt^7A1gIfS=XL@n={gEk?ce|DtZ!4E9H1H9u$pA zGSl=zzMfJtOXcUMPARBAXEHe_H~pzsuv1h~9#XROZrI+A=PuN%lvNKTlN5yv8?Hp9 zeD4fqa^IV@nn__ zQ<4cW+^9jIW9^jB@cyII=h%Py+W_8yjQr)tu~(4;soqCU7!^n zE8$5llw>tWoQRV-_q}n!RsM2YqDt#Q=5H)AOc{CXl%oHci|x}V_DSNjGP0&p+Pu4I zP^U*5L$r;r(GY_HK_v3xXAS>vU@EZ4hhKUJ28Ez_fDyeS6(~tq6&jQXpa3@%0KFNN z4?=+eK?nu$(Flczb|fE&kV2eU5!Z+|Dn@UOw>QPWJG?)}Gt|jc3YALfs81+o7uSCM ziC{glW%4hR_e0Q3Y~a$UbSi^NaUV{|^aAK(#F?t(7}1_O3uh^2%S}u+m%}BCZ&bts z=3p~xp{-Odl}F8`Qm4B|5TQ!ZHIJQ7=i>#q04IpxLR`oeam7F_0xH#=kV(ZTuTKFl z2Brk$HlXGb-lT|@0#gQZtv6W?xB{XoLAeB|rTjTRVvN5SF=83uDqueYRWW$jsoXvX zyd2nSpo_uN4h>!b_zU1_fT{&5?@eKKz{9eZYGF-KDP1?WG6CG|=G diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java index 1d070eef..82585fec 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -209,7 +209,7 @@ private static void messageService(Scanner sc, int n, JCFUserService us, JCFChan System.out.println("존재하지 않는 사용자입니다."); return; } - ms.updateMessage(sc, nowUser); + ms.updateMessage(sc, nowUser, cs, us); break; case 3: /// read @@ -227,7 +227,7 @@ private static void messageService(Scanner sc, int n, JCFUserService us, JCFChan System.out.println("존재하지 않는 사용자입니다."); return; } - ms.readMsgForUser(nowUser); + ms.readMsgForUser(nowUser, cs, us); } else if (m == 2) { System.out.println("어디로 메시지인가요?"); cName = sc.nextLine(); @@ -236,7 +236,7 @@ private static void messageService(Scanner sc, int n, JCFUserService us, JCFChan System.out.println("존재하지 않는 채널입니다."); return; } - ms.readMsgInChannel(nowChannel.getId()); + ms.readMsgInChannel(nowChannel.getId(), us); } break; case 4: @@ -249,10 +249,20 @@ private static void messageService(Scanner sc, int n, JCFUserService us, JCFChan System.out.println("존재하지 않는 사용자입니다."); return; } - ms.deleteMsg(sc, nowUser); + ms.deleteMsg(sc, nowUser, cs, us); break; default: return; } } + + public static void chIdToName(){ + + } + public static void uIdToName(JCFUserService us, UUID id){ + User nowUser = us.getUserId(id); + if(nowUser == null) { + System.out.println("존재하지 않는 사용자입니다."); + } + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 84a03add..862b803e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -71,7 +71,7 @@ public void readServer(Scanner sc) { System.out.println("==================="); } -public Channel readServer(String name) { + public Channel readServer(String name) { Channel result = check(name); if(result == null) { @@ -81,6 +81,16 @@ public Channel readServer(String name) { return result; } + public String readServer(UUID id) { + Channel result = check(id); + + if(result == null) { + System.out.println("해당 채널이 존재하지 않습니다."); + return null; + } + return result.getName(); + } + public void readAllServer() { for (Channel ch : channels) { System.out.println("채널명 : " + ch.getName()); @@ -127,4 +137,13 @@ public Channel check(String name) { } return null; } + + public Channel check(UUID id) { + for (Channel u : channels) { + if (u.getId().equals(id)) { + return u; + } + } + return null; + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index 93912643..1eb203c0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -7,6 +7,9 @@ import java.util.*; +/// TODO: 채널 메시지 조회헤엇 +/// 구분자, 전체 메시지 개수 넣어주기 + public class JCFMessageService { private final List msgs = new ArrayList<>(); @@ -32,8 +35,8 @@ public void createMessage(Scanner sc, Channel ch, User user) { } /// update logic - public void updateMessage(Scanner sc, User user) { - readMsgForUser(user); + public void updateMessage(Scanner sc, User user, JCFChannelService cs, JCFUserService us) { + readMsgForUser(user, cs, us); System.out.println("어떤 것을 수정하고 싶나요?"); String id = sc.nextLine(); @@ -68,12 +71,12 @@ public void readMsgInChannel(Channel ch) { } } - public void readMsgInChannel(UUID chId) { + public void readMsgInChannel(UUID chId, JCFUserService us) { boolean capture = false; for(Message msg : msgs) { if(msg.getSendChannel().equals(chId)) { - System.out.println("보낸 사용자 : " + msg.getSendUserId()); + System.out.println("보낸 사용자 : " + us.getUserName(msg.getSendUserId())); System.out.println("보낸 내용 : " + msg.getContent()); capture = true; } @@ -84,7 +87,7 @@ public void readMsgInChannel(UUID chId) { } } - public void readMsgForUser(User user) { + public void readMsgForUser(User user, JCFChannelService cs, JCFUserService us) { System.out.println("당신이 보낸 메시지는 아래와 같습니다."); UUID uid = user.getId(); List msgList = new ArrayList<>(); @@ -101,14 +104,15 @@ public void readMsgForUser(User user) { for(Message msg : msgList) { System.out.println("ID : " + msg.getId()); - System.out.println("ChannelID : " + msg.getSendChannel()); - System.out.println("Context : " + msg.getContent()); + System.out.println("보낸 사용자 : " + us.getUserName(msg.getSendUserId())); + System.out.println("보낸 채널명 : " + cs.readServer(msg.getSendChannel())); + System.out.println("내용 : " + msg.getContent()); System.out.println("==============="); } } - public void deleteMsg(Scanner sc, User user) { - readMsgForUser(user); + public void deleteMsg(Scanner sc, User user, JCFChannelService cs, JCFUserService us) { + readMsgForUser(user, cs, us); System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); String id = sc.nextLine(); @@ -118,9 +122,10 @@ public void deleteMsg(Scanner sc, User user) { System.out.println("해당 메시지를 삭제합니까? : Y or any Key"); String ins = sc.nextLine(); - if (ins.toUpperCase().equals("Y")) { + if (ins.equalsIgnoreCase("Y")) { msgs.remove(msg); System.out.println("성공!"); + return; } else { System.out.println("초기로 돌아갑니다"); return; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index d49a8aca..f92ce93f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -3,10 +3,7 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.UserService; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Scanner; +import java.util.*; public class JCFUserService implements UserService { private final List users = new ArrayList<>(); @@ -154,6 +151,13 @@ private void updateUserPhonenumber(Scanner sc){ } /// Read + public User getUserId(UUID id) { + for (User u : users) { + if (u.getId().equals(id)) return u; + } + return null; + } + @Override public void getUserName(Scanner sc) { System.out.println("조회하고자 하는 사용자명을 입력해주세요"); @@ -182,6 +186,14 @@ public User getUserName(String name) { } return null; } + public String getUserName(UUID id) { + for (User u : users) { + if (u.getId().equals(id)) { + return u.getName(); + } + } + return null; + } @Override public void getAllUserName() { users.forEach(u -> { From 4ec8d990715d640c020b634c00ba238e247351b3 Mon Sep 17 00:00:00 2001 From: Alpha Date: Wed, 14 Jan 2026 15:42:39 +0900 Subject: [PATCH 06/35] =?UTF-8?q?Test=20build=20=EC=9D=B4=EC=A0=84=20?= =?UTF-8?q?=EB=B0=B1=EC=97=85=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 50949 -> 50949 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 22447 -> 22447 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 22679 -> 22815 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../discodeit/app/JavaApplication.class | Bin 7249 -> 7249 bytes .../mission/discodeit/entity/User.class | Bin 1784 -> 1792 bytes .../service/jfc/JCFMessageService.class | Bin 6633 -> 6647 bytes .../JCFChannelService.class.uniqueId1 | Bin 5315 -> 0 bytes ...eId2 => JCFMessageService.class.uniqueId1} | Bin 6772 -> 6635 bytes .../stash-dir/JavaApplication.class.uniqueId0 | Bin 7249 -> 7249 bytes .../compileJava/previous-compilation-data.bin | Bin 1442 -> 1442 bytes .../discodeit/app/JavaApplication.java | 40 +++-------------- .../mission/discodeit/entity/Channel.java | 15 +++---- .../mission/discodeit/entity/Message.java | 19 +++++--- .../sprint/mission/discodeit/entity/User.java | 16 ++++--- .../discodeit/service/ChannelService.java | 15 ++++++- .../service/jfc/JCFChannelService.java | 41 +++++++++--------- .../service/jfc/JCFMessageService.java | 1 + 21 files changed, 70 insertions(+), 77 deletions(-) delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFChannelService.class.uniqueId1 rename discordit/build/tmp/compileJava/compileTransaction/stash-dir/{JCFMessageService.class.uniqueId2 => JCFMessageService.class.uniqueId1} (57%) diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index 14ff59313e3c5c1c8419da9d23ae60a8c51b6872..8ea1ef38897e4cfdac2359aa2fc4729344101134 100644 GIT binary patch delta 544 zcmZqeV{YwZ-VnFcp(?dJyD~MUAT=x1%sj))s5~pRvMRqMBPUhh-<{?+`;N`{@62fL z{r05Q+s!N(LJXTHU-S^2d|)NVnNo7ehIV4GaHrd~k*h1xGcPLF)s6xa8ukA+Wf zTC2AGTCa_K%!3`Tc%b?M}(x zhSR)s1QlH~;$~me5bB;a>B4T~ix$ib0xYg+KB^y*?yiqop}CYr?%3q@^PDCh*s7-e z<&dI+)v6f2?xXX6%TIjWF?ZFh^Sg~3_<(w5IQ$MevvE@LvQO%L6W6#ZP8QtOBO(8Y zuXo!2<$T4jc|GSkaPIG%4YK3A@npUu5|htv6OjJ30%X7>C!hgAJ(JpU!#97s#;l#y z*mmpMVVwsQ5?{hE{HDg=YUzp0nL8A6%z;8) znYT)1HK8Rb46m71WpwP%^lygjM* c@xnz%z`j_-&BDmQAQCaTae~O^13O)L0lP2!T>t<8 delta 481 zcmZqeV{YwZ-VnFcA+4mWB)hmgr93Mm)i}>AwIGQ5yGrN3_;WFMM#$atXRd!X ztyN~4JiFI^^3&NllmE|nK6&egTLOlY!t30gberFwyXDlSE1eaSFU&f=Ic<{~lR!aU zMW29MkM*wwhb8ab<2X0jKXTUO_xokFl|Fr4rf}iYvjxkK{rVQkwC~u|hg)|WU$kIm z5ZIF@lkXeQ7+I?})_Yv)cruFE5w@G;ER+(6A%Tc4tlAUtgEEJj=gV#Wa3$;E{y-8Hx2_ zlle~XPQMh)pxls8=IGlqmZc|wLTiM#u9G>#|M9fEbkYsR@)n?w z^{a$=5(kd&I5caUNA7lp+dv^ljwOF|loj`7vT%J0pFV32P{`BiG?(xFnEcEqpBu`S ze&S_Wo?lRsnV(mzm!6uJT9mli;OKTnxsQn&xhk!P{Acy8+IDS~w9;R&FBWmLFfuTR PL`-g+AhP+uPFG$4=yu;T diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index f5c3437665a31cc8bead3a746a4586b629b2185b..19312f63e6c54bc590e1746cf347bb2690dab8e7 100644 GIT binary patch literal 17 VcmZQx)_UaMM6cU+3}C=03IIOZ1p5F0 literal 17 VcmZQx)_UaMM6cU+3}C>>3jjXS1oHp@ diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index 1416a2bd5e0dca4c16572f1433599b17600e8993..088a62d90eca2274ad9b2d861459d9a1c115a447 100644 GIT binary patch delta 261 zcmZ3#o^kzp#tkXH;zy+>=xyy;W;1V3s(rk05d#C`>|HFqM>bdcx-lx8T>4jb`xTGv z^*g(At_AS1fn;|+vAn_n1}Y7cANrLkG{lSiIAwHrcEhHp8bxY?=3qq+O3NUMSmhR% z`!g$87u50yiZ`BG*}S|WBec>Jtmw1Ve25}Z>B-ZBR!DS8{x+QEr6Z{5nh`hqqJ|LE zG2D~GgX}@-|{%)@Jbz@XmXu>&{J?($C z)0LX-+l-^R!Lr+g>KMR4lWX!rzcPjQAu%Ps;ubpn4EEZ5SEAm66m1OP$cHFmWm#PA z&#Yi<{j2rLcPXoNpE-kab}6-hP1^c@21Joa+T`g$DX>7b!-MM-rgn+%-mpXDw%9RG{$nOnLqL*SzMC{bOkn%5_-in;g8lkO^TIU6LM}2L f%zVkq!3QKKy7)1Qt{8nNEv%s@iS_&CoxxPR}Z*QI| zK+_0~Or4IaNNHh4JS`#UJ7u4HS4bJ9>l( z)Efh3C4pEFga!0psQnV;^vJhOaebfqSokzhP!3haj-pL2U%q(E6P|P@P)&HbK2ehJmZddOcmZAiqCzDYca^yap&9-;J=Ooqyzvl;7JPr delta 50 zcmV-20L}lOvH_Q|0kAX}0eh1*7{Rj+8K(oY%^WxZvmG9p0kh5@S_A=^u_5>uu`qxP Ivq4B!5ZY@J9smFU diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 19c8b6ed486ef043336dc59df7439771776bfd70..ec5e26708ad5fe653ac64ce7e0c0f3292847761a 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6be1pqX51hxPG literal 17 VcmZQxwaR1i+k`Ae1~6dU2LLo`1gZc4 diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index bf5f57d5bd882780627e0839885082c7a507a793..798fafdb44f92fb4070b35b86e95336bfe870514 100644 GIT binary patch literal 8 PcmZQzV4S`4S&te33F!jv literal 8 PcmZQzV4S`6Deq?h38e!! diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index 187eb54e682913114883514599a1ada8bbd13b10..5b1f07a61f3403ccc38311724665d80a036702d4 100644 GIT binary patch delta 549 zcmWO2Urdd09LMqZSCh@Ai_SQvF1o0#M&$1~#wn#15keQv7(!7qMP_9=^C#1cm2;yF zY5v5Pv+9v-ahixBC%Gu3Si=nK0ynPs?056*d7kg<_xXMXy@TF1x64wTnXV=aq!Q0O z5=mnY^I60Kma~v-J*{Oin^}S%58Lrl%u@ETj0*ixg^%N;Q%433te}xhn#rPtm9%Qw zA%}b95@r=oSxtmIhFHUx)UV_-!8-o1p1(0{uqX;FnoTx^LMMBAtogQ(z*dsjMlw4{ zWv9~ZR)RgcsaRr(guQH}RJqD@4p6Rhh=Wv884S5+2g5TQ-w`R*QjSVFCM6){gp`v~ zPD!bia$3q6DRolL$v7{iUdjb0u&;NK~lX+>==ryC0@_BECjF_Jf rR>Y|7;-l^7la(`W6?}GzW|i6`z6B$3o)}#c%@3yXlUOE#uK4u-`PqsG delta 549 zcmWO2SxD4j6vpA-DYQlO!XYQr3ojCk7P^QWC^cxX2yHiN+Q)3Ml+hMQNJ*25ijoN` z3e2K{mMQpy&?dAA1x}5aWtwefWgC<&iem50cX9a6bIy4qo`~nV+hy6#SXZr8%q5u| z#*xcJ<}sD|%wPdt7OJ|4B`n6LcMW-LU@4nfMhVN=rRpA5aDbK6u!@tcrcS>uvX(2X z!@*BI>uI2XMs_Wf|GGf%5fXCUc8v+-5p=n5DD4+*LsL)P7%4 zJP`3vCpPNDN0joI9W-h6u-1LTL7sAyh!$y9P%RqzOaosKqD>*al-4exL!F)a{hH^z z;T3QB;Nu-Vyyquf{8Da1e6%P&SuCH;MUN%%#ZvfcX?(Ns{IGO-EsNhan?IJzU(4g4 t`RFr0{g%&w6)|W5hOETQ@h2AAFpCO?lhWgqe6)>Zw2dO(VuG&Z%>OrllBxgz diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class index 14fb54b2a6a8789544b141014921a658292874e6..3ca6b208e330cf00559ed852ff1c379f815cf921 100644 GIT binary patch delta 53 zcmeyt+rYQs1S_N4m08?ZP7ytkO delta 63 zcmZqR`@y^61ncDOY`l}NvhuUDF)%VPFvv~rV-ugu#b(YZKiP@Rn^6JC_n!QTRf1oK QK@6yZk--J1iiyD$02S>GhX4Qo diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class index 67463b3b4a8a581d85377d71a73099ea41aa14bd..c4a340908ed242eb536a2282cd7e52554abcd85c 100644 GIT binary patch delta 1005 zcmY+C+iz4=7{z~w&UDU{vC^r%9OP0ifl{U_v|KvEP>O7HOCg zFt&jP%jPy!6hTr0Ja9dv4GMUPsfmi0sQ84B{sG1Z66)GDCGlmSwZF6X{?=OG`m5xh zlFLEY>5I5DqxTy(y*WL*ixWOj~kZCSt{alvClSCOqHj~I9MjmD4GarvdjHH^U zsbv%!8O?s3I!pn_7^j94j351b#$;TkFoGg-nX3OWCQ_{RSt@ys*O8 zGihO#d63Bta?jc!6?ON@Xn- z)M;1GLN-WoBQNurZj|aqq1gV)cS0h`=iJuUqA&OoN7YH2_>JGCBE*~A=MS~)*MV#T zkBElY?x_BdC1yp=%0O2iC(Om1@n!#~S44(xyrMU%n7~rmwu}WbeFe)|C4#GYRTOJv z;u@2l+u)ou+j6Uhr>r#*EA|8PZEkV$Ly&0gi@lJ~0Uz6Ks1~!eHlL6B_++SNOC5cj zAKDMP*fY>=eG3fwwpf`!tzFG9Qx4_vIaDyJUT070G{AtNmUg+^$UC;Gt^3n$fTV_>#Dm4m4EFSj4 z(F;D8Qsmoocy2FOhf!nCwAwLSaKnP0fgX!*TC67j&3++S!aJp5mlC>L32jk|_b36$ zw^_nox!fud`y?kRwrw;^MGFUn4hp@iwOxVl7z{)$VVy1H0pAEEG$k7i*D87(jZWqC ruA*UUU-7l3YSH)nAVL=1lOqAqXwKj#Jrfk0CbQKWb3dVx^LP4WZ(c(PNn$i|WBBFIF6&2Ii zq>6ad3J%pOA@P&rH4tapH2u&?8*Tf^ul)mBW1EQUU@-CCWZ!*v_St9cwbs+3zl$!0 zJ(KVzrXQl!5o7WrxQJ^RHJJ zIn6gNXJVW+1(9W$9S#Ghz5ZNjj*RreX@rQH3xgh(q%%vzNv*$&>wsgeoqV48Uc0tog(8BsJ@ZEss0DD_sEop1J15S1GZC}lnzU<~)-+%nP z&Uf~-Th2ngoXwX0=z34gq_aZmuM~ULy)4buzVo&Ha%vPmVnmHd*~4mDSwjbF>0+Ij zSkG?~`*-Th*_^h>8V$C)wwQ|Cw-ZZ!_m!5O?*-KR1A4`rVh-l!G$pM5zSqU&ek`?n zHd=fySH5Po?d<8WokIK>8);Ow zi@h|_toViELH6}(U%iBg8uNL=56V)qgtdWZ(Z8}mi+p%jHn6qt_+ARy>}P%v7@Pg7 Y?L&gFg9n-t7LW$h=nr+OOq>6~3!358A^-pY diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFChannelService.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFChannelService.class.uniqueId1 deleted file mode 100644 index d11cc2fb032e5326c82d06be20dec8ea0dfe9a65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5315 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 delta 549 zcmWO2SxD4j6vpA-DYQlO!XYQr3ojCk7P^QWC^cxX2yHiN+Q)3Ml+hMQNJ*25ijoN` z3e2K{mMQpy&?dAA1x}5aWtwefWgC<&iem50cX9a6bIy4qo`~nV+hy6#SXZr8%q5u| z#*xcJ<}sD|%wPdt7OJ|4B`n6LcMW-LU@4nfMhVN=rRpA5aDbK6u!@tcrcS>uvX(2X z!@*BI>uI2XMs_Wf|GGf%5fXCUc8v+-5p=n5DD4+*LsL)P7%4 zJP`3vCpPNDN0joI9W-h6u-1LTL7sAyh!$y9P%RqzOaosKqD>*al-4exL!F)a{hH^z z;T3QB;Nu-Vyyquf{8Da1e6%P&SuCH;MUN%%#ZvfcX?(Ns{IGO-EsNhan?IJzU(4g4 t`RFr0{g%&w6)|W5hOETQ@h2AAFpCO?lhWgqe6)>Zw2dO(VuG&Z%>OrllBxgz diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index cf56dcf8d8d4c4898ef0bf1ab4d8ec7d2b3d8fc2..93be34c486a8a37bee9fe68f03973f642dc6072d 100644 GIT binary patch delta 69 zcmV-L0J{I83!)2#h?2hk?V-FegPx|;9VRS delta 69 zcmV-L0J{I83!)2 message = new HashMap(); + private Long updateAt; public Channel(String name) { + long n = System.currentTimeMillis(); this.name = name; this.id = UUID.randomUUID(); - this.createAt = System.currentTimeMillis(); - this.updateAt = System.currentTimeMillis(); + this.createAt = n; + this.updateAt = n; } /// getter @@ -22,9 +22,6 @@ public Channel(String name) { public String getName() {return this.name;} public long getCreateAt() {return this.createAt;} public long getUpdateAt() {return this.updateAt;} - public HashMap getMessage() { - return this.message; - } /// setter public void setUpdateAt() {this.updateAt = System.currentTimeMillis();} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index 8220f609..1879be1b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -3,27 +3,32 @@ import java.util.UUID; public class Message { - private UUID id; + /// Test: + /// HashMap을 이용해서 {mId, chId}, {mId, uId}를 묶고 + /// {mId : 나머지 내용} 형태로 묶어볼까? + private final UUID id; + private final Long createAt; private UUID channelId; private UUID userId; - private long createAt; - private long updateAt; + private Long updateAt; private String content; public Message(UUID channelId, UUID userId, String content){ + long n = System.currentTimeMillis(); this.id = UUID.randomUUID(); this.channelId = channelId; this.userId = userId; this.content = content; - this.createAt = System.currentTimeMillis(); - this.updateAt = System.currentTimeMillis(); + this.createAt = n; + this.updateAt = n; } public Message(String content){ + long n = System.currentTimeMillis(); this.id = UUID.randomUUID(); this.content = content; - this.createAt = System.currentTimeMillis(); - this.updateAt = System.currentTimeMillis(); + this.createAt = n; + this.updateAt = n; } public UUID getId(){return this.id;}; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index 8869e7a1..101ee465 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -3,20 +3,21 @@ import java.util.UUID; public class User { - private UUID id; + private final UUID id; + private final Long createAt; private String name; private String pw; private String email; private String phonenumber; - private long createAt; - private long updateAt; + private Long updateAt; public User(String name, String pw) { + long n = System.currentTimeMillis(); this.id = UUID.randomUUID(); this.name = name; this.pw = pw; - this.createAt = System.currentTimeMillis(); - this.updateAt = System.currentTimeMillis(); + this.createAt = n; + this.updateAt = n; } public UUID getId() {return this.id;} @@ -27,7 +28,10 @@ public User(String name, String pw) { public long getCreateAt() {return this.createAt;} public long getUpdateAt() {return this.updateAt;} public void setUpdateAt() {this.updateAt = System.currentTimeMillis();} - public void setPw(String pw) {this.pw = pw;setUpdateAt();} + public void setPw(String pw) { + this.pw = pw; + setUpdateAt(); + } public void setEmail(String Email) {this.email = email;setUpdateAt();} public void setName(String name) {this.name = name;setUpdateAt();} public void setPhonenumber(String phonenumber) {this.phonenumber = phonenumber;setUpdateAt();} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 79adc9cd..6a715c5c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -1,5 +1,18 @@ package com.sprint.mission.discodeit.service; -public interface ChannelService { +import com.sprint.mission.discodeit.entity.Channel; + +import java.util.Scanner; +import java.util.UUID; +public interface ChannelService { + void createServer(Scanner sc); + void updateServer(Scanner sc); + void readServer(Scanner sc); + Channel readServer(String name); + String readServer(UUID id); + void readAllServer(); + void deleteServer(Scanner sc); + Channel check(String name); + Channel check(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 862b803e..a9f1d451 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -12,15 +12,7 @@ public class JCFChannelService implements ChannelService { private final List channels = new ArrayList<>(); - /// create - public void createServer(String name) { - if (check(name) != null) { - channels.add(new Channel(name)); - System.out.println("잘 들어갔어요!"); - return; - } - System.out.println("이미 존재하는 채널명이에요!"); - } + @Override public void createServer(Scanner sc) { System.out.println("사용하려는 서버명이 무엇인가요?"); String name = sc.nextLine(); @@ -32,6 +24,7 @@ public void createServer(Scanner sc) { System.out.println("이미 존재하는 채널명이에요!"); } + @Override public void updateServer(Scanner sc) { System.out.println("변경하고자 하는 채널명을 알려주세요"); String name = sc.nextLine(); @@ -53,6 +46,7 @@ public void updateServer(Scanner sc) { System.out.println("잘 변경되었어요!"); } + @Override public void readServer(Scanner sc) { System.out.println("조회하고자 하는 채널명을 입력해주세요"); String name = sc.nextLine(); @@ -71,6 +65,7 @@ public void readServer(Scanner sc) { System.out.println("==================="); } + @Override public Channel readServer(String name) { Channel result = check(name); @@ -81,6 +76,7 @@ public Channel readServer(String name) { return result; } + @Override public String readServer(UUID id) { Channel result = check(id); @@ -91,6 +87,7 @@ public String readServer(UUID id) { return result.getName(); } + @Override public void readAllServer() { for (Channel ch : channels) { System.out.println("채널명 : " + ch.getName()); @@ -102,6 +99,7 @@ public void readAllServer() { System.out.println("현재 총 채널수 : " + channels.size()); } + @Override public void deleteServer(Scanner sc) { String name; int n; @@ -129,21 +127,22 @@ public void deleteServer(Scanner sc) { } } + @Override public Channel check(String name) { - for (Channel u : channels) { - if (u.getName().equals(name)) { - return u; - } - } - return null; +// for (Channel u : channels) { +// if (u.getName().equals(name)) { +// return u; +// } +// } +// return null; + return channels.stream().filter(u -> u.getName().equals(name)).findFirst().orElse(null); } + @Override public Channel check(UUID id) { - for (Channel u : channels) { - if (u.getId().equals(id)) { - return u; - } - } - return null; + return channels.stream() + .filter(u -> u.getId().equals(id)) + .findFirst() + .orElse(null); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index 1eb203c0..809e58da 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -62,6 +62,7 @@ public void readMsgInChannel(Channel ch) { if(msg.getSendChannel().equals(chId)) { System.out.println("보낸 사용자 : " + msg.getSendUserId()); System.out.println("보낸 내용 : " + msg.getContent()); + System.out.println("==============="); capture = true; } } From 5555fbd003a85198f8d16ea0430bfb9540934b37 Mon Sep 17 00:00:00 2001 From: Alpha Date: Wed, 14 Jan 2026 21:48:43 +0900 Subject: [PATCH 07/35] =?UTF-8?q?HashMap=EC=9C=BC=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=ED=95=B4=EB=B3=B4=EB=A0=A4=EA=B3=A0=20=EC=86=90?= =?UTF-8?q?=EB=B3=B4=EB=A0=A4=20=ED=95=98=EB=8A=94=EB=8D=B0...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sprint/mission/discodeit/entity/Message.java | 3 +++ .../mission/discodeit/service/jfc/JCFUserService.java | 11 +++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index 1879be1b..4abc4d3b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -1,11 +1,14 @@ package com.sprint.mission.discodeit.entity; +import java.util.HashMap; import java.util.UUID; public class Message { /// Test: /// HashMap을 이용해서 {mId, chId}, {mId, uId}를 묶고 /// {mId : 나머지 내용} 형태로 묶어볼까? + private final HashMap mchId = new HashMap<>(); + private final HashMap muId = new HashMap<>(); private final UUID id; private final Long createAt; private UUID channelId; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index f92ce93f..7072107e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -7,6 +7,8 @@ public class JCFUserService implements UserService { private final List users = new ArrayList<>(); +// private final Map users = new HashMap<>(); +// private final Map usersName = new HashMap<>(); /// Create @Override @@ -24,12 +26,9 @@ public void createUser(Scanner sc) { // return; // } // }); - - for(User user : users) { - if(Objects.equals(user.getName(), name)) { - System.out.println("이미 존재하는 사용자명입니다."); - return; - } + if(users.stream().noneMatch(e -> Objects.equals(e.getName(), name))) { + System.out.println("이미 존재하는 사용자명입니다."); + return; } System.out.print("사용할 비밀번호를 입력해주세요 : "); From 3366748421f6ca4364e09f855f898be9ebb447e4 Mon Sep 17 00:00:00 2001 From: Alpha Date: Thu, 15 Jan 2026 11:21:05 +0900 Subject: [PATCH 08/35] =?UTF-8?q?=EB=9E=8C=EB=8B=A4=EC=8B=9D=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 50949 -> 50949 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 22447 -> 22447 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 22815 -> 23155 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../discodeit/app/JavaApplication.class | Bin 7249 -> 7472 bytes .../mission/discodeit/entity/Channel.class | Bin 1502 -> 1301 bytes .../mission/discodeit/entity/Message.class | Bin 1589 -> 1993 bytes .../mission/discodeit/entity/User.class | Bin 1792 -> 1928 bytes .../discodeit/service/ChannelService.class | Bin 146 -> 504 bytes .../service/jfc/JCFChannelService.class | Bin 5318 -> 6198 bytes .../service/jfc/JCFUserService.class | Bin 8466 -> 9543 bytes .../reports/problems/problems-report.html | 2 +- .../JCFMessageService.class.uniqueId1 | Bin 6635 -> 6647 bytes .../stash-dir/JCFUserService.class.uniqueId2 | Bin 0 -> 9516 bytes .../stash-dir/JavaApplication.class.uniqueId0 | Bin 7249 -> 7472 bytes .../compileJava/previous-compilation-data.bin | Bin 1442 -> 1443 bytes .../service/jfc/JCFChannelService.java | 6 - .../service/jfc/JCFMessageService.java | 88 ++++------ .../discodeit/service/jfc/JCFUserService.java | 164 ++++++------------ 22 files changed, 87 insertions(+), 173 deletions(-) create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFUserService.class.uniqueId2 diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index 8ea1ef38897e4cfdac2359aa2fc4729344101134..662afa20378f8f1b7eb09741786baa43d4200604 100644 GIT binary patch delta 780 zcmZqeV{YwZ-VnFc!6Y*~CCw~9Iio1iC@0CdtkAq9qd2=DwK7%U)%qs4P=#GO#wVu9 z{F;5;@FNq35X0ul7d=ELA6UsT`K+(n=C!^P*d`aQsTW|p8Z7L$RH#nxv+$I_wB(RU zYc~kIRdnofKWvyn2Z}t~~idFW2O!vvVf@pCKy5f8UJPWhdjcDT$9~Ed5lW z$hdQI<8IZ--ZN(l%;tAFE~yaLF!kB5I)=$Fr%b*uOMmj(-Loh6Z@exL8=@qi(tD#g zFV|&Odfm@ioAvjKF$pL|pOV`8vFL}=A~&0vDN2%){Uc{he!pK28O)l1GvEG}jcFkHwWDKV>#{k_peV}^?RTRwsnp5$lj z4lPbCf~nGWcApa@s3v>&ihwneOP+(+-(9Z=e9rmF?r)Q8Ewhb6^VB(9n-=-`7&_W*`Hnxl-O;2+zV*8=Jm4| zzr-gey*bJEYr^X%Et3O}Xt1;Z-8Q-Qh)Ml1LH!N;FNIZ2BY z^z=xc6O!Cf9vma%0j`sgmm`zVjS7?Hn{1Q+nCB2D@xNiWDD&z4I>xYJ>Hy)B(3&rk zt-G6(kFnPfS!Hirc8-?(aIRm8+N^m1voF0C0ubYAic0&Mn%$Zeo#h?2hk?V+^s+!NcGk^{Q01%i!`%=uYl4GXwCytSC+rt}^owg7JiJOwpld-lOD|=Gt62`s@ zjw&YJ_=snzKl-Se&$}~{LIVI0QjC&@ZCA7Q)&nbQfri@FlTpNAej2!2kdN diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index 19312f63e6c54bc590e1746cf347bb2690dab8e7..0f6b0c0d10ebdec520d29b6ab6a00f60c1494f06 100644 GIT binary patch literal 17 VcmZQx)_UaMM6cU+3}C=04*)*o1qA>A literal 17 VcmZQx)_UaMM6cU+3}C=03IIOZ1p5F0 diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index 088a62d90eca2274ad9b2d861459d9a1c115a447..f8eb5c186bf10d14df1d66ebd7ed772a95fc5191 100644 GIT binary patch delta 676 zcmZ3#o^kzp#tq573dt;94KAYZel2V%l=S(x&zgaOarSYdP!5Lw{F?DehYmP;$d#4GPX<}om^s%e5B3MH9%i?&g~s;tcM5N+fyjSx( z7}L-C6-_7r8M|L1P#&U4>E`5GDu3ys$+j|bkUfh;{Fz>4v@dhftdXy zrWS2y_c=j=YO;5)2-q{HoO=M#auBEx1lT(^e+>o(oQqmjQPUq5>7Gs6hu0UaSqe3H z8blQ%C{dsVoJi;`Ws9)ac|EC$KeJ@qv!OaBL3Bu%O@17v#sW-F=O*)pODRaEu1LIV l>6jMw$(Mn{&i*u5wM6uCh-y{$$?oAm)nW%(CKra=0RXAxzGeUb delta 662 zcmZ3#o^kzp#tq573LlS3P0-ugv&?4Ro>cpI;UWeG#@V}AdXF%G0qdg4ilM@rr}=6# zDx6&US9bdqkL~q4yK=4t@UekZ?tEf-1)@@=Ve&!`;d-H~=0U5Rt;2Te_>25pw-Tgg zW7}j=h#KZEKw8fjNN57FA_xlvN3);cIJacV?8V`e?mW)C0n)Mc0m~|&BoMH20|_)8 z4e=sBP8l7Z-LUDYMvXz~O{lCntrhs&8+hLyvR?i^3d~#}#i^9fR+H11Z z564U_FWJ|fbLt6L(bB&j5Jf7hC!Y)|tM8QjZ8*(KM^MoZn>$pX#B$?~ps+=}TuK9e_Ru z2HaBtP!Lac@E2G3a!66ZYE=wh_tE*kwle<7QXINJjp}JNEDU(Fn8dVTfP1r}$3201 zW1t>MAQl8+0miGr!hTDI>hwMfPYFy*4gm_vp{jVR=-B0c*f6!=_;Ztfx97E(Dz;BL z(tFoLVEM9^Sd0ERETSs`s`O7!{nD!Fjd3^r%1k%=`hMWmY%e@X~Q~96~CIo9^?w@L_T#s zwqHr~(Bc!AO3dXoR4#86zxMB#`=Ms}PscD-#D*xzr}W+^&dYU~m0tIA7DxpEyO^a0 delta 75 zcmeyog>n8S#tkMCjP;vMB^;PG_exnZPQEAYzS&kLfN}CtS&7Y8WjPo(^U4DWU4;jX fn^lzp88`PScQP_@|J*HoXjL2P+3-0o?2Y(uBa-{G$RI2EqI3Ko|3Q`Av(0}5my~Q1S0gk zi&_=@)WWP8hQdVce)wkXtTjc;vzBUit?AjVbe9UjFA$J?8={eg0d0H+>R>q9SzCM! zc!8H(1>+T76KU1b)N`Uud#D!I%C0;pe4fA?bnw@Vqv*t2_E~TQ@9>_y4jjY>bis&N z?8QfXf(c0|MK^j7fb}TCXY^9JkNaa_oFk+t=odnPT|tb3I0Xs76t;$vKMUE?1q~;7 zF52vZR&GRI*dwj%q{$r!#}~>5;Mzhp2Gx&21nE}T%<3!qm;ozk%Ai-$lu@swDHA;i z|K2|Bx;!fZn4^%+wQkQ#CGq1tQuffWv(WiAg?8+|emWLqM zN%HJ-{11q{{92zQ5bmu delta 1047 zcma)5NlcSL6#k~PO!;ZCw6X{ls$fJ9pdMTUCdLFzKn#cn6_Y9kHG)Z9V!U8dV`4lQ z^P^t87!O`0HO83e$%_ao3N9!rB8s-+2Dq^K&2%B&Y})CYH*dc8z3;uby1Hwn(LQza zHh@z6Y%|uU7;_`%uZ3G%!B`#R9Mth8E1u5Tvpumr&(U5?i64j7^o)W8`k|3PEDZ)ua zB!(wZpp6^T96B3^hD}RM%}m%YIHpj^vwU^wH&UlLg~mVO90nqpPH+Ay6~h~9?!W3+ z!HL5h{?tdbsRc6+W{6?m@Ljj6%v)HePTXuhSbH)xG!Wr_SU)SD9tDpskpb}F2S#`^ X8BVPuTSl)PVghcG;K?ZW7L5G`13UAE diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class index 43b631347798147167e7dcfe638dea235627a3e3..fbcf2a3874b0302d97001814122e5a3699503ef5 100644 GIT binary patch literal 1301 zcmb7DTTc@~7(G)8+isTv54EEzGv1&X!~_8B9r(cIyX0uEzjc)L)x=k&QPe{w6`A-w^7kC zgkcRM21YT)kXL|aBpmbbaQg#;9#~%8cjH5$Sc)^W02SHRJp&WC&yW&z8tE=V#}uYD z%ouophu0O9LRH^uFlc9%)8u=f7zT?wN&ePnm4D8_JRUJ*?0{Pl-yl(wDz|Y(10{uP zp4JskmR>aQSW2CBs9H^y(y8TT1E%yV7xL&ZK{E^&{}rfIBl$K-R))T+@c3@iJ>tQE zb>t{PecN(sRv_d#xlBjL(zK=Oe^^vuU>^N;7`hug+9n}2io43Tp=;UIxQTJpI{`LZ zipbN=BpS^Xll6VS8Q6SF$bOCFMJ!93$&Wm}ULcKvG>~=$DKy2Dd}Jz;pcFMwUwA_6 zQ#yS{7jc03@(-{pXdC6l3-p$+FnEFS^2`+`FEE?Lg>Nd&3awL=1~7=)OaFpAt$p

bG`CMJ*X1^Y=5XJ)YMfzs??(EPOg(5|2*V61*K){hD0EY; zmIJC%E9n@;n1*o!6PRS^Z|6BW+I_>IdzM?RJE1a^FT@H-o2oKx;1+H(Bt(_a==9KW z2eTUH4BW;1Uucyt{eU}!O{L*^G~A(Z_`a}h;VaD>lMpBwmc#A$e0RF<#?O(6V=yiO2C#lkEH~T+Aq!H|4cY3+r@G5*qNFa=8W0&P} zVUBo8&__zsNozy5gj`Z3iE1T@S(1>S0u0N_W+FrPG#=6Um@F4asyxNw6|f^C zt>8qMm?|%P?5I56HTYH6;CyHBMAzUF)@V41dwgcSv+b!a!6AL?)GqzasQncpPhyn0 zK~0F=Oe{~Ph22Jr{2gjWE>XnxS1h*4?Wf$pEUn5MvP5Z{Oua>>-Xe38d=q&62Mvo9 A;{X5v diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class index cedcf964a920e5337fd2207c91194e5c0bd05857..170c3f9ec2de913ca9eef56aaf1095fdc97ca8dc 100644 GIT binary patch literal 1993 zcmb7EZBN@)6n<{rHd&G1A0P($O-uhO#l*j<8U+g&^&tNxa}Haggm)>QC8^ zn6ybti#BN=_HjRI+Hh&=_{-03#7Jf$M$yw;>FTQ8X1A>%Bk<$o$|ivogJFz8q$bok%OMbH62r! z7Fccex@GU&wH?3QwLQ=7Ipvn^HG3_~_RE&z+y0yKq2+mI+Y(52n`hOQz-;Y5$tyDP zbsc$`HPP)?TN-X)E{%B|H*xC<==vMax4MMb?7J>&9NS&%(C&0>PvJk%a0hqO_&~=! zEC@_p7Hc%B&jd8rbXvV`pyZ3C2pVZqP?mIjh>rwfHu26(^7vTCiuA}f&rHX$I@OkJ z;l7Tdw5Ix=E)` z?DVapA340@L5O(tS|NU{V-ueWWSXvJ`qnP%gt)KzeWv4c<<~!NDL;*{D>}9%HFBQi zH%9h#?CAJHPCwfriW3Qea@}q_rr&odZ$>5)(qubgQsW%gcPfl4j$0?|(GitS$c#NQ zOJKTYJJ!p7_tbKa&C?Do`C6}Oc1}#!mU?JR_-B$64{GnhQi2l>{|5qdA;@tM$+qQ7 z8c*@8TTW{)Ab`NN(9lr3C()?y4VQjnNVI4=`f%bSpBw{*aD&GCi<8D1Y=O9*^PErwm{yiiwkvYPMmk}JxG99Ab;t4?x5oun*Jjj>65 z#pfQizYs@?=f3d{!uSK}AKoE5fOaX)Twr!9VO-$$0E@=z0L#YO00ra003~BSaRCaC zhQijbs?sw)*VzFuiv%l9Q@+E?zlb>$Fwe_#6Ay8Vh;L(uZ@$J|Jg4_#A|n>Ophf=n z<$WYlDamePN|JrVnX5!=mHA~q2Vp-y@lAqWmH+K$H_}eYSPFXx&PWRdWSQz-q=f}6 zu<#0&U~okng!BZ<3i=WYv+M|ZMSdX&YJu?*W{mPT)Pk{>dCInu#&1~sg+dH+W+`P{ zQ3>_HAxtPxn;5)29$c6hd^j< z-r~t6S%St(D#Lu>HJYRrPEz1IQYHYhK_5B44ClA?7Egbs937z%!IBw`@cW7Jk0!*g jPK@XGG_1eLZOi&O5@}Y^CqkQ`nYBoY+z3Kl0X_Z~SgB^- literal 1589 zcmb7E+fEu$6kP`qa2!xkQLu`)Rv0hS+Izhu4NVgpY#$Kc$KeEzfx*lSP5g*{N|QDz zZPSN-KtHPKK4(TmI(=wJW}kg#U)ElG4ZnW>_zBnA9V3W}jP*!&^rU*=SD3yu3|xJ?;iq1sw~x!;rK)j!*R&vOzsHa?K|s%{>iEC?>J2 zV+E_XIH_HEK5sKj*W z2FpD2KOn#2pZr4cFChw3Mf-23000!meM6C657KM zT9bVFt~dnkpMVO)29Tq6a|CFf;NP_sMWVk6i_r^S}4Ifl)m}C8_Kr8ShE)d(hpy%wtTKUPjxkN z)x(kO)$yH{>NYzqsX~YDSK)hSt1AP6oN7^}S$rogoWf~=LEmjlfl8F4yWb3n zdRO0i#==?7%I&=~F^w4m=Pg{o#h*>+{6@#$6)@hqUQe#S5*V+o#w{d&YqHB0YN!ho znt^mfxj+KPr5(<@V&SUJ>+Q949`}FEg2R>MW!qIApWLu;lTS)}uRFf+4 zuD9(5iudv1VECGcZ#Vw$sOAKOPrp^_a94&aG&Y0cnjX%?PfMi76D4lEBRwhc8LL85 zq20~gVQ&eo1I?Jl*@`mDYE^p zv5jdU6ZD<|1}bb{T27#02?PJQG-p9En$>r(hbS+U>B za#_}t{5PEbw2m3f3M7lJZF%-Ol}Mz=B0|KARWtL;1PUs8$4af@}+q|kQ%S}@5Z z!$z}$e7Y7LrxGxJAVNG#P11e98xPh5nf#o(7#xnI9aQUX(cYF^j1*7PB2Oizspv6! z1qu4nG}11{gQQj(6}3|D)Jh#wD|KG2)M#4MAg#Dh-v@O1fHwL8IpZ6I@g0c<(#CuP zea1oqLu43jAnPx=&x&PtoEqaP3HHtX}^5gyZtBB(rt z+Hs~a%HRp~APemlWr}XVqX;3Y=|qI8oxzOZ6lh? Th~moqgNxrUb8V9R7`FZZvr-Q| diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class index 66e4e8384a824abb97cf2347faad39827f552d65..204be9c7cef8c3f41d1c556da1c70d8f02ce1337 100644 GIT binary patch literal 504 zcmb7>&q@O^5XQe$+ilmj{sW)DLwhj?kBdlA1fk$zsrNNIw5e&fWU~cd&4UlnhZ2)? zYb%K0B_GMmeDj;h`t$t*zzxnKG#IW$vEb#>NNxE-mZdB-&t)l!oTTL?nUxg8?`E0S zq|(hb!Xd-SJX>X4WqQh=Ugjh$LsuBeEcq-l3>SlO$f>MUJQd!-B*SNyS1t3syx3Lc z+oDlj6pT~rxTeW){3j%7EA88sF=4peZ#)fb8;W$&IV4u0E#AwwEzGB delta 34 pcmeytJc*I()W2Q(7#J9A8Q3Rs1x~JH)Zu1eU}Rtg3NbOT0RXsz2U`FD diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class index c71aefc151acfa2b8c6dc854834b7e242be6561c..bbb4c71c3be9e290d0227fde9478b3be44a5f98b 100644 GIT binary patch literal 6198 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 delta 2539 zcmb7GTU1nK6#o8!;o!^}9ESn9Gk5{T!2wYcQcOWZ4b)|bTCSLI6ct#?rL@v1!&|FN zJ!)!cXeMbl@PaX#S(%hsS`R(+luxa4o_jFUzWG{`R-Oy=QvzFORld zxf8emU^0H(X*rW%ffYkkI1n#juB-RetrD23)e5I}LwH1jHpG-4>%>qMW+Z7#M3T*l z6r?IhQ<07gZGp*S8w3}!6bw@_93ysKEgYFG;0zwx=ensK4emYtd)IE-;DOy)7L3AZ z1-UB5@Uh9l6%~s-?TE=OJiEj=YXQb7C{!^X6SR$@NV{tKHO+~sDyAVxKxy%{R(TtJ z7C2F^Vmc39i~5N;k44we-ie+5U{WGKI8Q?c$=1c=C|_ra)B7%nl^7k ziv|1S!Tkbp`kA)Y6%C&1>Y3#V-V`X*cAC?*!PZ!9iRFgYY;|j;*74dQ>k*S^(}L=x zxN{bq$EOM|sF;M$v?ALj@wxV=EqURW0=8gx`_1+pH&1MGmAFJKz7kN4rJ3c%N}oWy zu@ZdwV6eSAc<{Wj@y)=-)_uW_J>iXSwT8G<2OpZ*)Z}X}Yw)(T_*xWvuL*l@^mW1L zug7I*m3Bww0SF2q4uko9ixM&6Ak{&-5JP)N+hEV~zs+?EcK{X9u%SaA30gZ2;|RY3 z?;uH@=XgEO$g}R;F+H$fMn>*wSkA$@Xv|q8_9EGYnv=+MjO;;9w;Z_Tfajwi{iM(@ zFa)tgm4bK-gVRrqB~m^^b;pUu;~~d%gQIwtu8-+Yh~YYx&JdQv#1h4gV(Dls9T8G~ zWiDOX`v!oy9}LWIAR9(ZKr(F#IY>nU(vZV~@E`;EEQg86(gC^*k70ntcn`;k#}M<8s=Pj^a(!ZmId=dh04H*>v_H5!2KNY8 z@_JAf+M6LS==4a2i--gm!8k^8ltYe3liFNll42Le5~YXbSb$;_qLiZwKPF%vu-utjnOcqMW!o!3;nJko&g(+lV z8oO2*9zr>0V7edG{4B+zXh1~-3yonG8pABqhFMtrAQs|7`fO&tr9Kn&TB&sR!6x~T zfr~D87k8*VzdXQ#1ZJ~1Dp`tEERH!ObY6tu62oW`LlqIj@|2l~5S+6=4b>q4Z6N^3 z5+ps8Db&C`Toa|S%Na7`#sCt>j=MB+1 z)`z}+e#!DnrLqatq#rP`c`NWqJYa-$yScmr@abM+xD zPa;LBvb9PYX5$o2QwC-18D~gHG>&O=6BGOetZX4Q1%*8D4~0xAVZF{>#{dgs0sD@89T* zqL32$C%Pz{<(dhfpqJllmPUYBFY5LS-Cok|W!-+Q+bg&l$HNvL{0`Uf1Csv+(RBN1 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class index 0da2c41dee46f2e12af79276bf88a62e1a6110dd..780f7e04092bfc3d804e827d128c523fb2a67a86 100644 GIT binary patch literal 9543 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 cjsCe#|J)YjW;3NZxb6YvRvzU43BS6!rT_o{ literal 8466 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 function configurationCacheProblems() { return ( // begin-report-data -{"diagnostics":[{"locations":[{"path":"C:\\Users\\mathe\\IdeaProjects\\9-sprint-mission\\discordit\\src\\main\\java\\com\\sprint\\mission\\discodeit\\service\\jfc\\JCFMessageService.java","line":112,"column":9,"length":14},{"taskPath":":compileJava"}],"problem":[{"text":"method readMsgForUser in class com.sprint.mission.discodeit.service.jfc.JCFMessageService cannot be applied to given types;\n required: com.sprint.mission.discodeit.entity.User,com.sprint.mission.discodeit.service.jfc.JCFChannelService,com.sprint.mission.discodeit.service.jfc.JCFUserService\n found: com.sprint.mission.discodeit.entity.User,com.sprint.mission.discodeit.service.jfc.JCFChannelService\n reason: actual and formal argument lists differ in length"}],"severity":"ERROR","problemDetails":[{"text":"C:\\Users\\mathe\\IdeaProjects\\9-sprint-mission\\discordit\\src\\main\\java\\com\\sprint\\mission\\discodeit\\service\\jfc\\JCFMessageService.java:112: error: method readMsgForUser in class JCFMessageService cannot be applied to given types;\n readMsgForUser(user, cs);\n ^\n required: User,JCFChannelService,JCFUserService\n found: User,JCFChannelService\n reason: actual and formal argument lists differ in length"}],"contextualLabel":"method readMsgForUser in class JCFMessageService cannot be applied to given types;\n required: User,JCFChannelService,JCFUserService\n found: User,JCFChannelService\n reason: actual and formal argument lists differ in length","error":{"parts":[{"text":"org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler output below.\r\nC:\\Users\\mathe\\IdeaProjects\\9-sprint-mission\\discordit\\src\\main\\java\\com\\sprint\\mission\\discodeit\\service\\jfc\\JCFMessageService.java:112: error: method readMsgForUser in class JCFMessageService cannot be applied to given types;\n readMsgForUser(user, cs);\n ^\n required: User,JCFChannelService,JCFUserService\n found: User,JCFChannelService\n reason: actual and formal argument lists differ in length\r\n1 error\r\n"},{"internalText":"\tat org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:89)\r\n\tat org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:50)\r\n\tat org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:98)\r\n\tat org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:52)\r\n\tat org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)\r\n\tat org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:52)\r\n\tat org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:38)\r\n\tat org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:46)\r\n\tat org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:36)\r\n\tat org.gradle.jvm.toolchain.internal.DefaultToolchainJavaCompiler.execute(DefaultToolchainJavaCompiler.java:57)\r\n\tat org.gradle.api.tasks.compile.JavaCompile.lambda$createToolchainCompiler$3(JavaCompile.java:206)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.lambda$execute$0(SelectiveCompiler.java:101)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.transaction.CompileTransaction.execute(CompileTransaction.java:108)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:95)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:44)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:66)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:52)\r\n\tat org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$1.call(CompileJavaBuildOperationReportingCompiler.java:64)\r\n\tat org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$1.call(CompileJavaBuildOperationReportingCompiler.java:48)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)\r\n\tat org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler.execute(CompileJavaBuildOperationReportingCompiler.java:48)\r\n\tat org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:224)\r\n\tat org.gradle.api.tasks.compile.JavaCompile.performIncrementalCompilation(JavaCompile.java:165)\r\n\tat org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:150)\r\n\tat org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)\r\n\tat org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:45)\r\n\tat org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)\r\n\tat org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.execute(IncrementalTaskAction.java:26)\r\n\tat org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:252)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:237)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:220)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:203)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:170)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:105)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:59)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:56)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:56)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)\r\n\tat org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:42)\r\n\tat org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:75)\r\n\tat org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)\r\n\tat org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:50)\r\n\tat org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:28)\r\n\tat org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)\r\n\tat org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)\r\n\tat org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:61)\r\n\tat org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:26)\r\n\tat org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:69)\r\n\tat org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:46)\r\n\tat org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:39)\r\n\tat org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:28)\r\n\tat org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:189)\r\n\tat org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)\r\n\tat org.gradle.internal.Either$Right.fold(Either.java:176)\r\n\tat org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:62)\r\n\tat org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)\r\n\tat org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)\r\n\tat org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:46)\r\n\tat org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:35)\r\n\tat org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:75)\r\n\tat org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:53)\r\n\tat org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:53)\r\n\tat org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:35)\r\n\tat org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)\r\n\tat org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)\r\n\tat org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:49)\r\n\tat org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:27)\r\n\tat org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:71)\r\n\tat org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:39)\r\n\tat org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:64)\r\n\tat org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:35)\r\n\tat org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:62)\r\n\tat org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:40)\r\n\tat org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:76)\r\n\tat org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:45)\r\n\tat org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.executeWithNonEmptySources(AbstractSkipEmptyWorkStep.java:136)\r\n\tat org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:66)\r\n\tat org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:38)\r\n\tat org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)\r\n\tat org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36)\r\n\tat org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23)\r\n\tat org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:75)\r\n\tat org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:41)\r\n\tat org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.lambda$execute$0(AssignMutableWorkspaceStep.java:35)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:297)\r\n\tat org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:31)\r\n\tat org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:22)\r\n\tat org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:40)\r\n\tat org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:23)\r\n\tat org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.lambda$execute$2(ExecuteWorkBuildOperationFiringStep.java:67)\r\n\tat org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:67)\r\n\tat org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:39)\r\n\tat org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:46)\r\n\tat org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:34)\r\n\tat org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:47)\r\n\tat org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:34)\r\n\tat org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:64)\r\n\tat org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:132)\r\n\tat org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:121)\r\n\tat org.gradle.api.internal.tasks.execution.ProblemsTaskPathTrackingTaskExecuter.execute(ProblemsTaskPathTrackingTaskExecuter.java:41)\r\n\tat org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)\r\n\tat org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)\r\n\tat org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)\r\n\tat org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)\r\n\tat org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)\r\n\tat org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)\r\n\tat org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)\r\n\tat org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)\r\n\tat org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)\r\n\tat org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:45)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:347)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:334)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:330)\r\n\tat org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:84)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:330)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:319)\r\n\tat org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:459)\r\n\tat org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:376)\r\n\tat org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)\r\n\tat org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)\r\n"}]},"problemId":[{"name":"java","displayName":"Java compilation"},{"name":"compilation","displayName":"Compilation"},{"name":"compiler.err.cant.apply.symbol","displayName":"method readMsgForUser in class com.sprint.mission.discodeit.service.jfc.JCFMessageService cannot be applied to given types;\n required: com.sprint.mission.discodeit.entity.User,com.sprint.mission.discodeit.service.jfc.JCFChannelService,com.sprint.mission.discodeit.service.jfc.JCFUserService\n found: com.sprint.mission.discodeit.entity.User,com.sprint.mission.discodeit.service.jfc.JCFChannelService\n reason: actual and formal argument lists differ in length"}],"solutions":[[{"text":"Check your code and dependencies to fix the compilation error(s)"}]]}],"problemsReport":{"totalProblemCount":1,"buildName":"discordit","requestedTasks":":com.sprint.mission.discodeit.app.JavaApplication.main()","documentationLink":"https://docs.gradle.org/9.0.0/userguide/reporting_problems.html","documentationLinkCaption":"Problem report","summaries":[]}} +{"diagnostics":[{"locations":[{"path":"C:\\Users\\mathe\\IdeaProjects\\9-sprint-mission\\discordit\\src\\main\\java\\com\\sprint\\mission\\discodeit\\service\\jfc\\JCFUserService.java","line":219,"column":23,"length":5},{"taskPath":":compileJava"}],"problem":[{"text":"method check in class com.sprint.mission.discodeit.service.jfc.JCFUserService cannot be applied to given types;\n required: java.util.Scanner\n found: java.lang.String,java.lang.String\n reason: actual and formal argument lists differ in length"}],"severity":"ERROR","problemDetails":[{"text":"C:\\Users\\mathe\\IdeaProjects\\9-sprint-mission\\discordit\\src\\main\\java\\com\\sprint\\mission\\discodeit\\service\\jfc\\JCFUserService.java:219: error: method check in class JCFUserService cannot be applied to given types;\n User target = check(name, pw);\n ^\n required: Scanner\n found: String,String\n reason: actual and formal argument lists differ in length"}],"contextualLabel":"method check in class JCFUserService cannot be applied to given types;\n required: Scanner\n found: String,String\n reason: actual and formal argument lists differ in length","error":{"parts":[{"text":"org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler output below.\r\nC:\\Users\\mathe\\IdeaProjects\\9-sprint-mission\\discordit\\src\\main\\java\\com\\sprint\\mission\\discodeit\\service\\jfc\\JCFUserService.java:219: error: method check in class JCFUserService cannot be applied to given types;\n User target = check(name, pw);\n ^\n required: Scanner\n found: String,String\n reason: actual and formal argument lists differ in length\r\n1 error\r\n"},{"internalText":"\tat org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:89)\r\n\tat org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:50)\r\n\tat org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:98)\r\n\tat org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:52)\r\n\tat org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)\r\n\tat org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:52)\r\n\tat org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:38)\r\n\tat org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:46)\r\n\tat org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:36)\r\n\tat org.gradle.jvm.toolchain.internal.DefaultToolchainJavaCompiler.execute(DefaultToolchainJavaCompiler.java:57)\r\n\tat org.gradle.api.tasks.compile.JavaCompile.lambda$createToolchainCompiler$3(JavaCompile.java:206)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.lambda$execute$0(SelectiveCompiler.java:101)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.transaction.CompileTransaction.execute(CompileTransaction.java:108)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:95)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:44)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:66)\r\n\tat org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:52)\r\n\tat org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$1.call(CompileJavaBuildOperationReportingCompiler.java:64)\r\n\tat org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$1.call(CompileJavaBuildOperationReportingCompiler.java:48)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)\r\n\tat org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler.execute(CompileJavaBuildOperationReportingCompiler.java:48)\r\n\tat org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:224)\r\n\tat org.gradle.api.tasks.compile.JavaCompile.performIncrementalCompilation(JavaCompile.java:165)\r\n\tat org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:150)\r\n\tat org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)\r\n\tat org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:45)\r\n\tat org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)\r\n\tat org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.execute(IncrementalTaskAction.java:26)\r\n\tat org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:252)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:237)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:220)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:203)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:170)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:105)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:59)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:56)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:56)\r\n\tat org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)\r\n\tat org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:42)\r\n\tat org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:75)\r\n\tat org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)\r\n\tat org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:50)\r\n\tat org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:28)\r\n\tat org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)\r\n\tat org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)\r\n\tat org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:61)\r\n\tat org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:26)\r\n\tat org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:69)\r\n\tat org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:46)\r\n\tat org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:39)\r\n\tat org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:28)\r\n\tat org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:189)\r\n\tat org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)\r\n\tat org.gradle.internal.Either$Right.fold(Either.java:176)\r\n\tat org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:62)\r\n\tat org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)\r\n\tat org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)\r\n\tat org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:46)\r\n\tat org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:35)\r\n\tat org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:75)\r\n\tat org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:53)\r\n\tat org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:53)\r\n\tat org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:35)\r\n\tat org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)\r\n\tat org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)\r\n\tat org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:49)\r\n\tat org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:27)\r\n\tat org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:71)\r\n\tat org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:39)\r\n\tat org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:64)\r\n\tat org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:35)\r\n\tat org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:62)\r\n\tat org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:40)\r\n\tat org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:76)\r\n\tat org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:45)\r\n\tat org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.executeWithNonEmptySources(AbstractSkipEmptyWorkStep.java:136)\r\n\tat org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:66)\r\n\tat org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:38)\r\n\tat org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)\r\n\tat org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36)\r\n\tat org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23)\r\n\tat org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:75)\r\n\tat org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:41)\r\n\tat org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.lambda$execute$0(AssignMutableWorkspaceStep.java:35)\r\n\tat org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:297)\r\n\tat org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:31)\r\n\tat org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:22)\r\n\tat org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:40)\r\n\tat org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:23)\r\n\tat org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.lambda$execute$2(ExecuteWorkBuildOperationFiringStep.java:67)\r\n\tat org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:67)\r\n\tat org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:39)\r\n\tat org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:46)\r\n\tat org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:34)\r\n\tat org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:47)\r\n\tat org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:34)\r\n\tat org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:64)\r\n\tat org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:132)\r\n\tat org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:121)\r\n\tat org.gradle.api.internal.tasks.execution.ProblemsTaskPathTrackingTaskExecuter.execute(ProblemsTaskPathTrackingTaskExecuter.java:41)\r\n\tat org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)\r\n\tat org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)\r\n\tat org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)\r\n\tat org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)\r\n\tat org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)\r\n\tat org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)\r\n\tat org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)\r\n\tat org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)\r\n\tat org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)\r\n\tat org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)\r\n\tat org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:45)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:347)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:334)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:330)\r\n\tat org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:84)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:330)\r\n\tat org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:319)\r\n\tat org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:459)\r\n\tat org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:376)\r\n\tat org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)\r\n\tat org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)\r\n"}]},"problemId":[{"name":"java","displayName":"Java compilation"},{"name":"compilation","displayName":"Compilation"},{"name":"compiler.err.cant.apply.symbol","displayName":"method check in class com.sprint.mission.discodeit.service.jfc.JCFUserService cannot be applied to given types;\n required: java.util.Scanner\n found: java.lang.String,java.lang.String\n reason: actual and formal argument lists differ in length"}],"solutions":[[{"text":"Check your code and dependencies to fix the compilation error(s)"}]]}],"problemsReport":{"totalProblemCount":1,"buildName":"discordit","requestedTasks":":com.sprint.mission.discodeit.app.JavaApplication.main()","documentationLink":"https://docs.gradle.org/9.0.0/userguide/reporting_problems.html","documentationLinkCaption":"Problem report","summaries":[]}} // end-report-data );} diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 index d2a6caf820a87d387c0ea513f93f3e18e20fd592..c4a340908ed242eb536a2282cd7e52554abcd85c 100644 GIT binary patch delta 659 zcmY+ATS(Jk7{-5px4High|D?J#YhSw%oU_`7%|MwS=Kt4unt;NJgjC~YDHUEq)?Q8 zS-H+9yy&J<{;+kVt_->eqFG&a-BnjXLH7QIU3Bw)&-;Au_k7R${HXd>^~9#DZih#^ ztSox9V+3XAikneYqerysYD8aIl6G^04h?%-_u6=(r(frm`mQf3y30K~_uV{TP$Q%w zwvcLY_$SUea?Y@3qkux-@Ir&yEtYV_B+d-YGHCT%Gqh-ovB5;08gHlx+59$xRHZ@h z7(tcxmd}4ivFD;exivgKGZ{$ZGKotXO9Q1_bxmyCbn zo7Cqr@KXlO{bI73N|Y|M4rjTl9+%Et@xR3ioHDgpKB#9NTUpFDRuf?d+u6lV_OP2M z4IH9T75dt>YpTmv?;11XahnU@RPTMkZ+WiLk5crCSRVs|&I&p& Mb&v}TDX%~G5B+4AF#rGn delta 636 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 TTF*I~D9yonA5ojtL&*IT`@P3$ literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 index 5b1f07a61f3403ccc38311724665d80a036702d4..14c266f11d690a908eddf59992bba659219812a6 100644 GIT binary patch delta 1134 zcmb7DOGuPa7(I7p^w)8G%s-ApO`4{VnxwVJ(liJ`14YorMOGjMW|@mgBid*gEedM! z+k*HoXjL2P+3-0o?2Y(uBa-{G$RI2EqI3Ko|3Q`Av(0}5my~Q1S0gk zi&_=@)WWP8hQdVce)wkXtTjc;vzBUit?AjVbe9UjFA$J?8={eg0d0H+>R>q9SzCM! zc!8H(1>+T76KU1b)N`Uud#D!I%C0;pe4fA?bnw@Vqv*t2_E~TQ@9>_y4jjY>bis&N z?8QfXf(c0|MK^j7fb}TCXY^9JkNaa_oFk+t=odnPT|tb3I0Xs76t;$vKMUE?1q~;7 zF52vZR&GRI*dwj%q{$r!#}~>5;Mzhp2Gx&21nE}T%<3!qm;ozk%Ai-$lu@swDHA;i z|K2|Bx;!fZn4^%+wQkQ#CGq1tQuffWv(WiAg?8+|emWLqM zN%HJ-{11q{{92zQ5bmu delta 1047 zcma)5NlcSL6#k~PO!;ZCw6X{ls$fJ9pdMTUCdLFzKn#cn6_Y9kHG)Z9V!U8dV`4lQ z^P^t87!O`0HO83e$%_ao3N9!rB8s-+2Dq^K&2%B&Y})CYH*dc8z3;uby1Hwn(LQza zHh@z6Y%|uU7;_`%uZ3G%!B`#R9Mth8E1u5Tvpumr&(U5?i64j7^o)W8`k|3PEDZ)ua zB!(wZpp6^T96B3^hD}RM%}m%YIHpj^vwU^wH&UlLg~mVO90nqpPH+Ay6~h~9?!W3+ z!HL5h{?tdbsRc6+W{6?m@Ljj6%v)HePTXuhSbH)xG!Wr_SU)SD9tDpskpb}F2S#`^ X8BVPuTSl)PVghcG;K?ZW7L5G`13UAE diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index 93be34c486a8a37bee9fe68f03973f642dc6072d..ac2cba4e9ac14143be1e2261605c2119d41381cd 100644 GIT binary patch delta 212 zcmZ3)y_kDKiH(a|RZ-I)7U`Z%+K1N{tywA*EbJ`eCh9EaC9Wr-$1KUvl9iUs0|bJ6 z0wSTelr6$u=k=s2{>+kb&z`s;QiDahEK>Kk_OeuVx#xxZmS(91tA~on@d-$#u1LIV z>6jMw$(Mn{&i?ddLq_4~V6NtF?SnraDze>}bh66iwvMkRuYln~21$uob?onrE*djb z+~1-bswpR+?d(1$NKj4o?iB%h=9F^}ID{A(n55(x_!$`(g&1Ujq#A=7L`Z{?QJ$H9 J^E^ft762qKKOF!7 delta 211 zcmV;^04)Eb3!)2YGz{$ z3=9kr4iKkkoGP(K5z29v2;I>PME0pHO(_i!dZd44NGHC+M-I!< z%vnGLEmbKV5cI+!AUdjC4vWQ~`yY|(hzJh>009yJ5&;1p0U7`t0RRCe044zd0vaCx NC; u.getName().equals(name)).findFirst().orElse(null); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index 809e58da..64426c82 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -40,69 +40,45 @@ public void updateMessage(Scanner sc, User user, JCFChannelService cs, JCFUserSe System.out.println("어떤 것을 수정하고 싶나요?"); String id = sc.nextLine(); - System.out.println("무슨 내용으로 수정하고 싶나요?"); - String context = sc.nextLine(); - System.out.println("지금 작업중입니다."); - for(Message m : msgs) { - if(m.getId().equals(UUID.fromString(id))){ - m.setContent(context); - System.out.println("성공!"); - return; - } - } - System.out.println("해당 내용을 찾지 못했습니다."); - } + Message text = msgs.stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); - public void readMsgInChannel(Channel ch) { - UUID chId = ch.getId(); - boolean capture = false; - - for(Message msg : msgs) { - if(msg.getSendChannel().equals(chId)) { - System.out.println("보낸 사용자 : " + msg.getSendUserId()); - System.out.println("보낸 내용 : " + msg.getContent()); - System.out.println("==============="); - capture = true; - } + if(text == null) { + System.out.println("실패. 해당 ID를 찾지 못했습니다."); + return; } - if (!capture) { - System.out.println("해당 서버에 보낸 메시지가 없어요."); - } + System.out.println("무슨 내용으로 수정하고 싶나요?"); + String context = sc.nextLine(); + System.out.println("지금 작업중입니다."); + + text.setContent(context); + System.out.println("성공"); } public void readMsgInChannel(UUID chId, JCFUserService us) { - boolean capture = false; - - for(Message msg : msgs) { - if(msg.getSendChannel().equals(chId)) { - System.out.println("보낸 사용자 : " + us.getUserName(msg.getSendUserId())); - System.out.println("보낸 내용 : " + msg.getContent()); - capture = true; - } - } + List flag = msgs.stream().filter(e -> e.getSendChannel().equals(chId)).toList(); - if (!capture) { + if (flag.isEmpty()) { System.out.println("해당 서버에 보낸 메시지가 없어요."); } + + flag.forEach(m -> { + System.out.println("보낸 사용자: " + us.getUserName(m.getSendUserId())); + System.out.println("보낸 내용: " + m.getContent()); + System.out.println("==============="); + }); } public void readMsgForUser(User user, JCFChannelService cs, JCFUserService us) { - System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - UUID uid = user.getId(); - List msgList = new ArrayList<>(); - for(Message msg : msgs) { - if(msg.getSendUserId() == uid) { - msgList.add(msg); - } - } + List msgList = msgs.stream().filter(e -> e.getSendUserId().equals(user.getId())).toList(); if(msgList.isEmpty()) { System.out.println("아쉽지만 아무것도 없네요!"); return; } + System.out.println("당신이 보낸 메시지는 아래와 같습니다."); for(Message msg : msgList) { System.out.println("ID : " + msg.getId()); System.out.println("보낸 사용자 : " + us.getUserName(msg.getSendUserId())); @@ -118,21 +94,15 @@ public void deleteMsg(Scanner sc, User user, JCFChannelService cs, JCFUserServic String id = sc.nextLine(); UUID targetId = UUID.fromString(id); - for (Message msg : msgs) { - if (msg.getId().equals(targetId)) { - System.out.println("해당 메시지를 삭제합니까? : Y or any Key"); - String ins = sc.nextLine(); - - if (ins.equalsIgnoreCase("Y")) { - msgs.remove(msg); - System.out.println("성공!"); - return; - } else { - System.out.println("초기로 돌아갑니다"); - return; - } - } + + Message msg = msgs.stream().filter(e -> e.getId().equals(targetId)).findFirst().orElse(null); + if(msg == null) {System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다.");return;} + System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); + String ins = sc.nextLine(); + if(ins.equalsIgnoreCase("Y")) { + msgs.remove(msg);System.out.println("성공!"); + } else { + System.out.println("초기로 돌아갑니다"); } - System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다."); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index 7072107e..e0653d48 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -7,7 +7,7 @@ public class JCFUserService implements UserService { private final List users = new ArrayList<>(); -// private final Map users = new HashMap<>(); +// private final Map usersMap = new HashMap<>(); // private final Map usersName = new HashMap<>(); /// Create @@ -20,20 +20,18 @@ public void createUser(Scanner sc) { name = sc.nextLine(); /// forEach 안에서 return은 forEach문을 종료하는 것으로 끝남... -// users.forEach(user -> { -// if(Objects.equals(user.getName(), name)) { -// System.out.println("이미 존재하는 사용자명입니다."); -// return; -// } -// }); - if(users.stream().noneMatch(e -> Objects.equals(e.getName(), name))) { + if(users.stream().anyMatch(e -> Objects.equals(e.getName(), name))) { System.out.println("이미 존재하는 사용자명입니다."); return; } System.out.print("사용할 비밀번호를 입력해주세요 : "); pw = sc.nextLine(); - users.add(new User(name, pw)); + User user = new User(name, pw); + users.add(user); + +// usersName.put(user.getId(), name); +// usersMap.put(user.getId(), user); } /// 테스트 코드 작성용 @@ -71,90 +69,59 @@ public void updateUser(Scanner sc) { } } private void updateUserName(Scanner sc){ - System.out.println("변경하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String pw = sc.nextLine(); + User c = check(sc, "변경"); - if(check(name, pw) != null) { - System.out.println("변경하고자 하는 이름을 입력해주세요"); - String rename = sc.nextLine(); - for (User u : users) { - if (u.getName().equals(name) && u.getPw().equals(pw)) { - u.setName(rename); - System.out.println(name + "에서 " + rename + "으로 변경되었습니다."); - return; - } - } - } else { + if(check(sc, "변경") == null) { System.out.println("맞는 계정이 없습니다."); + return; } + + System.out.println("변경하고자 하는 이름을 입력해주세요"); + String rename = sc.nextLine().trim(); +// usersMap.keySet(); + + System.out.println(c.getName() + "에서 " + rename +"으로 변경되었습니다."); + c.setEmail(rename); } private void updateUserPw(Scanner sc){ - System.out.println("변경하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String pw = sc.nextLine(); - if(check(name, pw) != null) { - System.out.println("변경하고자 하는 비밀번호를 입력해주세요"); - String repw = sc.nextLine(); - for (User u : users) { - if (u.getName().equals(name) && u.getPw().equals(pw)) { - u.setPw(repw); - System.out.println("성공"); - return; - } - } - } else { + User c = check(sc, "변경"); + if (c == null) { System.out.println("맞는 계정이 없습니다."); + return; } + System.out.println("변경하고자 하는 비밀번호를 입력해주세요"); + String repw = sc.nextLine(); + System.out.println("상공"); + c.setPw(repw); } private void updateUserEmail(Scanner sc){ - System.out.println("변경하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String pw = sc.nextLine(); - if(check(name, pw) != null) { - System.out.println("변경하고자 하는 이메일을 입력해주세요"); - String remail = sc.nextLine(); - for (User u : users) { - if (u.getName().equals(name) && u.getPw().equals(pw)) { - u.setEmail(remail); - System.out.println(u.getEmail() + "에서 " + remail + "으로 변경되었습니다."); - return; - } - } - } else { + User c = check(sc, "변경"); + if (c == null) { System.out.println("맞는 계정이 없습니다."); + return; } + System.out.println("변경하고자 하는 이메일을 입력해주세요"); + String remail = sc.nextLine(); + + System.out.println(c.getEmail() + "에서 " + remail +"으로 변경되었습니다."); + c.setEmail(remail); } private void updateUserPhonenumber(Scanner sc){ - System.out.println("변경하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String pw = sc.nextLine(); - if(check(name, pw) != null) { - System.out.println("변경하고자 하는 연락처를 입력해주세요"); - String repn = sc.nextLine(); - for (User u : users) { - if (u.getName().equals(name) && u.getPw().equals(pw)) { - u.setPhonenumber(repn); - System.out.println(u.getPhonenumber() + "에서 " + repn + "으로 변경되었습니다."); - return; - } - } - } else { + User c = check(sc, "변경"); + if (c == null) { System.out.println("맞는 계정이 없습니다."); + return; } + + System.out.println("변경하고자 하는 연락처를 입력해주세요"); + String repn = sc.nextLine(); + System.out.println(c.getPhonenumber() + "에서 " + repn +"으로 변경되었습니다."); + c.setPhonenumber(repn); } /// Read public User getUserId(UUID id) { - for (User u : users) { - if (u.getId().equals(id)) return u; - } - return null; + return users.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); } @Override @@ -178,20 +145,12 @@ public void getUserName(Scanner sc) { System.out.println("조회하고자 하는 사용자가 없습니다."); } public User getUserName(String name) { - for (User u : users) { - if (u.getName().equals(name)) { - return u; - } - } - return null; + return users.stream().filter(e -> e.getName().equals(name)).findFirst().orElse(null); } public String getUserName(UUID id) { - for (User u : users) { - if (u.getId().equals(id)) { - return u.getName(); - } - } - return null; + User user = users.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); + if(user == null) return null; + return user.getName(); } @Override public void getAllUserName() { @@ -210,8 +169,6 @@ public void getAllUserName() { /// Delete @Override public void deleteUser(Scanner sc) { - String name; - String pw; int n; System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); @@ -223,29 +180,22 @@ public void deleteUser(Scanner sc) { return; }; - System.out.print("삭제하려는 계정의 이름을 알려주세요: "); - name = sc.next(); - System.out.print("삭제하려는 계정의 비밀번호를 알려주세요: "); - pw = sc.next(); - - User target = check(name, pw); + User target = check(sc, "삭제"); - if (target != null) { - users.remove(target); - System.out.println("계정이 삭제되었습니다."); - } else { + if (target == null) { System.out.println("일치하는 계정을 찾을 수 없습니다."); + return; } + users.remove(target); + System.out.println("계정이 삭제되었습니다."); } - public User check(String name, String pw) { - User target = null; - for (User u : users) { - if (u.getName().equals(name) && u.getPw().equals(pw)) { - target = u; // 리스트 안에 있는 "그 객체" - return target; - } - } - return target; + public User check(Scanner sc, String work) { + System.out.println(work+"하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String pw = sc.nextLine(); + + return users.stream().filter(u -> u.getName().equals(name) && u.getPw().equals(pw)).findFirst().orElse(null); } } From 1b06c52aaf400e3c04f3b356694e290824a1d9a6 Mon Sep 17 00:00:00 2001 From: Alpha Date: Thu, 15 Jan 2026 16:51:48 +0900 Subject: [PATCH 09/35] =?UTF-8?q?=ED=95=B4=EC=8B=9C=EB=A7=B5=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=B4=EB=B4=84.=20=EB=82=98?= =?UTF-8?q?=EC=A4=91=EC=97=90=20=EC=8B=A4=EC=A0=9C=20=EC=86=8C=EC=9A=94?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=82=B0=EC=B6=9C=EB=8F=84=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=ED=95=B4=EB=B3=B4=EA=B3=A0=20=EC=8B=B6?= =?UTF-8?q?=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 50949 -> 50949 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 22447 -> 22447 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 23155 -> 23597 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../discodeit/app/JavaApplication.class | Bin 7472 -> 7645 bytes .../mission/discodeit/entity/User.class | Bin 1928 -> 1917 bytes .../discodeit/service/ChannelService.class | Bin 504 -> 507 bytes .../service/jfc/JCFChannelService.class | Bin 6198 -> 6376 bytes .../service/jfc/JCFMessageService.class | Bin 6647 -> 8576 bytes .../service/jfc/JCFUserService.class | Bin 9543 -> 8288 bytes .../JCFMessageService.class.uniqueId1 | Bin 6647 -> 8566 bytes .../stash-dir/JCFUserService.class.uniqueId2 | Bin 9516 -> 0 bytes .../stash-dir/JavaApplication.class.uniqueId0 | Bin 7472 -> 7645 bytes .../compileJava/previous-compilation-data.bin | Bin 1443 -> 1443 bytes .../discodeit/app/JavaApplication.java | 23 ++-- .../sprint/mission/discodeit/entity/User.java | 2 +- .../discodeit/service/ChannelService.java | 10 +- .../service/jfc/JCFChannelService.java | 76 ++++++++----- .../service/jfc/JCFMessageService.java | 50 ++++++--- .../discodeit/service/jfc/JCFUserService.java | 105 ++++++++++++------ 23 files changed, 166 insertions(+), 100 deletions(-) delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFUserService.class.uniqueId2 diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index 662afa20378f8f1b7eb09741786baa43d4200604..1fe7d94f6ed6969c1f6d7306510f259384cc9df7 100644 GIT binary patch delta 683 zcmZqeV{YwZ-VnFcA<@LBB*&zas@u6 zX;%(-Zf3?1V%R+SqKD|@11mWupY>JSyw-OD+vLJE^#aE}hR0bPu9x_qbWz>R>n6vh zwaQFF6TUEB-N*Ckv&v2B3qLG_k1(#AJaM}6-V;kFU-=Pymt3&fhiU9`Q%y@ zq8d5QEK`yBB?pu^E^w?Zen#kIiONlXpK;&Yf9mXJ{k>vL0;P8pDrL`iv#Q%&H@>UW zEIZjha@OSc`(?HJJ&NTHnr(DkV{~b5(&H&#dl%ns-eY{%nwdf1_H=#rnW^V525a0B z-xIP#ck=pql9Q)z_1C_7kZImS?wGg@&t~4N%e+7Jz>yxHp1*uRJ%W?Wt}SUfq2Ihp zqr}zQr);v|Hbsd5h3lOY<<+FCo&E&120jV-dKjesH}hoaMG6v}yHA_iyy>fE5TEyd zRi4)Ow_wQ^hLdj}mX>he?e^)*%9$*uW^Xuk{D;@lWlKP=YjB>-cSJ%vR!Df+(*Ikl z+!lP{S-!bz(k8IZ2M$1IoK@Sg)7;j&r*Yd3HdCclN%?9 KY(B8ll@|bxyE!-FSLl*aGUK|*6Q?UrzR=4x`RVMO$^U1F3i01J<8|4|cx_7J z;~7goRVXs}P4?~;0ej|@a}OGtZUgmn@B{V8zX{NK^iH?)-!rWr z_ev~vCkt*%5*+#h+O+ z?%9*TlG_X>-##oYA^(W4ciR8ue8sPMJ?A=b?mxF3QCz4#?QIqA(wzF!kwKWUj9ctm5e!gh=LV}kk{_FoFCn#Nzh z`1rP)>w#)#t$7ivnNYNKg@vH}6q`+nK%rB$r!JKAcdw7U`1Nhg`EXO9P-5Dztr<%m z&g8J;uoM&8Z3z?-IJZG({igVUm?dwuuP@r^3>5k@{ig42wk(07H(qXM{hqF1S)N}| zl9``Zte2jems*s#+2H7QM!94buLc*R diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index 0f6b0c0d10ebdec520d29b6ab6a00f60c1494f06..8cdb05c8d3524a4e4b3f0d2ba2b94ecb7514bcea 100644 GIT binary patch literal 17 VcmZQx)_UaMM6cU+3}C=$3jjX?1tS0e literal 17 VcmZQx)_UaMM6cU+3}C=04*)*o1qA>A diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index f8eb5c186bf10d14df1d66ebd7ed772a95fc5191..5d8d4618b1cc96c55e3550bc02305139f82012d8 100644 GIT binary patch delta 557 zcmZ3#o^kzp#tq575|6#Z-iaOfS@m&Vx%kdqbs-E4jI$4vU5eXW?d!&1{bWo*v(U&2&x zR$a34p75TxXTLP@aXzRP1k38X%R`J{{05};jDdtE5G#VP!1^1LpS;?`z^aicfmT!P6z{4ngg-u3QR2*1oyQ} za*q*`n!b$ZiwVOzuok&#;y{%^pcF9qWKfwxzelm$L9>mHYm6?msm+_dY6kIn|5xQ{eTSH<_!g{zLE;6b4)@(|pT4Y| z$#QD;hEvCXcrArE_mUb=B`6pa8!)xR3JEV;`hRPc+k!7V%QtsTf?Bc(s1gVi5+=Kc GX8-`BVyW2x delta 543 zcmZ3#o^kzp#tq5763HxH4KAYZel2V%l=S(x&zgaOarSMaEO27>`c`wxr4^)Tx9OGloAdpb zFxBsi<9V;K`oZ7zt;cViy7oN*Y=rQ+vk)T~KLTkzV<4dk#EKv+aQH}@qicY^?ws2@ z+*l7i0Gqc<##js}2?WCNKmtvNbwMqUpm^h{mCeg5GD0goL3Zr?Y&9RKk`;(Wr6*4e z7M6cHygUS?Gq{||8e`_yGWtV$ixNm6| zL{W4gM3Jn)b`YY5fxTn%*Wfu!^)6~vMNNNL zqpF literal 17 UcmZS9oRIJ5aF#!o0SuT`03{#;8UO$Q diff --git a/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin b/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin index 50d67d89f6bce6cf875114156b228fa8d1eb5f48..95cfb82158543fa7cb55a4ccfe833f6b66d4d7ec 100644 GIT binary patch delta 755 zcmeyog>mf;#tkMCjMFxoN-SU!Se+A+^U?X+QU)-HDxQ2+YKFjWgA&0VDS~lO!QYc( zr4-A{c#qa;fwWft$7EpHBZa=z$6@-JB}pz$oy3U7vES3Ht+xXw=ln zb7dO@{>@ij{PX43GN{tT$)a*U`D=L>ZvK2N3L+N6J(*QLLqLkrVACdXIW4H}?UPf1 zf=cQETpbtq8=$(ICm)rc$zT8b!X&3=7O2?E&7le&Od3IxA9B5L%MXNVzxf{uLVZM7 ztk2F#fU1_AJXL9fKx$5er?O_}La3nqW?SW3j7)rr8x?sLQ@j3MUb`Rf58FOolghu-fP!+UDh@O+xh1y5%&=@p_iGQX)h94jDBHYKY*9%{ zjr@>r^|JmtC{WSN*k<`*V$A)TyUDxQ>kXXl`eL!>oL!Xovx;3wji(%v^p(H9z%*pS z7sjjmcs_krxhZ|&hh^{)Oce$F7N!O9_orkw&yafj{nIy06>pj9js72-q+*$C7oX^2 z{oWQ+$)vD3`hONkt!w43n6-%adoHGmV{P#>LMKa9Zu(}LtNGfch0e|dcc$~%IdWru@7uC(YZgLID0kAX}0g1CU7@z`^?HZ7il^Yn7#T)Rm%^WxZlN}y-ldT@{leQmU plPw@%lcgY$vrZvD0+YQXsIz?}(g6Yt>9HaB7qKuf3$sB;G7`K-A(8+9 diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index f05757fc7a0c81556414fe048e9ef5c5a1ecee2b..9ae93da863c68d04c91076a027ee4c823af7cbb6 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6a}0su3>1OEU3 literal 17 VcmZQxwaR1i+k`Ae1~6cJ1OPOS1kL~e diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index 14893a24f802aee719c05f0bcad87dc1515b60a8..dc6bba3df83276e6ceb8f7f95b4db79967fd5b05 100644 GIT binary patch literal 8 PcmZQzV4QtG^kp~z2z>&w literal 8 PcmZQzV4S^Q`1wr$2=N0i diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index 14c266f11d690a908eddf59992bba659219812a6..d6204b5df5f89662c1538e07b86ac264cb0f5859 100644 GIT binary patch delta 2395 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class index 204be9c7cef8c3f41d1c556da1c70d8f02ce1337..ec2b0c5bba82a00f1e2fd9039a8b5db4403226c3 100644 GIT binary patch delta 64 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 F{Vy}Pu_gcj literal 6198 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class index c4a340908ed242eb536a2282cd7e52554abcd85c..96bbfc75094c7380d539a544d7f046be4d42bb9b 100644 GIT binary patch literal 8576 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 literal 6647 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 C4(o#e literal 9543 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 cjsCe#|J)YjW;3NZxb6YvRvzU43BS6!rT_o{ diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 index c4a340908ed242eb536a2282cd7e52554abcd85c..d36fab622e1790382245d413b77057ea418b2b13 100644 GIT binary patch literal 8566 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 RC)Lx`=jGT?0cE22e*sn!KPLbH literal 6647 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 TTF*I~D9yonA5ojtL&*IT`@P3$ diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 index 14c266f11d690a908eddf59992bba659219812a6..d6204b5df5f89662c1538e07b86ac264cb0f5859 100644 GIT binary patch delta 2395 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 TYUNo0_ak3n%v)6R!RYGz{$ z3=9kr4iE{u%QZagj(Y$Xp8u+DD)$;w8%-1q4iHDXM)LHjnFPw4u*%2yN~Mv=K`4(% za~{Dqu|cdd(w$=Cl=UW4Csh<44iH@u6Q-sAwR%RN^bDu7ijtEt0X-1a!2+J)3tV2X P=9$@kY2THzegP!}u(d#j delta 161 zcmV;S0ABy23!@8=bW}tpdUAsN1RIR9E5omHtfdlD6GIe66+;$E7cLks0~r8>YGz{$ z3=9kr4iFSo+9Nnt>u!u?A^B channels = new ArrayList<>(); + private final Map channelNameMap = new ConcurrentHashMap<>(); @Override public void createServer(Scanner sc) { System.out.println("사용하려는 서버명이 무엇인가요?"); String name = sc.nextLine(); - if (check(name) == null) { - channels.add(new Channel(name)); - System.out.println("잘 들어갔어요!"); + + if (check(name) != null) { + System.out.println("이미 존재하는 채널명이에요!"); return; } - System.out.println("이미 존재하는 채널명이에요!"); + +// channels.add(new Channel(name)); + // private final List channels = new ArrayList<>(); + Channel tmp = new Channel(name); + channelNameMap.put(name, tmp); + System.out.println("잘 들어갔어요!"); } @Override @@ -41,13 +44,15 @@ public void updateServer(Scanner sc) { name = sc.nextLine(); + channelNameMap.put(name, result); + channelNameMap.remove(result.getName()); result.setName(name); System.out.println(result.getName()); System.out.println("잘 변경되었어요!"); } @Override - public void readServer(Scanner sc) { + public void readChannel(Scanner sc) { System.out.println("조회하고자 하는 채널명을 입력해주세요"); String name = sc.nextLine(); Channel result = check(name); @@ -66,7 +71,7 @@ public void readServer(Scanner sc) { } @Override - public Channel readServer(String name) { + public Channel readChannel(String name) { Channel result = check(name); if(result == null) { @@ -77,7 +82,7 @@ public Channel readServer(String name) { } @Override - public String readServer(UUID id) { + public String readChannel(UUID id) { Channel result = check(id); if(result == null) { @@ -88,19 +93,31 @@ public String readServer(UUID id) { } @Override - public void readAllServer() { - for (Channel ch : channels) { + public void readAllChannel() { + if(channelNameMap.isEmpty()) { + System.out.println("채널이 존재하지 않습니다."); + return; + } + + channelNameMap.values().forEach(ch -> { System.out.println("채널명 : " + ch.getName()); System.out.println("채널ID : " + ch.getId()); System.out.println("채널수정일 : " + ch.getUpdateAt()); System.out.println("채널생성일 : " + ch.getCreateAt()); System.out.println("==================="); - } - System.out.println("현재 총 채널수 : " + channels.size()); + }); +// for (Channel ch : channels) { +// System.out.println("채널명 : " + ch.getName()); +// System.out.println("채널ID : " + ch.getId()); +// System.out.println("채널수정일 : " + ch.getUpdateAt()); +// System.out.println("채널생성일 : " + ch.getCreateAt()); +// System.out.println("==================="); +// } + System.out.println("현재 총 채널수 : " + channelNameMap.size()); } @Override - public void deleteServer(Scanner sc) { + public void deleteChannel(Scanner sc) { String name; int n; System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); @@ -117,26 +134,31 @@ public void deleteServer(Scanner sc) { System.out.print("삭제하려는 채널명을 알려주세요: "); name = sc.nextLine(); - Channel target = check(name); - - if (target != null) { - channels.remove(target); - System.out.println("채널이 삭제되었습니다."); - } else { - System.out.println("일치하는 채널을 찾을 수 없습니다."); + if(channelNameMap.get(name) == null) { + System.out.println("해당 채널을 찾을 수 없습니다."); + return; } + + channelNameMap.remove(name); + System.out.println("해당 채널이 삭제되었습니다."); } @Override public Channel check(String name) { - return channels.stream().filter(u -> u.getName().equals(name)).findFirst().orElse(null); +// return channels.stream().filter(u -> u.getName().equals(name)).findFirst().orElse(null); + return channelNameMap.get(name); } @Override public Channel check(UUID id) { - return channels.stream() - .filter(u -> u.getId().equals(id)) +// return channels.stream() +// .filter(u -> u.getId().equals(id)) +// .findFirst() +// .orElse(null); + return channelNameMap.values().stream().filter(u -> u.getId().equals(id)) .findFirst() .orElse(null); + + /// 채널ID로도 관리하는 형태를 만드는게 좋을까? } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index 64426c82..613f1e51 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -3,17 +3,21 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.MessageService; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; /// TODO: 채널 메시지 조회헤엇 /// 구분자, 전체 메시지 개수 넣어주기 public class JCFMessageService { private final List msgs = new ArrayList<>(); + private Message message = null; + private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); + private final Map> userIdMessageMap = new ConcurrentHashMap<>(); public void createMessage(Scanner sc, Channel ch, User user) { + if(ch == null) return; System.out.println("현재 메시지를 보낼 채널은 " + ch.getName() + "입니다."); System.out.println("현재 메시지를 보낼 사람은 " + user.getName() + "입니다."); System.out.println("무어라 보내고 싶으신가요?"); @@ -23,10 +27,14 @@ public void createMessage(Scanner sc, Channel ch, User user) { System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); String n = sc.nextLine(); - if(Objects.equals(n, "0")) { + if (Objects.equals(n, "0")) { System.out.println("처음으로 돌아갑니다."); } else if (Objects.equals(n, "1")) { - msgs.add(new Message(ch.getId(), user.getId(), text)); +// msgs.add(new Message(ch.getId(), user.getId(), text)); + message = new Message(ch.getId(), user.getId(), text); + channelIdMessageMap.computeIfAbsent(ch.getId(), m -> new ArrayList()).add(message); + userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList()).add(message); + System.out.println("성공."); } else { System.out.println("잘못 입력했습니다. 다시 메시지 입력 부분으로 돌아갑니다."); @@ -41,9 +49,9 @@ public void updateMessage(Scanner sc, User user, JCFChannelService cs, JCFUserSe System.out.println("어떤 것을 수정하고 싶나요?"); String id = sc.nextLine(); - Message text = msgs.stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); + Message text = userIdMessageMap.get(user.getId()).stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); - if(text == null) { + if (text == null) { System.out.println("실패. 해당 ID를 찾지 못했습니다."); return; } @@ -57,10 +65,11 @@ public void updateMessage(Scanner sc, User user, JCFChannelService cs, JCFUserSe } public void readMsgInChannel(UUID chId, JCFUserService us) { - List flag = msgs.stream().filter(e -> e.getSendChannel().equals(chId)).toList(); + List flag = // msgs.stream().filter(e -> e.getSendChannel().equals(chId)).toList(); + channelIdMessageMap.get(chId); if (flag.isEmpty()) { - System.out.println("해당 서버에 보낸 메시지가 없어요."); + System.out.println("해당 채널에 보낸 메시지가 없어요."); } flag.forEach(m -> { @@ -71,18 +80,18 @@ public void readMsgInChannel(UUID chId, JCFUserService us) { } public void readMsgForUser(User user, JCFChannelService cs, JCFUserService us) { - List msgList = msgs.stream().filter(e -> e.getSendUserId().equals(user.getId())).toList(); - - if(msgList.isEmpty()) { + List msgList = /// msgs.stream().filter(e -> e.getSendUserId().equals(user.getId())).toList(); + userIdMessageMap.get(user.getId()); + if (msgList.isEmpty()) { System.out.println("아쉽지만 아무것도 없네요!"); return; } System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - for(Message msg : msgList) { + for (Message msg : msgList) { System.out.println("ID : " + msg.getId()); System.out.println("보낸 사용자 : " + us.getUserName(msg.getSendUserId())); - System.out.println("보낸 채널명 : " + cs.readServer(msg.getSendChannel())); + System.out.println("보낸 채널명 : " + cs.readChannel(msg.getSendChannel())); System.out.println("내용 : " + msg.getContent()); System.out.println("==============="); } @@ -93,14 +102,19 @@ public void deleteMsg(Scanner sc, User user, JCFChannelService cs, JCFUserServic System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); String id = sc.nextLine(); - UUID targetId = UUID.fromString(id); - - Message msg = msgs.stream().filter(e -> e.getId().equals(targetId)).findFirst().orElse(null); - if(msg == null) {System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다.");return;} + Message msg = /// msgs.stream().filter(e -> e.getId().equals(targetId)).findFirst().orElse(null); + userIdMessageMap.get(user.getId()).stream().filter(e -> e.getId().equals(UUID.fromString(id))).findFirst().orElse(null); + if (msg == null) { + System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다."); + return; + } System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); String ins = sc.nextLine(); - if(ins.equalsIgnoreCase("Y")) { - msgs.remove(msg);System.out.println("성공!"); + if (ins.equalsIgnoreCase("Y")) { +// msgs.remove(msg); + userIdMessageMap.get(user.getId()).remove(msg); + channelIdMessageMap.get(msg.getSendChannel()).remove(msg); + System.out.println("성공!"); } else { System.out.println("초기로 돌아갑니다"); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index e0653d48..f296ad28 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -4,11 +4,12 @@ import com.sprint.mission.discodeit.service.UserService; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; public class JCFUserService implements UserService { - private final List users = new ArrayList<>(); -// private final Map usersMap = new HashMap<>(); -// private final Map usersName = new HashMap<>(); +// private final List users = new ArrayList<>(); + private final Map usersMap = new ConcurrentHashMap<>(); + private final Map usersName = new ConcurrentHashMap<>(); /// Create @Override @@ -20,23 +21,21 @@ public void createUser(Scanner sc) { name = sc.nextLine(); /// forEach 안에서 return은 forEach문을 종료하는 것으로 끝남... - if(users.stream().anyMatch(e -> Objects.equals(e.getName(), name))) { +// if(users.stream().anyMatch(e -> Objects.equals(e.getName(), name))) { + if(usersName.containsKey(name)) { System.out.println("이미 존재하는 사용자명입니다."); return; } + System.out.print("사용할 비밀번호를 입력해주세요 : "); pw = sc.nextLine(); User user = new User(name, pw); - users.add(user); - -// usersName.put(user.getId(), name); -// usersMap.put(user.getId(), user); - } +// users.add(user); - /// 테스트 코드 작성용 - public void createUser(String name, String pw) { - users.add(new User(name, pw)); + usersName.put(name, user.getId()); + usersMap.put(user.getId(), user); + System.out.println("사용자 " + name +"님이 추가되었습니다."); } /// Update @@ -71,17 +70,18 @@ public void updateUser(Scanner sc) { private void updateUserName(Scanner sc){ User c = check(sc, "변경"); - if(check(sc, "변경") == null) { + if(c == null) { System.out.println("맞는 계정이 없습니다."); return; } System.out.println("변경하고자 하는 이름을 입력해주세요"); String rename = sc.nextLine().trim(); -// usersMap.keySet(); System.out.println(c.getName() + "에서 " + rename +"으로 변경되었습니다."); - c.setEmail(rename); + c.setName(rename); + usersName.put(rename, c.getId()); + usersName.remove(c.getName()); } private void updateUserPw(Scanner sc){ User c = check(sc, "변경"); @@ -91,7 +91,7 @@ private void updateUserPw(Scanner sc){ } System.out.println("변경하고자 하는 비밀번호를 입력해주세요"); String repw = sc.nextLine(); - System.out.println("상공"); + System.out.println("성공"); c.setPw(repw); } private void updateUserEmail(Scanner sc){ @@ -121,7 +121,8 @@ private void updateUserPhonenumber(Scanner sc){ /// Read public User getUserId(UUID id) { - return users.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); +// return users.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); + return usersMap.get(id); } @Override @@ -129,32 +130,50 @@ public void getUserName(Scanner sc) { System.out.println("조회하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); - for (User u : users) { - if (u.getName().equals(name)) { - System.out.println("===================="); - System.out.println("사용자ID : " + u.getId()); - System.out.println("사용자명 : " + u.getName()); - System.out.println("이메일 : " + u.getEmail()); - System.out.println("전화번호 : " + u.getPhonenumber()); - System.out.println("생성일 : " + u.getCreateAt()); - System.out.println("수정일 : " + u.getUpdateAt()); - System.out.println("===================="); - return; - } + if(usersName.get(name) == null) { + System.out.println("조회하고자 하는 사용자가 없습니다."); } - System.out.println("조회하고자 하는 사용자가 없습니다."); + + User u = usersMap.get(usersName.get(name)); + + System.out.println("===================="); + System.out.println("사용자ID : " + u.getId()); + System.out.println("사용자명 : " + u.getName()); + System.out.println("이메일 : " + u.getEmail()); + System.out.println("전화번호 : " + u.getPhonenumber()); + System.out.println("생성일 : " + u.getCreateAt()); + System.out.println("수정일 : " + u.getUpdateAt()); + System.out.println("===================="); } public User getUserName(String name) { - return users.stream().filter(e -> e.getName().equals(name)).findFirst().orElse(null); +// return users.stream().filter(e -> e.getName().equals(name)).findFirst().orElse(null); + return usersMap.get(usersName.get(name)); } public String getUserName(UUID id) { - User user = users.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); - if(user == null) return null; - return user.getName(); +// User user = users.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); +// if(user == null) return null; +// return user.getName(); + return usersMap.get(id).getName(); } @Override public void getAllUserName() { - users.forEach(u -> { +// users.forEach(u -> { +// System.out.println("===================="); +// System.out.println("사용자ID : " + u.getId()); +// System.out.println("사용자명 : " + u.getName()); +// System.out.println("이메일 : " + u.getEmail()); +// System.out.println("전화번호 : " + u.getPhonenumber()); +// System.out.println("생성일 : " + u.getCreateAt()); +// System.out.println("수정일 : " + u.getUpdateAt()); +// System.out.println("===================="); +// }); + + if(usersMap.isEmpty()) { + System.out.println("사용자가 없습니다."); + return; + } + + usersMap.values().stream().sorted((a, b) -> a.getName().compareTo(b.getName())).forEach(u -> { System.out.println("===================="); System.out.println("사용자ID : " + u.getId()); System.out.println("사용자명 : " + u.getName()); @@ -172,6 +191,7 @@ public void deleteUser(Scanner sc) { int n; System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); n = sc.nextInt(); sc.nextLine(); @@ -186,16 +206,27 @@ public void deleteUser(Scanner sc) { System.out.println("일치하는 계정을 찾을 수 없습니다."); return; } - users.remove(target); +// users.remove(target); + usersMap.remove(target.getId()); + usersName.remove(target.getName()); System.out.println("계정이 삭제되었습니다."); } public User check(Scanner sc, String work) { System.out.println(work+"하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); + + User user = usersMap.get(usersName.get(name)); + + if(user == null) return null; + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - return users.stream().filter(u -> u.getName().equals(name) && u.getPw().equals(pw)).findFirst().orElse(null); + if(!user.getPw().equals(pw)) return null; + + return user; + +// return users.stream().filter(u -> u.getName().equals(name) && u.getPw().equals(pw)).findFirst().orElse(null); } } From b92d8222db29b801238665484996497658b53846 Mon Sep 17 00:00:00 2001 From: Alpha Date: Fri, 16 Jan 2026 16:10:07 +0900 Subject: [PATCH 10/35] =?UTF-8?q?setter=20->=20update=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EB=B3=80=EA=B2=BD=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 50949 -> 50949 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 22447 -> 22597 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 23597 -> 23937 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../discodeit/app/JavaApplication.class | Bin 7645 -> 7306 bytes .../mission/discodeit/entity/Channel.class | Bin 1301 -> 1305 bytes .../mission/discodeit/entity/Message.class | Bin 1993 -> 1838 bytes .../mission/discodeit/entity/User.class | Bin 1917 -> 1945 bytes .../jfc/JCFChannelService$Holder.class | Bin 0 -> 652 bytes .../service/jfc/JCFChannelService.class | Bin 6376 -> 6634 bytes .../jfc/JCFMessageService$Holder.class | Bin 0 -> 652 bytes .../service/jfc/JCFMessageService.class | Bin 8576 -> 8994 bytes .../service/jfc/JCFUserService$Holder.class | Bin 0 -> 637 bytes .../service/jfc/JCFUserService.class | Bin 8288 -> 8540 bytes .../stash-dir/Channel.class.uniqueId1 | Bin 0 -> 1301 bytes .../stash-dir/ChannelService.class.uniqueId5 | Bin 0 -> 507 bytes .../JCFChannelService.class.uniqueId2 | Bin 0 -> 6376 bytes ...eId1 => JCFMessageService.class.uniqueId3} | Bin 8566 -> 8576 bytes .../stash-dir/JCFUserService.class.uniqueId9 | Bin 0 -> 8288 bytes .../stash-dir/Message.class.uniqueId8 | Bin 0 -> 1993 bytes .../stash-dir/MessageService.class.uniqueId4 | Bin 0 -> 607 bytes .../stash-dir/User.class.uniqueId7 | Bin 0 -> 1917 bytes .../stash-dir/UserService.class.uniqueId6 | Bin 0 -> 281 bytes .../compileJava/previous-compilation-data.bin | Bin 1443 -> 1553 bytes .../discodeit/app/JavaApplication.java | 78 +++++++++------- .../mission/discodeit/entity/Channel.java | 25 +++-- .../mission/discodeit/entity/Message.java | 64 ++++++++++--- .../sprint/mission/discodeit/entity/User.java | 81 +++++++++++++--- .../discodeit/service/ChannelService.java | 8 ++ .../discodeit/service/MessageService.java | 7 +- .../discodeit/service/UserService.java | 26 +++++- .../service/jfc/JCFChannelService.java | 41 +++++--- .../service/jfc/JCFMessageService.java | 30 ++++-- .../discodeit/service/jfc/JCFUserService.java | 88 ++++++++++++------ 37 files changed, 323 insertions(+), 125 deletions(-) create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService$Holder.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService$Holder.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService$Holder.class create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Channel.class.uniqueId1 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/ChannelService.class.uniqueId5 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFChannelService.class.uniqueId2 rename discordit/build/tmp/compileJava/compileTransaction/stash-dir/{JCFMessageService.class.uniqueId1 => JCFMessageService.class.uniqueId3} (86%) create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFUserService.class.uniqueId9 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Message.class.uniqueId8 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId4 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/User.class.uniqueId7 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId6 diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index 1fe7d94f6ed6969c1f6d7306510f259384cc9df7..55ae0dd2fa5a8c3cdfd7d5a3f7120e2adb650962 100644 GIT binary patch delta 1035 zcmZqeV{YwZ-Vn3Y>D%nwDwEtqlY;b=w3JHIjPks4Goz%+^47n8Hs_JB(P{h12iC3@SiABPZ&8P}N#f?khySjY0tu>3mh5d3 zQoAbdB>jEMWaV{QCDH~<_A{=VJaM}6UVi=f+4{)`BIGB3n8h*q?Y;;BuEH-b{}f8Tp7c#rZ1Sa9 z36uRJXH9;;UsgN7-d6O@>(U7?X1}femdWGwq2c?=J;q&@%nSlE|J-}usv_T_3ml1DVJQ00Y^ho1cB7_NkouWijD5bT#l?x~sd~vdiN(bX0w*kw zeqG49_3={PrO&^zukZfV0#dk+kFh(nIJF3-N_)52R>wclW)f^BEmQyf_UeHc#}Bmr zrS*dB_`i{LhgI*DiU(}`#n1uNH(6|(j{Co6kWs&x8CtT^k{RcFIlDP$Bs+M z#@}DJ@~XlUu;d~)#yLROf&u`$nJd;FVD;X_c9v0}Z;IUofk)q(KtBD;GMVp)gtlU? z!2ZcW(~~-Hw|={pznWtj*r|7%fMNA>?!L=cU+q~^H&yTJyT;AaCkGzUV4VsI%gJ>| zH0tMoRnBArsuYvH*8O_P2~$nin*s|3Vrqaw4(pd(_>;SV>Aj=eXXnQ|{DDF{cXKuI z6vPUUJ!S$nJq8V7obpA zTUO-Lf{POu>)lj5c-5bcWqE!<$!67~hZyBDoHAOT{F?RBxcT6dDNh)t{{lz#L>?AK V1_n{)$%=CffcfY7=Dgk0xdDFT=WYN1 delta 805 zcmZqeV{YwZ-Vn3Y$$NI9iBU<8NpWdXR$_5lu1S(~cSBm|AfBxk(p2MVf9mh5d3 zn(&43>OP)NpH*&3U-)4ee1vh`0aEldmI?@!5Wo+0)4 z`=@V=J0~~pR-NoUbGE=+CZqqyCaGBF+QlcjSiiTOd|{UU+cm~5-7c+P$_%9n^oQJy766|X4%R9 zk+UYh-!H4(?@=sw&}^gQ8ly{dlO9j`+PnC6^B&{7*31k7x2Nl~&rCgkF<9f4_@0m@ zx|7$>ldKQsYVOuP_~W4>+l@<4wbHYP|hpxA9ai#y;QF;^M^gRK4V!#NuKG0mFq1 zk`lA(*xwsnG-jx{zvUxX;YohR?$F}YBABYH2btzQtT?h-^`Px7b!?^?mlg5^QNzwL44l- zRe4(9--0Dy7*4)@SX#n;x7(*LD`&Etn!VxF@gH7Gmn{MLuEBY7!gdMmSRvtMOaE`J za$E3)XZhx?Nt?hrA27Y^F-zSSJS_(O_+90(y1wh3y*kS7+Vc zwA*+l6HsNk=H>hHDeL5?&SOzcPJ9vw6v|B(d@s8C{u71kZ@PbLG#vv9v0F@iD6jHU zbpHN3d1rK|h5?1*w)E{Q{$g6X-Hzo{!dk9{K%qTlzLJ+TU4zvQAF`{dudM|NU6f;Y zu@&F4FRRI6ufX(eYgv}(7nE#PJ$i^y?y+~+JFx>lt3J*v7vH(7F618AZ;QEE7#SEu UA|^LZ5ZP=oV;$q>yxr5e0r-4%O8@`> diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index 8cdb05c8d3524a4e4b3f0d2ba2b94ecb7514bcea..781648e027ddeefc37e2a732470336f90af76bbc 100644 GIT binary patch literal 17 VcmZQx)_UaMM6cU+3}C?M4gfz41uXyo literal 17 VcmZQx)_UaMM6cU+3}C=$3jjX?1tS0e diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index 5d8d4618b1cc96c55e3550bc02305139f82012d8..d5bd0b2d4aba1de4ca1cbe25c3f5cbf63b99b55b 100644 GIT binary patch delta 1172 zcmZ3#p7H1g#tkMCj6su4C06olev7HJHJZo(2I1>BUzLbp6gd3i<(bFdB0Hg?4>zky z?O+jzcM}Y|zUKEFh-ifH6d4UNi3D&U>C{e&JzP%HyrCZt%s1gX+xHgyj&ta-J z^>5fw%dTi&$dYpFdB|5DsKEgcRZMI^8qF!pyqB1S-!VIdM9VLUFkcEZ5A66>hz^N! zm^v0tyYp9Oo}J#RC*6-9Up}`Dq~j>lnM**G^*}69h^ggT%||1>>c&Wsr|Twu-k&=S zti@)b5>O=&sQd#GXwJGaDOkPtYiCMwz_jnFGGZqo&f4_@tbu{?1EvnS&CZMJ)puMi zf5j2fV74aiC)6j5P%UPdS_15CMc=$Go$zAz+v;zbJYHaD*&Zl>=#c5c)WH)zS>QL|XRcrmzd$HLA0A=8-ZkJ=stg(wg({st0gA-j*IAc3YM=dBowig#)H5(B zgJKa`hcYlrDCP?6pBywjsq=R0w`=*UIiQvRBOU}4V*X|M1* ps1u`LYJfDd6M-&VvGxF~_a?TpjQV_2>@EmAf|^|=bazSuk%Ov+0A*t!hc)pl0tOIM2nM7|SrV^m`P`9W>kM zxW?$x+@!}-zCwI*u@|C47U(l{X9aULcWWQ~@lcWN#-x)~CbvO4_KO|(1<}D;FN&$f za3O=F#H>2@_eK|u87l5?fok~((ZYTbQ^(bVO!FRc$HZ-THuGj(=KZN)XC*5+Ky}n& z>L|XRcrmzd$HLA0A=8-Z4pF diff --git a/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin b/discordit/.gradle/9.0.0/fileHashes/resourceHashesCache.bin index 95cfb82158543fa7cb55a4ccfe833f6b66d4d7ec..37234e9068f3bd63883fc3c5bfdc9bcd36c99037 100644 GIT binary patch delta 583 zcmZ3xgRyZp;|3E6#s!;AB^a6cSM`W+?`E6F00uEzC+kZ80lK2rswrgN1oLVs@;FHuG~&W zeul&8s}9DPLj@;KzAL|xpV_JT`rgn9P_e?vtqKYPny1?DzVHtdhng9`c&-AIfPLEM zz;n`Za!{4Jo2M!rWa9UalYW;Cvyz{cmf^Vx&asvhBP*qeM)#MA9k+=T!vpJ81jZWKRs#v@75^qt5 zwMpXU#fSf{mcpV!?W(ww^!F{3mDg$2mq;5d*^g;R*{o9=j-QRYvBoU=(c(uFoH126 zAHL-9+3OJiQYZyH4?%sofbP z!Lovmt0ys)bYJjW7PKO7@r2zGm4>^PG-0aH6P-J!=W6TxMK@M2zkd8|JxB!r@mQew delta 76 zcmV-S0JHyry8*4Z0kAX}0hY5h7y$#5P8;x(RvZ_Tg&cXa79D>9v#lPn0h4whsFOA! i7qev{_yMzZBe?>TMke_J4k582_!qG-_zAN?NbD0cPaL-Z diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 9ae93da863c68d04c91076a027ee4c823af7cbb6..11462623cbd97defc71c5c04a7dbab667421cdba 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6b!0RS`71Q7rL literal 17 VcmZQxwaR1i+k`Ae1~6a}0su3>1OEU3 diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index dc6bba3df83276e6ceb8f7f95b4db79967fd5b05..db9e5ef8ad2a8c5f0b78e1ebd2203c5554ec194f 100644 GIT binary patch literal 8 PcmZQzV4Qu_c9#_Z2#x}i literal 8 PcmZQzV4QtG^kp~z2z>&w diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index d6204b5df5f89662c1538e07b86ac264cb0f5859..bfde8d9f89f3daf9fd5e228a4eaf4c69051028ee 100644 GIT binary patch literal 7306 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 ND^B@uswLpqe*h2pS7rbJ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class index fbcf2a3874b0302d97001814122e5a3699503ef5..5a00068a26ebd32f162b896d9e1e19c9ce1ecbdd 100644 GIT binary patch delta 140 zcmbQrHIr+DHM1l)0}BHW0|x^y5b`mIFz_?TFbFWHFbGZ#VeVy=ocxH{o>6wP5{tcu zB7-pl15hm^kmO)6VK4>Kj12k=Y(UZw$hKr)2Fr14?OZ1_mAmMj*+-V8UPuq!}6X8Q6fNA&_m#zzmk-*4n|qzJoz_D}(w*pfD4I5s(Ba aVqlP-ypqL{QoEaDx+$Qg1lji4RU88{j2CO=^FWOSUY#ct2&J~@kBp3!o07rP8M7XuSel`jJq(5$uWG5~NlA}Ig> delta 318 zcmYL^O-chn5QSfLPc=9JLzE0CCNusdCOu}Oh!DXzXw)eFfUe9D+`IJvuC!KOLKGRv z%DuSLV|WQ`FenZ6x|&yCy?&g0FF$40R9o_9BFXHfyx2Pmr5}7vGY&!60q_8eKy_1w zLG329OR=KM>pFjcff5Nv+7)pm;g}k-%~iSQNUpddJ&x#DgqyTnyxS9;$|o;T ztLQpsfB)E0kWqa28~qjC|F}-!KwC05ATPJBN2z?cnAYXn&B--SRZ8P{gmZNoT>Jng CwK8!4 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class index bcbec89f30c02415deda5d356ef63aaaa4b8b4ac..7348754502870142b70de443e2cd5fd7ede8c319 100644 GIT binary patch delta 249 zcmey%H2_C$k3Qa0Ft7U8ClgC zRlqDeAWH+xs%F(<)S0}D)t=E{@-tR>4NC@Q21W)325zk#4D34?6t*&GZ3J?e7_5OL z7m#LPFagr0lQr2KIV~7i87vt%8LTGnXA_^?#U?b_gN=9cN;ZCeKAFV=zNl2r2_C$k14qxj_YETWU!S=1*NvWQJS!lKS72^L{w zRcDj}v+RH@X)vprRcrD(7M{r)Sxp#aCqHAAS21N^W?*DsVBpr;!N9(QL18O{)I#6BfgTh$dV=$0|(tL}{&}kdKrW(MYO zgkxgE!6r%!&GqSy+fgu*F@x3ddi|#7-Y_(}>+@YQWL;{5q108O^rn-cjQjpDAf(cb zgdYt2Sf%j_%qCAtGr0e#x$1#RTMZGcw6=TEG#0X@(#o|zGM=Ynq6AOsq#bFRlG7oT zV>j@%mh_Fnb{SeUYC_5saq^6O?raYBvN+x%n;rw(sE~D*7bvPy uWMStg`Dj566yIUq&rx`Vol-FTQdD7}Mpy>B*jsoL`{Zr9RiwXAhy4xC5umgH literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class index dacd579962731c37e4c9e74ccbeb65fb041e34e9..dd1d15b867f22e3f20d211244660488e1b900346 100644 GIT binary patch delta 3115 zcmaJ@33yc189jG0nK#SJWHKQe5(tEZEE5O>M9HEFiISK^5RgJG7{~--R+3Qx+m1_U zY1Nu=Rbr6Et`?|}gvKT+rL9V9wH3QrOBY((S`usRVmCm~eecZ}`1wsiGA)fqFfHTv-%DsCC^^g(b^d75^z@6uUu7LzqCrAq}E#X z7Q2vwR1Il5rs9geH;Y8NOce{fGmxQSrjA+26iAdpB+3>s+mnTC4RdtlAXg5EC60U@ z0TjqLM7@|Nb8P|pe1Ux0PM4*+H^q%Y6zPaXrU#2~rG~{iuEN!FuWh9$mhafoM5%Pe zTqUlN6)_7O`RPKnW5>@hKOu@85T(4spas{-_!BBleTTq#)(QyN6rOUo>K_TjO z+^7(0-R1@-RtTg_?C;MQAHMtC&~xLx{S$k3O+0#hV&LJKPOOw2_F}PG9<~>XHS&zT z#8a*?uG8^R+#)k$XFAp^5F2DoY;Jxb8gy*LCIJtxU)mLH2nEYS0x>zcHGae(sJ1o< zB<0k|6>zhqU(K zwor9@$cabf2InlXN8al!%AA46bPOnlV>`Q=+e0b*B25(~J&G8N)-0%pSj^E&{4`-bsRvbiuOeQ+Vdl9e*w2y&;#1_SKA%XCXMIJP--Li4 zUc~eJE!GGdzKuAxv6P3vcQ{ia7bm2LpJ&fYX#+lrR_Fc%yugvpU25({B=PIQDSX#D zH_cc9>_hM!*s2?bXxGkf$q&(8+aNE>hq4n9Vi&Z!WgVk%S+TM4a68%WD^FE4kxD5l?(!#$jLXnXuw853k?{Bw`NF{}ACBmtI&RZU|C^RLP zcu-$(%JiX3f#iB%4A%l2sJ)fZy^~y0?iGySx=~cyu%>`K)P=cOOA%NPw{ zF0suc@cBrjiz!%$8BECxmel~R=BSu$DXLJ0mAD2UA&8AA$8A)*ila$HOO%L~C=u%w z5n(cs$U{Ftga{AB1@I+!O=EEr_-T}j_be{jlz%rx{ZrA5a77Q(pI(nBKF{XZ58EKPTjFqJLIc@%SAUEmbrl)uVxaV((n z!4zvUGYvH9z%6joWk1$q3NKS=GE55!O_)O(GcYirnQ$r+whtvaB@%`W7J%C=0BH(9 z+vNbr_vILxXm$%RG!w&Z#LzkkLs~dWNg95J*LjD7#Qtv#Kj)g6*geD`h`UrNdK8@k zkD0j;QV}yJ?+_Tn4qz0Yw6PK-o3lM?c9#)hL+4>5v!~KBu$4upivYWsnRhUpJ^12FCfJ8L8#dJX z=m`4NQk?=B7{y*2>zz@c_H&Qn5NB1=D(eT;oPj|Vz6!<+xSz6ofV~G<0v}>k>SbN( zLpF9ZeI?U(52e{pe+E#Ey%g!=6zKuVB76`*JTXb5P0@ffSsE>24x1$_oriycGjv{2 zkP6!cS{Co~D!T@chAd{S3X5Q6i0HL~yx2JBRj%b5uAM}o(uhq_A2wnNeA$4IY;KK0 z@LIZ520N_SH(3U=qhTJ!=lK_Kj5ZkTLpCHyJMvp`su<$Ee5mPS10Ec`pe$8wWG{u+JGIgKQ z4%e!bCP%`T)F)b=T%S0cT#q=MT&?^qmJSRe`CnRT_)eDWZG4foGXOgn@4HaRe{l+% zso^U8mWcRx;&*Iq*z_iTZwv+B-9NCmghKiw0lsat?-=d7M*BCT{RjR@2QHG}7&R7l bH5Lw`3AfOB-cO?m{I3uPx9|#|@FVR5=>LyD delta 2991 zcmaJ@d3;pW75?sQZ|2R*N)kw5LLiWY$qY#V5keA6Ah8J~Y9q2KI>;o1kfq6hAlea# zxU~viP{g80u~kdkur!#sQKiyiTf5rUYWGE9Y_*H63hH;?n+$_LfBomach6nUcfNDZ z_ulF0Z&c`~J{*1)K()|!=&#AmqC$+8N5nL5F7h;tH82i7`L?L^jz@up2?i#jP+nxK zbWJu;gkrhQ)-0yT6SjaTmG9Wfv;7DfaKh(B8Ok+O7?_6Xa;Cjy>_q}uv4?gSoRJ4& z_Z>Ywu#;nK&&~;MTr3aRXNlSJb^A2e90OITmf4Ovafw{+2$uLU*FY@_1+=zsq&d_X zR#(qAP=|T}S8uqpdwp1-NLF~WWH8MuZ?S8mb@=gF0}b%;Sf6#wjRo>8$2id>b>|#$ znXGq~i!0;}&MNO5wf#y1i*S{E);YnmL}6GeFiB?UWA1gOuJB{Ifva(ifR`BN^@c-{ z@Z5-iy<|#bChWLY9k@;)yQFc-!Zo4wp|Z81uC}t4NN;;rn|b?61J{q7U(~b8Jf8^% zu63hTu65;kRx3K&1umh_QF6a)YJM3y46H>bBWUld>+FeaG#xH;qgz3{+&M{COnlxz zFZ$#-t;Ds?z#ID(L+R zdc&tccVnBhxogGkvd+Co+$kS)H)fB=7Y%$#U8Qw}H$)n`B5vFx-*-K5m(6;}{V2X};2^#skLktUZ(%^gAp?g|FW=M)yhrhE4TA=b;Ype0o#7Z3 zthoWNPqupxiYobtD}TrRJ{d9|6F)ejrz{i`(`&oCBYlzHP)}1hvbuX!Uz!WQ*YOAZ zQNy1UBY&3LQcsA#$^~h;t#1gV#18eJ>EC|liCYUQ3xpe|1q{p7FyFGo1V&kw*w($V z{zI|7Pg@IrKfiGM?%2Lv@dY}3TgN;2r-pwS_&5G@ql3<$7RWcp-k~ zFpJ(nTh(EtXXXrIOz9x^}-U5FEl(I~J?e8ETd1 z?NEM;;ED2)1~;9h5N9q~M++*jgi5-SRIK63c_KOzM06yGSP>^;6wmx9L4+6L9H`+hX>=g)a)OI@ zi7KkH*{R}Nn21khGr>i(3P7!2ZbhVG8^-5GXyLSF7>kpp%Z9NcX&M^Fs*!1C_yRU& zk^|;{7U`JH*Gke+MK-F*Mh)4RixTSp#h8bB%%?`z@uGSP5ykMR@waFN$f$M93Qq9zMKKQRbmsa6#|gf#*WSiR7tQf3)@1cng-hOog#2~M}H zUr^R9W{S@jdLF$3Au7pA;=7)W*~)B2nBR3KR!d>3aXe~DjOtfAL^dJ(Y@|G?wl=fn zTU9o0wW=@kw)pc7KFQWyHL4{S`}SC1?^a;d_U(hXSFJQDjDaESvQZ&SecG+I#I5Yv zs3}W(l+nbXWT}=(12(ZNZ{pj{7{e;@@gq7Bo7t*cFcn+bp4(WOw=tkQ__uK<%iu0H z#of3D_aKbzW{{R*wI&kM8ZXf*_MxR%K13VvbNqtAD+G9lzxI};F6<8`U-YghNF`fH6}SY#!X zX&%Ct1xkmpPbK?+jl&ZHVi4cFz>)fo0l(q7c$h7_50m-+94(g9qJ+~Ts}R$5_3?@a zQ62Xg^)O8>{y`i$$dkzdB;VyRZ{P-a@GG{H;9dMg#_!syYKLoeswOX#Cr*>)iPK~~ z;xw8pR|$Qxa9Bm$M$KN$FH$>Yc@6X3K`~mJRK#`o4H2pOeT}0Huj99TRzZ>V{hj1zzawGelQk(!jP-WP$t(5 z`pIeEfXQ&-M-#4|V;LrVB9)R+$cIw-(NM^QD-qA6FZlS;=eJJtPAKJ#M0bf=FrepA zfNfyI#wLmkjrHk{TTw6+F@xE5yS;|%+%VKT>+@YQWE^UPq1ch3aHo@jh&wl vp~%GUPx8@%8YsNOc$g#q3M-{x_@$^qM};tr$f^r(V4u82w+i$ZYOuZmDO8~N literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class index 96bbfc75094c7380d539a544d7f046be4d42bb9b..441524256d58447c924da2a646beee79a7fbb7ef 100644 GIT binary patch delta 4046 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 ZGRAJ|Vdpv{k;(7BUN|UBJ7^a?9|4pyAin?r delta 3772 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 M^l=`M4H8A@f7(g|lK=n! diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService$Holder.class new file mode 100644 index 0000000000000000000000000000000000000000..041d2a598655ba388ad7e8cb7d9ab1ed2585975a GIT binary patch literal 637 zcmbVJO;5r=5PjPMEu{*AABYzdJ*WrwXpBfSjRXv-2av>LDXT6it?3s2m+?TNi9f&} zWt;-hcqN<6?7W?QGkNdp`~4HZCH5?6&<$j4WRYVijl8MH1225ycY~4e6NX$}hB9d| z=tswW117_nAC0+siDj7Zu~bS%As6d1pnk3xiu8w7-uJCW}N zeJ_@2y#zDKvs4UMs}5XlPjk(>A1w8?y3r)|MN_6@EB~cCO?{zmSE!^FDYC_GhoOj_ zz*9=lD!GLo*e7{4vX-Hi3QRYR4tYyRi7HN+QO=&sz+UIi8x+%LU-Y1)oEj*6z<8J;{{}0iVECh`LdP~?8j)4!*}yJki@FNre+||T-jACr literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class index ce707a42d27039b05f0e951f64090b82f4dacad0..9e8a5d9cf6cc3db94d40b047d3b044bbbb815b6d 100644 GIT binary patch literal 8540 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 C4(o#e diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Channel.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Channel.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..fbcf2a3874b0302d97001814122e5a3699503ef5 GIT binary patch literal 1301 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 F{Vy}Pu_gcj literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId3 similarity index 86% rename from discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId1 rename to discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId3 index d36fab622e1790382245d413b77057ea418b2b13..96bbfc75094c7380d539a544d7f046be4d42bb9b 100644 GIT binary patch delta 441 zcmXAlJ4};N7>1wI_QyKdG?r2;z5G!mC=yeHmqgk^p`fLujYvtTcuTx+ix9-iWD}W8 z48w83kf0N6V%Qv94I`Tj&MwXlBo*Ia&YwTuIp_P{_j%8sT)ls5|3qMgCN0=I{~g~K z>y7?=UEsJ5nsEs0-@<7kbP^>+D;Z)85~oOlDoO6+GQ%nA>RP9bZ?v;R2fLi*ho%}* z%KSIrF9+Jm%3$;zRvzQUb6EL|gI6A#G1Fv@;FHBW<5%UFqiP7^a~jm_^OKvY3;5L- zTTfc?}6ev%CA;q~a^kLyuwiB_ixiqS) zTS`5qbXBDo=L{2cNvg{KhOH$*}%8+VAW?T6>w~QjVB+6 zsZ)NPS^~6CPa8ox32~1m9@ETI!n{-^Lxd%6utt}-1N)ThY0HkuSsTgMJi{-sC}Y~$xUF`^Ou|k%BlfrBx8I$(iP}HT F_63h-Om_eP diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFUserService.class.uniqueId9 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFUserService.class.uniqueId9 new file mode 100644 index 0000000000000000000000000000000000000000..ce707a42d27039b05f0e951f64090b82f4dacad0 GIT binary patch literal 8288 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 C4(o#e literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Message.class.uniqueId8 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Message.class.uniqueId8 new file mode 100644 index 0000000000000000000000000000000000000000..170c3f9ec2de913ca9eef56aaf1095fdc97ca8dc GIT binary patch literal 1993 zcmb7EZBN@)6n<{rHd&G1A0P($O-uhO#l*j<8U+g&^&tNxa}Haggm)>QC8^ zn6ybti#BN=_HjRI+Hh&=_{-03#7Jf$M$yw;>FTQ8X1A>%Bk<$o$|ivogJFz8q$bok%OMbH62r! z7Fccex@GU&wH?3QwLQ=7Ipvn^HG3_~_RE&z+y0yKq2+mI+Y(52n`hOQz-;Y5$tyDP zbsc$`HPP)?TN-X)E{%B|H*xC<==vMax4MMb?7J>&9NS&%(C&0>PvJk%a0hqO_&~=! zEC@_p7Hc%B&jd8rbXvV`pyZ3C2pVZqP?mIjh>rwfHu26(^7vTCiuA}f&rHX$I@OkJ z;l7Tdw5Ix=E)` z?DVapA340@L5O(tS|NU{V-ueWWSXvJ`qnP%gt)KzeWv4c<<~!NDL;*{D>}9%HFBQi zH%9h#?CAJHPCwfriW3Qea@}q_rr&odZ$>5)(qubgQsW%gcPfl4j$0?|(GitS$c#NQ zOJKTYJJ!p7_tbKa&C?Do`C6}Oc1}#!mU?JR_-B$64{GnhQi2l>{|5qdA;@tM$+qQ7 z8c*@8TTW{)Ab`NN(9lr3C()?y4VQjnNVI4=`f%bSpBw{*aD&GCi<8D1Y=O9*^PErwm{yiiwkvYPMmk}JxG99Ab;t4?x5oun*Jjj>65 z#pfQizYs@?=f3d{!uSK}AKoE5fOaX)Twr!9VO-$$0E@=z0L#YO00ra003~BSaRCaC zhQijbs?sw)*VzFuiv%l9Q@+E?zlb>$Fwe_#6Ay8Vh;L(uZ@$J|Jg4_#A|n>Ophf=n z<$WYlDamePN|JrVnX5!=mHA~q2Vp-y@lAqWmH+K$H_}eYSPFXx&PWRdWSQz-q=f}6 zu<#0&U~okng!BZ<3i=WYv+M|ZMSdX&YJu?*W{mPT)Pk{>dCInu#&1~sg+dH+W+`P{ zQ3>_HAxtPxn;5)29$c6hd^j< z-r~t6S%St(D#Lu>HJYRrPEz1IQYHYhK_5B44ClA?7Egbs937z%!IBw`@cW7Jk0!*g jPK@XGG_1eLZOi&O5@}Y^CqkQ`nYBoY+z3Kl0X_Z~SgB^- literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId4 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId4 new file mode 100644 index 0000000000000000000000000000000000000000..fcab91a37da9fffc62889b83e412abccc1963bb5 GIT binary patch literal 607 zcmbVJK~BRk5L}ni&_YT}cmoO-jKnd31P4w54iVgqvx;0fPGvil_!xG>(KR;kV-B9%a1L|)Z2GH~vzz*RD literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/User.class.uniqueId7 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/User.class.uniqueId7 new file mode 100644 index 0000000000000000000000000000000000000000..bcbec89f30c02415deda5d356ef63aaaa4b8b4ac GIT binary patch literal 1917 zcma)6*-{fh6g?f5NhTvpSTraK2$~Gb;DQ^93y6Xds6u!jk`|hpOsL63%b)O1tkNn` z$_GEdkFvbCXAA*{Dj(AKcITec=Po_Je*gFh;1M=Vq|j!d-9iUC1$y?~cdp~P{;spW zvoFh`K<7i{t8hV}tx()Hkw(UVX(0>iMEK^1dMK*`z2!y_NI!g|s`9n+JXP1oRTEw4 zHqc|C7de40eNiJ+p0l;JvLs*zu3xEDqfM?*ES(IP&!8Uz1_mvh#|42xxmI=R2Z8cK zr>g38Rr8&Ss+VgOsX~YDSK$X|t1bh9l&X-@B)%aF7ja3T-FK@}AQ#2x>^DQA-qp8W zws3``QU~u%jAG2dRSV;o_?v`|FV*~A0pp$PHRSqRfxg0OoI>+&O?KTv0Y!myIgoBB zpHhKiX(!_*EllaS#z95LasD$F99GgHtFH3++B5zxm;|66s z(zVT^Op3m1;U0H6TbJQh%qwuc@NeG#o)ovKPK#7tf$oy><(j_hjl1LN%GJuQx9tXs z_wiwSxW~=6OaI%dc>&?mZPUM zP`Y%m*eo~ij+5`8QZRlXp$MFEn*NV@4RRwbT?}fy!Q8Ahg0fszT#O8l-3*T}HKL#1 z7hoXAV@qC++fO#dlcz1smbTPcZKuzg zK6~;Id3)**!}jPAMhjY7z(eMy2wopy zfh>EhRA`U2rU*TT$9O_o1fCK@q|G7AQ62VI^nE5L1-`aZAD-9LRum9Z3p~Rjop55U z;QVRug+%aDB6#>TIG+f9o(P^k4IWAaFDHU$PlGQef?t5Ez&YQf3UR^GRIqE`aO)HK ztu?#Uf=@SV_A(J~C*X$@@$>&hfl;5j`+M^E!$QO$^W0U=-b)Et9{j#3k^m$+^(VIen5dQg!tVE`CAGRZ8Z{ eCvlCR!4=KC!0TkL*(9!sGr0Igv#vGW;PpQ}YcOd5 literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId6 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId6 new file mode 100644 index 0000000000000000000000000000000000000000..35c51b56b8b5883d8410c6ca175b2746864d0bf1 GIT binary patch literal 281 zcmYk1y>7xV6orq0kdhR{#507YW=9=ZI#n=4?e02Pk&)vd+u`9l@Bn=%gdKj$a{u(5 zd(Ztl|DFK6W0qpTu##=V-N7p3d83?Dt>Kk&vaLvY?#LdMB>okO@>-`DG0gYkD7Y4; z=DVLgNzaf;OTtqm85YH7Pjp^sUP@sM+4b@}P~D+=P|gm!z^?gt^WtZqE}R; z>Ap8B+s;b*P&x?aPp;nLxiJI7Fgyn&!DNClqS^G8Uv7DVte@wx4~o|i2bf*}Tz^Jz literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index 2ab72aaaea86a8616953d6a9feee9bba0fddca9b..120e9f3d6b803e81942d13662edc1083fd3ef794 100644 GIT binary patch literal 1553 zcmX|A33L-x6#X}pLdhhZKuf3y1TB;r`-ehlDYCT8*fganCBuM#iXol0scllSAjl$U zR}f@Jty|S9h^&I3$R?nuAcz7AxUeWiHbKGT5jpVDb``&%`y)h9PE(2{t zV`y6%OWTneZ=k9@sSi~Leg1G9X{hprLcV~%1DRXm3wZ-2sxNFL4Iwo+#phKyGRH*f z)lkS&rkdG7GxD2O746BpetXRBqi4G}&A)aiUgkxEh18dO{C>64%op2^H!kYYyX*Af zx7@X(&W-LUcTx-qq=qFm^BXMdzLnn9<5s38p3ZE^^lj;v zp5HIo&Qh*iv#afhjj;zIn3oPc%%AD+q9%TS_P!g=>SRG1gE12pm9K+l>G?&H<=7tQXq9O?o3wgpoql45&*xb2>h4uXd%p~32*G=MgO zRxrz4(0NdvhbWck-uX}#Ky;QQya2io;v$HPAuNHA$C|Kc_@xk+L0k^H0(3;w`XcB{ zkY9$#5du1i;>~pMs$Oj;FT@xr0J&%_YTB& z;aJJ&v6vRD0(}qSM7{KCh~<{|LDxW@sLQh!a=E$=bUnlkaBO5eHIzp51Bjd8*vwdJ zwhuwKpitThwozqwR^cNQI=A9u&}~pcx&RrUfNqB?WYTi<-vPRl-HNo^F1TpXZqQHR z+yf~q9MP({A$c{R-tbxX(k>7CX`kdI4fcr=0dX=tanj@6^5oc{$X}pjY6$ k3h56h*WkX+qN6UHM6H8J^sgrW1Boc2R{#J2 literal 1443 zcmX|Adsq}z6u&KbrmgQ$({!!W889wj#&CI>$oO{mi{LXKZnFdb+ zwWCD3f!b3CRvoA)@5pMSm64DUOJa59p=dNzVI;HqnW1Q)VrDQDv$48pFfu0;2nuXT z3abr9qyDm>oo`H|W6zFp`wK7sH>vgbIrqjDe;!HI98!Xl)z0!8Mlfu5jPG?~`ReqH z?h6Y3@zzW@KQT?~By}#lQM#$93w5P--B|VP(tyC1)9y&xcX;T?iz^qfE=|{V8Uy}z zY27`YQ|u09U*Y8|JJu&2+Sq*Pz}2FyJ+z*Bf}2%yV0K4~vpH$qzaz#M=XAGCsPCDT zp5LpeH{DE$eOR@>vQp^FKXd&3SVLuHI27>5cz=#nW25fYVJ-Q)a*u7Aajx;N4DA-Z zv)k?{N$a$2>$Sb}3pZa8w(qWA(_hM@0hBn9cWcB#v3Y{ip(QVE7}$FCZ146b*BqQb z@ia*qyXbIFrX}Tr7)k5?mQ<5a0r1E`DT;E#}YlwfOpuJ9rH1MI?H&#T+qL z94rnIJ9JD+9?I%0z|)0ctfrzW797rMW^)>NIBxak(FjT$Dh#`gM(U%)+r`mhj%^I9 zsp5PJ?&0y6e7%4ql4*o(jNrb53O(5hr!i!h&as|6MWrI;PPth1=;QS4`1tOMmkdVy z@lrg&cx8g@RW*I0o@aV>nxx$=O&0GFr-)O<+<~@ftS(?_L?~g)B0+x9$ChzX1tVsH z>Ds-LpJq^i2H2(vCBB&y)JpX-ah8~C6Wn$)rbmcotM|!aajHT>nTgIvaxwIUt1uRIjv*rgY=NT zP+TNV;S`whi=i(8Jq!wP%TiD^^cqN`N-Xa(=(UgvO5Amz<&f$jH9&j>;%JWEY2IG} zX(gmpphrP++`1aH2HIoL8&S9x(mE794)FN_d9w(63esjMTR1u%(}br%&p?`NRelzd-?AbpneGb0Iy>T z$;|f=l!K5DK|KupW9XTt=M&JU(CT3|cm&!?_&x(2g?0>{Mzl@Y^*QJZXvZNnqHWS? zUxH3RJqh^~^snGO4at messages); + void updateMessage(Scanner sc, List messages); + void getMessageName(Message user); + void getAllMessageName(List users); + void deleteMessage(Scanner sc, List messages); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java index af465eb4..18831b25 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -1,15 +1,33 @@ package com.sprint.mission.discodeit.service; -import com.sprint.mission.discodeit.entity.User; - -import java.util.List; import java.util.Scanner; +/// 인터페이스를 쓰고자 하는 이유를 생각해보기 +/// Test Driven Develope 방식으로 생각하기 +/// 이것을 바탕으로 쓰겠다는 청사진을 작성하는 것이다. +/// 설계를 먼저 제대로 하면 인터페이스 수정이 줄어들 것이다. +/// 협업할 때 다른 사람이 이해하기 쉬운 방식으로 구현하기. +/// +/// 자바랑 자바스크립트는 별도로 생각하고 구현하기. (변수명 정확히 하기) +/// 묵직하게 자바 스타일로 구현하는 것이 중요하다. +/// Question: 자바 스타일을 배우기 위해 좋은 가이드라인 / 책이 있을지 + public interface UserService { -// void data(); + // void data(); void createUser(Scanner sc); + void updateUser(Scanner sc); + void getUserName(Scanner sc); + void getAllUserName(); + void deleteUser(Scanner sc); } + +/// 네 맞아요 +/// 협업하는 것을 해본 적이 없어서 이번 과정을 신청해봤고 +/// 그래서 피드백 받는 과정이 참 좋네요 +/// 근데 진짜 자바스크립트 기반으로 생각하게 돼요 +/// 재훈님 은비님 스타일 흡수하는 것이 좋겠다는 피드백을 받음 +/// FIXME : 암호화 알고리즘 간단한 것을 적용해보는 것도 생각해보기 \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 8fdc6e29..40aadec7 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -1,15 +1,29 @@ package com.sprint.mission.discodeit.service.jfc; import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.ChannelService; -import java.util.*; +import java.util.Map; +import java.util.Scanner; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; public class JCFChannelService implements ChannelService { private final Map channelNameMap = new ConcurrentHashMap<>(); + /// 20260115 멘토링 때, 싱글톤 패턴이 적용되지 않았다고 해서 넣어봄 + /// 아직은 왜 싱글톤인지, 왜 필요한지를 잘 모르겠다. + private JCFChannelService() { + } + + private static class Holder { + private static final JCFChannelService INSTANCE = new JCFChannelService(); + } + + public static JCFChannelService getInstance() { + return Holder.INSTANCE; + } + @Override public void createServer(Scanner sc) { System.out.println("사용하려는 서버명이 무엇인가요?"); @@ -34,7 +48,7 @@ public void updateServer(Scanner sc) { Channel result = check(name); - if(result == null) { + if (result == null) { System.out.println("해당 서버가 존재하지 않습니다."); return; } @@ -55,9 +69,9 @@ public void updateServer(Scanner sc) { public void readChannel(Scanner sc) { System.out.println("조회하고자 하는 채널명을 입력해주세요"); String name = sc.nextLine(); - Channel result = check(name); + Channel result = check(name); - if(result == null) { + if (result == null) { System.out.println("해당 채널이 존재하지 않습니다."); return; } @@ -70,22 +84,24 @@ public void readChannel(Scanner sc) { System.out.println("==================="); } + /// 메시지 발송용 @Override public Channel readChannel(String name) { - Channel result = check(name); + Channel result = check(name); - if(result == null) { + if (result == null) { System.out.println("해당 채널이 존재하지 않습니다."); return null; } return result; } + /// UUID to Name @Override public String readChannel(UUID id) { Channel result = check(id); - if(result == null) { + if (result == null) { System.out.println("해당 채널이 존재하지 않습니다."); return null; } @@ -94,7 +110,7 @@ public String readChannel(UUID id) { @Override public void readAllChannel() { - if(channelNameMap.isEmpty()) { + if (channelNameMap.isEmpty()) { System.out.println("채널이 존재하지 않습니다."); return; } @@ -126,15 +142,16 @@ public void deleteChannel(Scanner sc) { n = sc.nextInt(); sc.nextLine(); - if(n == 0) { + if (n == 0) { System.out.println("처음으로 돌아갑니다."); return; - }; + } + ; System.out.print("삭제하려는 채널명을 알려주세요: "); name = sc.nextLine(); - if(channelNameMap.get(name) == null) { + if (channelNameMap.get(name) == null) { System.out.println("해당 채널을 찾을 수 없습니다."); return; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index 613f1e51..ba28234d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -11,13 +11,25 @@ /// 구분자, 전체 메시지 개수 넣어주기 public class JCFMessageService { - private final List msgs = new ArrayList<>(); - private Message message = null; +// private final List msgs = new ArrayList<>(); private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); + /// 20260115 멘토링 때, 싱글톤 패턴이 적용되지 않았다고 해서 넣어봄 + /// 아직은 왜 싱글톤인지, 왜 필요한지를 잘 모르겠다. + private JCFMessageService() { + } + + private static class Holder { + private static final JCFMessageService INSTANCE = new JCFMessageService(); + } + + public static JCFMessageService getInstance() { + return JCFMessageService.Holder.INSTANCE; + } + public void createMessage(Scanner sc, Channel ch, User user) { - if(ch == null) return; + if (ch == null) return; System.out.println("현재 메시지를 보낼 채널은 " + ch.getName() + "입니다."); System.out.println("현재 메시지를 보낼 사람은 " + user.getName() + "입니다."); System.out.println("무어라 보내고 싶으신가요?"); @@ -31,7 +43,7 @@ public void createMessage(Scanner sc, Channel ch, User user) { System.out.println("처음으로 돌아갑니다."); } else if (Objects.equals(n, "1")) { // msgs.add(new Message(ch.getId(), user.getId(), text)); - message = new Message(ch.getId(), user.getId(), text); + Message message = new Message(ch.getId(), user.getId(), text); channelIdMessageMap.computeIfAbsent(ch.getId(), m -> new ArrayList()).add(message); userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList()).add(message); @@ -73,8 +85,10 @@ public void readMsgInChannel(UUID chId, JCFUserService us) { } flag.forEach(m -> { - System.out.println("보낸 사용자: " + us.getUserName(m.getSendUserId())); + System.out.println("보낸 사용자: " + us.getUserByName(m.getSendUserId())); System.out.println("보낸 내용: " + m.getContent()); + System.out.println("보낸일시 : " + m.getCreateAt()); + System.out.println("수정일시 : " + m.getUpdateAt()); System.out.println("==============="); }); } @@ -90,9 +104,11 @@ public void readMsgForUser(User user, JCFChannelService cs, JCFUserService us) { System.out.println("당신이 보낸 메시지는 아래와 같습니다."); for (Message msg : msgList) { System.out.println("ID : " + msg.getId()); - System.out.println("보낸 사용자 : " + us.getUserName(msg.getSendUserId())); + System.out.println("보낸 사용자 : " + us.getUserByName(msg.getSendUserId())); System.out.println("보낸 채널명 : " + cs.readChannel(msg.getSendChannel())); System.out.println("내용 : " + msg.getContent()); + System.out.println("보낸일시 : " + msg.getCreateAt()); + System.out.println("수정일시 : " + msg.getUpdateAt()); System.out.println("==============="); } } @@ -103,7 +119,7 @@ public void deleteMsg(Scanner sc, User user, JCFChannelService cs, JCFUserServic String id = sc.nextLine(); Message msg = /// msgs.stream().filter(e -> e.getId().equals(targetId)).findFirst().orElse(null); - userIdMessageMap.get(user.getId()).stream().filter(e -> e.getId().equals(UUID.fromString(id))).findFirst().orElse(null); + userIdMessageMap.get(user.getId()).stream().filter(e -> e.getId().equals(UUID.fromString(id))).findFirst().orElse(null); if (msg == null) { System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다."); return; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index f296ad28..757b9768 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -3,14 +3,31 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.UserService; -import java.util.*; +import java.util.Map; +import java.util.Scanner; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; public class JCFUserService implements UserService { -// private final List users = new ArrayList<>(); + // private final List users = new ArrayList<>(); private final Map usersMap = new ConcurrentHashMap<>(); private final Map usersName = new ConcurrentHashMap<>(); + /// 20260115 멘토링 때, 싱글톤 패턴이 적용되지 않았다고 해서 넣어봄 + /// 아직은 왜 싱글톤인지, 왜 필요한지를 잘 모르겠다. + /// 메모리 최적화, DB객체를 공유해서 쓰는 방식. + /// 동일요소를 불러와서 재사용하도록 하기 위함. + private JCFUserService() { + } + + private static class Holder { + private static final JCFUserService INSTANCE = new JCFUserService(); + } + + public static JCFUserService getInstance() { + return JCFUserService.Holder.INSTANCE; + } + /// Create @Override public void createUser(Scanner sc) { @@ -22,7 +39,7 @@ public void createUser(Scanner sc) { /// forEach 안에서 return은 forEach문을 종료하는 것으로 끝남... // if(users.stream().anyMatch(e -> Objects.equals(e.getName(), name))) { - if(usersName.containsKey(name)) { + if (usersName.containsKey(name)) { System.out.println("이미 존재하는 사용자명입니다."); return; } @@ -35,7 +52,7 @@ public void createUser(Scanner sc) { usersName.put(name, user.getId()); usersMap.put(user.getId(), user); - System.out.println("사용자 " + name +"님이 추가되었습니다."); + System.out.println("사용자 " + name + "님이 추가되었습니다."); } /// Update @@ -50,7 +67,7 @@ public void updateUser(Scanner sc) { int n = sc.nextInt(); sc.nextLine(); - switch(n){ + switch (n) { case 1: updateUserName(sc); break; @@ -61,16 +78,17 @@ public void updateUser(Scanner sc) { updateUserEmail(sc); break; case 4: - updateUserPhonenumber(sc); + updateUserPhoneNumber(sc); break; default: break; } } - private void updateUserName(Scanner sc){ - User c = check(sc, "변경"); - if(c == null) { + private void updateUserName(Scanner sc) { + User userCheck = check(sc, "변경"); + + if (userCheck == null) { System.out.println("맞는 계정이 없습니다."); return; } @@ -78,12 +96,13 @@ private void updateUserName(Scanner sc){ System.out.println("변경하고자 하는 이름을 입력해주세요"); String rename = sc.nextLine().trim(); - System.out.println(c.getName() + "에서 " + rename +"으로 변경되었습니다."); - c.setName(rename); - usersName.put(rename, c.getId()); - usersName.remove(c.getName()); + System.out.println(userCheck.getName() + "에서 " + rename + "으로 변경되었습니다."); + userCheck.setName(rename); + usersName.put(rename, userCheck.getId()); + usersName.remove(userCheck.getName()); } - private void updateUserPw(Scanner sc){ + + private void updateUserPw(Scanner sc) { User c = check(sc, "변경"); if (c == null) { System.out.println("맞는 계정이 없습니다."); @@ -94,7 +113,8 @@ private void updateUserPw(Scanner sc){ System.out.println("성공"); c.setPw(repw); } - private void updateUserEmail(Scanner sc){ + + private void updateUserEmail(Scanner sc) { User c = check(sc, "변경"); if (c == null) { System.out.println("맞는 계정이 없습니다."); @@ -103,10 +123,11 @@ private void updateUserEmail(Scanner sc){ System.out.println("변경하고자 하는 이메일을 입력해주세요"); String remail = sc.nextLine(); - System.out.println(c.getEmail() + "에서 " + remail +"으로 변경되었습니다."); + System.out.println(c.getEmail() + "에서 " + remail + "으로 변경되었습니다."); c.setEmail(remail); } - private void updateUserPhonenumber(Scanner sc){ + + private void updateUserPhoneNumber(Scanner sc) { User c = check(sc, "변경"); if (c == null) { System.out.println("맞는 계정이 없습니다."); @@ -115,8 +136,8 @@ private void updateUserPhonenumber(Scanner sc){ System.out.println("변경하고자 하는 연락처를 입력해주세요"); String repn = sc.nextLine(); - System.out.println(c.getPhonenumber() + "에서 " + repn +"으로 변경되었습니다."); - c.setPhonenumber(repn); + System.out.println(c.getPhoneNumber() + "에서 " + repn + "으로 변경되었습니다."); + c.setPhoneNumber(repn); } /// Read @@ -130,7 +151,7 @@ public void getUserName(Scanner sc) { System.out.println("조회하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); - if(usersName.get(name) == null) { + if (usersName.get(name) == null) { System.out.println("조회하고자 하는 사용자가 없습니다."); } @@ -140,21 +161,25 @@ public void getUserName(Scanner sc) { System.out.println("사용자ID : " + u.getId()); System.out.println("사용자명 : " + u.getName()); System.out.println("이메일 : " + u.getEmail()); - System.out.println("전화번호 : " + u.getPhonenumber()); + System.out.println("전화번호 : " + u.getPhoneNumber()); System.out.println("생성일 : " + u.getCreateAt()); System.out.println("수정일 : " + u.getUpdateAt()); System.out.println("===================="); } - public User getUserName(String name) { + + public User getUserByName(String name) { // return users.stream().filter(e -> e.getName().equals(name)).findFirst().orElse(null); return usersMap.get(usersName.get(name)); + /// TODO: null일 때 반환하는 로직 추가 } - public String getUserName(UUID id) { + + public String getUserByName(UUID id) { // User user = users.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); // if(user == null) return null; // return user.getName(); return usersMap.get(id).getName(); } + @Override public void getAllUserName() { // users.forEach(u -> { @@ -162,13 +187,13 @@ public void getAllUserName() { // System.out.println("사용자ID : " + u.getId()); // System.out.println("사용자명 : " + u.getName()); // System.out.println("이메일 : " + u.getEmail()); -// System.out.println("전화번호 : " + u.getPhonenumber()); +// System.out.println("전화번호 : " + u.getPhoneNumber()); // System.out.println("생성일 : " + u.getCreateAt()); // System.out.println("수정일 : " + u.getUpdateAt()); // System.out.println("===================="); // }); - if(usersMap.isEmpty()) { + if (usersMap.isEmpty()) { System.out.println("사용자가 없습니다."); return; } @@ -178,7 +203,7 @@ public void getAllUserName() { System.out.println("사용자ID : " + u.getId()); System.out.println("사용자명 : " + u.getName()); System.out.println("이메일 : " + u.getEmail()); - System.out.println("전화번호 : " + u.getPhonenumber()); + System.out.println("전화번호 : " + u.getPhoneNumber()); System.out.println("생성일 : " + u.getCreateAt()); System.out.println("수정일 : " + u.getUpdateAt()); System.out.println("===================="); @@ -195,10 +220,11 @@ public void deleteUser(Scanner sc) { n = sc.nextInt(); sc.nextLine(); - if(n == 0) { + if (n == 0) { System.out.println("처음으로 돌아갑니다."); return; - }; + } + ; User target = check(sc, "삭제"); @@ -213,17 +239,17 @@ public void deleteUser(Scanner sc) { } public User check(Scanner sc, String work) { - System.out.println(work+"하고자 하는 사용자명을 입력해주세요"); + System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); User user = usersMap.get(usersName.get(name)); - if(user == null) return null; + if (user == null) return null; System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - if(!user.getPw().equals(pw)) return null; + if (!user.getPw().equals(pw)) return null; return user; From ed71a7ac23383cb3e29a8f0acfdbcb04d1832431 Mon Sep 17 00:00:00 2001 From: Alpha Date: Fri, 16 Jan 2026 20:50:18 +0900 Subject: [PATCH 11/35] =?UTF-8?q?20260116=20-=20update=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discodeit/app/JavaApplication.java | 223 +----------------- .../app/router/RouteChannelService.java | 39 +++ .../app/router/RouteMessageService.java | 102 ++++++++ .../discodeit/app/router/RoutePrintText.java | 28 +++ .../app/router/RouteUserService.java | 40 ++++ .../mission/discodeit/app/router/Router.java | 44 ++++ .../com/sprint/mission/discodeit/index.html | 13 + .../discodeit/service/ChannelService.java | 6 +- .../service/jfc/JCFChannelService.java | 63 ++--- .../service/jfc/JCFMessageService.java | 19 +- .../discodeit/service/jfc/JCFUserService.java | 219 ++++++++--------- 11 files changed, 422 insertions(+), 374 deletions(-) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/index.html diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java index fcc9dd0a..4b218376 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -1,10 +1,6 @@ package com.sprint.mission.discodeit.app; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.jfc.JCFChannelService; -import com.sprint.mission.discodeit.service.jfc.JCFMessageService; -import com.sprint.mission.discodeit.service.jfc.JCFUserService; +import com.sprint.mission.discodeit.app.router.Router; import java.util.Scanner; @@ -15,13 +11,7 @@ public static void main(String[] args) { int menu; Scanner sc = new Scanner(System.in); - /// 20260115 멘토링 때, 싱글톤 패턴이 적용되지 않았다고 해서 수정함 - /// 아직은 왜 싱글톤인지, 왜 필요한지를 잘 모르겠다. - JCFUserService us = JCFUserService.getInstance(); - JCFChannelService cs = JCFChannelService.getInstance(); - JCFMessageService ms = JCFMessageService.getInstance(); - - /// Test Code + /// FIXME: 여기도 수정할 수 있지 않을까? while (run) { System.out.println("=========="); System.out.println("0. 프로그램 종료하기"); @@ -34,214 +24,7 @@ public static void main(String[] args) { if (menu == 0) return; - JavaApplication.route(sc, menu, us, cs, ms); - } - } - - private static void route(Scanner sc, int n, JCFUserService us, JCFChannelService cs, JCFMessageService ms) { - int m; - switch (n) { - /// TODO: 중복 출력 부분 별도 로직으로 분리하기 - case 1: - System.out.println("사용자 관련 서비스입니다."); - System.out.println("어떤 서비스를 원하시나요?"); - System.out.println("====================="); - System.out.println("1. User Create"); - System.out.println("2. User Update"); - System.out.println("3. User Read"); - System.out.println("4. User Delete"); - m = sc.nextInt(); - sc.nextLine(); - userService(sc, m, us); - break; - case 2: - System.out.println("채널 관련 서비스입니다."); - System.out.println("어떤 서비스를 원하시나요?"); - System.out.println("====================="); - System.out.println("1. Channel Create"); - System.out.println("2. Channel Update"); - System.out.println("3. Channel Read"); - System.out.println("4. Channel Delete"); - m = sc.nextInt(); - sc.nextLine(); - channelService(sc, m, cs); - break; - case 3: - System.out.println("메시지 관련 서비스입니다."); - System.out.println("어떤 서비스를 원하시나요?"); - System.out.println("====================="); - System.out.println("1. Message Create"); - System.out.println("2. Message Update"); - System.out.println("3. Message Read"); - System.out.println("4. Message Delete"); - m = sc.nextInt(); - sc.nextLine(); - messageService(sc, m, us, cs, ms); - break; - default: - return; - } - } - - private static void userService(Scanner sc, int n, JCFUserService us) { - int m; - switch (n) { - case 1: - /// create - us.createUser(sc); - break; - case 2: - /// update - us.updateUser(sc); - break; - case 3: - /// read - System.out.println("전체 사용자 정보를 가져올까요?"); - System.out.println("1 : 특정 사용자만 가져옵니다"); - System.out.println("2 : 전체 사용자를 가져옵니다"); - m = sc.nextInt(); - sc.nextLine(); - - if (m == 1) us.getUserName(sc); - else if (m == 2) us.getAllUserName(); - break; - case 4: - /// delete - us.deleteUser(sc); - break; - default: - return; + Router.route(sc, menu); } } - - private static void channelService(Scanner sc, int n, JCFChannelService cs) { - int m; - switch (n) { - case 1: - /// create - cs.createServer(sc); - break; - case 2: - /// update - cs.updateServer(sc); - break; - case 3: - /// read - System.out.println("전체 사용자 정보를 가져올까요?"); - System.out.println("1 : 특정 채널만 가져옵니다"); - System.out.println("2 : 전체 채널을 가져옵니다"); - m = sc.nextInt(); - sc.nextLine(); - - if (m == 1) cs.readChannel(sc); - else if (m == 2) cs.readAllChannel(); - break; - case 4: - /// delete - cs.deleteChannel(sc); - break; - default: - return; - } - } - - private static void messageService(Scanner sc, int n, JCFUserService us, JCFChannelService cs, JCFMessageService ms) { - int m; - String uName; - User nowUser; - String cName; - Channel nowChannel; - switch (n) { - case 1: - /// create - System.out.println("누가 보내는 메시지인가요?"); - uName = sc.nextLine(); - try { - nowUser = us.getUserByName(uName); - } catch (Exception e) { - System.out.println("존재하지 않는 사용자입니다."); - return; - } - - System.out.println("어디로 보내는 메시지인가요?"); - cName = sc.nextLine(); - try { - nowChannel = cs.readChannel(cName); - } catch (Exception e) { - System.out.println("존재하지 않는 채널입니다."); - return; - } - - ms.createMessage(sc, nowChannel, nowUser); - break; - case 2: - /// update - System.out.println("누가 보낸 메시지인가요?"); - uName = sc.nextLine(); - nowUser = us.getUserByName(uName); - if (nowUser == null) { - System.out.println("존재하지 않는 사용자입니다."); - return; - } - ms.updateMessage(sc, nowUser, cs, us); - break; - case 3: - /// read - System.out.println("현재는 내가 보낸 메시지, 특정 채널 메시지를 조회하는 기능만 있습니다."); - System.out.println("1. 내가 보낸 메시지 확인하기"); - System.out.println("2. 채널에 있는 메시지 확인하기"); - m = sc.nextInt(); - sc.nextLine(); - - if (m == 1) { - System.out.println("누가 보낸 메시지인가요?"); - uName = sc.nextLine(); - nowUser = us.getUserByName(uName); /// TODO: 직관적 이름 선정하기 - if (nowUser == null) { - System.out.println("존재하지 않는 사용자입니다."); - return; - } - ms.readMsgForUser(nowUser, cs, us); - } else if (m == 2) { - System.out.println("어디로 보내는 메시지인가요?"); - cName = sc.nextLine(); - nowChannel = cs.readChannel(cName); - if (nowChannel == null) { - System.out.println("존재하지 않는 채널입니다."); - return; - } - ms.readMsgInChannel(nowChannel.getId(), us); - } - break; - case 4: - /// delete - System.out.println("현재는 내가 보낸 메시지를 삭제하는 기능만 지원하고 있습니다."); - System.out.println("사용자명은 어떻게 되나요?"); - uName = sc.nextLine(); - nowUser = us.getUserByName(uName); - if (nowUser == null) { - System.out.println("존재하지 않는 사용자입니다."); - return; - } - ms.deleteMsg(sc, nowUser, cs, us); - break; - default: - return; - } - } - -/// 뭔가 하려고 넣었는데 왜 넣었는지 기억이 안 남.. 지금은 미사용. -// public static void chIdToName(JCFChannelService cs, UUID id) { -// String nowChannel = cs.readChannel(id); -// if (nowChannel == null) { -// System.out.println("존재하지 않는 채널입니다."); -// } -// } -// -// public static void uIdToName(JCFUserService us, UUID id) { -// User nowUser = us.getUserId(id); -// if (nowUser == null) { -// System.out.println("존재하지 않는 사용자입니다."); -// } -// } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java new file mode 100644 index 00000000..722a0d8a --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java @@ -0,0 +1,39 @@ +package com.sprint.mission.discodeit.app.router; + +import com.sprint.mission.discodeit.service.jfc.JCFChannelService; + +import java.util.Scanner; + +public class RouteChannelService { + static void channelService(Scanner sc, int routeCRUD) { + JCFChannelService channelService = JCFChannelService.getInstance(); + int menu; + switch (routeCRUD) { + case 1: + /// create + channelService.createServer(sc); + break; + case 2: + /// update + channelService.updateServer(sc); + break; + case 3: + /// read + System.out.println("전체 사용자 정보를 가져올까요?"); + System.out.println("1 : 특정 채널만 가져옵니다"); + System.out.println("2 : 전체 채널을 가져옵니다"); + menu = sc.nextInt(); + sc.nextLine(); + + if (menu == 1) channelService.isChannelName(sc); + else if (menu == 2) channelService.readAllChannel(); + break; + case 4: + /// delete + channelService.deleteChannel(sc); + break; + default: + return; + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java new file mode 100644 index 00000000..23c33ad3 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java @@ -0,0 +1,102 @@ +package com.sprint.mission.discodeit.app.router; + +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.jfc.JCFChannelService; +import com.sprint.mission.discodeit.service.jfc.JCFMessageService; +import com.sprint.mission.discodeit.service.jfc.JCFUserService; + +import java.util.Scanner; + +public class RouteMessageService { + static void messageService(Scanner sc, int routeCURD) { + /// Singleton Instance + JCFUserService userService = JCFUserService.getInstance(); + JCFChannelService channelService = JCFChannelService.getInstance(); + JCFMessageService messageService = JCFMessageService.getInstance(); + + int m; + String senderUserName; + User nowUser; + String sendeeChannelName; + Channel nowChannel; + + switch (routeCURD) { + case 1: + /// create + System.out.println("누가 보내는 메시지인가요?"); + senderUserName = sc.nextLine(); + try { + nowUser = userService.getUserByName(senderUserName); + } catch (Exception e) { + System.out.println("존재하지 않는 사용자입니다."); + return; + } + + System.out.println("어디로 보내는 메시지인가요?"); + sendeeChannelName = sc.nextLine(); + try { + nowChannel = channelService.isChannelName(sendeeChannelName); + } catch (Exception e) { + System.out.println("존재하지 않는 채널입니다."); + return; + } + + messageService.createMessage(sc, nowChannel, nowUser); + break; + case 2: + /// update + System.out.println("누가 보낸 메시지인가요?"); + senderUserName = sc.nextLine(); + nowUser = userService.getUserByName(senderUserName); + if (nowUser == null) { + System.out.println("존재하지 않는 사용자입니다."); + return; + } + messageService.updateMessage(sc, nowUser); + break; + case 3: + /// read + System.out.println("현재는 내가 보낸 메시지, 특정 채널 메시지를 조회하는 기능만 있습니다."); + System.out.println("1. 내가 보낸 메시지 확인하기"); + System.out.println("2. 채널에 있는 메시지 확인하기"); + m = sc.nextInt(); + sc.nextLine(); + + if (m == 1) { + System.out.println("누가 보낸 메시지인가요?"); + senderUserName = sc.nextLine(); + nowUser = userService.getUserByName(senderUserName); + if (nowUser == null) { + System.out.println("존재하지 않는 사용자입니다."); + return; + } + messageService.readMsgForUser(nowUser); + } else if (m == 2) { + System.out.println("어디로 보내는 메시지인가요?"); + sendeeChannelName = sc.nextLine(); + nowChannel = channelService.isChannelName(sendeeChannelName); + if (nowChannel == null) { + System.out.println("존재하지 않는 채널입니다."); + return; + } + messageService.readMsgInChannel(nowChannel.getId(), userService); + } + break; + case 4: + /// delete + System.out.println("현재는 내가 보낸 메시지를 삭제하는 기능만 지원하고 있습니다."); + System.out.println("사용자명은 어떻게 되나요?"); + senderUserName = sc.nextLine(); + nowUser = userService.getUserByName(senderUserName); + if (nowUser == null) { + System.out.println("존재하지 않는 사용자입니다."); + return; + } + messageService.deleteMsg(sc, nowUser); + break; + default: + return; + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java new file mode 100644 index 00000000..77ace6ae --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java @@ -0,0 +1,28 @@ +package com.sprint.mission.discodeit.app.router; + +import java.util.ArrayList; +import java.util.List; + +public class RoutePrintText { + static void printText(String text) { + List retouchText = new ArrayList<>(); + switch(text.toLowerCase()) { + case "user": + retouchText.add("User"); + retouchText.add("사용자"); + case "channel": + retouchText.add("Channel"); + retouchText.add("채널"); + case "message": + retouchText.add("Message"); + retouchText.add("메세지"); + } + System.out.println(retouchText.get(0) + " 관련 서비스입니다."); + System.out.println("어떤 서비스를 원하시나요?"); + System.out.println("====================="); + System.out.println("1. " + retouchText.get(1) + " Create"); + System.out.println("2. " + retouchText.get(1) + " Update"); + System.out.println("3. " + retouchText.get(1) + " Read"); + System.out.println("4. " + retouchText.get(1) + " Delete"); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java new file mode 100644 index 00000000..78a138d7 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java @@ -0,0 +1,40 @@ +package com.sprint.mission.discodeit.app.router; + +import com.sprint.mission.discodeit.service.jfc.JCFUserService; + +import java.util.Scanner; + +public class RouteUserService { + static void userService(Scanner sc, int routeCRUD) { + JCFUserService userService = JCFUserService.getInstance(); + + int menu; + switch (routeCRUD) { + case 1: + /// create + userService.createUser(sc); + break; + case 2: + /// update + userService.updateUser(sc); + break; + case 3: + /// read + System.out.println("전체 사용자 정보를 가져올까요?"); + System.out.println("1 : 특정 사용자만 가져옵니다"); + System.out.println("2 : 전체 사용자를 가져옵니다"); + menu = sc.nextInt(); + sc.nextLine(); + + if (menu == 1) userService.getUserName(sc); + else if (menu == 2) userService.getAllUserName(); + break; + case 4: + /// delete + userService.deleteUser(sc); + break; + default: + return; + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java new file mode 100644 index 00000000..72471305 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java @@ -0,0 +1,44 @@ +package com.sprint.mission.discodeit.app.router; + +import java.util.Scanner; + +public class Router { + public static void route(Scanner sc, int n) { + int m; + switch (n) { + /// TODO: 중복 출력 부분 별도 로직으로 분리하기 + case 1: + + m = sc.nextInt(); + sc.nextLine(); + RouteUserService.userService(sc, m); + break; + case 2: + System.out.println("채널 관련 서비스입니다."); + System.out.println("어떤 서비스를 원하시나요?"); + System.out.println("====================="); + System.out.println("1. Channel Create"); + System.out.println("2. Channel Update"); + System.out.println("3. Channel Read"); + System.out.println("4. Channel Delete"); + m = sc.nextInt(); + sc.nextLine(); + RouteChannelService.channelService(sc, m); + break; + case 3: + System.out.println("메시지 관련 서비스입니다."); + System.out.println("어떤 서비스를 원하시나요?"); + System.out.println("====================="); + System.out.println("1. Message Create"); + System.out.println("2. Message Update"); + System.out.println("3. Message Read"); + System.out.println("4. Message Delete"); + m = sc.nextInt(); + sc.nextLine(); + RouteMessageService.messageService(sc, m); + break; + default: + return; + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/index.html b/discordit/src/main/java/com/sprint/mission/discodeit/index.html new file mode 100644 index 00000000..59036651 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/index.html @@ -0,0 +1,13 @@ + + + + + 질문 리스트 + + +

멘토님, 아래 내용도 리뷰해주실 수 있을까 합니다.

+
    +
  • +
+ + \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 36c2c935..07958710 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -10,11 +10,11 @@ public interface ChannelService { void updateServer(Scanner sc); - void readChannel(Scanner sc); + void isChannelName(Scanner sc); - Channel readChannel(String name); + Channel isChannelName(String name); - String readChannel(UUID id); + String isChannelName(UUID id); void readAllChannel(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 40aadec7..1248b7c0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -3,16 +3,17 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.service.ChannelService; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Map; import java.util.Scanner; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; public class JCFChannelService implements ChannelService { + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final Map channelNameMap = new ConcurrentHashMap<>(); - /// 20260115 멘토링 때, 싱글톤 패턴이 적용되지 않았다고 해서 넣어봄 - /// 아직은 왜 싱글톤인지, 왜 필요한지를 잘 모르겠다. private JCFChannelService() { } @@ -34,8 +35,6 @@ public void createServer(Scanner sc) { return; } -// channels.add(new Channel(name)); - // private final List channels = new ArrayList<>(); Channel tmp = new Channel(name); channelNameMap.put(name, tmp); System.out.println("잘 들어갔어요!"); @@ -66,7 +65,7 @@ public void updateServer(Scanner sc) { } @Override - public void readChannel(Scanner sc) { + public void isChannelName(Scanner sc) { System.out.println("조회하고자 하는 채널명을 입력해주세요"); String name = sc.nextLine(); Channel result = check(name); @@ -77,16 +76,17 @@ public void readChannel(Scanner sc) { } System.out.println("해당 채널에 대한 정보를 알려드립니다."); + System.out.println("==================="); System.out.println("채널명 : " + result.getName()); System.out.println("채널ID : " + result.getId()); - System.out.println("채널생성일 : " + result.getCreateAt()); - System.out.println("채널수정일 : " + result.getUpdateAt()); + System.out.println("채널생성일 : " + sdf.format(new Date(result.getCreateAt()))); + System.out.println("채널수정일 : " + sdf.format(new Date(result.getUpdateAt()))); System.out.println("==================="); } /// 메시지 발송용 @Override - public Channel readChannel(String name) { + public Channel isChannelName(String name) { Channel result = check(name); if (result == null) { @@ -98,7 +98,7 @@ public Channel readChannel(String name) { /// UUID to Name @Override - public String readChannel(UUID id) { + public String isChannelName(UUID id) { Channel result = check(id); if (result == null) { @@ -115,26 +115,20 @@ public void readAllChannel() { return; } - channelNameMap.values().forEach(ch -> { - System.out.println("채널명 : " + ch.getName()); - System.out.println("채널ID : " + ch.getId()); - System.out.println("채널수정일 : " + ch.getUpdateAt()); - System.out.println("채널생성일 : " + ch.getCreateAt()); + channelNameMap.values().forEach(channel -> { + System.out.println("채널명 : " + channel.getName()); + System.out.println("채널ID : " + channel.getId()); + System.out.println("채널수정일 : " + sdf.format(new Date(channel.getUpdateAt()))); + System.out.println("채널생성일 : " + sdf.format(new Date(channel.getCreateAt()))); System.out.println("==================="); }); -// for (Channel ch : channels) { -// System.out.println("채널명 : " + ch.getName()); -// System.out.println("채널ID : " + ch.getId()); -// System.out.println("채널수정일 : " + ch.getUpdateAt()); -// System.out.println("채널생성일 : " + ch.getCreateAt()); -// System.out.println("==================="); -// } + System.out.println("현재 총 채널수 : " + channelNameMap.size()); } @Override public void deleteChannel(Scanner sc) { - String name; + String inputChannelName; int n; System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); @@ -146,36 +140,31 @@ public void deleteChannel(Scanner sc) { System.out.println("처음으로 돌아갑니다."); return; } - ; System.out.print("삭제하려는 채널명을 알려주세요: "); - name = sc.nextLine(); + inputChannelName = sc.nextLine(); - if (channelNameMap.get(name) == null) { + if (channelNameMap.get(inputChannelName) == null) { System.out.println("해당 채널을 찾을 수 없습니다."); return; } - channelNameMap.remove(name); + channelNameMap.remove(inputChannelName); System.out.println("해당 채널이 삭제되었습니다."); } @Override public Channel check(String name) { -// return channels.stream().filter(u -> u.getName().equals(name)).findFirst().orElse(null); - return channelNameMap.get(name); + try { + return channelNameMap.get(name); + } catch (Exception e) { + return null; + } } + /// 채널ID로도 관리하는 형태를 만드는게 좋을까? @Override public Channel check(UUID id) { -// return channels.stream() -// .filter(u -> u.getId().equals(id)) -// .findFirst() -// .orElse(null); - return channelNameMap.values().stream().filter(u -> u.getId().equals(id)) - .findFirst() - .orElse(null); - - /// 채널ID로도 관리하는 형태를 만드는게 좋을까? + return channelNameMap.values().stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index ba28234d..5bde2004 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -55,8 +55,8 @@ public void createMessage(Scanner sc, Channel ch, User user) { } /// update logic - public void updateMessage(Scanner sc, User user, JCFChannelService cs, JCFUserService us) { - readMsgForUser(user, cs, us); + public void updateMessage(Scanner sc, User user) { + readMsgForUser(user); System.out.println("어떤 것을 수정하고 싶나요?"); String id = sc.nextLine(); @@ -93,9 +93,10 @@ public void readMsgInChannel(UUID chId, JCFUserService us) { }); } - public void readMsgForUser(User user, JCFChannelService cs, JCFUserService us) { - List msgList = /// msgs.stream().filter(e -> e.getSendUserId().equals(user.getId())).toList(); - userIdMessageMap.get(user.getId()); + public void readMsgForUser(User user) { + List msgList = userIdMessageMap.get(user.getId()); + JCFUserService userService = JCFUserService.getInstance(); + JCFChannelService channelService = JCFChannelService.getInstance(); if (msgList.isEmpty()) { System.out.println("아쉽지만 아무것도 없네요!"); return; @@ -104,8 +105,8 @@ public void readMsgForUser(User user, JCFChannelService cs, JCFUserService us) { System.out.println("당신이 보낸 메시지는 아래와 같습니다."); for (Message msg : msgList) { System.out.println("ID : " + msg.getId()); - System.out.println("보낸 사용자 : " + us.getUserByName(msg.getSendUserId())); - System.out.println("보낸 채널명 : " + cs.readChannel(msg.getSendChannel())); + System.out.println("보낸 사용자 : " + userService.getUserByName(msg.getSendUserId())); + System.out.println("보낸 채널명 : " + channelService.isChannelName(msg.getSendChannel())); System.out.println("내용 : " + msg.getContent()); System.out.println("보낸일시 : " + msg.getCreateAt()); System.out.println("수정일시 : " + msg.getUpdateAt()); @@ -113,8 +114,8 @@ public void readMsgForUser(User user, JCFChannelService cs, JCFUserService us) { } } - public void deleteMsg(Scanner sc, User user, JCFChannelService cs, JCFUserService us) { - readMsgForUser(user, cs, us); + public void deleteMsg(Scanner sc, User user) { + readMsgForUser(user); System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); String id = sc.nextLine(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index 757b9768..741789f8 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -3,20 +3,12 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.UserService; -import java.util.Map; -import java.util.Scanner; -import java.util.UUID; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class JCFUserService implements UserService { - // private final List users = new ArrayList<>(); private final Map usersMap = new ConcurrentHashMap<>(); private final Map usersName = new ConcurrentHashMap<>(); - - /// 20260115 멘토링 때, 싱글톤 패턴이 적용되지 않았다고 해서 넣어봄 - /// 아직은 왜 싱글톤인지, 왜 필요한지를 잘 모르겠다. - /// 메모리 최적화, DB객체를 공유해서 쓰는 방식. - /// 동일요소를 불러와서 재사용하도록 하기 위함. private JCFUserService() { } @@ -25,7 +17,7 @@ private static class Holder { } public static JCFUserService getInstance() { - return JCFUserService.Holder.INSTANCE; + return Holder.INSTANCE; } /// Create @@ -37,18 +29,14 @@ public void createUser(Scanner sc) { System.out.print("먼저, 사용할 이름을 작성해주세요 : "); name = sc.nextLine(); - /// forEach 안에서 return은 forEach문을 종료하는 것으로 끝남... -// if(users.stream().anyMatch(e -> Objects.equals(e.getName(), name))) { if (usersName.containsKey(name)) { System.out.println("이미 존재하는 사용자명입니다."); return; } - System.out.print("사용할 비밀번호를 입력해주세요 : "); pw = sc.nextLine(); User user = new User(name, pw); -// users.add(user); usersName.put(name, user.getId()); usersMap.put(user.getId(), user); @@ -58,91 +46,127 @@ public void createUser(Scanner sc) { /// Update @Override public void updateUser(Scanner sc) { + int isContinue = 0; System.out.println("===================="); - System.out.println("1. 이름 변경"); - System.out.println("2. 비밀번호 변경"); - System.out.println("3. 이메일 변경"); - System.out.println("4. 전화번호 변경"); - System.out.println("===================="); - int n = sc.nextInt(); - sc.nextLine(); + System.out.println("사용자 변경 메뉴입니다."); + User checkUpdateUser = check(sc, "변경"); + if(checkUpdateUser == null) { + System.out.println("일치하는 사용자가 없습니다."); + return; + } - switch (n) { + System.out.println("현재 사용자 변경은 다음과 같은 순서로 입렵받게 됩니다."); + System.out.println("1. 사용자 이름 변경"); + System.out.println("2. 사용자 비밀번호 변경"); + System.out.println("3. 사용자 이메일 변경"); + System.out.println("4. 사용자 전화번호 변경"); + System.out.println("진행하시려면 1, 아니라면 아무 키나 입력해주세요."); + String input = sc.nextLine(); + try{ + isContinue = Integer.parseInt(input.trim()); + } catch (NumberFormatException e) { + System.out.println("잘못 입력하셨습니다."); + updateUser(sc); + } + + switch(isContinue) { case 1: - updateUserName(sc); - break; - case 2: - updateUserPw(sc); - break; - case 3: - updateUserEmail(sc); - break; - case 4: - updateUserPhoneNumber(sc); - break; + updateUserInfo(sc, checkUpdateUser); default: - break; + System.out.println("이전 메뉴로 돌아갑니다."); + return; } } - private void updateUserName(Scanner sc) { - User userCheck = check(sc, "변경"); - - if (userCheck == null) { - System.out.println("맞는 계정이 없습니다."); - return; + /// 사실 분리할 필요가 없긴 한데, 너무 길어져서 분리함 + /// FIXME: 더 좋은 리팩터링 방법이 필요 + private void updateUserInfo(Scanner sc, User checkUpdateUser) { + String reName; + String rePassword; + String reMail; + String rePhoneNumber; + + System.out.println("변경하지 않으시려면 엔터를 눌러주시기 바랍니다."); + System.out.println("현재 사용자명 : " + checkUpdateUser.getName()); + System.out.print("변경하실 사용자명 : "); + while(true) { + reName = sc.nextLine().trim(); + /// regex rule + /// \\S+ => 공백이 없을 때 true + /// !rePassword.matches("\\S+")기에 공백이 포함되어 있으면 true를 반환 + if (!reName.matches("\\S+")) { + System.out.println("사용자명은 공백 없이 입력해주세요."); + continue; + } + if (reName.isEmpty()) reName = null; + break; } - - System.out.println("변경하고자 하는 이름을 입력해주세요"); - String rename = sc.nextLine().trim(); - - System.out.println(userCheck.getName() + "에서 " + rename + "으로 변경되었습니다."); - userCheck.setName(rename); - usersName.put(rename, userCheck.getId()); - usersName.remove(userCheck.getName()); - } - - private void updateUserPw(Scanner sc) { - User c = check(sc, "변경"); - if (c == null) { - System.out.println("맞는 계정이 없습니다."); - return; + System.out.println(); + + System.out.print("변경하실 비밀번호 : "); + while(true) { + rePassword = sc.nextLine().trim(); + if (!rePassword.matches("\\S+")) { + System.out.println("비밀번호에 공백을 포함할 수 없습니다."); + continue; + } + if (rePassword.isEmpty()) rePassword = null; + break; } - System.out.println("변경하고자 하는 비밀번호를 입력해주세요"); - String repw = sc.nextLine(); - System.out.println("성공"); - c.setPw(repw); - } - - private void updateUserEmail(Scanner sc) { - User c = check(sc, "변경"); - if (c == null) { - System.out.println("맞는 계정이 없습니다."); - return; + System.out.println(); + + System.out.println("현재 이메일 : " + checkUpdateUser.getEmail()); + System.out.print("변경하실 이메일 : "); + while(true) { + reMail = sc.nextLine().trim(); + /// regex rule + /// 앞뒤로 공백이 없어야 하며 중간에 @와 .이 있어야 한다는 형식 + if (reMail.isEmpty() || !reMail.matches("\\S+@\\S+\\.\\S+")) { + System.out.println("이메일 형식이 맞지 않습니다."); + continue; + } + break; + } + System.out.println(); + + System.out.println("현재 전화번호 : " + checkUpdateUser.getPhoneNumber()); + System.out.print("변경하실 전화번호 : "); + + while(true) { + rePhoneNumber = sc.nextLine().trim(); + if (!rePhoneNumber.matches("\\S+") && (rePhoneNumber.length() == 10 || rePhoneNumber.length() == 11)) { + System.out.println("잘못된 입력 형식입니다."); + continue; + } + if(rePhoneNumber.isEmpty()) rePhoneNumber = null; + break; } - System.out.println("변경하고자 하는 이메일을 입력해주세요"); - String remail = sc.nextLine(); - System.out.println(c.getEmail() + "에서 " + remail + "으로 변경되었습니다."); - c.setEmail(remail); + System.out.println("이대로 진행하시겠습니까?"); + System.out.println("맞으면 y, 취소하려면 n"); + System.out.println("다시 입력하시려면 re를 입력해주세요."); + + while(true) { + String finalCheckIsContinue = sc.nextLine(); + switch (finalCheckIsContinue.toLowerCase()){ + case "y": + checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); + return; + case "n": + return; + case "re": + updateUserInfo(sc, checkUpdateUser); + return; + default: + continue; + } + } } - private void updateUserPhoneNumber(Scanner sc) { - User c = check(sc, "변경"); - if (c == null) { - System.out.println("맞는 계정이 없습니다."); - return; - } - System.out.println("변경하고자 하는 연락처를 입력해주세요"); - String repn = sc.nextLine(); - System.out.println(c.getPhoneNumber() + "에서 " + repn + "으로 변경되었습니다."); - c.setPhoneNumber(repn); - } /// Read public User getUserId(UUID id) { -// return users.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); return usersMap.get(id); } @@ -168,37 +192,26 @@ public void getUserName(Scanner sc) { } public User getUserByName(String name) { -// return users.stream().filter(e -> e.getName().equals(name)).findFirst().orElse(null); - return usersMap.get(usersName.get(name)); - /// TODO: null일 때 반환하는 로직 추가 + try { + return usersMap.get(usersName.get(name)); + } catch (Exception e) { + return null; + } + /// null일 때 반환하는 로직 추가 } public String getUserByName(UUID id) { -// User user = users.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); -// if(user == null) return null; -// return user.getName(); return usersMap.get(id).getName(); } @Override public void getAllUserName() { -// users.forEach(u -> { -// System.out.println("===================="); -// System.out.println("사용자ID : " + u.getId()); -// System.out.println("사용자명 : " + u.getName()); -// System.out.println("이메일 : " + u.getEmail()); -// System.out.println("전화번호 : " + u.getPhoneNumber()); -// System.out.println("생성일 : " + u.getCreateAt()); -// System.out.println("수정일 : " + u.getUpdateAt()); -// System.out.println("===================="); -// }); - if (usersMap.isEmpty()) { System.out.println("사용자가 없습니다."); return; } - usersMap.values().stream().sorted((a, b) -> a.getName().compareTo(b.getName())).forEach(u -> { + usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(u -> { System.out.println("===================="); System.out.println("사용자ID : " + u.getId()); System.out.println("사용자명 : " + u.getName()); @@ -224,7 +237,6 @@ public void deleteUser(Scanner sc) { System.out.println("처음으로 돌아갑니다."); return; } - ; User target = check(sc, "삭제"); @@ -232,13 +244,12 @@ public void deleteUser(Scanner sc) { System.out.println("일치하는 계정을 찾을 수 없습니다."); return; } -// users.remove(target); usersMap.remove(target.getId()); usersName.remove(target.getName()); System.out.println("계정이 삭제되었습니다."); } - public User check(Scanner sc, String work) { + private User check(Scanner sc, String work) { System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); @@ -252,7 +263,5 @@ public User check(Scanner sc, String work) { if (!user.getPw().equals(pw)) return null; return user; - -// return users.stream().filter(u -> u.getName().equals(name) && u.getPw().equals(pw)).findFirst().orElse(null); } } From fd445daa5dd55cc2b239c97543afdf4061dd928b Mon Sep 17 00:00:00 2001 From: alpha_lens Date: Fri, 16 Jan 2026 23:04:37 +0900 Subject: [PATCH 12/35] =?UTF-8?q?=EC=88=98=EC=A0=95=EC=A4=91=20-=20?= =?UTF-8?q?=EB=9D=BC=EC=9A=B0=ED=8C=85=20=EB=B6=80=EB=B6=84=20=EC=86=90?= =?UTF-8?q?=EB=B4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discodeit/app/JavaApplication.java | 5 +- .../app/router/RouteChannelService.java | 15 +++-- .../discodeit/app/router/RoutePrintText.java | 10 +++ .../app/router/RouteUserService.java | 15 +++-- .../mission/discodeit/app/router/Router.java | 61 +++++++++++-------- .../discodeit/service/jfc/JCFUserService.java | 14 ++--- 6 files changed, 73 insertions(+), 47 deletions(-) diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java index 4b218376..60eea60e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -7,18 +7,17 @@ public class JavaApplication { public static void main(String[] args) { System.out.println("프로그램을 실행합니다."); - boolean run = true; int menu; Scanner sc = new Scanner(System.in); - /// FIXME: 여기도 수정할 수 있지 않을까? - while (run) { + while (true) { System.out.println("=========="); System.out.println("0. 프로그램 종료하기"); System.out.println("1. 사용자 관련 서비스"); System.out.println("2. 채널 관련 서비스"); System.out.println("3. 메시지 관련 서비스"); System.out.println("=========="); + menu = sc.nextInt(); sc.nextLine(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java index 722a0d8a..110a1cb4 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java @@ -8,30 +8,37 @@ public class RouteChannelService { static void channelService(Scanner sc, int routeCRUD) { JCFChannelService channelService = JCFChannelService.getInstance(); int menu; + switch (routeCRUD) { + + /// create case 1: - /// create channelService.createServer(sc); break; + + /// update case 2: - /// update channelService.updateServer(sc); break; + + /// read case 3: - /// read System.out.println("전체 사용자 정보를 가져올까요?"); System.out.println("1 : 특정 채널만 가져옵니다"); System.out.println("2 : 전체 채널을 가져옵니다"); + menu = sc.nextInt(); sc.nextLine(); if (menu == 1) channelService.isChannelName(sc); else if (menu == 2) channelService.readAllChannel(); break; + + /// delete case 4: - /// delete channelService.deleteChannel(sc); break; + default: return; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java index 77ace6ae..3b49451b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java @@ -6,17 +6,27 @@ public class RoutePrintText { static void printText(String text) { List retouchText = new ArrayList<>(); + switch(text.toLowerCase()) { case "user": retouchText.add("User"); retouchText.add("사용자"); + break; + case "channel": retouchText.add("Channel"); retouchText.add("채널"); + break; + case "message": retouchText.add("Message"); retouchText.add("메세지"); + break; + + default: + return; } + System.out.println(retouchText.get(0) + " 관련 서비스입니다."); System.out.println("어떤 서비스를 원하시나요?"); System.out.println("====================="); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java index 78a138d7..0719e76f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java @@ -7,32 +7,37 @@ public class RouteUserService { static void userService(Scanner sc, int routeCRUD) { JCFUserService userService = JCFUserService.getInstance(); - int menu; + switch (routeCRUD) { + /// create case 1: - /// create userService.createUser(sc); break; + + /// update case 2: - /// update userService.updateUser(sc); break; + + /// read case 3: - /// read System.out.println("전체 사용자 정보를 가져올까요?"); System.out.println("1 : 특정 사용자만 가져옵니다"); System.out.println("2 : 전체 사용자를 가져옵니다"); + menu = sc.nextInt(); sc.nextLine(); if (menu == 1) userService.getUserName(sc); else if (menu == 2) userService.getAllUserName(); break; + + /// delete case 4: - /// delete userService.deleteUser(sc); break; + default: return; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java index 72471305..0da8086e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java @@ -3,40 +3,47 @@ import java.util.Scanner; public class Router { - public static void route(Scanner sc, int n) { - int m; - switch (n) { - /// TODO: 중복 출력 부분 별도 로직으로 분리하기 + private static int inputChecker(Scanner sc, int routeNumber) { + try{ + return Integer.parseInt(sc.nextLine().trim()); + } catch (NumberFormatException e) { + System.out.println("잘못된 입력값입니다."); + route(sc, routeNumber); + } + return -1; + } + + public static void route(Scanner sc, int menu) { + int subMenu = 0; + + switch (menu) { case 1: + RoutePrintText.printText("user"); + subMenu = inputChecker(sc, menu); + + if(subMenu == -1) return; - m = sc.nextInt(); - sc.nextLine(); - RouteUserService.userService(sc, m); + RouteUserService.userService(sc, subMenu); break; + case 2: - System.out.println("채널 관련 서비스입니다."); - System.out.println("어떤 서비스를 원하시나요?"); - System.out.println("====================="); - System.out.println("1. Channel Create"); - System.out.println("2. Channel Update"); - System.out.println("3. Channel Read"); - System.out.println("4. Channel Delete"); - m = sc.nextInt(); - sc.nextLine(); - RouteChannelService.channelService(sc, m); + RoutePrintText.printText("channel"); + subMenu = inputChecker(sc, menu); + + if(subMenu == -1) return; + + RouteChannelService.channelService(sc, subMenu); break; + case 3: - System.out.println("메시지 관련 서비스입니다."); - System.out.println("어떤 서비스를 원하시나요?"); - System.out.println("====================="); - System.out.println("1. Message Create"); - System.out.println("2. Message Update"); - System.out.println("3. Message Read"); - System.out.println("4. Message Delete"); - m = sc.nextInt(); - sc.nextLine(); - RouteMessageService.messageService(sc, m); + RoutePrintText.printText("message"); + subMenu = inputChecker(sc, menu); + + if(subMenu == -1) return; + + RouteMessageService.messageService(sc, subMenu); break; + default: return; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index 741789f8..4d03c72f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -27,7 +27,7 @@ public void createUser(Scanner sc) { String pw; System.out.println("회원가입에 오신 것을 환영합니다."); System.out.print("먼저, 사용할 이름을 작성해주세요 : "); - name = sc.nextLine(); + name = sc.nextLine().trim(); if (usersName.containsKey(name)) { System.out.println("이미 존재하는 사용자명입니다."); @@ -61,7 +61,7 @@ public void updateUser(Scanner sc) { System.out.println("3. 사용자 이메일 변경"); System.out.println("4. 사용자 전화번호 변경"); System.out.println("진행하시려면 1, 아니라면 아무 키나 입력해주세요."); - String input = sc.nextLine(); + String input = sc.nextLine().trim(); try{ isContinue = Integer.parseInt(input.trim()); } catch (NumberFormatException e) { @@ -69,13 +69,11 @@ public void updateUser(Scanner sc) { updateUser(sc); } - switch(isContinue) { - case 1: - updateUserInfo(sc, checkUpdateUser); - default: - System.out.println("이전 메뉴로 돌아갑니다."); - return; + if (isContinue == 1) { + updateUserInfo(sc, checkUpdateUser); } + System.out.println("이전 메뉴로 돌아갑니다."); + return; } /// 사실 분리할 필요가 없긴 한데, 너무 길어져서 분리함 From 26854459523ad535f0d77499ed7baefbc0e836b2 Mon Sep 17 00:00:00 2001 From: Alpha Date: Sat, 17 Jan 2026 08:58:40 +0900 Subject: [PATCH 13/35] =?UTF-8?q?OOP=EA=B0=9C=EB=85=90=EC=9D=84=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=ED=95=9C=EB=8B=A4=EB=8A=94=EA=B2=8C=20?= =?UTF-8?q?=EB=AD=94=EC=A7=80=20=EB=AA=A8=EB=A5=B4=EA=B2=A0=EB=8B=A4.=20?= =?UTF-8?q?=EC=9D=BC=EB=8B=A8=20=EB=8B=B9=EC=9E=A5=EC=9D=80=20JCFUserServi?= =?UTF-8?q?ce=EC=9D=98=20Update=EB=A1=9C=EC=A7=81=EC=9D=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=ED=96=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sprint/mission/discodeit/Input.java | 34 +++++ .../app/router/RouteMessageService.java | 6 +- .../mission/discodeit/entity/Message.java | 44 ++---- .../sprint/mission/discodeit/entity/User.java | 17 +-- .../discodeit/service/ChannelService.java | 12 +- .../discodeit/service/MessageService.java | 15 +- .../discodeit/service/UserService.java | 5 - .../service/jfc/JCFChannelService.java | 4 +- .../service/jfc/JCFMessageService.java | 117 +++++++-------- .../discodeit/service/jfc/JCFUserService.java | 133 ++++-------------- 10 files changed, 160 insertions(+), 227 deletions(-) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/Input.java diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/Input.java b/discordit/src/main/java/com/sprint/mission/discodeit/Input.java new file mode 100644 index 00000000..88542352 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/Input.java @@ -0,0 +1,34 @@ +package com.sprint.mission.discodeit; + +import java.util.Scanner; + +public class Input { + public static String inputChecker(Scanner scanner, String regexRule) { + String inputString; + while(true) { + inputString = scanner.nextLine().trim(); + + if (inputString.isEmpty()) return null; + + if (!inputString.matches(regexRule)) { + System.out.println("잘못된 입력 형식입니다."); + continue; + } + + break; + } + return inputString; + } + + public static String inputUpdateField(Scanner sc, String text, String regexRule, String getNowInfo) { + if(text.equals("비밀번호")) { + System.out.print("비밀번호는 보안상 현재 비밀번호를 출력하지 않습니다."); + System.out.print("변경하실 비밀번호 : "); + return inputChecker(sc, regexRule); + } + + System.out.println("현재 " + text + " : " + getNowInfo); + System.out.print("변경하실 " + text + " : "); + return inputChecker(sc, regexRule); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java index 23c33ad3..0428ba44 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java @@ -71,7 +71,7 @@ static void messageService(Scanner sc, int routeCURD) { System.out.println("존재하지 않는 사용자입니다."); return; } - messageService.readMsgForUser(nowUser); + messageService.getMessageForSender(nowUser); } else if (m == 2) { System.out.println("어디로 보내는 메시지인가요?"); sendeeChannelName = sc.nextLine(); @@ -80,7 +80,7 @@ static void messageService(Scanner sc, int routeCURD) { System.out.println("존재하지 않는 채널입니다."); return; } - messageService.readMsgInChannel(nowChannel.getId(), userService); + messageService.getMessageInChannel(nowChannel.getId(), userService); } break; case 4: @@ -93,7 +93,7 @@ static void messageService(Scanner sc, int routeCURD) { System.out.println("존재하지 않는 사용자입니다."); return; } - messageService.deleteMsg(sc, nowUser); + messageService.deleteMessage(sc, nowUser); break; default: return; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index f7f5a7c1..54013fb5 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -1,18 +1,12 @@ package com.sprint.mission.discodeit.entity; -import java.util.HashMap; import java.util.UUID; public class Message { - /// Test: - /// HashMap을 이용해서 {mId, chId}, {mId, uId}를 묶고 - /// {mId : 나머지 내용} 형태로 묶어볼까? - private final HashMap mchId = new HashMap<>(); - private final HashMap muId = new HashMap<>(); private final UUID id; private final Long createAt; - private UUID channelId; - private UUID userId; + private final UUID channelId; + private final UUID userId; private Long updateAt; private String content; @@ -26,56 +20,40 @@ public Message(UUID channelId, UUID userId, String content) { this.updateAt = n; } - /// 테스트용으로 만들었는데 안 쓰고 있음 -// public Message(String content){ -// long n = System.currentTimeMillis(); -// this.id = UUID.randomUUID(); -// this.content = content; -// this.createAt = n; -// this.updateAt = n; -// } public UUID getId() { return this.id; } - ; - public UUID getSendChannel() { return this.channelId; } - ; - public UUID getSendUserId() { return this.userId; } - ; - public String getContent() { return this.content; } - public void setContent(String content) { - this.content = content; - setUpdateAt(); - } - public long getUpdateAt() { return this.updateAt; } - ; - public long getCreateAt() { return this.createAt; } - ; + public void updateMessage(String content) { + setContent(content); + } - public void setUpdateAt() { - this.updateAt = System.currentTimeMillis(); + private void setContent(String content) { + this.content = content; + setUpdateAt(); } - ; + private void setUpdateAt() { + this.updateAt = System.currentTimeMillis(); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index 590c11d7..379fe6aa 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -1,8 +1,5 @@ package com.sprint.mission.discodeit.entity; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; import java.util.UUID; public class User { @@ -58,13 +55,13 @@ public void setUpdateAt() { this.updateAt = System.currentTimeMillis(); } - public void updateUser(String name, String pw, String email, String phoneNumber) { + public void updateUser(String name, String password, String email, String phoneNumber) { /// null checker - boolean[] argumentsList = {check(name), check(pw), check(email), check(phoneNumber)}; + boolean[] argumentsList = {check(name), check(password), check(email), check(phoneNumber)}; if(argumentsList[0]) setName(name); - if(argumentsList[1]) setName(pw); - if(argumentsList[2]) setName(email); - if(argumentsList[3]) setName(phoneNumber); + if(argumentsList[1]) setPassword(password); + if(argumentsList[2]) setEmail(email); + if(argumentsList[3]) setPhoneNumber(phoneNumber); } private boolean check(String text) { @@ -76,8 +73,8 @@ private void setName(String name) { setUpdateAt(); } - private void setPw(String pw) { - this.pw = pw; + private void setPassword(String password) { + this.pw = password; setUpdateAt(); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 07958710..5e778999 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -7,20 +7,14 @@ public interface ChannelService { void createServer(Scanner sc); - void updateServer(Scanner sc); + void readAllChannel(); + void deleteChannel(Scanner sc); + /// check void isChannelName(Scanner sc); - Channel isChannelName(String name); - String isChannelName(UUID id); - - void readAllChannel(); - - void deleteChannel(Scanner sc); - Channel check(String name); - Channel check(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index e95055f5..adf9a0e0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -1,20 +1,23 @@ package com.sprint.mission.discodeit.service; +import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.List; import java.util.Scanner; +import java.util.UUID; public interface MessageService { - void data(); - void createMessage(Scanner sc, List messages); + void createMessage(Scanner sc, Channel channel, User user); - void updateMessage(Scanner sc, List messages); + void updateMessage(Scanner sc, User user); - void getMessageName(Message user); + void getMessageForSender(User sender); - void getAllMessageName(List users); + void getMessageInChannel(UUID channelId, JCFUserService userService); - void deleteMessage(Scanner sc, List messages); + void deleteMessage(Scanner sc, User user); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java index 18831b25..30cd0217 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -13,15 +13,10 @@ /// Question: 자바 스타일을 배우기 위해 좋은 가이드라인 / 책이 있을지 public interface UserService { - // void data(); void createUser(Scanner sc); - void updateUser(Scanner sc); - void getUserName(Scanner sc); - void getAllUserName(); - void deleteUser(Scanner sc); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 1248b7c0..6d7fb7c1 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -27,7 +27,7 @@ public static JCFChannelService getInstance() { @Override public void createServer(Scanner sc) { - System.out.println("사용하려는 서버명이 무엇인가요?"); + System.out.println("사용하려는 채널명이 무엇인가요?"); String name = sc.nextLine(); if (check(name) != null) { @@ -48,7 +48,7 @@ public void updateServer(Scanner sc) { Channel result = check(name); if (result == null) { - System.out.println("해당 서버가 존재하지 않습니다."); + System.out.println("해당 채널이 존재하지 않습니다."); return; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index 5bde2004..a1b2a3bb 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -3,6 +3,7 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.MessageService; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -10,13 +11,11 @@ /// TODO: 채널 메시지 조회헤엇 /// 구분자, 전체 메시지 개수 넣어주기 -public class JCFMessageService { -// private final List msgs = new ArrayList<>(); +public class JCFMessageService implements MessageService { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); /// 20260115 멘토링 때, 싱글톤 패턴이 적용되지 않았다고 해서 넣어봄 - /// 아직은 왜 싱글톤인지, 왜 필요한지를 잘 모르겠다. private JCFMessageService() { } @@ -28,35 +27,39 @@ public static JCFMessageService getInstance() { return JCFMessageService.Holder.INSTANCE; } - public void createMessage(Scanner sc, Channel ch, User user) { - if (ch == null) return; - System.out.println("현재 메시지를 보낼 채널은 " + ch.getName() + "입니다."); - System.out.println("현재 메시지를 보낼 사람은 " + user.getName() + "입니다."); - System.out.println("무어라 보내고 싶으신가요?"); - - String text = sc.nextLine(); - - System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); - System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); - String n = sc.nextLine(); - if (Objects.equals(n, "0")) { - System.out.println("처음으로 돌아갑니다."); - } else if (Objects.equals(n, "1")) { -// msgs.add(new Message(ch.getId(), user.getId(), text)); - Message message = new Message(ch.getId(), user.getId(), text); - channelIdMessageMap.computeIfAbsent(ch.getId(), m -> new ArrayList()).add(message); - userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList()).add(message); - - System.out.println("성공."); - } else { - System.out.println("잘못 입력했습니다. 다시 메시지 입력 부분으로 돌아갑니다."); - createMessage(sc, ch, user); + @Override + public void createMessage(Scanner sc, Channel channel, User user) { + while(true) { + if (channel == null) return; + System.out.println("현재 메시지를 보낼 채널은 " + channel.getName() + "입니다."); + System.out.println("현재 메시지를 보낼 사람은 " + user.getName() + "입니다."); + System.out.println("무어라 보내고 싶으신가요?"); + String text = sc.nextLine(); + + System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); + System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); + String n = sc.nextLine(); + + if (Objects.equals(n, "0")) { + System.out.println("처음으로 돌아갑니다."); + return; + } else if (Objects.equals(n, "1")) { + Message message = new Message(channel.getId(), user.getId(), text); + channelIdMessageMap.computeIfAbsent(channel.getId(), m -> new ArrayList()).add(message); + userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList()).add(message); + + System.out.println("성공."); + return; + } else { + System.out.println("잘못 입력했습니다. 다시 메시지 입력 부분으로 돌아갑니다."); + } } } /// update logic + @Override public void updateMessage(Scanner sc, User user) { - readMsgForUser(user); + getMessageForSender(user); System.out.println("어떤 것을 수정하고 싶나요?"); String id = sc.nextLine(); @@ -69,68 +72,68 @@ public void updateMessage(Scanner sc, User user) { } System.out.println("무슨 내용으로 수정하고 싶나요?"); - String context = sc.nextLine(); + String content = sc.nextLine(); System.out.println("지금 작업중입니다."); - text.setContent(context); + text.updateMessage(content); System.out.println("성공"); } - public void readMsgInChannel(UUID chId, JCFUserService us) { - List flag = // msgs.stream().filter(e -> e.getSendChannel().equals(chId)).toList(); - channelIdMessageMap.get(chId); + @Override + public void getMessageInChannel(UUID channelId, JCFUserService userService) { + List flag = channelIdMessageMap.get(channelId); if (flag.isEmpty()) { System.out.println("해당 채널에 보낸 메시지가 없어요."); } - flag.forEach(m -> { - System.out.println("보낸 사용자: " + us.getUserByName(m.getSendUserId())); - System.out.println("보낸 내용: " + m.getContent()); - System.out.println("보낸일시 : " + m.getCreateAt()); - System.out.println("수정일시 : " + m.getUpdateAt()); + flag.forEach(message -> { + System.out.println("보낸 사용자: " + userService.getUserByName(message.getSendUserId())); + System.out.println("보낸 내용: " + message.getContent()); + System.out.println("보낸일시 : " + message.getCreateAt()); + System.out.println("수정일시 : " + message.getUpdateAt()); System.out.println("==============="); }); } - public void readMsgForUser(User user) { - List msgList = userIdMessageMap.get(user.getId()); + @Override + public void getMessageForSender(User sender) { + List messages = userIdMessageMap.get(sender.getId()); JCFUserService userService = JCFUserService.getInstance(); JCFChannelService channelService = JCFChannelService.getInstance(); - if (msgList.isEmpty()) { + if (messages.isEmpty()) { System.out.println("아쉽지만 아무것도 없네요!"); return; } System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - for (Message msg : msgList) { - System.out.println("ID : " + msg.getId()); - System.out.println("보낸 사용자 : " + userService.getUserByName(msg.getSendUserId())); - System.out.println("보낸 채널명 : " + channelService.isChannelName(msg.getSendChannel())); - System.out.println("내용 : " + msg.getContent()); - System.out.println("보낸일시 : " + msg.getCreateAt()); - System.out.println("수정일시 : " + msg.getUpdateAt()); + for (Message message : messages) { + System.out.println("ID : " + message.getId()); + System.out.println("보낸 사용자 : " + userService.getUserByName(message.getSendUserId())); + System.out.println("보낸 채널명 : " + channelService.isChannelName(message.getSendChannel())); + System.out.println("내용 : " + message.getContent()); + System.out.println("보낸일시 : " + message.getCreateAt()); + System.out.println("수정일시 : " + message.getUpdateAt()); System.out.println("==============="); } } - public void deleteMsg(Scanner sc, User user) { - readMsgForUser(user); + @Override + public void deleteMessage(Scanner sc, User user) { + getMessageForSender(user); System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); String id = sc.nextLine(); - Message msg = /// msgs.stream().filter(e -> e.getId().equals(targetId)).findFirst().orElse(null); - userIdMessageMap.get(user.getId()).stream().filter(e -> e.getId().equals(UUID.fromString(id))).findFirst().orElse(null); - if (msg == null) { + Message message = userIdMessageMap.get(user.getId()).stream().filter(e -> e.getId().equals(UUID.fromString(id))).findFirst().orElse(null); + if (message == null) { System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다."); return; } System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); - String ins = sc.nextLine(); - if (ins.equalsIgnoreCase("Y")) { -// msgs.remove(msg); - userIdMessageMap.get(user.getId()).remove(msg); - channelIdMessageMap.get(msg.getSendChannel()).remove(msg); + String isDelete = sc.nextLine(); + if (isDelete.equalsIgnoreCase("Y")) { + userIdMessageMap.get(user.getId()).remove(message); + channelIdMessageMap.get(message.getSendChannel()).remove(message); System.out.println("성공!"); } else { System.out.println("초기로 돌아갑니다"); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index 4d03c72f..add98c20 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.service.jfc; +import com.sprint.mission.discodeit.Input; import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.UserService; @@ -7,19 +8,18 @@ import java.util.concurrent.ConcurrentHashMap; public class JCFUserService implements UserService { - private final Map usersMap = new ConcurrentHashMap<>(); - private final Map usersName = new ConcurrentHashMap<>(); private JCFUserService() { } - private static class Holder { private static final JCFUserService INSTANCE = new JCFUserService(); } - public static JCFUserService getInstance() { return Holder.INSTANCE; } + private final Map usersMap = new ConcurrentHashMap<>(); + private final Map usersName = new ConcurrentHashMap<>(); + /// Create @Override public void createUser(Scanner sc) { @@ -46,7 +46,6 @@ public void createUser(Scanner sc) { /// Update @Override public void updateUser(Scanner sc) { - int isContinue = 0; System.out.println("===================="); System.out.println("사용자 변경 메뉴입니다."); User checkUpdateUser = check(sc, "변경"); @@ -55,25 +54,7 @@ public void updateUser(Scanner sc) { return; } - System.out.println("현재 사용자 변경은 다음과 같은 순서로 입렵받게 됩니다."); - System.out.println("1. 사용자 이름 변경"); - System.out.println("2. 사용자 비밀번호 변경"); - System.out.println("3. 사용자 이메일 변경"); - System.out.println("4. 사용자 전화번호 변경"); - System.out.println("진행하시려면 1, 아니라면 아무 키나 입력해주세요."); - String input = sc.nextLine().trim(); - try{ - isContinue = Integer.parseInt(input.trim()); - } catch (NumberFormatException e) { - System.out.println("잘못 입력하셨습니다."); - updateUser(sc); - } - - if (isContinue == 1) { - updateUserInfo(sc, checkUpdateUser); - } - System.out.println("이전 메뉴로 돌아갑니다."); - return; + updateUserInfo(sc, checkUpdateUser); } /// 사실 분리할 필요가 없긴 한데, 너무 길어져서 분리함 @@ -84,85 +65,32 @@ private void updateUserInfo(Scanner sc, User checkUpdateUser) { String reMail; String rePhoneNumber; - System.out.println("변경하지 않으시려면 엔터를 눌러주시기 바랍니다."); - System.out.println("현재 사용자명 : " + checkUpdateUser.getName()); - System.out.print("변경하실 사용자명 : "); - while(true) { - reName = sc.nextLine().trim(); - /// regex rule - /// \\S+ => 공백이 없을 때 true - /// !rePassword.matches("\\S+")기에 공백이 포함되어 있으면 true를 반환 - if (!reName.matches("\\S+")) { - System.out.println("사용자명은 공백 없이 입력해주세요."); - continue; - } - if (reName.isEmpty()) reName = null; - break; - } - System.out.println(); - - System.out.print("변경하실 비밀번호 : "); - while(true) { - rePassword = sc.nextLine().trim(); - if (!rePassword.matches("\\S+")) { - System.out.println("비밀번호에 공백을 포함할 수 없습니다."); - continue; - } - if (rePassword.isEmpty()) rePassword = null; - break; - } - System.out.println(); - - System.out.println("현재 이메일 : " + checkUpdateUser.getEmail()); - System.out.print("변경하실 이메일 : "); while(true) { - reMail = sc.nextLine().trim(); - /// regex rule - /// 앞뒤로 공백이 없어야 하며 중간에 @와 .이 있어야 한다는 형식 - if (reMail.isEmpty() || !reMail.matches("\\S+@\\S+\\.\\S+")) { - System.out.println("이메일 형식이 맞지 않습니다."); - continue; - } - break; - } - System.out.println(); + /// 정규식은 있다는건 알아도 어떤 규칙인지 몰라서 GPT에게 물어봤습니다. + System.out.println("변경하지 않으시려면 엔터를 눌러주시기 바랍니다."); - System.out.println("현재 전화번호 : " + checkUpdateUser.getPhoneNumber()); - System.out.print("변경하실 전화번호 : "); - - while(true) { - rePhoneNumber = sc.nextLine().trim(); - if (!rePhoneNumber.matches("\\S+") && (rePhoneNumber.length() == 10 || rePhoneNumber.length() == 11)) { - System.out.println("잘못된 입력 형식입니다."); - continue; - } - if(rePhoneNumber.isEmpty()) rePhoneNumber = null; - break; - } + reName = Input.inputUpdateField(sc, "사용자명", "\\S+", checkUpdateUser.getName()); + rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+", null); + reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+", checkUpdateUser.getEmail()); + rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\\\d{10,11}$", checkUpdateUser.getPhoneNumber()); System.out.println("이대로 진행하시겠습니까?"); - System.out.println("맞으면 y, 취소하려면 n"); - System.out.println("다시 입력하시려면 re를 입력해주세요."); + System.out.println("맞으면 y, 다시 입력하려면 re"); + System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); - while(true) { String finalCheckIsContinue = sc.nextLine(); switch (finalCheckIsContinue.toLowerCase()){ case "y": checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); return; - case "n": - return; case "re": - updateUserInfo(sc, checkUpdateUser); - return; - default: continue; + default: + return; } } } - - /// Read public User getUserId(UUID id) { return usersMap.get(id); @@ -175,17 +103,18 @@ public void getUserName(Scanner sc) { if (usersName.get(name) == null) { System.out.println("조회하고자 하는 사용자가 없습니다."); + return; } - User u = usersMap.get(usersName.get(name)); + User user = usersMap.get(usersName.get(name)); System.out.println("===================="); - System.out.println("사용자ID : " + u.getId()); - System.out.println("사용자명 : " + u.getName()); - System.out.println("이메일 : " + u.getEmail()); - System.out.println("전화번호 : " + u.getPhoneNumber()); - System.out.println("생성일 : " + u.getCreateAt()); - System.out.println("수정일 : " + u.getUpdateAt()); + System.out.println("사용자ID : " + user.getId()); + System.out.println("사용자명 : " + user.getName()); + System.out.println("이메일 : " + user.getEmail()); + System.out.println("전화번호 : " + user.getPhoneNumber()); + System.out.println("생성일 : " + user.getCreateAt()); + System.out.println("수정일 : " + user.getUpdateAt()); System.out.println("===================="); } @@ -195,7 +124,6 @@ public User getUserByName(String name) { } catch (Exception e) { return null; } - /// null일 때 반환하는 로직 추가 } public String getUserByName(UUID id) { @@ -209,16 +137,17 @@ public void getAllUserName() { return; } - usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(u -> { + usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { System.out.println("===================="); - System.out.println("사용자ID : " + u.getId()); - System.out.println("사용자명 : " + u.getName()); - System.out.println("이메일 : " + u.getEmail()); - System.out.println("전화번호 : " + u.getPhoneNumber()); - System.out.println("생성일 : " + u.getCreateAt()); - System.out.println("수정일 : " + u.getUpdateAt()); + System.out.println("사용자ID : " + user.getId()); + System.out.println("사용자명 : " + user.getName()); + System.out.println("이메일 : " + user.getEmail()); + System.out.println("전화번호 : " + user.getPhoneNumber()); + System.out.println("생성일 : " + user.getCreateAt()); + System.out.println("수정일 : " + user.getUpdateAt()); System.out.println("===================="); }); + System.out.println("현재 총 사용자 : " + usersMap.size()); } /// Delete From bcba0c7460ebe350fceaf873ddd70a3676e1b0de Mon Sep 17 00:00:00 2001 From: alpha_lens Date: Mon, 19 Jan 2026 08:57:56 +0900 Subject: [PATCH 14/35] 20260118 --- .../executionHistory/executionHistory.bin | Bin 50949 -> 50949 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 22597 -> 24997 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 23937 -> 26011 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/outputFiles.bin | Bin 18983 -> 19379 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../com/sprint/mission/discodeit/Input.class | Bin 0 -> 2045 bytes .../sprint/mission/discodeit/TempMain.class | Bin 0 -> 3111 bytes .../discodeit/app/JavaApplication.class | Bin 7306 -> 1289 bytes .../app/router/RouteChannelService.class | Bin 0 -> 1494 bytes .../app/router/RouteMessageService.class | Bin 0 -> 3989 bytes .../discodeit/app/router/RoutePrintText.class | Bin 0 -> 2136 bytes .../app/router/RouteUserService.class | Bin 0 -> 1470 bytes .../mission/discodeit/app/router/Router.class | Bin 0 -> 1712 bytes .../mission/discodeit/entity/Channel.class | Bin 1305 -> 2504 bytes .../mission/discodeit/entity/Message.class | Bin 1838 -> 1725 bytes .../mission/discodeit/entity/User.class | Bin 1945 -> 3719 bytes .../discodeit/service/ChannelService.class | Bin 507 -> 509 bytes .../discodeit/service/MessageService.class | Bin 607 -> 584 bytes .../jfc/JCFChannelService$Holder.class | Bin 652 -> 652 bytes .../service/jfc/JCFChannelService.class | Bin 6634 -> 6277 bytes .../jfc/JCFMessageService$Holder.class | Bin 652 -> 652 bytes .../service/jfc/JCFMessageService.class | Bin 8994 -> 10283 bytes .../service/jfc/JCFUserService$Holder.class | Bin 637 -> 637 bytes .../service/jfc/JCFUserService.class | Bin 8540 -> 7915 bytes .../stash-dir/Channel.class.uniqueId1 | Bin 1301 -> 0 bytes .../stash-dir/ChannelService.class.uniqueId5 | Bin 507 -> 0 bytes .../JCFChannelService.class.uniqueId2 | Bin 6376 -> 0 bytes .../JCFMessageService.class.uniqueId3 | Bin 8576 -> 0 bytes .../stash-dir/JCFUserService.class.uniqueId9 | Bin 8288 -> 0 bytes .../stash-dir/JavaApplication.class.uniqueId0 | Bin 7645 -> 0 bytes .../stash-dir/Message.class.uniqueId8 | Bin 1993 -> 0 bytes .../stash-dir/MessageService.class.uniqueId4 | Bin 607 -> 0 bytes .../stash-dir/TempMain.class.uniqueId0 | Bin 0 -> 3093 bytes .../stash-dir/User.class.uniqueId7 | Bin 1917 -> 0 bytes .../stash-dir/UserService.class.uniqueId6 | Bin 281 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 1553 -> 1162 bytes .../com/sprint/mission/discodeit/Input.java | 2 +- .../sprint/mission/discodeit/TempMain.java | 20 +++++++++ .../discodeit/app/JavaApplication.java | 5 ++- .../discodeit/app/router/RoutePrintText.java | 8 ++-- .../mission/discodeit/entity/Channel.java | 22 +++++++++- .../sprint/mission/discodeit/entity/User.java | 15 +++++++ .../com/sprint/mission/discodeit/index.html | 13 ------ .../com/sprint/mission/discodeit/readme.md | 17 ++++++++ .../service/jfc/JCFChannelService.java | 21 ++-------- .../service/jfc/JCFMessageService.java | 28 +++++++------ .../discodeit/service/jfc/JCFUserService.java | 38 +++++------------- 50 files changed, 110 insertions(+), 79 deletions(-) create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/Input.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/TempMain.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RoutePrintText.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Channel.class.uniqueId1 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/ChannelService.class.uniqueId5 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFChannelService.class.uniqueId2 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId3 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFUserService.class.uniqueId9 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/Message.class.uniqueId8 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId4 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/TempMain.class.uniqueId0 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/User.class.uniqueId7 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId6 create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/index.html create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/readme.md diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index 55ae0dd2fa5a8c3cdfd7d5a3f7120e2adb650962..b30c3fa0a1ec90e9ec210edbe3d6741c78d9fabc 100644 GIT binary patch delta 3551 zcmcInYfuwc6wZ=@G`v<(2?9+-L42_STC_t`5Yz;Pf+$)F)sUIMTI3~M zBZ_FHNRd)dP(#%uqJS`^O2DF6ty&euLc|AH%46EyHMUdhv@s~z z)>y{>ZH00iw6Q0Ex^i=HG063JWza6Oz_FtcvJyjO7{ZlG<4`0(!iyK7VmXE^5y;u` z(a3_?m{cYZ%V&!O7$%U25xxN9No0J19KmEfM8p+{k@egJE&}ojoB*SeK8^~1rno=< zYQ`5`O+3$~;a5(J^DDhM%_c_VfpM{jOcF0gWyo^k1KRdYfZ6ZNZXFlwF)Pt~X7uPc z%!`1ziupRE?f)$%v}gh>FFVvE-*{b>P&H5>vrO6adNH9zww!unW@gT-nF%3^w*pO+ zyAxHS!bjSBPw!Gx+h~*@U%Qjz9RP9*7%~6sG;GXYWX7vpGJ~-41NW-B`_OWQuDl~6 zS(pW#ApWQ|uZK4pGiP&OGNU7 zkSjTrn?vkk%Y>2sIN3r@gVA>6q4B{P%Zdz#1-@UXxzn6!5IiP$k^RG2X-^>aN$q_`dvLeUaFf_T@D8f$b?RVJ@I3W@vzz}gGSl$;?@8azPL8zs3tPhU5}X6YnBW3=}2h81(tjEQ389#;w9#G{lpa0 z$b1VEYS&Ih*&_Fidsl8ACgUj?kdln^=a40(P~hTjerD;N?4f|ttf&Ob^+kutn4K_` zP2y$l23(tiv+2c!-K`GIx3C<&cgt21cgzYZAaO4T5r>#W2A6oB+?IDcr&`{t`PqIQ z_1f|b(nV`QrNH|e2Da_UYVWL?;l~|#qRPdWCRZp|*znHn-AaM7eR#>-7%wHBr@#`!59i^sU<|v43l?x|}ptgn;R_ zjPZRV$3ctlP*Rj@XZeL~omuI)5k%HH&h#}M>9g>l-T%O+-jZj1W={s`)$=}{02}G; zJRjDEpSRn^F1e{zP6we4bUSmM=k67a#fm3$npF|nXj%n{Zw6Z$TvNKp6z?;^eYfNt z>c5U?nL%2(#l@RWgL41qN<;eYPFkvbbYp5@^bie$2j8Za45X!MyvpdfvseAy&4+tI z_Wb9nlKk+VY4{R-PwSGEpZ6zEy383K*|HzOmnQnQEK6$`lp<#ng86o9=~NdAto?!a zIOhJASwnNA^Je908*o_T0(jLo?qv_ckEZrLZ158TX5;j*H<-&W+BOCiqcW}>47ZVS%Ul^59N*WZTEjQYkET#3oI7F6mCKJQM|H?^_ta8;woqZ3Fcl^1XbgS0+5EPt zIhT!*Urkrbqb~I*=27p8kFPc)vdH&*$}Fu+R(^S`<|6X`m>M zNpXq^bD~BbK604u9F-KCM050<%S-qweirTwt0Cd#_2$^)fCrxs>FN|F=1D))uKP?qXwU|hIf;6k`;18Vg+{Qc?&}1+J^uz& zr*_J6FkrO!IQXXs2Pbm>6m{JXe*8NzXoNSC=LKYq+dwcU6ZVq!c+5J?klcWa!aKZd zEs$}yfV3ukgrtF5E)L#PyJK{vRs9>69W9SL3nB{(4jhuerLCC$F+&n%)Yyj z1W8;EX1Kb*r5Q$2&%sQY-{n9-EHAHpKi#2?pN=G2fzpzE*bY}(lHJEBuXG4utvOkT}MdHU@D~^SHAg4+#pPe)cs9!>5B0dl&H8lz_AIQo#+l)U& zQUx;h%76NJetEPK;3d|^XBN$=W3LZfvKKk0n#TlNZ(G8v0R^??!RQz_o~_@tp0DPzb->$JcB zxAZ=9xtgr<21<#Uf#B*ND|R<%-G{d56u8OY5k>k!4Y2DlwY7+WZ-78{c-B*fqCc*7 z)vxNjAri9PVrfTj-<#|F)Iz)YsdHjB*n8W0Md9-HAoaF&T8Uc8(Lj`j_t%~S0=2ed(y`Qoj;+cl4=MCefk3Qz$}bC{=p%Q? zB;QL1ww*B)H}}>?SX&SJ#~;$_-t5PtFxE8hsNgX?y-(ckyVkF9eHu=(+d%w6Vi( zt*!7}<_2Ao}XfNSxO#`;AZL-*A?7v#~MikCHU^{wZ*$z^Ch(&(x-;c!Yga!h# zaI=TF%{`^x;t2^;xY#j!45>BAIE9}^@v-W-^@Gm6o^G;-=3Hfgu$|C^1*^+#Oemb8 nF2jL`i+;i0&znC^>_%l$ViTeh=pkT+Y$OgZAJh;_r6lyfWM*Cs diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index 781648e027ddeefc37e2a732470336f90af76bbc..26085e7ccffd98bc297c42eada86f8b32170985d 100644 GIT binary patch literal 17 VcmZQx)_UaMM6cU+3}C=`8UR0#1+f4C literal 17 VcmZQx)_UaMM6cU+3}C?M4gfz41uXyo diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index d5bd0b2d4aba1de4ca1cbe25c3f5cbf63b99b55b..782f51e2b4d90de3b78b04f75c5084ddd3189cac 100644 GIT binary patch delta 3046 zcmZve2~-nF8h{f>xHa)$CE-d2l&A|)5DkhFglNL`M&vRf93paxq5_Kt5yb&SVWnkI z0fj+O)=>zGQ8^S?ScJuhf`bDrItVIu;*NXsRHV zG!iS;7|@O%yYZYqw=sAH0ULpaU-5z18ca~E=2eXfJ%iyrzcR#_#*zFK5s^~S63B&6 zyh9=Uja;AD&FK?E9w1Zj8`kO@3+l4QArI>N#-l&wnv|W;hdfaFjd%RO6r_fFK`wgq zjsNDno9G*bd0*igFdfb*0g6Wv`R%@gxq&QaXqA_xu;bQ3;wO5DKFd z!A&9AT}y_?Ga(Pyj(F1<)aE!+l0VbqdkBNJB75lHQy)KEq$l{K{{lj>1yV(ipgc}v znKjo`LMHlx=o_Br4n6#*!Ohzy>+qCJMX3@0t1V%f>slZWKA_-ZV+UpAM^k*rcg#ad z45z82_R>T5?eF7Fh-{D?qj2h?#<0_AA4f01NWTPR%7{VLFWmk4JDXWo2*nx5JYy+k zL;nSb1*xwf3wVcA88fJCI(J3ewzyOXMWIN$F@t6EVfDdUYg!u)iHb$7578TbQM_ju za=#vA(71)=WEG;7^~@K4;sGZW!Mui_qiIJgHp1XQ2~uLhV7YxZ@SCxG_5*}MxgyxZ zI;ouFk=+A%Fa@bKVNgArLR%RhZm+?EHIXh82G>XMtMmD;p#cbkt}8MKizX`xr5DX0 z_qSAVk(^*;ncmLE;}elFkU8LTqWQ|_l&5%RJA`b?q3*2SJV4D_coomkh}fDkxS{cg z(U#>GZ6MrHtVkPi%VJ+F>xv1^yA(Vs=~{fl(?(6m{dkDGDT5Uq)7eSd{*nY?;D91H zcHfHOo~-@^$o&J6P*Xd~GMn}ZBcEBwgat?rSVi30y&G~JF2BJOxGNIG#mV2#F3vjw zxp-W`JBkeyF-r_GbLmWeEMxDuNX=fuQFoWlk@VuIkpk<;W*d zkq&{GdOweVd=jv+dASRmMfiLMpC7o;ktG6sEQXE82IDg#VC#Y$*iiphEbVhMC#~0x_@kZeKDUT?S?=^vR=pi;4cI>T4;h-rqEP_h+5O z)rB96e?*N(UZ48GO)wS+!9~f~axu)6tt+=}_?3Pox8vjk)M#$gI0Pak;78`FDjkC! zLuPmRy$#`O_H5`sr-vzzT7L(TV32yjMX89e!8S(VluYLacdUNxkPluvP^2aH3MLT9 zL{-COkXh+N)4j7`>|Ir|RRyAA(_YO)6& zfELN0fd z>)6uMQ3bqvb>O1ZY=_}@weDf@Ux8E z!Ba5_8n_~ZiZ*(*Dis-HRY$q`Y&%}`^U@5;^xMU#(OUS_8!u9e)VnU)RxU5%#?I%{ zq`$1s{o!ie_NEqc;v3I#0WG~x}ZJ*Y1chEFCH0O{+-(?a|CKLi9 z4a`albGl^uvb%3nF0H#Z$K~u6AG|2oyyzg#fs2x%^~Cy|S5wiEiB&CkgmpW0py9U? z69{U2B|`$fp(B5}6ZA!MUh5jB|DJ1ZDPV74kN6#~oK{kR5h#{62SG8inhn9{N?GfaEl*4JC5y&2`~H;lpFSFmTt&`&NH1}DKqNg1ELg|u;J4vUv{ zmo=a02FpN~%sX^rK$|jU31>|n!D_r(K$e!)>g-h6r&0_mMy@=>c1lH B!d?IX delta 145 zcmZ2_nDOWa#tkMCj6suqB|c6LlhmIqDrGP^R;pq$tF*!7R3JVoEiw74w8!L7nZ(KG zWcnvBmHjYztz5!nRe6cYq4Fyyiz$dtc2$s=+^cY4a;>7oNh$v0UwHRhb2vY|+WSFK#DUn*PW!yUM z@3^GVTan6{D17 z8FdHPrDP1H4B}Wa?9v7pdYgbKrQ<}dN)tzG&nrt9dRB_M=XMDut*U}A2<81?O34rU zy+0}%>sjb3jQs$dFl4CEF6OERVfAYm(zt+&ArpC>0mZtF>1i;eD2ZZA$Gu}ChYsx% z#;yT_7-Q(F)KZe>lNlWt`a}Q)RPe<6tdUclV0oRe`Cp>g`^isC`G*rQ zFsIu9tcoA8DW(1*Z3^g<1l@0CAk3d^)epozsp zJ?DLOt(`iAv0fFx9GeCW6`i$SZti^%Ha!HO8G9Uh=lkzr%ieeG!oDPdwW=}nez2Rd zX*>NB4CxZ!s45=%kne&bTy>6tA*Bw)&%tSb>Xoh4-Q_T(YJogeJn{3vQ_|VbQiTIc z_ZPkY=i1A;GM6fnVA)d&)Ts7COM{1L{>}G<>2k(T%w@JZ}-XfCMj*K-3 zICvPNsBOTSfG6r?<|>@&=?j6W*Ljgl!m1kN*^xLfr?~+S0zs=dHme%+TfmI6S>)=~ zIGH{!HJO09&q{EVP!1WG4Y*h7{89!(>JoreW1|Dl-F%EcE*gZpAX&`>9SQ=_I)Z%I zqfY>Vnm-zcE~nT~NHC-I0Zny3$l~dEf9}h!12FVF3}Vzx&^lxX3#Mf^%)GMzU)>nm z`K9koQ=hnSZF|{+LG@n9IWY3{?FRR6uu1U%H5$f5&kF9{F1MK;7*gX!ALNx#{UG*< zzcAK=4aPLc5bfi8)30F+cUY!tf=!ynL_f*IB<8UOdl-6L5heKTeENHoM^m1VzXm>< zWGGNwUcQ6d_(hn&13b+==*YGd$F+lIF!KtkoYJ%t6JPb9g79fgg&tX=(!zGD0?T0T zvC`bVV*ZA##x1;kT}Qh@wq|a{>}5;e*d5l|Up$qJG|-cO-dV$dZcf(IZMxkqWq}LsD_L>dPS^Q=;f0?MCb@)H zs3BVs&x%jfKB_!=|LIHXT{aIqk%q!sU4~)L{q)=;E`25@cN~xgwT0bwC1PWffmqK) zkJYzF77UhXr1=^_wEdjGXt5ErRps!JHw%i$2>3MvBR8_PD&!R-r8jue328i3#6l6% zP=)F6wd7N@G6vEJ>fjuj+A?!R`)W)o*6PDJY8zstEugUs#!BgYEnDs>R^whxWC+i9 z8Fu#a?Z_KCqk;K?&~~7|Zzb!jY!ptqXqMGzUz<0)%n;eCE31D!{g>tDgr&{5bk>k> zAdRxAnkw;?kEe&W=SH+pIjKlvSBu-QnRDXj(85Eu&ZgH_FBsp)(PF$LgBf4ZVP;9@ z&bF4%FRVqSME#A8cZqduJSnd|a;SlI2x(kzGYTN__0pmT*^cxa5Za5i_O8k04#!s~=${fQd&HsKE8IirxdkOxRSF@P)TNB^Wx8M9p zRTMrRy_v|YK-VPi@9a-7vO;EjXq8)!;Z2jxPh7(;n~a>_Y<~P07Iad%Q`+vY$m-s> z><|2BJ+=r1YEf}wnMK;D>C-~dAu-06kVfA0j0(9uffq$y<5v)HV6He9bpv&6k@OIc zw&=v+4mh^)wKj?jpuJayl@Z9*b=J2`qe`ofe%yoam`(db?j+qBi_}LSNK+ zVZ*bOej!^M+R?J7(&u&Tb(#OGFwrs$CZ20r&KznhYvplger*|F$oO7^&JPs>@uVY9 zpy!6S6!u?pTu?+I5tOVbx9Zf{v+HwA?;YkoLK@Hw@hq*H$-~8$qNVt0GIxaH7#Hdy=AMJ3Mv(0-gYh~6Y#YRP9f7^KIdQ{x8b z4}*&gUtAm|$IK79!%$%}<<40-;NTbp_ z=yrs!>&bwTy58bzFu(%=9(gWVW`o06!<7RQ~}nT>&Bh delta 224 zcmWN}FGvGn9L90Zq(Q_W`@M7TZMWTd=LYUQa8Yq#cm{3DJA*d+3<`#eg7C#8ip4)g za11Txvk10>CEKD=Fo|#Y@C^?ruCS$M#_C- zfc6!8{x-R9e*+;46raHZ=PSp!q2Vx0`3eX0qnMkh%`}=&tQtDagv+Mk$F|?v8Nar= U&dkE%$onmg%mzA#tkMCnud+XXI^+#HDeb87hs@@$YzMAF6%lnMqs-WusPcD_n z(AYV{_;zzP`yHrYEKKokrQ|Zf@|oA6hD1)jDiNS@S)k+U>^$~YP{D;T#aETnpRHWH zbraN({K>MC3J&jkBtDBhh&F=?dczd|j;M3EZ~ zg!n_2OW6jNLIk}{VT#3XU6nRCZgvqWt~|L`(!xO_SN2+SXGagzgtsuonp@{<7O#4H z4yw2xCa&F6UmE!Pn+;Tb(Q@r-fueh=r#2_88>tTH*zb0+|(TKJ>@ delta 83 zcmdlyopJdT#tkMCg3^u0XI^+#HDeb87%ueJ6sf9(DY z;05pie5g}Uuc85s3~kr78(K82ne)*LbJw{p7#dF-rXj`{>IR2q0`Q|rK|sX;s0{6n zd0rUlXj0cqljj)xCch~XhRGQY4h|(AI!ub3Va~?_XhExjHWlsCMcIw60Yg0*W~5n% zii7B6Pz?KQCM%X446{;mNX21vktU-FeSzByorBd^4b3*;2#zXvR7DSZD=%BJ1<#O2 zD^Dal-NS|zy+|MhA>mpk=0_hxUukor_~j49Pws?Dn;#dyxEI>nSTC)8E;nl{#kIR5 z0X&9&1;sf8iub=Mt*?|m`j8OcDs6rhsxY|sW2jWPLwxquH%eQ} zq0;(lY4ux=k{?ep94+2o{%z+csb9NWaX54;BuPK5;u*=f!QmFbb9i3CsEU&~#c)iw zGEv*nL^FnM8&^sHRK#$;QFG>os-@pmSHcMgff`O~9HBgp6IX^-SqxM8 z%pA{6YjbIm1QV97rDwF9A@`oJUMv^{u|M(Oaf?wp+57d@;S#6_8ADT!&-0s?^6qt2 zMaXc#iTr-aH7A9pFHUM%4@{e*y_`*Hf{zRHAi^{|+U`B<<{CJx>Z$)i7a;Ous1IN>vZF5@z1?YGc`C6P5 zP~?05-IQ988vyiCnfs{PfI2D)`ZZ`gL%S%=jOK>$cVJ)B!iPAGQcXg^v|-w@3M;R2KbnkOR#1aG5(ZAXR+c;qv*?4UasD&W}GpT9=7$+FJz-cA0c zCqMm1?Px|9^~^rBqMtqvd1J`+idS)tcH|!uc#ZD#(|>TDRz4(18X&9R(Wam!NWLa9 z<)PXlc|GaJhJ%9zgm0ruq8K3*a(<$Kr^1m3cy^n1!zXqT16@xIYc%5W*4t9EkURquvu@6a1 a)7(O<%S7R-GhV|xBn!~~UCbecuD<{%97Jyb literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/TempMain.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/TempMain.class new file mode 100644 index 0000000000000000000000000000000000000000..37a8fd1c0f839dcea50c88e44de723424ed1e4d1 GIT binary patch literal 3111 zcma)8Yj@N{7=C7Z$#$EiOVCoF+Jc343p9YB$N~ygV08;fYZXy(x|?o8vq?;{KvfjP zyLi7}@PZel3dTxcqNHNl*eto6&Wm+pvYK)TNoD2R1nDw32U5TUtghq`rJY+*&xUV zB+BJdkkBqxw3K04Sk(6pT82T3(k(NW9Tk|C$&j&}VMSlGNB~|P_ScY8h^bB)x8Zh% zCT`ot6hl`me!Ob>Mb$mwAlHg+tdy`y#vSNkSUR)bSZyMw!fl4FQINB%&5upYvqnZQ z`iOJS3dmGq;Cx0}(2une*2!3pfmoY|r(92~5D=?MeYiECQn%EDj&6D(11W64MhTl_ z+=Nh&BwJ({CKZ{ZkJ(WL40p-68(S&1XjN?PXbc@Otb@LpdzRxfxJ^b5+l87e z$J0s-8>2i$g6AhlA$@lWmhP2tpJ;_NZg6ji+X@=cnZh9Mm+*j$J=jYsnAN6GFqY#o zq{@y}wRN++n*@-HB3V$!Zj|zumY4A$9`c#+CCRWMS}|0~OisAM$j&5{4`IKA12PWc z;doCyYDJlNGc>d8P54_kpTsaj+rQJ(*U$gay`}rwFVoj9o=f79sF7UP&z?!*Q3ix)vY=&nnfUM=Zv(JE=Wr;cb9dx-0#*2Y1y z5D5j{)b>{^W12I<#|*M41*^!7QSRvCJ2W=d3S=wXktsxyHKX=Mh za7mPo&`rFbu$&TkGxaAN2`A_+In$w{4{2`IpeD7)aZlMb>^*f=w$Es6T_Oh#4&pc21cwab2-w(9xqPP<_yV>&9ISS{rofd;&S~1 zyLN69w}QSppd02^@oYHRJR#-u8>6j1Y*n42wnrDbNY}J8AdU-a&Th-{XliZ`Y2JiY za@(5mS_-e@4GC|`cnjwkR?S>&x_R81)YO7c9%b-xUZew$&Xm?l^y{DKV#B0hf_>a9 z8JgQuu&l|d9lat$;Y1b_OB^9BM8g;E45qw!ZuE!>D-UwR7}h;4m%%%A0*P<==(*O` zghB@I&)ui!BsDQ+@L^qWSUkc*ZMr-)=i?MKd?MpToX+4h89o<=FJwHAQyH8h!+Bx& zTE+>S%-|%0oHtF)88o=-YOaI}v`J<)bgte=_<`Z}n}^ad9W)XvY0?D!*#P}>p}mi0 zdY0)+r8gbOXzITV_8Scnn4qU{14-!gl!E{q!z6vRz(9p8l*|+=)JV3|e?mH}v?#4g zdKzt)>84+M1sx1mu>!b)t^_?+GYtKX?7B-(=~eS@5&nBZKe=l59m2jdwC|^c_3^x2 zz%+JW!M+5@A#gYNxclj95!cINLfwfpEqf9DfyrP1?Z~48N3k5^=%V&?`)lhD@WX^f zd5h_3;~83AFAl?@QGzm7!lh9IJc{V1cMw&*5q11VR22=GlxS?g5B8Er@R;epghKKH zlFFfrXi`RgC0l?u;JGWpa|Tm*mi*7rPeLNSOTrKpCHaI!H-|-2{mSSiJT{FdM7e0& zIwIv#ctMn-3Z%%e!ZwN)T4-KNxcJX?+3kLIdk}#$J{Td0muN({J4t literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index bfde8d9f89f3daf9fd5e228a4eaf4c69051028ee..c422c90851fc9020045e9d158652d181f28a04f2 100644 GIT binary patch delta 586 zcmZvYO>Yum6osF+(=v1fY58zs2}(#ndF@JoO|!gdGFiu8^ied_v;T}gKE#PRVK_?MRMam zPncO>X|pQl=d?L}K`~P-Wc_H!oD8$5$dp9&LoOJ7?e!JrIbt_enl4cM%Unv^YG7bh70 zg(fdNK17d4kBEIE_2>}um~<_$&WIIoR`?(|%#Dos5uY1z(3n4BX>QB9Mh~4rzDO|l3Sdjf=P|j>`F%vKRb-L#SJz^R-}E4 ln{tB$+cI!l7IH^?ld(Ty>7@E{KTYSZlCu<)v;|wM`~yOIX7d05 literal 7306 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 literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RoutePrintText.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RoutePrintText.class new file mode 100644 index 0000000000000000000000000000000000000000..bd6b41cea7707cb927e3461e032ae402c2e99749 GIT binary patch literal 2136 zcmbVNU2GIp6#i~^%S^Xhex{{}6xd?Hwp%;4AR-GzSgcgHfNd!P{@w0gyF+JZmYG?k z4<<-TVrWcwK!Qln7z`r5U`YAV7@svh`e@>_JHGhl3-R2UUAv`?56))KnS1Ux=brPO zbMO7>(Ze4A?1mdd9U=;%anxfO!^)HVG}ldTP3ngxPKvC@uxyuM8QuUxq_b;Wfy&Sv zfJ&ZW>U$lBPiG9*i$OsohDO8{G{vzTD;78#^&G>RWN7s4jQyT)(%cmcEuCGN`2|Bv zN;+8;hlXYbHP79A+RhP{Rv%KanjuGDz;Dr zM<@anowT%nXQn)JQAIa-O;?xbA+P0Im;9Og{>`&0dTDMrT(JSqqEA7899yw%Awkow zCknKPU81E{hlv=rewcXkh#A2PDH-7QIG)E2!c7W^>l~_Ou#&SzrQI1v3cDEA6!?@# z+g6r)M-7j-v|Nu{9*jKIn!oVoMq72it9;-ps>$r;j z3?2UEyXDI_68_A!@`D-w!j1Bm-zWS}FaG)Q6@T_x`P>!%>ZLs@2B|N0FY#z#*r`#w zl88tV#ZCnohV5Cqpu0f?dckmA!?yIC;by6A3{U69qV5o>!qG>h3J4t&XNbLM*jXzw zh9wS`3KPN^;}a(JnwGJ%+#KhQA;%SC)XN)0+m6itTP{US5yV(o+Y3U_YC5*U7Htwo zcy=k950NWFNU+^xBa)-mh4D=nt1)&whTXN;{Q!O6H0tr})G#krQj3k+B_}He4VirN zLYjKzHlSABXWO3ZIlMS5yu6)rS1iL@F}#g;6mZ#V6I9^&y=+*g?J1#$DTVDf$g`g9 zOfy`mZM+IFbb5eWIa9bD8QY#J6;q3YudyunaEvHe0)CEXFJJZ8tJ4N>H6+_V0VJ)gCym&l!r*hLjVrrH5#cH!9KFk$Lx37cu~^*-$6Nc z4-J{_ImCwR272bO@-|@)&_9Ch<)2Bn_cXpAA+7Hy)73zCO^?56_S)XC^P=;bP?)<~HyMh-1yd?heS zrlXKdkD!I5O1~J+5Z51|2^Z+T{0OUXnQpz$(2Ot8irZL&yL7?b!#do@2K<7J_!SBK zMy34=n;2bGtPLHk51WIkwMwQ~KSnVo{j+Wy!8q0JD2-%AL(A**c8n~oXn2He3fdJk xvZkh3TT4sJ-(-*AILSI<{|(X!YMeLei)x<7q?{}I409FCv{wHiV? z>M&2Bamu`48fnv+G>(l=Ny`_Qx6^iPe@LLVCpH#A81)(=IvSu0Y_qZ%!^^q0;~N>< z^X#l+OxT{4oshO~c+$OKThf?1YZ-?|Mo)8{s;C4SCZ(TnJl}LIDG=|8CI9oNxJqe( zj)iCxh*+*PeW@Y|Eb2*?(d2zQZKN#IaiklsKxo#{Qufd1CaV7RXu~26i*+o)(piN_ zUG{vLA^vQhF$k+mgg}jF zu|fXQ%L4UfWFsd}?-STDcUlblkITrc=BIqqI)B8>Rgp$g*}QAXQCrob?f1I%D@L&r zJNR~}uLeTB9-QM`8I*#uuJ;YZ^Rjs-XJrO7zBzzialjCUxe8-9_E5vkqMe6@sJr|Y z+L4YY`~zGLwO8p^aCCDR98-P0)0khxF(sRdIPe0k&F#}zrsS%s?4qQ3?GUHFGo7IV z8kGBnB9?U470}W*jZH=9O1HI$&~ue=EmXpzXyRPYusXWRjRu1-O@|D4)F;;pv3Oo%<=(-zatD8+n%D0O22` ZwguWZbZH1{l>Oo>8Z=dd1Wh$K^aH%MkuCrL literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class new file mode 100644 index 0000000000000000000000000000000000000000..2152f5f136057929caeea48afcbe8b437300fb8a GIT binary patch literal 1712 zcmb7E-)|IE6#njX+u5B?p)75&?AEr5c6XIdMXAVA1PjHry9L=&MNQ0fdb1tao!!jL z5`6H{#Do{)lMjaQAZbE)5FToy34efpiser*#P7~5{SnKssQzVF;~&)+Zp zdK-}P!m1BY-}$DoNLD#RYd*g+sc$A*EU z7}7CpVg$!tB1ObXUMOo3Qp@%O$*I6_?*Bmfl8#Y<@m&T>?Z&F~7n**<4lmzzWGi%= zUJ4mxb&Q#K9pn4?d>4eWLE+7|f`}2^rge=vLXwqsqnN~`z}WNqzidDHYx}2PC!XK` zVf(?ue}4a28TWqNzW3X-fj4nN$6F@e#+1O(h|m5o0(wgYt$VMK!o=rM(D9CmcX3i+ z+G#edAlhR!+#sM1Yt0Ru=9+Xv%WkzSpQNR4U5^HV-e@jxtdpp{XI3obSCX)p_;w(D z1MlIKj`vM`py&bV>%!qNwAX z$r`2HGhLCmK^0Z$-*Fw*V87DTnI-WtGwrOaO065Xh);CPo4BMPid{j>$1!$L4t0X= z04)%xA%noKNdupPrTCeN#qNPBag1G{PSBl~Vj;IO)JaeXh_t97oV%T33wuh_n; z=AFevxb6l5Gv%(-`b7c3kdu2Z*@1V7ep=wL#$(5QMaH9uYB1i&fF*%}YG^yRD|YK8 zy@vGK%v{i3twfelZMJH=YsMWwNa0X<-OqmSP*XBJ1nvA6IC#1k4C zD*US7T*MN;X2-sYYn&OXFu9^Of3LbB$4p@p`X&apkbYcwisR{tO}tUaY$2yTjy4LyK;lUuyM>Q7Fq=Mqz>fZdJL81ue1lg56o;n8h$tJ%TCHJBj0j&EPaU)Z#ZFOL4mVN2 xx0JC)?;2*X&K)Y}DiMIYBj3fBk$jC_H)&~6A_kEB7g;f=t4Hbmikmci{U7(Er&Is{ literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class index 5a00068a26ebd32f162b896d9e1e19c9ce1ecbdd..30ab3b3c36f96e9300e1cf2f65fa8458886d027d 100644 GIT binary patch literal 2504 zcmb7GTT>iW5dO{rJIgTPvOpr3M2HY!5hjwLz(SNPBH#ilmxzg%VRwLmxvVp1QJ%#r zAAIn|s=TDiXREA|D!Ei*`2+kb;Wt?JnHiP=rc%0FGiOe3pRc>WzRdpp&$GV(jN=;_ z2~S4vTY7;rB*zTf;P)A-dU{tRq!`+LC9Z$V)kVW9nfj#0 z^(n`-G@gRY(7a2Z{<*pSVzFa-depK;Jx_)NMHsol(AtwfGqcED!`{gDuGFFdjS`v^ zq|waKS8y!VE76Z!wG7WQ99u0KUco8q23K{P8+=#IZECiyo8+5UTxYl*;Kq8EmC=f; z60RwD1#RadUEKA!ZZR|!%C1YuONOP-8K!A?e$cbRvsV>d#|?&RTeEbA^yLU-yoL@5 zoeFN@b%uIB#4KRRwqO7DKAw>XfqyN^fZ8yxv^}_k6u_ zsp#to({C$yM=)1wlC>3KN+y>_6pV_>sq=KcT+wd8m_p@6$(BeyPn-$ecNM&c36gCD zGKQ8@9(?;@EeO?|f=NMR4XMr)WlZ4%3DY9-ne(~x%ZK51w5Ed6%|SWOWYTNmJLXDsT8>rghU;( z=#<@pK4l2wO4!>2qK_!$4;+Vk+|^2RI^T4PUPBUFGPYq#umppI-*q-s4134f*3|$x zAazPBaL3(ccoL;ER183;sY6ZO>&iRMcDa;&DWm5OF71}|81+XHgqWHPA#$2&E*f0V zrch$A#$!J6$^PDpy`NtE`hCY}2Mc#IlabBI4^K{h`T6AOpHbO&PfzytPh~N%<20<5 z8JeJO&eS|l_asniyD!lg$Bu+D!_AkgQkw)+qLUgRLB(D}!=1)EJ*CB@^H-Wkv?j!S z^;eoawAO-}A6Mx9IqiN#HGP4>%n?}TIi%He?Gfq@P=Ab;iA>)C+B3(vd4R4=$1!>i zFc7YT`#$CubiaiZ-5Ureg(fu8>!1nkqd#+>htIiC>2K0H4{Jc-Ebi1`+u^a$DFe+7_% zjJ^m=UFb$aycC{{4QoUuV1IEaa;Rr!Pp(|BbC+!3_ut}?Mz@W>)*R+%A$pyy_ G+WrNYVl!I+ literal 1305 zcmb7EYflqF6g^W4+ir&f~6_+OG5ljCYlHm zKllUuQN}y7ODWhdrs>{!oOAD;b7uGVpP#<~tm3_i1bPf4IeO8@FnDaA+Lmkkb!+$V zSU4d=--`5QxW>?vFH}vWkTzg)WWaC0_s*K3@EC@iRuBk3+?SsCC|y@JHFG~+{aV9|Cb@he%FqUsRamuADAq|Q<+P0A^+4XT_bgqbO?loG0BQ~Y#m&Z3^QQ1s>Wa;(-N#vA)G|DNVDJIk<(~$(FXn^{{ zQ+ht5*=O_+2be4V0K0^-UM!uXzj%q^b4(PcE-`tInK;gW(`lCI`GC@Z?tK!R-hzJm zW$E$_P~kz$Qo-l6J4LA}F<#&$MKw~5koB0vE4-%07~Wt!Zp5O<2-REsj)|`{NI(_p z(~F}zA&&rYLWX6$r4@CGPICWk@HGD*q||HoHnbjBj% zgFnC@<@nv35DMnSVaQ$jo%1c{B)|Xs`~~18N(vHaNh7JE6)A@9Q{&vwZNsVPd&j5T z^chlXmSg$r3@y3*k%Bg4(oj^iL%kKgf8qJO%FtuhU6(ulfmP+ZmTg;}MD8f)L{}Q! zDteG*=#+`-zGdr&hufPBifcIKS~WOibNSNkfI(wGzTnH4Cx+v2d%G+WJy7vb+@|Ut zcY~`j6_4r)r&yc%rQU;W2PKChdhF#}-pBQ>` zJ7J5_&$2~L#U!Q}+Dw-lKHs1`VcoamW>n}hu6|aQaU%7cig_VR#-?mXB9%hTET~w- z5>43Se(}2a{@lOS3witSLdA-(LOX>YhU5&3VSJ=m;qEl!_!yE!QiP$aWI6m}y?V^u z1LN4Hn{26O8upRlTH+jDCjArPm+8`fs9RuQ4*l;iv{tykO-gsty3d_*G0>EuBfL12 za?&X19F3yy+HB2AQvVcl)4w{yyE@W@^8SSy%BpO`E*L^Bd*GXC9a(P3I)TKoAwFo03Y> zhf;hhLar@336vrnHmY4>`G&8PR1Z9|Na`;&aVim~5^>V^B;;HnoS08LnKvzc+GNk5 T$Q3gFYEzr-(U^7!n81g>a%m>= literal 1838 zcmb7FU31%15Ixu5men+MKH5@ffI_g9G%9IJT9T#&moyG`0yxeLkBTfDb!<5!$(`ws zVg_b#n}Hb~c;rVhoO>-hO3(|QvG49`ckkKVv-02n{Qf6^XJ~6kA)QA?M;1AO*;m$U z%j{WR*E~FV<=CM>Zp-!Da9bcX>2u)2;wwr`)-I|6f!|0Lg(iErpA z%dDCHu-?%ykA*xIb=<_QOQ2hCg3##`qCNC|-f`siou=FCxq-sJui-u1$>V(;AKt)1N;QT?+7y%zb$o=61yU~Y&L(+$qT^HPQM6Aj&vSb9jx6Cb z9TjQK4Fks?n+zQ*SQW_I11}_8f$}(?nm{XL^SYZF)?nuGK*#4;pI}xFje*x?@N26# zbPj)F^D6rh;^||B_>qps_(Gsy`;HYlJG>{tecA7cj;G3Rc-B#V8ewnh*pk#J1y0zW z+SjnH_i>r6zGt(Zx*^QykR$+*f@YqB11QT3S2sF7I$ z*Bh?q91Qy>j(=pG^k^wJ2Da5ZwtQFWkuejVN>1Ew{128AobdSFCtbTvDCs)Gv*mc5 z+IY|c*CIn(&6tFuUYiVeenO}?cKWchQ=f&X{J4uOuf#-?_K&sNbeLLeF!XI_*Ole! z(N3*NZj-4cZa7fj`fx2F@D;TbcBpfqF6m@7pOqz7ln*(qPO?^=uVFAln3Suhy}Z}$j_eK zM~&$xA^j63N!2!_#(*i zPov0Q%PudDy{BE)u8Bl}ojA2;6O+0T^Yt=x%WDok7XLt^~Hg!q?< m@qA%L_dg|Wd4Gw-n^PQ%QA_^$0ZkI?AeN>yh0#)AkNyQ%8&Z(~ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class index 7348754502870142b70de443e2cd5fd7ede8c319..74aab94dce3aa96d56c82cb82e56feb93caeabb4 100644 GIT binary patch literal 3719 zcmb_eZF5t{6@FHhd}V1dU<}lhriMC17B5PicMB+BaBas1f^1`lr0unIu`kxuRduf* z?pxA8TKbYUZAk(oB((j|Nhh6YI>C67Oh5KR|3QBP&OhjM`t06oAIDkK;5JQWBxI_Z20vpbm=gnN%tjy+4%$&1|zCi1KyJGtX1zIw_ zlLnFk+q98yz3k@-wo@%zM@`=vbZd_3Cy^4^w7}2av9Z0SQuokMzvJ|KUJ3@JT4bHT z=FI5bWeR@HuFU3pC)=FS(Yv5wcB8LOs9epBL*3VBR)*n84({8KEDV)NT#57(YGuu1nRQ&~=FPig<5-+K0Qv4>us3|Jnk@&7kqQtD_ z50mjJ%&7A#3hZhwiJ1nkd=VUN!Uu4q^_~?d5N-8wo}=(aRZf= ze9>8|idT`VN_77_SIybSMbf^{FqtQ+cEHlDjZ%7 z^z_}}q{y$})@wy;&{k1sQ#ALfKFYE?;<~=)*Uaje<O3#dW6F z-OIwRoOkD~TmTy+%Ai^F-5QJUYV)>3!vJ)M9lC6JJ)^EWU$5rBbm#XtjxSWL2=g;d z2obd!LJXMYa>4ekd=l>o%pZvOq?TX%X!-hw%kRHAe6+j2TQsJ3{_?t>-}vOthgX(w ze6A-qFMV>e!>*}Yn}X1n5Q(4Xi^v^;)|d#2s7u0&jqX*<-FNa!)`pX*Ar za@?kUj;kzg(W$geuXBj`co=;+f`fcIjo>IwBFz^26ypmYSW1S2Ym*9lTJ&9fN!&Kn*~Z0lFr@##72^Tei5gy!-)SG@s^Jo z6oYIZ(sZ^2_6<6nc#{hXy-WhJjzbENPr7h{LC(|ysi2@2aprFQwrj?to+jqh8kp(?6eeGzQJDEC z%rnG%k(e*7fvL_?^`GB1YV#sb&S zCYfnxO3U;|AD|D_>A5Rm3|VIK!+UpE_nf`=+`H?4|NHwN0E^hRQNVzOK?g$^Rv3Hj zzwy1uj}N@9{ntSwRTzF0#$mdoFi@@S*(jo9!FEuFbH;t=T_+7%3geA#k_2)3GHeAe z!YB$m8o6O(1fv$l9E_u)Frp9YreWmm?yj#Y*ohxE+pTO-sn+Ue9TrNM#FT~04nD&b zg=(YS@;Zk}7^hw<>~z9*>@~wqqumU`)Z_VK`p(wI%CeI>z`Vx1qBuJx4{e#f^?l_vuHPUaVAe%qQ5+uLZs7Tv#R*~}47NqmEWp8QA%4*AcYRmG|UIKH(LykXj^&SIU0j~QO z)G@4O_ZXLsFyY=g!n8YggcmVl5Coi^uqxu_!ztLl&DyD_%qHADH-!lLF+}VZC`pQ#+YM zPOY$v74Ar4{ov{I;HyUPsu4VM9(>IRerg2YJrBNV1g{yv^XI`;BlsCa1^8IPgjqnKY&5;f+F==7CoO$>9%a+%bTnfLKIq#Y{7s_d#z?t0xg%@Vdc@yU|ay}>L`URYF+a=CTDpSDL|0{hn AL;wH) diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class index ec2b0c5bba82a00f1e2fd9039a8b5db4403226c3..d4b21ebdb2a27cca1e3cb889506a00f84fa8126d 100644 GIT binary patch delta 94 zcmey({Fiycq{-Zj>U_MJ#m*Utd3mWheu=rM6X)elHe&3tJmDl(nkVJW*Db2`R@dnT?XfZ^>GbQncL$ z*k>4LVk3Aibjt4@GLnvABn=5iEt#R1h7GB5D(8_DT9cWDzZ#Nu%02V>Q%%lyBgcNq z+1b7KuhvP||N7tlUy_rQT$^W6nuv5lhT(j=Q;MHdmb%Tx5O&9lxG>(KR;kV-B9%a1L|)Z2GH~vzz*RD diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService$Holder.class index 9aa2a7a7a9af303af1dfd35cea934cb0a7c6de67..5bccc799fa876035e0ac5bb58253d1c526090020 100644 GIT binary patch delta 19 acmeBS?P1-Z#>6NzS)Iv=QFw9|lM(+RJ delta 19 acmeBS?P1-Z#>6N*S)Iv=QDkx!lM(8q>fG7%XMQuR~RK#I`ks43tmE;I+*;c&w$0p=sSP! z*al#z5N-Oy!qK*9@1iRalWc8*2;&>ts(oTShduy8*K` zG#Y3^OfJwyo^Y;#^Uxw-Zwk*1nTX|n*f7_?$(SdQRZw1N`HKXjGfL#QDgdsu}tQ;2KBtez@_Ld;Al`xYUe8q zT&DJ!G9yIWD`b=FXt7eRcNO*4aFsxYxd}69S&Q0PxIXGe1FkV}Emq0bU4_mRTxVbn zu9uoV#Jv_bYPiY3I;@wKdeFHRw-~q;x5>?VU)LSDQ^Q>b?v}gtUd{mSF>o*LliM6Q ztX&&6YS?7pemo#E-2?5L1qR4gch07;`z9fFO5M}n=Lt8Bu%u8KtYez;S>-M(Qw=%7 zQ+ld59BpWh{cT>bBBGo>+GcgiUvev@EM_EFS3ND5Uo$gQQ=1=N!wodxj^RrRg3nm-H^A>l_{%=}10I^SD(U~Je5gHH!iInp5y_>0FB zV-F*XZx^=V5w(Wx?&b_&-w1Cj`vS^`@(3Kk=c9Ox&kkAduZXLeK3uIMaD>F%Kn?-CC*t4%SoWLTUK;G^sP8cAif%gD$O}eLz^{PEx?h9TQI$<1GV5m zs<){TYqnW=ngb|%da`oXjS)cg7_`qsgu1P#4ra5IjV7~o!paiNO3mcRBFfA0!%7j( zgi@v}ocWeS{1+tN7xK-tEf~f}epSwO7W85Tq0E=I<6<>ap%{y|V!4gQF!y!2GD(b< z+fb#fuT*0R_BeQfdD&^9^5(EL7hN!)hxUAaIWORGjq?ayNaZcW@%(lS!4m3mDMn)% z#_($~1Fl7yZn=J&HhUg=jTP>ET5t6J@Y2x0U8dI<88}C7mu_#~XYCz9gSd zi8oFs3Wf@))aXb>p3J9G>?AHwOZr%qr!KbQYJq+oSgllXgSumH=J%r=w<{uA+B)5j zYs~Q3mWO1}K9*X&y1LmJC$0hwO$2hWh8v37(YoP(e7Q^yG~iwPHp|Sv1$f7_e;4oZ zZRdy&@3Y0M;sf?R!)_+%D}0S_%>H*~{|6kv&p6^&8md1NK7Mb0<6%39-&ujKe*(zI B?QH-6 delta 2770 zcmZuz33yc175?ueGw;pJo5^HCLV^YYhAjjG#sy7+hE0bCwbhi07#WkvLS`m0nIPaY zv;+l3L9bRoP}EjiwVDB&Hc=7xeYdMxw5_&6R6wPRp#Jy0$0VT1_ucpIy=VE)IsZ9t zR!!Yq?s@U+{v80SL{7@{m~eJ)-m|TH`^(~3hi<;^?pY!CX6)Cs&Pd|ya4aJCW!A}E z8KoII=F54`X(tCEQ0>7KEHH2(7793ccvIPViH??d zQ-#uRHqdfdzqY->)DI#P5gk#1oT~5sdEiCdKq*9Q}VwvfE zfsQU2a7}VuW?(6n$!b^ej3Au2+`tvMQot3iuaC47>8K;3Z0w5HCtBL#Wi#92on5g= zM}-$jtkCdN13$w``KjxyX{!uejcWulJ6o1VOlP4WTv($*y;g-9`kqjAtd((XhPXkd zv|6!VYI;r1O$MYgq{Smk6QOuQ$1So^A0uv+YxI*wZ#1w8$FUsk%vHjRld##q7Szxq zQ?26;xl2D@+$sI;5|09Tw}D^am-0gQL|wzZ27ZNK%eC%G@BMf{!*2{ch==4`?y!D8 zQU8h&Ts_cH1kI8Xh(97XqI*I1<7Ka46NKT(489C@~CxjVDMt~hJmfO*cVwY{MUp3;r|-GGH?)w z1jd+bHwoGjU((hZDXR&`WM$ST;v2cnnLjMcB?QSQ90uOU2LXJb3#V)f6b5(jMprj( z1MlH)0pVqEC&=dmBb*{jV61#StI*q7T+`Op+SRU!Y?+l^KI(DyT@Zd`@%aQB*nubE zg-wM^6AENc;3`WW#{H99c2N?=lTL( zG;iL?o|jZN<0uUjLdQsYE292r?#6I8p8pe2j)|y1iRq<;K7mTxi+XzrFVmV2Wq1Xz z66<*CzlPU|@C{1p5C<_*!<&?O+w#lPgS=ICTIIdLb`!&N#sM5p`7+v?iX3_!juSD8 z952E&cJ`^_I2}L18JsiKSWI@P3|QD&)7V8k-m55Q?;8 z@TSJ0Bk;#Gz5_PCm`vpylRUo{BU9Uu7yL0__?+B}IsLSR^!9>&Tr_06s2>eOwoUzn zXbT5hl`(?NfJ*(z3>KKfu+QY%SqytF!~Oxou3^~cF!|@A?iBoxB0oYcqi(?Yi1KYP z-dH-`SUTQC>3A1>H{QW;Cz~`_IBbL&qUb5@NdwCx=YR!d%|dt>To82_hDD~|B7z6< z(th(yZ=9cGpUSRdu=2wWXZB*{idtQ~RoVq5lX?-GSNa@$%xE&Ga!dfs?9mt+X}6ge zT8LpWF+_)8C`e-{z@PAE`fxFY-;d!hyt6QL6NBo7s*;D{=|j6faw7~?;DjoUb-F~L zAIpJ0T;m>h|uyEb%ja4RAt23)?tg0(AAaV)e zuZIbj2bi9MK*op}5974v%bU_+zGFGxJt-(-8-FNUVgI6iYhvN_pi*M*DGpWI= zVJydls*7N^o76P%IhYwvJQc+xGq#bN$R*_nGVG=K3Z6L;PPezZq&TGSyzVjuo2l2!jUHugPqFHGS|1 KzX*sR3cdxRIZ+@0 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService$Holder.class index 217ce2601323f4ac47033b9fa5f1e5b437155cf2..b38ef15b4c064ac60e17cbbf23bdf4fc1452da5e 100644 GIT binary patch delta 19 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 literal 8994 zcmcIp3w%`NmH&Tv-C=TpI3OBP88kc+0^y}rBF{i%Fa#tJ1hn-sxgi7dh%*y3+FHb5 zQP@?sAi)Bq78h}88!!Y2)McOUcDt{-+kL-Z-ORA>?xRJ!|8wu1nL7yt@b@e58}2>d z_nmXTbI$*K=Y01&pY(qKV7}_~q5y>&igXmCM4@b}vE8T%8__K_t2S>ngGq&wM?%q1 za)CnO)XHWJ9)-!)q>f}LToa5%gB|g>8BNyIWgnLtiMEwSyB8V?N1znChLJi(VYI@$ zU@TITXpe`uAQDO>La}H~ODGYHwV0t~O~Q^#JeFVnhb`9fn+<`k47JqtmDwfB>EoNN7 z6KHH&ySTA#nZhFtpPnD}z6;|u+^ypt+?(f#rp`ptjL-qG4*KJEd%vMr&1x}YQ!;KE zkyUakY_LA4<0IDUmdy$poWf>d=+fVCF>?rfI0wFLQ_Fezo1sEhgoLBq z?X|czdofdXJ4<2e&1`fXqreBM=)qitiqxsz^qak@BbWTC_j^-2dk5Y>=1=eGOCP?J z-g9iAXGi+2{R_Q#5D#hijE;xJp10*sP2Z~E(((p~2%(E~zE&Gcds7He3d zqYg{+@fjX0r}SAGR@`LlI0%%mYtXS0jS9t#qCks+FB3ynhFG^Qu$0j`6AfMj@VMle zH3|Oifyz?kVzzII!;xHxZUFfeC_bbEkCE+++@LJ zZ6(oMiinOVVl)~RX<3=rQXh-UsKVP*Z%VGkYWSIC=RRGW?AK&dZ=mp?wIVIEu(H{M zXA~w$N_q3Rf8fl^7QlCRr;i=Da-iEuE~%Z}l2#-d6FQRUU=R>5gVJUu2!^6qqUTv1 z&w(LdlCW~V!uY({x2ZMGf#4(1UeNJ*d_kcoX(lLYwmY(&-0lQ#erT_bn=K(`c$4V) zB6etaNykpS%mvJUB=#ZJdjX59xRdUm^5EiDi-YB%RHwiwXRQ zLXD$$`gB*S>y7lmH|*2vd=B^6*bM7mEA2b;3$l8$f7;X0DZqREW5NahK&c=3z4tl^h*{IYO+ zXxJj?`aV@CC0k)B)t?U@Oct5HrsLN|<|s#|lPSIU4g98t@96j~5qe9de15W}TuJi| z(T5SX+~3jhyHad zzv%c^sbWgvW+b+q+4bMEwF+VSp93xLz&(u6N;ZgBH)Jf}BFCb^-q~Gt{xYl}44lLSsi{vl(A&Yz~v+ zYlsDnaI+B)$-6@=O16bq+zT=TR&y2P%mq9HZw2Iz0!>bFL;pnVW?EtT@QeoSK%pQJ zq%mD)$kc-zk{o|?{2Z){H9DAY6sm4Y4arTiCTZnXpRI*E9vI$HX2+(a5!^=iIW`>G zVL?1w&z^Os+l>ATmbM^PZ_0*FL5RJI7LLJve8pDHxC&1<9PR)WY zz-gh2%clV_51B}UGBy6ndS;InGi}n5(eFF^W4{hxfuD z=v8iHa1;CG4)?)!ub86{`tN8&Tu$rf-S{4e57c~`Dw_v#@6x|-%W=h+{yDpX;?0f2sAS*-`-`#E>IumWC%Z+GD z*i2M3#A4ez+TGVK&Qa+~Re1~7GBmF-eUoecHM&5DMV%22H?e}P^(fvJ&Aigxl|FhZ zzlN}GpxD>gUBZzaewAxNJZjMmR_#2MI=VMKc-0c=K5SXJ?qiCY!W%7VZ|zGj-gvRK zl0rl-lxXv%UbRfsYwA&5Emr|X!VsG`Sg@f%jn<6COC#>L@BZ}dKdf`|25pzSeU~?E zIo4f$4)$3YI%pMMgO#e4x|*$Km8n@ItQNxKx|&G>Hj}Vc2ZmGo^8Hc6QzLTn;2juFuE^H(cCNo8eeTT0p-XBaF5}nrqx~860xOe!e!Gc2!J@ZnID&xRY-ql%_lm`@5|Xpy&+7^l(fm;XvX1 zl`&ok+B4NbDy5P7QT2x?I(-J^)qR-Ik4ZouD)~CS4>kRmoq6@mA$eLK9+*eg<>f{F zn3o-@%?uTn7yIU)$HGGx#Yw(pq@O^N#78aSri%z{pqR(VdsTVSIjo*nQq>EukowUC zT)_H5T*g!7B^U6y0<7m?nau4+aOj{&Xt5;t$qN;L4RMKh@es%e}Vco8-D3NN+KbMu!m2fu>3?1~@2_wbNq z{N*&;i&&yYC@&3513GSyr&49R<|8#yjk4n7BQ;u;(dV=9wz^G;LmPMrHil2dYAjcm zp{V#{Y|`)p{`)bEQFPDkYMkSwD$e(CR%cc9^zx!Ugk`7gS#yhhXuMSy5HAqBUBGtM z6vh2`Ud;7k0e`x9xc6cAWd!Dxl$U%6T{!#AHFQFZ^|qR zw@vvVn_Zxm>ddFo3owpfGnQcqR@Z-dG z6Tc^}#RRNpjC|JGj(CNbA3pS;K z6!F4sD7=bE^ukq?Y53NUu$zvUk_BJV0bh?Be1FL;T4}KOy5Rfk;lcMe8Rz|7hLu*X z`Tn5~|8xio2Q!sSc*V|yUduz7Sk4Sc6#Sc*-45#i5a!&Pjal3L9Spbabi}hnR42wW zIV{5q#O>#a+b=M@zewEfpp#yrBVOj;E*!=#oWPfO1Ny29zdc!__hj+glf`dO7Qa1N z{JxdN?>5JE23D!5S^V;&UlzYtZ6KF<<@9%8yofLshw8NWxvKN{uRi?f6yFP6r`q$D zhU4scmOM^?uBI_m6uGe$a=7gyyo6hTHmf2>8v$1{(Mt-0{bSdwJJvZmB-F*wwkmeU zc!HH+>=MEPUYgM4D}sfWmS zzV*A%`dzH*7^ExIW2(`4TID>gQBA7ZqCKHDs;8{kpR;}q>o;iqn%3_Y>o;W0UZb{g coydt=zwIhc+42E@EUU@{yeg@-tLISu|H!YJi~s-t diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService$Holder.class index 041d2a598655ba388ad7e8cb7d9ab1ed2585975a..bab2adda77f93e8a92443ed9cc7009f143fa5bef 100644 GIT binary patch delta 19 acmey%@|R_UI1{75WC+fq delta 19 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 F{Vy}Pu_gcj diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId3 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFMessageService.class.uniqueId3 deleted file mode 100644 index 96bbfc75094c7380d539a544d7f046be4d42bb9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8576 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 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFUserService.class.uniqueId9 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JCFUserService.class.uniqueId9 deleted file mode 100644 index ce707a42d27039b05f0e951f64090b82f4dacad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8288 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 C4(o#e diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId0 deleted file mode 100644 index d6204b5df5f89662c1538e07b86ac264cb0f5859..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7645 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 ND^B@uswLpqe*h2pS7rbJ diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Message.class.uniqueId8 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/Message.class.uniqueId8 deleted file mode 100644 index 170c3f9ec2de913ca9eef56aaf1095fdc97ca8dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1993 zcmb7EZBN@)6n<{rHd&G1A0P($O-uhO#l*j<8U+g&^&tNxa}Haggm)>QC8^ zn6ybti#BN=_HjRI+Hh&=_{-03#7Jf$M$yw;>FTQ8X1A>%Bk<$o$|ivogJFz8q$bok%OMbH62r! z7Fccex@GU&wH?3QwLQ=7Ipvn^HG3_~_RE&z+y0yKq2+mI+Y(52n`hOQz-;Y5$tyDP zbsc$`HPP)?TN-X)E{%B|H*xC<==vMax4MMb?7J>&9NS&%(C&0>PvJk%a0hqO_&~=! zEC@_p7Hc%B&jd8rbXvV`pyZ3C2pVZqP?mIjh>rwfHu26(^7vTCiuA}f&rHX$I@OkJ z;l7Tdw5Ix=E)` z?DVapA340@L5O(tS|NU{V-ueWWSXvJ`qnP%gt)KzeWv4c<<~!NDL;*{D>}9%HFBQi zH%9h#?CAJHPCwfriW3Qea@}q_rr&odZ$>5)(qubgQsW%gcPfl4j$0?|(GitS$c#NQ zOJKTYJJ!p7_tbKa&C?Do`C6}Oc1}#!mU?JR_-B$64{GnhQi2l>{|5qdA;@tM$+qQ7 z8c*@8TTW{)Ab`NN(9lr3C()?y4VQjnNVI4=`f%bSpBw{*aD&GCi<8D1Y=O9*^PErwm{yiiwkvYPMmk}JxG99Ab;t4?x5oun*Jjj>65 z#pfQizYs@?=f3d{!uSK}AKoE5fOaX)Twr!9VO-$$0E@=z0L#YO00ra003~BSaRCaC zhQijbs?sw)*VzFuiv%l9Q@+E?zlb>$Fwe_#6Ay8Vh;L(uZ@$J|Jg4_#A|n>Ophf=n z<$WYlDamePN|JrVnX5!=mHA~q2Vp-y@lAqWmH+K$H_}eYSPFXx&PWRdWSQz-q=f}6 zu<#0&U~okng!BZ<3i=WYv+M|ZMSdX&YJu?*W{mPT)Pk{>dCInu#&1~sg+dH+W+`P{ zQ3>_HAxtPxn;5)29$c6hd^j< z-r~t6S%St(D#Lu>HJYRrPEz1IQYHYhK_5B44ClA?7Egbs937z%!IBw`@cW7Jk0!*g jPK@XGG_1eLZOi&O5@}Y^CqkQ`nYBoY+z3Kl0X_Z~SgB^- diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId4 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/MessageService.class.uniqueId4 deleted file mode 100644 index fcab91a37da9fffc62889b83e412abccc1963bb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmbVJK~BRk5L}ni&_YT}cmoO-jKnd31P4w54iVgqvx;0fPGvil_!xG>(KR;kV-B9%a1L|)Z2GH~vzz*RD diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/TempMain.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/TempMain.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..1f9ede89ad6213135bda45c97bc5ff7679dd692d GIT binary patch literal 3093 zcma)8Yj@N{7=C7Z$u`Z>C1@#7xmjqpKm&-1ETB*YR=0q(RuL7ayXiJGo5UmwR7L9@ z?{@_iFL>dLAJh-rJjWm4@u%Ql@c2%WrOCGC^us2T_wvj$@B7Tm{{7$ezX0sQFEUbS zlF+Q61+5I(6Z|CCOm0=QLt`iOlF!h()36MGH$zijZd5{=VM!2F^9@tmI4x74U^&BzzBouoUK==~!6pnO+B`hv`FfRz*fr|I?O`bmTRZF;mLF9>#%64huvNib z*jDdTp+Q=t^)M49wiO-JpUy6y&i}sL6JH zz09yBUZ+^_`~^};-`%20_bYfnv_cv;xj)1m6;0@tF^C5xJfvVB_LB-`wJ8#e?RpGy z#kFgWVO92$0P=Ar3+mWSs9gW5{`?#^lY8T%<({_8|aItg(pjX{-y~sV+u;3mbXPx8L=CL zRVP%CKxfA~3e&tmf?Cz^Jlf(~+3-qsSvP!bM6WtS+#qc>50ZtUqi9(A!CG}pcSrb` zNfxzem$*5~T|<0F#%6!QAo{(<1)=8&z8cKZnOJX~=_vWRTOq(D@p43Ns{1M1Et5Cf zc%G3=!cLMi6Y2Me?$u0cQfHF)lvC&4(}1#bcH?#v<8`+PD_Fi>(cQd=%b2`6R^~lo zfjwIp*3Tu5*;6nus=7LtBQxyt(j;xgsMv`awlHj(e}+I@UT{3uPid;HC|?87&2y`G zHl197m~#4!(MBJ(Yi>#3X9!(n>e?9)hXXZduWkD@HFt(|f5I+%9j$mv##y{A;T;9< z;ys47GuN15owO%)tr!%KGWa+z(eXwnNP9K@^-p}UQBpX;0dAE|-RmjZ_GHb8Ux<-# zVv9*6j*u4O;R|<$Q{Fl^ejr82gWNQS4PVb^@j-(?l3PB0igmQ0n8n9)_bEO}U5r_L z+7KLp$Ldg@u0YNCT!xM>6ugY-ET+kDUKqYo@FLD+afS>RgyCBSr*Jxp(+o<%vUGRQ z4 zd3CJLSxn)1^1nbo38~B;2}1-*@`*sVMWAxOI(ivTT*XrYF5b4T7@Ulk1RNodA|r$y z6fLySx`BA{UmLPJgY3>Q0|Z_rzm?@hA3j}P%tF!}_a;mgQ& X4qr#3Z}1(yr+AqVe!!3T8O#0$P{%Ua literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/User.class.uniqueId7 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/User.class.uniqueId7 deleted file mode 100644 index bcbec89f30c02415deda5d356ef63aaaa4b8b4ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1917 zcma)6*-{fh6g?f5NhTvpSTraK2$~Gb;DQ^93y6Xds6u!jk`|hpOsL63%b)O1tkNn` z$_GEdkFvbCXAA*{Dj(AKcITec=Po_Je*gFh;1M=Vq|j!d-9iUC1$y?~cdp~P{;spW zvoFh`K<7i{t8hV}tx()Hkw(UVX(0>iMEK^1dMK*`z2!y_NI!g|s`9n+JXP1oRTEw4 zHqc|C7de40eNiJ+p0l;JvLs*zu3xEDqfM?*ES(IP&!8Uz1_mvh#|42xxmI=R2Z8cK zr>g38Rr8&Ss+VgOsX~YDSK$X|t1bh9l&X-@B)%aF7ja3T-FK@}AQ#2x>^DQA-qp8W zws3``QU~u%jAG2dRSV;o_?v`|FV*~A0pp$PHRSqRfxg0OoI>+&O?KTv0Y!myIgoBB zpHhKiX(!_*EllaS#z95LasD$F99GgHtFH3++B5zxm;|66s z(zVT^Op3m1;U0H6TbJQh%qwuc@NeG#o)ovKPK#7tf$oy><(j_hjl1LN%GJuQx9tXs z_wiwSxW~=6OaI%dc>&?mZPUM zP`Y%m*eo~ij+5`8QZRlXp$MFEn*NV@4RRwbT?}fy!Q8Ahg0fszT#O8l-3*T}HKL#1 z7hoXAV@qC++fO#dlcz1smbTPcZKuzg zK6~;Id3)**!}jPAMhjY7z(eMy2wopy zfh>EhRA`U2rU*TT$9O_o1fCK@q|G7AQ62VI^nE5L1-`aZAD-9LRum9Z3p~Rjop55U z;QVRug+%aDB6#>TIG+f9o(P^k4IWAaFDHU$PlGQef?t5Ez&YQf3UR^GRIqE`aO)HK ztu?#Uf=@SV_A(J~C*X$@@$>&hfl;5j`+M^E!$QO$^W0U=-b)Et9{j#3k^m$+^(VIen5dQg!tVE`CAGRZ8Z{ eCvlCR!4=KC!0TkL*(9!sGr0Igv#vGW;PpQ}YcOd5 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId6 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId6 deleted file mode 100644 index 35c51b56b8b5883d8410c6ca175b2746864d0bf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmYk1y>7xV6orq0kdhR{#507YW=9=ZI#n=4?e02Pk&)vd+u`9l@Bn=%gdKj$a{u(5 zd(Ztl|DFK6W0qpTu##=V-N7p3d83?Dt>Kk&vaLvY?#LdMB>okO@>-`DG0gYkD7Y4; z=DVLgNzaf;OTtqm85YH7Pjp^sUP@sM+4b@}P~D+=P|gm!z^?gt^WtZqE}R; z>Ap8B+s;b*P&x?aPp;nLxiJI7Fgyn&!DNClqS^G8Uv7DVte@wx4~o|i2bf*}Tz^Jz diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index 120e9f3d6b803e81942d13662edc1083fd3ef794..daa259575001c994821b57100811818e5cc7e478 100644 GIT binary patch delta 1029 zcmXX@eN0o!`{12#u&8F?$NF-Ew+6v;0BgbIw>EIu9O18 zR^8gMwJ>F$8jYqgiyBRo8E4Gq5;P-Z#IUJ}HER4siG$&i{juPd_;~F8adL9*`JMYa zxzj{42TG?QZO^{B^Q`-Ndi?H=`OEvSb>`;Nq=zR4@xee?M9zpm&N=_E#$nSG<~fs3 zswMQ}6i*5!x_t~2=o69DTSdQSey+P9&wO#tI&Es6PM62-jb7`0b?#JC_jl$rirrEb zyGtAj*H)xNrASZ);=WL58<+?W3`GKALIn~Vq#Pu|K_;>t!~-J{GQHfDy7>Fldc(!Z z_9)TwW(EB;rI3oqt4nu^XS}Z7)dY4%=jxD}Ms|fzL}s;}&g1cylH>0h(QxcF&tXjO z@F>J0a!C8iLRCgd{CVjg`9b~ZfjhaPrF|+4G%M_TBDkBp~*%JN1WZ*oh!R{_#ZPxjR28t)1(+gXH}jeywY(798iQ zkhcmISzqs6jx83>|1x-Lb@zgd^tR7je`BuUw;QU@8ESFms*bLs z7nYLD@M9LURY|d#YY#p-v!GueYcI>ZKX)uM*=RQj$yL>rUR$&CX!^s_RQ~;Csm)^& zliH6K)A~aqvwY_Jn$!O_-ID+apbSV@)PZ~!DL_HK8e4dvLk5fxss%tI(*YaH_&`R1 z0?67yF@&`MU=AxdRC8Dhp#}gQ6vzw}Y5-)AU!bM{sE2GWFhKSVVBvTp8*@g^D~XBi zsEK~o?r=G=3)9$*J-8Wf$i$=KD~m$B(3;X7jnEY)`NNteb#VDb``&%`y)h9PE(2{t zV`y6%OWTneZ=k9@sSi~Leg1G9X{hprLcV~%1DRXm3wZ-2sxNFL4Iwo+#phKyGRH*f z)lkS&rkdG7GxD2O746BpetXRBqi4G}&A)aiUgkxEh18dO{C>64%op2^H!kYYyX*Af zx7@X(&W-LUcTx-qq=qFm^BXMdzLnn9<5s38p3ZE^^lj;v zp5HIo&Qh*iv#afhjj;zIn3oPc%%AD+q9%TS_P!g=>SRG1gE12pm9K+l>G?&H<=7tQXq9O?o3wgpoql45&*xb2>h4uXd%p~32*G=MgO zRxrz4(0NdvhbWck-uX}#Ky;QQya2io;v$HPAuNHA$C|Kc_@xk+L0k^H0(3;w`XcB{ zkY9$#5du1i;>~pMs$Oj;FT@xr0J&%_YTB& z;aJJ&v6vRD0(}qSM7{KCh~<{|LDxW@sLQh!a=E$=bUnlkaBO5eHIzp51Bjd8*vwdJ zwhuwKpitThwozqwR^cNQI=A9u&}~pcx&RrUfNqB?WYTi<-vPRl-HNo^F1TpXZqQHR z+yf~q9MP({A$c{R-tbxX(k>7CX`kdI4fcr=0dX=tanj@6^5oc{$X}pjY6$ k3h56h*WkX+qN6UHM6H8J^sgrW1Boc2R{#J2 diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/Input.java b/discordit/src/main/java/com/sprint/mission/discodeit/Input.java index 88542352..4d323345 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/Input.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/Input.java @@ -22,7 +22,7 @@ public static String inputChecker(Scanner scanner, String regexRule) { public static String inputUpdateField(Scanner sc, String text, String regexRule, String getNowInfo) { if(text.equals("비밀번호")) { - System.out.print("비밀번호는 보안상 현재 비밀번호를 출력하지 않습니다."); + System.out.println("비밀번호는 보안상 현재 비밀번호를 출력하지 않습니다."); System.out.print("변경하실 비밀번호 : "); return inputChecker(sc, regexRule); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java b/discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java new file mode 100644 index 00000000..1543d503 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java @@ -0,0 +1,20 @@ +package com.sprint.mission.discodeit; + +import java.util.Arrays; +import java.util.List; +import java.util.ArrayList; +import java.util.Scanner; +import java.util.stream.Collectors; + +public class TempMain { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.println("두 개의 값을 입력해주세요."); + int a = sc.nextInt(); + sc.nextLine(); + int b = sc.nextInt(); + sc.nextLine(); + + System.out.println("") + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java index 60eea60e..a155d38b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -1,6 +1,7 @@ package com.sprint.mission.discodeit.app; import com.sprint.mission.discodeit.app.router.Router; +import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.Scanner; @@ -11,12 +12,12 @@ public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { - System.out.println("=========="); + System.out.println("===================="); System.out.println("0. 프로그램 종료하기"); System.out.println("1. 사용자 관련 서비스"); System.out.println("2. 채널 관련 서비스"); System.out.println("3. 메시지 관련 서비스"); - System.out.println("=========="); + System.out.println("===================="); menu = sc.nextInt(); sc.nextLine(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java index 3b49451b..63fcd0b0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java @@ -9,18 +9,18 @@ static void printText(String text) { switch(text.toLowerCase()) { case "user": - retouchText.add("User"); retouchText.add("사용자"); + retouchText.add("User"); break; case "channel": - retouchText.add("Channel"); retouchText.add("채널"); + retouchText.add("Channel"); break; case "message": - retouchText.add("Message"); retouchText.add("메세지"); + retouchText.add("Message"); break; default: @@ -29,7 +29,7 @@ static void printText(String text) { System.out.println(retouchText.get(0) + " 관련 서비스입니다."); System.out.println("어떤 서비스를 원하시나요?"); - System.out.println("====================="); + System.out.println("===================="); System.out.println("1. " + retouchText.get(1) + " Create"); System.out.println("2. " + retouchText.get(1) + " Update"); System.out.println("3. " + retouchText.get(1) + " Read"); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index da7a8c26..2cc8dbc5 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -1,8 +1,12 @@ package com.sprint.mission.discodeit.entity; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.UUID; public class Channel { + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private final UUID id; private final Long createAt; private String name; @@ -34,12 +38,26 @@ public long getUpdateAt() { } /// setter - public void setUpdateAt() { + private void setUpdateAt() { this.updateAt = System.currentTimeMillis(); } - public void setName(String name) { + private void setName(String name) { this.name = name; setUpdateAt(); } + + public void channelUpdater(String name) { + setName(name); + } + + @Override + public String toString() { + return "====================\n" + + "채널명 : " + this.getName() + "\n" + + "채널ID : " + this.getId() + "\n" + + "채널수정일 : " + sdf.format(new Date(this.getUpdateAt())) + "\n" + + "채널생성일 : " + sdf.format(new Date(this.getCreateAt())) + "\n" + + "====================\n"; + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index 379fe6aa..3634536b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -1,8 +1,12 @@ package com.sprint.mission.discodeit.entity; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.UUID; public class User { + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private final UUID id; private final Long createAt; private String name; @@ -87,4 +91,15 @@ private void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; setUpdateAt(); } + + @Override + public String toString() { + return "====================\n" + + "사용자ID : " + this.getId() + + "사용자명 : " + this.getName() + + "이메일 : " + this.getEmail() + + "전화번호 : " + this.getPhoneNumber() + + "생성일 : " + sdf.format(new Date(this.getCreateAt())) + + "수정일 : " + sdf.format(new Date(this.getUpdateAt())); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/index.html b/discordit/src/main/java/com/sprint/mission/discodeit/index.html deleted file mode 100644 index 59036651..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - 질문 리스트 - - -

멘토님, 아래 내용도 리뷰해주실 수 있을까 합니다.

-
    -
  • -
- - \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/readme.md b/discordit/src/main/java/com/sprint/mission/discodeit/readme.md new file mode 100644 index 00000000..8d2c56c7 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/readme.md @@ -0,0 +1,17 @@ +# 멘토님께 +먼저, 제가 테스트 코드를 작성하지 않아서 테스트가 어려운 점, 죄송합니다.\ +제가 테스트 코드를 어떻게 작성해야 할지 몰라.. 지금과 같이 되어, 아래와 같은 순서로 테스트해보시는 방안에 대한 의견을 드려봅니다. + +1. 유저 관련 메서드 + - 유저 생성 (다중 생성 및 중복 생성 테스트 / 현재는 이름 중복이 불가능합니다.) + - 유저 업데이트 (정규식을 이용했기에, 빈 문자열이 아니면 검증하도록 되어 있습니다) + - 유저 조회 +2. 채널 관련 메서드 + - 채널 생성 (다중 생성 및 중복 생성 테스트 / 현재는 이름으로 중복 검사 중입니다.) + - 채널 업데이트 (현재는 이름만 변경 가능합니다) + - 채널 조회 +3. 메시지 관련 메서드 + - 메세지 생성 (사용자명 -> 채널명 -> 보낼 메시지) + - 메세지 조회 (채널명으로, 사용자명으로 조회가 가능합니다.) + - 메세지 삭제 +4. 유저/채널 삭제시 해당 유저가 보낸/채널에 있는 메시지가 삭제됩니다. \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 6d7fb7c1..b34d8e2a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -11,11 +11,9 @@ import java.util.concurrent.ConcurrentHashMap; public class JCFChannelService implements ChannelService { - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final Map channelNameMap = new ConcurrentHashMap<>(); - private JCFChannelService() { - } + private JCFChannelService() {} private static class Holder { private static final JCFChannelService INSTANCE = new JCFChannelService(); @@ -59,7 +57,7 @@ public void updateServer(Scanner sc) { channelNameMap.put(name, result); channelNameMap.remove(result.getName()); - result.setName(name); + result.channelUpdater(name); System.out.println(result.getName()); System.out.println("잘 변경되었어요!"); } @@ -76,12 +74,7 @@ public void isChannelName(Scanner sc) { } System.out.println("해당 채널에 대한 정보를 알려드립니다."); - System.out.println("==================="); - System.out.println("채널명 : " + result.getName()); - System.out.println("채널ID : " + result.getId()); - System.out.println("채널생성일 : " + sdf.format(new Date(result.getCreateAt()))); - System.out.println("채널수정일 : " + sdf.format(new Date(result.getUpdateAt()))); - System.out.println("==================="); + System.out.println(result); } /// 메시지 발송용 @@ -115,13 +108,7 @@ public void readAllChannel() { return; } - channelNameMap.values().forEach(channel -> { - System.out.println("채널명 : " + channel.getName()); - System.out.println("채널ID : " + channel.getId()); - System.out.println("채널수정일 : " + sdf.format(new Date(channel.getUpdateAt()))); - System.out.println("채널생성일 : " + sdf.format(new Date(channel.getCreateAt()))); - System.out.println("==================="); - }); + channelNameMap.values().forEach(System.out::println); System.out.println("현재 총 채널수 : " + channelNameMap.size()); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index a1b2a3bb..26a8f6f6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -5,19 +5,17 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.MessageService; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -/// TODO: 채널 메시지 조회헤엇 -/// 구분자, 전체 메시지 개수 넣어주기 - public class JCFMessageService implements MessageService { + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); - /// 20260115 멘토링 때, 싱글톤 패턴이 적용되지 않았다고 해서 넣어봄 - private JCFMessageService() { - } + private JCFMessageService() {} private static class Holder { private static final JCFMessageService INSTANCE = new JCFMessageService(); @@ -90,9 +88,9 @@ public void getMessageInChannel(UUID channelId, JCFUserService userService) { flag.forEach(message -> { System.out.println("보낸 사용자: " + userService.getUserByName(message.getSendUserId())); System.out.println("보낸 내용: " + message.getContent()); - System.out.println("보낸일시 : " + message.getCreateAt()); - System.out.println("수정일시 : " + message.getUpdateAt()); - System.out.println("==============="); + System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); + System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); + System.out.println("===================="); }); } @@ -112,9 +110,9 @@ public void getMessageForSender(User sender) { System.out.println("보낸 사용자 : " + userService.getUserByName(message.getSendUserId())); System.out.println("보낸 채널명 : " + channelService.isChannelName(message.getSendChannel())); System.out.println("내용 : " + message.getContent()); - System.out.println("보낸일시 : " + message.getCreateAt()); - System.out.println("수정일시 : " + message.getUpdateAt()); - System.out.println("==============="); + System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); + System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); + System.out.println("===================="); } } @@ -139,4 +137,10 @@ public void deleteMessage(Scanner sc, User user) { System.out.println("초기로 돌아갑니다"); } } + + /// User 삭제시 해당 User가 보낸 내용도 함께 삭제되도록 하기 위함 + public void deleteAllMessagesSentByUser(User user) { + userIdMessageMap.remove(user.getId()); + channelIdMessageMap.values().forEach(list -> list.removeIf(message -> message.getSendUserId().equals(user.getId()))); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index add98c20..8d68772d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -4,10 +4,13 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.UserService; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class JCFUserService implements UserService { + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private JCFUserService() { } private static class Holder { @@ -72,7 +75,7 @@ private void updateUserInfo(Scanner sc, User checkUpdateUser) { reName = Input.inputUpdateField(sc, "사용자명", "\\S+", checkUpdateUser.getName()); rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+", null); reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+", checkUpdateUser.getEmail()); - rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\\\d{10,11}$", checkUpdateUser.getPhoneNumber()); + rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$", checkUpdateUser.getPhoneNumber()); System.out.println("이대로 진행하시겠습니까?"); System.out.println("맞으면 y, 다시 입력하려면 re"); @@ -82,20 +85,18 @@ private void updateUserInfo(Scanner sc, User checkUpdateUser) { switch (finalCheckIsContinue.toLowerCase()){ case "y": checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); + System.out.println("성공"); return; case "re": continue; default: + System.out.println("처음으로 돌아갑니다."); return; } } } /// Read - public User getUserId(UUID id) { - return usersMap.get(id); - } - @Override public void getUserName(Scanner sc) { System.out.println("조회하고자 하는 사용자명을 입력해주세요"); @@ -108,22 +109,11 @@ public void getUserName(Scanner sc) { User user = usersMap.get(usersName.get(name)); - System.out.println("===================="); - System.out.println("사용자ID : " + user.getId()); - System.out.println("사용자명 : " + user.getName()); - System.out.println("이메일 : " + user.getEmail()); - System.out.println("전화번호 : " + user.getPhoneNumber()); - System.out.println("생성일 : " + user.getCreateAt()); - System.out.println("수정일 : " + user.getUpdateAt()); - System.out.println("===================="); + System.out.println(user); } public User getUserByName(String name) { - try { - return usersMap.get(usersName.get(name)); - } catch (Exception e) { - return null; - } + return usersMap.get(usersName.get(name)); } public String getUserByName(UUID id) { @@ -137,16 +127,7 @@ public void getAllUserName() { return; } - usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { - System.out.println("===================="); - System.out.println("사용자ID : " + user.getId()); - System.out.println("사용자명 : " + user.getName()); - System.out.println("이메일 : " + user.getEmail()); - System.out.println("전화번호 : " + user.getPhoneNumber()); - System.out.println("생성일 : " + user.getCreateAt()); - System.out.println("수정일 : " + user.getUpdateAt()); - System.out.println("===================="); - }); + usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(System.out::println); System.out.println("현재 총 사용자 : " + usersMap.size()); } @@ -173,6 +154,7 @@ public void deleteUser(Scanner sc) { } usersMap.remove(target.getId()); usersName.remove(target.getName()); + JCFMessageService.getInstance().deleteAllMessagesSentByUser(target); System.out.println("계정이 삭제되었습니다."); } From c77833c844b43492b71b9ac367144f722aca26c2 Mon Sep 17 00:00:00 2001 From: Alpha Date: Tue, 20 Jan 2026 17:58:56 +0900 Subject: [PATCH 15/35] =?UTF-8?q?2=EC=A3=BC=EC=B0=A8=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=EC=A4=91...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/router/RouteChannelService.java | 4 +- .../sprint/mission/discodeit/entity/User.java | 4 +- .../repository/ChannelRepository.java | 4 + .../repository/MessageRepository.java | 4 + .../discodeit/repository/UserRepository.java | 4 + .../file/FileChannelRepository.java | 54 +++ .../file/FileMessageRepository.java | 36 ++ .../repository/file/FileUserRepository.java | 32 ++ .../repository/jcf/JCFChannelRepository.java | 4 + .../repository/jcf/JCFMessageRepository.java | 4 + .../repository/jcf/JCFUserRepository.java | 4 + .../discodeit/service/ChannelService.java | 4 +- .../service/file/FileChannelService.java | 4 + .../service/file/FileMessageService.java | 4 + .../service/file/FileUserService.java | 308 ++++++++++++++++++ .../service/jfc/JCFChannelService.java | 4 +- 16 files changed, 471 insertions(+), 7 deletions(-) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java index 110a1cb4..ce5c677e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java @@ -13,12 +13,12 @@ static void channelService(Scanner sc, int routeCRUD) { /// create case 1: - channelService.createServer(sc); + channelService.createChannel(sc); break; /// update case 2: - channelService.updateServer(sc); + channelService.updateChannel(sc); break; /// read diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index 379fe6aa..4f4c8e81 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -1,8 +1,9 @@ package com.sprint.mission.discodeit.entity; +import java.io.Serializable; import java.util.UUID; -public class User { +public class User implements Serializable { private final UUID id; private final Long createAt; private String name; @@ -10,6 +11,7 @@ public class User { private String email; private String phoneNumber; private Long updateAt; + private static final long serialVersionUID = 1L; public User(String name, String pw) { long n = System.currentTimeMillis(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java new file mode 100644 index 00000000..293de39c --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository; + +public interface ChannelRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java new file mode 100644 index 00000000..f0ba4a20 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository; + +public interface MessageRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java new file mode 100644 index 00000000..0ab7c94f --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository; + +public interface UserRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java new file mode 100644 index 00000000..d1140d7b --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -0,0 +1,54 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.service.ChannelService; + +import java.util.Scanner; +import java.util.UUID; + +public class FileChannelRepository implements ChannelService { + @Override + public void createChannel(Scanner sc) { + + } + + @Override + public void updateChannel(Scanner sc) { + + } + + @Override + public void readAllChannel() { + + } + + @Override + public void deleteChannel(Scanner sc) { + + } + + @Override + public void isChannelName(Scanner sc) { + + } + + @Override + public Channel isChannelName(String name) { + return null; + } + + @Override + public String isChannelName(UUID id) { + return ""; + } + + @Override + public Channel check(String name) { + return null; + } + + @Override + public Channel check(UUID id) { + return null; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java new file mode 100644 index 00000000..625d35e4 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -0,0 +1,36 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.MessageService; +import com.sprint.mission.discodeit.service.jfc.JCFUserService; + +import java.util.Scanner; +import java.util.UUID; + +public class FileMessageRepository implements MessageService { + @Override + public void createMessage(Scanner sc, Channel channel, User user) { + + } + + @Override + public void updateMessage(Scanner sc, User user) { + + } + + @Override + public void getMessageForSender(User sender) { + + } + + @Override + public void getMessageInChannel(UUID channelId, JCFUserService userService) { + + } + + @Override + public void deleteMessage(Scanner sc, User user) { + + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java new file mode 100644 index 00000000..1cfc5b10 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -0,0 +1,32 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.service.UserService; + +import java.util.Scanner; + +public class FileUserRepository implements UserService { + @Override + public void createUser(Scanner sc) { + + } + + @Override + public void updateUser(Scanner sc) { + + } + + @Override + public void getUserName(Scanner sc) { + + } + + @Override + public void getAllUserName() { + + } + + @Override + public void deleteUser(Scanner sc) { + + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java new file mode 100644 index 00000000..f6c0757a --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.jcf; + +public class JCFChannelRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java new file mode 100644 index 00000000..7c6f4c43 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.jcf; + +public class JCFMessageRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java new file mode 100644 index 00000000..55822f27 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.jcf; + +public class JCFUserRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 5e778999..d0aa97d2 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -6,8 +6,8 @@ import java.util.UUID; public interface ChannelService { - void createServer(Scanner sc); - void updateServer(Scanner sc); + void createChannel(Scanner sc); + void updateChannel(Scanner sc); void readAllChannel(); void deleteChannel(Scanner sc); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java new file mode 100644 index 00000000..e159eeb1 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.service.file; + +public class FileChannelService { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java new file mode 100644 index 00000000..f0adb3c5 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.service.file; + +public class FileMessageService { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java new file mode 100644 index 00000000..0df01289 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -0,0 +1,308 @@ +package com.sprint.mission.discodeit.service.file; + +import com.sprint.mission.discodeit.Input; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.UserService; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.stream.Collectors; + +public class FileUserService implements UserService { + private final Map usersMap; + private final Map usersName; + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; + + private FileUserService() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 + /// concurrentHashMap을 사용하는 방법은 모르겠다. + try { + usersMap = Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).collect(Collectors.toMap(User::getId, user -> user)); + usersName = Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).collect(Collectors.toMap(User::getName, User::getId)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + private static class Holder { + private static final FileUserService INSTANCE = new FileUserService(); + } + public static FileUserService getInstance() {return Holder.INSTANCE;} + + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); + } + + @Override + public void createUser(Scanner sc) { + System.out.println("회원가입에 오신 것을 환영합니다."); + System.out.print("먼저, 사용할 이름을 작성해주세요 : "); + String name = sc.nextLine().trim(); + + if (usersName.containsKey(name)) { + System.out.println("이미 존재하는 사용자명입니다."); + return; + } + + System.out.print("사용할 비밀번호를 입력해주세요 : "); + String pw = sc.nextLine(); + User user = new User(name, pw); + + usersName.put(name, user.getId()); + usersMap.put(user.getId(), user); + Path path = resolvePath(user.getId()); + + try ( + FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos) + ) { + oos.writeObject(user); + } catch (IOException e) { + throw new RuntimeException(e); + } + + System.out.println("사용자 " + name + "님이 추가되었습니다."); + } + + /// Update + @Override + public void updateUser(Scanner sc) { + System.out.println("===================="); + System.out.println("사용자 변경 메뉴입니다."); + User checkUpdateUser = check(sc, "변경"); + if(checkUpdateUser == null) { + System.out.println("일치하는 사용자가 없습니다."); + return; + } + + while(true) { + System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); + + String reName = Input.inputUpdateField(sc, "사용자명", "\\S+", checkUpdateUser.getName()); + String rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+", null); + String reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+", checkUpdateUser.getEmail()); + String rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$", checkUpdateUser.getPhoneNumber()); + + System.out.println("이대로 진행하시겠습니까?"); + System.out.println("맞으면 y, 다시 입력하려면 re"); + System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); + + String finalCheckIsContinue = sc.nextLine(); + switch (finalCheckIsContinue.toLowerCase()){ + case "y": + Path path = resolvePath(checkUpdateUser.getId()); + User user = null; + + if(Files.exists(path)) { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + user = (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); + user.updateUser(reName, rePassword, reMail + , rePhoneNumber); + + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(user); + } catch (IOException e) { + throw new RuntimeException(e); + } + + System.out.println("완료"); + return; + case "re": + continue; + default: + return; + } + } + } + + /// Read + public User getUserId(UUID id) { + return usersMap.get(id); + } + + @Override + public void getUserName(Scanner sc) { + System.out.println("조회하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + + if (usersName.get(name) == null) { + System.out.println("조회하고자 하는 사용자가 없습니다."); + return; + } + + User user = usersMap.get(usersName.get(name)); + + /// 여기서 파일 불러와서 조회하는 로직 작성. + User oisUser; + try ( + FileInputStream fis = new FileInputStream(resolvePath(user.getId()).toFile()); + ObjectInputStream ois = new ObjectInputStream(fis); + ) { + /// 당장은 안 쓰고 있긴 한데... 써야 하나? + /// 테스트용으로 추가해둘까? + oisUser = (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + System.err.println("조회하고자 하는 사용자가 없습니다."); + return; + } + + /// 일단 되는지 확인하기 위해서 섞어서 쓰긴 했는데... + System.out.println("===================="); + System.out.println("사용자ID : " + oisUser.getId()); + System.out.println("사용자명 : " + oisUser.getName()); + System.out.println("이메일 : " + oisUser.getEmail()); + System.out.println("전화번호 : " + user.getPhoneNumber()); + System.out.println("생성일 : " + user.getCreateAt()); + System.out.println("수정일 : " + user.getUpdateAt()); + System.out.println("===================="); + } + + public User getUserByName(String name) { + try { + return usersMap.get(usersName.get(name)); + } catch (Exception e) { + return null; + } + } + + public String getUserByName(UUID id) { + return usersMap.get(id).getName(); + } + + @Override + public void getAllUserName() { + if (usersMap.isEmpty()) { + System.out.println("사용자가 없습니다."); + return; + } + +// List userList = serToUserList(); + + usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { + System.out.println("===================="); + System.out.println("사용자ID : " + user.getId()); + System.out.println("사용자명 : " + user.getName()); + System.out.println("이메일 : " + user.getEmail()); + System.out.println("전화번호 : " + user.getPhoneNumber()); + System.out.println("생성일 : " + user.getCreateAt()); + System.out.println("수정일 : " + user.getUpdateAt()); + System.out.println("===================="); + }); + System.out.println("현재 총 사용자 : " + usersMap.size()); + } + + /// Delete + @Override + public void deleteUser(Scanner sc) { + int n; + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); + + n = sc.nextInt(); + sc.nextLine(); + if (n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + } + + User target = check(sc, "삭제"); + + if (target == null) { + System.out.println("일치하는 계정을 찾을 수 없습니다."); + return; + } + + Path path = resolvePath(target.getId()); + try { + Files.delete(path); + } catch (IOException e) { + throw new RuntimeException(e); + } + usersMap.remove(target.getId()); + usersName.remove(target.getName()); + + System.out.println("계정이 삭제되었습니다."); + } + + private User check(Scanner sc, String work) { + System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + + User user = usersMap.get(usersName.get(name)); + + if (user == null) return null; + + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String pw = sc.nextLine(); + + if (!user.getPw().equals(pw)) return null; + + return user; + } + + private List serToUserList() { + try { + return Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }) + .toList(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 6d7fb7c1..76aae7e8 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -26,7 +26,7 @@ public static JCFChannelService getInstance() { } @Override - public void createServer(Scanner sc) { + public void createChannel(Scanner sc) { System.out.println("사용하려는 채널명이 무엇인가요?"); String name = sc.nextLine(); @@ -41,7 +41,7 @@ public void createServer(Scanner sc) { } @Override - public void updateServer(Scanner sc) { + public void updateChannel(Scanner sc) { System.out.println("변경하고자 하는 채널명을 알려주세요"); String name = sc.nextLine(); From 8fc9804fe9e678f3862ded4b5e6260333b57a5b1 Mon Sep 17 00:00:00 2001 From: alpha_lens Date: Tue, 20 Jan 2026 20:58:38 +0900 Subject: [PATCH 16/35] =?UTF-8?q?=EC=BB=A8=EB=94=94=EC=85=98=EC=9D=B4=20?= =?UTF-8?q?=EC=95=88=20=EC=A2=8B=EC=95=84=EC=84=9C=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=ED=95=98=EB=8B=A4=20=EB=A7=98...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/file/FileMessageService.java | 157 +++++++++++++++++- .../service/file/FileUserService.java | 42 ++--- 2 files changed, 172 insertions(+), 27 deletions(-) diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java index f0adb3c5..3faca58b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -1,4 +1,159 @@ package com.sprint.mission.discodeit.service.file; -public class FileMessageService { +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.MessageService; +import com.sprint.mission.discodeit.service.jfc.JCFChannelService; +import com.sprint.mission.discodeit.service.jfc.JCFUserService; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +public class FileMessageService implements MessageService { + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); + private final Map> userIdMessageMap = new ConcurrentHashMap<>(); + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; + + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); + } + + private FileMessageService() { + this.DIRECTORY = Paths.get(System.getProperty("message.dir"), "file-data-map", Message.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + try { + Files.list(DIRECTORY).filter(path-> path.toString().endsWith(EXTENSION)) + .map(path->{ + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (Message) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(message -> { + channelIdMessageMap.put(message.getSendChannel(), List.of(message)); + userIdMessageMap.put(message.getSendUserId(), List.of(message)); + }); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void createMessage(Scanner sc, Channel channel, User user) { + while(true) { + if (channel == null) return; + System.out.println("현재 메시지를 보낼 채널은 " + channel.getName() + "입니다."); + System.out.println("현재 메시지를 보낼 사람은 " + user.getName() + "입니다."); + System.out.println("무어라 보내고 싶으신가요?"); + String text = sc.nextLine(); + + System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); + System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); + String n = sc.nextLine(); + + if (Objects.equals(n, "0")) { + System.out.println("처음으로 돌아갑니다."); + return; + } else if (Objects.equals(n, "1")) { + Message message = new Message(channel.getId(), user.getId(), text); + channelIdMessageMap.computeIfAbsent(channel.getId(), m -> new ArrayList()).add(message); + userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList()).add(message); + Path path = resolvePath(message.getId()); + try ( + FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos) + ) { + oos.writeObject(message); + } catch (IOException e) { + throw new RuntimeException(e); + } + + System.out.println("성공."); + return; + } else { + System.out.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); + } + } + } + + @Override + public void updateMessage(Scanner sc, User user) { + getMessageForSender(user); + + System.out.println("어떤 것을 수정하고 싶나요?"); + String id = sc.nextLine(); + + Message text = userIdMessageMap.get(user.getId()).stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); + + if (text == null) { + System.out.println("실패. 해당 ID를 찾지 못했습니다."); + return; + } + + System.out.println("무슨 내용으로 수정하고 싶나요?"); + String content = sc.nextLine(); + System.out.println("지금 작업중입니다."); + + text.updateMessage(content); + System.out.println("성공"); + } + + @Override + public void getMessageForSender(User sender) { + List messages = userIdMessageMap.get(sender.getId()); + JCFUserService userService = JCFUserService.getInstance(); + JCFChannelService channelService = JCFChannelService.getInstance(); + if (messages.isEmpty()) { + System.out.println("아쉽지만 아무것도 없네요!"); + return; + } + + System.out.println("당신이 보낸 메시지는 아래와 같습니다."); + for (Message message : messages) { + System.out.println("ID : " + message.getId()); + System.out.println("보낸 사용자 : " + userService.getUserByName(message.getSendUserId())); + System.out.println("보낸 채널명 : " + channelService.isChannelName(message.getSendChannel())); + System.out.println("내용 : " + message.getContent()); + System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); + System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); + System.out.println("===================="); + } + } + + @Override + public void getMessageInChannel(UUID channelId, JCFUserService userService) { + + } + + @Override + public void deleteMessage(Scanner sc, User user) { + + } + + private static class Holder { + private static final FileMessageService INSTANCE = new FileMessageService(); + } + + public static FileMessageService getInstance() {return FileMessageService.Holder.INSTANCE;} + + } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java index 0df01289..1f34d475 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -9,11 +9,12 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; public class FileUserService implements UserService { - private final Map usersMap; - private final Map usersName; + private final Map usersMap = new ConcurrentHashMap<>(); + private final Map usersName = new ConcurrentHashMap<>(); private final Path DIRECTORY; private final String EXTENSION = ".ser"; @@ -28,9 +29,8 @@ private FileUserService() { } /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 - /// concurrentHashMap을 사용하는 방법은 모르겠다. try { - usersMap = Files.list(DIRECTORY) + Files.list(DIRECTORY) .filter(path -> path.toString().endsWith(EXTENSION)) .map(path -> { try ( @@ -41,19 +41,10 @@ private FileUserService() { } catch (IOException | ClassNotFoundException e) { throw new RuntimeException(e); } - }).collect(Collectors.toMap(User::getId, user -> user)); - usersName = Files.list(DIRECTORY) - .filter(path -> path.toString().endsWith(EXTENSION)) - .map(path -> { - try ( - FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis) - ) { - return (User) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - }).collect(Collectors.toMap(User::getName, User::getId)); + }).forEach(user -> { + usersMap.put(user.getId(), user); + usersName.put(user.getName(), user.getId()); + }); } catch (IOException e) { throw new RuntimeException(e); } @@ -140,7 +131,7 @@ public void updateUser(Scanner sc) { } checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); - user.updateUser(reName, rePassword, reMail + Objects.requireNonNull(user).updateUser(reName, rePassword, reMail , rePhoneNumber); try(FileOutputStream fos = new FileOutputStream(path.toFile()); @@ -191,14 +182,14 @@ public void getUserName(Scanner sc) { return; } - /// 일단 되는지 확인하기 위해서 섞어서 쓰긴 했는데... + /// 일단 되는지 확인하기 위해서 쓰긴 했는데... System.out.println("===================="); System.out.println("사용자ID : " + oisUser.getId()); System.out.println("사용자명 : " + oisUser.getName()); System.out.println("이메일 : " + oisUser.getEmail()); - System.out.println("전화번호 : " + user.getPhoneNumber()); - System.out.println("생성일 : " + user.getCreateAt()); - System.out.println("수정일 : " + user.getUpdateAt()); + System.out.println("전화번호 : " + oisUser.getPhoneNumber()); + System.out.println("생성일 : " + oisUser.getCreateAt()); + System.out.println("수정일 : " + oisUser.getUpdateAt()); System.out.println("===================="); } @@ -221,9 +212,8 @@ public void getAllUserName() { return; } -// List userList = serToUserList(); - - usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { + List userList = serToUserList(); + userList.stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { System.out.println("===================="); System.out.println("사용자ID : " + user.getId()); System.out.println("사용자명 : " + user.getName()); @@ -233,7 +223,7 @@ public void getAllUserName() { System.out.println("수정일 : " + user.getUpdateAt()); System.out.println("===================="); }); - System.out.println("현재 총 사용자 : " + usersMap.size()); + System.out.println("현재 총 사용자 : " + userList.size()); } /// Delete From 18743256a15e26ab4f4a3f26b75735f6fbe30bf3 Mon Sep 17 00:00:00 2001 From: Alpha Date: Wed, 21 Jan 2026 13:12:24 +0900 Subject: [PATCH 17/35] =?UTF-8?q?=EB=A7=A5=EB=B6=81=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EC=9C=84=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discodeit/app/JavaApplication.java | 4 + .../app/router/RouteChannelService.java | 4 +- .../app/router/RouteMessageService.java | 14 +- .../app/router/RouteUserService.java | 4 +- .../mission/discodeit/entity/Channel.java | 4 +- .../mission/discodeit/entity/Message.java | 4 +- .../repository/ChannelRepository.java | 1 + .../file/FileChannelRepository.java | 51 +--- .../discodeit/service/MessageService.java | 2 +- .../service/file/FileChannelService.java | 225 +++++++++++++++++- .../service/file/FileMessageService.java | 131 +++++++--- .../service/file/FileUserService.java | 87 +++---- .../service/jfc/JCFMessageService.java | 3 +- 13 files changed, 387 insertions(+), 147 deletions(-) diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java index a155d38b..f976355f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -1,12 +1,16 @@ package com.sprint.mission.discodeit.app; import com.sprint.mission.discodeit.app.router.Router; +import com.sprint.mission.discodeit.service.file.FileUserService; import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.Scanner; public class JavaApplication { public static void main(String[] args) { + FileUserService service = FileUserService.getInstance(); + System.out.println(service); + System.out.println("프로그램을 실행합니다."); int menu; Scanner sc = new Scanner(System.in); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java index ce5c677e..f066a88c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java @@ -1,12 +1,14 @@ package com.sprint.mission.discodeit.app.router; +import com.sprint.mission.discodeit.service.file.FileChannelService; import com.sprint.mission.discodeit.service.jfc.JCFChannelService; import java.util.Scanner; public class RouteChannelService { static void channelService(Scanner sc, int routeCRUD) { - JCFChannelService channelService = JCFChannelService.getInstance(); +// JCFChannelService channelService = JCFChannelService.getInstance(); + FileChannelService channelService = FileChannelService.getInstance(); int menu; switch (routeCRUD) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java index 0428ba44..e6c484a8 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java @@ -2,6 +2,9 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.file.FileChannelService; +import com.sprint.mission.discodeit.service.file.FileMessageService; +import com.sprint.mission.discodeit.service.file.FileUserService; import com.sprint.mission.discodeit.service.jfc.JCFChannelService; import com.sprint.mission.discodeit.service.jfc.JCFMessageService; import com.sprint.mission.discodeit.service.jfc.JCFUserService; @@ -11,9 +14,12 @@ public class RouteMessageService { static void messageService(Scanner sc, int routeCURD) { /// Singleton Instance - JCFUserService userService = JCFUserService.getInstance(); - JCFChannelService channelService = JCFChannelService.getInstance(); - JCFMessageService messageService = JCFMessageService.getInstance(); +// JCFUserService userService = JCFUserService.getInstance(); +// JCFChannelService channelService = JCFChannelService.getInstance(); +// JCFMessageService messageService = JCFMessageService.getInstance(); + FileUserService userService = FileUserService.getInstance(); + FileChannelService channelService = FileChannelService.getInstance(); + FileMessageService messageService = FileMessageService.getInstance(); int m; String senderUserName; @@ -80,7 +86,7 @@ static void messageService(Scanner sc, int routeCURD) { System.out.println("존재하지 않는 채널입니다."); return; } - messageService.getMessageInChannel(nowChannel.getId(), userService); + messageService.getMessageInChannel(nowChannel.getId()); } break; case 4: diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java index 0719e76f..0081533d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java @@ -1,12 +1,14 @@ package com.sprint.mission.discodeit.app.router; +import com.sprint.mission.discodeit.service.file.FileUserService; import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.Scanner; public class RouteUserService { static void userService(Scanner sc, int routeCRUD) { - JCFUserService userService = JCFUserService.getInstance(); +// JCFUserService userService = JCFUserService.getInstance(); + FileUserService userService = FileUserService.getInstance(); int menu; switch (routeCRUD) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index 2cc8dbc5..70633652 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -1,16 +1,18 @@ package com.sprint.mission.discodeit.entity; +import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; -public class Channel { +public class Channel implements Serializable { private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final UUID id; private final Long createAt; private String name; private Long updateAt; + private static final long serialVersionUID = 1L; public Channel(String name) { long n = System.currentTimeMillis(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index 54013fb5..e6308b4a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -1,14 +1,16 @@ package com.sprint.mission.discodeit.entity; +import java.io.Serializable; import java.util.UUID; -public class Message { +public class Message implements Serializable { private final UUID id; private final Long createAt; private final UUID channelId; private final UUID userId; private Long updateAt; private String content; + private static final long serialVersionUID = 1L; public Message(UUID channelId, UUID userId, String content) { long n = System.currentTimeMillis(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java index 293de39c..b68702bf 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -1,4 +1,5 @@ package com.sprint.mission.discodeit.repository; public interface ChannelRepository { + } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index d1140d7b..664ba8bf 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -1,54 +1,7 @@ package com.sprint.mission.discodeit.repository.file; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.service.ChannelService; +import com.sprint.mission.discodeit.repository.ChannelRepository; -import java.util.Scanner; -import java.util.UUID; -public class FileChannelRepository implements ChannelService { - @Override - public void createChannel(Scanner sc) { - - } - - @Override - public void updateChannel(Scanner sc) { - - } - - @Override - public void readAllChannel() { - - } - - @Override - public void deleteChannel(Scanner sc) { - - } - - @Override - public void isChannelName(Scanner sc) { - - } - - @Override - public Channel isChannelName(String name) { - return null; - } - - @Override - public String isChannelName(UUID id) { - return ""; - } - - @Override - public Channel check(String name) { - return null; - } - - @Override - public Channel check(UUID id) { - return null; - } +public class FileChannelRepository implements ChannelRepository { } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index adf9a0e0..6b5a7ccd 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -17,7 +17,7 @@ public interface MessageService { void getMessageForSender(User sender); - void getMessageInChannel(UUID channelId, JCFUserService userService); + void getMessageInChannel(UUID channelId); void deleteMessage(Scanner sc, User user); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java index e159eeb1..9dfa8535 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -1,4 +1,227 @@ package com.sprint.mission.discodeit.service.file; -public class FileChannelService { +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.service.ChannelService; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Map; +import java.util.Scanner; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class FileChannelService implements ChannelService { + private final Map channelNameMap = new ConcurrentHashMap<>(); + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; + + private FileChannelService() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Channel.class.getSimpleName()); + if(Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + try { + Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (Channel) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(channel -> { + channelNameMap.put(channel.getName(), channel); + }); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + private static class Holder { + private static final FileChannelService INSTANCE = new FileChannelService(); + } + public static FileChannelService getInstance() { + return Holder.INSTANCE; + } + + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); + } + + @Override + public void createChannel(Scanner sc) { + System.out.println("사용하려는 채널명이 무엇인가요?"); + String name = sc.nextLine().trim(); + + if (check(name) != null) { + System.out.println("이미 존재하는 채널명이에요!"); + return; + } + + Channel channel = new Channel(name); + Path path = resolvePath(channel.getId()); + + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)){ + oos.writeObject(channel); + oos.flush(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + channelNameMap.put(name, channel); + System.out.println("잘 들어갔어요!"); + } + + @Override + public void readAllChannel() { + if (channelNameMap.isEmpty()) { + System.out.println("채널이 존재하지 않습니다."); + return; + } + + channelNameMap.values().forEach(System.out::println); + + System.out.println("현재 총 채널수 : " + channelNameMap.size()); + } + + @Override + public void updateChannel(Scanner sc) { + System.out.println("변경하고자 하는 채널명을 알려주세요"); + String name = sc.nextLine(); + + Channel result = check(name); + Channel channel = null; + Path path = resolvePath(result.getId()); + + if (result == null) { + System.out.println("해당 채널이 존재하지 않습니다."); + return; + } + + System.out.println("현재 채널명 : " + name); + System.out.println("무엇으로 변경하고 싶은가요? "); + + name = sc.nextLine(); + + try(FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis)) { + channel = (Channel) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + + channelNameMap.put(name, result); + channelNameMap.remove(result.getName()); + result.channelUpdater(name); + + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(channel); + oos.flush(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + System.out.println(result.getName()); + System.out.println("잘 변경되었어요!"); + } + + @Override + public void deleteChannel(Scanner sc) { + String inputChannelName; + int n; + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); + + n = sc.nextInt(); + sc.nextLine(); + if (n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + } + + System.out.print("삭제하려는 채널명을 알려주세요: "); + inputChannelName = sc.nextLine(); + + if (channelNameMap.get(inputChannelName) == null) { + System.out.println("해당 채널을 찾을 수 없습니다."); + return; + } + + Path path = resolvePath(channelNameMap.get(inputChannelName).getId()); + try { + Files.delete(path); + } catch (IOException e) { + throw new RuntimeException(e); + } + channelNameMap.remove(inputChannelName); + System.out.println("해당 채널이 삭제되었습니다."); + } + + @Override + public void isChannelName(Scanner sc) { + System.out.println("조회하고자 하는 채널명을 입력해주세요"); + String name = sc.nextLine(); + Channel result = check(name); + + if (result == null) { + System.out.println("해당 채널이 존재하지 않습니다."); + return; + } + + System.out.println("해당 채널에 대한 정보를 알려드립니다."); + System.out.println(result); + } + + /// 메시지 발송용 + @Override + public Channel isChannelName(String name) { + Channel result = check(name); + + if (result == null) { + System.out.println("해당 채널이 존재하지 않습니다."); + return null; + } + return result; + } + + /// UUID to Name + @Override + public String isChannelName(UUID id) { + Channel result = check(id); + + if (result == null) { + System.out.println("해당 채널이 존재하지 않습니다."); + return null; + } + return result.getName(); + } + + @Override + public Channel check(String name) { + try { + return channelNameMap.get(name); + } catch (Exception e) { + return null; + } + } + + /// 채널ID로도 관리하는 형태를 만드는게 좋을까? + @Override + public Channel check(UUID id) { + return channelNameMap.values().stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java index 3faca58b..89906a8b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -28,7 +28,7 @@ private Path resolvePath(UUID id) { } private FileMessageService() { - this.DIRECTORY = Paths.get(System.getProperty("message.dir"), "file-data-map", Message.class.getSimpleName()); + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Message.class.getSimpleName()); if (Files.notExists(DIRECTORY)) { try { Files.createDirectories(DIRECTORY); @@ -49,14 +49,25 @@ private FileMessageService() { throw new RuntimeException(e); } }).forEach(message -> { - channelIdMessageMap.put(message.getSendChannel(), List.of(message)); - userIdMessageMap.put(message.getSendUserId(), List.of(message)); + channelIdMessageMap + .computeIfAbsent(message.getSendChannel(), id -> new ArrayList<>()) + .add(message); + + userIdMessageMap + .computeIfAbsent(message.getSendUserId(), id -> new ArrayList<>()) + .add(message); }); } catch (Exception e) { throw new RuntimeException(e); } } + private static class Holder { + private static final FileMessageService INSTANCE = new FileMessageService(); + } + + public static FileMessageService getInstance() {return FileMessageService.Holder.INSTANCE;} + @Override public void createMessage(Scanner sc, Channel channel, User user) { while(true) { @@ -75,8 +86,8 @@ public void createMessage(Scanner sc, Channel channel, User user) { return; } else if (Objects.equals(n, "1")) { Message message = new Message(channel.getId(), user.getId(), text); - channelIdMessageMap.computeIfAbsent(channel.getId(), m -> new ArrayList()).add(message); - userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList()).add(message); + channelIdMessageMap.computeIfAbsent(channel.getId(), m -> new ArrayList<>()).add(message); + userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList<>()).add(message); Path path = resolvePath(message.getId()); try ( FileOutputStream fos = new FileOutputStream(path.toFile()); @@ -95,33 +106,10 @@ public void createMessage(Scanner sc, Channel channel, User user) { } } - @Override - public void updateMessage(Scanner sc, User user) { - getMessageForSender(user); - - System.out.println("어떤 것을 수정하고 싶나요?"); - String id = sc.nextLine(); - - Message text = userIdMessageMap.get(user.getId()).stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); - - if (text == null) { - System.out.println("실패. 해당 ID를 찾지 못했습니다."); - return; - } - - System.out.println("무슨 내용으로 수정하고 싶나요?"); - String content = sc.nextLine(); - System.out.println("지금 작업중입니다."); - - text.updateMessage(content); - System.out.println("성공"); - } - @Override public void getMessageForSender(User sender) { - List messages = userIdMessageMap.get(sender.getId()); - JCFUserService userService = JCFUserService.getInstance(); JCFChannelService channelService = JCFChannelService.getInstance(); + List messages = userIdMessageMap.getOrDefault(sender.getId(), null); if (messages.isEmpty()) { System.out.println("아쉽지만 아무것도 없네요!"); return; @@ -130,7 +118,6 @@ public void getMessageForSender(User sender) { System.out.println("당신이 보낸 메시지는 아래와 같습니다."); for (Message message : messages) { System.out.println("ID : " + message.getId()); - System.out.println("보낸 사용자 : " + userService.getUserByName(message.getSendUserId())); System.out.println("보낸 채널명 : " + channelService.isChannelName(message.getSendChannel())); System.out.println("내용 : " + message.getContent()); System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); @@ -140,20 +127,92 @@ public void getMessageForSender(User sender) { } @Override - public void getMessageInChannel(UUID channelId, JCFUserService userService) { + public void getMessageInChannel(UUID channelId) { + FileUserService userService = FileUserService.getInstance(); + List flag = channelIdMessageMap.getOrDefault(channelId, null); + if (flag.isEmpty()) { + System.out.println("해당 채널에 보낸 메시지가 없어요."); + return; + } + + flag.forEach(message -> { + System.out.println("보낸 사용자: " + userService.getUserByName(message.getSendUserId())); + System.out.println("보낸 내용: " + message.getContent()); + System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); + System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); + System.out.println("===================="); + }); } @Override - public void deleteMessage(Scanner sc, User user) { + public void updateMessage(Scanner sc, User user) { + getMessageForSender(user); - } + System.out.println("어떤 것을 수정하고 싶나요?"); + String id = sc.nextLine(); - private static class Holder { - private static final FileMessageService INSTANCE = new FileMessageService(); + Message text = userIdMessageMap.get(user.getId()).stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); + + if (text == null) { + System.out.println("실패. 해당 ID를 찾지 못했습니다."); + return; + } + + Path path = resolvePath(text.getId()); + Message message = null; + + if(Files.exists(path)) { + try(FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis)){ + message = (Message) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + System.out.println("무슨 내용으로 수정하고 싶나요?"); + String content = sc.nextLine(); + System.out.println("지금 작업중입니다."); + + text.updateMessage(content); + + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(text); + System.out.println("성공"); + } catch (IOException e) { + throw new RuntimeException(e); + } } - public static FileMessageService getInstance() {return FileMessageService.Holder.INSTANCE;} + @Override + public void deleteMessage(Scanner sc, User user) { + getMessageForSender(user); + System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); + String id = sc.nextLine(); + Message message = userIdMessageMap.get(user.getId()).stream().filter(e -> e.getId().equals(UUID.fromString(id))).findFirst().orElse(null); + if (message == null) { + System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다."); + return; + } + System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); + String isDelete = sc.nextLine(); + + Path path = resolvePath(UUID.fromString(id)); + if (isDelete.equalsIgnoreCase("Y")) { + try { + Files.delete(path); + } catch (IOException e) { + throw new RuntimeException(e); + } + userIdMessageMap.get(user.getId()).remove(message); + channelIdMessageMap.get(message.getSendChannel()).remove(message); + System.out.println("성공!"); + } else { + System.out.println("초기로 돌아갑니다"); + } + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java index 1f34d475..5c0537ed 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -10,7 +10,6 @@ import java.nio.file.Paths; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; public class FileUserService implements UserService { private final Map usersMap = new ConcurrentHashMap<>(); @@ -19,35 +18,38 @@ public class FileUserService implements UserService { private final String EXTENSION = ".ser"; private FileUserService() { - this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); - if (Files.notExists(DIRECTORY)) { - try { - Files.createDirectories(DIRECTORY); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 - try { - Files.list(DIRECTORY) - .filter(path -> path.toString().endsWith(EXTENSION)) - .map(path -> { - try ( - FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis) - ) { - return (User) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - }).forEach(user -> { - usersMap.put(user.getId(), user); - usersName.put(user.getName(), user.getId()); - }); - } catch (IOException e) { - throw new RuntimeException(e); - } + throw new RuntimeException("🔥 FileUserService 생성자 실행됨"); +// this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); +// System.out.println(">>> [DEBUG] User 저장 경로: " + this.DIRECTORY.toAbsolutePath()); +// if (Files.notExists(DIRECTORY)) { +// try { +// Files.createDirectories(DIRECTORY); +// System.out.println(">>> [DEBUG] 디렉토리 생성됨!"); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// } +// +// /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 +// try { +// Files.list(DIRECTORY) +// .filter(path -> path.toString().endsWith(EXTENSION)) +// .map(path -> { +// try ( +// FileInputStream fis = new FileInputStream(path.toFile()); +// ObjectInputStream ois = new ObjectInputStream(fis) +// ) { +// return (User) ois.readObject(); +// } catch (IOException | ClassNotFoundException e) { +// throw new RuntimeException(e); +// } +// }).forEach(user -> { +// usersMap.put(user.getId(), user); +// usersName.put(user.getName(), user.getId()); +// }); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } } private static class Holder { private static final FileUserService INSTANCE = new FileUserService(); @@ -117,26 +119,11 @@ public void updateUser(Scanner sc) { switch (finalCheckIsContinue.toLowerCase()){ case "y": Path path = resolvePath(checkUpdateUser.getId()); - User user = null; - - if(Files.exists(path)) { - try ( - FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis) - ) { - user = (User) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - } - - checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); - Objects.requireNonNull(user).updateUser(reName, rePassword, reMail - , rePhoneNumber); try(FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(user); + oos.writeObject(checkUpdateUser); + checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); } catch (IOException e) { throw new RuntimeException(e); } @@ -174,8 +161,6 @@ public void getUserName(Scanner sc) { FileInputStream fis = new FileInputStream(resolvePath(user.getId()).toFile()); ObjectInputStream ois = new ObjectInputStream(fis); ) { - /// 당장은 안 쓰고 있긴 한데... 써야 하나? - /// 테스트용으로 추가해둘까? oisUser = (User) ois.readObject(); } catch (IOException | ClassNotFoundException e) { System.err.println("조회하고자 하는 사용자가 없습니다."); @@ -212,7 +197,7 @@ public void getAllUserName() { return; } - List userList = serToUserList(); + List userList = readAllUserForSerFile(); userList.stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { System.out.println("===================="); System.out.println("사용자ID : " + user.getId()); @@ -276,7 +261,7 @@ private User check(Scanner sc, String work) { return user; } - private List serToUserList() { + private List readAllUserForSerFile() { try { return Files.list(DIRECTORY) .filter(path -> path.toString().endsWith(EXTENSION)) diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index 26a8f6f6..cc2527aa 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -78,7 +78,8 @@ public void updateMessage(Scanner sc, User user) { } @Override - public void getMessageInChannel(UUID channelId, JCFUserService userService) { + public void getMessageInChannel(UUID channelId) { + JCFUserService userService = JCFUserService.getInstance(); List flag = channelIdMessageMap.get(channelId); if (flag.isEmpty()) { From 5517aac065ac8d68a5c9cfb2e8746f532cd4db00 Mon Sep 17 00:00:00 2001 From: Alpha Date: Wed, 21 Jan 2026 20:36:06 +0900 Subject: [PATCH 18/35] =?UTF-8?q?=EC=BA=90=EC=8B=9C=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=ED=9B=84=20=ED=95=B4=EA=B2=B0=20=EC=99=84=EB=A3=8C.=20gradl?= =?UTF-8?q?e=EB=A1=9C=20=EC=8B=A4=ED=96=89=20=EC=95=88=20=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EA=B2=83=20=EA=B0=99=EB=8D=98=EB=8D=B0,=20?= =?UTF-8?q?=EA=B7=B8=EA=B2=8C=20=EB=AC=B8=EC=A0=9C=EC=98=80=EB=82=98?= =?UTF-8?q?=EB=B3=B4=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 50949 -> 71057 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 24997 -> 27047 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 26011 -> 27133 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../sprint/mission/discodeit/TempMain.class | Bin 3111 -> 918 bytes .../discodeit/app/JavaApplication.class | Bin 1289 -> 1581 bytes .../app/router/RouteChannelService.class | Bin 1494 -> 1502 bytes .../app/router/RouteMessageService.class | Bin 3989 -> 3949 bytes .../app/router/RouteUserService.class | Bin 1470 -> 1476 bytes .../mission/discodeit/entity/Channel.class | Bin 2504 -> 2514 bytes .../mission/discodeit/entity/Message.class | Bin 1725 -> 1813 bytes .../mission/discodeit/entity/User.class | Bin 3719 -> 3751 bytes .../repository/ChannelRepository.class | Bin 0 -> 155 bytes .../repository/MessageRepository.class | Bin 0 -> 155 bytes .../discodeit/repository/UserRepository.class | Bin 0 -> 149 bytes .../file/FileChannelRepository.class | Bin 0 -> 443 bytes .../file/FileMessageRepository.class | Bin 0 -> 1330 bytes .../repository/file/FileUserRepository.class | Bin 0 -> 872 bytes .../repository/jcf/JCFChannelRepository.class | Bin 0 -> 373 bytes .../repository/jcf/JCFMessageRepository.class | Bin 0 -> 373 bytes .../repository/jcf/JCFUserRepository.class | Bin 0 -> 364 bytes .../discodeit/service/ChannelService.class | Bin 509 -> 511 bytes .../discodeit/service/MessageService.class | Bin 584 -> 527 bytes .../file/FileChannelService$Holder.class | Bin 0 -> 661 bytes .../service/file/FileChannelService.class | Bin 0 -> 10768 bytes .../file/FileMessageService$Holder.class | Bin 0 -> 661 bytes .../service/file/FileMessageService.class | Bin 0 -> 13985 bytes .../service/file/FileUserService$Holder.class | Bin 0 -> 646 bytes .../service/file/FileUserService.class | Bin 0 -> 14017 bytes .../service/jfc/JCFChannelService.class | Bin 6277 -> 6279 bytes .../service/jfc/JCFMessageService.class | Bin 10283 -> 10178 bytes .../reports/problems/problems-report.html | 2 +- .../FileMessageService$Holder.class.uniqueId5 | Bin 0 -> 661 bytes .../FileMessageService.class.uniqueId0 | Bin 0 -> 13985 bytes .../FileUserService$Holder.class.uniqueId2 | Bin 0 -> 646 bytes .../stash-dir/FileUserService.class.uniqueId3 | Bin 0 -> 12391 bytes .../stash-dir/JavaApplication.class.uniqueId1 | Bin 0 -> 1581 bytes .../RouteMessageService.class.uniqueId6 | Bin 0 -> 3949 bytes .../RouteUserService.class.uniqueId4 | Bin 0 -> 1476 bytes .../stash-dir/TempMain.class.uniqueId0 | Bin 3093 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 1162 -> 2032 bytes .../sprint/mission/discodeit/TempMain.java | 2 +- .../repository/ChannelRepository.java | 10 + .../file/FileChannelRepository.java | 130 +++++++++++++ .../file/FileMessageRepository.java | 32 +-- .../discodeit/service/ChannelService.java | 13 +- .../service/file/FileChannelService.java | 184 +++--------------- .../service/file/FileUserService.java | 63 +++--- .../service/jfc/JCFChannelService.java | 8 +- .../f0096dba-1ec3-4d64-83cb-bd4fe94476e6.ser | Bin 0 -> 50820 bytes .../2574dc07-95dd-4339-b0f9-5dbd84903995.ser | Bin 0 -> 502 bytes .../725536f6-05a1-46d4-bf60-6a0435f417a8.ser | Bin 0 -> 490 bytes .../db945a4f-5473-4551-b4fb-3b7725dad6d7.ser | Bin 0 -> 420 bytes .../3682cc3b-7613-4fd7-87a3-22bec5c8bc69.ser | Bin 0 -> 50869 bytes .../884600ad-9f6b-4962-8a8a-562a416a0908.ser | Bin 0 -> 50870 bytes .../99b49776-d933-4b1d-8f28-98f081e2ee1f.ser | Bin 0 -> 50870 bytes 59 files changed, 218 insertions(+), 226 deletions(-) create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService$Holder.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService$Holder.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService$Holder.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService.class create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService$Holder.class.uniqueId5 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService.class.uniqueId0 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService$Holder.class.uniqueId2 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService.class.uniqueId3 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId1 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId6 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteUserService.class.uniqueId4 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/TempMain.class.uniqueId0 create mode 100644 file-data-map/Channel/f0096dba-1ec3-4d64-83cb-bd4fe94476e6.ser create mode 100644 file-data-map/Message/2574dc07-95dd-4339-b0f9-5dbd84903995.ser create mode 100644 file-data-map/Message/725536f6-05a1-46d4-bf60-6a0435f417a8.ser create mode 100644 file-data-map/Message/db945a4f-5473-4551-b4fb-3b7725dad6d7.ser create mode 100644 file-data-map/User/3682cc3b-7613-4fd7-87a3-22bec5c8bc69.ser create mode 100644 file-data-map/User/884600ad-9f6b-4962-8a8a-562a416a0908.ser create mode 100644 file-data-map/User/99b49776-d933-4b1d-8f28-98f081e2ee1f.ser diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin b/discordit/.gradle/9.0.0/executionHistory/executionHistory.bin index b30c3fa0a1ec90e9ec210edbe3d6741c78d9fabc..8157130838daa11bcdc7e4491f2875e850b97b48 100644 GIT binary patch delta 7538 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 delta 3404 zcmb_eYfuwc6y_#`3E{OogdooBK?}B4g}jOp@-Q1vM?_Fjc}c?> zS7Am)WEhKp0V-G^Eds(6Yf@^I7Hd(8RDmi;kcV`-S+wnp|LXqS^PO|Pd+zzp-lM2A z&OSl?(he9a7O=ot6{pcbA!VYDOm9kgOx;?heZeZHsgk{cNkWcTlERWD3Hf}^J_+ZG zWT_ZQP8LC{Bm4p^gEcwYD~p|!>sriH->}rhcIr$bt>*w7hX`Z{%#lh{1n?ROFI6NE z%MmzSD33_x!oj|XR3;S5eMLe95lX}`Ux@G|GQLm_BQhQ=;t0j?E>0Q;MirO~`mD+r zEy=U9p+d*gA1%L|b78QP7q~wD&NpIAWeVJ0)$t%ux%J=kLO{>;pGV_D`aK12h8_9)1D09*hy{q5Io+Y(W z?mhPCiYwvl4${wi`2}Q0g{C_zCy>oqjB6Xyv=6`1D}nlzJ|Gl#U{8@&%mbA_-izm2 zOW%c6lQAm~)w|Hg_m>w%}L~my=~z6E-&m@n{cLTZ=uX*%U;!@qUk`kp2S)_ z(EHP-`1Kuj`k4{=Vt;dg-udTW>+VN@YV?7M0NGDTqcaSwdp!eH;y&P3M^d}&8C&_g#!bMR&IqMvA=S0At|$=kwEZSlwKc9My#un0PUFghK? zkl!o}G6jZiiF%Lh(udBLEv?PQT-H2)`k!tYJlLc@7MRu)FtKx{fXyB!Q`1;316bh2 zw8Uh+99E_$t$07gOIzV?1S$>EGoY5Ab&^B~@fO_b9_>iC3LVKPLwA(kL^po6B>Kny zpPid3OyR@46b^z2kXH}u>a$_Yo-^8p(6Lno!<9MLGw5C1q3Y7vW>yXZQ=0)#hvvaQ z-Bk&jl1H=Q*t8p=eg!oK^bR&-23(o6ZAE4j>R@hq#ah2Tr{fOH5}`^r%-1Hl)D;VWZIYzQ1%|a?vp|+6^8Ui-xH3+m6Ca)=1E z8Py0XY1bb-nMXB=Fp>wje zHbx^6U&H(ja@cG0&Yt2HoM6rhYqbLJFvHHe_4oc7iaGYSC?gf?;(Lh1b5v}rH3*_V zCcg4%sQU#chjZ?3eSfsJ`W+t{SuS%Dw~i8EHr8zoSQh11486#wfzy#;>(JOCduGCR zRY%Ey(tbrq=P@V9Bve1}9P)zb)4|H6Bg^eA)L zjKB2#WrgZ?+^r)R+S2G(F%(~u_4IN3>SXM)Em*qwEgrS`iAfTO1u~9Yz=sh@s*H!v z4jQn{)?|Kyu#fCOP~yPbPUV{%I|UrRVRxQifPdQ-5Ig#|Byy1y=1D|SVTvGPaXil!FF)%W6rkT|BoD))9Qlh-QHzlNB(1^v19gTWk z=Jb==Ce|gde}#8+;KSNm&&}YM2_-|ckHa&RGq>xSSnBsMsSRNIHUuGkzq8L$f`2I< z%qXxv^=$4ej{X{oH?2jrbpU2d_*UJ3Ye~VFMswk0 zO%v<4dG+av`*3q6h-I%Wa-P5X?R9j)QG+@^0D{l6P~;Drqh$Si9yNA z%Y+hF_Vet=D1mpgaZ|LBqm7T-sd{cxkPB-r#2GiCRf(?a%XZf&a_>F5^T_%PZmPFi g5qzwPYgT?!HI;n)VTN&qL@IAk*@Ei;9lGKAHxg8Gi2wiq diff --git a/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock b/discordit/.gradle/9.0.0/executionHistory/executionHistory.lock index 26085e7ccffd98bc297c42eada86f8b32170985d..02a44c6c0201dd3766ac09f4367014e0cab3e746 100644 GIT binary patch literal 17 VcmZQx)_UaMM6cU+3}C=`2LL~z1;PLT literal 17 VcmZQx)_UaMM6cU+3}C=`8UR0#1+f4C diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin b/discordit/.gradle/9.0.0/fileHashes/fileHashes.bin index 782f51e2b4d90de3b78b04f75c5084ddd3189cac..b09a88ac54ff42e08880c3293e6e54f1154bbe0b 100644 GIT binary patch delta 3814 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 diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 862edcfa080080d9dfdd1d6a22a5f3c9af00bddb..0d4e6bdd69a6d71d16e56cb9af36ab3c1ab874e8 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6cj1pqV61PcHF literal 17 VcmZQxwaR1i+k`Ae1~6dy0{}Ft1nB?( diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index 263097ff65ae45fa2a79c2a9edce7de04c3625b6..f251d066c5f2c04086cc708f67e34787af3021ac 100644 GIT binary patch literal 8 PcmZQzV4QvLsDc6j2|NOT literal 8 PcmZQzV4QtEBXmCi2=W5x diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/TempMain.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/TempMain.class index 37a8fd1c0f839dcea50c88e44de723424ed1e4d1..aa0837508e2a8e972db420b9ab33febed6b5c74d 100644 GIT binary patch delta 589 zcmZvZPfyfP6vcn919qlV7-m50pMjatk?Eim6%-wDKgsMS0bMqvAvI796rw9OxEBYF zF=9-NaVx}tQRC8uAH${8uVB1w7rG!XJ@@sV^X|F#z4z90-T3k6^EY6Yn_I@z#^617 z-F4PNf63`AxIy5p7w zE;kKy@+Q3uDy;gE5_>LoD4Gm0thxoQG?V3|qIS6Tr2Ol{t7zwigs0KYW;uHO`0&lU z-_JfqZ@)&HpQ4xB69%U^t#iiYET!%(&AB7Sez4fI=VI$olQI>B9(WJKRuC#Ob-NWa z=SsBWhXro*LmvWzK2Z+Cz8e6MJ$3yNZ@`u~oa3gybz>NfPs1{LaP za;FF?8UC1HL;f6zQjOlm0ctm)#|2{=a$FQNQvsKlNOBI7l8Fy*lc7iAl3dTxcqNHNl*eto6&Wm+pvYK)TNoD2R1nDw32U5TUtghq`rJY+*&xUV zB+BJdkkBqxw3K04Sk(6pT82T3(k(NW9Tk|C$&j&}VMSlGNB~|P_ScY8h^bB)x8Zh% zCT`ot6hl`me!Ob>Mb$mwAlHg+tdy`y#vSNkSUR)bSZyMw!fl4FQINB%&5upYvqnZQ z`iOJS3dmGq;Cx0}(2une*2!3pfmoY|r(92~5D=?MeYiECQn%EDj&6D(11W64MhTl_ z+=Nh&BwJ({CKZ{ZkJ(WL40p-68(S&1XjN?PXbc@Otb@LpdzRxfxJ^b5+l87e z$J0s-8>2i$g6AhlA$@lWmhP2tpJ;_NZg6ji+X@=cnZh9Mm+*j$J=jYsnAN6GFqY#o zq{@y}wRN++n*@-HB3V$!Zj|zumY4A$9`c#+CCRWMS}|0~OisAM$j&5{4`IKA12PWc z;doCyYDJlNGc>d8P54_kpTsaj+rQJ(*U$gay`}rwFVoj9o=f79sF7UP&z?!*Q3ix)vY=&nnfUM=Zv(JE=Wr;cb9dx-0#*2Y1y z5D5j{)b>{^W12I<#|*M41*^!7QSRvCJ2W=d3S=wXktsxyHKX=Mh za7mPo&`rFbu$&TkGxaAN2`A_+In$w{4{2`IpeD7)aZlMb>^*f=w$Es6T_Oh#4&pc21cwab2-w(9xqPP<_yV>&9ISS{rofd;&S~1 zyLN69w}QSppd02^@oYHRJR#-u8>6j1Y*n42wnrDbNY}J8AdU-a&Th-{XliZ`Y2JiY za@(5mS_-e@4GC|`cnjwkR?S>&x_R81)YO7c9%b-xUZew$&Xm?l^y{DKV#B0hf_>a9 z8JgQuu&l|d9lat$;Y1b_OB^9BM8g;E45qw!ZuE!>D-UwR7}h;4m%%%A0*P<==(*O` zghB@I&)ui!BsDQ+@L^qWSUkc*ZMr-)=i?MKd?MpToX+4h89o<=FJwHAQyH8h!+Bx& zTE+>S%-|%0oHtF)88o=-YOaI}v`J<)bgte=_<`Z}n}^ad9W)XvY0?D!*#P}>p}mi0 zdY0)+r8gbOXzITV_8Scnn4qU{14-!gl!E{q!z6vRz(9p8l*|+=)JV3|e?mH}v?#4g zdKzt)>84+M1sx1mu>!b)t^_?+GYtKX?7B-(=~eS@5&nBZKe=l59m2jdwC|^c_3^x2 zz%+JW!M+5@A#gYNxclj95!cINLfwfpEqf9DfyrP1?Z~48N3k5^=%V&?`)lhD@WX^f zd5h_3;~83AFAl?@QGzm7!lh9IJc{V1cMw&*5q11VR22=GlxS?g5B8Er@R;epghKKH zlFFfrXi`RgC0l?u;JGWpa|Tm*mi*7rPeLNSOTrKpCHaI!H-|-2{mSSiJT{FdM7e0& zIwIv#ctMn-3Z%%e!ZwN)T4-KNxcJX?+3kLIdk}#$J{Td0muN({J4t diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index c422c90851fc9020045e9d158652d181f28a04f2..834f52a2972f25f6eebea9ad1e3ef02bcea54af6 100644 GIT binary patch delta 810 zcmaJk9FXccHfdnGf}qM`#H1)TzW(N+1PiLv_=deKZpZaLwtJnwUMz-Qz}W@%E(7Yl}=m+d3>3xsfhAe9V)Cs(g2J<+np(`hqrmi5Bpl!^fQ1e(xq zMaiEI6FSoW`J9LneDPRtStp#TmG9Klh7V(8D<6_elyN3!;%!ve=~!g5Kyt|U?lP73yX#7auzblQ3?{SivT zF+!^Dpl>G!t&$@_S!=;DFnbCT|35Gix3!D$3`ZI>F*ik5K}+@YSw=ezG~*nj*e<|% zT&QaqTx5kelMDxB*7Pcr+%j4YuE5RIzHbHHKM=UPjNmGIM{Q|fmNk13X)xE;*CPy*G7hdBEKcr0r Z6drm7fh|5;R&bp|;*isX8;lb2{{Rh1rZ@lq delta 546 zcmXYt%TE(g7{z~gW^ks%<<&B6al}G-wNe=hf{%jYyG>-H2}W0TK}=1k##G}Dw=T)u zxo~CT%7rY@XyeM2|AQv}A&TFHW|HsRbLQNebH0!IO&I?C_w_rlPGc`j22up1d_qk> zdhb`&4Hz_AYNmgf5udas!>EZ>qVIK{x7v?uW!O>yW*W!EFO`T+ci7hs@gE` zy}8UPj&wz)l6WU%UNFDC?CwR;EJNyFlBti*ebiVJmXhsUwq7~^!Icjl?&GHi4jB4I z^kARdXW~sOofgUBL=THSobKUl53R3qKxs`zW%qvk7VlFf{=(vi!>&BnB~mTq?|Jn^YT)2 zf*~5LxfnPY_;?uj83Y&^c#?}!6H8J-QmI7~KdAEZloq7G1vV=)o@8RQ0hx(z-DDY- zT1NKCvsgAbax$XfTvBXfsqW=uYlt4F&)|U^dAB diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class index b946ed2660348b2739dcb92bde3c58796d44b2d0..802ae5e8fe779d8ca88f55d70a3025dd3c0d2306 100644 GIT binary patch delta 762 zcmZ{gJxo(!6o#LJEd|;_P{3#-iU<@@3eiOVHGl{Th(b}LL9cizt+irXivPsL#K9=} zVq6>?bTKiSuyk<1O&1p?V`AduWYEOHK@(3&tYUQe?!DhV&vV{$?rr>3ez#YeO>zDP zQ{>94ng~bjK#v~5gdHEY;MQOo#cBTkXqMugt2z^8eo>nyG@9?S)JN9z;(kVIum><1A6VnE*!<4%{F! zXW%Hv`j)K=3Xle=B9f@zL|IKdUfh0S)uH+4Naf>GI z(9C_cJfM|FwDFh@p0b*FN!I<=LQU*CCBUo~R(_%3$Va`Z|35gSuX~L4yxS55% z*I_$Z#W`Y_C2#!r6e(tKs=ShEoh46O__#ovd=*ycgh_H$yKWhAWj4-5E~zT>c3D}$ fAqlQ=Wi^6ASQ&EYTEh_s75T~_r delta 760 zcmZvZOGuPa6vux@XB_qW#upfh;$%J=)0(WTe597y~mT67$`5GN^zHzjtv}_R- zw`da-Q3OF$xS4jfDq6H@)uxCRt)fkvz@Yny3`8!@<=%78|M$P=+#e-(d^fvfpL!`3 zWiu1wfu6RGplwBmtZ00C+!BmQE7l#cW1)z1YE(Y)Z&25mNfy~2a!d?zg$9RLu+D3n z3PmE;Y!cb*Ks@W0YEVk#pYlG-wnLNF#^ozt#B}HO`g>u}!8$Pj7Si4QucW1s4Lm7szt{#`}5Lrs#=}X}4 zPmtH(Dtd~}O*xAWmyQx0wvLB7RjW=L$K#LCP7Xf-$x-K{eC(2~(v_w-IAI zSJ=T-YPrTPZm^rXnskpk9 zm$qG{i$C;;ha=*pSMuqTBKoC_0r4{^J2@(~3`q;a(#Z)K;G_f@kx@>`Sw>}sF$r@< zY(f%eTo$o#Cia<4+A)A7IABMISaa%bZt@0JW(<|8> diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class index fd59cc7b36cc25a3c6263d772d69d6535da32eed..b2d24109c52b9ede31b7661a2cdcc0c4c6d99efa 100644 GIT binary patch delta 179 zcmdnTeS~|02czX=duCbP;?$zD%;Z%4w9K4TeK#Nx3KR*32r@Eor>B;9<`tJD<|U^x zGT2U>sKE(Wxbc7pGo$rnJ7zgS3_~U}v6M4%Os-2c!AqTgQXsYPX($*GJC-07($o_WP3iFqKNwT9;8 zo6KtLP?Z~xh%hr+B8yDsU@2#0pWMK*!I6`Jg@K1bg@K4BMg)l+W`$5;?ga% z@(;N4gG4I9#KgpfacSK8KU^8lOv`|TN#1>T?z`ul`|f?;!#~67kH5QL0QBI+mik5- z4&b^#Xi;C&W2=^#jt%OTq2d^BXc$3*K>563C0FJc?YC46;id)|qXPbxL~BY#0Jk;V z!Ckx0ce#5^!}uO%AZNIkYHB4lq%a{+zpO7A1KG^1ZcUih0=>MYXRN%yl>OerPn+xdOxh5r%)7rSBbPU`8KMM4LZD)gHl?Rm z4Vm)JC+u?nlD+O94K1liV>y6~Q&iUe<^Lw0*{|i7eoLTvQ*KrQSQBX6lpF1NrBW7n z0L5NcTB8w6;UNSbkxs&6l+l+_LHophrwnXNGkyj^+A8>YT7_!VB8&)XaGG8#>d=mQ z=*&0;A8i~nnC0$x$8my8wX}0ok?0Si$>HW{jJx12w|&If4|F6<(<*K->Jn<$a5GAb z0)6N|0v$PwK3PKl59Sn0;J8}~5Tx|Q0y^FvQg8C`8%*-l`E-sTh#x_4&Lh~zOXzYh z=iI%MopOpRZ`(o54qCPm-|}iuSsid5DlQ{)9vUw+=+^6(hU25A2UB0%eR8T_ozJ_*Fiw9zKpqkIU4=}S)!Od delta 975 zcmZuvO-~b16g@MYnU>eFh1Qz1X^mBj{UBBpl1i0WL6nMAK~NOb0=2f3itPZ){)qP< zShxv8{&1d-uIN=bU@z-1pu8)z7~DKKKmaI(GNjp4?)X z!fhw+=orGZg#K!Ar*e&k(WunR5(eWl-DF|4T3R!*iJp{&%Q|saf=3{?jY=&& zSu{!vUfk0$i=YH|xnwMCty4BMa*DIvyxDKUo=+dQWYI{=mMY6*8AB=3@FRhf7^ci~LYx7~;4)sINYOln5h0}j?W*~eEj={

FEi32{T1V6U&mR4+tgO$n4Y2^1&m_yhy`HqYsya z(kTnwF__r~OIWuwTSOnXMYUwAjcixYYU>IKj`WCW9WkvVR_eIiq=}m*j#6*qv~GUF zEgF~S5cws#&U{3njk#{7hD9rNfF+>&6DnBI${ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class index 8dfc077a6c140a968ab52cbe7a8999679dc0a50a..8682ed9655ab52ea89f16874e39004c5f1bf3df1 100644 GIT binary patch delta 797 zcmZva$w~u36h&`!CT-^_LKK6FL0gh&oQ(q-hZtwYtZgBSNJzj$7jE(qjT<*ETnh>s zM9>fL2mBlHR<|UrbT6u3)qD56q3XTqrdj>`e)|Bhh@&Spq@;X^3v{0AS9&yCh#qGy zvU)Cit)JyG0`Wm(qIfGUFjke!>`2?u{?y)*~DF+hfb zsVZxOJIPYD(HBI5S_LyTU^85FO%pi7w=rvjs^%Lw^>!uYMCKSLC(@w3!uN{77ldmN UtExC3--4~LhU#DrC{%Fx1EIrIUH||9 delta 618 zcmZvZ%}&BV6opTx?F5U|9~4EJ_!C8w;ebG~!$+L;G$PUk2d!rmaFX>D?Ig65&<#D5P<=^ny`Q(i{LNII`Q%MqdJA0s E0=@(@NB{r; diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class index 74aab94dce3aa96d56c82cb82e56feb93caeabb4..613deb9e5c4f2fe3f508e8c36656a5dff48dbea3 100644 GIT binary patch delta 1609 zcmZ{j+iz4=6vn?jozpWtb9w6B;{xg6hrv;j|lb4Ghbn~8*_D(vfv@6h5(A#l0U+{8S z(gI>cpnfU9xRYLR4JM*~LZG`x{%v&0$BjApt0BcjdAK&w@ScVDan-~JD%lU^H?_Zr zkLA2s6raf(W-R=Lz*^a4w#vV1O}RbNWC)x>o!lQubhM+0GZ1)z>LI*{Caw*<#OGOg zHL_>mW!mpS9iOWZ=DY&USk3<$v|s~Td3G1>LmM7MJI>K7MlWD1Ucsw!ZCyw4HLBN8 z?MbXtnmmhh7MzXP_gMcO7a^!1wc6OJMeLG;65)wZO~L1KxNAAQ;dXd8xz_{fp5^q$ z+iAk=Jr!EstZOOWN^?`7FIzGo&4J~C?hS<5uw}T96;TC>ut1v^G4yS@M($FPHdhHm zDn(-V1_*4a5?JE51oB7pD>y6vvDWmen_5f**v@&d%0F6(_Xgfn@#K!Emr(xgo4FUd+#l(L=pZMeJ0+HMs22% zq?8KPZEvi43466{i%zq-BHIk9WtEJ9(8?Wx4!cpW1ZdjDow}D5>-_;;u|+&_jk{6{ zHn3BHM~IEG)Av`&TNU{gRypkuFQ-N2A9lw!Re%!yDDi{D9}C1SoY&cf7^XzuU*Dnc zRH7$HPm(@#2fDvZ9|*qCK+uH_Q}YNlkKRFZu&6}^E>-&X4BxtH!G7u;<#0HrIcC_B z4L@P-5ZCD+ky}K*%5tJ)xsGRnTTOpAB2-FIZ;FXbGZB}`A7i)9pck{)hJlpMtn}6Q gmrGrP%fv!>2k&x@5Wm9l5kBEgCHE;l$CqgP9~hPTod5s; delta 1495 zcmZ{kTT>KA7>3_oW_QM!1_>fa07VOBT`jRJ%R>Om6^$09l+g;{*#TBqWWm6oMq^ey z#HjJuYNAndy2yn$T9v3}QhMW+f501mfxp30-|od_#pPnUd%k|(r@!w0X8x`|Q|-QZ z`{XHrCj9llJysyMpi`nAT>|r>YO_64t+c#!LSi4<1nizf(CViWE~cVaBB^5zW9w3W zvR?=HOZ4kt5rdn12L}?ZBdN~Bkc|Px`uu}_{Ya4PuV3p2hH*gR8&n8*ls6A07>x%m zQW%y9BM`8nE%V!4I5rMS9KvB$Y%Og(B60MC>FWdC##F)`9FzDSX@T;TzdzADIMC$> z?a82*qv60G2!;iYN7ZF(yQ;B0^~|!>YipV%P^W{nYB1av5-sXw_`0~DQjvJk4HrM- z7aKP<_LllT@?6|jqjp;Sri2r-{t%d{X4~cJUBp(KoZ3Ur{*+$Kjw8uC%S7tb<@lu z$+Pr|iRNftb3ekyt@gNOb>o{{m{-hF(krRkZbgoEagNr>9tbPQXkUG#U7AOT)I~--SZ}bz#wE{_Orx0?z2z1;w^1*Zseug!TV~QM&0J?{RB?k#k0 zoy2|Kq!Ho@#?AGEdJAO8hCtSjH-midgE#!kKfSIwy?Tx0LheVxy* QxWhM{-`xm)$DgQp585T+e*gdg diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..079ee1603f0e7222c1aae0b2d42f5d5501eb2071 GIT binary patch literal 155 zcmX^0Z`VEs1_oOOc6J6PMh45|{9OIwf}+g468+rF;^NHwJpGi+;^h34)XWn7qSS)? z;>?o#qDp<|jKsXW)SMu=2s;A{BZELzVp*boPGVlVzJF3yYH|r916Oc?o#qDp<=)Z*gA^wc1@2s;A{BZELzVp*boPGVlVzJF3yYH|r916Oc?o#qDuYH;?$xbIG3G)g^@uZE3qt5KPNFSUEe<`D>b=IU6GbBLg$g0U*H0zzQUp7}x-OaVvEI literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..bfd2aec4644e39b18f5ae16f5916a8a13f80c82a GIT binary patch literal 443 zcma)(KTpFj5XIl6NdqBJ=*Y$f40uNT87N|kKmyd=Ne#U!v8⁣$tx(G4KKSP>4%~ zSOBTA^poE^+2?!y_js$(e_Dnx%RcrgGZpxXd0-=A(mcu!rw|_8B zu|~M4T%-KFWgAq(-m|l6!oG47!$GxX?mP$AKC1_=jk*$yrrKIl-~N0qH yM_rECLn`qS)+K9_B@qiZM5(0)lEYWfix?4dVOQ?BDa@Dq1X~!0lCKd)*!coiJ$h^a literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..19d49684bc829a9b2d325935ac76305c5db1f64c GIT binary patch literal 1330 zcmbVLO>Yx15PeS4EDb4vrW9JBw3I^{srZ06g)h;nQltP9A-QjMP3mg18`<7U{aKul zIPe4bQHZg3sa91;7Y_E=-HAA&?F!peR;a!l-xSlH+8$Od-%OvKZ)IkyoX}A*eL`##X3;sn$f}haz zUTE!4#iz?74-JOrOL4SN=Q0pH&mCr4hT0L;VQ39xEIy>OiBO;YNkpFYK@#}U*jLi- zb7#$*O3iRQSX!$T=N`japoDM!w8Jp#44h!8kr5vTejE$cTV6`UMw$zLbZUd6a=|0g zqIWQ6sOW&9y`Uz87i5SGhyO%?1WgH^p<61=Q6VAHc~}(U?SBh#*;{)mOn%oVi5iMH zw5$$0N-y>!1d!?ZPKpDb2RE7J6TtA?fN18fP%U%fSL_OBnr3Q7$&I-gnify z+Y8_KGy5#C2amoN!z%r?I$8Q+G~c8hC(FpLbiaXpr9}nJJO~u9M(bu4fLmzMj)>t7 z%{IADqh@_q6I(8^n;qtfHgz3s2gb00yHv{hHgOMCviGq?vxR*_qq+!o!@=%mhYMjX zm~C_$4|1><1mp@`<+$a*HggtPbC%CTg0PxA!p?ONJAZ+Aj9mw@cYRCyrCWO98rlC1 DXQDK> literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..1c62fd836aa76900d22a6b237795aec8c040c7cd GIT binary patch literal 872 zcmah{O-}+b5Pbs(x}YE^s2AhSkHmWMgdZ^`o(LwQ+)Jriv+R;?A@OH{PYL!MB1kYg!)8Qh7>-h)<-kUuhkaVLcA z_D;8edBUj*2O=6;6F4z2QDnkE^i8C~zBW!+Jq#n`Li;FgjjzQ8o0~}6t69DPk8toW z3BMm3r9}+vOwNSdIaeT*TPD!$(V(a8we0zvskTBT{jRhoj;G0-yEhTxto3i9^lqC3 zPgyNpG6kW&-AY6nIpd3tl0l$tbEiwlM2b-R1zW|om#^6K#GI8!Fu$TbrlglYEhE`EyOIS&#sH9M=rc?MQ! YG04U@1$Y%x1sdtKH&be_CDN^b0N>D|d;kCd literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..46f255491aa390880643bb9f2fa0da2f9265e57c GIT binary patch literal 373 zcmbtQ%Sr=55UklpqH8q4n@4Zz!TA6mhzmK$qM(xd>|`{(?9POliQs2>5_0eZ{3x+E zh$nA$Lv>emLpSyLwf+Ebfk}Y`=@8inIR*lgM!hK6D*G(&>c;3OFgPbm@lqf?I-U)& zC2*x(C&SW{jk2Q<$XPk3pxxY1l-?{|py>RoZ1j`7DW~N^S!>$+-+@3@^0L6VB5Q6} zU2XiMs#{j}E2mXEQ=WSMBW7_yLEyUj@8L6n;=!%FHdE@a9sKp(Y3~6JF=T7{5S(ld k<2Ez7;Xr=!4)Ml9f`YLh11WYGN1Hz9y30&pk1@gc8(R}#K>z>% literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..fa5adf0d17f6b794c8ed7a8d5d6f54857cd22557 GIT binary patch literal 373 zcmbtQ%Sr=55UklpR@Z2PH;>-bgYyAC5Cb{Ls-Tkl>|~6+?Cyk_iQs2>5p}MQOp_}^rdj9}$hH;4mX@P8r90P%Iqn?#)Rlkt8bz^i87@Sg1;ang+IGh#O z5V+8`lYZ%_53(cg$@X$iUfa2$Ae~uSPrwbD(cP6 zs;iBAP<6}7Ze_J(`HKX+TLH^9Y+takAkg5;17U65h(>afy5)d&oQv4yK`haNPHF*QVKqRk3y^? zL_^80G`lmq(mp=F)*k>S7?((p7RZLkF%TFx>P5*`^-uDqZj25BgLCRBTnMB`$MXVP z0uyaJ>6ecBAUpD&Y%dq&wOtqr(wU|86s&udjee9@)7gVJ?)Fy|$fn#WFsi6G*Q>5J z?q1a`EBlqzs+}uGk^hKUcqT7!S^aD3nLv4GS5BK5#Zd=;_BxHH;}8XZB${C7pD=DS hlN%1?C+`q%EF>ryV;M-X!#LdJImcaQ0(*=JM&J0qTrwfdSJ(&P5&thRQgY1zZKu6TcshMVK-a8Zwe; zlfgVa8(6Rz8eu%)`X!N3$|q858Ap61br_F?Ot}`xOooC#N+tLm8SgoWBB6Rq+<^tN zh!R{28!k3cX7JV_JZZ;jBoYR@kDU2Zo*wbI<_#nU7dnT!mz|7u=j^P&^J&}lo?G%mM8 zVke#ov=;QH!crX^k>Uo8oS~j+PCJ7Z&76=5MVve%pFf|2y)M#QWV1AIi7HulS%7Wq vP-J8G_wez88Yq3hdYGg51}CFn_@lUji9Ny$)Udzs77oZeR8^ucQHS#bhPkE? literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService.class new file mode 100644 index 0000000000000000000000000000000000000000..7ae4bdbdaf59b75b479e75017f77bcf2ce492e97 GIT binary patch literal 10768 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 literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class new file mode 100644 index 0000000000000000000000000000000000000000..e658eac1750bd7da81c91c30b0015a4eab73251e GIT binary patch literal 13985 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 LscnL-j9mW)Fyb5x literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService$Holder.class new file mode 100644 index 0000000000000000000000000000000000000000..650a56ebe74e25374e9633afcc6e71f0f5d1e207 GIT binary patch literal 646 zcmbVKO;5r=5PjPMEu{(~e&NML59+}^X<|U55)CAz9zYY1rL4N7v}U*Pzl;YGP5c4= zDB~1}CLYNqGdpi*-|W2EukZIy0B6{CV8FDHagjxip)~NvJ`erqiQo1HB1jl=bs5Rz zoWa~bxVK<4oCfib>lY=Xgb$_GGLCp(>LBh5nQ$%CSO$VW%24ndGIxY@W}pKLW*!B& z7M5HrqsVZvFxy@;4*Nne*e$Qqz4RK_47K*cbTx)dgL+^nwq+!|(Xb~}*YAadl-qIO zhxfjcX*>rr$+Of9SBsaNcR-cxdJxWab~^D$1tOJ>q4H0`qjW%&?g^bVV@>mMTTvub zBlNWv^qSmE6zq`72F;kEn(9nDgBA^$kP=0lJR_eyoPfPfk5|a1$G|blWZhW;R#BnI t#@g@Y-6=It_<;2=LH-R+O2P0)aRL+Tgc;bt=G0r*BJWUEfxbZ%&JR=}poIVc literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService.class new file mode 100644 index 0000000000000000000000000000000000000000..928c587f2d5090842d8083abc7eb66f1a672a88c GIT binary patch literal 14017 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 HORoO{a^A~! literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class index 5f1e85bb90a1d4abf7aad670539d48af52cad834..58973021c706399f4601eb850d46e5d9dfacbb62 100644 GIT binary patch delta 46 tcmZoQY&YB>z{AIzT$GwvlIon1n3tEDGg+2r9UpILK?*`>^9`Q0+yHML5R(7^ delta 44 scmZoSY&F~`>TRXAec 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 diff --git a/discordit/build/reports/problems/problems-report.html b/discordit/build/reports/problems/problems-report.html index 577eaec1..9f2ad7b2 100644 --- a/discordit/build/reports/problems/problems-report.html +++ b/discordit/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService$Holder.class.uniqueId5 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService$Holder.class.uniqueId5 new file mode 100644 index 0000000000000000000000000000000000000000..622ea8b93e7dddd99c33b9576557de5cdf58a1a1 GIT binary patch literal 661 zcmbtSO;5r=5PeI5mQn@r1I3Gp9@K;T14I&RFpyw9KuA0;WyK|>HQmDhG9E}Y@dx;$ zj8hC?vLOxR3k491@T+4W_e950wAo(4cd#SY;%iapNVZtb& z2*<>hgKd-;+)W72+EFl)F@x3ddi|#7wip`SO&G5kvMx2lQ0l5sdb8f#WOT=hFYpQ?J~4z=7f|f;^Z0m+~or7b(!8Fo2G##DrB8i0d}!R uk%j%=!>3DXp!fmvae=}c?39AxkKz^v4hYMjio>NhaYWvxsv>=f8tfnFkfv$? literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..e658eac1750bd7da81c91c30b0015a4eab73251e GIT binary patch literal 13985 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 LscnL-j9mW)Fyb5x literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService$Holder.class.uniqueId2 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService$Holder.class.uniqueId2 new file mode 100644 index 0000000000000000000000000000000000000000..bc30adf2176dd9673be155ad36cf018c09307215 GIT binary patch literal 646 zcmbVKO;5r=5PjPMEu{(~e&NML59+}^ssW8kG?0*b08KoWvg(r3n%%VcuymXYvA!=6xGzZVixZpVQi z-up_X@f^$~&r&m7Enafo0ado^K{(gh>BJ)yh*Ua;%0C5<(g9JrCv?(`HOvG-HNpsx$2jS~O%rN)&POjC}TR0`@vRULl(v1IH+nb!Q1!MTH_8 sYrmIwr_?~<1J=U?`8PNz1;Zc32~4aLW?%!GQ*U95yhB+9`UX`vKUFiJi2wiq literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService.class.uniqueId3 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService.class.uniqueId3 new file mode 100644 index 0000000000000000000000000000000000000000..0bfa6fee5c794367a618f7e1205a9e5d80e33814 GIT binary patch literal 12391 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∓h>HNM8bB`y;H<%W4*s^{ZySA;cH&(``{^JcX}n{m zb6P3J3E%DX1Z7YoYP;|oncZ|X?M2V0K;-}^KMmT4Kz%>x90Jw-_;&=<4&h%jJx_<} z1v&~x{2V0mJpB~4-y_KQ8yt#8tvrlgUnHLuvJCu7_gr9TmkLR@1|GC-DryB5QR7177aaV28~_ZVXp@Lm_kg&&{6 zag~u4#|ZGY1h{=)qcaJgWpzXGj|sS(gUY5_M}q*y6P*K@ULS;Pg604dnm`hQDSZeE zwIs4xTS1AF&WgoY0-){YubFU*z*kF*H$1NU2IS(p-!h9^l>Zn?!x%qpRMAML8gT;A zTnDUHrxJ=peTV=Qiv_;J<19u=7|V)@0Pg~s7QzSaQgV7@M1n1n)pJ6}IVLWcz- zcAI-ER(s1I%u^7zl#hMQY`#%7o8}7^%65Wpmf#cy46Ydltl_kuO@E-9 z=#OAe7fq*bQ27(+`~{T$On1Yqt$;49hB>Q;$=XJLQ!Jbc4%}_}R6v#g=kO`i`}N;d}wn1 z4(z(1lV>W~3zy5|@EF_6H3&OjLoCyxxHL=21<_mzEHuv+8~^5R`RcNXE*s#v3U(5A z(9nZ_AR+oE7O;LDmGJk zkqtpC{OZ`#v*bfFrIi;zsW%mzwrnL0ChSUZZzJU)jhcXWCYD)@cP^gto(#n;!JB9_ z&A^t8cMRWWsJiivdqO2!&O#iL4OTemN*+w3@y_K;nt}369-`QhhnQp-`ztb#R*ufY$^6HRdsgPu6PGnz%ikw)Qn`b-N^M-@C6Nu%M|?*3aYCGGvtR;B9q!n zke_U374Q+yuJT}LEWr$_)>sBrYbb-NHIhNq8pxnJKpYca>@^bi(VM{ATj2Kh=^FY0 zj%R*|6#8wX2tT5w`2EpJ`~pcfV;q;PQYaEj|D4+L^ZWwdHf&)W+#n(4$Yhv7KCYe} z>UmNiG@z{FZuthhGEkf51QFw^ixK{0{#_efg<+{#>>Gl7Gb?m_0w_kNCHk VOMWgh4hLVqgAx3g|G-`3`Zo(}D|r9_ literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..834f52a2972f25f6eebea9ad1e3ef02bcea54af6 GIT binary patch literal 1581 zcmbVMU2ha+6n@_Aw6om~Qo3!arCk<3aJR}%DT=~U6w&J9Qjo!_Fck!^gt6h zX4R^?U-uk0(5sH`J2h9o?*<68ssuij`=w?{k+6%1fFeHiz)PDK*gYj zy%-WmZ{s7N#w;r?gXCIKHdLvYpGjg^AiI988UC=awz3-Dyd8bl%trHz>)(8_etjvN z|2&*uEXY(NGSBFiIE3Q3bBv>6zrdatLL+c0x?!2FYkQL60S%Agae;&*QT$7#8thY->$9xlEgCtqlXLG z=+mF08%xp6ud{2vUJbv$osF6c;cw08%f%!L0>cw@S#E~S?d;8s z4~0k}g9!~s@GJ}O+8=XJ*gXzlNm`C-cpfhZB&DV7xE!B;j?aV9Z5K0z<0z^)p>fbT zzl9y=%dFRRk3(X6`h{2sbjEjqz3oD7>_@RATlJE__23Ay^H2-g_^!{%`z)9rsv3eTd4#eI=;Zf&g&uJZ%I^Srm87tWia>N!_~>p z&~AEjjGf-b%)+<#SD?6a?w$5L24TAm0a4=Q`WCabuxzTPz%C;&t&h%{^_aE_dZ&z9 z!?SGpaY#6$Dp5jfX6qKD~D-g@E`DLEc40Pi(Pp##ESMX}A zo5E|<@Xta)2Nde;RjB1V*!A>Xq$&Cyy^DQ+AoK1WWLNOSv{XGsm6Z9mq-%UX)RuZ% zNTaqwML2(5>|)9B@}r*V*PMgapjib0&@ z(=ml1Ok)@Z_Te3j;(hFo35~Tt<8_o6M}dhmc!QJ-^r4KitWbs&r*V$?&eLNQiF?SX Ye9={8?lZKa;!R!!uQUr>;F*B&4`emFO8@`> literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId6 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId6 new file mode 100644 index 0000000000000000000000000000000000000000..802ae5e8fe779d8ca88f55d70a3025dd3c0d2306 GIT binary patch literal 3949 zcmbtXU2qgt7XB`oNzV+Opb1fDQFl<3BqSN4u0jR_@)I2m0huJI>!O`W6B=fE;!KAh ze<2$b16A@61QDrVNu{*3ifD}4)v~PGhgBbZ*{6Nks(rGG>6BGl`=C_{ez&J*n1L7w zrmDNsx6k?RIrsa{xp%(3@b@nPJc!oeUS^oYB*}jkq4( zZY1<@8*g14iRA_b=J)AV)XZ3#8P^3KtgUOmZm>uIl~|zQ1{v0k0;}eRv~GuHntGxT z*_t`WQi{NEsVRvJxf?5@Is28}=0U5B2 zL^u|gG^GW6roPu|H%!WAA*s3~Sr0>9jE+PBauv{p6@I(9L`}XOh_UVJ! z!-ukm-)r*WK56{sM0R8(d*;;DR<#oMt9Sq_n2nKfrIyR)q3h1Zg(15wWOv56$A_{* zML|nZuTt4F*a|A*l!m3dIul5`aTN0uxu#Xk$8k-@4h41HKCBT~T&&2cndMlGwJO$O zJp&%-?=22^&24{4}V&a$|ICYb5n?AH`4^6>9>xt0trF@A08E`zo*Ha z%|3oqf|XQjiM_0~b`=}Z!Mc=16*bug*yp2??9D13#}>++CFC;QmSX=ldu0(e*3N~p z06Nj7pj*XOJRz`b)&}hsoGT3huiPnm1*-DJ?#QgGE4tq4v`?w{GoCJqGinx`tBaX- ze58Q333OkTJcpyfkL=M?S8~L@_x4e_>Yt2WPS~@upz=kZ{otVe4toJ>{mswMe|#jA zJ$fQLcp}#>tI?w(?&z~uPw0h$Qov3XnRSh{{{C>9U0Y9wx5!6n%NOvh;~p%qK(@(_ zfn<-K?$mk`9I0wg#kEAYmNw+OJLs`?7#VKDvr{_zoDqS_%$FhLmfqRafpS+>IP7-F3?u z3htjGDljh-rv`IgC4Er9?=ZElYYRKk`~gl8%O8TS(j;m6nzOTl32dBfS|6$}Z~&MNOB)=6wEHIR<$@&qYx%M5aF zl1Bh6MlTPu@^2p4G*Hg_cD{xA6nuK?KZ6)|KKJo1KZEDS9lWbK0~pxJHy?H(!4W!p zR=~qU9K@a}C>y6x(J_Up7SEy&XeK0z#PIOComYm}yBu2nF>bE9Z4!U1pTu1)F^gfif3|B6s^pRNoZs6jE|Gc7Ocevvbc?e7<`sNF8u$niuZ+F z{2CH=6DmkS12u3T?x4pK`qa|vEA$RNt{(Q*I_8n*1jXm%(6BmW~EXtuUdKZN` z3|_#CWY#BAc!?`th6?7o3$KvP{WSdt7FaVNd)4u=! literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteUserService.class.uniqueId4 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteUserService.class.uniqueId4 new file mode 100644 index 0000000000000000000000000000000000000000..b2d24109c52b9ede31b7661a2cdcc0c4c6d99efa GIT binary patch literal 1476 zcmbVMOK%fb7(F*}7{?w0Ng$zwfPp~l5Hby=EyN@|0s(`08p3)qxr7Phu{ATMu&b&r zs=}g+R;pN3UbM1`Snv!FRs8|{6g>O^gb?SBEl7A|!ASRhGw1v6_dIu=zj^jQfN`8i zparcOVmjKeLSXg0dDS!=)15O;&&*3J5LmI#cI{w7pf#PDP9TnU4GA4d=mLAKQql0s zp6v!k(e{12j!uG*F~F4>MWrnp@oQfPnz$vGM1Tt6^fOA3sqGx;xe zmQ`tW=val-0tw5LW)Q^^=t<|JiYkHa7zN98UFl^TWpwH2j_fPt*`|Fv)}lv4ua0&2 zYDqH+*Zn{i*@IGrEm_-eYL|>Ns`Ns@h{bFieF8he>d)c*hpF(VJK?Q=!@qt@h1Eam z4<6S4`7ib2?vG*hN%-fT7f)}7w|?KBKtDEW*rX$c%>vy~rc0d)Xi;|^mryr#%@vS0b2l0cBvsm@Ljy=)PW~Cz=L)I`RuxDBBnB}tJadOf#&MC2khp|brRbZ7$ z_Ee=fBfazHj6&i*9+^jWGC{;X5s+&vpeb~7X zHB)THUj9MU(*mLXA>6b4GAIRQ+t6c(dy#q{cclhLJkDKj7+?bXBkTYU65(O7p3Y*# zu0MfxvhOzE0FO(ZRrn^ZK`w)9et2jBD{DBdWM>UW?_*8Z`UPxIa!XSVP*S~pg4^)L z{#X@BW&U*y>-yWO=pJ6cH#O)A`>uxAJ(X}PRKio}C1@#7xmjqpKm&-1ETB*YR=0q(RuL7ayXiJGo5UmwR7L9@ z?{@_iFL>dLAJh-rJjWm4@u%Ql@c2%WrOCGC^us2T_wvj$@B7Tm{{7$ezX0sQFEUbS zlF+Q61+5I(6Z|CCOm0=QLt`iOlF!h()36MGH$zijZd5{=VM!2F^9@tmI4x74U^&BzzBouoUK==~!6pnO+B`hv`FfRz*fr|I?O`bmTRZF;mLF9>#%64huvNib z*jDdTp+Q=t^)M49wiO-JpUy6y&i}sL6JH zz09yBUZ+^_`~^};-`%20_bYfnv_cv;xj)1m6;0@tF^C5xJfvVB_LB-`wJ8#e?RpGy z#kFgWVO92$0P=Ar3+mWSs9gW5{`?#^lY8T%<({_8|aItg(pjX{-y~sV+u;3mbXPx8L=CL zRVP%CKxfA~3e&tmf?Cz^Jlf(~+3-qsSvP!bM6WtS+#qc>50ZtUqi9(A!CG}pcSrb` zNfxzem$*5~T|<0F#%6!QAo{(<1)=8&z8cKZnOJX~=_vWRTOq(D@p43Ns{1M1Et5Cf zc%G3=!cLMi6Y2Me?$u0cQfHF)lvC&4(}1#bcH?#v<8`+PD_Fi>(cQd=%b2`6R^~lo zfjwIp*3Tu5*;6nus=7LtBQxyt(j;xgsMv`awlHj(e}+I@UT{3uPid;HC|?87&2y`G zHl197m~#4!(MBJ(Yi>#3X9!(n>e?9)hXXZduWkD@HFt(|f5I+%9j$mv##y{A;T;9< z;ys47GuN15owO%)tr!%KGWa+z(eXwnNP9K@^-p}UQBpX;0dAE|-RmjZ_GHb8Ux<-# zVv9*6j*u4O;R|<$Q{Fl^ejr82gWNQS4PVb^@j-(?l3PB0igmQ0n8n9)_bEO}U5r_L z+7KLp$Ldg@u0YNCT!xM>6ugY-ET+kDUKqYo@FLD+afS>RgyCBSr*Jxp(+o<%vUGRQ z4 zd3CJLSxn)1^1nbo38~B;2}1-*@`*sVMWAxOI(ivTT*XrYF5b4T7@Ulk1RNodA|r$y z6fLySx`BA{UmLPJgY3>Q0|Z_rzm?@hA3j}P%tF!}_a;mgQ& X4qr#3Z}1(yr+AqVe!!3T8O#0$P{%Ua diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index daa259575001c994821b57100811818e5cc7e478..850868613fcde73ab07adf654cc337a2295e1507 100644 GIT binary patch literal 2032 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 PapTBgedLvi?;!jS6jep} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java b/discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java index 1543d503..32326b6a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java @@ -15,6 +15,6 @@ public static void main(String[] args) { int b = sc.nextInt(); sc.nextLine(); - System.out.println("") + System.out.println(""); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java index b68702bf..a2144809 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -1,5 +1,15 @@ package com.sprint.mission.discodeit.repository; +import com.sprint.mission.discodeit.entity.Channel; + +import java.util.List; + public interface ChannelRepository { + boolean save(Channel channel); + boolean save(String oldName, String newName); + Channel readChannel(String name); + + List readAllChannel(); + boolean deleteChannel(String name); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 664ba8bf..5fc2673e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -1,7 +1,137 @@ package com.sprint.mission.discodeit.repository.file; +import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.repository.ChannelRepository; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; public class FileChannelRepository implements ChannelRepository { + private final Map channelNameMap = new ConcurrentHashMap<>(); + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); + } + + /// Singleton + private FileChannelRepository() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Channel.class.getSimpleName()); + if(Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + try { + Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (Channel) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(channel -> { + channelNameMap.put(channel.getName(), channel); + }); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + private static class Holder { + private static final FileChannelRepository INSTANCE = new FileChannelRepository(); + } + public static FileChannelRepository getInstance() { + return Holder.INSTANCE; + } + + + /// interface + @Override + public boolean save(Channel channel) { + /// 입력값: 현재 채널, 변경할 이름 + /// TODO: 채널명 변경, 기존 키 삭제 및 추가 + + Path path = resolvePath(channel.getId()); + + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)){ + oos.writeObject(channel); + oos.flush(); + channelNameMap.getOrDefault(channel.getName(), + channelNameMap.put(channel.getName(), channel)); + + return true; + } catch (IOException e) { + System.err.println("[ERROR] " + e); + } + return false; + } + + @Override + public boolean save(String oldName, String newName) { + Channel channel = channelNameMap.get(oldName); + Path path = resolvePath(channelNameMap.get(oldName).getId()); + + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)){ + oos.writeObject(channel); + oos.flush(); + + channelNameMap.put(newName, channel); + channelNameMap.remove(channel.getName()); + channel.channelUpdater(newName); + + return true; + } catch (IOException e) { + System.err.println("[ERROR] " + e); + return false; + } + } + + @Override + public Channel readChannel(String name) { + return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null); + } + + @Override + public List readAllChannel() { + if(channelNameMap.isEmpty()) { + return null; + } + return channelNameMap.values().stream().toList(); + } + + @Override + public boolean deleteChannel(String name) { + UUID id = channelNameMap.get(name).getId(); + + Path path = resolvePath(id); + try { + Files.delete(path); + channelNameMap.remove(name); + return true; + } catch (IOException e) { + return false; + } + } + + /// + public boolean check(String name) { + return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null) == null; + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 625d35e4..0abaef69 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -1,36 +1,6 @@ package com.sprint.mission.discodeit.repository.file; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.MessageService; -import com.sprint.mission.discodeit.service.jfc.JCFUserService; -import java.util.Scanner; -import java.util.UUID; +public class FileMessageRepository { -public class FileMessageRepository implements MessageService { - @Override - public void createMessage(Scanner sc, Channel channel, User user) { - - } - - @Override - public void updateMessage(Scanner sc, User user) { - - } - - @Override - public void getMessageForSender(User sender) { - - } - - @Override - public void getMessageInChannel(UUID channelId, JCFUserService userService) { - - } - - @Override - public void deleteMessage(Scanner sc, User user) { - - } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index d0aa97d2..1f32f4b3 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -8,13 +8,16 @@ public interface ChannelService { void createChannel(Scanner sc); void updateChannel(Scanner sc); + + void readChannel(Scanner sc); + void readAllChannel(); void deleteChannel(Scanner sc); /// check - void isChannelName(Scanner sc); - Channel isChannelName(String name); - String isChannelName(UUID id); - Channel check(String name); - Channel check(UUID id); +// void isChannelName(Scanner sc); +// Channel isChannelName(String name); +// String isChannelName(UUID id); +// Channel check(String name); +// Channel check(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java index 9dfa8535..8470004c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -1,51 +1,16 @@ package com.sprint.mission.discodeit.service.file; import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.service.ChannelService; -import java.io.*; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Map; +import java.util.List; import java.util.Scanner; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; public class FileChannelService implements ChannelService { - private final Map channelNameMap = new ConcurrentHashMap<>(); - private final Path DIRECTORY; - private final String EXTENSION = ".ser"; + FileChannelRepository fileChannelRepository = FileChannelRepository.getInstance(); private FileChannelService() { - this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Channel.class.getSimpleName()); - if(Files.notExists(DIRECTORY)) { - try { - Files.createDirectories(DIRECTORY); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - - try { - Files.list(DIRECTORY) - .filter(path -> path.toString().endsWith(EXTENSION)) - .map(path -> { - try ( - FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis) - ) { - return (Channel) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - }).forEach(channel -> { - channelNameMap.put(channel.getName(), channel); - }); - } catch (IOException e) { - throw new RuntimeException(e); - } } private static class Holder { private static final FileChannelService INSTANCE = new FileChannelService(); @@ -54,99 +19,71 @@ public static FileChannelService getInstance() { return Holder.INSTANCE; } - private Path resolvePath(UUID id) { - String EXTENSION = ".ser"; - return DIRECTORY.resolve(id + EXTENSION); - } + @Override public void createChannel(Scanner sc) { System.out.println("사용하려는 채널명이 무엇인가요?"); String name = sc.nextLine().trim(); - if (check(name) != null) { + if (fileChannelRepository.check(name)) { System.out.println("이미 존재하는 채널명이에요!"); return; } - Channel channel = new Channel(name); - Path path = resolvePath(channel.getId()); - - try(FileOutputStream fos = new FileOutputStream(path.toFile()); - ObjectOutputStream oos = new ObjectOutputStream(fos)){ - oos.writeObject(channel); - oos.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } + fileChannelRepository.save(new Channel(name)); - channelNameMap.put(name, channel); System.out.println("잘 들어갔어요!"); } + @Override + public void readChannel(Scanner sc) { + System.out.println("검색할 채널명을 알려주세요"); + String name = sc.nextLine().trim(); + + fileChannelRepository.readChannel(name); + } + @Override public void readAllChannel() { - if (channelNameMap.isEmpty()) { + List allChannel = fileChannelRepository.readAllChannel(); + + if (allChannel.isEmpty()) { System.out.println("채널이 존재하지 않습니다."); return; } - channelNameMap.values().forEach(System.out::println); + allChannel.forEach(System.out::println); - System.out.println("현재 총 채널수 : " + channelNameMap.size()); + System.out.println("현재 총 채널수 : " + allChannel.size()); } @Override public void updateChannel(Scanner sc) { System.out.println("변경하고자 하는 채널명을 알려주세요"); - String name = sc.nextLine(); - - Channel result = check(name); - Channel channel = null; - Path path = resolvePath(result.getId()); + String oldName = sc.nextLine(); - if (result == null) { + if(!fileChannelRepository.check(oldName)) { System.out.println("해당 채널이 존재하지 않습니다."); return; } - System.out.println("현재 채널명 : " + name); + System.out.println("현재 채널명 : " + oldName); System.out.println("무엇으로 변경하고 싶은가요? "); - name = sc.nextLine(); - - try(FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis)) { - channel = (Channel) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - - channelNameMap.put(name, result); - channelNameMap.remove(result.getName()); - result.channelUpdater(name); + String newName = sc.nextLine(); - try(FileOutputStream fos = new FileOutputStream(path.toFile()); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(channel); - oos.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } - - System.out.println(result.getName()); - System.out.println("잘 변경되었어요!"); + if(fileChannelRepository.save(oldName, newName)) + System.out.println("잘 변경되었어요!"); } @Override public void deleteChannel(Scanner sc) { - String inputChannelName; - int n; System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); - n = sc.nextInt(); + int n = sc.nextInt(); sc.nextLine(); if (n == 0) { System.out.println("처음으로 돌아갑니다."); @@ -154,74 +91,17 @@ public void deleteChannel(Scanner sc) { } System.out.print("삭제하려는 채널명을 알려주세요: "); - inputChannelName = sc.nextLine(); + String inputChannelName = sc.nextLine(); - if (channelNameMap.get(inputChannelName) == null) { + if(!fileChannelRepository.check(inputChannelName)) { System.out.println("해당 채널을 찾을 수 없습니다."); return; } - Path path = resolvePath(channelNameMap.get(inputChannelName).getId()); - try { - Files.delete(path); - } catch (IOException e) { - throw new RuntimeException(e); - } - channelNameMap.remove(inputChannelName); - System.out.println("해당 채널이 삭제되었습니다."); - } - - @Override - public void isChannelName(Scanner sc) { - System.out.println("조회하고자 하는 채널명을 입력해주세요"); - String name = sc.nextLine(); - Channel result = check(name); - - if (result == null) { - System.out.println("해당 채널이 존재하지 않습니다."); - return; - } - - System.out.println("해당 채널에 대한 정보를 알려드립니다."); - System.out.println(result); - } - - /// 메시지 발송용 - @Override - public Channel isChannelName(String name) { - Channel result = check(name); - - if (result == null) { - System.out.println("해당 채널이 존재하지 않습니다."); - return null; + if (fileChannelRepository.deleteChannel(inputChannelName)) { + System.out.println("해당 채널이 삭제되었습니다."); + } else { + System.err.println("오류가 발생하여 삭제할 수 없습니다."); } - return result; - } - - /// UUID to Name - @Override - public String isChannelName(UUID id) { - Channel result = check(id); - - if (result == null) { - System.out.println("해당 채널이 존재하지 않습니다."); - return null; - } - return result.getName(); - } - - @Override - public Channel check(String name) { - try { - return channelNameMap.get(name); - } catch (Exception e) { - return null; - } - } - - /// 채널ID로도 관리하는 형태를 만드는게 좋을까? - @Override - public Channel check(UUID id) { - return channelNameMap.values().stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java index 5c0537ed..343e1818 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -18,38 +18,37 @@ public class FileUserService implements UserService { private final String EXTENSION = ".ser"; private FileUserService() { - throw new RuntimeException("🔥 FileUserService 생성자 실행됨"); -// this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); -// System.out.println(">>> [DEBUG] User 저장 경로: " + this.DIRECTORY.toAbsolutePath()); -// if (Files.notExists(DIRECTORY)) { -// try { -// Files.createDirectories(DIRECTORY); -// System.out.println(">>> [DEBUG] 디렉토리 생성됨!"); -// } catch (IOException e) { -// throw new RuntimeException(e); -// } -// } -// -// /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 -// try { -// Files.list(DIRECTORY) -// .filter(path -> path.toString().endsWith(EXTENSION)) -// .map(path -> { -// try ( -// FileInputStream fis = new FileInputStream(path.toFile()); -// ObjectInputStream ois = new ObjectInputStream(fis) -// ) { -// return (User) ois.readObject(); -// } catch (IOException | ClassNotFoundException e) { -// throw new RuntimeException(e); -// } -// }).forEach(user -> { -// usersMap.put(user.getId(), user); -// usersName.put(user.getName(), user.getId()); -// }); -// } catch (IOException e) { -// throw new RuntimeException(e); -// } + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); + System.out.println(">>> [DEBUG] User 저장 경로: " + this.DIRECTORY.toAbsolutePath()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + System.out.println(">>> [DEBUG] 디렉토리 생성됨!"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 + try { + Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(user -> { + usersMap.put(user.getId(), user); + usersName.put(user.getName(), user.getId()); + }); + } catch (IOException e) { + throw new RuntimeException(e); + } } private static class Holder { private static final FileUserService INSTANCE = new FileUserService(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 5679b0a0..3c7036ec 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -63,6 +63,10 @@ public void updateChannel(Scanner sc) { } @Override + public void readChannel(Scanner sc) { + + } + public void isChannelName(Scanner sc) { System.out.println("조회하고자 하는 채널명을 입력해주세요"); String name = sc.nextLine(); @@ -78,7 +82,6 @@ public void isChannelName(Scanner sc) { } /// 메시지 발송용 - @Override public Channel isChannelName(String name) { Channel result = check(name); @@ -90,7 +93,6 @@ public Channel isChannelName(String name) { } /// UUID to Name - @Override public String isChannelName(UUID id) { Channel result = check(id); @@ -140,7 +142,6 @@ public void deleteChannel(Scanner sc) { System.out.println("해당 채널이 삭제되었습니다."); } - @Override public Channel check(String name) { try { return channelNameMap.get(name); @@ -150,7 +151,6 @@ public Channel check(String name) { } /// 채널ID로도 관리하는 형태를 만드는게 좋을까? - @Override public Channel check(UUID id) { return channelNameMap.values().stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); } diff --git a/file-data-map/Channel/f0096dba-1ec3-4d64-83cb-bd4fe94476e6.ser b/file-data-map/Channel/f0096dba-1ec3-4d64-83cb-bd4fe94476e6.ser new file mode 100644 index 0000000000000000000000000000000000000000..ca5a42ecdc7e6c84cc0028c0e977389dc45bd28a GIT binary patch literal 50820 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 B7eN33 literal 0 HcmV?d00001 diff --git a/file-data-map/Message/2574dc07-95dd-4339-b0f9-5dbd84903995.ser b/file-data-map/Message/2574dc07-95dd-4339-b0f9-5dbd84903995.ser new file mode 100644 index 0000000000000000000000000000000000000000..c495462e8578d8986e8187d7df72222d0b35af98 GIT binary patch literal 502 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ(U3h7?~K@d>A;BGZORiQgb|0N*DxuvJ%S@^-D`KbM!+)JzcDQ7}%5Z^Gbl)OBjS8 zk~xWa>H5JXK#S6W(j3V}sfi`2jzD>+X0W_ZK3JA1Go_HBj)4)VuCyQptPaFy_F-Tv zElw@+gveGD0Nu|AvRMygvmVIiJu{iV&&X}nXJTOTV&KV1O)M@6&P;d8EGhP4;Lgp5 z^C}9OPw(}A=~DLW1843oxx>CdUqrv@TJm;E%j;zu-nMK|cr$&?>-lS5Z)?#}c-=b% z$lda$d(GQ<9SX0z*Sub~Md3}y423uII$rm;yk0n0;mv|MuQoI&yxG|DW<&3r>ux|JnySHV6b0su&y$_4-c literal 0 HcmV?d00001 diff --git a/file-data-map/Message/725536f6-05a1-46d4-bf60-6a0435f417a8.ser b/file-data-map/Message/725536f6-05a1-46d4-bf60-6a0435f417a8.ser new file mode 100644 index 0000000000000000000000000000000000000000..a0fdaaac4228964bae22aec6bab198fc91b35299 GIT binary patch literal 490 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ(U3h7?~K@d>A;BGZORiQgb|0N*DxuvJ%S@^-D`KbM!+)JzcDQ7}%5Z^Gbl)OBjS8 zk~xWa>H5JXK#S6W(j3V}sfi`2jzD>+X0W_ZK3JA1Go_HBj)4)VuCyQptPaFy_F-Tv zElw@+gveGD0Nu|AvRMygvmVIiJu{iV&&X}nXJTOTV&KV1O)M@6&P;d8EGhP4;Lgp5 z^C}9OPw(}A=~DLW1843oxx>CdU--Y7+VQ$|>f5O^-n8s^Gi!>D!kexoZ>O}pUbf+F z%Lauv)7QM7zvlI}7CnVG3mRT`O;Ip?+tZ-%dgY9_Z3`6M%-!;4NyFP2JKoG|ecj#h zx_gNp+;t$Y>4Cl0{ba(Ke&zd242)h3tYwKgrKuG~3<6*;fED?b<|d^UwXK;d%RS{m zHxmOxMF9f?@iLg#hdRge(@*FXAhTLe0LhE_AyB7Ue)y)72HG<(S3E(c#9h Jc7C>J5&%&Lz4`zE literal 0 HcmV?d00001 diff --git a/file-data-map/Message/db945a4f-5473-4551-b4fb-3b7725dad6d7.ser b/file-data-map/Message/db945a4f-5473-4551-b4fb-3b7725dad6d7.ser new file mode 100644 index 0000000000000000000000000000000000000000..d8546ddc111775f99c6707b216969d10a9248fcd GIT binary patch literal 420 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ(U3h7?~K@d>A;BGZORiQgb|0N*DxuvJ%S@^-D`KbM!+)JzcDQ7}%5Z^Gbl)OBjS8 zk~xWa>H5JXK#S6W(j3V}sfi`2jzD>+X0W_ZK3JA1Go_HBj)4)VuCyQptPaFy_F-Tv zElw@+gveGD0Nu|AvRMygvmVIiJu{iV&&X}nXJTOTV&KV1O)M@6&P;d8EGhP4;Lgp5 z^C}9OPw(}A=~DLW1843oxx>CdUvR!{?RnF+46>9{ba(Ke&zd242)h3 ztYwKgrKuG~3<6-w!HWD!bCXhw+SW{!<(~4On~8y;qJV*carV7q+xv<^ZfD){+qzu! l*0t-mr$qUO6uSn3MLAH_v@cfLcl5-bOtYpl)@8!}*8!|;mDd0O literal 0 HcmV?d00001 diff --git a/file-data-map/User/3682cc3b-7613-4fd7-87a3-22bec5c8bc69.ser b/file-data-map/User/3682cc3b-7613-4fd7-87a3-22bec5c8bc69.ser new file mode 100644 index 0000000000000000000000000000000000000000..a8b7dd0975e66b12fc333c22eb3a9788c22e1a59 GIT binary patch literal 50869 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 XF){IuQb`EYa||Q$$oIZ<`=9?m#r`fV literal 0 HcmV?d00001 diff --git a/file-data-map/User/884600ad-9f6b-4962-8a8a-562a416a0908.ser b/file-data-map/User/884600ad-9f6b-4962-8a8a-562a416a0908.ser new file mode 100644 index 0000000000000000000000000000000000000000..118d147750f8b4ed01dc84cc3b50491caa663ccb GIT binary patch literal 50870 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 L=y$)|`py3baK|x7 literal 0 HcmV?d00001 From 4891fc80f0fac825575013720e34d9cf4f769dd6 Mon Sep 17 00:00:00 2001 From: Alpha Date: Sat, 24 Jan 2026 01:31:18 +0900 Subject: [PATCH 19/35] =?UTF-8?q?=ED=95=98..=20=EB=A7=89=EB=A7=89=ED=95=98?= =?UTF-8?q?=EB=8B=A4..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.gradle/9.0.0/checksums/checksums.lock | Bin 17 -> 38 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 38 bytes .../buildOutputCleanup.lock | Bin 17 -> 38 bytes .../com/sprint/mission/discodeit/Input.java | 4 +- .../discodeit/app/JavaApplication.java | 16 +- .../app/router/RouteChannelService.java | 13 +- .../app/router/RouteMessageService.java | 24 +- .../app/router/RouteUserService.java | 12 +- .../mission/discodeit/app/router/Router.java | 21 +- .../repository/ChannelRepository.java | 2 +- .../discodeit/repository/UserRepository.java | 12 + .../file/FileChannelRepository.java | 12 +- .../file/FileMessageRepository.java | 96 +++++++- .../repository/file/FileUserRepository.java | 131 ++++++++++- .../discodeit/service/ChannelService.java | 10 +- .../discodeit/service/UserService.java | 8 +- .../service/file/FileChannelService.java | 10 +- .../service/file/FileMessageService.java | 86 +++----- .../service/file/FileUserService.java | 206 ++++-------------- .../service/jfc/JCFChannelService.java | 14 +- .../discodeit/service/jfc/JCFUserService.java | 84 +++---- 21 files changed, 410 insertions(+), 351 deletions(-) diff --git a/discordit/.gradle/9.0.0/checksums/checksums.lock b/discordit/.gradle/9.0.0/checksums/checksums.lock index d3303a17454e74fdc9eaaf4b2318c8942143bdb1..7d77321eb3e260506b9de680cb6d9fbc3c34ad2b 100644 GIT binary patch literal 38 ocmZQh?B readAllChannel(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index 0ab7c94f..425377ce 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -1,4 +1,16 @@ package com.sprint.mission.discodeit.repository; +import java.util.List; +import java.util.UUID; + public interface UserRepository { + boolean createUser(String name, String pw); + + boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber); + + String getUser(String name); + + List getAllUser(); + + void deleteUser(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 5fc2673e..82f154a3 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -63,8 +63,8 @@ public static FileChannelRepository getInstance() { /// interface @Override public boolean save(Channel channel) { - /// 입력값: 현재 채널, 변경할 이름 - /// TODO: 채널명 변경, 기존 키 삭제 및 추가 + // 입력값: 현재 채널, 변경할 이름 + // TODO: 채널명 변경, 기존 키 삭제 및 추가 Path path = resolvePath(channel.getId()); @@ -104,8 +104,12 @@ public boolean save(String oldName, String newName) { } @Override - public Channel readChannel(String name) { - return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null); + public String readChannel(String name) { + try { + return channelNameMap.get(channelNameMap.get(name).getName()).toString(); + } catch (Exception e) { + return null; + } } @Override diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 0abaef69..6c79d360 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -1,6 +1,100 @@ package com.sprint.mission.discodeit.repository.file; -public class FileMessageRepository { +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.repository.MessageRepository; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class FileMessageRepository implements MessageRepository { + private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); + private final Map> userIdMessageMap = new ConcurrentHashMap<>(); + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; + FileChannelRepository channelRepository = FileChannelRepository.getInstance(); + FileUserRepository userRepository = FileUserRepository.getInstance(); + + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); + } + + private FileMessageRepository() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Message.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + try { + Files.list(DIRECTORY).filter(path-> path.toString().endsWith(EXTENSION)) + .map(path->{ + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (Message) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(message -> { + channelIdMessageMap + .computeIfAbsent(message.getSendChannel(), id -> new ArrayList<>()) + .add(message); + + userIdMessageMap + .computeIfAbsent(message.getSendUserId(), id -> new ArrayList<>()) + .add(message); + }); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static class Holder { + private static final FileMessageRepository INSTANCE = new FileMessageRepository(); + } + + public static FileMessageRepository getInstance() { + return FileMessageRepository.Holder.INSTANCE; + } + + public boolean createMessage(String content, String sendeeChannelName, String senderUser) { + channelRepository.readChannel(sendeeChannelName) + Message message = new Message(channel.getId(), user.getId(), text); + channelIdMessageMap.computeIfAbsent(channel.getId(), m -> new ArrayList<>()).add(message); + userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList<>()).add(message); + Path path = resolvePath(message.getId()); + try ( + FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos) + ) { + oos.writeObject(message); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public boolean readInChannelMessage() {} + + public boolean readForSenderMessage() {} + + public boolean updateMessage() {} + + public boolean deleteMessage() {} + + public boolean check(UUID id) {} + + public boolean check(String name) {} } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index 1cfc5b10..9367077b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -1,32 +1,145 @@ package com.sprint.mission.discodeit.repository.file; -import com.sprint.mission.discodeit.service.UserService; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.UserRepository; -import java.util.Scanner; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; -public class FileUserRepository implements UserService { - @Override - public void createUser(Scanner sc) { +public class FileUserRepository implements UserRepository { + private final Map usersMap = new ConcurrentHashMap<>(); + private final Map usersName = new ConcurrentHashMap<>(); + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; + + private FileUserRepository() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 + try { + Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(user -> { + usersMap.put(user.getId(), user); + usersName.put(user.getName(), user.getId()); + }); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static class Holder { + private static final FileUserRepository INSTANCE = new FileUserRepository(); + } + + public static FileUserRepository getInstance() { + return Holder.INSTANCE; + } + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); } @Override - public void updateUser(Scanner sc) { + public boolean createUser(String name, String pw) { + User user = new User(name, pw); + usersName.put(name, user.getId()); + usersMap.put(user.getId(), user); + Path path = resolvePath(user.getId()); + try ( + FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos) + ) { + oos.writeObject(user); + return true; + } catch (IOException e) { + return false; + } } @Override - public void getUserName(Scanner sc) { + public boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber) { + Path path = resolvePath(userId); + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(userId); + usersMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); + return true; + } catch (IOException e) { + return false; + } } @Override - public void getAllUserName() { + public String getUser(String name) { + return usersMap.get(usersName.get(name)).toString(); + } + +// @Override +// public void getUserName() { +// +// } + @Override + public List getAllUser() { + List result = new ArrayList<>(); + usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(user.toString())); + return result; } @Override - public void deleteUser(Scanner sc) { + public void deleteUser(UUID id) { + Path path = resolvePath(id); + try { + Files.delete(path); + } catch (IOException e) { + throw new RuntimeException(e); + } + usersName.remove(usersMap.get(id).getName()); + usersMap.remove(id); + } + + public UUID check(String name) { + try { + return usersName.get(name); + } catch (Exception e) { + return null; + } + } + + public boolean check(UUID id) { + try { + usersMap.get(id); + return true; + } catch (Exception e) { + return false; + } + } + public boolean check(UUID id, String pw) { + return usersMap.get(id).getPw().equals(pw); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 1f32f4b3..bd46b5ad 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -6,16 +6,16 @@ import java.util.UUID; public interface ChannelService { - void createChannel(Scanner sc); - void updateChannel(Scanner sc); + void createChannel(); + void updateChannel(); - void readChannel(Scanner sc); + void readChannel(); void readAllChannel(); - void deleteChannel(Scanner sc); + void deleteChannel(); /// check -// void isChannelName(Scanner sc); +// void isChannelName(); // Channel isChannelName(String name); // String isChannelName(UUID id); // Channel check(String name); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java index 30cd0217..b5808b70 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -13,11 +13,11 @@ /// Question: 자바 스타일을 배우기 위해 좋은 가이드라인 / 책이 있을지 public interface UserService { - void createUser(Scanner sc); - void updateUser(Scanner sc); - void getUserName(Scanner sc); + void createUser(); + void updateUser(); + void getUserName(); void getAllUserName(); - void deleteUser(Scanner sc); + void deleteUser(); } /// 네 맞아요 diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java index 8470004c..b300c3d2 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.service.file; +import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.service.ChannelService; @@ -9,6 +10,7 @@ public class FileChannelService implements ChannelService { FileChannelRepository fileChannelRepository = FileChannelRepository.getInstance(); + Scanner sc = JavaApplication.scanner(); private FileChannelService() { } @@ -22,7 +24,7 @@ public static FileChannelService getInstance() { @Override - public void createChannel(Scanner sc) { + public void createChannel() { System.out.println("사용하려는 채널명이 무엇인가요?"); String name = sc.nextLine().trim(); @@ -37,7 +39,7 @@ public void createChannel(Scanner sc) { } @Override - public void readChannel(Scanner sc) { + public void readChannel() { System.out.println("검색할 채널명을 알려주세요"); String name = sc.nextLine().trim(); @@ -59,7 +61,7 @@ public void readAllChannel() { } @Override - public void updateChannel(Scanner sc) { + public void updateChannel() { System.out.println("변경하고자 하는 채널명을 알려주세요"); String oldName = sc.nextLine(); @@ -78,7 +80,7 @@ public void updateChannel(Scanner sc) { } @Override - public void deleteChannel(Scanner sc) { + public void deleteChannel() { System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java index 89906a8b..f4525d0e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -1,8 +1,12 @@ package com.sprint.mission.discodeit.service.file; +import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; +import com.sprint.mission.discodeit.repository.file.FileMessageRepository; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.MessageService; import com.sprint.mission.discodeit.service.jfc.JCFChannelService; import com.sprint.mission.discodeit.service.jfc.JCFUserService; @@ -17,49 +21,12 @@ public class FileMessageService implements MessageService { private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); - private final Map> userIdMessageMap = new ConcurrentHashMap<>(); - private final Path DIRECTORY; - private final String EXTENSION = ".ser"; - - private Path resolvePath(UUID id) { - String EXTENSION = ".ser"; - return DIRECTORY.resolve(id + EXTENSION); - } + Scanner sc = JavaApplication.scanner(); + FileUserRepository userRepository = FileUserRepository.getInstance(); + FileChannelRepository channelRepository = FileChannelRepository.getInstance(); + FileMessageRepository messageRepository = FileMessageRepository.getInstance(); private FileMessageService() { - this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Message.class.getSimpleName()); - if (Files.notExists(DIRECTORY)) { - try { - Files.createDirectories(DIRECTORY); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - try { - Files.list(DIRECTORY).filter(path-> path.toString().endsWith(EXTENSION)) - .map(path->{ - try ( - FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis) - ) { - return (Message) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - }).forEach(message -> { - channelIdMessageMap - .computeIfAbsent(message.getSendChannel(), id -> new ArrayList<>()) - .add(message); - - userIdMessageMap - .computeIfAbsent(message.getSendUserId(), id -> new ArrayList<>()) - .add(message); - }); - } catch (Exception e) { - throw new RuntimeException(e); - } } private static class Holder { @@ -69,11 +36,25 @@ private static class Holder { public static FileMessageService getInstance() {return FileMessageService.Holder.INSTANCE;} @Override - public void createMessage(Scanner sc, Channel channel, User user) { + public void createMessage() { + System.out.println("누가 보내는 메시지인가요?"); + String senderUserName = sc.nextLine(); + if(userRepository.check(senderUserName) == null){ + System.err.println("존재하지 않는 사용자입니다."); + return; + }; + + System.out.println("어디로 보내는 메시지인가요?"); + String sendeeChannelName = sc.nextLine(); + + if(!channelRepository.check(sendeeChannelName)) { + System.out.println("존재하지 않는 채널입니다."); + return; + } + while(true) { - if (channel == null) return; - System.out.println("현재 메시지를 보낼 채널은 " + channel.getName() + "입니다."); - System.out.println("현재 메시지를 보낼 사람은 " + user.getName() + "입니다."); + System.out.println("현재 메시지를 보낼 채널은 " + sendeeChannelName + "입니다."); + System.out.println("현재 메시지를 보낼 사람은 " + senderUserName + "입니다."); System.out.println("무어라 보내고 싶으신가요?"); String text = sc.nextLine(); @@ -85,20 +66,9 @@ public void createMessage(Scanner sc, Channel channel, User user) { System.out.println("처음으로 돌아갑니다."); return; } else if (Objects.equals(n, "1")) { - Message message = new Message(channel.getId(), user.getId(), text); - channelIdMessageMap.computeIfAbsent(channel.getId(), m -> new ArrayList<>()).add(message); - userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList<>()).add(message); - Path path = resolvePath(message.getId()); - try ( - FileOutputStream fos = new FileOutputStream(path.toFile()); - ObjectOutputStream oos = new ObjectOutputStream(fos) - ) { - oos.writeObject(message); - } catch (IOException e) { - throw new RuntimeException(e); + if(messageRepository.createMessage(text, sendeeChannelName, senderUserName)) { + System.out.println("성공."); } - - System.out.println("성공."); return; } else { System.out.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java index 343e1818..ea03fb9d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -1,103 +1,55 @@ package com.sprint.mission.discodeit.service.file; import com.sprint.mission.discodeit.Input; -import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.UserService; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import java.io.*; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; public class FileUserService implements UserService { - private final Map usersMap = new ConcurrentHashMap<>(); - private final Map usersName = new ConcurrentHashMap<>(); - private final Path DIRECTORY; - private final String EXTENSION = ".ser"; + Scanner sc = JavaApplication.scanner(); private FileUserService() { - this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); - System.out.println(">>> [DEBUG] User 저장 경로: " + this.DIRECTORY.toAbsolutePath()); - if (Files.notExists(DIRECTORY)) { - try { - Files.createDirectories(DIRECTORY); - System.out.println(">>> [DEBUG] 디렉토리 생성됨!"); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 - try { - Files.list(DIRECTORY) - .filter(path -> path.toString().endsWith(EXTENSION)) - .map(path -> { - try ( - FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis) - ) { - return (User) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - }).forEach(user -> { - usersMap.put(user.getId(), user); - usersName.put(user.getName(), user.getId()); - }); - } catch (IOException e) { - throw new RuntimeException(e); - } } private static class Holder { private static final FileUserService INSTANCE = new FileUserService(); } public static FileUserService getInstance() {return Holder.INSTANCE;} - private Path resolvePath(UUID id) { - String EXTENSION = ".ser"; - return DIRECTORY.resolve(id + EXTENSION); - } + FileUserRepository fileUserRepository = FileUserRepository.getInstance(); @Override - public void createUser(Scanner sc) { + public void createUser() { System.out.println("회원가입에 오신 것을 환영합니다."); System.out.print("먼저, 사용할 이름을 작성해주세요 : "); String name = sc.nextLine().trim(); - if (usersName.containsKey(name)) { + if (fileUserRepository.check(name) != null) { System.out.println("이미 존재하는 사용자명입니다."); return; } System.out.print("사용할 비밀번호를 입력해주세요 : "); String pw = sc.nextLine(); - User user = new User(name, pw); - usersName.put(name, user.getId()); - usersMap.put(user.getId(), user); - Path path = resolvePath(user.getId()); - - try ( - FileOutputStream fos = new FileOutputStream(path.toFile()); - ObjectOutputStream oos = new ObjectOutputStream(fos) - ) { - oos.writeObject(user); - } catch (IOException e) { - throw new RuntimeException(e); + if(fileUserRepository.createUser(name, pw)) { + System.out.println("사용자 " + name + "님이 추가되었습니다."); + } else { + System.err.println("알 수 없는 오류가 발생하여 저장하지 못했습니다."); } - - System.out.println("사용자 " + name + "님이 추가되었습니다."); } /// Update @Override - public void updateUser(Scanner sc) { + public void updateUser() { System.out.println("===================="); System.out.println("사용자 변경 메뉴입니다."); - User checkUpdateUser = check(sc, "변경"); - if(checkUpdateUser == null) { + UUID userId = workRoute("변경"); + if(userId == null) { System.out.println("일치하는 사용자가 없습니다."); return; } @@ -105,10 +57,10 @@ public void updateUser(Scanner sc) { while(true) { System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); - String reName = Input.inputUpdateField(sc, "사용자명", "\\S+", checkUpdateUser.getName()); - String rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+", null); - String reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+", checkUpdateUser.getEmail()); - String rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$", checkUpdateUser.getPhoneNumber()); + String reName = Input.inputUpdateField(sc, "사용자명", "\\S+"); + String rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+"); + String reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+"); + String rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$"); System.out.println("이대로 진행하시겠습니까?"); System.out.println("맞으면 y, 다시 입력하려면 re"); @@ -117,17 +69,10 @@ public void updateUser(Scanner sc) { String finalCheckIsContinue = sc.nextLine(); switch (finalCheckIsContinue.toLowerCase()){ case "y": - Path path = resolvePath(checkUpdateUser.getId()); - - try(FileOutputStream fos = new FileOutputStream(path.toFile()); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(checkUpdateUser); - checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); - } catch (IOException e) { - throw new RuntimeException(e); + if(fileUserRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { + System.out.println("완료"); } - - System.out.println("완료"); + System.out.println("실패"); return; case "re": continue; @@ -138,145 +83,70 @@ public void updateUser(Scanner sc) { } /// Read - public User getUserId(UUID id) { - return usersMap.get(id); - } - @Override - public void getUserName(Scanner sc) { + public void getUserName() { System.out.println("조회하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); - if (usersName.get(name) == null) { + if (fileUserRepository.check(name) == null) { System.out.println("조회하고자 하는 사용자가 없습니다."); return; } - User user = usersMap.get(usersName.get(name)); - - /// 여기서 파일 불러와서 조회하는 로직 작성. - User oisUser; - try ( - FileInputStream fis = new FileInputStream(resolvePath(user.getId()).toFile()); - ObjectInputStream ois = new ObjectInputStream(fis); - ) { - oisUser = (User) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - System.err.println("조회하고자 하는 사용자가 없습니다."); - return; - } - - /// 일단 되는지 확인하기 위해서 쓰긴 했는데... - System.out.println("===================="); - System.out.println("사용자ID : " + oisUser.getId()); - System.out.println("사용자명 : " + oisUser.getName()); - System.out.println("이메일 : " + oisUser.getEmail()); - System.out.println("전화번호 : " + oisUser.getPhoneNumber()); - System.out.println("생성일 : " + oisUser.getCreateAt()); - System.out.println("수정일 : " + oisUser.getUpdateAt()); + System.out.println(fileUserRepository.getUser(name)); System.out.println("===================="); } - public User getUserByName(String name) { - try { - return usersMap.get(usersName.get(name)); - } catch (Exception e) { - return null; - } - } - - public String getUserByName(UUID id) { - return usersMap.get(id).getName(); - } - @Override public void getAllUserName() { - if (usersMap.isEmpty()) { + List userList = fileUserRepository.getAllUser(); + if (userList.isEmpty()) { System.out.println("사용자가 없습니다."); return; } - List userList = readAllUserForSerFile(); - userList.stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { - System.out.println("===================="); - System.out.println("사용자ID : " + user.getId()); - System.out.println("사용자명 : " + user.getName()); - System.out.println("이메일 : " + user.getEmail()); - System.out.println("전화번호 : " + user.getPhoneNumber()); - System.out.println("생성일 : " + user.getCreateAt()); - System.out.println("수정일 : " + user.getUpdateAt()); - System.out.println("===================="); - }); + userList.forEach(System.out::println); System.out.println("현재 총 사용자 : " + userList.size()); } /// Delete @Override - public void deleteUser(Scanner sc) { - int n; + public void deleteUser() { System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); - n = sc.nextInt(); + int n = sc.nextInt(); sc.nextLine(); if (n == 0) { System.out.println("처음으로 돌아갑니다."); return; } - User target = check(sc, "삭제"); + UUID userId = workRoute("삭제"); - if (target == null) { + if (userId == null) { System.out.println("일치하는 계정을 찾을 수 없습니다."); return; } - Path path = resolvePath(target.getId()); - try { - Files.delete(path); - } catch (IOException e) { - throw new RuntimeException(e); - } - usersMap.remove(target.getId()); - usersName.remove(target.getName()); + fileUserRepository.deleteUser(userId); System.out.println("계정이 삭제되었습니다."); } - private User check(Scanner sc, String work) { + private UUID workRoute(String work) { System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); + UUID userId = fileUserRepository.check(name); - User user = usersMap.get(usersName.get(name)); - - if (user == null) return null; + if (userId == null) return null; System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - if (!user.getPw().equals(pw)) return null; + if (fileUserRepository.check(userId, pw)) return null; - return user; - } - - private List readAllUserForSerFile() { - try { - return Files.list(DIRECTORY) - .filter(path -> path.toString().endsWith(EXTENSION)) - .map(path -> { - try ( - FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis) - ) { - return (User) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - }) - .toList(); - } catch (IOException e) { - throw new RuntimeException(e); - } + return userId; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java index 3c7036ec..c17b29d6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.service.jfc; +import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.service.ChannelService; @@ -12,6 +13,7 @@ public class JCFChannelService implements ChannelService { private final Map channelNameMap = new ConcurrentHashMap<>(); + Scanner sc = JavaApplication.scanner(); private JCFChannelService() {} @@ -24,7 +26,7 @@ public static JCFChannelService getInstance() { } @Override - public void createChannel(Scanner sc) { + public void createChannel() { System.out.println("사용하려는 채널명이 무엇인가요?"); String name = sc.nextLine(); @@ -39,7 +41,7 @@ public void createChannel(Scanner sc) { } @Override - public void updateChannel(Scanner sc) { + public void updateChannel() { System.out.println("변경하고자 하는 채널명을 알려주세요"); String name = sc.nextLine(); @@ -63,11 +65,7 @@ public void updateChannel(Scanner sc) { } @Override - public void readChannel(Scanner sc) { - - } - - public void isChannelName(Scanner sc) { + public void readChannel() { System.out.println("조회하고자 하는 채널명을 입력해주세요"); String name = sc.nextLine(); Channel result = check(name); @@ -116,7 +114,7 @@ public void readAllChannel() { } @Override - public void deleteChannel(Scanner sc) { + public void deleteChannel() { String inputChannelName; int n; System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java index 8d68772d..d95c7282 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java @@ -1,6 +1,7 @@ package com.sprint.mission.discodeit.service.jfc; import com.sprint.mission.discodeit.Input; +import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.UserService; @@ -10,6 +11,7 @@ public class JCFUserService implements UserService { private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Scanner sc = JavaApplication.scanner(); private JCFUserService() { } @@ -25,7 +27,7 @@ public static JCFUserService getInstance() { /// Create @Override - public void createUser(Scanner sc) { + public void createUser() { String name; String pw; System.out.println("회원가입에 오신 것을 환영합니다."); @@ -48,57 +50,57 @@ public void createUser(Scanner sc) { /// Update @Override - public void updateUser(Scanner sc) { + public void updateUser() { System.out.println("===================="); System.out.println("사용자 변경 메뉴입니다."); - User checkUpdateUser = check(sc, "변경"); + User checkUpdateUser = check("변경"); if(checkUpdateUser == null) { System.out.println("일치하는 사용자가 없습니다."); return; } - updateUserInfo(sc, checkUpdateUser); +// updateUserInfo(checkUpdateUser); } /// 사실 분리할 필요가 없긴 한데, 너무 길어져서 분리함 /// FIXME: 더 좋은 리팩터링 방법이 필요 - private void updateUserInfo(Scanner sc, User checkUpdateUser) { - String reName; - String rePassword; - String reMail; - String rePhoneNumber; - - while(true) { - /// 정규식은 있다는건 알아도 어떤 규칙인지 몰라서 GPT에게 물어봤습니다. - System.out.println("변경하지 않으시려면 엔터를 눌러주시기 바랍니다."); - - reName = Input.inputUpdateField(sc, "사용자명", "\\S+", checkUpdateUser.getName()); - rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+", null); - reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+", checkUpdateUser.getEmail()); - rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$", checkUpdateUser.getPhoneNumber()); - - System.out.println("이대로 진행하시겠습니까?"); - System.out.println("맞으면 y, 다시 입력하려면 re"); - System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); - - String finalCheckIsContinue = sc.nextLine(); - switch (finalCheckIsContinue.toLowerCase()){ - case "y": - checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); - System.out.println("성공"); - return; - case "re": - continue; - default: - System.out.println("처음으로 돌아갑니다."); - return; - } - } - } +// private void updateUserInfo(User checkUpdateUser) { +// String reName; +// String rePassword; +// String reMail; +// String rePhoneNumber; +// +// while(true) { +// /// 정규식은 있다는건 알아도 어떤 규칙인지 몰라서 GPT에게 물어봤습니다. +// System.out.println("변경하지 않으시려면 엔터를 눌러주시기 바랍니다."); +// +// reName = Input.inputUpdateField(sc, "사용자명", "\\S+", checkUpdateUser.getName()); +// rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+", null); +// reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+", checkUpdateUser.getEmail()); +// rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$", checkUpdateUser.getPhoneNumber()); +// +// System.out.println("이대로 진행하시겠습니까?"); +// System.out.println("맞으면 y, 다시 입력하려면 re"); +// System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); +// +// String finalCheckIsContinue = sc.nextLine(); +// switch (finalCheckIsContinue.toLowerCase()){ +// case "y": +// checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); +// System.out.println("성공"); +// return; +// case "re": +// continue; +// default: +// System.out.println("처음으로 돌아갑니다."); +// return; +// } +// } +// } /// Read @Override - public void getUserName(Scanner sc) { + public void getUserName() { System.out.println("조회하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); @@ -133,7 +135,7 @@ public void getAllUserName() { /// Delete @Override - public void deleteUser(Scanner sc) { + public void deleteUser() { int n; System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); @@ -146,7 +148,7 @@ public void deleteUser(Scanner sc) { return; } - User target = check(sc, "삭제"); + User target = check("삭제"); if (target == null) { System.out.println("일치하는 계정을 찾을 수 없습니다."); @@ -158,7 +160,7 @@ public void deleteUser(Scanner sc) { System.out.println("계정이 삭제되었습니다."); } - private User check(Scanner sc, String work) { + private User check(String work) { System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); From 7bad2243401936e9085720ae978772b0eedb6f70 Mon Sep 17 00:00:00 2001 From: alpha_lens Date: Sun, 25 Jan 2026 19:09:48 +0900 Subject: [PATCH 20/35] =?UTF-8?q?=EC=95=84=EC=A7=81=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=EC=A4=91...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/router/RouteMessageService.java | 26 +++++-------- .../mission/discodeit/entity/Message.java | 2 +- .../file/FileChannelRepository.java | 18 ++++++++- .../file/FileMessageRepository.java | 37 +++++++++++++++---- .../repository/file/FileUserRepository.java | 17 ++++++--- .../service/file/FileMessageService.java | 20 ++++------ .../service/file/FileUserService.java | 9 ++--- .../service/jfc/JCFMessageService.java | 6 +-- 8 files changed, 82 insertions(+), 53 deletions(-) diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java index 92774956..df011e82 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java @@ -2,13 +2,9 @@ import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.file.FileChannelService; import com.sprint.mission.discodeit.service.file.FileMessageService; -import com.sprint.mission.discodeit.service.file.FileUserService; -import com.sprint.mission.discodeit.service.jfc.JCFChannelService; -import com.sprint.mission.discodeit.service.jfc.JCFMessageService; -import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.Scanner; @@ -18,13 +14,13 @@ static void messageService(int routeCURD) { // JCFUserService userService = JCFUserService.getInstance(); // JCFChannelService channelService = JCFChannelService.getInstance(); // JCFMessageService messageService = JCFMessageService.getInstance(); - FileUserService userService = FileUserService.getInstance(); + FileUserRepository userRepository = FileUserRepository.getInstance(); FileChannelService channelService = FileChannelService.getInstance(); FileMessageService messageService = FileMessageService.getInstance(); int m; String senderUserName; - User nowUser; + String nowUser; String sendeeChannelName; Channel nowChannel; Scanner sc = JavaApplication.scanner(); @@ -38,12 +34,12 @@ static void messageService(int routeCURD) { /// update System.out.println("누가 보낸 메시지인가요?"); senderUserName = sc.nextLine(); - nowUser = userService.getUserByName(senderUserName); - if (nowUser == null) { +// nowUser = userService.getUserByName(senderUserName); + if (userRepository.isPresentUser(senderUserName)) { System.out.println("존재하지 않는 사용자입니다."); return; } - messageService.updateMessage(sc, nowUser); + messageService.updateMessage(senderUserName); break; case 3: /// read @@ -56,12 +52,11 @@ static void messageService(int routeCURD) { if (m == 1) { System.out.println("누가 보낸 메시지인가요?"); senderUserName = sc.nextLine(); - nowUser = userService.getUserByName(senderUserName); - if (nowUser == null) { + if (userRepository.isPresentUser(senderUserName)) { System.out.println("존재하지 않는 사용자입니다."); return; } - messageService.getMessageForSender(nowUser); + messageService.getMessageForSender(senderUserName); } else if (m == 2) { System.out.println("어디로 보내는 메시지인가요?"); sendeeChannelName = sc.nextLine(); @@ -78,12 +73,11 @@ static void messageService(int routeCURD) { System.out.println("현재는 내가 보낸 메시지를 삭제하는 기능만 지원하고 있습니다."); System.out.println("사용자명은 어떻게 되나요?"); senderUserName = sc.nextLine(); - nowUser = userService.getUserByName(senderUserName); - if (nowUser == null) { + if (userRepository.isPresentUser(senderUserName)) { System.out.println("존재하지 않는 사용자입니다."); return; } - messageService.deleteMessage(sc, nowUser); + messageService.deleteMessage(senderUserName); break; default: return; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index e6308b4a..5c673d94 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -30,7 +30,7 @@ public UUID getSendChannel() { return this.channelId; } - public UUID getSendUserId() { + public UUID getSenderUserId() { return this.userId; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 82f154a3..3dfa4cff 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -106,7 +106,15 @@ public boolean save(String oldName, String newName) { @Override public String readChannel(String name) { try { - return channelNameMap.get(channelNameMap.get(name).getName()).toString(); + return channelNameMap.get(name).toString(); + } catch (Exception e) { + return null; + } + } + + public UUID readChannelId(String name) { + try { + return channelNameMap.get(name).getId(); } catch (Exception e) { return null; } @@ -138,4 +146,12 @@ public boolean deleteChannel(String name) { public boolean check(String name) { return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null) == null; } + + public UUID channelNameToId(String name) { + try { + return channelNameMap.get(name).getId(); + } catch (Exception e) { + return null; + } + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 6c79d360..368f70ed 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -54,7 +54,7 @@ private FileMessageRepository() { .add(message); userIdMessageMap - .computeIfAbsent(message.getSendUserId(), id -> new ArrayList<>()) + .computeIfAbsent(message.getSenderUserId(), id -> new ArrayList<>()) .add(message); }); } catch (Exception e) { @@ -71,24 +71,45 @@ public static FileMessageRepository getInstance() { } public boolean createMessage(String content, String sendeeChannelName, String senderUser) { - channelRepository.readChannel(sendeeChannelName) - Message message = new Message(channel.getId(), user.getId(), text); - channelIdMessageMap.computeIfAbsent(channel.getId(), m -> new ArrayList<>()).add(message); - userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList<>()).add(message); + UUID channelId = channelRepository.readChannelId(sendeeChannelName); + UUID userId = userRepository.getUserId(senderUser); + + Message message = new Message(channelId, userId, content); + channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); + userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); Path path = resolvePath(message.getId()); try ( FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos) ) { oos.writeObject(message); + return true; } catch (IOException e) { - throw new RuntimeException(e); + return false; } } - public boolean readInChannelMessage() {} + public List readInChannelMessage(String channelName) { + List result = new ArrayList<>(); + try{ + channelIdMessageMap.get(channelRepository.channelNameToId(channelName)) + .forEach(message -> result.add(message.toString())); + } catch (Exception e) { + return null; + } + return result; + } - public boolean readForSenderMessage() {} + public List readForSenderMessage(String senderName) { + List result = new ArrayList<>(); + try{ + userIdMessageMap.get(userRepository.channelNameToId(channelName)) + .forEach(message -> result.add(message.toString())); + } catch (Exception e) { + return null; + } + return result; + } public boolean updateMessage() {} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index 9367077b..64762850 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -98,10 +98,17 @@ public String getUser(String name) { return usersMap.get(usersName.get(name)).toString(); } -// @Override -// public void getUserName() { -// -// } + public UUID getUserId(String name) { + try{ + return usersName.get(name); + } catch (Exception e) { + return null; + } + } + + public boolean isPresentUser(String name) { + return usersName.get(name) != null; + } @Override public List getAllUser() { @@ -122,7 +129,7 @@ public void deleteUser(UUID id) { usersMap.remove(id); } - public UUID check(String name) { + public UUID userNameToId(String name) { try { return usersName.get(name); } catch (Exception e) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java index f4525d0e..e0b9cf3b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -1,23 +1,18 @@ package com.sprint.mission.discodeit.service.file; import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileMessageRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.MessageService; -import com.sprint.mission.discodeit.service.jfc.JCFChannelService; -import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; public class FileMessageService implements MessageService { private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -39,7 +34,7 @@ private static class Holder { public void createMessage() { System.out.println("누가 보내는 메시지인가요?"); String senderUserName = sc.nextLine(); - if(userRepository.check(senderUserName) == null){ + if(userRepository.userNameToId(senderUserName) == null){ System.err.println("존재하지 않는 사용자입니다."); return; }; @@ -77,9 +72,8 @@ public void createMessage() { } @Override - public void getMessageForSender(User sender) { - JCFChannelService channelService = JCFChannelService.getInstance(); - List messages = userIdMessageMap.getOrDefault(sender.getId(), null); + public void getMessageForSender(String senderName) { + List messages = messageRepository.readInChannelMessage(senderName); if (messages.isEmpty()) { System.out.println("아쉽지만 아무것도 없네요!"); return; @@ -107,7 +101,7 @@ public void getMessageInChannel(UUID channelId) { } flag.forEach(message -> { - System.out.println("보낸 사용자: " + userService.getUserByName(message.getSendUserId())); + System.out.println("보낸 사용자: " + userService.getUserByName(message.getSenderUserId())); System.out.println("보낸 내용: " + message.getContent()); System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); @@ -116,13 +110,13 @@ public void getMessageInChannel(UUID channelId) { } @Override - public void updateMessage(Scanner sc, User user) { - getMessageForSender(user); + public void updateMessage(String userName) { + getMessageForSender(userName); System.out.println("어떤 것을 수정하고 싶나요?"); String id = sc.nextLine(); - Message text = userIdMessageMap.get(user.getId()).stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); + Message text = userIdMessageMap.get(userName.getId()).stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); if (text == null) { System.out.println("실패. 해당 ID를 찾지 못했습니다."); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java index ea03fb9d..ecce592d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -4,10 +4,7 @@ import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.UserService; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import java.io.*; import java.util.*; public class FileUserService implements UserService { @@ -28,7 +25,7 @@ public void createUser() { System.out.print("먼저, 사용할 이름을 작성해주세요 : "); String name = sc.nextLine().trim(); - if (fileUserRepository.check(name) != null) { + if (fileUserRepository.userNameToId(name) != null) { System.out.println("이미 존재하는 사용자명입니다."); return; } @@ -88,7 +85,7 @@ public void getUserName() { System.out.println("조회하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); - if (fileUserRepository.check(name) == null) { + if (fileUserRepository.userNameToId(name) == null) { System.out.println("조회하고자 하는 사용자가 없습니다."); return; } @@ -138,7 +135,7 @@ public void deleteUser() { private UUID workRoute(String work) { System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); String name = sc.nextLine(); - UUID userId = fileUserRepository.check(name); + UUID userId = fileUserRepository.userNameToId(name); if (userId == null) return null; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java index cc2527aa..2ed743c3 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java @@ -87,7 +87,7 @@ public void getMessageInChannel(UUID channelId) { } flag.forEach(message -> { - System.out.println("보낸 사용자: " + userService.getUserByName(message.getSendUserId())); + System.out.println("보낸 사용자: " + userService.getUserByName(message.getSenderUserId())); System.out.println("보낸 내용: " + message.getContent()); System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); @@ -108,7 +108,7 @@ public void getMessageForSender(User sender) { System.out.println("당신이 보낸 메시지는 아래와 같습니다."); for (Message message : messages) { System.out.println("ID : " + message.getId()); - System.out.println("보낸 사용자 : " + userService.getUserByName(message.getSendUserId())); + System.out.println("보낸 사용자 : " + userService.getUserByName(message.getSenderUserId())); System.out.println("보낸 채널명 : " + channelService.isChannelName(message.getSendChannel())); System.out.println("내용 : " + message.getContent()); System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); @@ -142,6 +142,6 @@ public void deleteMessage(Scanner sc, User user) { /// User 삭제시 해당 User가 보낸 내용도 함께 삭제되도록 하기 위함 public void deleteAllMessagesSentByUser(User user) { userIdMessageMap.remove(user.getId()); - channelIdMessageMap.values().forEach(list -> list.removeIf(message -> message.getSendUserId().equals(user.getId()))); + channelIdMessageMap.values().forEach(list -> list.removeIf(message -> message.getSenderUserId().equals(user.getId()))); } } From 48aec3872e2550c2e671c94a2db7de970dc10a1f Mon Sep 17 00:00:00 2001 From: Alpha Date: Sun, 25 Jan 2026 23:59:38 +0900 Subject: [PATCH 21/35] =?UTF-8?q?=EB=AF=B8=EC=99=84=EC=84=B1...=20?= =?UTF-8?q?=ED=95=98..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.gradle/9.0.0/checksums/checksums.lock | Bin 38 -> 17 bytes .../executionHistory/executionHistory.bin | Bin 71057 -> 71057 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/9.0.0/fileHashes/fileHashes.bin | Bin 27047 -> 27247 bytes .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 38 -> 17 bytes .../9.0.0/fileHashes/resourceHashesCache.bin | Bin 27133 -> 28765 bytes .../buildOutputCleanup.lock | Bin 38 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../com/sprint/mission/discodeit/Input.class | Bin 2045 -> 1801 bytes .../sprint/mission/discodeit/TempMain.class | Bin 918 -> 0 bytes .../discodeit/app/JavaApplication$sc.class | Bin 0 -> 675 bytes .../discodeit/app/JavaApplication.class | Bin 1581 -> 1380 bytes .../app/router/RouteChannelService.class | Bin 1502 -> 1585 bytes .../app/router/RouteMessageService.class | Bin 3949 -> 3121 bytes .../app/router/RouteUserService.class | Bin 1476 -> 1561 bytes .../mission/discodeit/app/router/Router.class | Bin 1712 -> 1773 bytes .../mission/discodeit/entity/Message.class | Bin 1813 -> 1817 bytes .../mission/discodeit/entity/User.class | Bin 3751 -> 3756 bytes .../repository/ChannelRepository.class | Bin 155 -> 516 bytes .../discodeit/repository/UserRepository.class | Bin 149 -> 532 bytes .../file/FileChannelRepository$Holder.class | Bin 0 -> 688 bytes .../file/FileChannelRepository.class | Bin 443 -> 8670 bytes .../file/FileMessageRepository$Holder.class | Bin 0 -> 688 bytes .../file/FileMessageRepository.class | Bin 1330 -> 12539 bytes .../file/FileUserRepository$Holder.class | Bin 0 -> 673 bytes .../repository/file/FileUserRepository.class | Bin 872 -> 9393 bytes .../discodeit/service/ChannelService.class | Bin 511 -> 271 bytes .../discodeit/service/MessageService.class | Bin 527 -> 308 bytes .../discodeit/service/UserService.class | Bin 281 -> 256 bytes .../file/FileChannelService$Holder.class | Bin 661 -> 661 bytes .../service/file/FileChannelService.class | Bin 10768 -> 5006 bytes .../file/FileMessageService$Holder.class | Bin 661 -> 661 bytes .../service/file/FileMessageService.class | Bin 13985 -> 6495 bytes .../service/file/FileUserService$Holder.class | Bin 646 -> 646 bytes .../service/file/FileUserService.class | Bin 14017 -> 6524 bytes .../jfc/JCFChannelService$Holder.class | Bin 652 -> 0 bytes .../service/jfc/JCFChannelService.class | Bin 6279 -> 0 bytes .../jfc/JCFMessageService$Holder.class | Bin 652 -> 0 bytes .../service/jfc/JCFMessageService.class | Bin 10178 -> 0 bytes .../service/jfc/JCFUserService$Holder.class | Bin 637 -> 0 bytes .../service/jfc/JCFUserService.class | Bin 7915 -> 0 bytes .../reports/problems/problems-report.html | 663 ------------------ ...leMessageRepository$Holder.class.uniqueId2 | Bin 0 -> 688 bytes .../FileMessageRepository.class.uniqueId1 | Bin 0 -> 12508 bytes ...FileMessageService$Holder.class.uniqueId3} | Bin 661 -> 661 bytes .../FileMessageService.class.uniqueId0 | Bin 13985 -> 6495 bytes .../FileUserService$Holder.class.uniqueId2 | Bin 646 -> 0 bytes .../stash-dir/FileUserService.class.uniqueId3 | Bin 12391 -> 0 bytes .../stash-dir/JavaApplication.class.uniqueId1 | Bin 1581 -> 0 bytes .../RouteMessageService.class.uniqueId4 | Bin 0 -> 3121 bytes .../RouteMessageService.class.uniqueId6 | Bin 3949 -> 0 bytes .../RouteUserService.class.uniqueId4 | Bin 1476 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 2032 -> 1799 bytes .../sprint/mission/discodeit/TempMain.java | 20 - .../discodeit/app/JavaApplication.java | 8 +- .../app/router/RouteChannelService.java | 2 +- .../app/router/RouteMessageService.java | 13 +- .../app/router/RouteUserService.java | 2 +- .../mission/discodeit/entity/Message.java | 4 +- .../sprint/mission/discodeit/entity/User.java | 16 +- .../file/FileChannelRepository.java | 13 +- .../file/FileMessageRepository.java | 78 ++- .../repository/file/FileUserRepository.java | 36 +- .../discodeit/service/MessageService.java | 11 +- .../service/file/FileChannelService.java | 6 +- .../service/file/FileMessageService.java | 94 +-- .../service/file/FileUserService.java | 3 +- .../service/jfc/JCFChannelService.java | 155 ---- .../service/jfc/JCFMessageService.java | 147 ---- .../discodeit/service/jfc/JCFUserService.java | 178 ----- ... 3a11c6bd-1032-459f-9d50-8e2ebb27ea3e.ser} | Bin 490 -> 423 bytes .../a93c6486-cfcc-43ea-a551-3023fe9e9e07.ser | Bin 0 -> 428 bytes .../3682cc3b-7613-4fd7-87a3-22bec5c8bc69.ser | Bin 50869 -> 0 bytes 73 files changed, 153 insertions(+), 1296 deletions(-) delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/TempMain.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication$sc.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository$Holder.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository$Holder.class create mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class delete mode 100644 discordit/build/reports/problems/problems-report.html create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageRepository$Holder.class.uniqueId2 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageRepository.class.uniqueId1 rename discordit/build/tmp/compileJava/compileTransaction/stash-dir/{FileMessageService$Holder.class.uniqueId5 => FileMessageService$Holder.class.uniqueId3} (85%) delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService$Holder.class.uniqueId2 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService.class.uniqueId3 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId1 create mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId4 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId6 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteUserService.class.uniqueId4 delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/TempMain.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java rename file-data-map/Message/{725536f6-05a1-46d4-bf60-6a0435f417a8.ser => 3a11c6bd-1032-459f-9d50-8e2ebb27ea3e.ser} (52%) create mode 100644 file-data-map/Message/a93c6486-cfcc-43ea-a551-3023fe9e9e07.ser delete mode 100644 file-data-map/User/3682cc3b-7613-4fd7-87a3-22bec5c8bc69.ser diff --git a/discordit/.gradle/9.0.0/checksums/checksums.lock b/discordit/.gradle/9.0.0/checksums/checksums.lock index 7d77321eb3e260506b9de680cb6d9fbc3c34ad2b..d3303a17454e74fdc9eaaf4b2318c8942143bdb1 100644 GIT binary patch literal 17 ScmZQh?BHkV1 zpUz)M_?_#pE>Zd*0JB)$vz-V5Zb2tLhfy#%6P}J@7T{4$NuKiF&?>DZK%pcIsTtqMoC{mj4_1 zG!4r*81yu2_=U95!&9Sb2QO6F-|kN;1TC-t(MP91qKaiYfV#8AW8WH7s?3dykUp7A@!jY6U465LX8Y(=x8VlL*RKtS$txS%}rBJ<2-_3( zmM_m5)iyF5Nnd+da)%8|>ZFiK<&=E#@8({HP3MKz;)?$X3+o3VTB$-W)$!tf{@bI_ zlIDw-@Zv_Fru8^~CeubuzV7?fhmeJfE_e(ukAeMKB9%>D0%Y~X<3}5#aKBGa?Mr_4 z%3&8QZEn%nE$u5zq-*c6jY$i8CJZ~; z-C~O<5>RAC0GWp7xYOkaE1xuHe_4bgUC^8c2zH(Dzck@E{vFLJK@JfR!57FW1#m^f zy|k=%PWYia$T_gEJl@s%e0Nn@s#amBRTrbM*=m;;LItE2Gat)_T zSDRkpQnxysZCS{I61Z)b>%sh%c`!0EJS>>W594yEykP6#a3+t3gC;MDqQe?RQNwQw zuPhaABnt{96|Hu~L?m4q?4-==&iYmAFb?~jtDP4BVQvYAPAVZS%3u$rZptM@zOBH^ z_qcCBCrRf_3x?LHAnVFNpTf+UR?Teie?>F@%e$w$%O9^cmQ}Xe)ld){6=0s2Qd5o2 z>4!l2ac&Hs6}|1}$}>8>-rmyvH$88})zjmgxL=5>=2QWK@xI})qJ3G>--ZRVwiT)K z%5*BC!p#)1wJ8yjVOQll`CWW5YqGr9W;yCx2;%t1^l)j*oe%C?6p z%TK<(MUGY4dayhn>y*~ozV-p#u0kIjNPYg*t=BQ?j!%o@%;0)&AMkf~PGk&!TNx)m zV%f*guv#MPE5%d&c`s(M0jX+8o+>ainwwagSbHBjK29NpXZ)P+w1}a}1l-k-uy7VA zhP&&v&8Ww?;phHq#^32k$%1|S>jdB5uP;pG8%t|tQCAa@F;!rwd$E41)N0It-5J_b zH8kvVW*9?9523w`KWJNg)T_1VbKKwd`F6Z3PEDb|h_>w#%Z^x01h-JO4swii0DrP$#rLo%V)bH zamnX{LqI+}F`$i9tAQQFKSk)$$a6JdtNLE{w0n;S|L{0;1W6(T9mI$XAmSQEaUg?( z#Cq&`nGAOAown#&sB@HD-QhA$ywFOGW1Qbph))hGRzPz1gLrmAw2IS1Nw=@gp+m2;cJz0rAI0p&QiSib;kwCa!=HubhI=ydFMc4qcgKC_HK18!}hG4 z6Am(O={TBWpEa+j%6AF5`ORsRc0*S}NG-T0JzSQ~Ia}h_hL+3@i-IC|PM^?Jj+{*R u{PmND3Qf=n3~<~F$ZWx)`GZZN`d$k4d?%J)iW&jnaHfh4kJP~nxqkulD`-Ce delta 786 zcmbQZnq}f@mJJ7AJ8GVqU0PCLT2fY$o{^N1UzA&(T~?M+l~j?GW}YZ;mv!b1o+TBJ z#V#q0NEE?+XZs^|LlMFmU9kvY)x)d~RmmwfaQZjgNVq6~36|-}`(TSj`JIW(EP*6n}sB zsYjIW&75x*X{R)sp(QIhjdAwmhc`v1r}8k0vn~Oto!-d9Xvn$>%-qhysK>e;%zVYe z=*YSc%rxL-l-7>>DKM$_L8;%Loflp(ojJ^W1|(%Xl@Vxigp|VH-%pf9C1yc^NfDMY|pM?JkkIxuL8qY)zto z=#uRqr@Z9_`r0E&_q19=)8Zv37B355aC_#_9UzSpLKqi-eSJ}oQC4)(tcyn;HUC*B zbtCih4%YQ5_g>EcYLDRqY8RPip|kB<$Nmh?i_e_YPe{&r1C%men9Dd9tldtCQA*T* zRd%1j{GS>^@Vy=q*V52|h*{Q@j4JpGscleV8nE{6P}48_PD3l<~n_pg$kI zD`+=~IQdI@@%#P{hOB15@Jvf)obToAHhniQqpZa1ifswM*?CWyD8}Tj@M(!SvZ_G z5G!^eV;iI!$>e2*lEg|yWx3e`2C)O~QctsFEHU4zZ)d4u7JV5fgX+!i8{Vgs+RW4y z^eC0O(!`Z}wG4UQ$E1tqm@7(Yjr6WfE)JU^vHWN%ajYOnfAC&~r(u%f&rV;MThs8h z(#Vc%eE@^Omd)2%bfOS}09gi;q-Xr?urx;V7K6X5M*FQ=jSnC7qCZ8HLVr_KiI+iR z0Zj7l_#GFB-8#!RUd`*;xe5xjvOkCpt1(YR{Goh+QbK=jV^i!mL9{CuSGMc0}NgZ3>=(6w-z)@xEan+r^D)3 za6H2z8)r^pE6*YBgn>3-5*R)b8jB%8DQpsdUO;X~-eI)+!BfS}$ngGMkM4c#A^x}; zBcTNW1xTiV`~W2g6m{YneSP40VusFA!-ts+w-ap$@p~2nB@C{r5K;|JA&z#%v8AQa z{E|%mlYIq)?@B_Kp(yi+B|?%A5v!2nnKW0s>hp)2d~eHb@*q@1Wucz2E-Icu66m)` zDNCipeRX4@1GRC?FG}L1lE6SCdu*kBp)a&qh8@Rmm%Q54`$sV+xU7-198ofTUZP4( z_*1E5rr14;bGocuVxPS!dvdOaju166E0iE=LRc0FBJX$N6SsKoxbHE|6~9eUwCWkS z!9ux^ei;?wRTBcj&T}YY$bXqI%N$9!j+doAM1u(j;lqYkfKDYCM?u`DH4@0`+C#7A zH_zZ)gY)r-Ed&ETXv^x=5v#p89Y8g)QY_VXYWy>e_oq8fXN$fYJ@!omIvHeyc*Bs2)ZJBOMW+U3TQEcB zvO=pnlMN7})}jt}$M?6^(PD%VIJP=m-s7QewsNuwbw}Bw?(UiNsgYCH&l`{2HkOai zY+i{Fq6BchVZ$8-oyvZO);YG~3MGZIsqnw5lXbzN2DL9rfWH|YG)g9v9Jh(@42J*T zTJm&hO59Cp^6g=nkr!2Gt3edm33{xPOcZweY%t%V;#d=n|MU1eN4FgI|;H>fzmyW@^>E450Z H5?a5g|~@}yU7V*CM=)jkus^P( zq=WHLUig5LP7dOz;%c9*kpFnEFBB7nQ&qSKDTnh)UwH9=!x0^pX+2$0!UldxnMEx9 zPmlgyl+aYZFMx|M%($|BVP{AT^P{h(j`^&(dOWFne-LNpKB`hLQcvJ2(h}esUMod1 z`olI4+3&fY+F{QL+#Q1@k2X526CH)KUUL3)Q?}^ggv2Pi>(-g-tay~@`N%m4ClGH# zBE_aAJBw}iyndO>`pe>)0W62o_dHa>y(1WTfpHNPq(xArT7|kFK7nC62rqh>Pm{WL z?)!-wPJMQJ-r2P9J?5iOKf(Zlv9%$=^8D7dwL1LdWZSki#`3uBIH6gE6N_u~2pJ`^ zki;1G%X-w&$a^Yns<+-yw7|omQA->megM~^YZ-mzyt2J-{8#gvIfvLOTXiB0x?eEh z=57`+&9w^6Df|J^4m=hxWdr;trnK1cmgx+Y#amj4aKZhbh#Q!HL|r>r7e;3&UXs;i z=lV8&k?ZpP%h(PJY%%)Ma@>Zx8z4d+gCBX5Z+iD&&NkI(*3%g~E-F&FCO*eS$Tz@e zCsi6H_+{2p;o4b#bFZkF<%$`_bT;TTC*iEOy_rcbrs8FcB~d;FtPht$=1@XYF-OM< zio}puHFzrFS4Ei$8FX8_C|LO)mV-Lnf)Y|V1cu1g7G%rNgPXj(vYvUVYy&ify+b{m ziy|3qzr{F8;G%Bn;Z zQQHKf4FrSafHo+o-KmncTe=knL}))veUr&qOZjdZ6^=~37UM!f9Gvy4IXu2Nm{oL< zqUM6nHB8H8ST$eg=$dM|l_BwN$F3^pHc-)>7crcWndXiW$&N3fG7t`zyM{8S)I?sKd@rtA}&I-aMr8+ z-##1myA$i&Bma0iF&lIXb{KkY`Jo>c#*(jqJdsI(Ew~h1+fD}w@mA~M4<~%ps1eS3 zehWwAvdsSyDdNhPmcDu_Xw&(f!wIAd*a}cTO%UJ;=(JRc&!hvpCzyR~wpG?9AH~!P zjS!fL>C%ivgx`O782y{JIq&tAbX%crF%!2U$_o8)t2{hIk)?&BaGk)un# z+K?D&@+`74_Em=TQ3q1O3Sqav*H>uZ?qbIfSqwfCVLe-gdk`fcJDv(kL{#)8>OhTX zC3-`s`-aBNSYcI&&LZ?|D=eEn!9n_5(8PN?1me%;< zXcgEiriW}2dfj6l%(+n2eW99veiWV*Xgv?%o1o!|o;P|MUitGt*ONmFSLh?jvn|L~ z7mQH)Yf(F?Rp}ab^ZWb`vFX6X2DffId@;ZQb0Y*)7}|x^?JDvvpLZ{?xO}$tc<%un pQHc{I_;00O!2063ne@p$Q@})ocq=@hyO9Vm?!mcp{qG1ylNh3%RO4JCVsS8MiBm@c^sfr1rIH(li zDite1z!)7?4IpS-fKj$#Fft5|8igtzxS@D z7pES;)vmGB#km27Wj-WmCl-X&-O%~(5>db%OEz?k>bz&Pt^i>|s$z-NdK{b=*Y5j= z$fyC-%m@C&A}IS6QShw35;f~VH!%XfP~Wg^Q?U620{Q<01Zy&MNEMTQo{@ka?gLb7 zZ}{TFBQ^yWZx^8=8*t~Kw7Nb5`cvO01SZ&mT`0J9vapRkWdkyB2|>Fc4;c9v+M1bZyjUcOoz$5UB0F z;R)NR3uUiI_9Bo^14a&m5W6Adeni?1REz;b4rJ(HC8M}GCktWm8lZ8ogJ*jm9ldwJ zkdHuNKOi{zK)W&(H!oKPA}p~SY;Y`s7&|si@8YB&OpvAMb9BYQ%TK5}C23`22o-$< zlTKvFtTq4Iax!{zA_Ikya}*ACcr#MCzVcHtV)Bgu*ChgW30lVcM{NIH6y8+GTtakR zOtYMa(?r|QN^RPP`dUT}M?9*65T59-7+Pti3t9iv*<>{(LKDt`Ns0uH2Du_oXb7BWM~(3fsV&?J1SMI4 zV%pcbq&?TkwPuRIjY_h3KEY~ko6K*x*2C<&jF5d~fb+t#`nl`y99;4L1}prQz!~6+b%BxfgCgO z%kS~~UJ&eT)wwfGvdcW|DHCo}Gc;f<8;dt|7F`YYz#1ikt1>0GTMD85@|`{RY13E( z*WTAV!R;PSA|*eGUCvEkFvQwUuWtY1p}UZ&HTH2?#kZZ6al&sL|00W}2#p zthwY#|K;to&#@sPSFZMsmTFXc*X@>891d{98qCm^#PF>+VvVPAwqseq0jx1Az86E% z5lF>Olk_|j-Q#Sm5*>G+CCEv>@swY^w&aOKiZyC7z8&*g$~n98=AM_f?qI+lPVN08sM~um2R1J)wZ!d0AbH1Y;fpzW$_wvSxvCa!?oiytpqf4 z&BU~=hEjUCO$j;D;#RN0B7YqwkC%A%3*GB2j6H8d2kTR@xyc#&>Q_O$O u#u{z|sqgdLjq!C2IZg0NKjMNx()NXZ<+EN#uLGW`ZlinV8lWiaHvyC7j0h7id7?buP zFOyXwsIwI#XaSRzBp8#$B#@JBB`}k7_}gV z!dMs!eFa~@C$LfD86;ZVIp_TMpZ|QBuj+G$@$y}I0Fc7Yt?|l4m^TGFOmrf`pdB9V z9vmC6&}~DHi6nX%g5pXEiZhdkup~{( z;$3}WtKv}$sT&L-k=4AHx|3}Qm!7DxzzG0QKr5lsnG$*36G@XMCy+Wsr&;NTF+x+7 z#3_3(^dw7*XT9M>x*9152xAmuRAo1g3G&$yz$A4XQ=}T?`h?R4hnte7F(Z>mKc)Zj zel+fGDI!*Y>kfW*TM_NC)_Zi_&=fDB5BO8atU#iAu%}U}r92;8@WYFGG}G39swieF pR8eHgRJ5tg_e(`D;H9)Vis6_?ma3h=a`dfWjV6P-b!=iAz8{kjKb-&o delta 637 zcmY*VOKTHh6g}Terb&k(+PE>PB!ki#Cbd?LO{^NV^;P@yQJ<~WM->rTk$}rq>>?)1 z&p-rG7nW{Z^ku9;Tq%Nr2>y(jYz4vB`O<9MoO|y1?sxCG_fhcoI`i|N%6kC&F|lZV z5kr0M+gW#E#$C!)ORH}FvF$Fec*UIe@PS<|&3eyX+5Z*Hy|caYQ}@MOwOI1zXKb&S z_wujZLe4F`Y!6_E{4TaM@3N4@RsrMgz1x#n6P-x;k+!f0U9w5bHte%FJ|hd-CM_M8 z%X%spg1|wg9ujDc%TcXGe$~E-G5K6i%a3}}yfu*>oVwpTd2>qs&^v->O`OAdKQ5?0 z7iH4-VZ*3^Rd+1xE?Wd}S^o63h^sPYIKJxwQ9165$~%TN+zE{r0CY|@&_L{Fww+Nh z8qOPtMG_4?MD5jH?P zk4!^9Rg+b}u-*?Y--rPWs!r7Bsrwi+iBP-@=Ly0~h=kh9*sNkl89SY}RqS41me^Lo zUSRDhQNaOBGpWC`gS1r?L7{0~@_m>!=C9R<#&M*-Mb$#B}>!u-uSLYyw?+9SK; za?vM?;{Zcp=h@TT&kwJIjh8e%4>s0v!J8*LZ{PoV@hN!sEm->;yjq`6;vfzwIIQ9b zW*9PkZ3A=+N=K5nrTATGVRJ}27p;ockm8T2$YGXZh4sj<3erZcs!HUziW4X>#3fSW z!eW>#X}u#3^2AYOpm>e6n~tq}VO8Dcp2r=buW-+FRxIx8%a+}_X~S%Y<$l*0^B-`Jp;-Gb_6pJ4VU_99{eRVJ4Z;n#MTD7sV7hG2 zB&e4-_)LhG8T41_Z!#q7PS-W98(hjB?H_Gk-UDV)qL(SZ2$+1EWXrVEX{J_TsJspK zF@)#HN*GAs6j`+wfYX={eL5D%Ba_z=MU3W!uTbu7BC$>F+eA7&y@l-D7LG2G$={W$ zrEn#&lZ5Tn$sy3GdLT@7jO>eNkx{%1ze;< R5PdbfI=kcOs;kEMkq;xm^^gvPoHPLuB!3jQpU z!$Jc70Dn|S^(w}MTnr6eU9VnMy{@|c`TYvOJ8UM1P>WGdF@Z_K?3p~5B9r!u_%t}v z$`dAcjWzx~p|;iO$7m4d#-yP)ndm8Lt*)9#Fcl+BF^!o&s`M_L*Eu0Fmay0zXPQDB z+H&Z7zS1(^Nf2W;^q(UvZ~c?f={M2FLX5=}OL#m~f5#egzbhs~nhfv?=R6?t3tUem%16_TVgN%{+ZlPq>mz4?r zEm-%b#u46j|3d~hYwW7*cBo0O7*0wyX zekPsM4$pX$5pSQc5{AjIh!3xyk!AJ-TVgx0Jpx^h!;kq6VPJ-nfb@odRjjes!1`VC sOVk))-VembU(p<)^$qi(3gLH^7PFo(7U3z&3HCW&uuYiN=JyhkU*#R2d;kCd literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index 834f52a2972f25f6eebea9ad1e3ef02bcea54af6..2b6130a2c09d36e80845d3b3d9f79e3e73ed52bd 100644 GIT binary patch delta 719 zcmZuvOHUI~6#nka)M=-;6{tm;w)Ej39VsoP_`q5e5pd+Oum-md&BRp8#B>JZ!UX>U zxjWY;#)XNpXo!ifT)FTc=*pi#)HBm2n&{>{zjN+)&be>-4^8{>^TQ_qO>7)$)sYCo zh^WvwqTmd5QB$&_BPS}l+h&k_k=T4>J+-R)UZ-1awJpc7dkqb7oK`WyF^VyUxnWsy zR&@smhGfb3PhkXSkW?|waTXJY-)f@8O3@6mDkeE{$cr?q@|M@@I1d}fP8dbOq!iOd zS}L&fqA3+wNj#8p?1Fe96&K5xRZ-!nVvb?-ADRrRV?Xmu$77I7hN+>9d5$_3#Aiv5 zU&3V-S2z}Nm7x-hkdV_MrDPgA;<@}LrR>?xJ_9ouVlB^VKi;yQ+_QGOws@uJb%yA+ z?Rs1G-mcwq8Mx`MW~FPnuI-{g80_ozqIN&?63Y9`F)qIT^^w}j!Nc=J6?8WR6J%xSl9NO+2OW7@Yyk@>5>6*l zQ&__^Hedt;<_FYp6Dw42D%kcv8!=y|S#M#LxUW%yLplLhQ9i*E-3#j!lW-d*X@$^X N+#yQ~tT=Vhegm8cdT#&# delta 907 zcmaJ=O-~bH5Psh6;`Uiq8>af&Dv}&D}jZ0Fu_Al zo+NuS9z2++2aP2L@FRNnUzm6j;!gl)+n$VJ56|q(JTvdiyz~AN-$~++-Ot|uWH7TP zDorB1@Cgtl_#rWjI2A6^zho?~n0Z6FZ(!$C9(Xp(RULFWJ)2#5%ySwM?~RAE5e&B<(0 zU(uD4ZWWZAy=YnmA_?enrn#``W{ydSqnm*ri zPhWY_?@8H=jsHhhjz<_Z^ED>gcRxVMr}A31|sy@KSvSHQr}8`d%d)7Bn$gct%j zThBk3&=+R(xsoA3b3S+ytBBz&I9d=8G8)(c!tb^kex&a?95=u1! zF5z<3HjXP~p?HGA`v{ifsQYb@2(@diNxeORs+GKWOIF~x+HE@ z@2yLvE?pkk1~LSvZg)NhU+L}K!pQ5ruXK_JZgr!y9iY|bsWw0ThtNdR521&)uMf=_ zLJP)d&BoD&NwgzZKnLz1f_vzywv?`wjjPZo5f2^LaGjdUA&4v{Xht$MIf*Gc@CGp= c;C3Mk^r{5Ndz70OFik2WmD~(B2|48c0(17j5dZ)H diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class index e3a5147ca9c683ea0206174100e82a6218f4676a..92889996d511595d2ced2b00010481030727e9cf 100644 GIT binary patch delta 781 zcmZXS%~DfA5QV=$1Y$DdfxL(zc>Ap2)ovI8&=`Ihl>qayEdU4oxRM zMO$IJl&_W+Uzih)LAo^EO{7*S{zF=ca?z$&bBR7hxY^aomp3!+oQkOdx2VR0ml?7d z)?6Xxeo`|k?*38nTsnpJGCDjqC1nPi%csbJN@z6f(s#T&6WM zrXDi&1;;r9&1#Xv3{WgNrN0B%+*V{omaNs6^-Q>Yd9$h+R{*(oU6 z|JTJ$TC??ActmW(D_Zc0pO-8nQAun`enss!;RW#qhF0!~*QXm;?;X;F@FZ4wE4;VCYUtG8v3h^(g?1SMn}So?;t7sGg!ho!dXPE)k7-EBAo(Z)gBUEH-l{D`d=RFh6v6IqjL;l1)?l+a&WkptIsG3NyDg*j? s!vk_c;GxvVu#bt`Qng9>d?(V*Qj&_L;3P`$G&isjSQ@O!F%Rp%0ccr+EP9mgKQ(6@##78ja z1(-E4F{Tcxap2H_10TV$Q%5Go7}u^uCk)p5_x{&q|7-1*^)(py{QJX4V1YX?179Ba z>9#nAL=9KEr^21WK>QofHqiZ{*C#77YzFo=PD{HnkXBPwb30Z_YC5^{h|4UAC zmR^&HMIZg{zM4{l?rSv>j1n^$wiqGqep9n5;U)}Qop;v_JD6tF#J0$A!F^$*{AtE4 z#>u&Fj8tsW;$r8S?Y$#acT2mD7BFpb$^C9b`mb1A?WAlu73ZILlUXNPEZN@GVf5WPIz9t4kHp5 z#9Mz8$g|ktmbfO26srMg<`r)LJ?8r0D>*?;OxJ3DSS&4;6Fb<+X4-T$+0fY2Wc4j) zLIZ7vG@d)cq@aXTd2!kMQSTu^oj%c|FX}raoNY7J#M0d5Cf=4->_IDDp+|gB-t8ty z2wOfkON2@J$7zOmK2MYz#8_j5P2v|HdcYP1#Q=$BG=4yV_HSfVL<~C0FN~rwKbxV!)|sA3cVps?qA+D4 z3l?DTM`4u~rKKrRLMGA5Dyz74mt>hN>?X_X5^`Tp1H(TiQ`Ozm_q})SednJ0ZvXW6 z_dfvGkIyraf>Z$>5ot(gSbko86_Sk6PtW;pcPc$Md5O;f_jQC9tzxMtx{Xe+Q%KrRn$ z6~n#-LnERtsv%{Hx*EkW}+_Ah_|`4mWFgiHWhal8CZ*T0^Sj^9vi0V zE_lf>l?cf#+D7WjO`xh#sh+DWXc9=o@5LsDwbqr+SC89$*3%KIBkr^A_u5x)*+cF2 z?Kqk38@=V3D8gm|TSOG2gkgmf;B+Y3gCpNC?IyP{;mnagc~Z4jKbO3Otpc`**p3|x z*|T=Z;MJ5b%xYC51+SdoAsK{M%`OqUv4?0-je1=%6wTzNFvDr0=KMuxyx7aI$-XmU z4?G;}>!)4$?7l9mtJi0DJhX4zw+DLcfy>s_E7sM!rCe5i5&QTam$t>4r&#ua>b7aD zzms72Vyk0hF2;&|V_o0bgMB`GxYO$FnWECV_uOaSc|3Nbn}Xl~ui}rbu6x!{x6dB9 zVt0MxM&QLk3U^!Sd=7kL*ZU|f1VR8_9AenKz0~z)f7QdmobV=6IBh;pz+n;Zp^B2l znGR?q3_6VheB(z&1f1m3LE>twDyjz+ty$5%IL=wTHe&VmT6bm~$I|>h{R~-=8ONrlFi=EPXHf}~M0gR_$`L0Br?QjlmVwbh!~#_H&TPfaRboMg zeBb?-pQL%8?i?>D!Jv%hJ6CHkiTsP>c=m`42!Z3?<4u%vXL78#45he4DQl-yUs4YLbwyVMpR z63Qd&1#yPw@Z(47WiROK^d%197efCP75JSz{DC9*6G!nE0+gd;EQ`+fWvF4fsAYMm zXZdJwGT%Z9sG^S=1uZ0*o0I?A>Ae-_XfH3wrqWwFVNJ{WczQr_7rTtJvK;AJ_8 zKqI|~AOO$sjl1L|?dBLDyZ literal 3949 zcmbtXU2qgt7XB`oNzV+Opb1fDQFl<3BqSN4u0jR_@)I2m0huJI>!O`W6B=fE;!KAh ze<2$b16A@61QDrVNu{*3ifD}4)v~PGhgBbZ*{6Nks(rGG>6BGl`=C_{ez&J*n1L7w zrmDNsx6k?RIrsa{xp%(3@b@nPJc!oeUS^oYB*}jkq4( zZY1<@8*g14iRA_b=J)AV)XZ3#8P^3KtgUOmZm>uIl~|zQ1{v0k0;}eRv~GuHntGxT z*_t`WQi{NEsVRvJxf?5@Is28}=0U5B2 zL^u|gG^GW6roPu|H%!WAA*s3~Sr0>9jE+PBauv{p6@I(9L`}XOh_UVJ! z!-ukm-)r*WK56{sM0R8(d*;;DR<#oMt9Sq_n2nKfrIyR)q3h1Zg(15wWOv56$A_{* zML|nZuTt4F*a|A*l!m3dIul5`aTN0uxu#Xk$8k-@4h41HKCBT~T&&2cndMlGwJO$O zJp&%-?=22^&24{4}V&a$|ICYb5n?AH`4^6>9>xt0trF@A08E`zo*Ha z%|3oqf|XQjiM_0~b`=}Z!Mc=16*bug*yp2??9D13#}>++CFC;QmSX=ldu0(e*3N~p z06Nj7pj*XOJRz`b)&}hsoGT3huiPnm1*-DJ?#QgGE4tq4v`?w{GoCJqGinx`tBaX- ze58Q333OkTJcpyfkL=M?S8~L@_x4e_>Yt2WPS~@upz=kZ{otVe4toJ>{mswMe|#jA zJ$fQLcp}#>tI?w(?&z~uPw0h$Qov3XnRSh{{{C>9U0Y9wx5!6n%NOvh;~p%qK(@(_ zfn<-K?$mk`9I0wg#kEAYmNw+OJLs`?7#VKDvr{_zoDqS_%$FhLmfqRafpS+>IP7-F3?u z3htjGDljh-rv`IgC4Er9?=ZElYYRKk`~gl8%O8TS(j;m6nzOTl32dBfS|6$}Z~&MNOB)=6wEHIR<$@&qYx%M5aF zl1Bh6MlTPu@^2p4G*Hg_cD{xA6nuK?KZ6)|KKJo1KZEDS9lWbK0~pxJHy?H(!4W!p zR=~qU9K@a}C>y6x(J_Up7SEy&XeK0z#PIOComYm}yBu2nF>bE9Z4!U1pTu1)F^gfif3|B6s^pRNoZs6jE|Gc7Ocevvbc?e7<`sNF8u$niuZ+F z{2CH=6DmkS12u3T?x4pK`qa|vEA$RNt{(Q*I_8n*1jXm%(6BmW~EXtuUdKZN` z3|_#CWY#BAc!?`th6?7o3$KvP{WSdt7FaVNd)4u=! diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class index b2d24109c52b9ede31b7661a2cdcc0c4c6d99efa..16a331af595723c0c5724d67a132eb4b4e178517 100644 GIT binary patch delta 743 zcmYk3O;1xn6o#K^FTJI`*4py@4Pq@&D58RhfK^e8wVE_4JGp@yf+@8^tFq!Zm|3}F z*XRxx4KdM`3&TS9{uLAOOkv^Te7$GR%z5AW5&r0ej*h>62j+SDA@nm6;k-@M;Q}$m zr2gaY)vJDMZ`pn8X3FK_=9*jCd|gu5J8N#KhqMrw@+E>PrW~$vO|SYA*=dIv z^Llv0tC)@Q?v`h^nsvBo@QC1o#jTzJO1JMZBVkfcV?`rPa2V5zJK3%pLJgBX8m^_oNE4#C>xX)U3=} zg6$q+=MFiS@A@nil*G)u>Gg{x#Ky%o#_GgtmfNPUmN@j7Gk z;;y{tvGxhc@#{6(dz$u%Nq(b7Si)Ql>)=3c^w%;#mw$CH1(oPeAF delta 683 zcmZvZOHWf_5Qd+x7f$UtR%x|GO1ZW6W~CsA$W2fLi&cZfx^Bvek+jv+*6V`Ae?ZR4 z9j+QpT;QS_7p`0we}fBm{s&`>^A#2@T+F<4-g#%fnK`elFQ)(7pHH8G1+MS6U%T4>vBfFspr;FR=$K`yhdB2+9td#3@yD^t3`SB672zB+Xhg*mGBb+2` z5V7dvlv7iaD(bve<7SLOgCUDyMx5_zR>hr&E2mC7E3TZGB5jbd$a2Pc;Y#{aoV6Gu z@4Rs(ixU>-^c&_qyQv4dS+3do?J0}%^e6(tFITJorY=~_bjRAVtM) zJ9os{bia&8{Ha}k%E3h@drJ>uu&D=(-7z1a__ z{cd_*yiOxSE{L}d1T1o?%Pp}ij1;SWY332`*++~U(YF#oLrm9den>1OmKWRE&Sg6s zZF5UwZ=1FEoCx-J7|=L+hzUVSCl|%#?#4WOm|8yGrZ48*Bb4hf*~Ze`bQ{mUp4g3^ zc$Hr9ro0;MC4E9uj!Su(q@A} uE^|fN%YssQRZvH(!pV(kvBa7j;F_=@jNc>-e1_nd`h{ueD-nZR diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class index 2152f5f136057929caeea48afcbe8b437300fb8a..87f87660d9987181bf372bc7e87211935fe093e8 100644 GIT binary patch delta 836 zcmZWmOHUI~6#njX;Nr}!l=3QVDHM@csjVQ$TM-4zQ+%NK9-2moPza?i+_2S+Ni%=I z9f=`^y1>ST?)@nyZd@DnyVM<-%(>@%zVDnP?@zDw{m+-L0LHOauqH&(EgI3ttn=uTtJ`(VTCat(sFv_4)WBbu9U26n?bZQM5^%Q)tI|w@LJiPIp1H+1==oh$-|U?!Fcyb^=L>iwb?{cfX0z z7PBkWy;6k%0W+V=>{_^tA&Fsy5yS-s2{`Vq8jZ08#uRBx2&j$hPJVA{J(GT^A?pSy z3s*5IaZO>0eLos=fg7ZiUe~lXEzIDiL`q?n!5YtUV4lIPOfKiV$XHm!lEf{A<&$92 z{opD3?A`7BUS=`BwWddil)Gv+yKl_#{R9lI6YxNw0+p1vX(jjyz7;*6A&OKC+@aKA zK;kZ?DktC`R%lt83O%~`9kV@rBPGcB*fG4vs4XFIxbO+B{*GgG1xvVK95UO)KF@*( z({=kG2LNa2w&_*y!HWP77pA61wldF0|9w0-K^?&=9@1~J@(~`h;S*Xuh`%g1gk&j2 zgdKUD|KNVHQZr6_#)2P!eLSV1S!u*g{FD4={Fh1?B+SvVkntX7F;v2p1N8Z?pK?zh zAmpDrfs1AhCyNzZ}j1XQFLulg`+j;R09=Mao?ZFaa tq#h^D1d%4;Fmnw9C+lb^6QN%(!C>qewek|YsQQhtsIJtXCiuLZ@(*vvfGz+4 delta 827 zcmZ{iOHUI~6vuyeS{#^}DwH=Z0)m!SYq3b>Aumz1@(@H()WlS1pbFI#>c$v81DP-2 z4kaXt3v67taOr1o?Z)^GjPcxoxWY{CIp^NivjvL_Bu%;< zE)r3s+!?}=E zPIU8YsrHEv#r84x36u!#PJN^)*t*ZDSg1s&vFkNk*qby+t)5*cbDra5@+h{W}6Y1L{SFq)=X;wnK(SMq*xGYK~_LBLhEFD79#_9kV#2q96kcgAfBJgD`^t zg9w8t5K1wKF~~EBGiWeKFc>mOPA+3fVU(GCo5hAvVX_3P4Wr8BP#~!>c@nEVqt4_@ sK+<5c5SuNl2?HyG>EsYLZ%zv!%Mxg&)#MdyKCHG3Tnu)Tf3nE{0M%(9DF6Tf delta 158 zcmbQqH(SMq*xGY7Qdm~HSFxlpN=?4cV#6p0Bt<71vZ^yGfmwM#mKvC~npKNYYw|T# sdq%yvr<0Prv(J^%m! diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class index 613deb9e5c4f2fe3f508e8c36656a5dff48dbea3..6956004b426d955c983bba66868ae4b3a44286d5 100644 GIT binary patch delta 226 zcmZ23yGC|HGdp9!D*0!4zrA}+ipoS{IGFrY{{ zP{f-v3doBF@?ya9Z+KH=6Brm75`m&gK+$9dUWOC~NrqGgZH6=kONNBWxqMatISNA0 delta 221 zcmZ1@yIgidGdpAUS89TuI=DBZLHbNygKW9&1X0>79Vz8a;!`(0H$e_mH#9+kW%wWgh!r;Z=$`H=r zHu(d0AEW2wdY&*&Uj|kNKL$<)|H=1wyg7q_ykH2l!FqODOS> zB6xbs+nIUq&3t`-d;++`EJlyvrm!pS*G`$hSIT>34KI~1Y$;XXPOhz2!Mb<;@Ft9r z`nm1I=rf!w#a3`FOvRsGm$C>9eJ{3>;X29wl$Iu_(8{Ls7lz9u`<2TB?Np`RPK_Kp zDazeO3>SNN^DdELTGJLWrXFJ0)DgynJ0esM6Z)Ux LnBEju(>eVCQI?kJ delta 34 pcmZo+na#*`>ff$?3=9mm4D1uR!Y9vS)aPbkU}Rtg3NbOT0RXJn2O9tY diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class index 434aea6310c42a21fb2f13830eb7d7240d6467ea..b1336ac6f3ab4eb2f6832c9a4cf01dbfab1e0872 100644 GIT binary patch literal 532 zcma)3%TB{E5F8iU(C{kFKa}QzZ(IsUNC*k35)x53z$qkF zBIF)8t-YR^9q)X8y?+3>L=>RMaGvWWx3!U#<4b9+)D&A7^{lHb29MD7^E+=$GH7R+!uo&O>dM>EQq--(}y*3`v@_PnMwPAZZe?$>#a`^okUOGWE45;cr)x}SZ!WEyF$@z~R+(#zV3>G-3t#k# zNMRwA_}NwDeL8+5NTM5)i(9EkIQkpGS-aZ-1H%sG3G^wEJ_cx$39#4IA;PZif}3=?Sw8DtrXJ@47$ffqjUyLM0bF+;W@Lm8hj z7<>CI6BfgTuligMA{oZKFSV8`ydM;QoyO~UPZVJL$8S;&S7 zBZoX36AKO&QDCUf54(G#f{ut7tZKc{Jg>V~441X}aZec1E`5)oP?Mpk5BqHqHNAE~ zo>EQuUeNL)nb=cjI_^r%aQhE$Pya+MSQS5*a$z^rF!Dt*TZZzVBR)*1q@ude@r}~N zq*EmlA~*1~7SvpJGAwKp4Jq0N0!oOWTZ#^?19^&Mang)*=3oT&Iu0+9Ov1nsN+g|0 y0+z8tmW9<>@y-|;$bZ0m7$NrtJAq*Mg*b+RHS(pfj*YQ4u}RvdtUT>W8TJnaEwdm1 literal 0 HcmV?d00001 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class index bfd2aec4644e39b18f5ae16f5916a8a13f80c82a..1d7858454656f8dcc288513e4dfd75587cedc000 100644 GIT binary patch literal 8670 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 SkYrvUzdl4%zZz6Si2ff37Q;~h delta 150 zcmccTyqj74)W2Q(7#J9A8HBhPm>8JZ8CZB2SQ*$Rdoij^RB&TsXW(LFu$&yosxdi^ zS9r1^pDClu_AP744gm{7=aL|5lC_adHP^J0|Tqpb_T|cKmjHO e9v}&l29dl#k_XIYW#D7r2l5yh1b`$HgCGC~&=8RT diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository$Holder.class new file mode 100644 index 0000000000000000000000000000000000000000..274bdd575f70fc6f6abfef254140dd76c1aa2c86 GIT binary patch literal 688 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 DXQDK> diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository$Holder.class new file mode 100644 index 0000000000000000000000000000000000000000..d8732074b5c2b9187a9a086b09e12de4490f6eb6 GIT binary patch literal 673 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 literal 872 zcmah{O-}+b5Pbs(x}YE^s2AhSkHmWMgdZ^`o(LwQ+)Jriv+R;?A@OH{PYL!MB1kYg!)8Qh7>-h)<-kUuhkaVLcA z_D;8edBUj*2O=6;6F4z2QDnkE^i8C~zBW!+Jq#n`Li;FgjjzQ8o0~}6t69DPk8toW z3BMm3r9}+vOwNSdIaeT*TPD!$(V(a8we0zvskTBT{jRhoj;G0-yEhTxto3i9^lqC3 zPgyNpG6kW&-AY6nIpd3tl0l$tbEiwlM2b-R1zW|om#^6K#GI8!Fu$TbrlglYEhE`EyOIS&#sH9M=rc?MQ! YG04U@1$Y%x1sdtKH&be_CDN^b0N>D|d;kCd diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class index c2ffe414db269e2253fbc5cfeaf5aedf6b9e8029..205f3af2567802a8d2a6c79a6dfa46f6ca8ef1e9 100644 GIT binary patch delta 113 zcmey*+|ML%>ff$?3=9mm47}_NOpFZ16CcV>)U{(`)|l8J!pdEgnwT=NTZ)f2B{e6t wB-J@1F)uGQXL22*o-r#6BLgb~8v_H7W{1)oP?{4;bAf0EMh0#m$;7||02);jVE_OC literal 511 zcmb7B%TB{E5FEF(p)Cn7i7(*LUhsiqgir-SLaN{pmAi3Pt&5XXu~Ug(dW}Yy{ULU+~B06-mnw%94a7FJ?F!&l*u>mF9`8Ey{TE5aZ3`n;mrk|b zRd&aXEG11Xzfc*kcn}#eOuc_IL}FcrMLe1P8HjSL?CW=)nBlxV<9vR9>l}WPc~gd- zT#|fYxc)`{zlOu4s7gt9O1lK7K967QMcuj2z|eIk0tRl+J@irUJMg%VLBofhk9K&_ V{ErYe7-7pJ96Bd=FZXtE`~~4Xi_ic7 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class index 82d8d1d4b2aa5ae7282954f8da1ab49b9806fad0..8f0c75d5d0065a7ebd1e4c18e93d512b49e21c7c 100644 GIT binary patch delta 128 zcmeBY*}^1n>ff$?3=9mm41DYiOpFZ16B}hG>e^{CYiNcsGVqobq$HN4`lc2aC#I(| zGKgyUWF?j*>gOcprRxWm6lLb6Pu66V77ff$?3=9mm3<49m62)>ge6kYD67@?K4WCy J1CmS(`~bcvMfCsx diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class index 35c51b56b8b5883d8410c6ca175b2746864d0bf1..19e5eea129a600a5cbe1311d1ec02e18e77cf380 100644 GIT binary patch delta 49 zcmbQq)WF1b>ff$?3=9mm47?M$qM4XACRQ0t+z=wl#=yYB$iT$_q!}0)xPc@S0}lW_ CKM3yt delta 73 zcmZo*n#sg<>ff$?3=9mm415#0qD93te6kYD67@?#@YiNc| aoEj#|#lXPA$iU6O2GqmIzyljZ27 delta 19 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 literal 10768 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class index e658eac1750bd7da81c91c30b0015a4eab73251e..c7c4dcb625ac7c2dced14a80695be4feb4e98a34 100644 GIT binary patch literal 6495 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

2V*}y`Qjk_BZYn37> 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 LscnL-j9mW)Fyb5x diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService$Holder.class index 650a56ebe74e25374e9633afcc6e71f0f5d1e207..0e90fa32ea6964f5e47a979361957fb2aea42aa1 100644 GIT binary patch delta 19 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 kU`nMbml~il literal 14017 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 HORoO{a^A~! diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService$Holder.class deleted file mode 100644 index 5bccc799fa876035e0ac5bb58253d1c526090020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmbtS!A`lQSoA;2le3I6-`JZ0YmBmLgKM3t1c<6=@$OWcp%Zl5AdUm zQy_ZqhS_9i=k3g!oj3dW_4Wba3I{eaFid0}I#6BfgTh$dV=$0|(tL}{&}kdKrW(MYO zgkxgE!6r%!&GqSy+fgu*F@x3ddi|#7-Y_(}>+@YQWL;{5q108O^rn-cjQjpDAf(cb zgdYt2Sf&07%qCAtGr0e#x$1#RTMZGcw6=TEG#0X@(#o|zGM=Ynq6AOsq#bFRlG7oT zV>j@%mh_FnP8nJ>YC_87ak7kT?raYBvbf%&J-r4hv;b!rfGW1h uv#|4%e6*kjitjM*=P10wPAM3EDXK6~BP@em>@BQ`eX=%173nY3VSfY7h@i3n diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFChannelService.class deleted file mode 100644 index 58973021c706399f4601eb850d46e5d9dfacbb62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6279 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService$Holder.class deleted file mode 100644 index b38ef15b4c064ac60e17cbbf23bdf4fc1452da5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmbtS!A`zZ>V{hj1zzawGelQk(!jP-WP$t(5 z`pIeEfXQ&-M-#4|V;LrVB9)R+$cIw-(NM^QD-qA6FZlS;=eJJtPAKJ#M0bf=FrepA zfNfyI#wLmkjrHk{TTw6+F@xE5yS;|%+%VKT>+@YQWE^UPq1ch3aHo@jh&uL u112gz$wv!npzsdkVUGMOtdxS`m!bk4Rl+pvVsGIM?31_XR)PLP4c0d&xuEg@ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFMessageService.class deleted file mode 100644 index 7ab4dcc6a96aa0eb0d3ffe19136ea5a60d3a8da3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10178 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 F=vNGa0ZIS> diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService$Holder.class deleted file mode 100644 index bab2adda77f93e8a92443ed9cc7009f143fa5bef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmbVJO;5r=5PjPMEv3qrpLj9RgL-g}#)w4INWhSK07*QSvg(r3nr`8L84o0y_yhb= z#wieuSF*{>&fD2HllQ*9-#-CdV$XsG-9W}h7CDB}$eVgR@WLm4Hy8;&VaU~GD3b<* zestV7U^1Nf(U_~3ScVB7OQmEK@}X3IG!!!7O2kv?3qE@E`K{Bur@Fg)bG$cUC03V8}SMJwvf0L*Y)w0}=PUK|n~Q6Zu}y z_hOmWOE8l>OT}=t>cHjpG}o;A!BStV8%<(gG-W!r`d_-!)EDY@g-TkHB3tZs7>d{l zJf#G!l3VD3eUeurYZ+>(z;x5-khg@CsN$3v~;QJrkFm18Y&d+MFXnXpvuJN r@8^R#HBk6~@i0UF4OU9Q@JCUGjxEA8Y-4Ah4eV03sH;H!*I@ks+R&RF diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/jfc/JCFUserService.class deleted file mode 100644 index daf25c08e576a703b028b965b245e04a33691ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7915 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 VY - - - - - - - - - - - - Gradle Configuration Cache - - - -

- -
- Loading... -
- - - - - - diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageRepository$Holder.class.uniqueId2 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageRepository$Holder.class.uniqueId2 new file mode 100644 index 0000000000000000000000000000000000000000..274bdd575f70fc6f6abfef254140dd76c1aa2c86 GIT binary patch literal 688 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 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService.class.uniqueId0 index e658eac1750bd7da81c91c30b0015a4eab73251e..c7c4dcb625ac7c2dced14a80695be4feb4e98a34 100644 GIT binary patch literal 6495 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

2V*}y`Qjk_BZYn37> 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 LscnL-j9mW)Fyb5x diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService$Holder.class.uniqueId2 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService$Holder.class.uniqueId2 deleted file mode 100644 index bc30adf2176dd9673be155ad36cf018c09307215..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmbVKO;5r=5PjPMEu{(~e&NML59+}^ssW8kG?0*b08KoWvg(r3n%%VcuymXYvA!=6xGzZVixZpVQi z-up_X@f^$~&r&m7Enafo0ado^K{(gh>BJ)yh*Ua;%0C5<(g9JrCv?(`HOvG-HNpsx$2jS~O%rN)&POjC}TR0`@vRULl(v1IH+nb!Q1!MTH_8 sYrmIwr_?~<1J=U?`8PNz1;Zc32~4aLW?%!GQ*U95yhB+9`UX`vKUFiJi2wiq diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService.class.uniqueId3 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileUserService.class.uniqueId3 deleted file mode 100644 index 0bfa6fee5c794367a618f7e1205a9e5d80e33814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12391 zcmcIq3wTu3wO%WkqH359Ypy3gaKo9}jAsJv`G81PeAXY1n zU=f011q~Ev5G0_eA;v%gihWuiZEe-Qt5RFrW+u12?Y+0RmX`i&pEHw_2gv9Bu9$Q7 z-e>Q%_g-uL>#_H|@vqKTh-eB&9h5}L8rgJ8p;V^qm7dj}Lcb@lym0o?mENidQ|e@2 zz!#aylsqQ4QX@OlHL6ox#OE)p3I?j`LLqM;Qdp8G-tGynnB}Q;kVeUAluo)v89HTB z7Sjz?!J5KwZODfKHNJ4z7Yr0u`@&VhYOgO+81{x%`>MQ!%Y1%s;WRwvqou-VWU|+x z76xIateHJaKtr+2GDs(nh^c}3amawexi zNA0&Ff>kXCso`{)Mk92(oUZ7_kcze8h_?oO2-bluml#8R!NNJR8;tgPYKraT#thw? z8e&@xc5gZ1psVO=jdFAvMb|J5R;%tkgh^BE@CQJ1O#k%=&&Mzg?-9)0x|$2RVb)gO!P+wP8SJ=p!k!_n=B9WMBdk=(Kss9 zXuM7n=vtvZ}YO#(M>Et^|fGH>?W zg-k;X{sh26r6Y4Zkrl;GX!7+s-9SZ5!)iRMyrPMo$O2zv1xn$FClCoUO)`0_)OP;- zvRjJ>;C26|bec?4G@7c@jdT+fMv0-<{19Ns8xHzcdzr=zB*1~zY^Ph8#&z#*h<$B) zSIfHCzD=~Ev8_$+uGWpQz4h+yU5&BE_1!yaXOla&w=H_8UPi?BJqBTS?`(@5I2Efu5!=1PUE~%WoTk%lqJSw%)f`kt z(>0o*(@dJhG^htl6;+-r|jLGfK76;9yIU3!e(_A58F&hSqfIGmc zCY|Qde2pq~T0nO)W%SIXV4M!~5%Kr};ThhweYD@OKE=6r+37B5x9stS6Ykjlw%ER- z-8&njTXvWnfNDpd*#rhAxU`t5u!lR*j{0cJx@ha>?#2_*r%!=Lo1#rm_u-L7cSCp= z)K{1|Uu12eSR@B6p)U%6JWQhpka&M~8?{&~ddPt|Q&}JyFr@FeLuC^Ae40|EHORa)Qj8N+d(0Yxw#z|spWwR63 zTCDFj+0$kxF+D1FYkQAKte$89*xBi;0OXVb{wPm-*;|_?KuVKaIJ;4@O3OhXoXf3YD7epS^>1nZF8W1TFgM*ssutrC8dWN25 zy6S?vEDI=rX8YtlzqZ;F@lNx3{ZNf17so{lX3gNEf6IVM@ErDJwQF{I0e(_!OxxdB8juIXDkeOuO?9tqA2uJMLSJYmRoHhov8*XVoT!3u<^B?vlIR9j}J zH<);>^mt3B?~AKS_1;tG@rUj7L#Ct<1}~u>>GWfIhsjZ=WG$Wm%4)R&=apiAx%O|# zt+dm7m^ikpK6;=*9Kla@`WgKkO9bcpn27V6eLMXUVRmeP3xW%U~2clrd1 z2oaWG#S!n#5G69H=}ttj5W4|Dv{(*aZ}a zQ*=&c4Q9<3F0HAJAhyDcciA}&-Zo(i`^gagfYWu>IRh&a?%wS8i;_I=ePT@4OfQel^T;t1h9>JHxE%r=Y60E89gglWT0Gb9HjtWvcrq5ZW z*q@*&1GT&!5}4;oc56IR=d1YYxR&?dgX}aIib!ZM!8(tHl68W<`%mLhI$y)1LB>-h zncaCAAW2PKjW?tgmaB6f=R?%Xf}v7R6{0)0b@Id}6N7RqMPOrf9w&y-7WUoeb&`XT z1Kz+BL>0>hP(?dWWSX*QfhQCIBS$WQwO`kDVzayJ#rjy&PL+CWcrMno$FSLAZD4m` zsW)3(JAaO8j)g?DxgoamWprwcK6BC?ef(hTiMB)n^m1%>OM!d5P`$_SWi$@teRSdUcft`^i7WRsFEL>`NMKNnL+?X})aqul%qVcUdm-4hYt`pI?Krf65 zs=a=11TJfsDd9v1l?Fqwfd1_|mx<3v4S8#VtG#xf0gZ?+pba^bh$*_gG4`ZIHcmu> zkJ=drB9o99MYneJne6Q^j+1zC(PjWH)ox$c`#>p2zc{WPW7`3I|@c z;R*ZW33Us~!HT{FF6M;1)jpgScomu!>AaYifP2e){)o8u z8wLbZ&mb$!zKG7?OT=`1QD+Y?g$b^aldE_-r}mpz#k9ChJ3l=kRjspEtTXa0v8_nK zc)89iR8$uU!juA>2x54p&a2puFvlCH4$C=6pH#@`iR4;ioH~t%h5Yn0Iq?K=19CnG zqgvrx9`Ho!LMYF$2oPEQWJ}dJX1O4FOIlq#wU}w5Wq1!YYg%OKpy`~ zHQ9{VE=x`@jBs_Hq;qoM7p(I5E8!2MZZ_H?D}2D0_~o% zl6-Ik*?kv_xTQ*k0Y>yV)T&MI(&i1Lnq{7*neb8Zs&(o~l(4qseF( zCCRc>@HPh_*qUGnOhW4{q$7}G$ZJV3;L(@)0v>;fWTs_dNI2pPh;Xx1u4+U>1{>2L zIVs7Z%491`%}DKna_qfwQ34@ltWyj6!p0QIC?SMN@VZ|BtK=blT!}s+4{HFM5Jm5Z z4I?wmS#Mcu%sbWGgjMf9MIC!@Ly|Q!d^0Gj!*e4bvnr*uVE&=KVX?M04h<`srSIg6 z*8;(%!*E#!3&qxOnOHAR2+M<(K>j#$nA$7O`wX*O;rG-mt@h*$7_;VFi-T>GoqZhU z#qWjb!gC;SI*(Jv;pH%MdA&uFGoESer?@k#OvNfVDuQ*PDx5NiDH|d$;cSIrh{j3$ z3oBL*PdUpgDLRxf`<7rZ0>|X3o#lQq#K;#|9bDy= zpd6kAh=XIC=BYv)jc~lts*`3%gXry^Ks6$ioSDJks=C?%j*ARLC}r+7a2^zGfbNSd z{mop?8k3qNN<4ml1rGa)?Tk~4BxXBz;t)5H-?%xt6)_uPp7tHcb^69Uc0L7DlIUG_ zD~`%R;uY{L(TL+BqxDrlG;zFQG<{P#TFy?4)^AHkL-GkN~OVH&$74x(rc`>xBmadaY0%2`e+|CgxU1- ztQ0zs%|8-zaPhdb(lmpbY&;|FqEK2%f`1jc5qgl!brUs5{9`m(Um*%60gn8#C}~x)!xGUc>jAvyV_; zh-|Giwgul<(ZkwMF2Xu-!(sNU#5$AFI>b46R$d!T%rEGq&l7b}aT3W$V=8*+x;%Boz^vztH^Ga^rAGE-Idl(n_TwO zuGDsVSiWjzNtb>uyL{D7H&d379IZ$;oW_E|y+?>-_0WZFw1f8GI%FRmphI|XpjPU{ z`xJcxXRRA?5%e~_Lt7|WNoOgviKv8dX9-!CqIMguz;CCqxOyCiYsX16i;Ah7rqLX# zq&sLi?h!*YA5<$b)18=WA!eJ0ITm7;d7!-r)EClwbQgVqbFnBc>_lr8QyTh@;s^N4 zI2GGK<@_M8gQmTQBaQWpD;|+lLb5U5$n}uyrSvXu!ZQhLIK~g5l#G=e;;-;#NH;|H z@xxeQ3U9&a4U~SC#%VPB9MsINQMyKDsHy*#Xf#=)fQAbw)@b87EGF%IJ@8$1vj3fu zZZkWdk6cgBTQu5|jurnnu7AlJA&V@4ARrp`n5ln{IIkNt2*p?ev{z!79O;!q!^6hZAK^#5>PrcfQ_EZ| zk=;Cs$3U8&@O3;H^{HIK(@^i?xja9CfDN#2L{&gQH4xy1jxD1R(DNKz?v8@Z8jG9J zA_@WE``b|5K9;pZJ1be2YG zwB#J1hW?Q>IiNL`@r?8~)|}g?VEQ_?WQyP~68ExR2xXQBkTuA$S?)=v6wYrUhB z{>NJXTPOX)TK`ukLqo9X_∓h>HNM8bB`y;H<%W4*s^{ZySA;cH&(``{^JcX}n{m zb6P3J3E%DX1Z7YoYP;|oncZ|X?M2V0K;-}^KMmT4Kz%>x90Jw-_;&=<4&h%jJx_<} z1v&~x{2V0mJpB~4-y_KQ8yt#8tvrlgUnHLuvJCu7_gr9TmkLR@1|GC-DryB5QR7177aaV28~_ZVXp@Lm_kg&&{6 zag~u4#|ZGY1h{=)qcaJgWpzXGj|sS(gUY5_M}q*y6P*K@ULS;Pg604dnm`hQDSZeE zwIs4xTS1AF&WgoY0-){YubFU*z*kF*H$1NU2IS(p-!h9^l>Zn?!x%qpRMAML8gT;A zTnDUHrxJ=peTV=Qiv_;J<19u=7|V)@0Pg~s7QzSaQgV7@M1n1n)pJ6}IVLWcz- zcAI-ER(s1I%u^7zl#hMQY`#%7o8}7^%65Wpmf#cy46Ydltl_kuO@E-9 z=#OAe7fq*bQ27(+`~{T$On1Yqt$;49hB>Q;$=XJLQ!Jbc4%}_}R6v#g=kO`i`}N;d}wn1 z4(z(1lV>W~3zy5|@EF_6H3&OjLoCyxxHL=21<_mzEHuv+8~^5R`RcNXE*s#v3U(5A z(9nZ_AR+oE7O;LDmGJk zkqtpC{OZ`#v*bfFrIi;zsW%mzwrnL0ChSUZZzJU)jhcXWCYD)@cP^gto(#n;!JB9_ z&A^t8cMRWWsJiivdqO2!&O#iL4OTemN*+w3@y_K;nt}369-`QhhnQp-`ztb#R*ufY$^6HRdsgPu6PGnz%ikw)Qn`b-N^M-@C6Nu%M|?*3aYCGGvtR;B9q!n zke_U374Q+yuJT}LEWr$_)>sBrYbb-NHIhNq8pxnJKpYca>@^bi(VM{ATj2Kh=^FY0 zj%R*|6#8wX2tT5w`2EpJ`~pcfV;q;PQYaEj|D4+L^ZWwdHf&)W+#n(4$Yhv7KCYe} z>UmNiG@z{FZuthhGEkf51QFw^ixK{0{#_efg<+{#>>Gl7Gb?m_0w_kNCHk VOMWgh4hLVqgAx3g|G-`3`Zo(}D|r9_ diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId1 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/JavaApplication.class.uniqueId1 deleted file mode 100644 index 834f52a2972f25f6eebea9ad1e3ef02bcea54af6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1581 zcmbVMU2ha+6n@_Aw6om~Qo3!arCk<3aJR}%DT=~U6w&J9Qjo!_Fck!^gt6h zX4R^?U-uk0(5sH`J2h9o?*<68ssuij`=w?{k+6%1fFeHiz)PDK*gYj zy%-WmZ{s7N#w;r?gXCIKHdLvYpGjg^AiI988UC=awz3-Dyd8bl%trHz>)(8_etjvN z|2&*uEXY(NGSBFiIE3Q3bBv>6zrdatLL+c0x?!2FYkQL60S%Agae;&*QT$7#8thY->$9xlEgCtqlXLG z=+mF08%xp6ud{2vUJbv$osF6c;cw08%f%!L0>cw@S#E~S?d;8s z4~0k}g9!~s@GJ}O+8=XJ*gXzlNm`C-cpfhZB&DV7xE!B;j?aV9Z5K0z<0z^)p>fbT zzl9y=%dFRRk3(X6`h{2sbjEjqz3oD7>_@RATlJE__23Ay^H2-g_^!{%`z)9rsv3eTd4#eI=;Zf&g&uJZ%I^Srm87tWia>N!_~>p z&~AEjjGf-b%)+<#SD?6a?w$5L24TAm0a4=Q`WCabuxzTPz%C;&t&h%{^_aE_dZ&z9 z!?SGpaY#6$Dp5jfX6qKD~D-g@E`DLEc40Pi(Pp##ESMX}A zo5E|<@Xta)2Nde;RjB1V*!A>Xq$&Cyy^DQ+AoK1WWLNOSv{XGsm6Z9mq-%UX)RuZ% zNTaqwML2(5>|)9B@}r*V*PMgapjib0&@ z(=ml1Ok)@Z_Te3j;(hFo35~Tt<8_o6M}dhmc!QJ-^r4KitWbs&r*V$?&eLNQiF?SX Ye9={8?lZKa;!R!!uQUr>;F*B&4`emFO8@`> diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId4 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId4 new file mode 100644 index 0000000000000000000000000000000000000000..1895595e7f6be7cb04682dd71b05ea46c695638e GIT binary patch literal 3121 zcmbtWOHdS76g>|HdcYP1#Q=$BG=4yV_HSfVL<~C0FN~rwKbxV!)|sA3cVps?qA+D4 z3l?DTM`4u~rKKrRLMGA5Dyz74mt>hN>?X_X5^`Tp1H(TiQ`Ozm_q})SednJ0ZvXW6 z_dfvGkIyraf>Z$>5ot(gSbko86_Sk6PtW;pcPc$Md5O;f_jQC9tzxMtx{Xe+Q%KrRn$ z6~n#-LnERtsv%{Hx*EkW}+_Ah_|`4mWFgiHWhal8CZ*T0^Sj^9vi0V zE_lf>l?cf#+D7WjO`xh#sh+DWXc9=o@5LsDwbqr+SC89$*3%KIBkr^A_u5x)*+cF2 z?Kqk38@=V3D8gm|TSOG2gkgmf;B+Y3gCpNC?IyP{;mnagc~Z4jKbO3Otpc`**p3|x z*|T=Z;MJ5b%xYC51+SdoAsK{M%`OqUv4?0-je1=%6wTzNFvDr0=KMuxyx7aI$-XmU z4?G;}>!)4$?7l9mtJi0DJhX4zw+DLcfy>s_E7sM!rCe5i5&QTam$t>4r&#ua>b7aD zzms72Vyk0hF2;&|V_o0bgMB`GxYO$FnWECV_uOaSc|3Nbn}Xl~ui}rbu6x!{x6dB9 zVt0MxM&QLk3U^!Sd=7kL*ZU|f1VR8_9AenKz0~z)f7QdmobV=6IBh;pz+n;Zp^B2l znGR?q3_6VheB(z&1f1m3LE>twDyjz+ty$5%IL=wTHe&VmT6bm~$I|>h{R~-=8ONrlFi=EPXHf}~M0gR_$`L0Br?QjlmVwbh!~#_H&TPfaRboMg zeBb?-pQL%8?i?>D!Jv%hJ6CHkiTsP>c=m`42!Z3?<4u%vXL78#45he4DQl-yUs4YLbwyVMpR z63Qd&1#yPw@Z(47WiROK^d%197efCP75JSz{DC9*6G!nE0+gd;EQ`+fWvF4fsAYMm zXZdJwGT%Z9sG^S=1uZ0*o0I?A>Ae-_XfH3wrqWwFVNJ{WczQr_7rTtJvK;AJ_8 zKqI|~AOO$sjl1L|?dBLDyZ literal 0 HcmV?d00001 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId6 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId6 deleted file mode 100644 index 802ae5e8fe779d8ca88f55d70a3025dd3c0d2306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3949 zcmbtXU2qgt7XB`oNzV+Opb1fDQFl<3BqSN4u0jR_@)I2m0huJI>!O`W6B=fE;!KAh ze<2$b16A@61QDrVNu{*3ifD}4)v~PGhgBbZ*{6Nks(rGG>6BGl`=C_{ez&J*n1L7w zrmDNsx6k?RIrsa{xp%(3@b@nPJc!oeUS^oYB*}jkq4( zZY1<@8*g14iRA_b=J)AV)XZ3#8P^3KtgUOmZm>uIl~|zQ1{v0k0;}eRv~GuHntGxT z*_t`WQi{NEsVRvJxf?5@Is28}=0U5B2 zL^u|gG^GW6roPu|H%!WAA*s3~Sr0>9jE+PBauv{p6@I(9L`}XOh_UVJ! z!-ukm-)r*WK56{sM0R8(d*;;DR<#oMt9Sq_n2nKfrIyR)q3h1Zg(15wWOv56$A_{* zML|nZuTt4F*a|A*l!m3dIul5`aTN0uxu#Xk$8k-@4h41HKCBT~T&&2cndMlGwJO$O zJp&%-?=22^&24{4}V&a$|ICYb5n?AH`4^6>9>xt0trF@A08E`zo*Ha z%|3oqf|XQjiM_0~b`=}Z!Mc=16*bug*yp2??9D13#}>++CFC;QmSX=ldu0(e*3N~p z06Nj7pj*XOJRz`b)&}hsoGT3huiPnm1*-DJ?#QgGE4tq4v`?w{GoCJqGinx`tBaX- ze58Q333OkTJcpyfkL=M?S8~L@_x4e_>Yt2WPS~@upz=kZ{otVe4toJ>{mswMe|#jA zJ$fQLcp}#>tI?w(?&z~uPw0h$Qov3XnRSh{{{C>9U0Y9wx5!6n%NOvh;~p%qK(@(_ zfn<-K?$mk`9I0wg#kEAYmNw+OJLs`?7#VKDvr{_zoDqS_%$FhLmfqRafpS+>IP7-F3?u z3htjGDljh-rv`IgC4Er9?=ZElYYRKk`~gl8%O8TS(j;m6nzOTl32dBfS|6$}Z~&MNOB)=6wEHIR<$@&qYx%M5aF zl1Bh6MlTPu@^2p4G*Hg_cD{xA6nuK?KZ6)|KKJo1KZEDS9lWbK0~pxJHy?H(!4W!p zR=~qU9K@a}C>y6x(J_Up7SEy&XeK0z#PIOComYm}yBu2nF>bE9Z4!U1pTu1)F^gfif3|B6s^pRNoZs6jE|Gc7Ocevvbc?e7<`sNF8u$niuZ+F z{2CH=6DmkS12u3T?x4pK`qa|vEA$RNt{(Q*I_8n*1jXm%(6BmW~EXtuUdKZN` z3|_#CWY#BAc!?`th6?7o3$KvP{WSdt7FaVNd)4u=! diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteUserService.class.uniqueId4 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteUserService.class.uniqueId4 deleted file mode 100644 index b2d24109c52b9ede31b7661a2cdcc0c4c6d99efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1476 zcmbVMOK%fb7(F*}7{?w0Ng$zwfPp~l5Hby=EyN@|0s(`08p3)qxr7Phu{ATMu&b&r zs=}g+R;pN3UbM1`Snv!FRs8|{6g>O^gb?SBEl7A|!ASRhGw1v6_dIu=zj^jQfN`8i zparcOVmjKeLSXg0dDS!=)15O;&&*3J5LmI#cI{w7pf#PDP9TnU4GA4d=mLAKQql0s zp6v!k(e{12j!uG*F~F4>MWrnp@oQfPnz$vGM1Tt6^fOA3sqGx;xe zmQ`tW=val-0tw5LW)Q^^=t<|JiYkHa7zN98UFl^TWpwH2j_fPt*`|Fv)}lv4ua0&2 zYDqH+*Zn{i*@IGrEm_-eYL|>Ns`Ns@h{bFieF8he>d)c*hpF(VJK?Q=!@qt@h1Eam z4<6S4`7ib2?vG*hN%-fT7f)}7w|?KBKtDEW*rX$c%>vy~rc0d)Xi;|^mryr#%@vS0b2l0cBvsm@Ljy=)PW~Cz=L)I`RuxDBBnB}tJadOf#&MC2khp|brRbZ7$ z_Ee=fBfazHj6&i*9+^jWGC{;X5s+&vpeb~7X zHB)THUj9MU(*mLXA>6b4GAIRQ+t6c(dy#q{cclhLJkDKj7+?bXBkTYU65(O7p3Y*# zu0MfxvhOzE0FO(ZRrn^ZK`w)9et2jBD{DBdWM>UW?_*8Z`UPxIa!XSVP*S~pg4^)L z{#X@BW&U*y>-yWO=pJ6cH#O)A`>uxAJ(X}PRKio}7$=noStiqRer}vq1jo1o$Z&1ws?!=x>$r%-tHbqc6J{pms(FTq_V=c5cRva;d=@YBoGg!v$p76GNwZ4N zf$G^FXDWY^gxzM67hrLi9c7f9zSQ+f#)U8cIqQ==3hfEfUrZJf74*&sRmw)6 zGS4Tw?)Q|%)gNZLmzY815`Me#@XEux`Ij&IyBDqac0*iBnqHsEC2*+P)d`QPU2icB zImHDIddtn+`sS+*4>irp4W(4UMuDFtM3X1b86ESftYJ?>$L;JxTjzPjrt>c|sifO| z-Ba>Bj%;FijyIfi_sh=UXS1ntZ`!!#hJ5Aztm|V&Xa05S`5j+m@>xPE;aS#md1fJM z``~hK%X^C+bUZL{*+L+>_nyNk7jHcXeUsC6yRH7&>Yk&UqYR*8=&U$xbMLstzm)Sg z>w2$j2sY|oQEG_)aN|_;S~P#+udT~!H0NxwCS9)5K>RDhLKN%U@3e1A(yuh>j-C(` z^ROE=7gbwI<~!(x9zR8VpB8n`C(v`TGRuB0UuRaTN!FPCzcr52bR9i7Yw0b0`;L(X zOrk&C+Ag2kYfaWAqQ)3@^ZANGU6E2C;2&Fl7!-TTGJeT%#kKC9NrA z$@0t2P_x(FOL^j&gg^ucB9RZV2INPq8Vw~@KrFEVNCRLb;Q)|jPR6yBXc4_g#)2PIY9W)M1T;4 zj6f(*ytFp~QG)UbJ3=B5B}fgj{B(pOiHLB73MHRT%1D;5s1iN(J$UB^#K~*}0B>MZh;~hdH0J8#;R)Xpc z7bMO#_VPZMb`{_^fqx6wa(Q1tv>Nc+FntXqtp(LPq*xd=YP3`;Wa2u&>w(_@Ou2s_ z*l#1?O^~>mz^J)WUGZJOjlgdKrU|&MpnA_mGL7Q;6VjUjzYqKeAT&XLhnXJ&-Ui%u z5Nbiur^;ss;E#a+7}zH0mzA*-@GjtX1G60ZTa4WUcrS1*AT0kcaq>REtsu04YCn-Q zlTt{Uk`Dm>1h|91RzY9iGL7+5z@Guz2673aI|TT1;0}XO)z2j}n2rEG3fwVZYx~on z_&DGbz<&XZt*;@OI{!<+Cta;hmx$uO0(=UXHt?5@1*ZX@fwZ%rZvs9|a;1C?_#E)( PL9q4RfJ`WKJrndV-^w5h literal 2032 zcmX|B3sh9)7XJ4DB64Ot=s+M+fdhiTKjNb-2nG&}hq)ZZbLNPT5MdaG;W0DL3=?E1 z>JS79DPBw~e5F>V(M7lt`6$aUB_ho*D@{{0E$+&+W#PL0!vJTk^FQ|f_Urri+S8B# zoCJGdPwa)qVQ=KrnM=o`8k@yxG}(PnZK=^_Gn!2kP+h*!rZea3jdovDYtvgDMxCBQ z>!hegZ?okZ^fGc77ScUCQ(rUxHg{H5N5Y1fA})0zPm6wd684;o>aBW<*=Dqxtre6U zIf)y8R5vD~S3IP*R9-DxFx2_gEy=l49s$B*j3f}%6y};t`Vtxa)11m5PPC?8U)z4r zKc!(PHAt8uO5`&71HV?E=10$FX2b>iE~*QO4d$mZA?nBR6L`{-sJg&dqNhTUlWc+h zv||FgxcU3V-~8B7bN8_QvAnS4X&MC%$DR?$nQO67)5+$@jYRbpONmjJYbV9iMF9ua zRmKDj91Kw;9x6Q07sbv{L<=!otQun__IQ#CmCC4@=w)+BzTQgj+0pmuwGBgur}P`| z9rb!&5y#JBW~=8gb2U%lr}3nD$XTQ-pvXtEIk`EYLccxy^7%EzYfAJ}wm!o@E6$et z)8ptPx}1|85f3iPyD!C<)bV@*eh!Bxq8h8Y%&xamNhF%J9F`Vr%&I z>9Z;!nMqMIOsXagtFgy?60JZt98E@>3K}?+6qkC`@4=n}+rkG}A)QN+%IJ{B&^ZOB zmefz~!$JIQRJum^7ZV#OquIRJvk_J6_rBG=cYoHd%iE)AdGoxOjt8|T3Vr%+rcCb+ z%HTOJMCwnMt*_btaeLSOt6zTi(3yNCZ2`ZKn@!|{6VGUVf7BWE(w{d%TUV^C%VZZR zctH?TdWo)?pyiw`>t*J zD|O$-YzI~JhEB*AV@Z!CHs1f;e%tiFrhw0{=6R?+^+ExYLpY+=<-DkkZ#gn|{Dp*B zwGrV4p^(cVoc`St5c9{D=OVQ~58k|&_R-fyp-9XjeuiFIR!RM7_-xruzvesFbB-1B zC1MD9@&5K14RY_fEF`T`%PP{9MiU)$ue8;AcOdQm>HTe4 zXQtBDbh8arn=EB^`jItl61vN_EAun#$_Sy*&Xy@Oq;~)MYfg(*6$i z1%-;p@053}{M%dl#hlRROW)3LF5zjF*U+GE+=QD+38yHXtgE@45d-P=^U|b2a|WA^ zcFp8kde>I4FDi7zeBryr4KsH>jNB+a^k!%Mxz(%rmpDK2;O)*8drZF^4mbMVzfz!Y zP7FeTJlNWONmLrN6c7ZXasY!j3Q(~cf>=T>;}F5>c(fdVMMwu;(FS8! z1wz>X@dz1*SN-s67+#|Qq7jM*2t!B(B#;9k79`7ggzNwsgsdPT?vMsN?0N%2(I7EI zA>;s1A;g1(%|xgIK!;E!0KsXAh&V)5~LwxJaNmHz7F^e;NJwU z1=Kr%*#(;2pxooa%yUfw=?HGYUchgGun)LKkdDMf`vD(-JNeG0?kLDJm#u>zALwp`Xzkkalj`)I0<4KjFMvf81N^+p8|0Q$VZBp_$lDeKsXIt z+gK5X&jEJ>e+HNq7$qg{3&3ZAKL=vVnC&w?fWHK>7nEPQD$Szg?jn}-0sb2J^T0L1 zC|Ma70Dl8qFG$@O?M1-f0^bi})0n^FOMt%v{xWbo#_U#q5BLWVegv*_G(QQu{0iW! zAp8VO=O~jBmE#)V>md9LOzoIZW4{6Tri;lWci8v=z_) channelNameMap = new ConcurrentHashMap<>(); + private final Map channelIdMap = new ConcurrentHashMap<>(); private final Path DIRECTORY; private final String EXTENSION = ".ser"; private Path resolvePath(UUID id) { @@ -47,6 +48,7 @@ private FileChannelRepository() { } }).forEach(channel -> { channelNameMap.put(channel.getName(), channel); + channelIdMap.put(channel.getId(), channel); }); } catch (IOException e) { throw new RuntimeException(e); @@ -136,6 +138,7 @@ public boolean deleteChannel(String name) { try { Files.delete(path); channelNameMap.remove(name); + channelIdMap.remove(id); return true; } catch (IOException e) { return false; @@ -143,7 +146,7 @@ public boolean deleteChannel(String name) { } /// - public boolean check(String name) { + public boolean isPresentChannel(String name) { return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null) == null; } @@ -154,4 +157,12 @@ public UUID channelNameToId(String name) { return null; } } + + public String channelIdToName(UUID id) { + try { + return channelIdMap.get(id).getName(); + } catch (Exception e) { + return null; + } + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 368f70ed..dc6cd782 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -8,19 +8,19 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class FileMessageRepository implements MessageRepository { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); + private final Map messageIdMap = new ConcurrentHashMap<>(128); private final Path DIRECTORY; private final String EXTENSION = ".ser"; FileChannelRepository channelRepository = FileChannelRepository.getInstance(); FileUserRepository userRepository = FileUserRepository.getInstance(); + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private Path resolvePath(UUID id) { String EXTENSION = ".ser"; @@ -50,12 +50,14 @@ private FileMessageRepository() { } }).forEach(message -> { channelIdMessageMap - .computeIfAbsent(message.getSendChannel(), id -> new ArrayList<>()) + .computeIfAbsent(message.getSendChannelId(), id -> new ArrayList<>()) .add(message); userIdMessageMap .computeIfAbsent(message.getSenderUserId(), id -> new ArrayList<>()) .add(message); + + messageIdMap.put(message.getId(), message); }); } catch (Exception e) { throw new RuntimeException(e); @@ -72,7 +74,7 @@ public static FileMessageRepository getInstance() { public boolean createMessage(String content, String sendeeChannelName, String senderUser) { UUID channelId = channelRepository.readChannelId(sendeeChannelName); - UUID userId = userRepository.getUserId(senderUser); + UUID userId = userRepository.userNameToId(senderUser); Message message = new Message(channelId, userId, content); channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); @@ -89,33 +91,73 @@ public boolean createMessage(String content, String sendeeChannelName, String se } } - public List readInChannelMessage(String channelName) { + public List getInChannelMessage(String channelName) { List result = new ArrayList<>(); try{ channelIdMessageMap.get(channelRepository.channelNameToId(channelName)) - .forEach(message -> result.add(message.toString())); + .stream().sorted(Comparator.comparing(Message::getCreateAt)) + .forEach(message -> result.add(formatMessage(message))); + return result; } catch (Exception e) { - return null; + return List.of(); } - return result; } - public List readForSenderMessage(String senderName) { + public List getMessageForSender(String senderName) { List result = new ArrayList<>(); try{ - userIdMessageMap.get(userRepository.channelNameToId(channelName)) - .forEach(message -> result.add(message.toString())); + userIdMessageMap.get(userRepository.userNameToId(senderName)) + .forEach(message -> result.add(formatMessage(message))); } catch (Exception e) { - return null; + return List.of(); } return result; } - public boolean updateMessage() {} + public boolean updateMessage(UUID id, String content) { + Path path = resolvePath(id); + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(messageIdMap.get(id)); + messageIdMap.get(id).updateMessage(content); + System.out.println("성공"); + return true; + } catch (IOException e) { + return false; + } + } - public boolean deleteMessage() {} + public boolean deleteMessage(String userName, UUID id) { + UUID userId = userRepository.userNameToId(userName); + Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); + UUID channelId = message.getSendChannelId(); - public boolean check(UUID id) {} + Path path = resolvePath(id); + try { + Files.delete(path); + userIdMessageMap.get(userId).remove(message); + channelIdMessageMap.get(channelId).remove(message); + messageIdMap.remove(message.getId()); + return true; + } catch (IOException e) { + return false; + } + } - public boolean check(String name) {} + public boolean check(String userName, UUID id) { + Object result = userIdMessageMap.get(userRepository.userNameToId(userName)).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); + return result == null; + } + + + /// formatting method + private String formatMessage(Message message) { + return "====================\n" + + "메시지ID: " + message.getId().toString() + "\n" + + "채널명: " + channelRepository.channelIdToName(message.getSendChannelId()) + "\n" + + "보낸이: " + userRepository.userIdToName(message.getSenderUserId()) + "\n" + + "생성일: " + sdf.format(message.getCreateAt()) + "\n" + + "수정일: " + sdf.format(message.getUpdateAt()) + "\n" + + "내용: " + message.getContent() + "\n"; + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index 64762850..db27f88b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -85,7 +85,7 @@ public boolean updateUser(UUID userId, String reName, String rePassword, String try(FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(userId); + oos.writeObject(usersMap.get(userId)); usersMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); return true; } catch (IOException e) { @@ -98,18 +98,23 @@ public String getUser(String name) { return usersMap.get(usersName.get(name)).toString(); } - public UUID getUserId(String name) { - try{ - return usersName.get(name); + /// 더 좋은 방법이 있는지는 모르겠지만 당장은 이렇게...; + /// 사실 오버라이딩해서 썼는데 하나로 줄일 수 없을까 해서.. 고쳐봤습니다. + public boolean isPresentUser(Object arg) { + try { + if(arg instanceof String) { + usersMap.get(usersName.get((String) arg)); + } else if(arg instanceof UUID){ + usersMap.get((UUID) arg); + } else { + return true; + } + return false; } catch (Exception e) { - return null; + return true; } } - public boolean isPresentUser(String name) { - return usersName.get(name) != null; - } - @Override public List getAllUser() { List result = new ArrayList<>(); @@ -137,16 +142,19 @@ public UUID userNameToId(String name) { } } - public boolean check(UUID id) { + public String userIdToName(UUID id) { try { - usersMap.get(id); - return true; + return usersMap.get(id).getName(); } catch (Exception e) { - return false; + return null; } } public boolean check(UUID id, String pw) { - return usersMap.get(id).getPw().equals(pw); + try { + return usersMap.get(id).getPw().equals(pw); + } catch (Exception e) { + return false; + } } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index 6b5a7ccd..76c6117a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -3,7 +3,6 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.List; import java.util.Scanner; @@ -11,13 +10,13 @@ public interface MessageService { - void createMessage(Scanner sc, Channel channel, User user); + void createMessage(); - void updateMessage(Scanner sc, User user); + void updateMessage(String channelName); - void getMessageForSender(User sender); + void getMessageForSender(String senderName); - void getMessageInChannel(UUID channelId); + void getMessageInChannel(String name); - void deleteMessage(Scanner sc, User user); + void deleteMessage(String userName); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java index b300c3d2..33244bc4 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -28,7 +28,7 @@ public void createChannel() { System.out.println("사용하려는 채널명이 무엇인가요?"); String name = sc.nextLine().trim(); - if (fileChannelRepository.check(name)) { + if (fileChannelRepository.isPresentChannel(name)) { System.out.println("이미 존재하는 채널명이에요!"); return; } @@ -65,7 +65,7 @@ public void updateChannel() { System.out.println("변경하고자 하는 채널명을 알려주세요"); String oldName = sc.nextLine(); - if(!fileChannelRepository.check(oldName)) { + if(!fileChannelRepository.isPresentChannel(oldName)) { System.out.println("해당 채널이 존재하지 않습니다."); return; } @@ -95,7 +95,7 @@ public void deleteChannel() { System.out.print("삭제하려는 채널명을 알려주세요: "); String inputChannelName = sc.nextLine(); - if(!fileChannelRepository.check(inputChannelName)) { + if(!fileChannelRepository.isPresentChannel(inputChannelName)) { System.out.println("해당 채널을 찾을 수 없습니다."); return; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java index e0b9cf3b..97f8956f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -1,20 +1,16 @@ package com.sprint.mission.discodeit.service.file; import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileMessageRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.MessageService; -import java.io.*; -import java.nio.file.Files; -import java.nio.file.Path; import java.text.SimpleDateFormat; import java.util.*; -public class FileMessageService implements MessageService { +public class FileMessageService implements MessageService +{ private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Scanner sc = JavaApplication.scanner(); FileUserRepository userRepository = FileUserRepository.getInstance(); @@ -42,7 +38,7 @@ public void createMessage() { System.out.println("어디로 보내는 메시지인가요?"); String sendeeChannelName = sc.nextLine(); - if(!channelRepository.check(sendeeChannelName)) { + if(channelRepository.isPresentChannel(sendeeChannelName)) { System.out.println("존재하지 않는 채널입니다."); return; } @@ -73,40 +69,28 @@ public void createMessage() { @Override public void getMessageForSender(String senderName) { - List messages = messageRepository.readInChannelMessage(senderName); + List messages = messageRepository.getMessageForSender(senderName); if (messages.isEmpty()) { System.out.println("아쉽지만 아무것도 없네요!"); return; } System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - for (Message message : messages) { - System.out.println("ID : " + message.getId()); - System.out.println("보낸 채널명 : " + channelService.isChannelName(message.getSendChannel())); - System.out.println("내용 : " + message.getContent()); - System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); - System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); - System.out.println("===================="); - } + messages.forEach(System.out::print); + } @Override - public void getMessageInChannel(UUID channelId) { - FileUserService userService = FileUserService.getInstance(); - List flag = channelIdMessageMap.getOrDefault(channelId, null); + public void getMessageInChannel(String channelName) { + List messages = messageRepository.getInChannelMessage(channelName); - if (flag.isEmpty()) { + if (messages.isEmpty()) { System.out.println("해당 채널에 보낸 메시지가 없어요."); return; } - flag.forEach(message -> { - System.out.println("보낸 사용자: " + userService.getUserByName(message.getSenderUserId())); - System.out.println("보낸 내용: " + message.getContent()); - System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); - System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); - System.out.println("===================="); - }); + messages.forEach(System.out::print); + System.out.println("총 메시지 : " + messages.size()); } @Override @@ -116,67 +100,39 @@ public void updateMessage(String userName) { System.out.println("어떤 것을 수정하고 싶나요?"); String id = sc.nextLine(); - Message text = userIdMessageMap.get(userName.getId()).stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); - - if (text == null) { + if (messageRepository.check(userName, UUID.fromString(id))) { System.out.println("실패. 해당 ID를 찾지 못했습니다."); return; } - Path path = resolvePath(text.getId()); - Message message = null; - - if(Files.exists(path)) { - try(FileInputStream fis = new FileInputStream(path.toFile()); - ObjectInputStream ois = new ObjectInputStream(fis)){ - message = (Message) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - } - System.out.println("무슨 내용으로 수정하고 싶나요?"); String content = sc.nextLine(); - System.out.println("지금 작업중입니다."); - - text.updateMessage(content); - try(FileOutputStream fos = new FileOutputStream(path.toFile()); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(text); - System.out.println("성공"); - } catch (IOException e) { - throw new RuntimeException(e); + if(messageRepository.updateMessage(UUID.fromString(id), content)) { + System.out.println("성공적으로 변경되었습니다."); + } else { + System.err.println("실패!"); } } @Override - public void deleteMessage(Scanner sc, User user) { - getMessageForSender(user); + public void deleteMessage(String userName) { + getMessageForSender(userName); System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); String id = sc.nextLine(); - Message message = userIdMessageMap.get(user.getId()).stream().filter(e -> e.getId().equals(UUID.fromString(id))).findFirst().orElse(null); - if (message == null) { - System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다."); + if (messageRepository.check(userName, UUID.fromString(id))) { + System.out.println("실패. 해당 ID를 찾지 못했습니다."); return; } + System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); String isDelete = sc.nextLine(); - Path path = resolvePath(UUID.fromString(id)); - if (isDelete.equalsIgnoreCase("Y")) { - try { - Files.delete(path); - } catch (IOException e) { - throw new RuntimeException(e); - } - userIdMessageMap.get(user.getId()).remove(message); - channelIdMessageMap.get(message.getSendChannel()).remove(message); - System.out.println("성공!"); - } else { - System.out.println("초기로 돌아갑니다"); - } + if(messageRepository.deleteMessage(userName, UUID.fromString(id))) { + System.out.println("성공!"); + } else System.out.println("실패!"); + } else System.out.println("초기로 돌아갑니다"); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java index ecce592d..5ff0e02e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -68,6 +68,7 @@ public void updateUser() { case "y": if(fileUserRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { System.out.println("완료"); + return; } System.out.println("실패"); return; @@ -142,7 +143,7 @@ private UUID workRoute(String work) { System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - if (fileUserRepository.check(userId, pw)) return null; + if (!fileUserRepository.check(userId, pw)) return null; return userId; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java deleted file mode 100644 index c17b29d6..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFChannelService.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.sprint.mission.discodeit.service.jfc; - -import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.service.ChannelService; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Map; -import java.util.Scanner; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -public class JCFChannelService implements ChannelService { - private final Map channelNameMap = new ConcurrentHashMap<>(); - Scanner sc = JavaApplication.scanner(); - - private JCFChannelService() {} - - private static class Holder { - private static final JCFChannelService INSTANCE = new JCFChannelService(); - } - - public static JCFChannelService getInstance() { - return Holder.INSTANCE; - } - - @Override - public void createChannel() { - System.out.println("사용하려는 채널명이 무엇인가요?"); - String name = sc.nextLine(); - - if (check(name) != null) { - System.out.println("이미 존재하는 채널명이에요!"); - return; - } - - Channel tmp = new Channel(name); - channelNameMap.put(name, tmp); - System.out.println("잘 들어갔어요!"); - } - - @Override - public void updateChannel() { - System.out.println("변경하고자 하는 채널명을 알려주세요"); - String name = sc.nextLine(); - - Channel result = check(name); - - if (result == null) { - System.out.println("해당 채널이 존재하지 않습니다."); - return; - } - - System.out.println("현재 채널명 : " + name); - System.out.println("무엇으로 변경하고 싶은가요? "); - - name = sc.nextLine(); - - channelNameMap.put(name, result); - channelNameMap.remove(result.getName()); - result.channelUpdater(name); - System.out.println(result.getName()); - System.out.println("잘 변경되었어요!"); - } - - @Override - public void readChannel() { - System.out.println("조회하고자 하는 채널명을 입력해주세요"); - String name = sc.nextLine(); - Channel result = check(name); - - if (result == null) { - System.out.println("해당 채널이 존재하지 않습니다."); - return; - } - - System.out.println("해당 채널에 대한 정보를 알려드립니다."); - System.out.println(result); - } - - /// 메시지 발송용 - public Channel isChannelName(String name) { - Channel result = check(name); - - if (result == null) { - System.out.println("해당 채널이 존재하지 않습니다."); - return null; - } - return result; - } - - /// UUID to Name - public String isChannelName(UUID id) { - Channel result = check(id); - - if (result == null) { - System.out.println("해당 채널이 존재하지 않습니다."); - return null; - } - return result.getName(); - } - - @Override - public void readAllChannel() { - if (channelNameMap.isEmpty()) { - System.out.println("채널이 존재하지 않습니다."); - return; - } - - channelNameMap.values().forEach(System.out::println); - - System.out.println("현재 총 채널수 : " + channelNameMap.size()); - } - - @Override - public void deleteChannel() { - String inputChannelName; - int n; - System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); - - n = sc.nextInt(); - sc.nextLine(); - if (n == 0) { - System.out.println("처음으로 돌아갑니다."); - return; - } - - System.out.print("삭제하려는 채널명을 알려주세요: "); - inputChannelName = sc.nextLine(); - - if (channelNameMap.get(inputChannelName) == null) { - System.out.println("해당 채널을 찾을 수 없습니다."); - return; - } - - channelNameMap.remove(inputChannelName); - System.out.println("해당 채널이 삭제되었습니다."); - } - - public Channel check(String name) { - try { - return channelNameMap.get(name); - } catch (Exception e) { - return null; - } - } - - /// 채널ID로도 관리하는 형태를 만드는게 좋을까? - public Channel check(UUID id) { - return channelNameMap.values().stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java deleted file mode 100644 index 2ed743c3..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFMessageService.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.sprint.mission.discodeit.service.jfc; - -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.MessageService; - -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -public class JCFMessageService implements MessageService { - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); - private final Map> userIdMessageMap = new ConcurrentHashMap<>(); - - private JCFMessageService() {} - - private static class Holder { - private static final JCFMessageService INSTANCE = new JCFMessageService(); - } - - public static JCFMessageService getInstance() { - return JCFMessageService.Holder.INSTANCE; - } - - @Override - public void createMessage(Scanner sc, Channel channel, User user) { - while(true) { - if (channel == null) return; - System.out.println("현재 메시지를 보낼 채널은 " + channel.getName() + "입니다."); - System.out.println("현재 메시지를 보낼 사람은 " + user.getName() + "입니다."); - System.out.println("무어라 보내고 싶으신가요?"); - String text = sc.nextLine(); - - System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); - System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); - String n = sc.nextLine(); - - if (Objects.equals(n, "0")) { - System.out.println("처음으로 돌아갑니다."); - return; - } else if (Objects.equals(n, "1")) { - Message message = new Message(channel.getId(), user.getId(), text); - channelIdMessageMap.computeIfAbsent(channel.getId(), m -> new ArrayList()).add(message); - userIdMessageMap.computeIfAbsent(user.getId(), m -> new ArrayList()).add(message); - - System.out.println("성공."); - return; - } else { - System.out.println("잘못 입력했습니다. 다시 메시지 입력 부분으로 돌아갑니다."); - } - } - } - - /// update logic - @Override - public void updateMessage(Scanner sc, User user) { - getMessageForSender(user); - - System.out.println("어떤 것을 수정하고 싶나요?"); - String id = sc.nextLine(); - - Message text = userIdMessageMap.get(user.getId()).stream().filter(m -> m.getId().equals(UUID.fromString(id))).findFirst().orElse(null); - - if (text == null) { - System.out.println("실패. 해당 ID를 찾지 못했습니다."); - return; - } - - System.out.println("무슨 내용으로 수정하고 싶나요?"); - String content = sc.nextLine(); - System.out.println("지금 작업중입니다."); - - text.updateMessage(content); - System.out.println("성공"); - } - - @Override - public void getMessageInChannel(UUID channelId) { - JCFUserService userService = JCFUserService.getInstance(); - List flag = channelIdMessageMap.get(channelId); - - if (flag.isEmpty()) { - System.out.println("해당 채널에 보낸 메시지가 없어요."); - } - - flag.forEach(message -> { - System.out.println("보낸 사용자: " + userService.getUserByName(message.getSenderUserId())); - System.out.println("보낸 내용: " + message.getContent()); - System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); - System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); - System.out.println("===================="); - }); - } - - @Override - public void getMessageForSender(User sender) { - List messages = userIdMessageMap.get(sender.getId()); - JCFUserService userService = JCFUserService.getInstance(); - JCFChannelService channelService = JCFChannelService.getInstance(); - if (messages.isEmpty()) { - System.out.println("아쉽지만 아무것도 없네요!"); - return; - } - - System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - for (Message message : messages) { - System.out.println("ID : " + message.getId()); - System.out.println("보낸 사용자 : " + userService.getUserByName(message.getSenderUserId())); - System.out.println("보낸 채널명 : " + channelService.isChannelName(message.getSendChannel())); - System.out.println("내용 : " + message.getContent()); - System.out.println("보낸일시 : " + sdf.format(new Date(message.getCreateAt()))); - System.out.println("수정일시 : " + sdf.format(new Date(message.getUpdateAt()))); - System.out.println("===================="); - } - } - - @Override - public void deleteMessage(Scanner sc, User user) { - getMessageForSender(user); - System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); - String id = sc.nextLine(); - - Message message = userIdMessageMap.get(user.getId()).stream().filter(e -> e.getId().equals(UUID.fromString(id))).findFirst().orElse(null); - if (message == null) { - System.out.println("해당 ID를 가진 메시지를 찾을 수 없습니다."); - return; - } - System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); - String isDelete = sc.nextLine(); - if (isDelete.equalsIgnoreCase("Y")) { - userIdMessageMap.get(user.getId()).remove(message); - channelIdMessageMap.get(message.getSendChannel()).remove(message); - System.out.println("성공!"); - } else { - System.out.println("초기로 돌아갑니다"); - } - } - - /// User 삭제시 해당 User가 보낸 내용도 함께 삭제되도록 하기 위함 - public void deleteAllMessagesSentByUser(User user) { - userIdMessageMap.remove(user.getId()); - channelIdMessageMap.values().forEach(list -> list.removeIf(message -> message.getSenderUserId().equals(user.getId()))); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java deleted file mode 100644 index d95c7282..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jfc/JCFUserService.java +++ /dev/null @@ -1,178 +0,0 @@ -package com.sprint.mission.discodeit.service.jfc; - -import com.sprint.mission.discodeit.Input; -import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.UserService; - -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -public class JCFUserService implements UserService { - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Scanner sc = JavaApplication.scanner(); - - private JCFUserService() { - } - private static class Holder { - private static final JCFUserService INSTANCE = new JCFUserService(); - } - public static JCFUserService getInstance() { - return Holder.INSTANCE; - } - - private final Map usersMap = new ConcurrentHashMap<>(); - private final Map usersName = new ConcurrentHashMap<>(); - - /// Create - @Override - public void createUser() { - String name; - String pw; - System.out.println("회원가입에 오신 것을 환영합니다."); - System.out.print("먼저, 사용할 이름을 작성해주세요 : "); - name = sc.nextLine().trim(); - - if (usersName.containsKey(name)) { - System.out.println("이미 존재하는 사용자명입니다."); - return; - } - - System.out.print("사용할 비밀번호를 입력해주세요 : "); - pw = sc.nextLine(); - User user = new User(name, pw); - - usersName.put(name, user.getId()); - usersMap.put(user.getId(), user); - System.out.println("사용자 " + name + "님이 추가되었습니다."); - } - - /// Update - @Override - public void updateUser() { - System.out.println("===================="); - System.out.println("사용자 변경 메뉴입니다."); - User checkUpdateUser = check("변경"); - if(checkUpdateUser == null) { - System.out.println("일치하는 사용자가 없습니다."); - return; - } - -// updateUserInfo(checkUpdateUser); - } - - /// 사실 분리할 필요가 없긴 한데, 너무 길어져서 분리함 - /// FIXME: 더 좋은 리팩터링 방법이 필요 -// private void updateUserInfo(User checkUpdateUser) { -// String reName; -// String rePassword; -// String reMail; -// String rePhoneNumber; -// -// while(true) { -// /// 정규식은 있다는건 알아도 어떤 규칙인지 몰라서 GPT에게 물어봤습니다. -// System.out.println("변경하지 않으시려면 엔터를 눌러주시기 바랍니다."); -// -// reName = Input.inputUpdateField(sc, "사용자명", "\\S+", checkUpdateUser.getName()); -// rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+", null); -// reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+", checkUpdateUser.getEmail()); -// rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$", checkUpdateUser.getPhoneNumber()); -// -// System.out.println("이대로 진행하시겠습니까?"); -// System.out.println("맞으면 y, 다시 입력하려면 re"); -// System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); -// -// String finalCheckIsContinue = sc.nextLine(); -// switch (finalCheckIsContinue.toLowerCase()){ -// case "y": -// checkUpdateUser.updateUser(reName, rePassword, reMail, rePhoneNumber); -// System.out.println("성공"); -// return; -// case "re": -// continue; -// default: -// System.out.println("처음으로 돌아갑니다."); -// return; -// } -// } -// } - - /// Read - @Override - public void getUserName() { - System.out.println("조회하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - - if (usersName.get(name) == null) { - System.out.println("조회하고자 하는 사용자가 없습니다."); - return; - } - - User user = usersMap.get(usersName.get(name)); - - System.out.println(user); - } - - public User getUserByName(String name) { - return usersMap.get(usersName.get(name)); - } - - public String getUserByName(UUID id) { - return usersMap.get(id).getName(); - } - - @Override - public void getAllUserName() { - if (usersMap.isEmpty()) { - System.out.println("사용자가 없습니다."); - return; - } - - usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(System.out::println); - System.out.println("현재 총 사용자 : " + usersMap.size()); - } - - /// Delete - @Override - public void deleteUser() { - int n; - System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); - - n = sc.nextInt(); - sc.nextLine(); - if (n == 0) { - System.out.println("처음으로 돌아갑니다."); - return; - } - - User target = check("삭제"); - - if (target == null) { - System.out.println("일치하는 계정을 찾을 수 없습니다."); - return; - } - usersMap.remove(target.getId()); - usersName.remove(target.getName()); - JCFMessageService.getInstance().deleteAllMessagesSentByUser(target); - System.out.println("계정이 삭제되었습니다."); - } - - private User check(String work) { - System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - - User user = usersMap.get(usersName.get(name)); - - if (user == null) return null; - - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String pw = sc.nextLine(); - - if (!user.getPw().equals(pw)) return null; - - return user; - } -} diff --git a/file-data-map/Message/725536f6-05a1-46d4-bf60-6a0435f417a8.ser b/file-data-map/Message/3a11c6bd-1032-459f-9d50-8e2ebb27ea3e.ser similarity index 52% rename from file-data-map/Message/725536f6-05a1-46d4-bf60-6a0435f417a8.ser rename to file-data-map/Message/3a11c6bd-1032-459f-9d50-8e2ebb27ea3e.ser index a0fdaaac4228964bae22aec6bab198fc91b35299..d8d2b1e5954e3e91799f4bbc5819b14c9b29890f 100644 GIT binary patch delta 88 zcmaFGyqtN15F;;7N@;F^LT+ktabkMvU{MYR2FBS4HQi-zOGI)Cn4Gt)H7V)!i~s-lS5 zZ)?$0c(b74b=MRH)3-eh3a?krc-yu>;mzDFZ8m za>KgfLWVj9*8K@tET&(?R}_VsePdndb_FcT!N9;c8=A;BGZORiQgb|0N*DxuvJ%S@^-D`KbM!+)JzcDQ7}%5Z^Gbl)OBjS8 zk~xWa>H5JXK#S6W(j3V}sfi`2jzD>+X0W_ZK3JA1Go_HBj)4)VuCyQptPaFy_F-Tv zElw@+gveGD0Nu|AvRMygvmVIiJu{iV&&X}nXJTOTV&KV1O)M@6&P;d8EGhP4;Lgp5 z^C}9OPw(}A=~DLW1843oxx>CdUkJYLo$`A94u#jf8{W*_^0sAzA>4eBwYrf zOuzDdCI&_?2G+8~oYK^aA_f7lBfyIMN^_G^i`v#qmF1rDpqq(-p`w6+fpPX%PqDSd uAV07!4Kz^xH*X&MN}H6n^Jko2fkin`)wC~G+IRHCo=mf*GuCCo{?`El&X}A4 literal 0 HcmV?d00001 diff --git a/file-data-map/User/3682cc3b-7613-4fd7-87a3-22bec5c8bc69.ser b/file-data-map/User/3682cc3b-7613-4fd7-87a3-22bec5c8bc69.ser deleted file mode 100644 index a8b7dd0975e66b12fc333c22eb3a9788c22e1a59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50869 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 XF){IuQb`EYa||Q$$oIZ<`=9?m#r`fV From af697b759756103416beb6f02e3d7f7b77a36b72 Mon Sep 17 00:00:00 2001 From: Alpha Date: Mon, 26 Jan 2026 00:57:46 +0900 Subject: [PATCH 22/35] =?UTF-8?q?=EC=B5=9C=EC=A2=85=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discodeit/app/JavaApplication.java | 6 - .../app/router/RouteMessageService.java | 3 +- .../app/router/RouteUserService.java | 4 +- .../repository/MessageRepository.java | 12 ++ .../discodeit/repository/UserRepository.java | 2 +- .../file/FileChannelRepository.java | 2 +- .../file/FileMessageRepository.java | 14 +- .../repository/file/FileUserRepository.java | 41 +++-- .../repository/jcf/JCFChannelRepository.java | 98 +++++++++++- .../repository/jcf/JCFMessageRepository.java | 105 +++++++++++- .../repository/jcf/JCFUserRepository.java | 99 +++++++++++- .../service/file/FileUserService.java | 2 +- .../service/jcf/JCFChannelService.java | 109 +++++++++++++ .../service/jcf/JCFMessageService.java | 138 ++++++++++++++++ .../discodeit/service/jcf/JCFUserService.java | 150 ++++++++++++++++++ 15 files changed, 745 insertions(+), 40 deletions(-) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java index 75710f6c..7060ae4f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -1,12 +1,6 @@ package com.sprint.mission.discodeit.app; import com.sprint.mission.discodeit.app.router.Router; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.repository.file.FileMessageRepository; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; -import com.sprint.mission.discodeit.service.file.FileChannelService; -import com.sprint.mission.discodeit.service.file.FileMessageService; -import com.sprint.mission.discodeit.service.file.FileUserService; import java.util.Scanner; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java index 8213c8c6..80ffbf32 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java @@ -4,6 +4,7 @@ import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.file.FileMessageService; +import com.sprint.mission.discodeit.service.jcf.JCFMessageService; import java.util.Scanner; @@ -56,7 +57,7 @@ static void messageService(int routeCURD) { } messageService.getMessageForSender(senderUserName); } else if (m == 2) { - System.out.println("어디로 보내는 메시지인가요?"); + System.out.println("어디로 보낸 메시지인가요?"); sendeeChannelName = sc.nextLine(); if (channelRepository.isPresentChannel(sendeeChannelName)) { System.out.println("존재하지 않는 채널입니다."); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java index e1dded33..9fc896a2 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java @@ -1,7 +1,7 @@ package com.sprint.mission.discodeit.app.router; import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.service.file.FileUserService; +import com.sprint.mission.discodeit.service.file.JCFUserService; //import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.Scanner; @@ -9,7 +9,7 @@ public class RouteUserService { static void userService(int routeCRUD) { // JCFUserService userService = JCFUserService.getInstance(); - FileUserService userService = FileUserService.getInstance(); + JCFUserService userService = JCFUserService.getInstance(); int menu; Scanner sc = JavaApplication.scanner(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java index f0ba4a20..9e05c32c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -1,4 +1,16 @@ package com.sprint.mission.discodeit.repository; +import java.util.List; +import java.util.UUID; + public interface MessageRepository { + boolean createMessage(String content, String sendeeChannelName, String senderUser); + + List getInChannelMessage(String channelName); + + List getMessageForSender(String senderName); + + boolean updateMessage(UUID id, String content); + + boolean deleteMessage(String userName, UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index 425377ce..671721c0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -12,5 +12,5 @@ public interface UserRepository { List getAllUser(); - void deleteUser(UUID id); + boolean deleteUser(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 2a616833..c10bcd79 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -75,7 +75,7 @@ public boolean save(Channel channel) { oos.writeObject(channel); oos.flush(); channelNameMap.getOrDefault(channel.getName(), - channelNameMap.put(channel.getName(), channel)); + channelNameMap.put(channel.getName(), channel)); return true; } catch (IOException e) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index dc6cd782..b6dbba96 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -16,11 +16,12 @@ public class FileMessageRepository implements MessageRepository { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); private final Map messageIdMap = new ConcurrentHashMap<>(128); - private final Path DIRECTORY; - private final String EXTENSION = ".ser"; + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); FileChannelRepository channelRepository = FileChannelRepository.getInstance(); FileUserRepository userRepository = FileUserRepository.getInstance(); - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; private Path resolvePath(UUID id) { String EXTENSION = ".ser"; @@ -69,9 +70,10 @@ private static class Holder { } public static FileMessageRepository getInstance() { - return FileMessageRepository.Holder.INSTANCE; + return Holder.INSTANCE; } + @Override public boolean createMessage(String content, String sendeeChannelName, String senderUser) { UUID channelId = channelRepository.readChannelId(sendeeChannelName); UUID userId = userRepository.userNameToId(senderUser); @@ -91,6 +93,7 @@ public boolean createMessage(String content, String sendeeChannelName, String se } } + @Override public List getInChannelMessage(String channelName) { List result = new ArrayList<>(); try{ @@ -103,6 +106,7 @@ public List getInChannelMessage(String channelName) { } } + @Override public List getMessageForSender(String senderName) { List result = new ArrayList<>(); try{ @@ -114,6 +118,7 @@ public List getMessageForSender(String senderName) { return result; } + @Override public boolean updateMessage(UUID id, String content) { Path path = resolvePath(id); try(FileOutputStream fos = new FileOutputStream(path.toFile()); @@ -127,6 +132,7 @@ public boolean updateMessage(UUID id, String content) { } } + @Override public boolean deleteMessage(String userName, UUID id) { UUID userId = userRepository.userNameToId(userName); Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index db27f88b..c97a7e61 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -98,23 +98,6 @@ public String getUser(String name) { return usersMap.get(usersName.get(name)).toString(); } - /// 더 좋은 방법이 있는지는 모르겠지만 당장은 이렇게...; - /// 사실 오버라이딩해서 썼는데 하나로 줄일 수 없을까 해서.. 고쳐봤습니다. - public boolean isPresentUser(Object arg) { - try { - if(arg instanceof String) { - usersMap.get(usersName.get((String) arg)); - } else if(arg instanceof UUID){ - usersMap.get((UUID) arg); - } else { - return true; - } - return false; - } catch (Exception e) { - return true; - } - } - @Override public List getAllUser() { List result = new ArrayList<>(); @@ -123,15 +106,16 @@ public List getAllUser() { } @Override - public void deleteUser(UUID id) { + public boolean deleteUser(UUID id) { Path path = resolvePath(id); try { Files.delete(path); } catch (IOException e) { - throw new RuntimeException(e); + return false; } usersName.remove(usersMap.get(id).getName()); usersMap.remove(id); + return true; } public UUID userNameToId(String name) { @@ -152,9 +136,24 @@ public String userIdToName(UUID id) { public boolean check(UUID id, String pw) { try { - return usersMap.get(id).getPw().equals(pw); + return !usersMap.get(id).getPw().equals(pw); } catch (Exception e) { - return false; + return true; } } + + /// 더 좋은 방법이 있는지는 모르겠지만 당장은 이렇게...; + /// 사실 오버라이딩해서 썼는데 하나로 줄일 수 없을까 해서.. 고쳐봤습니다. + public boolean isPresentUser(Object arg) { + try { + if(arg instanceof String) { + usersMap.get(usersName.get((String) arg)); + } else if(arg instanceof UUID){ + usersMap.get((UUID) arg); + } else { + return true; + } + } catch (Exception ignored) {} + return false; + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java index f6c0757a..fa72e258 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -1,4 +1,100 @@ package com.sprint.mission.discodeit.repository.jcf; -public class JCFChannelRepository { +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.repository.ChannelRepository; + +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class JCFChannelRepository implements ChannelRepository { + private final Map channelNameMap = new ConcurrentHashMap<>(); + private final Map channelIdMap = new ConcurrentHashMap<>(); + + /// Singleton + private JCFChannelRepository() {} + private static class Holder { + private static final JCFChannelRepository INSTANCE = new JCFChannelRepository(); + } + public static JCFChannelRepository getInstance() { + return Holder.INSTANCE; + } + + + /// interface + @Override + public boolean save(Channel channel) { + channelNameMap.getOrDefault(channel.getName(), + channelNameMap.put(channel.getName(), channel)); + return true; + } + + @Override + public boolean save(String oldName, String newName) { + Channel channel = channelNameMap.get(oldName); + + try{ + channelNameMap.put(newName, channel); + channelNameMap.remove(channel.getName()); + channel.channelUpdater(newName); + return true; + } catch (Exception e) { + return false; + } + } + + @Override + public String readChannel(String name) { + try { + return channelNameMap.get(name).toString(); + } catch (Exception e) { + return null; + } + } + + public UUID readChannelId(String name) { + try { + return channelNameMap.get(name).getId(); + } catch (Exception e) { + return null; + } + } + + @Override + public List readAllChannel() { + if(channelNameMap.isEmpty()) { + return null; + } + return channelNameMap.values().stream().toList(); + } + + @Override + public boolean deleteChannel(String name) { + UUID id = channelNameMap.get(name).getId(); + channelNameMap.remove(name); + channelIdMap.remove(id); + return true; + } + + /// + public boolean isPresentChannel(String name) { + return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null) == null; + } + + public UUID channelNameToId(String name) { + try { + return channelNameMap.get(name).getId(); + } catch (Exception e) { + return null; + } + } + + public String channelIdToName(UUID id) { + try { + return channelIdMap.get(id).getName(); + } catch (Exception e) { + return null; + } + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java index 7c6f4c43..c92b9c1b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -1,4 +1,107 @@ package com.sprint.mission.discodeit.repository.jcf; -public class JCFMessageRepository { +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.repository.MessageRepository; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; + +import java.io.IOException; +import java.nio.file.Files; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +public class JCFMessageRepository implements MessageRepository { + private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); + private final Map> userIdMessageMap = new ConcurrentHashMap<>(); + private final Map messageIdMap = new ConcurrentHashMap<>(128); + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + FileChannelRepository channelRepository = FileChannelRepository.getInstance(); + FileUserRepository userRepository = FileUserRepository.getInstance(); + + private JCFMessageRepository(){} + + private static class Holder{ + private static final JCFMessageRepository INSTANCE = new JCFMessageRepository(); + } + public static JCFMessageRepository getInstance() { + return Holder.INSTANCE; + } + + @Override + public boolean createMessage(String content, String sendeeChannelName, String senderUser) { + UUID channelId = channelRepository.readChannelId(sendeeChannelName); + UUID userId = userRepository.userNameToId(senderUser); + + Message message = new Message(channelId, userId, content); + channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); + userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); + return true; + } + + @Override + public List getInChannelMessage(String channelName) { + List result = new ArrayList<>(); + try{ + channelIdMessageMap.get(channelRepository.channelNameToId(channelName)) + .stream().sorted(Comparator.comparing(Message::getCreateAt)) + .forEach(message -> result.add(formatMessage(message))); + return result; + } catch (Exception e) { + return List.of(); + } + } + + @Override + public List getMessageForSender(String senderName) { + List result = new ArrayList<>(); + try{ + userIdMessageMap.get(userRepository.userNameToId(senderName)) + .forEach(message -> result.add(formatMessage(message))); + } catch (Exception e) { + return List.of(); + } + return result; + } + + @Override + public boolean updateMessage(UUID id, String content) { + try { + messageIdMap.get(id).updateMessage(content); + return true; + } catch (Exception e) { + return false; + } + } + + @Override + public boolean deleteMessage(String userName, UUID id) { + UUID userId = userRepository.userNameToId(userName); + Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); + UUID channelId = message.getSendChannelId(); + try { + userIdMessageMap.get(userId).remove(message); + channelIdMessageMap.get(channelId).remove(message); + messageIdMap.remove(message.getId()); + return true; + } catch (Exception e) { + return false; + } + } + + public boolean check(String userName, UUID id) { + Object result = userIdMessageMap.get(userRepository.userNameToId(userName)).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); + return result == null; + } + + /// formatting method + private String formatMessage(Message message) { + return "====================\n" + + "메시지ID: " + message.getId().toString() + "\n" + + "채널명: " + channelRepository.channelIdToName(message.getSendChannelId()) + "\n" + + "보낸이: " + userRepository.userIdToName(message.getSenderUserId()) + "\n" + + "생성일: " + sdf.format(message.getCreateAt()) + "\n" + + "수정일: " + sdf.format(message.getUpdateAt()) + "\n" + + "내용: " + message.getContent() + "\n"; + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java index 55822f27..22e273a1 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -1,4 +1,101 @@ package com.sprint.mission.discodeit.repository.jcf; -public class JCFUserRepository { +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.UserRepository; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +public class JCFUserRepository implements UserRepository { + private final Map usersMap = new ConcurrentHashMap<>(); + private final Map usersName = new ConcurrentHashMap<>(); + + private JCFUserRepository() {} + private static class Holder { + private static final JCFUserRepository INSTANCE = new JCFUserRepository(); + } + public static JCFUserRepository getInstance() { + return Holder.INSTANCE; + } + + @Override + public boolean createUser(String name, String pw) { + if(isDuplicateName(name)) return false; + User user = new User(name, pw); + usersName.put(name, user.getId()); + usersMap.put(user.getId(), user); + return true; + } + + @Override + public boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber) { + usersMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); + return false; + } + + @Override + public String getUser(String name) { + return usersMap.get(usersName.get(name)).toString(); + } + + @Override + public List getAllUser() { + List result = new ArrayList<>(); + usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(user.toString())); + return result; + } + + @Override + public boolean deleteUser(UUID id) { + usersName.remove(usersMap.get(id).getName()); + usersMap.remove(id); + return true; + } + + /// check method + private boolean isDuplicateName(String name) { + try { + usersName.get(name); + return true; + } catch (Exception e) { + return false; + } + } + + public boolean isPresentUser(Object arg) { + try { + if(arg instanceof String) { + usersMap.get(usersName.get((String) arg)); + } else if(arg instanceof UUID){ + usersMap.get((UUID) arg); + } else { + return true; + } + } catch (Exception ignored) {} + return false; + } + + public UUID userNameToId(String name) { + try { + return usersName.get(name); + } catch (Exception e) { + return null; + } + } + + public String userIdToName(UUID id) { + try { + return usersMap.get(id).getName(); + } catch (Exception e) { + return null; + } + } + + public boolean check(UUID id, String pw) { + try { + return !usersMap.get(id).getPw().equals(pw); + } catch (Exception e) { + return true; + } + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java index 5ff0e02e..31721703 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -143,7 +143,7 @@ private UUID workRoute(String work) { System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String pw = sc.nextLine(); - if (!fileUserRepository.check(userId, pw)) return null; + if (fileUserRepository.check(userId, pw)) return null; return userId; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java new file mode 100644 index 00000000..dd142578 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java @@ -0,0 +1,109 @@ +package com.sprint.mission.discodeit.service.jcf; + +import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.repository.jcf.JCFChannelRepository; +import com.sprint.mission.discodeit.service.ChannelService; + +import java.util.List; +import java.util.Scanner; + +public class JCFChannelService implements ChannelService { + JCFChannelRepository jcfChannelRepository = JCFChannelRepository.getInstance(); + Scanner sc = JavaApplication.scanner(); + + private JCFChannelService() { + } + private static class Holder { + private static final JCFChannelService INSTANCE = new JCFChannelService(); + } + public static JCFChannelService getInstance() { + return Holder.INSTANCE; + } + + + + @Override + public void createChannel() { + System.out.println("사용하려는 채널명이 무엇인가요?"); + String name = sc.nextLine().trim(); + + if (jcfChannelRepository.isPresentChannel(name)) { + System.out.println("이미 존재하는 채널명이에요!"); + return; + } + + jcfChannelRepository.save(new Channel(name)); + + System.out.println("잘 들어갔어요!"); + } + + @Override + public void readChannel() { + System.out.println("검색할 채널명을 알려주세요"); + String name = sc.nextLine().trim(); + + jcfChannelRepository.readChannel(name); + } + + @Override + public void readAllChannel() { + List allChannel = jcfChannelRepository.readAllChannel(); + + if (allChannel.isEmpty()) { + System.out.println("채널이 존재하지 않습니다."); + return; + } + + allChannel.forEach(System.out::println); + + System.out.println("현재 총 채널수 : " + allChannel.size()); + } + + @Override + public void updateChannel() { + System.out.println("변경하고자 하는 채널명을 알려주세요"); + String oldName = sc.nextLine(); + + if(!jcfChannelRepository.isPresentChannel(oldName)) { + System.out.println("해당 채널이 존재하지 않습니다."); + return; + } + + System.out.println("현재 채널명 : " + oldName); + System.out.println("무엇으로 변경하고 싶은가요? "); + + String newName = sc.nextLine(); + + if(jcfChannelRepository.save(oldName, newName)) + System.out.println("잘 변경되었어요!"); + } + + @Override + public void deleteChannel() { + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); + + int n = sc.nextInt(); + sc.nextLine(); + if (n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + } + + System.out.print("삭제하려는 채널명을 알려주세요: "); + String inputChannelName = sc.nextLine(); + + if(!jcfChannelRepository.isPresentChannel(inputChannelName)) { + System.out.println("해당 채널을 찾을 수 없습니다."); + return; + } + + if (jcfChannelRepository.deleteChannel(inputChannelName)) { + System.out.println("해당 채널이 삭제되었습니다."); + } else { + System.err.println("오류가 발생하여 삭제할 수 없습니다."); + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java new file mode 100644 index 00000000..a638f3df --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java @@ -0,0 +1,138 @@ +package com.sprint.mission.discodeit.service.jcf; + +import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.repository.jcf.JCFChannelRepository; +import com.sprint.mission.discodeit.repository.jcf.JCFMessageRepository; +import com.sprint.mission.discodeit.repository.jcf.JCFUserRepository; +import com.sprint.mission.discodeit.service.MessageService; + +import java.text.SimpleDateFormat; +import java.util.*; + +public class JCFMessageService implements MessageService +{ + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Scanner sc = JavaApplication.scanner(); + JCFUserRepository userRepository = JCFUserRepository.getInstance(); + JCFChannelRepository channelRepository = JCFChannelRepository.getInstance(); + JCFMessageRepository messageRepository = JCFMessageRepository.getInstance(); + + private JCFMessageService() { + } + + private static class Holder { + private static final JCFMessageService INSTANCE = new JCFMessageService(); + } + + public static JCFMessageService getInstance() {return JCFMessageService.Holder.INSTANCE;} + + @Override + public void createMessage() { + System.out.println("누가 보내는 메시지인가요?"); + String senderUserName = sc.nextLine(); + if(userRepository.userNameToId(senderUserName) == null){ + System.err.println("존재하지 않는 사용자입니다."); + return; + }; + + System.out.println("어디로 보내는 메시지인가요?"); + String sendeeChannelName = sc.nextLine(); + + if(channelRepository.isPresentChannel(sendeeChannelName)) { + System.out.println("존재하지 않는 채널입니다."); + return; + } + + while(true) { + System.out.println("현재 메시지를 보낼 채널은 " + sendeeChannelName + "입니다."); + System.out.println("현재 메시지를 보낼 사람은 " + senderUserName + "입니다."); + System.out.println("무어라 보내고 싶으신가요?"); + String text = sc.nextLine(); + + System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); + System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); + String n = sc.nextLine(); + + if (Objects.equals(n, "0")) { + System.out.println("처음으로 돌아갑니다."); + return; + } else if (Objects.equals(n, "1")) { + if(messageRepository.createMessage(text, sendeeChannelName, senderUserName)) { + System.out.println("성공."); + } + return; + } else { + System.out.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); + } + } + } + + @Override + public void getMessageForSender(String senderName) { + List messages = messageRepository.getMessageForSender(senderName); + if (messages.isEmpty()) { + System.out.println("아쉽지만 아무것도 없네요!"); + return; + } + + System.out.println("당신이 보낸 메시지는 아래와 같습니다."); + messages.forEach(System.out::print); + + } + + @Override + public void getMessageInChannel(String channelName) { + List messages = messageRepository.getInChannelMessage(channelName); + + if (messages.isEmpty()) { + System.out.println("해당 채널에 보낸 메시지가 없어요."); + return; + } + + messages.forEach(System.out::print); + System.out.println("총 메시지 : " + messages.size()); + } + + @Override + public void updateMessage(String userName) { + getMessageForSender(userName); + + System.out.println("어떤 것을 수정하고 싶나요?"); + String id = sc.nextLine(); + + if (messageRepository.check(userName, UUID.fromString(id))) { + System.out.println("실패. 해당 ID를 찾지 못했습니다."); + return; + } + + System.out.println("무슨 내용으로 수정하고 싶나요?"); + String content = sc.nextLine(); + + if(messageRepository.updateMessage(UUID.fromString(id), content)) { + System.out.println("성공적으로 변경되었습니다."); + } else { + System.err.println("실패!"); + } + } + + @Override + public void deleteMessage(String userName) { + getMessageForSender(userName); + System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); + String id = sc.nextLine(); + + if (messageRepository.check(userName, UUID.fromString(id))) { + System.out.println("실패. 해당 ID를 찾지 못했습니다."); + return; + } + + System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); + String isDelete = sc.nextLine(); + + if (isDelete.equalsIgnoreCase("Y")) { + if(messageRepository.deleteMessage(userName, UUID.fromString(id))) { + System.out.println("성공!"); + } else System.out.println("실패!"); + } else System.out.println("초기로 돌아갑니다"); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java new file mode 100644 index 00000000..3a8bd4f5 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java @@ -0,0 +1,150 @@ +package com.sprint.mission.discodeit.service.file; + +import com.sprint.mission.discodeit.Input; +import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.service.UserService; + +import java.util.*; + +public class JCFUserService implements UserService { + Scanner sc = JavaApplication.scanner(); + + private JCFUserService() { + } + private static class Holder { + private static final JCFUserService INSTANCE = new JCFUserService(); + } + public static JCFUserService getInstance() {return Holder.INSTANCE;} + + FileUserRepository fileUserRepository = FileUserRepository.getInstance(); + + @Override + public void createUser() { + System.out.println("회원가입에 오신 것을 환영합니다."); + System.out.print("먼저, 사용할 이름을 작성해주세요 : "); + String name = sc.nextLine().trim(); + + if (fileUserRepository.userNameToId(name) != null) { + System.out.println("이미 존재하는 사용자명입니다."); + return; + } + + System.out.print("사용할 비밀번호를 입력해주세요 : "); + String pw = sc.nextLine(); + + if(fileUserRepository.createUser(name, pw)) { + System.out.println("사용자 " + name + "님이 추가되었습니다."); + } else { + System.err.println("알 수 없는 오류가 발생하여 저장하지 못했습니다."); + } + } + + /// Update + @Override + public void updateUser() { + System.out.println("===================="); + System.out.println("사용자 변경 메뉴입니다."); + UUID userId = workRoute("변경"); + if(userId == null) { + System.out.println("일치하는 사용자가 없습니다."); + return; + } + + while(true) { + System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); + + String reName = Input.inputUpdateField(sc, "사용자명", "\\S+"); + String rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+"); + String reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+"); + String rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$"); + + System.out.println("이대로 진행하시겠습니까?"); + System.out.println("맞으면 y, 다시 입력하려면 re"); + System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); + + String finalCheckIsContinue = sc.nextLine(); + switch (finalCheckIsContinue.toLowerCase()){ + case "y": + if(fileUserRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { + System.out.println("완료"); + return; + } + System.out.println("실패"); + return; + case "re": + continue; + default: + return; + } + } + } + + /// Read + @Override + public void getUserName() { + System.out.println("조회하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + + if (fileUserRepository.userNameToId(name) == null) { + System.out.println("조회하고자 하는 사용자가 없습니다."); + return; + } + + System.out.println(fileUserRepository.getUser(name)); + System.out.println("===================="); + } + + @Override + public void getAllUserName() { + List userList = fileUserRepository.getAllUser(); + if (userList.isEmpty()) { + System.out.println("사용자가 없습니다."); + return; + } + + userList.forEach(System.out::println); + System.out.println("현재 총 사용자 : " + userList.size()); + } + + /// Delete + @Override + public void deleteUser() { + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); + + int n = sc.nextInt(); + sc.nextLine(); + if (n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + } + + UUID userId = workRoute("삭제"); + + if (userId == null) { + System.out.println("일치하는 계정을 찾을 수 없습니다."); + return; + } + + fileUserRepository.deleteUser(userId); + + System.out.println("계정이 삭제되었습니다."); + } + + private UUID workRoute(String work) { + System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + UUID userId = fileUserRepository.userNameToId(name); + + if (userId == null) return null; + + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String pw = sc.nextLine(); + + if (fileUserRepository.check(userId, pw)) return null; + + return userId; + } +} From 78fa4dc7793c70a5b40f434560148bca946454c7 Mon Sep 17 00:00:00 2001 From: Alpha Date: Tue, 27 Jan 2026 21:31:02 +0900 Subject: [PATCH 23/35] =?UTF-8?q?20260127=20/=20=EA=B8=B0=EB=B3=B8=20?= =?UTF-8?q?=EC=A4=91=EC=9D=98=20=EA=B8=B0=EB=B3=B8=EB=A7=8C=20=EB=A7=8C?= =?UTF-8?q?=EC=A7=90.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- discordit.iml | 12 -- discordit/.gitattributes | 3 + discordit/.gitignore | 37 +++++ .../.gradle/9.0.0/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/cache.properties | 4 +- .../buildOutputCleanup/outputFiles.bin | Bin 19379 -> 18911 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes discordit/build.gradle | 35 +++- .../com/sprint/mission/discodeit/Input.class | Bin 1801 -> 1854 bytes .../discodeit/app/JavaApplication$sc.class | Bin 675 -> 675 bytes .../discodeit/app/JavaApplication.class | Bin 1380 -> 1410 bytes .../app/router/RouteChannelService.class | Bin 1585 -> 1615 bytes .../app/router/RouteMessageService.class | Bin 3121 -> 3148 bytes .../discodeit/app/router/RoutePrintText.class | Bin 2136 -> 2166 bytes .../app/router/RouteUserService.class | Bin 1561 -> 1588 bytes .../mission/discodeit/app/router/Router.class | Bin 1773 -> 1814 bytes .../mission/discodeit/entity/Channel.class | Bin 2514 -> 2566 bytes .../mission/discodeit/entity/Message.class | Bin 1817 -> 1877 bytes .../mission/discodeit/entity/User.class | Bin 3756 -> 3868 bytes .../repository/ChannelRepository.class | Bin 516 -> 620 bytes .../repository/MessageRepository.class | Bin 155 -> 729 bytes .../discodeit/repository/UserRepository.class | Bin 532 -> 688 bytes .../file/FileChannelRepository.class | Bin 8670 -> 8792 bytes .../file/FileMessageRepository$Holder.class | Bin 688 -> 688 bytes .../file/FileMessageRepository.class | Bin 12539 -> 12666 bytes .../repository/file/FileUserRepository.class | Bin 9393 -> 9520 bytes .../repository/jcf/JCFChannelRepository.class | Bin 373 -> 3635 bytes .../repository/jcf/JCFMessageRepository.class | Bin 373 -> 8150 bytes .../repository/jcf/JCFUserRepository.class | Bin 364 -> 5296 bytes .../discodeit/service/MessageService.class | Bin 308 -> 416 bytes .../service/file/FileMessageService.class | Bin 6495 -> 6558 bytes .../service/file/FileUserService.class | Bin 6524 -> 6555 bytes ...leMessageRepository$Holder.class.uniqueId2 | Bin 688 -> 0 bytes .../FileMessageRepository.class.uniqueId1 | Bin 12508 -> 0 bytes .../FileMessageService$Holder.class.uniqueId3 | Bin 661 -> 0 bytes .../FileMessageService.class.uniqueId0 | Bin 6495 -> 0 bytes .../RouteMessageService.class.uniqueId4 | Bin 3121 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 1799 -> 27692 bytes discordit/gradle/wrapper/gradle-wrapper.jar | Bin 45457 -> 43764 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- discordit/gradlew | 2 +- discordit/settings.gradle | 2 +- .../discodeit/DiscodeitApplication.java | 26 +++ .../discodeit/app/JavaApplication.java | 2 +- .../app/router/RouteChannelService.java | 15 +- .../app/router/RouteMessageService.java | 24 ++- .../discodeit/app/router/RoutePrintText.java | 3 + .../app/router/RouteUserService.java | 13 +- .../mission/discodeit/app/router/Router.java | 73 ++++++--- .../mission/discodeit/entity/Channel.java | 40 ++--- .../mission/discodeit/entity/Message.java | 36 +--- .../sprint/mission/discodeit/entity/User.java | 55 ++----- .../file/FileChannelRepository.java | 2 + .../file/FileMessageRepository.java | 2 + .../repository/file/FileUserRepository.java | 2 + .../service/basic/BasicChannelService.java | 111 +++++++++++++ .../service/basic/BasicMessageService.java | 143 ++++++++++++++++ .../service/basic/BasicUserService.java | 154 ++++++++++++++++++ discordit/src/main/resources/application.yml | 4 + .../discodeit/DiscodeitApplicationTests.java | 13 ++ 61 files changed, 650 insertions(+), 165 deletions(-) delete mode 100644 discordit.iml create mode 100644 discordit/.gitattributes create mode 100644 discordit/.gitignore delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageRepository$Holder.class.uniqueId2 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageRepository.class.uniqueId1 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService$Holder.class.uniqueId3 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService.class.uniqueId0 delete mode 100644 discordit/build/tmp/compileJava/compileTransaction/stash-dir/RouteMessageService.class.uniqueId4 create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java create mode 100644 discordit/src/main/resources/application.yml create mode 100644 discordit/src/test/java/com/sprint/mission/discodeit/DiscodeitApplicationTests.java diff --git a/discordit.iml b/discordit.iml deleted file mode 100644 index 0d852a03..00000000 --- a/discordit.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/discordit/.gitattributes b/discordit/.gitattributes new file mode 100644 index 00000000..8af972cd --- /dev/null +++ b/discordit/.gitattributes @@ -0,0 +1,3 @@ +/gradlew text eol=lf +*.bat text eol=crlf +*.jar binary diff --git a/discordit/.gitignore b/discordit/.gitignore new file mode 100644 index 00000000..c2065bc2 --- /dev/null +++ b/discordit/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/discordit/.gradle/9.0.0/fileHashes/fileHashes.lock b/discordit/.gradle/9.0.0/fileHashes/fileHashes.lock index 947073d9e3f668f76184da680bd643120a138c45..986f3b963bc545ac75dcb919858a84b36851af45 100644 GIT binary patch literal 17 UcmZS9oRIJ5aF#!o0Swr~0VP`lQ2+n{ literal 17 UcmZS9oRIJ5aF#!o0Swqf0VP=jPXGV_ diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 9b455c7b50042be83cbdd162f251cd8cab8bbcf6..f3e6ae866c1f4e59fba34d6b2c8d1cc4811c8953 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6d$2>>*y1m^$% literal 17 VcmZQxwaR1i+k`Ae1~6d02mmyJ1it_P diff --git a/discordit/.gradle/buildOutputCleanup/cache.properties b/discordit/.gradle/buildOutputCleanup/cache.properties index d374a48a..046afa29 100644 --- a/discordit/.gradle/buildOutputCleanup/cache.properties +++ b/discordit/.gradle/buildOutputCleanup/cache.properties @@ -1,2 +1,2 @@ -#Fri Jan 09 13:51:24 KST 2026 -gradle.version=9.0.0 +#Tue Jan 27 16:18:46 KST 2026 +gradle.version=8.14.4 diff --git a/discordit/.gradle/buildOutputCleanup/outputFiles.bin b/discordit/.gradle/buildOutputCleanup/outputFiles.bin index fc8197ef2622f0cb44bd4d9c7d53d04c7306dfaf..bee2d86b382fd0bbd739da168e22693ddf7b7788 100644 GIT binary patch delta 469 zcmdlyo$>x;#tkMCg5r(GXI^+#HDeb87H!o*=T0|S%gM#UfE8x02^%@*--0hP4+ZhNFwXUJ&;6gdU*=6$34+b6 zQGN)&4y#|MI70yxKmim$0Te(16hHwKKmim$0Te(16hHwKKmim$0TlRO3T)Irh$(v* zo5hpHPRtVp!F7iIWa**C;-}iAqPy&}JdFN+aJX;2WVp_H4s*YJ@|<@CHJa56^!JY) z@>=p-mvUPxtvZys>@9hIL`PM8Q0WEcq6N9~dEpV;%$hdleoo{CnN{&QOV@4X>(`QB zGimGVGWwFl*AtJbRdEid&EC_#$LYfLBi*_|W8D(AUbd6`Mre4Hd9m^o_Xp(F53>f# ze0$TG%e%;HirhOh6q1*G-)-cz4iO0!iN&qV#VzFZJDcB?dJnDV^L@!1yd3uw+HW4< z^Syt1xJTv5Q<_WMKaoG1mDN%bE&0Ibmy)+E+@)2O-Kt{l7eoFguWZjgXI&I?St9vh zw#{ej?ody@UL+q0N%QGi9--lW@u%Oj&cBlCcAonkawE;b+fG;1ub9h%$*0@(SeC2y z?&n@YZgy-m=A+X6JD+1kZfU;ZvYmGzUoU!)&+cfkcWv}+X6wa;YcM_rYX{QD!9 zkUJ&sxTZ{)T*ubS3&|Hn&3Tb=JS&^;+fVL%>zs4^)&3`ZelEE*JAHrP$d?s-{UP!t zAqRp|s$cu@`BHMvn^MITafLJYqvT$$?P0z)x@mllF}Y8`G@sd$)=cKIA##7Ww2Ec^ zd7aF~RPs%g*$V$%O)Y#*6M5+8*xbm&?Q@yS1IV`(f7MxLDERk5t|H$Zm%d%=BA(#u zHRRFXOq+((LM3xqGkI)ZZF6<++39@WPV%_NQ!DQ4hUfA1<>bkoF=@fll|9Tw1$j#C zRO!}+HT8Us7kTP|6xV^x8F!e=ff$?3=9mm3~?K|nwSNAQ%f@PQvwo;5_3~aQj3ZwcQViA3*=%5VhCnu z2;pI{W(b{Z!g7Q$eDY5gRmP~v@~m1cF^mjylM`6vCTFuoGBQm*%GxjH0W^}6iNOg- zxqz4qo(x_LOp~M8QewRsoPi1)TtHSNLo`DygCqbOg(QXm delta 146 zcmdnT*U86q>ff$?3=9mm46z%znwTfgXP(6uz{L>A5X8<9%)?;K5Hi`FHVJiR1|J}giNTk_4@h$`Ff#Z9aVSGLkjDjNMKDA$#4tz#06AYBI{*Lx diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication$sc.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication$sc.class index 3b2a517814114207bce24771505abd8f88154c2c..ad78e894dbcde789b758d2fa0b6a9fa6e3b0da0e 100644 GIT binary patch delta 19 acmZ3?x|nr?6%!-JWNRi@M$XBNOiBPVj|80n delta 19 acmZ3?x|nr?6%!-hWNRi@M*hi-OiBPV?*yp; diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index 2b6130a2c09d36e80845d3b3d9f79e3e73ed52bd..3fce2cf3f788043af321620e05ed6d6b6dfb2aac 100644 GIT binary patch delta 158 zcmaFD)x^zp>ff$?3=9mm3_csVRxk?+_@>&d5GlgTtxrzOEnx3xf~?4}&;^2!jNJ41*+t3WF4b4udp<36N*QAO}<_&)~+O z$l%SOJeh;lQqLV|4=W>s6OdwN@Borb44w>LK$?Ytk%0rKjDdj*%;ICff$?3=9mm4Bi{LRxnRK%3R9GJK37Wnp2p8lfi+(k%4h?Jxji>I0FlV z1OpF)EQ1Jx9D@vlJc9~@0)q~NB7+Ho5`ztp=g6SS;KrcN;LV^pS(?>SnVG>IXf6|j Z2ZJY&W?^7t;9&3qvbex3J_c?EE&xJw5y$`l diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class index 92889996d511595d2ced2b00010481030727e9cf..bd694bea58321e652658eaacd95072c9403f1a62 100644 GIT binary patch delta 69 zcmdnUbDoFm)W2Q(7#J9A83H$QrLzbM_@{NHH?_14$-^000c95#ay; delta 40 vcmX@lvyq4E)W2Q(7#J9A83HzPrL#(xv`d1lKikCk^0-ge1>)7F$J)Fx}aPPjO^&E&#GIda%W z4w91-dvp>d2bYzjgChUS_j~$$`hL@9#xx%OZtj2qcGAXsz^MB?zRG%D_UzQnXqA3> zFp(1~nsHLgYfH0s(oQ%jC%NGs=yAz&-*ihf|3{C=UWfq2=#-F;MTiR8sG^f|1IH8+!Ww@Y+OM1Dck6Ze=S92d3 z$g@XMs+G9?8}OCeDyBPJ$uVlnSO8&N6URF{Losw!birN;I@ DcE&tl delta 248 zcmWNMJ1j$C7>1vZ6FL1OrBcbMgs8ZuE^%vIsr(wJ-&|Mo7=^SyXmiCLbRZ5&!@I diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RoutePrintText.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RoutePrintText.class index bd6b41cea7707cb927e3461e032ae402c2e99749..7b9f5b7ca457a177740d56392b6365070c6ccbfd 100644 GIT binary patch delta 227 zcmca1@J)d0)W2Q(7#J9A8A>*Cv9bsX_@zz8G|T95)3$YNyRGzJL-r6#6uFyu_GXO(BnpFE#c zi?ML>Db^}R#?7v5&l&BR8KQueGBHFm!~kgp23Cex21bTtFqsM_)4^mWn9OF#1*+l# Ns>ov~U?^gc1OV2B;9<`tJD<|U^xGT3Nn`T(^EpljK9M4y?-3aiv)Wfn_80pHY;jQo^<#G=I9)RNSq i;>l4grHo9QFR(Z;iueKD!^+6u38WYq{DCABLjVA$fi#u? delta 119 zcmdnOGn0qw)W2Q(7#J9A83HD9*)dv9yeB(ZfQ47tEi)%Iv^cdWIJKxOGdY!!fjd35 z#51qBBry-fv(?b_fhuJIDcyKTpP9)TMQE}Di{<1TmSRT6%@0@{7&#dk{DAf_G57-j DH~B16LDGi(wfP-XEzK}Mh;NGb^cq|+Hi delta 86 zcmbQn_m-FI)W2Q(7#J9A8Im?~ono2%oTZA9adHytRCZ1VBL-sz#>t#)*L30-qJV0c f7!n!cfhW#6Cg?e+VT+> diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class index 9274153bba0dd9247fd28e45a7598376b38c3a82..ccb49b443c54d4c59705a081ede2194639373198 100644 GIT binary patch delta 198 zcmca4+$O?x>ff$?3=9mm43!(XvRMQLd{av@@>2p5ixP8FOHzx9Cl|B$@#SzaIBkXDFZS$X3qCGff$?3=9mm3>6!>vRNi~u=wz0b1~#Fr>cCU4GScV`4LH*xr~Gcu$y@G>w?7UXng sW@Jd4oWfbFnhvyui6Mg_6G(F~FfwETaREaSkjDjN6*H7Flru;I0QG?%<^TWy diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class index b77feb3bd628fc8f9a9a319d7c56f8307afcc81a..72055238d5e14542f551d7f2c17baff9c54a3748 100644 GIT binary patch delta 168 zcmbQqca@Lp)W2Q(7#J9A8G<)*2{Q`{_@#KdPB zQz&*8R#rA?{25l(BF^4om~ZBsnbVH@VkT+Pl$R|ZYAJhTIB z;hG2859)Hm+o3zo>uL9a5OYDtyrwsa_)GVAe`uQyxN1gT$ILpZL)1XL=ReIJVG53f ztYSteW2q$MViH9hqYi}=+4^vQQS@-?`+*#ku^An5xT`hodAzXz)fdp!2j{quuEl>T)xnKSM(7szctrjm%!NC? diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class index e8cdcb383dfc888b13d56995407a7835a5c2917d..384191d8ab8bd0a92f0c211356e3dc006eb846f6 100644 GIT binary patch delta 180 zcmZo+dBehW>ff$?3=9mm4B`{HCQ1wVrj}&nrvxMxCFZ7ff$?3=9mm3_=sRCQjU;HSwGIWD~}##tbZs46F?73?Q0=ffGz~F>o_5 YGVlPEGcoW2#rYWcfow(w0kDW50QF`I;s5{u diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class index 52d6c4c85b42c16e00d53ead78c8a935208fc6a2..977b753d0869e7d6322c72ab594699dbf911410b 100644 GIT binary patch literal 729 zcma)4O;5r=5S=aZEh?h;an?jG_Nqa>Xh=vvjSUxXYda}R$}ZX6n)uf|_yhb=#%ZY( zA_orJX5Z|*dGltze?Gqe;1*8H;4rxM)zmdJEu?j)!Wf~X8wlg80EKlm&Xf^W=?`~^ z#_$kd7DySk80<~>J9i^4L-*-zg1%+Y@HKLa*?X#RF~}czmMVqaO_0tj(GSs%Rq)I; zpQ1%=7?gb_ElMiXG$;ea`!Saiqeptdpq65KWKc6`g=qUSi!bz?ta{>OZV8 zFR{uI0eK%_L_RHg{Yy>IBBRz>ImMU%hq`Oozit delta 34 pcmcb~I-8N})W2Q(7#J9A8Q3Rsg-=#s(&uJiU}Rtg3NbOT0RXWp2KWE~ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class index b1336ac6f3ab4eb2f6832c9a4cf01dbfab1e0872..163e429ecef10dcc268d42a239ca453e30379508 100644 GIT binary patch delta 236 zcmYL?Jr06E5QX0oKt)mf!GEto=K(A*)OKswL=yqCKsbaI!CPoyZQ%htlyLwPiyn6h8PjD$)aFP^90ksWk#4`UM&}2F0d%$ delta 83 zcmdnMI)#Pn)W2Q(7#J9A8H6Wtbx+)qJvp3l6=T?Bb|y1p1{OvJb_Nax5Y5TJ1*W+f bco-NNc!4^Y82EtV{0ss>HY0-|SVRZ_@Y@St diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class index 1d7858454656f8dcc288513e4dfd75587cedc000..ffacec61f7b8d0d25ee3dc976d55b91edabe8612 100644 GIT binary patch delta 1064 zcmbVLOGs2<6#l+DcV?XHG;?R1amI9B>1YqrQu9?)miE?0Dp5I z{x%UsJ6je5E(+T8SVW85wQ3W!4+0mN)4BhMA-EEL{(Ct0obP<+JLmt_`?b&dwEX%l zfE>@hvZezedth?<()EeK@u~5vlhcz^Hw$+Hd4pAj&-Ob8c3Ny=vzNR4DCchVH2gl+ zN*H9&!#x(;+2LiUpIz)O+^R6ieJbONhju;t*5Wb`_|K0njU*m9sG z?wI2{?q`xIo2fGPtA$9tIY?yH%ZjYW%hNvFI#=Fz*}34OL6;heHMmW>VHEDhn%U*iQ88R&8GUeJ z7JiNC5}ZdROvj?da;fOUefm-6=%IeZ?}baeXh{fZa+9E5sT$^hgX%#WZfI0D<`C4V zZV8-UMV)5=^@1us2E{TEzzbc;g*rUcl|*6{sD4)IRPq^;010)f*=T~Hnrjm3OLa?U zks(P3BCFsLh8=J%hzA_<;saLbhBZJ1BN`yzwt?iRnya}Gcc{A{q<)KGuu{s!@JmpW ziP6NjRZA?^~%z9GXnB-+A_ZKJ)!P@AGc#{iyeP>FIL- z6&`);T~5}nCnsZUu6+nzFxl&|kNqwOd?dJ0J!*UzZYE-6s*Zymw{n}yvd`@tsx36x zE>39RaJVvnE*(TVF-Qm=RnSUj%o)Wqv@9)RuaA z#Xx!40JM!C_$l^6w3+~x1SmyK4WTRP=%Om5oFPp`Cz}7-b`UF#Q2t!|$Mx!S=2;M9 zGsSApe=-_7|4b%`=}l5^i>DLjDg#e%n;L2T)L!B`a|;!&XPey2gx(*SwjS)Pi6c^t zm(E$Tv+7A{^sHV1%6fL1F>PR%{K`gQj@_bq;jl+CZQ>SK+`(NOHfn@>IA+v7?&l$M W<}fFuqfx#;C%j2`Ji;l?Aom-&HGl&E diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository$Holder.class index 274bdd575f70fc6f6abfef254140dd76c1aa2c86..f34495c22d49d035ebf12fac44f608a2d09f22f8 100644 GIT binary patch delta 19 acmdnMx`B0r7Zan)WN#)XM%T%GOiBPcr3G04 delta 19 acmdnMx`B0r7ZaoNWN#)XMwiKbOiBPcl?7J- diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class index 47dfa32af9fb79f7c39044f3b822662a3f867a71..39505c7ec421bd54d3d98039d3f0247d47b6ad2d 100644 GIT binary patch delta 2542 zcmZuz33Qaz75?r&TQd2R%p@ccCCvl~B$JtJLP!Q;z*G&E1c5@OP}^XFc#a5Uf+8RR z0(N&_J^h-FE&RB>Ngt99RSUt9HHzxOhklcUa=$-D2q`|kVhz2AK= zUp0I=$9wAReMbRQ$(IMbw&n03s4jNq3Js4x70+m~HN2w}@Uny&rd#sIds8XL=KTD~` zcn>CMiwgzSYKm2=wm2?#|Io%oxLCdKnC{h1Yi&%#r7B?Mc0S^CyJfU`$~#`FJ2R5* zw`6qZlgV$16ssetmq~GFvaeofFx!8HRI46;ixhO0q@_CjzPhHCc?%jZYiMqm-_+97 z9PO;iJmX5~^2%Z9_Q+psB*}fMe8|bHBLYh#)h$Q8@__u+BgbqxE+;zu*$MLVzj@)5 z2W`1W?)CADS84YTt$Wy(-^%ZN{NnLcmprC*kK1yW?DNS!8a<^IPusFrI(*VW#dBKm zPh0Nf%q3+$`M1u1KQ%|)JJ_f8{~$g5qPF;tEqmk+TD+`huh_DiGq=2^XRq7x8@bIV zZwg9cJNdQ-rAF0_sBB$8XN$;^W^!mTnGr>ZtSP~D zad4pl;L76Q%4B;CT<|;Kw5A_iCaiDh_FLeb{pixS4@8HvvV#qhJo3dU%UFixWZI47 zeks4=E|ym6X|H*;&T!aQu&Z?gxwn!1b2G-WpDx5^ zT!Jl_jjhb#HsVt3w(Uf=!=ReV-D~?05Fh=-Gq_H6nha{)ViM4z-xY?64tk$vsOaPw zlMGQ^Jn15h+6gydhl6?He%Lz+lh6tK*Zr^wppTIigdH%@7Y3_m??MsUlbX$c=`6Rmek8+R_*KHIeC%7F3IeYe0?ItP?r=_ETLG| zE#+M@PR~?j;jl~hkj8hC%pH6-_p9CMQyEYznZC}_tfiILkK_Y5VQC3VYSEWT64!*W(L(!4RVWhCaSxjXP zN->gS0o(aUlqaFgc-Oa07KY33wu zwgv~Fv*YM&V=KHO4lo;*{8>6VI_a@p4pO=aDRPL+?2-G)q?6Js4;kt2a!MXC(rI~A zo`~t5lxJenvvKKP^1Rl~kkj%)%<#0l6q8QMtMZ1~a#G%+q>nlibMao>#fOwWA(%9V R+)k*UlG>li7xF(0{y*Jk?P34` delta 2378 zcmZuy3v`sl75=_|ce7#hlWYP>N+je#0?B6cARs0oDZy3@HUR{&jn#U1NP7+ki3UYL zi8euqA`}K%YETfht*utlK!^sR80mwSQtP9(7HhQ+ZEGL){i6M5vhLxWx@XTnckbM| z_q+FgGxN`7|5_S3eg5g=0GjxZ{)q2I#vq88j|#-iW}Y#yk|$_NfD%6U7K zek8&{9u0HIM;f0p^Cmu*J4|?FMhc&a@HkI|`E{Qs`RqVRek!j&6+w{S@cC6f8Py+e z%I>t)eaGjQ_*hhbJf9KbS*!cL&qw%Zl#j~j1*>?`=fgZ02Q^FKn|AhdpAWDv%3l&S@9i8{evOvj zvdeG#yq|rk{EeAa@Tm#!Sk>=*e$hq$gPr}+=NEX;94p8R{)H$tXY=#ZJ4;&EtXXwS zN0@&jCRvp!E}VBs7^xydmhC^t4#^&xDVxc1Tj2`={PLv92K%5VLORA>=d#>Vd=pb zuH$XOKjftKE|X`u7W)BiaQK6!t2iexjT_D0;>o2g%K3KQq3=yfd6*{p5oA6O=mS!v3u}k9~EEckMjNlrF zt^;YZspKYhVT^Xn=bgMul^+o!En?e)Q=>SY^l94-Cw1G(0<~K1kr)t+VQ%KFD&lzb z^KMBYL3)^5xD_b^w2ZxS7v=`DqvZ4yWp)qmRTSlim$f~pan3MaZ9j^0ZOU$<&DHEG zZRxsR+m>P?mZ=xZ(SQ}|#|_GKrOP0uolTfvYvPYkjliE!gCcv>+_o1+Kdx?d)*f4QhR~ySC=NNp!uuMNPBa z?WOIrr+D42X#ra&(_gkNPi@=7&yLcP^JQWQvc-{cW%>PG-6ByBW(dSA1-TTxxE%N3 zTHK49u?=_WuykX)R(Cjfi?n-l0!rBWNkZAe&$&WbodxB|?!A>{E(3MnRhC3)9fi>G-B^hlNT@JZnHg}o3<~Z)urpSJx;sMX+3)} zn?vz9Z#3uPx!IQDws~V+b-bu&uW`4&{C(FW_8~A^tENu4(pAMC3?P;JRBs50-VL|9 z@O@T2`^=a(DnB`UhEBP?B4_G=)}aXXx)B;AHLCMXZfB0YCeV_sc8kMjbG1)_;%-NnQ*g z%B1yzi*|`4u`XIOu4Y9*52@KuQ_)p^0Xjd4&Ud!d@jWEe9{c$?mc_X-0ytnanGJy zGql#a^3Ujb01e!6()z$E%ii9xucLNvU-ypM#(2Er+2-!vJ_|!|`S2o6+4u~@>XudE zJA)Auqc+asoSNlp@?F4~iHkPAz?bTPZ;SUU8(-tH`oq`g{no}-Tv0Rah2HONT*VJ6 zX3wbq(Z)5@5aza6Uu(zCn8yFv#&sMgyz$u1-TPuDej)t-5o&8&v(m(`>bw)O3_eMejX`eO0k#EGmfs*S)LGI!}$TumyaH^xPco@Zn6>QW_2#-QsxtcL1uX{9$<$$9A4>rTA$i#b1vtp zo8ba?7g4UF;aqh)$L}?{ohVBEG!rXwuakz#%io+$pOnc%X2?d`%!HBHpI^aDKeOP) zalMh{eKOL_9BPFl3)|7DF3O z5J;V%x~l4747Ajo!FR{tZFLO_xqv2EJ%W!7jG=rO<0JUVKzmB7Mfae%Ptzm)GY+vmaSF z;Lt0P!&wf!nNEg-X?j6vSZQvDloxC@aU(^-)~zg-DppHFTrG(#7*G2PAb6L*mqhb2 zLO7WA7fSk5#nEX0BxdTe)o@lSt^uK=D^_w>b$+WE#?2!z-N)c|4YoR^0j42xm)k?4 zc@0H4oUTGqDomZNl2n+hwU{h}mYhrMM4SOv;W93p3|g+QWIlO)IUB#HNPZ;Q({PPy ze$n*)iFYy8VLOHir=8l5!Q&njqAf1nK|nq3OVccJ?)aOszJ(~>MkU_CVjRH|9K}++ z=g>}eePg;NjjZLIR81^+qPbiy43VshkE{g(mNV|IMXSrY?!d5}>mn3jI|GUVLl09` zTw1|#wW_qf${|1TaqA6x(c delta 1753 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 WU=3gK9plC}e9ci@jhgWd;{O60D>S?S delta 138 zcmdli^OcF~)W2Q(7#J9A83ZPBnJ_v`UdSpt*`9@avL2(vWNub-MyJUOSmod%5*%8= z42lfw3`{^h3=E7w$jZP5BsqaReK4PafmLfe1LH=Z022cjkOWCHFfcQ414$k*n-xg& O0(p!Kd_aXOj?v+CX;Sym{~c|L?!w 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 KsHJKds{aR=zqKm> delta 136 zcmca+|CNdB)W2Q(7#J9A83ZPBnJ_v`zR098`7N`=9T#BuJWpfti6DNb-Q$ RtU#I<$YW&S1CmS(`~U&16RZFL diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.class index ab7fa0d770ec5e2286a89e22c930813ccd7d0925..8261ccd77a2569671aa16fc1452f0e0419a4a0b9 100644 GIT binary patch literal 5296 zcmbtY`Fj)B6+KUqJy?uE7-P&DlNj(C5g;kSY{oz_*p9)*1X9`z(qIeA8bulb?vn0J z*Q9$((l*^vy3m%SiHV_2Nw**R^>6CebKi`lC+zxzFF#m%^XA=q&pY?r`}F+p|K52I zz<&HIjtHU_Vm9hfuaLOxTyc_FCpVdV=Hg{H`!?!$zr~cp}|b1Sj>32WI9t! zd1*J}Ckt-gD`tGJFq^!bx|BRIaO_OcEu5~*Dl98;qDbcoD~GBuIMFAOR@rEhFb#Uy zh%@6hpc!i{wAfgSR)r%UD1Q5KFPnA?gfTcWHr_una8%*o&ylSE>ZGO=+DtDCjRN_6)W*j|J{H9-^)5niY+Mw< z*B9Iw?}}@II}4Pf1$FeAprj5gTⅈOexv6z}PFQTuGHmHC(naEs>;_N3X`=V#Y=e z9^<$#l$S@(S|Rp4c9^q>(WW5EnHD}YRPtFbatskv!yqTWhQfu zUn;QOoirK@d-^`(QTLmrd#%y)`VRCd>@v)&-psl*7HI!s6&v7TB*#l8=Z=(SF1m$r z=VF#KO+#MF$xcw!@*Gaa{HYAdTP{5^SM;4+iYxnBLk~*Fq6Zye#8WKMa^HHuwtb%H zbNbw93U+4hRUwkU$^~*XDs(Lk(4>-meav@K)1)xmbYj@`r@Ztit9{1xc_1r1XX-u3 zl~$pNU?HXlnd#)N>IJl%L5ce_rVAxFE8_)s)F~FPdIc_I`3yUmEU|NT$}6WbsI}lQ zs5wl6@+p_PiJGZka{IH{z^e8X)crw6E0(e>2NPfTuBBEsv-z@g+Ks))+EDFgY|-Pk znuff@!g$)vG8+NR)eG_=JVr94Mp2<_4CX5>g~1v##nFOWWcmX)QK!HTZmKEl3<`FM zIT7Z^J;_Xa7|?`oHcqXH&}uL}?gcq3Tj{ewF9~f-H*8y}DK|B(uyw(%jD3_-$bGKP zIx`p3PJ1NxqJW{NB8@rOA6h+7ukwDA`Hr0{69QZl(K-n5$>((q~FTyj$KdzfxnY1OCy zm~4keL4e~8kWU@qqt2D0oj z@)NB-xDHtO8Y(MI?arNqxBxj%7yl|R`cxW;E*bSlrY zXyhz!aGd!#SDZqWBVa?)@-t4Cyp3@DNzT}T z3w#Q#d}_dp_;l!gqkaR#-oolze5W9OB)E7}_zXTvI0EE*^eWzWcXiKU-F4JOZ{EeG zbKO0+@yJNm+emcx&f(E{Y>VP7ALH`W8$8Bt(k`k!w{UCV1ujk`%~*%Wh;b*cOoFm2 z@E@XNBzz8^*GP8b3mipg(S|SLOZ4@U_Ne0cG6xM2t_0Tz{+;+ri1?bO5oi@S-Sg;) z;2t*h^sbAotDD1)sGy2yRC09&eYY@Cg5&@hpj`z?E53@aX(X-qx<(>zzrj&duX~vz z;ieU@a8##3t*N6CxEx#vyv)B>_^0qqd@BSvLURecUI1zeHOMm3Iqa5{1Q3IiY}4>s z0;>wV^&wHhMV-=ID0~~=3B$a|Zwa&GF7{A8dxs?4Ja|UTE+Y(652AXTH6!S%^|Y6j)W_Lo1BpqC%v$NZ$HO6WwG3ehK1 zHf+&XO7vZwstS%(wG56d zVDK0CWr(4i$bgw@*<7f=NMO}{FrMYiIkvX*6&OthjOGfA=1@anB6)wUBvSOG@CJSr z!gz__QvGc@K~)%;o;hS+g%x9#qBln6nyN3iMX7Oj49pw5Iu@gZRy^-=aFYsRnLu}x%3#iuyr-l zfb}39m$wc4hEEav7Qf?nj5E!U4l2d>drIMLyn{JCdY3KbFZe6p3AN3vo_kc(`}jNl HiFN-2I7BQV delta 120 zcmdm>`G$$>)W2Q(7#J9A83ZPBnK0T;_61@ocJs;Jj1H4cxYdFg6dBkVn1Cu67#M+& zm4OXNasqk!U_Ju_tJZb~#*IJ$CI&7b36f@DU}oS3l00BGE0E>|@)#NTfFu(GKLF!M B4OIXD diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class index 8f0c75d5d0065a7ebd1e4c18e93d512b49e21c7c..a6d7b5ae20db5beb400978c196090d40a050cb32 100644 GIT binary patch delta 203 zcmdnOw1AoG)W2Q(7#J9A8H6Wt^*agprj}&nrvxMxCFZ7ZNSQi~WFxQf9HkdldOCFEK1z-oC@QgeWYK$SBxaFiCO z76H{vykzgs$iNA-l@+L!fq?~R2?GZMT!;rO#EUG%2NvQ-77_sJXJilrl1vOj0BB1q A761SM delta 116 zcmZ3$yoHJD)W2Q(7#J9A8Tcl0^;-(3rfOGVlONCI(&rK>8cS diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class index c7c4dcb625ac7c2dced14a80695be4feb4e98a34..09a89affa10dd23fd76c01d35a06957333847f6f 100644 GIT binary patch delta 388 zcmX|*%`XE{6vfY-&S*U|o#~T)X;Kna79^xBnr`ewB>n@MsIZ_?{U5BXo~1Ogv6osA z5@KZ`_6QqV^-quTZ!fCRN~vXJd_##7nZ^z=kBlblaw zQ<){vWv_al7@kpajTjhF>?qBqA+8k*?g{%Y1Lv13>`^XkK-mCivQL)aW`4V5#NE6HcEq*1RGYFS* z5UycC6C;5YDu|OnewO+68GXCew^MjhI4iOAgi% zH%6tGf+5CrB^a=LBCF|VHyXj3LF(1yrcIo~1@%;FnHRd2%E@IXyyUv}MlW#+B8hQa zi8D|_FRsOzsLBf-%sK{b9MsV-YD@GeM2FL7i!F4rjgH}_jry=!XkJid!@{jp8o0x~ tOiQ|osEO-C1P`*kh58Zd7k*&UpvBn#&JK1;G7!25j}8>wC_N^S`2$ZjR{#J2 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService.class index 3d2a67faa35596ba1e4f5f194e7d5c6e6e6cb3d9..4877b3658b807111006660cdaa3dc82d32909827 100644 GIT binary patch delta 319 zcmX9&JugFH6n>uDTep2(xA)%S)}R$328n@Dts+vP7D-8^i6#<}O4VYk;18ThBobp2 zi*z$s3=)0@SFEg;))oro z!e+5jEN{zbY{vOg_(sFRkBxaWr5d|32$^=r978cg(_+|W2d(;^Ym!k}jRbPyDRxQC z>t{@^y{s80hQ;*)$@^BjJ@3cE(FYg^>8F-uH^_2HZiCs8MI0c9 zL)>Y7;NQhP2HR{Bk9Y!+MoQ9&6b)HPWOyXC#D4BYC&I+D9wuHj8hFEdo9UbQ&|6YF hpSu1_BE$$4J6oJ~8y&hj}D_e{s1TELva8A delta 283 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 diff --git a/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService.class.uniqueId0 b/discordit/build/tmp/compileJava/compileTransaction/stash-dir/FileMessageService.class.uniqueId0 deleted file mode 100644 index c7c4dcb625ac7c2dced14a80695be4feb4e98a34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6495 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 diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index b261c9c84bc1cfe748adca341c8b7596361c5baf..bda46561e63e8e9904eeec443dcc53a8cb1ef529 100644 GIT binary patch literal 27692 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 literal 1799 zcmYjQdsq}z6u)OBFqnl=7eWyQT2Nkh!AIf))SY!(kcnl6kq{Q#mO+-sF7B=*Dgw0# zf@qd$K0}O3Enf(lWj@P%q$Yh8L7$HlH4C!x@u_8Z2kLYFIQQOje&=_7=gvJrhzC}N z2Vgh+40gvJ$Z4_`4@5Qg5}VoLcox+bo9%Y9)#8cja?N&=HCHq{yil!Ow3V7oB895t zs7AEgjdMkBvXPv0L)r}Mo$Voy?jNYo1t(n7`*5@{2oJ_?Lr}d7$=noStiqRer}vq1jo1o$Z&1ws?!=x>$r%-tHbqc6J{pms(FTq_V=c5cRva;d=@YBoGg!v$p76GNwZ4N zf$G^FXDWY^gxzM67hrLi9c7f9zSQ+f#)U8cIqQ==3hfEfUrZJf74*&sRmw)6 zGS4Tw?)Q|%)gNZLmzY815`Me#@XEux`Ij&IyBDqac0*iBnqHsEC2*+P)d`QPU2icB zImHDIddtn+`sS+*4>irp4W(4UMuDFtM3X1b86ESftYJ?>$L;JxTjzPjrt>c|sifO| z-Ba>Bj%;FijyIfi_sh=UXS1ntZ`!!#hJ5Aztm|V&Xa05S`5j+m@>xPE;aS#md1fJM z``~hK%X^C+bUZL{*+L+>_nyNk7jHcXeUsC6yRH7&>Yk&UqYR*8=&U$xbMLstzm)Sg z>w2$j2sY|oQEG_)aN|_;S~P#+udT~!H0NxwCS9)5K>RDhLKN%U@3e1A(yuh>j-C(` z^ROE=7gbwI<~!(x9zR8VpB8n`C(v`TGRuB0UuRaTN!FPCzcr52bR9i7Yw0b0`;L(X zOrk&C+Ag2kYfaWAqQ)3@^ZANGU6E2C;2&Fl7!-TTGJeT%#kKC9NrA z$@0t2P_x(FOL^j&gg^ucB9RZV2INPq8Vw~@KrFEVNCRLb;Q)|jPR6yBXc4_g#)2PIY9W)M1T;4 zj6f(*ytFp~QG)UbJ3=B5B}fgj{B(pOiHLB73MHRT%1D;5s1iN(J$UB^#K~*}0B>MZh;~hdH0J8#;R)Xpc z7bMO#_VPZMb`{_^fqx6wa(Q1tv>Nc+FntXqtp(LPq*xd=YP3`;Wa2u&>w(_@Ou2s_ z*l#1?O^~>mz^J)WUGZJOjlgdKrU|&MpnA_mGL7Q;6VjUjzYqKeAT&XLhnXJ&-Ui%u z5Nbiur^;ss;E#a+7}zH0mzA*-@GjtX1G60ZTa4WUcrS1*AT0kcaq>REtsu04YCn-Q zlTt{Uk`Dm>1h|91RzY9iGL7+5z@Guz2673aI|TT1;0}XO)z2j}n2rEG3fwVZYx~on z_&DGbz<&XZt*;@OI{!<+Cta;hmx$uO0(=UXHt?5@1*ZX@fwZ%rZvs9|a;1C?_#E)( PL9q4RfJ`WKJrndV-^w5h diff --git a/discordit/gradle/wrapper/gradle-wrapper.jar b/discordit/gradle/wrapper/gradle-wrapper.jar index 8bdaf60c75ab801e22807dde59e12a8735a34077..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 35551 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 delta 37256 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 diff --git a/discordit/gradle/wrapper/gradle-wrapper.properties b/discordit/gradle/wrapper/gradle-wrapper.properties index 2a84e188..aaaabb3c 100644 --- a/discordit/gradle/wrapper/gradle-wrapper.properties +++ b/discordit/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/discordit/gradlew b/discordit/gradlew index ef07e016..23d15a93 100644 --- a/discordit/gradlew +++ b/discordit/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015 the original authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/discordit/settings.gradle b/discordit/settings.gradle index 955baf54..2437dfb2 100644 --- a/discordit/settings.gradle +++ b/discordit/settings.gradle @@ -1 +1 @@ -rootProject.name = 'discordit' \ No newline at end of file +rootProject.name = 'discodeit' diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java new file mode 100644 index 00000000..132c09ef --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java @@ -0,0 +1,26 @@ +package com.sprint.mission.discodeit; + +import com.sprint.mission.discodeit.app.router.Router; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +import java.util.Scanner; + +@SpringBootApplication +@RequiredArgsConstructor +public class DiscodeitApplication { + + @Bean + public Scanner scanner() { + return new Scanner(System.in); + } + + public static void main(String[] args) { + var context = SpringApplication.run(DiscodeitApplication.class, args); + Router router = context.getBean(Router.class); + System.out.println("프로그램을 실행합니다."); + router.route(); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java index 7060ae4f..8b56f8f3 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/JavaApplication.java @@ -32,7 +32,7 @@ public static void main(String[] args) { if (menu == 0) return; - Router.route(menu); +// Router.route(menu); } } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java index 14cebf91..98c46e6a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java @@ -1,17 +1,20 @@ package com.sprint.mission.discodeit.app.router; import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.service.file.FileChannelService; -//import com.sprint.mission.discodeit.service.jfc.JCFChannelService; +import com.sprint.mission.discodeit.service.basic.BasicChannelService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; import java.util.Scanner; +@Component +@RequiredArgsConstructor public class RouteChannelService { - static void channelService(int routeCRUD) { -// JCFChannelService channelService = JCFChannelService.getInstance(); - FileChannelService channelService = FileChannelService.getInstance(); + private final BasicChannelService channelService; + private final Scanner sc; + + public void channelService(int routeCRUD) { int menu; - Scanner sc = JavaApplication.scanner(); switch (routeCRUD) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java index 80ffbf32..3c05c45a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java @@ -1,28 +1,25 @@ package com.sprint.mission.discodeit.app.router; -import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; -import com.sprint.mission.discodeit.service.file.FileMessageService; -import com.sprint.mission.discodeit.service.jcf.JCFMessageService; +import com.sprint.mission.discodeit.service.basic.BasicMessageService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; import java.util.Scanner; +@Component +@RequiredArgsConstructor public class RouteMessageService { - static void messageService(int routeCURD) { - /// Singleton Instance -// JCFUserService userService = JCFUserService.getInstance(); -// JCFChannelService channelService = JCFChannelService.getInstance(); -// JCFMessageService messageService = JCFMessageService.getInstance(); - FileUserRepository userRepository = FileUserRepository.getInstance(); - FileChannelRepository channelRepository = FileChannelRepository.getInstance(); - FileMessageService messageService = FileMessageService.getInstance(); + private final FileUserRepository userRepository; + private final FileChannelRepository channelRepository; + private final BasicMessageService messageService; + private final Scanner sc; + public void messageService(int routeCURD) { int m; -// String nowUser; String senderUserName; String sendeeChannelName; - Scanner sc = JavaApplication.scanner(); switch (routeCURD) { case 1: @@ -33,7 +30,6 @@ static void messageService(int routeCURD) { /// update System.out.println("누가 보낸 메시지인가요?"); senderUserName = sc.nextLine(); -// nowUser = userService.getUserByName(senderUserName); if (userRepository.isPresentUser(senderUserName)) { System.out.println("존재하지 않는 사용자입니다."); return; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java index 63fcd0b0..5c543760 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java @@ -1,8 +1,11 @@ package com.sprint.mission.discodeit.app.router; +import org.springframework.stereotype.Component; + import java.util.ArrayList; import java.util.List; +@Component public class RoutePrintText { static void printText(String text) { List retouchText = new ArrayList<>(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java index 9fc896a2..e6f3c9f6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java @@ -1,17 +1,22 @@ package com.sprint.mission.discodeit.app.router; import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.service.basic.BasicUserService; import com.sprint.mission.discodeit.service.file.JCFUserService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; //import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.Scanner; +@Component +@RequiredArgsConstructor public class RouteUserService { - static void userService(int routeCRUD) { -// JCFUserService userService = JCFUserService.getInstance(); - JCFUserService userService = JCFUserService.getInstance(); + private final BasicUserService userService; + private final Scanner sc; + + public void userService(int routeCRUD) { int menu; - Scanner sc = JavaApplication.scanner(); switch (routeCRUD) { /// create diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java index e6508669..53f3f59c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java @@ -1,54 +1,77 @@ package com.sprint.mission.discodeit.app.router; +import com.sprint.mission.discodeit.DiscodeitApplication; import com.sprint.mission.discodeit.app.JavaApplication; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; import java.util.Scanner; +@Component +@RequiredArgsConstructor public class Router { - private static int inputChecker(int routeNumber) { - Scanner sc = JavaApplication.scanner(); + private final RouteMessageService routeMessageService; + private final RouteUserService routeUserService; + private final RouteChannelService routeChannelService; + private final Scanner sc; + + private int inputChecker() { try{ return Integer.parseInt(sc.nextLine().trim()); } catch (NumberFormatException e) { System.out.println("잘못된 입력값입니다."); - route(routeNumber); } return -1; } - public static void route(int menu) { + public void route() { int subMenu = 0; + int menu; + + while(true) { + System.out.println("===================="); + System.out.println("0. 프로그램 종료하기"); + System.out.println("1. 사용자 관련 서비스"); + System.out.println("2. 채널 관련 서비스"); + System.out.println("3. 메시지 관련 서비스"); + System.out.println("===================="); + + menu = sc.nextInt(); + sc.nextLine(); + + if (menu == 0) System.exit(0); - switch (menu) { - case 1: - RoutePrintText.printText("user"); - subMenu = inputChecker(menu); + switch (menu) { + case 1: + RoutePrintText.printText("user"); + subMenu = inputChecker(); - if(subMenu == -1) return; + if(subMenu == -1) continue; - RouteUserService.userService(subMenu); - break; + routeUserService.userService(subMenu); + break; - case 2: - RoutePrintText.printText("channel"); - subMenu = inputChecker(menu); + case 2: + RoutePrintText.printText("channel"); + subMenu = inputChecker(); - if(subMenu == -1) return; + if(subMenu == -1) continue; - RouteChannelService.channelService(subMenu); - break; + routeChannelService.channelService(subMenu); + break; - case 3: - RoutePrintText.printText("message"); - subMenu = inputChecker(menu); + case 3: + RoutePrintText.printText("message"); + subMenu = inputChecker(); - if(subMenu == -1) return; + if(subMenu == -1) continue; - RouteMessageService.messageService(subMenu); - break; + routeMessageService.messageService(subMenu); + break; - default: - return; + default: + return; + } } } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index 70633652..03624adb 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -1,47 +1,39 @@ package com.sprint.mission.discodeit.entity; +import lombok.Getter; + +import java.io.Serial; import java.io.Serializable; import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.UUID; +@Getter public class Channel implements Serializable { - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") + .withZone(ZoneId.of("Asia/Seoul")); private final UUID id; - private final Long createAt; + private final Instant createAt; private String name; - private Long updateAt; + private Instant updateAt; + @Serial private static final long serialVersionUID = 1L; public Channel(String name) { - long n = System.currentTimeMillis(); + Instant n = Instant.now(); this.name = name; this.id = UUID.randomUUID(); this.createAt = n; this.updateAt = n; } - /// getter - public UUID getId() { - return this.id; - } - - public String getName() { - return this.name; - } - - public long getCreateAt() { - return this.createAt; - } - - public long getUpdateAt() { - return this.updateAt; - } - /// setter private void setUpdateAt() { - this.updateAt = System.currentTimeMillis(); + this.updateAt = Instant.now(); } private void setName(String name) { @@ -58,8 +50,8 @@ public String toString() { return "====================\n" + "채널명 : " + this.getName() + "\n" + "채널ID : " + this.getId() + "\n" + - "채널수정일 : " + sdf.format(new Date(this.getUpdateAt())) + "\n" + - "채널생성일 : " + sdf.format(new Date(this.getCreateAt())) + "\n" + + "채널수정일 : " + formatter.format(this.getUpdateAt()) + "\n" + + "채널생성일 : " + formatter.format(this.getCreateAt()) + "\n" + "====================\n"; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index c0e95782..6ff2b297 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -1,21 +1,25 @@ package com.sprint.mission.discodeit.entity; +import lombok.Getter; + import java.io.Serial; import java.io.Serializable; +import java.time.Instant; import java.util.UUID; +@Getter public class Message implements Serializable { private final UUID id; - private final Long createAt; + private final Instant createAt; private final UUID channelId; private final UUID userId; - private Long updateAt; + private Instant updateAt; private String content; @Serial private static final long serialVersionUID = 1L; public Message(UUID channelId, UUID userId, String content) { - long n = System.currentTimeMillis(); + Instant n = Instant.now(); this.id = UUID.randomUUID(); this.channelId = channelId; this.userId = userId; @@ -24,30 +28,6 @@ public Message(UUID channelId, UUID userId, String content) { this.updateAt = n; } - public UUID getId() { - return this.id; - } - - public UUID getSendChannelId() { - return this.channelId; - } - - public UUID getSenderUserId() { - return this.userId; - } - - public String getContent() { - return this.content; - } - - public long getUpdateAt() { - return this.updateAt; - } - - public long getCreateAt() { - return this.createAt; - } - public void updateMessage(String content) { setContent(content); } @@ -58,6 +38,6 @@ private void setContent(String content) { } private void setUpdateAt() { - this.updateAt = System.currentTimeMillis(); + this.updateAt = Instant.now(); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index 51eca6bd..485a3572 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -1,61 +1,42 @@ package com.sprint.mission.discodeit.entity; +import lombok.Getter; + +import java.io.Serial; import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.io.Serializable; import java.util.UUID; +@Getter public class User implements Serializable { - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") + .withZone(ZoneId.of("Asia/Seoul")); private final UUID id; - private final Long createAt; + private final Instant createAt; private String name; private String pw; private String email; private String phoneNumber; - private Long updateAt; + private Instant updateAt; + @Serial private static final long serialVersionUID = 1L; public User(String name, String pw) { - long n = System.currentTimeMillis(); + Instant now = Instant.now(); this.id = UUID.randomUUID(); this.name = name; this.pw = pw; - this.createAt = n; - this.updateAt = n; - } - - public UUID getId() { - return this.id; - } - - public String getName() { - return this.name; - } - - public String getPw() { - return this.pw; - } - - public String getEmail() { - return this.email; - } - - public String getPhoneNumber() { - return this.phoneNumber; - } - - public long getCreateAt() { - return this.createAt; - } - - public long getUpdateAt() { - return this.updateAt; + this.createAt = now; + this.updateAt = now; } public void setUpdateAt() { - this.updateAt = System.currentTimeMillis(); + this.updateAt = Instant.now(); } public void updateUser(String name, String password, String email, String phoneNumber) { @@ -98,7 +79,7 @@ public String toString() { + "\n사용자명 : " + this.getName() + "\n이메일 : " + this.getEmail() + "\n전화번호 : " + this.getPhoneNumber() - + "\n생성일 : " + sdf.format(new Date(this.getCreateAt())) - + "\n수정일 : " + sdf.format(new Date(this.getUpdateAt())); + + "\n생성일 : " + formatter.format(this.getCreateAt()) + + "\n수정일 : " + formatter.format(this.getUpdateAt()); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index c10bcd79..31ef63e1 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -2,6 +2,7 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.repository.ChannelRepository; +import org.springframework.stereotype.Repository; import java.io.*; import java.nio.file.Files; @@ -12,6 +13,7 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +@Repository public class FileChannelRepository implements ChannelRepository { private final Map channelNameMap = new ConcurrentHashMap<>(); private final Map channelIdMap = new ConcurrentHashMap<>(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index b6dbba96..7d0bcc5c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -3,6 +3,7 @@ import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.repository.MessageRepository; +import org.springframework.stereotype.Repository; import java.io.*; import java.nio.file.Files; @@ -12,6 +13,7 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; +@Repository public class FileMessageRepository implements MessageRepository { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index c97a7e61..72d0f4e5 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -2,6 +2,7 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.repository.UserRepository; +import org.springframework.stereotype.Repository; import java.io.*; import java.nio.file.Files; @@ -10,6 +11,7 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; +@Repository public class FileUserRepository implements UserRepository { private final Map usersMap = new ConcurrentHashMap<>(); private final Map usersName = new ConcurrentHashMap<>(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java new file mode 100644 index 00000000..48e7bdc2 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -0,0 +1,111 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; +import com.sprint.mission.discodeit.service.ChannelService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Scanner; + +@Service +public class BasicChannelService implements ChannelService { + FileChannelRepository fileChannelRepository = FileChannelRepository.getInstance(); + Scanner sc = JavaApplication.scanner(); + + private BasicChannelService() { + } + private static class Holder { + private static final BasicChannelService INSTANCE = new BasicChannelService(); + } + public static BasicChannelService getInstance() { + return Holder.INSTANCE; + } + + + + @Override + public void createChannel() { + System.out.println("사용하려는 채널명이 무엇인가요?"); + String name = sc.nextLine().trim(); + + if (fileChannelRepository.isPresentChannel(name)) { + System.out.println("이미 존재하는 채널명이에요!"); + return; + } + + fileChannelRepository.save(new Channel(name)); + + System.out.println("잘 들어갔어요!"); + } + + @Override + public void readChannel() { + System.out.println("검색할 채널명을 알려주세요"); + String name = sc.nextLine().trim(); + + fileChannelRepository.readChannel(name); + } + + @Override + public void readAllChannel() { + List allChannel = fileChannelRepository.readAllChannel(); + + if (allChannel.isEmpty()) { + System.out.println("채널이 존재하지 않습니다."); + return; + } + + allChannel.forEach(System.out::println); + + System.out.println("현재 총 채널수 : " + allChannel.size()); + } + + @Override + public void updateChannel() { + System.out.println("변경하고자 하는 채널명을 알려주세요"); + String oldName = sc.nextLine(); + + if(!fileChannelRepository.isPresentChannel(oldName)) { + System.out.println("해당 채널이 존재하지 않습니다."); + return; + } + + System.out.println("현재 채널명 : " + oldName); + System.out.println("무엇으로 변경하고 싶은가요? "); + + String newName = sc.nextLine(); + + if(fileChannelRepository.save(oldName, newName)) + System.out.println("잘 변경되었어요!"); + } + + @Override + public void deleteChannel() { + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); + + int n = sc.nextInt(); + sc.nextLine(); + if (n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + } + + System.out.print("삭제하려는 채널명을 알려주세요: "); + String inputChannelName = sc.nextLine(); + + if(!fileChannelRepository.isPresentChannel(inputChannelName)) { + System.out.println("해당 채널을 찾을 수 없습니다."); + return; + } + + if (fileChannelRepository.deleteChannel(inputChannelName)) { + System.out.println("해당 채널이 삭제되었습니다."); + } else { + System.err.println("오류가 발생하여 삭제할 수 없습니다."); + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java new file mode 100644 index 00000000..361b54f2 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -0,0 +1,143 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; +import com.sprint.mission.discodeit.repository.file.FileMessageRepository; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.service.MessageService; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Objects; +import java.util.Scanner; +import java.util.UUID; + +@Service +public class BasicMessageService implements MessageService +{ + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Scanner sc = JavaApplication.scanner(); + FileUserRepository userRepository = FileUserRepository.getInstance(); + FileChannelRepository channelRepository = FileChannelRepository.getInstance(); + FileMessageRepository messageRepository = FileMessageRepository.getInstance(); + + private BasicMessageService() { + } + + private static class Holder { + private static final BasicMessageService INSTANCE = new BasicMessageService(); + } + + public static BasicMessageService getInstance() {return Holder.INSTANCE;} + + @Override + public void createMessage() { + System.out.println("누가 보내는 메시지인가요?"); + String senderUserName = sc.nextLine(); + if(userRepository.userNameToId(senderUserName) == null){ + System.err.println("존재하지 않는 사용자입니다."); + return; + }; + + System.out.println("어디로 보내는 메시지인가요?"); + String sendeeChannelName = sc.nextLine(); + + if(channelRepository.isPresentChannel(sendeeChannelName)) { + System.out.println("존재하지 않는 채널입니다."); + return; + } + + while(true) { + System.out.println("현재 메시지를 보낼 채널은 " + sendeeChannelName + "입니다."); + System.out.println("현재 메시지를 보낼 사람은 " + senderUserName + "입니다."); + System.out.println("무어라 보내고 싶으신가요?"); + String text = sc.nextLine(); + + System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); + System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); + String n = sc.nextLine(); + + if (Objects.equals(n, "0")) { + System.out.println("처음으로 돌아갑니다."); + return; + } else if (Objects.equals(n, "1")) { + if(messageRepository.createMessage(text, sendeeChannelName, senderUserName)) { + System.out.println("성공."); + } + return; + } else { + System.out.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); + } + } + } + + @Override + public void getMessageForSender(String senderName) { + List messages = messageRepository.getMessageForSender(senderName); + if (messages.isEmpty()) { + System.out.println("아쉽지만 아무것도 없네요!"); + return; + } + + System.out.println("당신이 보낸 메시지는 아래와 같습니다."); + messages.forEach(System.out::print); + + } + + @Override + public void getMessageInChannel(String channelName) { + List messages = messageRepository.getInChannelMessage(channelName); + + if (messages.isEmpty()) { + System.out.println("해당 채널에 보낸 메시지가 없어요."); + return; + } + + messages.forEach(System.out::print); + System.out.println("총 메시지 : " + messages.size()); + } + + @Override + public void updateMessage(String userName) { + getMessageForSender(userName); + + System.out.println("어떤 것을 수정하고 싶나요?"); + String id = sc.nextLine(); + + if (messageRepository.check(userName, UUID.fromString(id))) { + System.out.println("실패. 해당 ID를 찾지 못했습니다."); + return; + } + + System.out.println("무슨 내용으로 수정하고 싶나요?"); + String content = sc.nextLine(); + + if(messageRepository.updateMessage(UUID.fromString(id), content)) { + System.out.println("성공적으로 변경되었습니다."); + } else { + System.err.println("실패!"); + } + } + + @Override + public void deleteMessage(String userName) { + getMessageForSender(userName); + System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); + String id = sc.nextLine(); + + if (messageRepository.check(userName, UUID.fromString(id))) { + System.out.println("실패. 해당 ID를 찾지 못했습니다."); + return; + } + + System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); + String isDelete = sc.nextLine(); + + if (isDelete.equalsIgnoreCase("Y")) { + if(messageRepository.deleteMessage(userName, UUID.fromString(id))) { + System.out.println("성공!"); + } else System.out.println("실패!"); + } else System.out.println("초기로 돌아갑니다"); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java new file mode 100644 index 00000000..1e88821c --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -0,0 +1,154 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.Input; +import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.service.UserService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Scanner; +import java.util.UUID; + +@Service +public class BasicUserService implements UserService { + Scanner sc = JavaApplication.scanner(); + + private BasicUserService() { + } + private static class Holder { + private static final BasicUserService INSTANCE = new BasicUserService(); + } + public static BasicUserService getInstance() {return Holder.INSTANCE;} + + FileUserRepository fileUserRepository = FileUserRepository.getInstance(); + + @Override + public void createUser() { + System.out.println("회원가입에 오신 것을 환영합니다."); + System.out.print("먼저, 사용할 이름을 작성해주세요 : "); + String name = sc.nextLine().trim(); + + if (fileUserRepository.userNameToId(name) != null) { + System.out.println("이미 존재하는 사용자명입니다."); + return; + } + + System.out.print("사용할 비밀번호를 입력해주세요 : "); + String pw = sc.nextLine(); + + if(fileUserRepository.createUser(name, pw)) { + System.out.println("사용자 " + name + "님이 추가되었습니다."); + } else { + System.err.println("알 수 없는 오류가 발생하여 저장하지 못했습니다."); + } + } + + /// Update + @Override + public void updateUser() { + System.out.println("===================="); + System.out.println("사용자 변경 메뉴입니다."); + UUID userId = workRoute("변경"); + if(userId == null) { + System.out.println("일치하는 사용자가 없습니다."); + return; + } + + while(true) { + System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); + + String reName = Input.inputUpdateField(sc, "사용자명", "\\S+"); + String rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+"); + String reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+"); + String rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$"); + + System.out.println("이대로 진행하시겠습니까?"); + System.out.println("맞으면 y, 다시 입력하려면 re"); + System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); + + String finalCheckIsContinue = sc.nextLine(); + switch (finalCheckIsContinue.toLowerCase()){ + case "y": + if(fileUserRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { + System.out.println("완료"); + return; + } + System.out.println("실패"); + return; + case "re": + continue; + default: + return; + } + } + } + + /// Read + @Override + public void getUserName() { + System.out.println("조회하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + + if (fileUserRepository.userNameToId(name) == null) { + System.out.println("조회하고자 하는 사용자가 없습니다."); + return; + } + + System.out.println(fileUserRepository.getUser(name)); + System.out.println("===================="); + } + + @Override + public void getAllUserName() { + List userList = fileUserRepository.getAllUser(); + if (userList.isEmpty()) { + System.out.println("사용자가 없습니다."); + return; + } + + userList.forEach(System.out::println); + System.out.println("현재 총 사용자 : " + userList.size()); + } + + /// Delete + @Override + public void deleteUser() { + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); + + int n = sc.nextInt(); + sc.nextLine(); + if (n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + } + + UUID userId = workRoute("삭제"); + + if (userId == null) { + System.out.println("일치하는 계정을 찾을 수 없습니다."); + return; + } + + fileUserRepository.deleteUser(userId); + + System.out.println("계정이 삭제되었습니다."); + } + + private UUID workRoute(String work) { + System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); + String name = sc.nextLine(); + UUID userId = fileUserRepository.userNameToId(name); + + if (userId == null) return null; + + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String pw = sc.nextLine(); + + if (fileUserRepository.check(userId, pw)) return null; + + return userId; + } +} diff --git a/discordit/src/main/resources/application.yml b/discordit/src/main/resources/application.yml new file mode 100644 index 00000000..b9923ff0 --- /dev/null +++ b/discordit/src/main/resources/application.yml @@ -0,0 +1,4 @@ +spring: + application: + name: "discodeit" + diff --git a/discordit/src/test/java/com/sprint/mission/discodeit/DiscodeitApplicationTests.java b/discordit/src/test/java/com/sprint/mission/discodeit/DiscodeitApplicationTests.java new file mode 100644 index 00000000..3a987a21 --- /dev/null +++ b/discordit/src/test/java/com/sprint/mission/discodeit/DiscodeitApplicationTests.java @@ -0,0 +1,13 @@ +package com.sprint.mission.discodeit; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class DiscodeitApplicationTests { + + @Test + void contextLoads() { + } + +} From bb4a67d08e230279c7bc9269502608a6be511410 Mon Sep 17 00:00:00 2001 From: Alpha Date: Thu, 29 Jan 2026 10:09:51 +0900 Subject: [PATCH 24/35] =?UTF-8?q?=EB=AD=94=EA=B0=80=20=EB=A7=8E=EC=9D=80?= =?UTF-8?q?=EA=B1=B8=20=EC=88=98=EC=A0=95=ED=96=88=EC=A7=80=EB=A7=8C=20?= =?UTF-8?q?=EA=B8=B0=EC=96=B5=EB=82=98=EC=A7=80=20=EC=95=8A=EB=8A=94?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../discodeit/DiscodeitApplication.java | 1 + .../com/sprint/mission/discodeit/Input.java | 35 ++-- .../sprint/mission/discodeit/UserState.java | 19 +++ .../app/router/RouteUserService.java | 2 +- .../discodeit/dto/CreateChannelDto.java | 4 + .../mission/discodeit/dto/CreateUserDto.java | 29 ++++ .../mission/discodeit/dto/FindAllUser.java | 4 + .../mission/discodeit/dto/UserFinder.java | 10 ++ .../discodeit/entity/BinaryContent.java | 20 +++ .../mission/discodeit/entity/ReadStatus.java | 24 +++ .../sprint/mission/discodeit/entity/User.java | 28 ++-- .../mission/discodeit/entity/UserStatus.java | 30 ++++ .../discodeit/repository/UserRepository.java | 4 +- .../repository/file/FileUserRepository.java | 58 ++++--- .../repository/jcf/JCFUserRepository.java | 15 +- .../service/AttechmentRepository.java | 4 + .../discodeit/service/auth/AuthService.java | 36 +++++ .../service/basic/AttachmentRepository.java | 32 ++++ .../service/basic/BasicChannelService.java | 47 +++--- .../service/basic/BasicMessageService.java | 22 +-- .../service/basic/BasicUserService.java | 71 +++++---- .../service/file/FileChannelService.java | 109 ------------- .../service/file/FileMessageService.java | 138 ---------------- .../service/file/FileUserService.java | 150 ------------------ .../service/jcf/JCFChannelService.java | 109 ------------- .../service/jcf/JCFMessageService.java | 138 ---------------- .../discodeit/service/jcf/JCFUserService.java | 150 ------------------ 27 files changed, 371 insertions(+), 918 deletions(-) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/UserState.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateChannelDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/FindAllUser.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/AttechmentRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java b/discordit/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java index 132c09ef..6315d430 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java @@ -24,3 +24,4 @@ public static void main(String[] args) { router.route(); } } + diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/Input.java b/discordit/src/main/java/com/sprint/mission/discodeit/Input.java index 98c7fc1d..8c339a71 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/Input.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/Input.java @@ -1,9 +1,18 @@ package com.sprint.mission.discodeit; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + import java.util.Scanner; +@Component +@RequiredArgsConstructor public class Input { - public static String inputChecker(Scanner scanner, String regexRule) { + private final Scanner scanner; + private final FileUserRepository userRepository; + + private String inputChecker(String text, String regexRule) { String inputString; while(true) { inputString = scanner.nextLine().trim(); @@ -11,7 +20,17 @@ public static String inputChecker(Scanner scanner, String regexRule) { if (inputString.isEmpty()) return null; if (!inputString.matches(regexRule)) { - System.out.println("잘못된 입력 형식입니다."); + System.err.println("잘못된 입력 형식입니다."); + continue; + } + + if (text.equals("프로필 이미지") && inputString.matches("(?i).*\\.(jpg|png)")) { + System.err.println("이미지는 jpg, png만 지원합니다."); + continue; + } + + if (userRepository.isPresentThis(text, inputString)) { + System.err.println("동일한 " + text + "은(는) 존재할 수 없습니다."); continue; } @@ -20,13 +39,11 @@ public static String inputChecker(Scanner scanner, String regexRule) { return inputString; } - public static String inputUpdateField(Scanner sc, String text, String regexRule) { - if(text.equals("비밀번호")) { - System.out.print("변경하실 비밀번호 : "); - return inputChecker(sc, regexRule); + public String inputUpdateField(String text, String regexRule) { + System.out.print("변경하실 " + text + " : "); + if (text.equals("프로필 이미지")){ + System.out.print("이미지 확장자는 jpg, png만 지원합니다."); } - - System.out.print("변경하실 " + text + " : "); - return inputChecker(sc, regexRule); + return inputChecker(text, regexRule); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java b/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java new file mode 100644 index 00000000..c5873660 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java @@ -0,0 +1,19 @@ +package com.sprint.mission.discodeit; + +public class UserState { + private String currentUser; + + private UserState() {} + private static class Holder { + private static final UserState INSTANT = new UserState(); + } + public UserState getInstant() { + return Holder.INSTANT; + } + + public boolean userState(boolean isLogin, String username) { + if(isLogin) currentUser = null; + currentUser = username; + return true; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java index e6f3c9f6..b349a3cd 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java @@ -2,7 +2,7 @@ import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.service.basic.BasicUserService; -import com.sprint.mission.discodeit.service.file.JCFUserService; +import com.sprint.mission.discodeit.service.jcf.JCFUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; //import com.sprint.mission.discodeit.service.jfc.JCFUserService; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateChannelDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateChannelDto.java new file mode 100644 index 00000000..765d6d7d --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateChannelDto.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.dto; + +public class CreateChannelDto { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java new file mode 100644 index 00000000..e419ef81 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java @@ -0,0 +1,29 @@ +package com.sprint.mission.discodeit.dto; + +import com.sprint.mission.discodeit.entity.BinaryContent; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.entity.UserStatus; + +import java.util.List; + +public record CreateUserDto( + String username, + String password, + String profileImage +) { + public List toEntity() { + BinaryContent binaryContent = binaryContent(); + if(binaryContent == null) { + User user = new User(username, password); + return List.of(user, new UserStatus(user.getId())); + } + + User user = new User (username, password, binaryContent.getId()); + return List.of(user,new UserStatus(user.getId())); + } + + private BinaryContent binaryContent() { + if(profileImage == null) return null; + return new BinaryContent(profileImage); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindAllUser.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindAllUser.java new file mode 100644 index 00000000..e3f17f0d --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindAllUser.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.dto; + +public class FindAllUser { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java new file mode 100644 index 00000000..eb3fe251 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java @@ -0,0 +1,10 @@ +package com.sprint.mission.discodeit.dto; + +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.entity.UserStatus; + +public record UserFinder() { + public static String from(User user, UserStatus userStatus) { + return user.toString() + userStatus.toString() + "\n===================="; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java new file mode 100644 index 00000000..e706fab1 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java @@ -0,0 +1,20 @@ +package com.sprint.mission.discodeit.entity; + +import lombok.Getter; + +import java.time.Instant; +import java.util.UUID; + +@Getter +public class BinaryContent { + private final UUID id = UUID.randomUUID(); + private final Instant createAt; + private final String fileName; + private final String fileExtension; + + public BinaryContent(String fileName) { + this.createAt = Instant.now(); + this.fileName = fileName.split("\\.")[0]; + this.fileExtension = fileName.split("\\.")[1]; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java new file mode 100644 index 00000000..98046ae7 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java @@ -0,0 +1,24 @@ +package com.sprint.mission.discodeit.entity; + +import lombok.Getter; + +import java.time.Instant; +import java.util.UUID; + +@Getter +public class ReadStatus { + private final UUID id = UUID.randomUUID(); + private final UUID userId; + private final UUID channelId; + private Instant readAt; + + public ReadStatus(UUID userId, UUID channelId){ + this.userId = userId; + this.channelId = channelId; + readAt = Instant.now(); + }; + + public void updateReadAt() { + readAt = Instant.now(); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index 485a3572..f34d6bdd 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -3,37 +3,45 @@ import lombok.Getter; import java.io.Serial; -import java.text.SimpleDateFormat; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import java.util.Date; import java.io.Serializable; import java.util.UUID; @Getter public class User implements Serializable { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") + @Serial + private static final long serialVersionUID = 1L; + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") .withZone(ZoneId.of("Asia/Seoul")); private final UUID id; + private UUID profileId; private final Instant createAt; + private Instant updateAt; private String name; - private String pw; + private String password; private String email; private String phoneNumber; - private Instant updateAt; - @Serial - private static final long serialVersionUID = 1L; - public User(String name, String pw) { + public User(String name, String password) { Instant now = Instant.now(); this.id = UUID.randomUUID(); this.name = name; - this.pw = pw; + this.password = password; this.createAt = now; this.updateAt = now; } + public User(String name, String password, UUID profileId) { + this.id = UUID.randomUUID(); + this.profileId = profileId; + this.name = name; + this.password = password; + Instant now = Instant.now(); + this.createAt = now; + this.updateAt = now; + } public void setUpdateAt() { this.updateAt = Instant.now(); @@ -58,7 +66,7 @@ private void setName(String name) { } private void setPassword(String password) { - this.pw = password; + this.password = password; setUpdateAt(); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java new file mode 100644 index 00000000..00965bce --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java @@ -0,0 +1,30 @@ +package com.sprint.mission.discodeit.entity; + +import lombok.Getter; + +import java.time.Duration; +import java.time.Instant; +import java.util.UUID; + +@Getter +public class UserStatus { + private final UUID id = UUID.randomUUID(); + private final UUID userId; + private Instant lastAccessTime; + + public UserStatus(UUID userId) { + this.userId = userId; + lastAccessTime = Instant.now(); + } + + public void lastAccessTimeUpdater() { + lastAccessTime = Instant.now(); + } + + @Override + public String toString() { + Duration duration = Duration.between(this.getLastAccessTime(), Instant.now()); + if(duration.toMinutes() < 5) return "오프라인"; + return "온라인"; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index 671721c0..6bdcbf88 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -1,10 +1,12 @@ package com.sprint.mission.discodeit.repository; +import com.sprint.mission.discodeit.dto.CreateUserDto; + import java.util.List; import java.util.UUID; public interface UserRepository { - boolean createUser(String name, String pw); + boolean createUser(CreateUserDto dto); boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index 72d0f4e5..8820eea9 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -1,6 +1,9 @@ package com.sprint.mission.discodeit.repository.file; +import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UserFinder; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.entity.UserStatus; import com.sprint.mission.discodeit.repository.UserRepository; import org.springframework.stereotype.Repository; @@ -13,8 +16,9 @@ @Repository public class FileUserRepository implements UserRepository { - private final Map usersMap = new ConcurrentHashMap<>(); - private final Map usersName = new ConcurrentHashMap<>(); + private final Map idUserMap = new ConcurrentHashMap<>(); + private final Map userNameIdMap = new ConcurrentHashMap<>(); + private final Map userStatusMap = new ConcurrentHashMap<>(); private final Path DIRECTORY; private final String EXTENSION = ".ser"; @@ -42,8 +46,8 @@ private FileUserRepository() { throw new RuntimeException(e); } }).forEach(user -> { - usersMap.put(user.getId(), user); - usersName.put(user.getName(), user.getId()); + idUserMap.put(user.getId(), user); + userNameIdMap.put(user.getName(), user.getId()); }); } catch (IOException e) { throw new RuntimeException(e); @@ -64,10 +68,13 @@ private Path resolvePath(UUID id) { } @Override - public boolean createUser(String name, String pw) { - User user = new User(name, pw); - usersName.put(name, user.getId()); - usersMap.put(user.getId(), user); + public boolean createUser(CreateUserDto dto) { + List userSet = dto.toEntity(); + User user = (User) userSet.get(0); + UserStatus userStatus = (UserStatus) userSet.get(1); + userNameIdMap.put(user.getName(), user.getId()); + idUserMap.put(user.getId(), user); + userStatusMap.put(user.getId(), userStatus); Path path = resolvePath(user.getId()); try ( @@ -87,8 +94,8 @@ public boolean updateUser(UUID userId, String reName, String rePassword, String try(FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(usersMap.get(userId)); - usersMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); + oos.writeObject(idUserMap.get(userId)); + idUserMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); return true; } catch (IOException e) { return false; @@ -97,13 +104,14 @@ public boolean updateUser(UUID userId, String reName, String rePassword, String @Override public String getUser(String name) { - return usersMap.get(usersName.get(name)).toString(); + User user = idUserMap.get(userNameIdMap.get(name)); + return UserFinder.from(user, userStatusMap.get(user.getId())); } @Override public List getAllUser() { List result = new ArrayList<>(); - usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(user.toString())); + idUserMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(UserFinder.from(user, userStatusMap.get(user.getId())))); return result; } @@ -115,14 +123,15 @@ public boolean deleteUser(UUID id) { } catch (IOException e) { return false; } - usersName.remove(usersMap.get(id).getName()); - usersMap.remove(id); + userStatusMap.remove(id); + userNameIdMap.remove(idUserMap.get(id).getName()); + idUserMap.remove(id); return true; } public UUID userNameToId(String name) { try { - return usersName.get(name); + return userNameIdMap.get(name); } catch (Exception e) { return null; } @@ -130,7 +139,7 @@ public UUID userNameToId(String name) { public String userIdToName(UUID id) { try { - return usersMap.get(id).getName(); + return idUserMap.get(id).getName(); } catch (Exception e) { return null; } @@ -138,20 +147,27 @@ public String userIdToName(UUID id) { public boolean check(UUID id, String pw) { try { - return !usersMap.get(id).getPw().equals(pw); + return !idUserMap.get(id).getPassword().equals(pw); } catch (Exception e) { return true; } } - /// 더 좋은 방법이 있는지는 모르겠지만 당장은 이렇게...; - /// 사실 오버라이딩해서 썼는데 하나로 줄일 수 없을까 해서.. 고쳐봤습니다. + public boolean isPresentThis(String checkThis, String findThis) { + try { + if (checkThis.equals("이메일") && idUserMap.values().stream().anyMatch(u -> u.getEmail().equals(findThis))) return true; + if (checkThis.equals("전화번호") && idUserMap.values().stream().anyMatch(u -> u.getPhoneNumber().equals(findThis))) return true; + if (checkThis.equals("사용자명") && userNameIdMap.get(findThis) != null) return true; + } catch (Exception ignored) {} + return false; + } + public boolean isPresentUser(Object arg) { try { if(arg instanceof String) { - usersMap.get(usersName.get((String) arg)); + idUserMap.get(userNameIdMap.get((String) arg)); } else if(arg instanceof UUID){ - usersMap.get((UUID) arg); + idUserMap.get((UUID) arg); } else { return true; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java index 22e273a1..874a3055 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -1,6 +1,8 @@ package com.sprint.mission.discodeit.repository.jcf; +import com.sprint.mission.discodeit.dto.CreateUserDto; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.entity.UserStatus; import com.sprint.mission.discodeit.repository.UserRepository; import java.util.*; @@ -19,10 +21,13 @@ public static JCFUserRepository getInstance() { } @Override - public boolean createUser(String name, String pw) { - if(isDuplicateName(name)) return false; - User user = new User(name, pw); - usersName.put(name, user.getId()); + public boolean createUser(CreateUserDto dto) { + List userSet = dto.toEntity(); + User user = (User) userSet.get(0); + UserStatus userStatus = (UserStatus) userSet.get(1); + + if(isDuplicateName(user.getName())) return false; + usersName.put(user.getName(), user.getId()); usersMap.put(user.getId(), user); return true; } @@ -93,7 +98,7 @@ public String userIdToName(UUID id) { public boolean check(UUID id, String pw) { try { - return !usersMap.get(id).getPw().equals(pw); + return !usersMap.get(id).getPassword().equals(pw); } catch (Exception e) { return true; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/AttechmentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/AttechmentRepository.java new file mode 100644 index 00000000..38c13a28 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/AttechmentRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.service; + +public interface AttechmentRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java new file mode 100644 index 00000000..e5f31d23 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java @@ -0,0 +1,36 @@ +package com.sprint.mission.discodeit.service.auth; + +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Scanner; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class AuthService { + private final FileUserRepository userRepository; + private final Scanner scanner; + + public void login() { + System.out.println("로그인 서비스입니다."); + System.out.println("로그인할 사용자명을 입력해주세요"); + String name = scanner.nextLine().trim(); + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String password = scanner.nextLine().trim(); + + /// 검증로직 + UUID id = userRepository.userNameToId(name); + + if(userRepository.check(id, password)) { + System.out.println("성공!"); + } else { + System.err.println("실패, 다시 확인해주시기 바랍니다."); + } + } + + public void logout() { + return; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java new file mode 100644 index 00000000..67fabaf4 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java @@ -0,0 +1,32 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.entity.BinaryContent; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.AttechmentRepository; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class AttachmentRepository implements AttechmentRepository { + private final Map fileIdMap = new ConcurrentHashMap<>();private final Map relationIdMap = new ConcurrentHashMap<>(); + public boolean create(UUID id, String file) { + BinaryContent binaryContent = new BinaryContent(file); + fileIdMap.put(binaryContent.getId(), binaryContent); + relationIdMap.put(id, binaryContent); + return true; + } + + public boolean delete(UUID relationId) { + try{ + relationIdMap.remove(relationId); + return true; + } catch (Exception e) { + return false; + } + } + + public String getAttachementFile(UUID id) { + return fileIdMap.get(id).getFileName(); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java index 48e7bdc2..3c7c4d7b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -1,41 +1,32 @@ package com.sprint.mission.discodeit.service.basic; -import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.service.ChannelService; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; import java.util.Scanner; @Service +@RequiredArgsConstructor public class BasicChannelService implements ChannelService { - FileChannelRepository fileChannelRepository = FileChannelRepository.getInstance(); - Scanner sc = JavaApplication.scanner(); - - private BasicChannelService() { - } - private static class Holder { - private static final BasicChannelService INSTANCE = new BasicChannelService(); - } - public static BasicChannelService getInstance() { - return Holder.INSTANCE; - } - + private final Scanner scanner; + private final FileChannelRepository channelRepository; @Override public void createChannel() { System.out.println("사용하려는 채널명이 무엇인가요?"); - String name = sc.nextLine().trim(); + String name = scanner.nextLine().trim(); - if (fileChannelRepository.isPresentChannel(name)) { + if (channelRepository.isPresentChannel(name)) { System.out.println("이미 존재하는 채널명이에요!"); return; } - fileChannelRepository.save(new Channel(name)); + channelRepository.save(new Channel(name)); System.out.println("잘 들어갔어요!"); } @@ -43,14 +34,14 @@ public void createChannel() { @Override public void readChannel() { System.out.println("검색할 채널명을 알려주세요"); - String name = sc.nextLine().trim(); + String name = scanner.nextLine().trim(); - fileChannelRepository.readChannel(name); + channelRepository.readChannel(name); } @Override public void readAllChannel() { - List allChannel = fileChannelRepository.readAllChannel(); + List allChannel = channelRepository.readAllChannel(); if (allChannel.isEmpty()) { System.out.println("채널이 존재하지 않습니다."); @@ -65,9 +56,9 @@ public void readAllChannel() { @Override public void updateChannel() { System.out.println("변경하고자 하는 채널명을 알려주세요"); - String oldName = sc.nextLine(); + String oldName = scanner.nextLine(); - if(!fileChannelRepository.isPresentChannel(oldName)) { + if(!channelRepository.isPresentChannel(oldName)) { System.out.println("해당 채널이 존재하지 않습니다."); return; } @@ -75,9 +66,9 @@ public void updateChannel() { System.out.println("현재 채널명 : " + oldName); System.out.println("무엇으로 변경하고 싶은가요? "); - String newName = sc.nextLine(); + String newName = scanner.nextLine(); - if(fileChannelRepository.save(oldName, newName)) + if(channelRepository.save(oldName, newName)) System.out.println("잘 변경되었어요!"); } @@ -87,22 +78,22 @@ public void deleteChannel() { System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); - int n = sc.nextInt(); - sc.nextLine(); + int n = scanner.nextInt(); + scanner.nextLine(); if (n == 0) { System.out.println("처음으로 돌아갑니다."); return; } System.out.print("삭제하려는 채널명을 알려주세요: "); - String inputChannelName = sc.nextLine(); + String inputChannelName = scanner.nextLine(); - if(!fileChannelRepository.isPresentChannel(inputChannelName)) { + if(!channelRepository.isPresentChannel(inputChannelName)) { System.out.println("해당 채널을 찾을 수 없습니다."); return; } - if (fileChannelRepository.deleteChannel(inputChannelName)) { + if (channelRepository.deleteChannel(inputChannelName)) { System.out.println("해당 채널이 삭제되었습니다."); } else { System.err.println("오류가 발생하여 삭제할 수 없습니다."); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java index 361b54f2..eb0e04be 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -1,35 +1,25 @@ package com.sprint.mission.discodeit.service.basic; -import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileMessageRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.MessageService; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.text.SimpleDateFormat; import java.util.List; import java.util.Objects; import java.util.Scanner; import java.util.UUID; @Service +@RequiredArgsConstructor public class BasicMessageService implements MessageService { - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Scanner sc = JavaApplication.scanner(); - FileUserRepository userRepository = FileUserRepository.getInstance(); - FileChannelRepository channelRepository = FileChannelRepository.getInstance(); - FileMessageRepository messageRepository = FileMessageRepository.getInstance(); - - private BasicMessageService() { - } - - private static class Holder { - private static final BasicMessageService INSTANCE = new BasicMessageService(); - } - - public static BasicMessageService getInstance() {return Holder.INSTANCE;} + private final Scanner sc; + private final FileUserRepository userRepository; + private final FileChannelRepository channelRepository; + private final FileMessageRepository messageRepository; @Override public void createMessage() { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java index 1e88821c..e8f1a025 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -1,9 +1,10 @@ package com.sprint.mission.discodeit.service.basic; import com.sprint.mission.discodeit.Input; -import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.dto.CreateUserDto; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.UserService; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; @@ -11,33 +12,32 @@ import java.util.UUID; @Service +@RequiredArgsConstructor public class BasicUserService implements UserService { - Scanner sc = JavaApplication.scanner(); - - private BasicUserService() { - } - private static class Holder { - private static final BasicUserService INSTANCE = new BasicUserService(); - } - public static BasicUserService getInstance() {return Holder.INSTANCE;} - - FileUserRepository fileUserRepository = FileUserRepository.getInstance(); + private final Scanner scanner; + private final FileUserRepository userRepository; + private final AttachmentRepository attachmentRepository; + private final Input Input; @Override public void createUser() { System.out.println("회원가입에 오신 것을 환영합니다."); System.out.print("먼저, 사용할 이름을 작성해주세요 : "); - String name = sc.nextLine().trim(); + String name = scanner.nextLine().trim(); - if (fileUserRepository.userNameToId(name) != null) { + if (userRepository.userNameToId(name) != null) { System.out.println("이미 존재하는 사용자명입니다."); return; } System.out.print("사용할 비밀번호를 입력해주세요 : "); - String pw = sc.nextLine(); + String password = scanner.nextLine(); + + System.out.print("사용할 프로필 이미지를 입력해주세요 : "); + String profileImage = scanner.nextLine(); + CreateUserDto requestDto = new CreateUserDto(name, password, profileImage); - if(fileUserRepository.createUser(name, pw)) { + if(userRepository.createUser(requestDto)) { System.out.println("사용자 " + name + "님이 추가되었습니다."); } else { System.err.println("알 수 없는 오류가 발생하여 저장하지 못했습니다."); @@ -58,23 +58,28 @@ public void updateUser() { while(true) { System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); - String reName = Input.inputUpdateField(sc, "사용자명", "\\S+"); - String rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+"); - String reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+"); - String rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$"); + String reName = Input.inputUpdateField("사용자명", "\\S+"); + String rePassword = Input.inputUpdateField("비밀번호", "\\S+"); + String reMail = Input.inputUpdateField("이메일", "\\S+@\\S+\\.\\S+"); + String rePhoneNumber = Input.inputUpdateField("전화번호", "^\\d{10,11}$"); + String reProfile = Input.inputUpdateField("프로필 이미지", "\\."); System.out.println("이대로 진행하시겠습니까?"); System.out.println("맞으면 y, 다시 입력하려면 re"); System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); - String finalCheckIsContinue = sc.nextLine(); + String finalCheckIsContinue = scanner.nextLine(); switch (finalCheckIsContinue.toLowerCase()){ case "y": - if(fileUserRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { + if(userRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { + if(reProfile != null){ + attachmentRepository.delete(userId); + attachmentRepository.create(userId, reProfile); + } System.out.println("완료"); return; } - System.out.println("실패"); + System.err.println("실패"); return; case "re": continue; @@ -88,20 +93,20 @@ public void updateUser() { @Override public void getUserName() { System.out.println("조회하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); + String name = scanner.nextLine(); - if (fileUserRepository.userNameToId(name) == null) { + if (userRepository.userNameToId(name) == null) { System.out.println("조회하고자 하는 사용자가 없습니다."); return; } - System.out.println(fileUserRepository.getUser(name)); + System.out.println(userRepository.getUser(name)); System.out.println("===================="); } @Override public void getAllUserName() { - List userList = fileUserRepository.getAllUser(); + List userList = userRepository.getAllUser(); if (userList.isEmpty()) { System.out.println("사용자가 없습니다."); return; @@ -118,8 +123,8 @@ public void deleteUser() { System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); - int n = sc.nextInt(); - sc.nextLine(); + int n = scanner.nextInt(); + scanner.nextLine(); if (n == 0) { System.out.println("처음으로 돌아갑니다."); return; @@ -132,22 +137,22 @@ public void deleteUser() { return; } - fileUserRepository.deleteUser(userId); + userRepository.deleteUser(userId); System.out.println("계정이 삭제되었습니다."); } private UUID workRoute(String work) { System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - UUID userId = fileUserRepository.userNameToId(name); + String name = scanner.nextLine(); + UUID userId = userRepository.userNameToId(name); if (userId == null) return null; System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String pw = sc.nextLine(); + String pw = scanner.nextLine(); - if (fileUserRepository.check(userId, pw)) return null; + if (userRepository.check(userId, pw)) return null; return userId; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java deleted file mode 100644 index 33244bc4..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.sprint.mission.discodeit.service.file; - -import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.service.ChannelService; - -import java.util.List; -import java.util.Scanner; - -public class FileChannelService implements ChannelService { - FileChannelRepository fileChannelRepository = FileChannelRepository.getInstance(); - Scanner sc = JavaApplication.scanner(); - - private FileChannelService() { - } - private static class Holder { - private static final FileChannelService INSTANCE = new FileChannelService(); - } - public static FileChannelService getInstance() { - return Holder.INSTANCE; - } - - - - @Override - public void createChannel() { - System.out.println("사용하려는 채널명이 무엇인가요?"); - String name = sc.nextLine().trim(); - - if (fileChannelRepository.isPresentChannel(name)) { - System.out.println("이미 존재하는 채널명이에요!"); - return; - } - - fileChannelRepository.save(new Channel(name)); - - System.out.println("잘 들어갔어요!"); - } - - @Override - public void readChannel() { - System.out.println("검색할 채널명을 알려주세요"); - String name = sc.nextLine().trim(); - - fileChannelRepository.readChannel(name); - } - - @Override - public void readAllChannel() { - List allChannel = fileChannelRepository.readAllChannel(); - - if (allChannel.isEmpty()) { - System.out.println("채널이 존재하지 않습니다."); - return; - } - - allChannel.forEach(System.out::println); - - System.out.println("현재 총 채널수 : " + allChannel.size()); - } - - @Override - public void updateChannel() { - System.out.println("변경하고자 하는 채널명을 알려주세요"); - String oldName = sc.nextLine(); - - if(!fileChannelRepository.isPresentChannel(oldName)) { - System.out.println("해당 채널이 존재하지 않습니다."); - return; - } - - System.out.println("현재 채널명 : " + oldName); - System.out.println("무엇으로 변경하고 싶은가요? "); - - String newName = sc.nextLine(); - - if(fileChannelRepository.save(oldName, newName)) - System.out.println("잘 변경되었어요!"); - } - - @Override - public void deleteChannel() { - System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); - - int n = sc.nextInt(); - sc.nextLine(); - if (n == 0) { - System.out.println("처음으로 돌아갑니다."); - return; - } - - System.out.print("삭제하려는 채널명을 알려주세요: "); - String inputChannelName = sc.nextLine(); - - if(!fileChannelRepository.isPresentChannel(inputChannelName)) { - System.out.println("해당 채널을 찾을 수 없습니다."); - return; - } - - if (fileChannelRepository.deleteChannel(inputChannelName)) { - System.out.println("해당 채널이 삭제되었습니다."); - } else { - System.err.println("오류가 발생하여 삭제할 수 없습니다."); - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java deleted file mode 100644 index 97f8956f..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.sprint.mission.discodeit.service.file; - -import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.repository.file.FileMessageRepository; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; -import com.sprint.mission.discodeit.service.MessageService; - -import java.text.SimpleDateFormat; -import java.util.*; - -public class FileMessageService implements MessageService -{ - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Scanner sc = JavaApplication.scanner(); - FileUserRepository userRepository = FileUserRepository.getInstance(); - FileChannelRepository channelRepository = FileChannelRepository.getInstance(); - FileMessageRepository messageRepository = FileMessageRepository.getInstance(); - - private FileMessageService() { - } - - private static class Holder { - private static final FileMessageService INSTANCE = new FileMessageService(); - } - - public static FileMessageService getInstance() {return FileMessageService.Holder.INSTANCE;} - - @Override - public void createMessage() { - System.out.println("누가 보내는 메시지인가요?"); - String senderUserName = sc.nextLine(); - if(userRepository.userNameToId(senderUserName) == null){ - System.err.println("존재하지 않는 사용자입니다."); - return; - }; - - System.out.println("어디로 보내는 메시지인가요?"); - String sendeeChannelName = sc.nextLine(); - - if(channelRepository.isPresentChannel(sendeeChannelName)) { - System.out.println("존재하지 않는 채널입니다."); - return; - } - - while(true) { - System.out.println("현재 메시지를 보낼 채널은 " + sendeeChannelName + "입니다."); - System.out.println("현재 메시지를 보낼 사람은 " + senderUserName + "입니다."); - System.out.println("무어라 보내고 싶으신가요?"); - String text = sc.nextLine(); - - System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); - System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); - String n = sc.nextLine(); - - if (Objects.equals(n, "0")) { - System.out.println("처음으로 돌아갑니다."); - return; - } else if (Objects.equals(n, "1")) { - if(messageRepository.createMessage(text, sendeeChannelName, senderUserName)) { - System.out.println("성공."); - } - return; - } else { - System.out.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); - } - } - } - - @Override - public void getMessageForSender(String senderName) { - List messages = messageRepository.getMessageForSender(senderName); - if (messages.isEmpty()) { - System.out.println("아쉽지만 아무것도 없네요!"); - return; - } - - System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - messages.forEach(System.out::print); - - } - - @Override - public void getMessageInChannel(String channelName) { - List messages = messageRepository.getInChannelMessage(channelName); - - if (messages.isEmpty()) { - System.out.println("해당 채널에 보낸 메시지가 없어요."); - return; - } - - messages.forEach(System.out::print); - System.out.println("총 메시지 : " + messages.size()); - } - - @Override - public void updateMessage(String userName) { - getMessageForSender(userName); - - System.out.println("어떤 것을 수정하고 싶나요?"); - String id = sc.nextLine(); - - if (messageRepository.check(userName, UUID.fromString(id))) { - System.out.println("실패. 해당 ID를 찾지 못했습니다."); - return; - } - - System.out.println("무슨 내용으로 수정하고 싶나요?"); - String content = sc.nextLine(); - - if(messageRepository.updateMessage(UUID.fromString(id), content)) { - System.out.println("성공적으로 변경되었습니다."); - } else { - System.err.println("실패!"); - } - } - - @Override - public void deleteMessage(String userName) { - getMessageForSender(userName); - System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); - String id = sc.nextLine(); - - if (messageRepository.check(userName, UUID.fromString(id))) { - System.out.println("실패. 해당 ID를 찾지 못했습니다."); - return; - } - - System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); - String isDelete = sc.nextLine(); - - if (isDelete.equalsIgnoreCase("Y")) { - if(messageRepository.deleteMessage(userName, UUID.fromString(id))) { - System.out.println("성공!"); - } else System.out.println("실패!"); - } else System.out.println("초기로 돌아갑니다"); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java deleted file mode 100644 index 31721703..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.sprint.mission.discodeit.service.file; - -import com.sprint.mission.discodeit.Input; -import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; -import com.sprint.mission.discodeit.service.UserService; - -import java.util.*; - -public class FileUserService implements UserService { - Scanner sc = JavaApplication.scanner(); - - private FileUserService() { - } - private static class Holder { - private static final FileUserService INSTANCE = new FileUserService(); - } - public static FileUserService getInstance() {return Holder.INSTANCE;} - - FileUserRepository fileUserRepository = FileUserRepository.getInstance(); - - @Override - public void createUser() { - System.out.println("회원가입에 오신 것을 환영합니다."); - System.out.print("먼저, 사용할 이름을 작성해주세요 : "); - String name = sc.nextLine().trim(); - - if (fileUserRepository.userNameToId(name) != null) { - System.out.println("이미 존재하는 사용자명입니다."); - return; - } - - System.out.print("사용할 비밀번호를 입력해주세요 : "); - String pw = sc.nextLine(); - - if(fileUserRepository.createUser(name, pw)) { - System.out.println("사용자 " + name + "님이 추가되었습니다."); - } else { - System.err.println("알 수 없는 오류가 발생하여 저장하지 못했습니다."); - } - } - - /// Update - @Override - public void updateUser() { - System.out.println("===================="); - System.out.println("사용자 변경 메뉴입니다."); - UUID userId = workRoute("변경"); - if(userId == null) { - System.out.println("일치하는 사용자가 없습니다."); - return; - } - - while(true) { - System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); - - String reName = Input.inputUpdateField(sc, "사용자명", "\\S+"); - String rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+"); - String reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+"); - String rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$"); - - System.out.println("이대로 진행하시겠습니까?"); - System.out.println("맞으면 y, 다시 입력하려면 re"); - System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); - - String finalCheckIsContinue = sc.nextLine(); - switch (finalCheckIsContinue.toLowerCase()){ - case "y": - if(fileUserRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { - System.out.println("완료"); - return; - } - System.out.println("실패"); - return; - case "re": - continue; - default: - return; - } - } - } - - /// Read - @Override - public void getUserName() { - System.out.println("조회하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - - if (fileUserRepository.userNameToId(name) == null) { - System.out.println("조회하고자 하는 사용자가 없습니다."); - return; - } - - System.out.println(fileUserRepository.getUser(name)); - System.out.println("===================="); - } - - @Override - public void getAllUserName() { - List userList = fileUserRepository.getAllUser(); - if (userList.isEmpty()) { - System.out.println("사용자가 없습니다."); - return; - } - - userList.forEach(System.out::println); - System.out.println("현재 총 사용자 : " + userList.size()); - } - - /// Delete - @Override - public void deleteUser() { - System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); - - int n = sc.nextInt(); - sc.nextLine(); - if (n == 0) { - System.out.println("처음으로 돌아갑니다."); - return; - } - - UUID userId = workRoute("삭제"); - - if (userId == null) { - System.out.println("일치하는 계정을 찾을 수 없습니다."); - return; - } - - fileUserRepository.deleteUser(userId); - - System.out.println("계정이 삭제되었습니다."); - } - - private UUID workRoute(String work) { - System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - UUID userId = fileUserRepository.userNameToId(name); - - if (userId == null) return null; - - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String pw = sc.nextLine(); - - if (fileUserRepository.check(userId, pw)) return null; - - return userId; - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java deleted file mode 100644 index dd142578..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.sprint.mission.discodeit.service.jcf; - -import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.repository.jcf.JCFChannelRepository; -import com.sprint.mission.discodeit.service.ChannelService; - -import java.util.List; -import java.util.Scanner; - -public class JCFChannelService implements ChannelService { - JCFChannelRepository jcfChannelRepository = JCFChannelRepository.getInstance(); - Scanner sc = JavaApplication.scanner(); - - private JCFChannelService() { - } - private static class Holder { - private static final JCFChannelService INSTANCE = new JCFChannelService(); - } - public static JCFChannelService getInstance() { - return Holder.INSTANCE; - } - - - - @Override - public void createChannel() { - System.out.println("사용하려는 채널명이 무엇인가요?"); - String name = sc.nextLine().trim(); - - if (jcfChannelRepository.isPresentChannel(name)) { - System.out.println("이미 존재하는 채널명이에요!"); - return; - } - - jcfChannelRepository.save(new Channel(name)); - - System.out.println("잘 들어갔어요!"); - } - - @Override - public void readChannel() { - System.out.println("검색할 채널명을 알려주세요"); - String name = sc.nextLine().trim(); - - jcfChannelRepository.readChannel(name); - } - - @Override - public void readAllChannel() { - List allChannel = jcfChannelRepository.readAllChannel(); - - if (allChannel.isEmpty()) { - System.out.println("채널이 존재하지 않습니다."); - return; - } - - allChannel.forEach(System.out::println); - - System.out.println("현재 총 채널수 : " + allChannel.size()); - } - - @Override - public void updateChannel() { - System.out.println("변경하고자 하는 채널명을 알려주세요"); - String oldName = sc.nextLine(); - - if(!jcfChannelRepository.isPresentChannel(oldName)) { - System.out.println("해당 채널이 존재하지 않습니다."); - return; - } - - System.out.println("현재 채널명 : " + oldName); - System.out.println("무엇으로 변경하고 싶은가요? "); - - String newName = sc.nextLine(); - - if(jcfChannelRepository.save(oldName, newName)) - System.out.println("잘 변경되었어요!"); - } - - @Override - public void deleteChannel() { - System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); - - int n = sc.nextInt(); - sc.nextLine(); - if (n == 0) { - System.out.println("처음으로 돌아갑니다."); - return; - } - - System.out.print("삭제하려는 채널명을 알려주세요: "); - String inputChannelName = sc.nextLine(); - - if(!jcfChannelRepository.isPresentChannel(inputChannelName)) { - System.out.println("해당 채널을 찾을 수 없습니다."); - return; - } - - if (jcfChannelRepository.deleteChannel(inputChannelName)) { - System.out.println("해당 채널이 삭제되었습니다."); - } else { - System.err.println("오류가 발생하여 삭제할 수 없습니다."); - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java deleted file mode 100644 index a638f3df..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.sprint.mission.discodeit.service.jcf; - -import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.repository.jcf.JCFChannelRepository; -import com.sprint.mission.discodeit.repository.jcf.JCFMessageRepository; -import com.sprint.mission.discodeit.repository.jcf.JCFUserRepository; -import com.sprint.mission.discodeit.service.MessageService; - -import java.text.SimpleDateFormat; -import java.util.*; - -public class JCFMessageService implements MessageService -{ - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Scanner sc = JavaApplication.scanner(); - JCFUserRepository userRepository = JCFUserRepository.getInstance(); - JCFChannelRepository channelRepository = JCFChannelRepository.getInstance(); - JCFMessageRepository messageRepository = JCFMessageRepository.getInstance(); - - private JCFMessageService() { - } - - private static class Holder { - private static final JCFMessageService INSTANCE = new JCFMessageService(); - } - - public static JCFMessageService getInstance() {return JCFMessageService.Holder.INSTANCE;} - - @Override - public void createMessage() { - System.out.println("누가 보내는 메시지인가요?"); - String senderUserName = sc.nextLine(); - if(userRepository.userNameToId(senderUserName) == null){ - System.err.println("존재하지 않는 사용자입니다."); - return; - }; - - System.out.println("어디로 보내는 메시지인가요?"); - String sendeeChannelName = sc.nextLine(); - - if(channelRepository.isPresentChannel(sendeeChannelName)) { - System.out.println("존재하지 않는 채널입니다."); - return; - } - - while(true) { - System.out.println("현재 메시지를 보낼 채널은 " + sendeeChannelName + "입니다."); - System.out.println("현재 메시지를 보낼 사람은 " + senderUserName + "입니다."); - System.out.println("무어라 보내고 싶으신가요?"); - String text = sc.nextLine(); - - System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); - System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); - String n = sc.nextLine(); - - if (Objects.equals(n, "0")) { - System.out.println("처음으로 돌아갑니다."); - return; - } else if (Objects.equals(n, "1")) { - if(messageRepository.createMessage(text, sendeeChannelName, senderUserName)) { - System.out.println("성공."); - } - return; - } else { - System.out.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); - } - } - } - - @Override - public void getMessageForSender(String senderName) { - List messages = messageRepository.getMessageForSender(senderName); - if (messages.isEmpty()) { - System.out.println("아쉽지만 아무것도 없네요!"); - return; - } - - System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - messages.forEach(System.out::print); - - } - - @Override - public void getMessageInChannel(String channelName) { - List messages = messageRepository.getInChannelMessage(channelName); - - if (messages.isEmpty()) { - System.out.println("해당 채널에 보낸 메시지가 없어요."); - return; - } - - messages.forEach(System.out::print); - System.out.println("총 메시지 : " + messages.size()); - } - - @Override - public void updateMessage(String userName) { - getMessageForSender(userName); - - System.out.println("어떤 것을 수정하고 싶나요?"); - String id = sc.nextLine(); - - if (messageRepository.check(userName, UUID.fromString(id))) { - System.out.println("실패. 해당 ID를 찾지 못했습니다."); - return; - } - - System.out.println("무슨 내용으로 수정하고 싶나요?"); - String content = sc.nextLine(); - - if(messageRepository.updateMessage(UUID.fromString(id), content)) { - System.out.println("성공적으로 변경되었습니다."); - } else { - System.err.println("실패!"); - } - } - - @Override - public void deleteMessage(String userName) { - getMessageForSender(userName); - System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); - String id = sc.nextLine(); - - if (messageRepository.check(userName, UUID.fromString(id))) { - System.out.println("실패. 해당 ID를 찾지 못했습니다."); - return; - } - - System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); - String isDelete = sc.nextLine(); - - if (isDelete.equalsIgnoreCase("Y")) { - if(messageRepository.deleteMessage(userName, UUID.fromString(id))) { - System.out.println("성공!"); - } else System.out.println("실패!"); - } else System.out.println("초기로 돌아갑니다"); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java deleted file mode 100644 index 3a8bd4f5..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.sprint.mission.discodeit.service.file; - -import com.sprint.mission.discodeit.Input; -import com.sprint.mission.discodeit.app.JavaApplication; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; -import com.sprint.mission.discodeit.service.UserService; - -import java.util.*; - -public class JCFUserService implements UserService { - Scanner sc = JavaApplication.scanner(); - - private JCFUserService() { - } - private static class Holder { - private static final JCFUserService INSTANCE = new JCFUserService(); - } - public static JCFUserService getInstance() {return Holder.INSTANCE;} - - FileUserRepository fileUserRepository = FileUserRepository.getInstance(); - - @Override - public void createUser() { - System.out.println("회원가입에 오신 것을 환영합니다."); - System.out.print("먼저, 사용할 이름을 작성해주세요 : "); - String name = sc.nextLine().trim(); - - if (fileUserRepository.userNameToId(name) != null) { - System.out.println("이미 존재하는 사용자명입니다."); - return; - } - - System.out.print("사용할 비밀번호를 입력해주세요 : "); - String pw = sc.nextLine(); - - if(fileUserRepository.createUser(name, pw)) { - System.out.println("사용자 " + name + "님이 추가되었습니다."); - } else { - System.err.println("알 수 없는 오류가 발생하여 저장하지 못했습니다."); - } - } - - /// Update - @Override - public void updateUser() { - System.out.println("===================="); - System.out.println("사용자 변경 메뉴입니다."); - UUID userId = workRoute("변경"); - if(userId == null) { - System.out.println("일치하는 사용자가 없습니다."); - return; - } - - while(true) { - System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); - - String reName = Input.inputUpdateField(sc, "사용자명", "\\S+"); - String rePassword = Input.inputUpdateField(sc, "비밀번호", "\\S+"); - String reMail = Input.inputUpdateField(sc, "이메일", "\\S+@\\S+\\.\\S+"); - String rePhoneNumber = Input.inputUpdateField(sc, "전화번호", "^\\d{10,11}$"); - - System.out.println("이대로 진행하시겠습니까?"); - System.out.println("맞으면 y, 다시 입력하려면 re"); - System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); - - String finalCheckIsContinue = sc.nextLine(); - switch (finalCheckIsContinue.toLowerCase()){ - case "y": - if(fileUserRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { - System.out.println("완료"); - return; - } - System.out.println("실패"); - return; - case "re": - continue; - default: - return; - } - } - } - - /// Read - @Override - public void getUserName() { - System.out.println("조회하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - - if (fileUserRepository.userNameToId(name) == null) { - System.out.println("조회하고자 하는 사용자가 없습니다."); - return; - } - - System.out.println(fileUserRepository.getUser(name)); - System.out.println("===================="); - } - - @Override - public void getAllUserName() { - List userList = fileUserRepository.getAllUser(); - if (userList.isEmpty()) { - System.out.println("사용자가 없습니다."); - return; - } - - userList.forEach(System.out::println); - System.out.println("현재 총 사용자 : " + userList.size()); - } - - /// Delete - @Override - public void deleteUser() { - System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); - - int n = sc.nextInt(); - sc.nextLine(); - if (n == 0) { - System.out.println("처음으로 돌아갑니다."); - return; - } - - UUID userId = workRoute("삭제"); - - if (userId == null) { - System.out.println("일치하는 계정을 찾을 수 없습니다."); - return; - } - - fileUserRepository.deleteUser(userId); - - System.out.println("계정이 삭제되었습니다."); - } - - private UUID workRoute(String work) { - System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); - String name = sc.nextLine(); - UUID userId = fileUserRepository.userNameToId(name); - - if (userId == null) return null; - - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String pw = sc.nextLine(); - - if (fileUserRepository.check(userId, pw)) return null; - - return userId; - } -} From 5af9ee3f6b8c00304f1103fd78846a1652a4c81d Mon Sep 17 00:00:00 2001 From: Alpha Date: Thu, 29 Jan 2026 13:42:22 +0900 Subject: [PATCH 25/35] =?UTF-8?q?Feat:=20add=20login,=20logout=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EB=A1=9C=EA=B7=B8=EC=95=84=EC=9B=83=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80.=20=EA=B8=B0=ED=83=80?= =?UTF-8?q?=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../com/sprint/mission/discodeit/Input.class | Bin 1854 -> 2573 bytes .../discodeit/app/JavaApplication.class | Bin 1410 -> 1318 bytes .../app/router/RouteChannelService.class | Bin 1615 -> 1711 bytes .../app/router/RouteMessageService.class | Bin 3148 -> 3117 bytes .../discodeit/app/router/RoutePrintText.class | Bin 2166 -> 2251 bytes .../app/router/RouteUserService.class | Bin 1588 -> 1687 bytes .../mission/discodeit/app/router/Router.class | Bin 1814 -> 3914 bytes .../mission/discodeit/entity/Channel.class | Bin 2566 -> 2966 bytes .../mission/discodeit/entity/Message.class | Bin 1877 -> 2058 bytes .../mission/discodeit/entity/User.class | Bin 3868 -> 4586 bytes .../discodeit/repository/UserRepository.class | Bin 688 -> 697 bytes .../file/FileChannelRepository$Holder.class | Bin 688 -> 688 bytes .../file/FileChannelRepository.class | Bin 8792 -> 8878 bytes .../file/FileMessageRepository$Holder.class | Bin 688 -> 0 bytes .../file/FileMessageRepository.class | Bin 12666 -> 12606 bytes .../file/FileUserRepository$Holder.class | Bin 673 -> 0 bytes .../repository/file/FileUserRepository.class | Bin 9520 -> 11113 bytes .../repository/jcf/JCFMessageRepository.class | Bin 8150 -> 7985 bytes .../repository/jcf/JCFUserRepository.class | Bin 5296 -> 5658 bytes .../file/FileChannelService$Holder.class | Bin 661 -> 0 bytes .../service/file/FileChannelService.class | Bin 5006 -> 0 bytes .../file/FileMessageService$Holder.class | Bin 661 -> 0 bytes .../service/file/FileMessageService.class | Bin 6558 -> 0 bytes .../service/file/FileUserService$Holder.class | Bin 646 -> 0 bytes .../service/file/FileUserService.class | Bin 6555 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 27692 -> 28483 bytes .../sprint/mission/discodeit/UserState.java | 24 +++++++--------- .../app/router/RouteUserService.java | 3 -- .../mission/discodeit/app/router/Router.java | 27 +++++++++++++----- .../mission/discodeit/dto/CreateUserDto.java | 6 ++-- .../mission/discodeit/dto/UserFinder.java | 5 +++- .../mission/discodeit/entity/Message.java | 8 ++++++ .../sprint/mission/discodeit/entity/User.java | 10 +++---- .../mission/discodeit/entity/UserStatus.java | 13 ++++++--- .../file/FileMessageRepository.java | 21 ++++++-------- .../repository/file/FileUserRepository.java | 10 +------ .../repository/jcf/JCFMessageRepository.java | 17 ++++------- .../discodeit/service/auth/AuthService.java | 11 +++++-- .../service/basic/AttachmentRepository.java | 3 +- .../f0096dba-1ec3-4d64-83cb-bd4fe94476e6.ser | Bin 50820 -> 0 bytes .../2574dc07-95dd-4339-b0f9-5dbd84903995.ser | Bin 502 -> 0 bytes .../3a11c6bd-1032-459f-9d50-8e2ebb27ea3e.ser | Bin 423 -> 0 bytes .../a93c6486-cfcc-43ea-a551-3023fe9e9e07.ser | Bin 428 -> 0 bytes .../db945a4f-5473-4551-b4fb-3b7725dad6d7.ser | Bin 420 -> 0 bytes .../1e0d54e4-d371-4ac2-b912-b3514b0ffccc.ser | Bin 0 -> 381 bytes .../884600ad-9f6b-4962-8a8a-562a416a0908.ser | Bin 50870 -> 0 bytes .../99b49776-d933-4b1d-8f28-98f081e2ee1f.ser | Bin 50870 -> 0 bytes .../dfebc555-001b-489f-92a3-642abc3b97f7.ser | Bin 0 -> 381 bytes 51 files changed, 88 insertions(+), 73 deletions(-) delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService$Holder.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService.class delete mode 100644 file-data-map/Channel/f0096dba-1ec3-4d64-83cb-bd4fe94476e6.ser delete mode 100644 file-data-map/Message/2574dc07-95dd-4339-b0f9-5dbd84903995.ser delete mode 100644 file-data-map/Message/3a11c6bd-1032-459f-9d50-8e2ebb27ea3e.ser delete mode 100644 file-data-map/Message/a93c6486-cfcc-43ea-a551-3023fe9e9e07.ser delete mode 100644 file-data-map/Message/db945a4f-5473-4551-b4fb-3b7725dad6d7.ser create mode 100644 file-data-map/User/1e0d54e4-d371-4ac2-b912-b3514b0ffccc.ser delete mode 100644 file-data-map/User/884600ad-9f6b-4962-8a8a-562a416a0908.ser delete mode 100644 file-data-map/User/99b49776-d933-4b1d-8f28-98f081e2ee1f.ser create mode 100644 file-data-map/User/dfebc555-001b-489f-92a3-642abc3b97f7.ser diff --git a/.gitignore b/.gitignore index 723ef36f..4db85a08 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.idea \ No newline at end of file +.idea +.ser \ No newline at end of file diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index f3e6ae866c1f4e59fba34d6b2c8d1cc4811c8953..22707704c322250ab15773226930cf0006d367ba 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6c`1pqXR1jzsZ literal 17 VcmZQxwaR1i+k`Ae1~6d$2>>*y1m^$% diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index 6ed88fb73ba69f8e78305c060fca319d5f8db53a..fcfa2a407bd6fd63dd055b95f04139f24e1d0e83 100644 GIT binary patch literal 8 PcmZQzV4TDLUhg9S2T%gD literal 8 PcmZQzV4VFgN#iE~348+{ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/Input.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/Input.class index c2df64cb6bf907558b7f7ee0a4ea516c46c546b9..5af5a4f88e57e7d7452861f4449cf434d1fa87fe 100644 GIT binary patch literal 2573 zcmbtV+fx%)82=ptB*YakiqvaY8Y zjw8<02bn@EjLzsd?R2KrD(%?Yd;f;Mcc$6=2c5Rx*+c|MX=gf_oZa(Xf8TX~`SbBl z0QTd24JzRCqf$W?su{M%t&HYmZNn5=#&8_NGPQ)^#H|E3gw}0lbArL|#C6l;HpA-J zm_Dv+Ibo!=fg-UzhyZH*2r5_sg<;ha35I~lFNm07a)vcck)n;XZYH$>L7tOjq84?2 z)GJseP1JiP76>p@l3+%PtyZuG4TQ;Xj%2dpB7?6fGAucb3ZBC{;$(CYALR~1L(@`M zk>MI_z(zkdDcFqX7dyM?2%aH}+@@F?ipqwi^~v-QRIX>*1K7f_#hsnXfAM|(`c2iH z{V;#)u3DIybSGxyW#USH;!ax-FCgs4HU-- zeX}rmS#@U~=D+&Ry?055+pM4ktqj%tTux6v8}0FtF&-D~k>LO|s!7v9BhnT<)7CVW zO@5FylaT;kVu;Ke%wN5s601ceUjE)Sm3+9LT`x?2UJ6Hc%`OEm;}wS5oWt#Yp0yl9 zST+@)BerZ4+4G{>StHH0E;>#wGC}o!4ZHo=qhK%E84mtWdkiZLr_bgNH^tznLAlvc zrW4BbMo12cf&)0n(3sIvywft{x;SNsQF?QPZVIxty^OUoT`e1}L%|{0Wj-q>LSWc0 z8{>$AF4+}TUi||&#;|L?6l!65(w)8Q&R+kwq6DcZZzy;ZF$TququM#j<0(0(yUQRf z6Yo+|5WP6=N1uWd=wCD(#g3wW+h>@DIN;6Q5DjK0tqO)ZIo-Xv%m}v!^^r7DLNP0@ zr-yXgkoOX?Qh4PEFW)iV+MzzE6tp&^rDyj6@oH?Ixp61t#OOHe|ww3QjLQrb~Y8 zXw0&c#bus6D}z06*(r@yn$0b7G0U}1E0eWM8VYhzf5@_gBWyieOpjAnjnN(PO%qNOLC~v#eAu+rG4p3n+^e2MKN& z@zV?BpKQ1Vq>_nFJ)Isf1gBk1t5wT?Jnhc>P?)@_GI!=u6HQe_b#Fg(XTK~=-csEw zQ>y#PNAA@}rBxR|mKJ9In@hhx_^~iKLvsItS?X8{I4EsYf4z&A~s1mA$QV z2u-7k-EVD~!`e?#`vB`h>KwM-`|H={P}3Zu(`alBwGnf=$b8Xb{!BJ@Hk0HHS}AHjc7!ezPUSS&+VaG2R7j_RP<30XRsCT5$7an zM2kQ%gi~}Q$ao8H(=L>6!}L}`7Kd<}-h8A7@=}FAu-cE>(8l$6hbT1_qyiEKsl7X& zgY%@|BU<q3 zF2R)Gd|;cFVmd*=`n;493 C2;bNM delta 769 zcmZvaPfQb05XQgP-FDk`TV*ZOHb_df2yLZ^l?oM5t0+DiIZ+4%#w_Ki2zc;r4 zjAB8C1%d=offY7BBnDRJzeo>CIzxMkKW2ORBr7_V`uivKYNcLV*yE zd+o#a^R*vOU;1|*`$zmT4&aD_K^$VRE)^FGx{Mf(Nf=TP$8m-LUljvA49a3*siY_G zYT5f*kzu$ubuaTM6D{eB`Di+uDHOC~g3ky+StZyJ1qqzsgF=$ei3_V^UEK_hqL$N^ zXG?jFL2V}IGlg6-@E~ldCqj>#~elq$ON2 z+g;@`+edbt_e(+XCPR?lu?1;b^Smq_F2`te<|BZv2^+1W6h+B0vewW$us7sbFh;9+ zOq&>|RcZMraf%{`ITKQu$t&j9Alnl%AQ^B@M+~Uzu(E0-Y@p)>Ts8Pqzk$H3Kjm+c zDoKS#c^@?}OWCmtZE(U17rL<<2jOnC^f$}mG?JvF1~`MWgkeV)Cdjkk9PP@a`h`6b zTq@2}?66P*NNSdz#Dx}Rr9oK+`oe0jfzUeIOsswb1EI(Uj#eoOZ(rdp7FNHrj-Q3JOLN#pjIba6NZl7d7{L;=&}S#S}T$lB?4 SGxT1=97QsDH*gEL;r$DHsEs|Gt($kB6Ck4c>o)x*1=JxWMQ^{`3PBXP#(=WPO2YdZ(;9f`|XzIys<%? z{e`pb{o`HI(s|pN-tVf3m FvOARJ9(Vu% delta 340 zcmYk0y-EX76okLKxp8%~5se@STPQaE2L%63H2%j87AbrK8yg{LE%*vsq_)x4ji5o$ z2e9w~e3qcj-ZXOI%sF#s=A4J%t`L0wynO%_8fnn>Mgmq@^H~qsVAHUae0x(->+0tE zqE&7>Fy!5Auru}9^XGeS-rQ~}qKwgl{M;)hRpYU(I^alO8zAfpsIsGJh*3&nGIQj9 zz;^JTG@F0kqLjPTl$R;LggIfeOR>>mtTgdL65Gl+HjTQhJpR7xH|PAzgh|^jUdBwj z{gZtsd+bYNIiuiis_Bvg4wZZ)KE&%0`YiOQ8ji)}jVxK{iK<7PQ=!$7gT(3r*9|Ky F_ydeFElvOc diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class index bd694bea58321e652658eaacd95072c9403f1a62..7697d074a20898add257f8a1d596c7b5b6e3d060 100644 GIT binary patch literal 1711 zcmbtUOK%%h6#lN`#E(pD*GXwg5;{#wv7ORs+EO4+(k3n~2B(eUU^WP8Jia8;jAyKw zaUiUC1cYc8T~G;C0(k+lsJduM5-39a0Dek6`~idz=Z@VFN)#3>?maW-^_}Pa_0OMv z0WgL62mW-sZrc%)z&8l$SRn%Hdv8}qxZDm1_+_Gw# z+$eH;Ro6H}OnZWHv9PZ{r){W|RY%v9S#kfc*Z9%<^4_C|H@!Pw zT!`W@o(^G1!Z1b{`uA|k5b~R2n1q^Y!?pu*33(}-E`@P~;rO^bA^-OIL&B21jrG?0 ztyc5q4&GMl#%HY?--L0LG|!Oc;~0HS@2mAEHN}t|lW-i*G6WorLTe+}UENTMniv9` zTJ;=KA*3Z_Fvf7ekAAlX#cuNV+`LH@qq^sX!SfPML173BNkKPhhz3&Wf9EB7G%n$c z=ut0Kx6+vt!9OSA1;LLA{)}Pl61^zlCBLl|Zt$J9M=^nH2$K>m0NL$o>$UQAu2FbB zle($9(+t5>K3yV`qXl4yiwLjQt7UF4s%3*X$%3V+MoG1G@!w$vtK6(Jusj*M%euob zwf`RMzgJm?h`)8Yg*PtIh!$N{TbWa99kj$8cbBcoylSge%F!mcQfhy^|K7Vj`YY-% zv`{x)y~^|Es_y8N@r-F&uIkb=L9oe!VO7i4igJb1K+qahDD-I2s@odBtc!9D?(uA# z5`)5UxZ}FChvQ7avX|P=($YI3&37$(MWGF}x#h0axRSG~HOu6to5fL@)d_mr0!WG{ zjlPm%aD5IV&NN9b0BnG07jZuwx=T0kF&#!HNaqNhG@Y|_)-s!5+XyxBcKfTZiNyy< zB%j*GprFrms7#bJMz?Wds!dP6IUH=DuWfd^iIL&%hOa~Z&NdNi3(hwY+}I$bE?lI0 z774ohA>$D3#~>}!Fvc;0bClU6MsW$pP{0W+lJqT#a)mVBhk_4r8tWACC$tPRSuUaIXP>0Ty@8t^fc4 delta 925 zcmZ`&%Tg0T6g@pNWb)`l48-s<0U^mG1QG#J;R2C`AHc>xu*x3+Z%2HTRZP{rx9_9xJ$<_8qxTyRo}Qh21u%^jHx#HkG>#TH zghvgvt44gy4JTYW+#DWohN=C{NaAIwY^4@S&25;rZIxH8>Q1R(F?iOkTF&0CnYQ#Y zMqK<*qsArWlWzEMMMo>gRrndw`(1sZC3DBjRx0IE!K{_GYzBS1AZJt=0@N<61ZJIR z=Lo>T;4M@wv-TT>L>lDiXlCk_;@^x5UFg=)!*LxUF~&w&uh?K|-wpKZ7~qH?%FrfO zSey952ACnfvp7o#rxNqJk;IUWVU85i!c?NpBt|$!F(%$C(fl~aZ8^_FK#CV^NE{O! zcV*lsv%!ss_5}WE`+E@6GSoh2>P zfD89X^Irv+!#sITEMSqEWB@inR-@SNG4%W~yvto5$OCK=xnJhOBs3owB3U0iLR$lQ zGS?bd_=HY>_y~Q{#x87}?9dSgr%By>-lHABP1Uy=2==rbz)$Nt4S2{*HlQ6!#404> zCHP5mn&~5qtuW9|ml&V}c4Bmop29dn#6g(A_hK3SSj7NdAc`Vls8DH*5WYnk?=aFl zc7j^1($l$*2TkU7k)xG7RGlbTq60ed1`m-Z0FNj>4E+p-PEj36hvS^uX^dQwqye1M XpVahaS`thkh;~L@C0UP2D|qq~$VaCN diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class index 06385b090dda6d149c945ad4078510eb67640b87..e11fbf1e909166d2328f67cbb1812ef6c81711a9 100644 GIT binary patch literal 3117 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 F@ed?P%(egk diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RoutePrintText.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RoutePrintText.class index 7b9f5b7ca457a177740d56392b6365070c6ccbfd..c106eed96eef7c00549e6a00b0938a0460d1a28a 100644 GIT binary patch delta 389 zcmW-dJ5K^Z6ot2)d?b*wIoUAEk-2^qUnn4 zKY^wp z4o(iDIJ)VdaBvjAW;xHx;em(uJ@=cn-~OJSfm!6OUDb-&xiFNmjJ#Gokd4rf`wZ4? zHtB*%K8vLom&Pr1UKj{;8y7EL88ZL!$$Q?V!Lnr@4Q!1FB*l2<*i zwFIT)ODh>Bk-$->lgt=3VcbchDe4v$HYa2_rH3)(ckEbPCe)bfZ$yU8m+rS6@=(T2;C^ z>8@F(6zHpU{!M3h^+Z)=rRR;RW$Lr)?r@flpcml~A{zRj38eprFM){ZN~0C5KvyEU zqP!1i7*wt!wMwBa3}X*sA?(#Kgkgc`4P(vFONL$4bL&-4mTAnS1%|V}#B%gSRi~Us z_vLgio)Q>q)^9c+Y{Z)%+-u(brupS(@n-$b_V*jxU;i9`^xb>S`j5>o?mc>VyLtEX zixKR{fe=PCjN+ic-W{9@g#1>NY@#Mwu&sbRA{W!im0lbYI6e`djQ{rOLt_1dyxq9{ z7;2Ds!+pEz7QwXa0u*g z`(4?=Ybxuw#n$svd`l(xw&Skq+&x!1-g-sqb56P9*wXgWIL!H+oWM<-!be<;8G4A*-!kR1m}92Q zla?=&s;|rB30&d#07CI__z#>DzhfW_yh2{Lpn@vKG%|F;Vqv~rtijX|cri7$36UD# z#1R#Bz>m7euU+IZGWd%AjW_7`K~Q(l??k{y2?xlIk`cwL6e$O<`R=m*J&%Pp_bTug DV5i7M literal 1588 zcmbVMU2_vv7=BK>?WXBcO4`bYl?Fvf`n3fWp(%w@sHCQ)5~<#9H^;KL*~Hxq(mTiT z!VxaK&>4pdCl@#w9WLa+Ho#XJ43zf&S~JGErM# zQ&#_SEd+MtL(Ben!78`v>RpiGGbLt?d*KQdNsi%$0+cGk9o9IyNX?6Am@TX6;l^Dw_)iox{j-e diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class index 0152807eeb07f0d052742d3994f641a854526dd0..1931e91038994531cbdfa2a7291f95d3d989aa95 100644 GIT binary patch literal 3914 zcmbVPTXYm>9shlsC9_$EWLZivTtk60yM-*2OOXH;QYgWMB7tDR+hj9MhV0I)GqWkw zOR)`F3o0ULO4F3Kv|BKGiZ*F%&+)}`e9#vkee@h(JnZtOFCI1izL|;aCLtP=Gx;w6 z`|bPx^Sgh2{A&Pv@Ut3(P^BQOVgafJn$uP`<>YL`bW>TwaSY2$^%zdt>d_51rR8!d z+seDTojT?%0wE_Yu%!KrHlU^Qu8~P~rZv;l?UpDas8JAAu@I`j;u#nM5mP_wwi~7{ z@K962=aJFO-c+Yc1$xP%7Ig|@Di%u?F^@$VfZo)itOkiQJ?n*AEmepnG9#^py+o-VN9LVO}b97Hr;#34X816l@{6w%* zVCClKhI>~Bi*F6z{b-^%@_s|zTNyF{q&T%!J|LyZ&lhh{ zmBHcSuLeu6-i%e%vcyT?V;u##JtF^q_*QwhBMw*d*V(!Q?BoZ$rX;S;{ z6Ee`p(5c|KiW4$U+vg1QgSZGR$XLCGDVd#A@p(KeP|X{!5@=6X1gB|%OvEU@h%YJl zvWl(qO) zy!@W>*si%fHeGfZEuCiIjDmg@85yCS^D?505rZgw(&?)d0qa>w_sO?2BbCpo_$v5v zE%B6Z^#K90z@GW(UrA0AT;vrDsCZtQ&@wL*DtQUi21@_O5Z1Yp)g4Fc)uka{Q}K0t zW6F>YAMpPgQb|rjUc`9?-%|0?{0*t(MMDCm1Kpw+#03T4R`DH~(q+x(neH=snrT?Q z+b|86Pfoa%?NOjkwlcqQ9M`%tyotA4X)V*G*@ip^mx6$`WzWv6t)_)s-9Ce_*5>(z z+9u^9zWC|>4lNf*T;S!9_Yk+sQWX%VcyjXH9lDw4sg2UIaw`)5rAth&j7lfA%um;{ zYM3WwWfHdd-mDlu=GMe{(33bfnWwPqrY(ssrbLJC_E|kgHJc5OGZBNe;#l5vjVvdP z0mCsE^L?gik$}Skq4D;NmF>3rQ%~!hkjSQo!HRZTc{{BiG-Sdo^v9}Z+4u$O18!Zj z@JhB@cCSCF^*$#Rc;2%6Q=CF<-Ez<6^i->r%~_^yx|9*yZ&|M6+FH(6*{Q3>jVRv2 z+X~*1ee$O)wyarqQ- z7nhC6TlvO&D~E4yWq0>hPH$YRNXgy?fme9S@)Y7)pZpMF9LhKrO&~tn{tGORH;m(v z&?pgsMI608MbhtbA4iyfALh+6)bVy1mg80LCd6|D7jem>smJ&5ecu0oUp2%Lg}4Hj z@vJX8)Ih=HB*Im@DZFVM8^^I_uN1tUg5~;zzpi=>k@%+zs0+|OMhg(2d?r};1#4@t zN*2CJ2lfP}om_bxO4S6~R^FyYzFyKcY0VmbJNcd9XH#A+X*$O7xswIx{lW!9ww}3#W?y3*c;DI18ySFBG4&dZT##sV2r>Q2>fON;X8#%sfX{~ zD_GC{YWn68dVL+1^1KQgkl^^fo$F3KiYL*;045mLBxj?IoP0K+4=LoZh5p@&tJsD& zu>MAi5S_x05zkC8A&k{H1;qQ!_1!w|tz@M~PdxX!;JypG}E_6@Eh W{3677li#~2@D%0lecZ+<>i-SCYj^Vi literal 1814 zcmb7ET~8cU7=F&OFw5*vwhKjIVGFfV7A%9+R&?>BVyRnq0lO5xt+T@kOuIX~nVD_s z4=^!lVvJW_n5GvRlBO5d3*2bp5Adf*ue>(ub7r=b1`@None*|U_q@;Zew{!5`So`I zuff(4LzjlQfo}8&q;6QZEVF94TjpxzhO`5Lo<+xXg4YGQrgIxQ66n>S8%V+sn78XS z({Ff=8<;i6_no?HZaThQ-;_>ZT8)Nzh4wBs8db-(0-g$JzHPa#^aM^!=ZYa*GjOVA zITGh}97Df`l!4<&3miYBA&_w8?V#wmQeg10jgWFVAd@Yc7{mz;Lk6BvCJy)%DG0== zSkp0rQ4JXbV;Fyo6xu1cf!tCQ6AjDrCAW%gMD`$1uAt$hz{w{;TWQuR(p#>3H7mGu z+m;RGbT1}xO2e}TPUE?!`F!CAvc}NXn+hUAaO&ooiYUoStCmmTjKKJ#yWj2I|84J^ z?Cp1hJg>$RAmZ|bcLxkF|XkT z1LyFfz})|))+1@@nODO}pgY_%w$p{&Mgr%#YWmXC@iG=Pykg*0#qB~zX2UqFGur~a zA$_%0L>CPfFKg0p+(t84+LrcBl`n-|(D5cNYIw`Ql5%9BBgAW@T$bJ~$7XdUl>_Zv z0+$#=ds`K6RmWw#qoH8nih{^@1hEv^*he|mHo6Z~Bv4KIzO^NFtYB5cnt}H^2P#E2 zo&dFt?hE2eY*c}M)k{(3u3MEVCFx?_wyGPJ=cs*K7!S4`pFLmf$XhQjAZT*(K>Hlo zCDcoXB@~_VRzV=<+pOm!o(X}za$wmvOID*zFIAGkc71cr@~oO&~{DtAtG3p>>0OQ?QbU@fDE<5liV&VqCI%r6iRxrm|6Q5^#s);SuH z08V{zkG3!ud%*i~_39x@ZDoCw z_JLkXlav}rp%25<7~@JIPEapJ`TO`FB%Q^F_=xg2Z+?tVXzx?*QV{?0dQ51%${~x- zDD4(hR>s-oZJK{^R=(R^i=+2BD>dbwqCUcJp5Nv4OD$X=-~3`Gb`SA~nHJvI!MXI? zhs4V}$fVyrBrfgnmWp8H;|d129whJ({TgNhMlgj8U$AikW=U=m3pmASo@O6UvEk0J z*=DecS;pWj{WVE+9u_q#I3LDkC~^bW!)U~K_BmHkH2RSE8)KrsNBtuo8H(%VAgHJE GTKNyHUBVau diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class index ccb49b443c54d4c59705a081ede2194639373198..859b9d46861818f2587f7acbfb633e770cd450b6 100644 GIT binary patch literal 2966 zcmb7GYfltc7=F%jSr|ve6}*7rs)(>&#(P!77NN*mP%9T(ZBvKc0Y>IRXJ)b3_ERx2 zY0~sVo0zmF{oGGAQA$kHAJD(T{)VQ{nVDr5*oa-ioH_5l=Xsy^diI}x-~0`r58oSpmv~900FQt9I`0AMg1>2HPRcuF-z~K-%Fl|Gdc0F4Uv_U;E#q33n=}*scU0~Td)+Quq%lc6|LA^ zaxsLs?>a^{FOYDj1-iDd7b*8jxAv;ohcLM4S>16Ai}8v=8OE;jU1Fo)FpebAsp2TQ z1a_8_l6Cw*cbM-Q$9*i&+Fcpz_{&~Nwp&FHG6J=ZZqxD9<}4{Vfs;v`Qla6rKvQU> z5SW%WF_9f)Zam$|yLPlml?<&ZgjUX~IEV90jmi8pM>f`LTvYKME-?u?&tN6>llrcT z5L8mWqM|ocEzIXbRfT@^skkOfew%Lu6BY6gRP^JzK$7xXp^L56Dq~V&4667LL)4uq z>9&;I3416mTd6v%A}ga&N7ZazNlZGd&KdcyWQ($|E*`#h2 zj5>NCKZ1ogz~&IxF=9H#t%5yec;gXJYQ)Xy)}&5w0>{GIVAiB>CrAEAqxA|1PNe2h zBbasbcXW?s!JZ>bQ!Z-7D1V$_4S^daT|i}CD`s0)sWRR^y#(6t7TD&tk#!bK-z4*X z$8iHaU@&MgHDbB;lsl*0FdV~UHRs7r8FLF>&KNRf{M2|noRZ-s>+7x?_<^U-NA&$2 z^_W-iCA=hjSp#gG&M*^Uf=p+@oint^iKr}w^jzS2ivrIp3nEsGK!@4Umf?4fxb9qG zzISsCR7lnx9ABI_s;EDx(2p*nb>$sH4Ct0MW(EdF{(^wrSLLG=UoNdK{kZ!3)AW_J zh6_`=e0e5GO?f0-vCs_ZaU87JW+2#&G2X@LuU4mxCPrY3S5SN47A99Cx%Dauw9ygFM+LU{G2o zD3*?JB$KS9d67H8wShzqturrwvjCk)(wH=%MtZS{gdE@0kQhT;rLGcrw2Z4|Cz?WH z-3&|*-N}SVyCdy2vPw+0f}+6m8vL~wzCLq&8Sj^&BZ4OheX0Vsehs$18te?&MxIac zp!B>mvy1`$-^jc|JJ*}b7>!>)=Ia}b1AkC2frosyF>=6Jo;=6%=lQGa0`@YBM<^>t zsWT=aFbk6>Wt23Yk@o5&co|S80?csva9w=(5#{pRIj%xpYgK^GYy{f1B@nNvDnJ)D z0<~-j#5=hP(6Nm`ty==|ey##^c_Yy7Er4oZF;WTGaJV)wW-k8=c+8#b&9CqT-(cT= DYyY#T literal 2566 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 literal 3868 zcmb_fYjYFV8Geo|d1Yxa*cgZ@NezX>78n($B*97uU~n+l;NS}w(l%>pu@_5PRl9;X zZPPR*Exji#X@Qo6UNh;WGfgKLCdu?;KlC5;H{kq(PN&a%b}eLk$>c*dvp#3veJ{^@ zJ;(q0???Xt@C@EfA%-RcaT5tNE3CUDn2ip@te@wvcVwiuQ0O{(w7*p9_q-Ggm||p&!iMhQ z`)0=cs#BiH^-Q*4E!G)mGtrLq3f+0Pl=Uk7=x0lg=Q(aUTX4L*Td*BJYnOe;pU+Ns zc9p=q!g+-)fzn7=xfC{Fqk&B(9zy3bH^=5Z-!3V%2jBv#&mr~e;UIV*LWbx%CSUPXRZh1z*xM&q?_DRNNefO~t zRQyd_^IduiDJtL8dx{ww&(?6HjWsTBV@*1j#-V{emQ6mn^3!l&4LW6DjG+ ztXsBE)JoHKRX{##;(&y_rAS|b2TeRDMPqoje}cgg z+K`E3LQ9i2YI)uzw^|VTu!#|&CrLjdz=U|x#HbKkg}D*iDU2ByH!*?9v@EU4TI#Dc@Oq3<+X|fN5`Ay*hD$;`A zpl>XSN$E+?gpV4#{Jid8h3#Q;>IxQhxyI_LyT2BfOuV#YV#&#N4waWpd=uYN*i^FS z>;bo&xBSzNKg*rxTVcl%G;~EMky&V{WaQw+9`` zLyN%NEjgl3hg{e9{Hj$6ob%Q;<3Kf0w%de(x`@2ZWm+-h1!r;>}Njw_BG#y?*uH->-an z?QTH$-p$3!AJjizxwd%gt?*6394eRX>OhhCvpoZUP}s35l2HLN@F#^wKAV+8C5R@r zaw5f`@NKm4aOd&P=4qEBQLj9OxW?oF)GLoTz4Cz3D~}bu@)Y8_8Q;OH)b(9WdkyQj zPvA1;Unk`q#Q6q1nYja%`54Ajd&?c9Z=>}tIu2#-V)JcuWp>`i_ROx^=+11t3%=|L z*S#NTrQhe@M+p@K8t2-E4qhKNU<)?Vl}-Hi5O$*zPY}!x$dw@%P2viE$W?aYiqboA zCPvw9_z__@;m4%5h_52X5h4cy{|fdjR}o5NK1A2wxQRiKG;89++L9SCgqDI8RL`qR8wZ>0uGK(#WTC~n#lC(wK>xnmrZ}7Gtu<;b^1)cBb|x3-jnxe zXCk5Zp~_hVf37*p^HwOH5lpVNA97KR~@?uC88^5tFNNl=@th`mb@c=O|5c2^sKUj$XgCJB1P?yl;Mkaj# Dkb@NI delta 100 zcmdnVx`A~#J?I77YcK+*v$44e!MEQ}0X p4BQNi4D3L@C@TXGkm3bmJ|N}?VgaxcK?WhH5>`eAj>%n2`T#TI4#5Bb diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository$Holder.class index 726886ce7ce40af18250a4e89459d55dccdf7951..6581a9884e8ed2ac157c355aa224a399ba4495f8 100644 GIT binary patch delta 19 acmdnMx`B0r7ZaoPWN#)XMw`ifOiBPc6$M8C delta 19 acmdnMx`B0r7Zao9WN#)XMyttvOiBPb^#wx! diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class index ffacec61f7b8d0d25ee3dc976d55b91edabe8612..c9479741bd1886040b58e3a6cd42711a143da6dd 100644 GIT binary patch delta 733 zcmW+!OHY$g5IqN4@GBLt*c6byl<+JTTx}mOwH;3 zkUken7|B>X)vA_l#o2xft67uDGgf4=R(-JTI_iluGADzL7B;atlPy-Z^6d6%o{2oC zyqY60o?~Xa1txY_S;Ep>IruCc!GqdGD?Rk)%7GGI??J84N*CR^bRXfM+CN^xkjk=G zm_`Yg%C@`InEi>_fpp}nefz&)5lpZl2YD!j9UeFlfD3(s#!!rLoWul9VG?DSM>&>I zffdwZ70q~#M!Y~1HqfHV9Mf!5%JI9o2by#{&<`&LP>MnLFeL0@1SR$%B$W}-4vBUj z9tmE-DAp0){*wQbfeB>eiVVJrI$T2=u1i}4y|{_6JYo_$3`}7Lx3MTOCA>|+TTZBw$hl5L5qNA0*HTAg@UFU~b6muJuE z6a6Yt^}~&7altR%Rm#5A;!BMx@b0o)?RlMsnPu|Z(pb(4i5Va(0r~`+KrFCIkPl{_ tmYX^@Ae{lW@%$mWz)p4@qHgxE|By4lA?dIo4GZ!UhGF3)j_@)H{sTdwj(Y$A delta 654 zcmW+!-AmI^7=E6)wSGT`TQeQ%KE*aa=9V8*SN*1yYw4z`Ns(ny_F*3|O=d|Kttcf{ z8Xc&hx+;kXf>;m~bmf)zK@fSaTOn)j^m@`!>dOcCp*a9vkD_Q~X|OCikg;<}xPi7AAC< z*=u8vA%|>y6~)0VuHQyK0}k0x(sy`^8?ez!pM$>b%&16J&^$uyQu&>p^0|ggHhVQU zW9692SG}`Tp$ye3QvEMk3o{(BV+U$c2|wy!z>PG#IF5Qu2y+qvoJSC|2;mkQv4}Pl z(2Zrpu!1f;M~}Mhx6XzU z$zph{qTcs>s(yOsv=`F%QaoOjT%Y+8+G}Cn2(zj-e0Q{VnPG=aty4|=H$2Va-y*K9 z@F5~oXhoB(wBQV)YAUeCkZP>=Oq$s!U&X{GHcK^w$gxFG7#4;>wzCsu+)IOfCA6Oh em@J_~OmVQ(lje{poG>9Le_$9ok8qSnQS%?bsC6>{ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository$Holder.class deleted file mode 100644 index f34495c22d49d035ebf12fac44f608a2d09f22f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 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 literal 12666 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 P`6Hx@zw+PtpXB?0gdavk diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository$Holder.class deleted file mode 100644 index d8732074b5c2b9187a9a086b09e12de4490f6eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 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 literal 9520 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.class index 61c3cd76cb5a467b651d2326fee8322f0fbc2b21..5b23a8dbfde5aee7ae3aa45968862e152e473bd1 100644 GIT binary patch literal 7985 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 Invd%L07uZ0A^-pY literal 8150 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 KsHJKds{aR=zqKm> diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.class index 8261ccd77a2569671aa16fc1452f0e0419a4a0b9..94519e8b295b870b0aab94571234043e04e12a5c 100644 GIT binary patch literal 5658 zcmbtY>3?&Y3Y*EHnb&aVrpnp(!FWAf9>CrU(bCrlAf_^;Fk{`y}9%5z2~00ycxgw_Vw2R zY{!4%s6)g;)J6>T3W-zBStpru@+XrAkDqeWzC!)BY(DGnP>8g5j9QqZuug9(``KJF z?d8+uV$sd}$-e4xpHmtebP91;h%{g>Yzy;j%txcb_Ov&iEES4bDvW1KrL31vX0oNU zmvOUxvgj7PQr7p17m}yaCzAX7_KuX?;-gim!kjV%B^p;~9H_ydASIp_*k}?r4SL&< zGwwE^8H+3|wy^{)3cKHt|F(TzF5?ynqkm}lNbgYJ9)+C)@5p2-j%8SGVTFyASf#LO zR%;pGOZF9A$9IL8-M&XCzPBguXZ;HbP3;{9Cj;4%pPGwStg jd!6vT5=Vs4Qv^0yi}}j*0nuZQO_Z6=F2spShKzk&*u0 z>WMPYqhp|;*UX3GNXOTjg6m2m*1g()We1?)4SQP8qg#PVpoEePFpdz?;+UP;A zLcCnagy~i|VCsj&7$ELK(lIJd`fThL?pZ^Du7$k{3u^@Q7K_dWsgyYOAR?jk+t`l- zoC;^1T-hxtv{bUC=Ru#B%W-P3tx4-3hAbSkaR`T*)tc4XCfX_atmkosC|KUS zVTCC?5VETSnQqYRtv;iZ0_< zNZZJO-BItP({6zknKaGlW;YE~@pCMf%HwVT^rVe3WZ7&dyy6}wJ*LoVTA8lYF)B$v zZ6hc3TVHg?y|b=`e5Fcs!|gdQh?sK=oXf@$!t{|@3nbc@JkoSheZGydRNq{-<{_t4 zI_DKLad%|yzl{&b)`*kISa@3D!CA+ZalXjNG7px9 z;q1vgXHt2O#@!q$&IpRX3jJ-j;0r58=Qyla$>}^=N}py8gjq`ry8f7#ImBT!?)rSMQFz>J$Dr8sK$%`H zcPo)p)C&P}3Yvs!FS@sbv$QD)#=4bJcpotG&mT`&ex z=1CWdn8&<6^W&`C-drwF=9np!bIki}yoMHp*L72l0x1wP0mjC7#?6uFz{|pER0~CQ zS<<7}J&Oz)ssm1vm@OS5KGsKICgK!%c9^7v8CS5&ik3c=^p+WUjHSoi^l62))1orss3bz-ES%#E&pG4AGfrEL{5HN`Z8uHmcDwT? z>lkIN4148b+TEL#akY5bOZ+A&XwIr3x8x7HGTB)7iCv!Om;9nr2zsK_SdSZV{0hIe z@VbrP;HJVowNA+9&w8ib!I*oO~wdmf8k9?{v9f zzRHCp8MIANJi@j&x8M20z~$_^W^O~veNHYnob}yQ0^1v7=t$uA3OjByijDC#Q{N@< z$NzJzj*|F4%ggp(Y`lus68Nja#=CLG0_TU*Kdt>Zk#~J z1U6noEOMpuRV3t|f14-qKmd{T*PyFcMHD7RYc34=Sq^-f)}`oX+Vo&R06ky8-eHf z_X7VEzK!pM0Eeh9j+Y5QAv^$CK{|n5lGOlWkku{?Z*ibig|`fs=vGyDxTM{Dmk9`x z|1^KaP4^A#VF5leAnqoyPhk=R3fJ){@JozN;yrcfx{l+Z`~;WcJfiuTujA~-9BjrW z+-rd74nfR8JHE#>s%pvt$@eJm_W#Q_T-+ZW5>Jf_kG=mb%sg z9s(#2vC_6MVGkQn)>rvhkIOn;VO?Bi9Ch+#ANtPoSMnx)L(1u4ko6!Lw%K~)VcbDW z?qvV>P}WcL6I=*kyhtMgqqpk~ zco(r!SkQ=W!qX+7FGnw9B{!V8h-OXGO`NI7W6>*@5v}0fiXBzlK|}6iTlRB$?PqQd zkg7p8CN=7--j#e3Lq=^cH3#vF4Ol6Q?__r|lb6gEER1z65Q)`=!DvSgc z+ydhXN}lAbeX0th$$-&Zh0z?=P?*TW1`Meug_rS42;*7)O82+w1l3@aHca5`bFiY! zQsl}Ii&*MQhT~LbTuM%`TTg08owOyLE6fPNtyM^^AtaIgf(;)G!v;i__o$u+sy9y8!PJX_$U62rT+tS@u{c) literal 5296 zcmbtY`Fj)B6+KUqJy?uE7-P&DlNj(C5g;kSY{oz_*p9)*1X9`z(qIeA8bulb?vn0J z*Q9$((l*^vy3m%SiHV_2Nw**R^>6CebKi`lC+zxzFF#m%^XA=q&pY?r`}F+p|K52I zz<&HIjtHU_Vm9hfuaLOxTyc_FCpVdV=Hg{H`!?!$zr~cp}|b1Sj>32WI9t! zd1*J}Ckt-gD`tGJFq^!bx|BRIaO_OcEu5~*Dl98;qDbcoD~GBuIMFAOR@rEhFb#Uy zh%@6hpc!i{wAfgSR)r%UD1Q5KFPnA?gfTcWHr_una8%*o&ylSE>ZGO=+DtDCjRN_6)W*j|J{H9-^)5niY+Mw< z*B9Iw?}}@II}4Pf1$FeAprj5gTⅈOexv6z}PFQTuGHmHC(naEs>;_N3X`=V#Y=e z9^<$#l$S@(S|Rp4c9^q>(WW5EnHD}YRPtFbatskv!yqTWhQfu zUn;QOoirK@d-^`(QTLmrd#%y)`VRCd>@v)&-psl*7HI!s6&v7TB*#l8=Z=(SF1m$r z=VF#KO+#MF$xcw!@*Gaa{HYAdTP{5^SM;4+iYxnBLk~*Fq6Zye#8WKMa^HHuwtb%H zbNbw93U+4hRUwkU$^~*XDs(Lk(4>-meav@K)1)xmbYj@`r@Ztit9{1xc_1r1XX-u3 zl~$pNU?HXlnd#)N>IJl%L5ce_rVAxFE8_)s)F~FPdIc_I`3yUmEU|NT$}6WbsI}lQ zs5wl6@+p_PiJGZka{IH{z^e8X)crw6E0(e>2NPfTuBBEsv-z@g+Ks))+EDFgY|-Pk znuff@!g$)vG8+NR)eG_=JVr94Mp2<_4CX5>g~1v##nFOWWcmX)QK!HTZmKEl3<`FM zIT7Z^J;_Xa7|?`oHcqXH&}uL}?gcq3Tj{ewF9~f-H*8y}DK|B(uyw(%jD3_-$bGKP zIx`p3PJ1NxqJW{NB8@rOA6h+7ukwDA`Hr0{69QZl(K-n5$>((q~FTyj$KdzfxnY1OCy zm~4keL4e~8kWU@qqt2D0oj z@)NB-xDHtO8Y(MI?arNqxBxj%7yl|R`cxW;E*bSlrY zXyhz!aGd!#SDZqWBVa?)@-t4Cyp3@DNzT}T z3w#Q#d}_dp_;l!gqkaR#-oolze5W9OB)E7}_zXTvI0EE*^eWzWcXiKU-F4JOZ{EeG zbKO0+@yJNm+emcx&f(E{Y>VP7ALH`W8$8Bt(k`k!w{UCV1ujk`%~*%Wh;b*cOoFm2 z@E@XNBzz8^*GP8b3mipg(S|SLOZ4@U_Ne0cG6xM2t_0Tz{+;+ri1?bO5oi@S-Sg;) z;2t*h^sbAotDD1)sGy2yRC09&eYY@Cg5&@hpj`z?E53@aX(X-qx<(>zzrj&duX~vz z;ieU@a8##3t*N6CxEx#vyv)B>_^0qqd@BSvLURecUI1zeHOMm3Iqa5{1Q3IiY}4>s z0;>wV^&wHhMV-=ID0~~=3B$a|Zwa&GF7{A8dxs?4Ja|UTE+Y(652AXTH6!S%^|Y6j)W_Lo1BpqC%v$NZ$HO6WwG3ehK1 zHf+&XO7vZwstS%(wG56d zVDK0CWr(4i$bgw@*<7f=NMO}{FrMYiIkvX*6&OthjOGfA=1@anB6)wUBvSOG@CJSr z!gz__QvGc@K~)%;o;hS+g%x9#qBln6nyN3iMX7Oj49pw5Iu@gZRy^-=aFYsRnLu}x%3#iuyr-l zfb}39m$wc4hEEav7Qf?nj5E!U4l2d>drIMLyn{JCdY3KbFZe6p3AN3vo_kc(`}jNl HiFN-2I7BQV diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService$Holder.class deleted file mode 100644 index cb6b0faec0a97cfa888a9b70629c069e578dfa7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmbtS%}&BV5dO9WT1u54e^9)b=s`WW4m3ZiHJFq(=mWhgXdB-0jy zd2uE}clt(B7)+W)5m@H$%1I-08>jBorBq4E6tPUT6EF3Sa276Kh(R+a&6yM-v5R3|cA!;yjNS1**j#k>jF=>agO7tZfaDD)F5T(ul diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileChannelService.class deleted file mode 100644 index 17d5749ddb47b1b757b6ede2d9b35a2ee5140449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5006 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService$Holder.class deleted file mode 100644 index d906e8157a22031568089346e75b9d5569a81109..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmbtSO;5r=5PjPMEu{+L2Z$FFJ*Wrw2Z$u5!9arb03q?XlvS6M)^rR1%XlEs#2?^~ zGERZ$!6VsZX6Mc9+nqQ2_5J<{;2K8`444*jF7hZaR3>6BcqpPLem|PXAY~{tRix4u zgL!s7v|uwdgLumIOQNEbPnFgxj`&#VARbGVaxIg&3M7A2q2#w@?xfb@N%mK`0}Eym zCAb#0Tx_Gv;B7*9+KI!lOc?C0-yhugUYnuS+l29oA?Hyu4CS7Rq(7UEWHJz=kdSIG z4n#N$(rR+-?TpT63o#&yql9GBVWut9hBti%$4br=3{SxZG|O z$;1nV){@>-SgC_!Qrw`CGc+>IX=l))nG;f>h?8gJ^A`)S*JXN#Y?cOUsFHP81=z(N uMK<<-51%Zlfzk)8hXsmna54&pKZ-g`91vy@S$*j(9FljaszhI+0p|zO7N!;e diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileMessageService.class deleted file mode 100644 index 09a89affa10dd23fd76c01d35a06957333847f6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6558 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/file/FileUserService$Holder.class deleted file mode 100644 index 0e90fa32ea6964f5e47a979361957fb2aea42aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 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 DPR)q$ diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index bda46561e63e8e9904eeec443dcc53a8cb1ef529..15af448bb7faa003b20fece49232e1fcf99567f2 100644 GIT binary patch literal 28483 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 b?C;_Z+q=__p1|u}c0{2ax`UY00LK0eTFMX0 literal 27692 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 diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java b/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java index c5873660..891c15bb 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java @@ -1,19 +1,17 @@ package com.sprint.mission.discodeit; -public class UserState { - private String currentUser; +import lombok.Getter; +import org.springframework.stereotype.Component; - private UserState() {} - private static class Holder { - private static final UserState INSTANT = new UserState(); - } - public UserState getInstant() { - return Holder.INSTANT; - } +@Component +@Getter +public class UserState { + private String username = ""; - public boolean userState(boolean isLogin, String username) { - if(isLogin) currentUser = null; - currentUser = username; - return true; + public void userState(boolean isLogin, String username) { + if(isLogin) { + this.username = ""; + } + this.username = username; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java index b349a3cd..c9ef8664 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java @@ -1,11 +1,8 @@ package com.sprint.mission.discodeit.app.router; -import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.service.basic.BasicUserService; -import com.sprint.mission.discodeit.service.jcf.JCFUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -//import com.sprint.mission.discodeit.service.jfc.JCFUserService; import java.util.Scanner; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java index 53f3f59c..49b86527 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java @@ -1,7 +1,7 @@ package com.sprint.mission.discodeit.app.router; -import com.sprint.mission.discodeit.DiscodeitApplication; -import com.sprint.mission.discodeit.app.JavaApplication; +import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.service.auth.AuthService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -14,6 +14,8 @@ public class Router { private final RouteUserService routeUserService; private final RouteChannelService routeChannelService; private final Scanner sc; + private final AuthService authService; + private final UserState userState; private int inputChecker() { try{ @@ -29,11 +31,14 @@ public void route() { int menu; while(true) { + boolean isLogin = userState.getUsername().isEmpty(); System.out.println("===================="); System.out.println("0. 프로그램 종료하기"); - System.out.println("1. 사용자 관련 서비스"); - System.out.println("2. 채널 관련 서비스"); - System.out.println("3. 메시지 관련 서비스"); + System.out.println(isLogin ? "1. 로그인하기" : + "1. 로그아웃하기 (현재 사용자 : " + userState.getUsername() + ")"); + System.out.println("2. 사용자 관련 서비스"); + System.out.println("3. 채널 관련 서비스"); + System.out.println("4. 메시지 관련 서비스"); System.out.println("===================="); menu = sc.nextInt(); @@ -43,6 +48,14 @@ public void route() { switch (menu) { case 1: + if (isLogin) { + authService.login(); + } else { + authService.logout(); + } + break; + + case 2: RoutePrintText.printText("user"); subMenu = inputChecker(); @@ -51,7 +64,7 @@ public void route() { routeUserService.userService(subMenu); break; - case 2: + case 3: RoutePrintText.printText("channel"); subMenu = inputChecker(); @@ -60,7 +73,7 @@ public void route() { routeChannelService.channelService(subMenu); break; - case 3: + case 4: RoutePrintText.printText("message"); subMenu = inputChecker(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java index e419ef81..7fe8d212 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java @@ -12,7 +12,7 @@ public record CreateUserDto( String profileImage ) { public List toEntity() { - BinaryContent binaryContent = binaryContent(); + BinaryContent binaryContent = binaryContent(profileImage); if(binaryContent == null) { User user = new User(username, password); return List.of(user, new UserStatus(user.getId())); @@ -22,8 +22,8 @@ public List toEntity() { return List.of(user,new UserStatus(user.getId())); } - private BinaryContent binaryContent() { - if(profileImage == null) return null; + private BinaryContent binaryContent(String profileImage) { + if(profileImage.trim().isEmpty()) return null; return new BinaryContent(profileImage); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java index eb3fe251..7c2fc042 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java @@ -5,6 +5,9 @@ public record UserFinder() { public static String from(User user, UserStatus userStatus) { - return user.toString() + userStatus.toString() + "\n===================="; + if(userStatus == null ) { + return user.toString() + "\n오프라인\n===================="; + } + return user.toString() + "\n" + userStatus.toString() + "\n===================="; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index 6ff2b297..8902cbf8 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -28,6 +28,14 @@ public Message(UUID channelId, UUID userId, String content) { this.updateAt = n; } + public UUID getSenderUserId() { + return userId; + } + + public UUID getSendChannelId() { + return channelId; + } + public void updateMessage(String content) { setContent(content); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index f34d6bdd..70e92db4 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -11,9 +11,7 @@ @Getter public class User implements Serializable { - @Serial - private static final long serialVersionUID = 1L; - private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") .withZone(ZoneId.of("Asia/Seoul")); private final UUID id; private UUID profileId; @@ -23,6 +21,8 @@ public class User implements Serializable { private String password; private String email; private String phoneNumber; + @Serial + private static final long serialVersionUID = 1L; public User(String name, String password) { Instant now = Instant.now(); @@ -87,7 +87,7 @@ public String toString() { + "\n사용자명 : " + this.getName() + "\n이메일 : " + this.getEmail() + "\n전화번호 : " + this.getPhoneNumber() - + "\n생성일 : " + formatter.format(this.getCreateAt()) - + "\n수정일 : " + formatter.format(this.getUpdateAt()); + + "\n생성일 : " + FORMATTER.format(this.getCreateAt()) + + "\n수정일 : " + FORMATTER.format(this.getUpdateAt()); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java index 00965bce..44036d9d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java @@ -2,12 +2,13 @@ import lombok.Getter; +import java.io.Serializable; import java.time.Duration; import java.time.Instant; import java.util.UUID; @Getter -public class UserStatus { +public class UserStatus implements Serializable { private final UUID id = UUID.randomUUID(); private final UUID userId; private Instant lastAccessTime; @@ -23,8 +24,12 @@ public void lastAccessTimeUpdater() { @Override public String toString() { - Duration duration = Duration.between(this.getLastAccessTime(), Instant.now()); - if(duration.toMinutes() < 5) return "오프라인"; - return "온라인"; + try { + Duration duration = Duration.between(this.getLastAccessTime(), Instant.now()); + if(duration.toMinutes() > 5) return "오프라인"; + return "온라인"; + } catch (Exception ignore) { + return "오프라인"; + } } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 7d0bcc5c..094bac1d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -3,6 +3,9 @@ import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.repository.MessageRepository; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.io.*; @@ -14,15 +17,16 @@ import java.util.concurrent.ConcurrentHashMap; @Repository +@RequiredArgsConstructor public class FileMessageRepository implements MessageRepository { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); private final Map messageIdMap = new ConcurrentHashMap<>(128); private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - FileChannelRepository channelRepository = FileChannelRepository.getInstance(); - FileUserRepository userRepository = FileUserRepository.getInstance(); + private final FileChannelRepository channelRepository; + private final FileUserRepository userRepository; - private final Path DIRECTORY; + private Path DIRECTORY; private final String EXTENSION = ".ser"; private Path resolvePath(UUID id) { @@ -30,7 +34,8 @@ private Path resolvePath(UUID id) { return DIRECTORY.resolve(id + EXTENSION); } - private FileMessageRepository() { + @PostConstruct + public void init() { this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Message.class.getSimpleName()); if (Files.notExists(DIRECTORY)) { try { @@ -67,14 +72,6 @@ private FileMessageRepository() { } } - private static class Holder { - private static final FileMessageRepository INSTANCE = new FileMessageRepository(); - } - - public static FileMessageRepository getInstance() { - return Holder.INSTANCE; - } - @Override public boolean createMessage(String content, String sendeeChannelName, String senderUser) { UUID channelId = channelRepository.readChannelId(sendeeChannelName); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index 8820eea9..6fcb1b17 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -22,7 +22,7 @@ public class FileUserRepository implements UserRepository { private final Path DIRECTORY; private final String EXTENSION = ".ser"; - private FileUserRepository() { + public FileUserRepository() { this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); if (Files.notExists(DIRECTORY)) { try { @@ -54,14 +54,6 @@ private FileUserRepository() { } } - private static class Holder { - private static final FileUserRepository INSTANCE = new FileUserRepository(); - } - - public static FileUserRepository getInstance() { - return Holder.INSTANCE; - } - private Path resolvePath(UUID id) { String EXTENSION = ".ser"; return DIRECTORY.resolve(id + EXTENSION); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java index c92b9c1b..dd4a1a04 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -4,6 +4,8 @@ import com.sprint.mission.discodeit.repository.MessageRepository; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import java.io.IOException; import java.nio.file.Files; @@ -11,22 +13,15 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; +@Repository +@RequiredArgsConstructor public class JCFMessageRepository implements MessageRepository { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); private final Map messageIdMap = new ConcurrentHashMap<>(128); private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - FileChannelRepository channelRepository = FileChannelRepository.getInstance(); - FileUserRepository userRepository = FileUserRepository.getInstance(); - - private JCFMessageRepository(){} - - private static class Holder{ - private static final JCFMessageRepository INSTANCE = new JCFMessageRepository(); - } - public static JCFMessageRepository getInstance() { - return Holder.INSTANCE; - } + private final FileChannelRepository channelRepository; + private final FileUserRepository userRepository; @Override public boolean createMessage(String content, String sendeeChannelName, String senderUser) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java index e5f31d23..f66bf77b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.service.auth; +import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -12,8 +13,9 @@ public class AuthService { private final FileUserRepository userRepository; private final Scanner scanner; + private final UserState userState; - public void login() { + public boolean login() { System.out.println("로그인 서비스입니다."); System.out.println("로그인할 사용자명을 입력해주세요"); String name = scanner.nextLine().trim(); @@ -23,14 +25,17 @@ public void login() { /// 검증로직 UUID id = userRepository.userNameToId(name); - if(userRepository.check(id, password)) { + if(!userRepository.check(id, password)) { + userState.userState(false, name); System.out.println("성공!"); + return true; } else { System.err.println("실패, 다시 확인해주시기 바랍니다."); + return false; } } public void logout() { - return; + userState.userState(true, ""); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java index 67fabaf4..bb0b8994 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java @@ -1,13 +1,14 @@ package com.sprint.mission.discodeit.service.basic; import com.sprint.mission.discodeit.entity.BinaryContent; -import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.AttechmentRepository; +import org.springframework.stereotype.Repository; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +@Repository public class AttachmentRepository implements AttechmentRepository { private final Map fileIdMap = new ConcurrentHashMap<>();private final Map relationIdMap = new ConcurrentHashMap<>(); public boolean create(UUID id, String file) { diff --git a/file-data-map/Channel/f0096dba-1ec3-4d64-83cb-bd4fe94476e6.ser b/file-data-map/Channel/f0096dba-1ec3-4d64-83cb-bd4fe94476e6.ser deleted file mode 100644 index ca5a42ecdc7e6c84cc0028c0e977389dc45bd28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50820 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 B7eN33 diff --git a/file-data-map/Message/2574dc07-95dd-4339-b0f9-5dbd84903995.ser b/file-data-map/Message/2574dc07-95dd-4339-b0f9-5dbd84903995.ser deleted file mode 100644 index c495462e8578d8986e8187d7df72222d0b35af98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ(U3h7?~K@d>A;BGZORiQgb|0N*DxuvJ%S@^-D`KbM!+)JzcDQ7}%5Z^Gbl)OBjS8 zk~xWa>H5JXK#S6W(j3V}sfi`2jzD>+X0W_ZK3JA1Go_HBj)4)VuCyQptPaFy_F-Tv zElw@+gveGD0Nu|AvRMygvmVIiJu{iV&&X}nXJTOTV&KV1O)M@6&P;d8EGhP4;Lgp5 z^C}9OPw(}A=~DLW1843oxx>CdUqrv@TJm;E%j;zu-nMK|cr$&?>-lS5Z)?#}c-=b% z$lda$d(GQ<9SX0z*Sub~Md3}y423uII$rm;yk0n0;mv|MuQoI&yxG|DW<&3r>ux|JnySHV6b0su&y$_4-c diff --git a/file-data-map/Message/3a11c6bd-1032-459f-9d50-8e2ebb27ea3e.ser b/file-data-map/Message/3a11c6bd-1032-459f-9d50-8e2ebb27ea3e.ser deleted file mode 100644 index d8d2b1e5954e3e91799f4bbc5819b14c9b29890f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ(U3h7?~K@d>A;BGZORiQgb|0N*DxuvJ%S@^-D`KbM!+)JzcDQ7}%5Z^Gbl)OBjS8 zk~xWa>H5JXK#S6W(j3V}sfi`2jzD>+X0W_ZK3JA1Go_HBj)4)VuCyQptPaFy_F-Tv zElw@+gveGD0Nu|AvRMygvmVIiJu{iV&&X}nXJTOTV&KV1O)M@6&P;d8EGhP4;Lgp5 z^C}9OPw(}A=~DLW1843oxx>CdU+|=q<`yXALi`Fh8ssiLu)DgSOgPi8e4mMd(Tjn# zEHS4vwW5eY0Bk>4kzZ+UQfg7#nyIqfQyz3PF)&mVFfcIA{#tYTa52dFtaAhU^mePi jva=FAwpYN&bv{^>1656T+1nD4oB}52Eo)6mdOafmjPa2} diff --git a/file-data-map/Message/a93c6486-cfcc-43ea-a551-3023fe9e9e07.ser b/file-data-map/Message/a93c6486-cfcc-43ea-a551-3023fe9e9e07.ser deleted file mode 100644 index 6a8d8beb65bb668e78f39f0b21d31d1a8673b2e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ(U3h7?~K@d>A;BGZORiQgb|0N*DxuvJ%S@^-D`KbM!+)JzcDQ7}%5Z^Gbl)OBjS8 zk~xWa>H5JXK#S6W(j3V}sfi`2jzD>+X0W_ZK3JA1Go_HBj)4)VuCyQptPaFy_F-Tv zElw@+gveGD0Nu|AvRMygvmVIiJu{iV&&X}nXJTOTV&KV1O)M@6&P;d8EGhP4;Lgp5 z^C}9OPw(}A=~DLW1843oxx>CdUkJYLo$`A94u#jf8{W*_^0sAzA>4eBwYrf zOuzDdCI&_?2G+8~oYK^aA_f7lBfyIMN^_G^i`v#qmF1rDpqq(-p`w6+fpPX%PqDSd uAV07!4Kz^xH*X&MN}H6n^Jko2fkin`)wC~G+IRHCo=mf*GuCCo{?`El&X}A4 diff --git a/file-data-map/Message/db945a4f-5473-4551-b4fb-3b7725dad6d7.ser b/file-data-map/Message/db945a4f-5473-4551-b4fb-3b7725dad6d7.ser deleted file mode 100644 index d8546ddc111775f99c6707b216969d10a9248fcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ(U3h7?~K@d>A;BGZORiQgb|0N*DxuvJ%S@^-D`KbM!+)JzcDQ7}%5Z^Gbl)OBjS8 zk~xWa>H5JXK#S6W(j3V}sfi`2jzD>+X0W_ZK3JA1Go_HBj)4)VuCyQptPaFy_F-Tv zElw@+gveGD0Nu|AvRMygvmVIiJu{iV&&X}nXJTOTV&KV1O)M@6&P;d8EGhP4;Lgp5 z^C}9OPw(}A=~DLW1843oxx>CdUvR!{?RnF+46>9{ba(Ke&zd242)h3 ztYwKgrKuG~3<6-w!HWD!bCXhw+SW{!<(~4On~8y;qJV*carV7q+xv<^ZfD){+qzu! l*0t-mr$qUO6uSn3MLAH_v@cfLcl5-bOtYpl)@8!}*8!|;mDd0O diff --git a/file-data-map/User/1e0d54e4-d371-4ac2-b912-b3514b0ffccc.ser b/file-data-map/User/1e0d54e4-d371-4ac2-b912-b3514b0ffccc.ser new file mode 100644 index 0000000000000000000000000000000000000000..a631c6d8cae6cf2bc69bde58066943ef72a83ded GIT binary patch literal 381 zcmYk1zfJ-{5XOf?3j-+r5Q}}-7R|VCA|3DDzD$JCic0+?wFWkdbv-3-^m-_ z1Fs5&P;g6iY;7XhD&%GKH}&+e^t8V_|MOlh9(;YYt8WCk(eP?Ccpdj2{`Xotw%K0~ Cv4Hge literal 0 HcmV?d00001 diff --git a/file-data-map/User/884600ad-9f6b-4962-8a8a-562a416a0908.ser b/file-data-map/User/884600ad-9f6b-4962-8a8a-562a416a0908.ser deleted file mode 100644 index 118d147750f8b4ed01dc84cc3b50491caa663ccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50870 zcmbt-3wT^tb?%vm{D@z&j-~ZqH zoPExobL5=yHDv3|*=z5;_G|66)?RC!(=$dxsc5`uq%g6eG+E5%%Nr)LrBb$#-!Pgj zjTA<$Y6y4;j%OW5Hymkhgj(6T?=~ zeifbEV?V`8qdUvST3L75+FNc(XD23eRvQr7R47iEWz;sWGC3*`WTD93N%V9v@!UW> zHwZir|Kz^EJ#y_2qDEx1(XiXhRjj>5qtOMD&41+dv2_cM{_t?rF!oLwM&#k|fA!JJ z-0Ika4eY_W2V<`upSZInYD7013v-rPDyOq!t=V#Ev$0^JpnmP0y!-BLZ%*u*Kkv{c z`?n8-?TDqS{JjgdJ9pA7m#t!6Oc#c9x!VV~veCCb_LHw%zv8zTF0Llj zmLCOf#&X%Ts4;23MV$-tVlBw&EgP465R}toPrRBzF=X=PZ(csP?B`1^Pl_4Dm|h|9 z5fj%@w8jb;xV+QUkw5s(w|{!(8-FeqMdO&tu9OSAts-h)<`#C!{Oo+{%CG*ztsjjU z3w9U_&7!p_Yvo2uX{+32EZ&(dmdb7B)RvutmNmY^n4c{TWG5_S?l9(}(^*VRm$7mp zo6k;|IRKWr@|#$O;9bW2JfLnY9ONj z!-QS#j=9_f4)VVqd;bT%`A5HeB4#Y>GADnw!}o>i@TN!&`6{06ZPo&CRo9q7vMEL``^zyG?i z?zV?<*kFuDGS-{q~@wEyL0CbqiIhzm+MFk$oWfVK=rXl<`%?smWa;f zw;Ib!;^1&buFou*6HeZOa?#9}vSpCd5=VRUUKYBB$#oB1dDG+Un6s7*)xSA>75T=i z?~QzG`n}ON++uK~qw~M}(xe!%&3l{UpI`Rb%Ez1$yYj*hzW2j*FJZ_1)2VmfjQP6o z)Azsi;d>0@!YeDg558<9FTC=OKOg@${@(kw>)yxTryqC@8|lI;GoKhgj^D3d{n7{c z`_=p(jfvkM|M?>R{?$wA7cWPBueJ5;T4=Oicx~c_$|!&T+04s-%ilkLVbdx6{&maI zU-sblumA9|w=n=zKR%>>wP2xNo+1O#M#LjkF#<|^Fz_AN_dyK}s zHP%o>SZ&F}VO7P6GsPrMpJF2mKFTdG5|FX6_Q!ioe!u-dC$!CORlrV8HU(VKj;rW7n}I zpTmh2e9{Q&gG2Pg*h=^pxmld7;!&L3d&P-sd>ALU03eM0AI@hGus5zR8~7Vp&&BYz zpyWf&Xmi#!cxTP2aT)fn#z(hTE_(Sqj%P4Bac1wlP}j99PP>ukZ1O0j6=N2cUr zw%;!I^hC91=grIJcVdy0r|jR$viWi@8B~kSe-o~;$5^ELJ^*IXF1*0*LCq_6MZJPN zv%$F5XgA(!tjB*FjQ2EeG~R&uY%n&KMPD$Vk#;=(_|T&id8BY8PHf5Tf9O|BKX78> zYt@)B2gh{AEM+J+Vvmnt&zFl%Pc8#q77kM!rA}WdhE>clN8p=N8YyNc9pvZkHp!IB zpL-{#DeDPLDRX3Y9f)*qFRuo3yLWQW zJk%%HTQVV18Yol3a-|cS0G}BJqlXz$i{U_7;r&ygmBw z1?24|8bEIOtpV8WCG%mUE#+Su?PtHW?Vo?X?t>i;HxexybE?NrRZkw24>J!R6r4>D zMiqI{)+CZd8^)kxDm6OZIZ;Ztw{6-pXlAdRp5)tM*PO=!$(90;YL;@=G<+CKesa3#$=Gm`mn1Cu^ z#Dp%UG?W0>o3pSkR!#ru+2)x$PRty+tNQW#n`iDn0ewUD@Co##FFjB;uB^#FcKrNv z2X(MEfGyX-P{H{#SS!)K0WS)R9TeKEJfvp3SoQWZ)nj*Rb*9+#6|9q)PwsD?@wb~| zyGuPVs?n6z=n|*VzDxmPwKy+7#5w&ill@E%Fu9${9bR-*$z%rOHdb)(J$3)|7l4vy zsFE(ecBUWSq>HbFQTQe`d>b8nd#yb~+Y7~UyV>a@57su@u9|f+{mr(kW^EYNY`fO% za;MoYaBF7XoGj$Bg0$Snak-z#pD_6t6S3QldB>`;&m76_%#O5l7V?E$C0Bv62$NQQ za6eR7&DCS~Oh10SddE}RsC5$k>jI(t{pe&r)&v2o4s~iBTIzHtkskpC#gS4rRuYj% zk5}(LRej-kFD~&!H<4MV=lie#7}03bz?}ADiEa%6wR}3wTz034^QdY1p8eH>Cu%oZ zf=#dS5rZ8j#jLf7&rSM{CM{g@0GQH3j1CS`-Sb5Vqwy1fw-Lo z1}m##pHxqroc_d%TJyh zzHr=akkDUY@)tEv-WnDQ9m-~_SSdj{IYI29y1o0`s_X2hff}|C&ts?SZhBZntc%d9=7?CH`bUXE`izaq?E1_3UpLzQH+5KpI z`rb2u^sa?iE9bP?2NBS6n{2tJF1O|1X)PxcY#EEMdh9_g!pb1=~(oNNqwG^^?4>=VDd#KXPLa< zLi6WcOb)51yZLmO$vsT;{hAyQRsW-c{=S0#fgie^!?BXIM(e5IPyroTjInSQs0I-< z7VUB@g5b5WSnT!=YoR?U5I#rbUS#rTOuo$ICGpOM=Fh)l@^$s}4L*I7$+wvNy$g)0 zQ(fpC_z_IvIi%hN79UJ=-K_Cs`q$QAnyawUg>j}mHkj59fLO2CN&uXG{Q2ppkMfk% z+lwW5h;o7G5dKCJg1-kdrbD{x^J=$`?DFS1fp}Zn) zruy2uL+@)}4`5f$+;h*&?Sio1p$%-TubVCE+5Q&$1WVbZfw^65al43V?324CoLmy? zlLYe_j*Xy(r}^|Olg}{uQ@3vZ6!+u1)sv8bga&3G-+j;p1|nj~tg3$G==5VJrk^?8 zTs?VW`Us9PTcC@jThaAv-Td>PKO^#kHcML2z%?$gU75C1-s5e4E{?~yLr@}K;fTRp z99K8v>|u#;lFHon@<fd&2!2&l{rH>YzUZNIZm zmIyah^96I17=_}Fa?L>=GA|s|_9UDCw2*4Nxiu@5K+j4V;#Q&7sdp_whb!7_HOC>| ztwmFuP*8(2P;NY5ee|f8`ot1D#7YSOszHGKjo8Dh18P)=MAF^?mWZ@vbKnZeht3>6 zGyTj{z{Opu1Kh*ctBmzz&A_AGc~3JqH2*0#&?667Z(Z6#)s!i+{SI@V5VFE>F3#X} z7IwqTr3oe-5%)VhgCkq`&T|H978Yb>?%6+c?8Nk+ zp3`Jm9KKQqrDywAK}@QkG$?0VMRg6-g2Yat@!gCGC1Pg!!OEl=K8(pF8OyDryL5qdZkqglj%{nYV1b`Q00FHOKz&#N&m- znE<7^7gh)j3f5UcE`-0?Rx4Yqlz~$yQN3))xo9m`@~{}iF^%)?Q%_;Ig+|z6C|i5E z4)naB4c;nrjzauam1xW0D}IDK&EjxYoC@LgwnVto8ZH*nOc0+CU^qJ$c z$`f5ed4^4-*Ju~f7Q@T_ehiq|Nv=a`(X}%TT@y+~=Y7B+Q;BG2yCbYACFBSXSQ!|H zQJzL;AN9;7_=_%~KY|)o=G3$z04SkC4=Vti4H@g|*ACDHwj#DWYY90a9KYj~+EU7i zEAlX^2y9@xt^Vv-9el1TWuG4*+miQAEh#gDi<(BLVKETZJ8=W(P>M7c%vw9+F07;= zGLaT*q{%I=EsOuumW6X=wcP~&x2XDsqh!mR=HkiDt!VEG=e1}I;xJWX3a9}gLrEayZiPj`fEUZ3#b8*Bv8DK)M|5=(oKFOHgjVOe-B5D7yX$& zcnZa^XBGX64R*CsNW(s@g$Nq*L2>oTZ7p;IHAS>xf0rMtZkYLwWU?5z$Oa}YOg1vP zk;zTsT|hD1Si<}iV=(>Xed2!Z`PyEjwquB{@nr{fA+?>uxw;ls!@bpyM9Lg9N68s9 zLEI7Yu0{vqsRY;V8c(KwDgh(T8W+fdl6z1b01>DF;>%Z=TS%hm!pw?>%OR6h<@ z>5x0!DGF_CJsE*RBm}l57fKtPem|xI!_ecwpcsmc$7t=t6{gC7NOq7&uJPpg#wOk& zZU5lk3Dgt(eWJrJ#JP=OlNEW%Hyt zE1^RrQ9W=PDqU>~Qt56A^;))X7GkM1O#n40H4nOJm1F9WF6^vpiQ4#XGe;}p@*?E< zZS$7N0=5Lr1ztSL|KEMecfFA$k9n<|f3fS0q+m7IxWEC|8_~VmEIAx!Vp8-vaych* zHIp?=u3)m3$-2N|o3gto!0@V%HgO&kk4>9__bMmDH#6}~!UklK4WK3^dLXc!j*1Bj zmPQC|RH{FALJ@#?GD8xy){_&oN0J$F*JeXODepx!nbG8#h0d7tW-Da;sR?}OO!a~L zRHLz8GU97J89{CK3P!xig;H%|JfoW4Pc=DEtcb1oYYzEunEaLrb)^yNN+UW8?_fG; zjsw%C>cf<2v017IJz~S4Q01;wnE^~d*=PV12hy#>9U`AoctNS+O z8a4NRpXR&IF!^*~G2W>$x8_1k+_;O|^}7O#@nVg|YHrnpCE!tJ+#gtsH($)Hx%MLU zlO~oQ4lKs&FD~t4N2=%cS3mBEeJsW6%jlCePl1)-YKC1T(_ zPu@xvIRaVDkdC;>&LSPhI`_wq)t3>;+n&hx$7L4lsO6C;rhoVWx}Hytjo&j+n>_J zXGzqdM@kEk_!?ink7^R>zaqO+Q^cTuZ#slC#v=h?ethOq3dK=sik2p$Z6L;_k&3Wi52p&V%T-D+HXWv=IInh} z+z;(Qt(IYctkyNYY~Sv}P8<+i*XmkWHI(ekd4I1rn^PbT@M(3g(P~6xXRky41~NA| zmu}aMjJ$H z>Q@0xVJ1eWgyK08PIi)Wm;xEc5r^A9+d>>17_~Hh?L{1;m*5?QZP{207SxBNt-`Qf zIBJS``xJ}#`*aJ$5BOG)a7LcM0=Z=ixxnS!_UqF@Yl928c&*j&vW3+|IRhU@(yWlA$S&7v6)~YK z7f#AuWS48J4BO=-hX-PYBLw#gwZ@aInglg=J)bmXq*E6h8cO1vx4BH7Y{w7KZoz+F z!AgG1)gu8s^B-;1L_VkTo@{BDnkL-VoCt6v7?f%sH_taO@j+YdqhQ>r(CjN!i-r8C zyxMh!W|f0&P35999Gf>Yc}vi|rp(b|mWuN_=LfEw<_I~zy2~N>k`RW-_D9LpM7cbo zg8Q6gg_`@C)9F6=K2-!mP~SRA;}GS3B0+%`5L>E-ppXk7L2)u`h7c4iEiHXXP;4M~ zf)YVvnjSAq?z#kA2eP<#y@Ybx5N0P&X`#-!7=-Vx$+@Vr+zu0=gN84mTm^C8^bnJDBgKC|(mPcT~q^Y5RT}Dj(j7~f{AhP<`7>+t>B zI&_-uH7k^|8fmWb&>3Fasd4M2$H-bwM$mxu3f{fRg;L~@!!#P$W*QFbS$TE&~VD*J3x^^QGn@Q*ac-iX_0?Iwtma~CgA?DzfwlKz%5TaAwHzok0am9Om1QUM=Q$)XBw zhDD*&VSbXOKgHw}lgF7n!9+6(RRw#@p+0jThIRTmI%(RgT~XOqF7>PQyr5xi6^nhP z2B;0|6M@4DOJgf57{74JD1|nx1WlpLh7;$~YD1<)tth}dPU;UD>t%OU#?Weqm#9>(kOx_-{pbyaolqWaw)^HWL9r;Ur z>2s|6AmlNm1h;zholM@vqvyaKpt;JgN~zqp#@o~RiYh7)7p}CM4Wa^ z41@64kt${mp5aBdw_s!`IX@AC!pZd$3b;fIu|tDX^dPb{ux+R`i>6rh!VZJt&I9*p z_vqc?j9n}3G!U~TuWp~lBG)hWhZ zWIB04w^5GEg71l3|5>s2Fn)|qB zd#kX)abQkj?i)$#Za(3|?bJ*|YAmy9S(;byXGKagQ$#9C!F6 zObW^n{bLMsl%XVRkJoo zni6)2t%ztvv^{u33F;fpP{1kKwktbaKp;R&dq~BAQ*u+$vdV}ui<0iC=6muEqf@d2 zrULLSx&&;y5p}1GZA@(I>t{D?`!Z&UJbB2=dIwu5s*8o)^4dL|&c!L&3+2#+CAjiB z+f18Yv7uTp@7JtEs`VNzqnS7T+uh~ktB^k=99u19K z5*PF%rjX{t*;%NPZC1Hh5Uzr?wso`Uy;RAL!e}{T;=2&*M5MAaa4};90o$Hl4HQoD zLCOr*1w#3c@WL+y{iq zZpeUVON38XGE>M7o4FDlPF7bRI!iin=I9KZ%XQTPd>pCqZ1#cp<_wOGQs-F<>dw^N z`lt!TPbOcO80xd~84PPkmBW%mnJgV5i6-_zF~Y+SX9pZRDBi+i-$UgPHb&k}X!(BJ z0Vah+FPw|`$8^M<=5afLP~kv4wt-0tlZ{O1Z4{%oQB1Qja1q~RBJekPywD{pCGrzc zm9`nh#q2A^vxQ2!e8=5&ct-sMK|Aq$Y1#_4Cy z&}NKbIvkht6vHvC^<)IGuPG6a32skLaka>SPW&Z}x;QE*1b+u7C!B0PdvNAX&6x+Z zR#=;@s@hq;JwON~4oSF^p?}j7RhtXsSCzq`@4Kq%hm*bW#--&HI*h+T$E1Mc=CLM8}Ak3NTUnm9u@zfwdvSU&@Tt`!NnJn zQFBVtHK(p{cT1d-kmc$Nd#6g$L8q?JbgE?CA?j2~I_7MbBNXn&w$V}Vz?>dpy>!S4 zr}uD*rV4Pmh2J=*ETn=*grD$|2pgwm-mbx>4LdS@t5AEs9JAD#2a(8AdaVSYf%+#EAUG+Qm(4AX#3~{Sz~cP zg)?+et+peiP~M_CSi~cO(?N|6-}s5N$)G<1vuehPo9<^I-rx~!2sK2;PXdQ1g`ju$3E*_K=D378P{JNz6M9o-9GWngljKaOrpz0s((ho#TTgJ8cSqm4!4&P({;_3E)RY{bxv59<69re7>Qv`oc+VeW9C4D$rLs8U8U# z3Z3~P8$eBF!ZTRRT7`rCM-bVNfxP;Q<+Yx2j5@hZ!7eK)b2q4IStklXY zIu1-5Hq6#^daA&in?=<>K8H_WxQ(W_Q)0bbWCu422sYYim(-fOdA8;TiiMo(3;H99 z^tMln{CI+&zv2S@G6EBdlD5N1EHR)7ca1`s(2egG4T&sxM<{^rJc}@t zAW?Y6ON~5ri{PF&%ns|@W(_F9ZeKNP8MUw)68b1m(a>AijaV1M_&h3byb7q%^W*Rd zOnESZy&}%)^|Ju_u>(A@TN_-!MXl41+SZ&2k22Ga7a523Tzo6MPq@wx!{h|d!fGRa zFV|DAzx=iwxES=VETZPbt^inUEt7Rju4HnRc&8V2v>0$AnSkI4h>*N#qtd^?zX1XN zSTv*_!!4SIms5_EVIA&xd49>T-L=<^AitX^cw83<<(r21CLw*S34(U#K#TX$=;|l< z!L+Q9_^TX^87BYA1jm~)%)&T9h=qbtzEcE_QRgyfSW0@KXxTNB49rrt7m625&2hsa zt#wCjlcCjL*d)y+mVBT z{!puM&ko5gsdhUGh0-OLt-#F_EAVdne48+1*TD_X2vUN8U~ee6i!fC0>+2_~&fl1$o|w2OB-%8nE` zUfBmjB@uD2;k|%sUya5zMNqaq!A(jpX*kO9W(*p4aN+_fM_JU7pqlU+Uw+U=11yn2U}wED zFDY%93B;v)kGTt{myk7MzXQ&(3rOMylL(Wjco$d}>i~-65(NUr5ycrmHLZ725=QtQYofyne>KtW)~xGv)jNFwjz(;Oyq znapD{Kd@}S3FCY?{y=}Wy!vGj9Erbbl}cM`4X*KIA}%+=!250oK!TFp!t#2l7g)?H z5NOcs^VI?!5REfF7kKB7d>&?wZkN&c09AOaoD4ssKOolPA{#)R!*k|%d%MhLNE4&D zqZ&%k)ffncyr*&sw-(KP`=I2ki=A}}Z^2jAaaB|qD+s*8@ubU~cw9+_tQqRJCGT*j zuPWSuU=5=~1C^rClZU%Ra0^$Um&z3?lY;hyJAYN-PN>76Da?t3zk$n9dbK1&Qyi8AX6=4ZTEe>K^X`yLdjo- zyMJ|CCX=;0J8DryAtNCKTxf0;7n*vue`9Qw7n&NFyFISew}&mizzDL8fOm*PatS@h zhlDAFz|Nlv^+U%YzC)>?IG9*kL~`(C1d#K1T1Ikkp%ftkMswa8h;@IqFoewsUJo!0 zq};|&_(bw8)Q1f*@h-41_{(kC{0OutgsF3~2jQt=;d9sZ1g~4>a<&X*o zZ{hv|LLD(=Od~Bt@8x%B)L_T^w}|g+A%_H=IRT^H04T{ZvI2&|a7iz4n)4og#K`q+ zx3IS1=bQ&i0jJ!ns>kv9=I8O9H$=dK{)p#b&Gp3gb{-!vR0{<3t=k5`6Q{Mo1>6;^ z#rm&&Mn+;O^xpYi5Da%ERA-Q|5!<|#*%&*KK~SABP-O$RH?4< zX~CR{oln4@GI?FS_cB-8-U{uc9X-Pcr@r3FvfaIE6rB|ep9_^x|$>t}Ze>35#QQ~GmCqhOpX>yMB_S{g~%zC^^pK+n)`|+KNr=3g31d4%exJ!7F!^udo%gU=ZWArsuMSxyQXW&>T83$w2%9XEVq$#L!R@KBvHzZmhOB(c)^6DKB_pr7BZgA4|U%TrAO#? zGCT!4PTcS6o_2QBTy+dX8_@3ev~!?pki!0N5Ad{eBJny(i8-It=h;=pB7V?q72cJz zd*OEXa%X??5@{$Ud&V1MeA@he81Ni~|2{sZgjfKIQIGYpM{fv%2w>RbeWFXv3cOj> zh}vD^2bAZ0+S{=e&gRAT8Ag<%F?D+qZUwvLv#@U&9omeMv4s0pz2yrK>xcNMNKj6W zY`8;EweRepZTMn~U|i}f--AP=IMfFLW<-#mkkm`HFJ=}jZ+cRGkE`DD+=GQ7Vf`!A zb#<37gL{DM4+E`>{)dxT75?cx*`4JfTIbjjZ#WvV!Xvb%;m4mD>MMv_-H>wY3is@8 zEfx^Qc&HOE1WUu#{Po^(NqhysM!%p zYvE^H)dH6)P*;5H6M;foTCGaX%&?YlR4%v{2GEdq;Nfby(&>>)Q>bFa)m_fQ$3(-A zuc}DvRIjy%!iV%O2#1jjsg{KJJO&0>T;2X7N98Ui-)C}|$q$%lkyjVWYi^hkjY%`h ze*_cxK7LbTHEgznBdddReBWm2KE+1nyyj)3mcq$1XSE#*z#lvb@Gv+~Gux7g>N(98JYn=}_J+X=u?49e2(ye(PXZexvAntmHei zpg!`T9qQe${w2(JDL)^1P#FG6+jXrWEv%hdTkfj31hb=sbo3sD9=S4JkJ@U9UCcRz ziF`QD$D`=P7Zh-!NXLzE41EJE*kJI3#=@y5747$oQGL-;*w$Yo3Hbq*`CHR1iJVyy z-%<)0wIH699|ek?U}M}uu}ApCEfjl{Pudom)5YL%f>--1W)eH&t4zMe=E4;n#A8` zn$VA$#ZlWgV}3_!;4K^9@$QWq6-1jkmCKH0$^ruI%)N&G9IV8B;~j;7rBHWplEqR< z+tLaSHL6>a8-G%5ctg8q&P4KX4##E3-1I}JTY%1*-&j!P`0$%DFO6^ipg zb4n`i!U>R0z)O0~mkYbg#tQo>cL?E#*!yTgXGcx{jf+)t>{&)G*z$cCH&+Xl@p04i5h?4@uNde-d0C7@) zI4M9}qX258DQp#n5+h+$E{oX{Z1PCwV%C!^6YGY|A1{Rk0o>M)JVW8X+_Z^u8AD zJ8^ZJ$quEm^+bDezS@}pA6(B@S7ZHKy3w1ELBTz1{g#S_k8wGp6po9qMK**Lfu%cI z4ao_6wg@I^m_|&TfN*WbQjTQi5rxzZpva_;uQxM5rxH&gP6!&EdxuE8Q$PO_Y)xf! zF?h7*q3^_=N2PIc>kYkpBDdbKg-`d2ciz^by*uzOq-r+qXW6btX~E|Qe5-7+BZ9ST zg5@ZAy^zOTqlcL#8D`Ot+kCFru96k4J=0i=eCHj3g-V5ii2ek5h{?lDgw!Jh9wF;! z@$6N2fJ8YvUOIuUp{D+pvbG~+ueInmp2gW<$%g}F(> z%!+To*b&vJZFaxr=3CO}MeIiEB4jwR+ONhjTMNqO2yu+&%FK@b6}9e@Qw1O`(fLr_LrQyz>^7y0`>BMv364!geeAeE>zNe2e~& z$&Z+DY3d)DoyT2V-^x|j#C@Eap#|1)wqaOZ10e z4Nehl7)Kr%|#nl`&~C46$21yZ5nPtbo1;!gp)!q7QD$1#}K0H`|MP ztgkn><+;h_K>i_qT2DB8y&OrlI;OellupK(ryemn$)7j!=`lWO$C%UIx*MIZzA(c&zs=-3 zOkQR}?MlGcVw^LxJ|)Q#dra2b#~tbp$)`y2-Hm{V(1nk3oTINY`4yAbnEaZ_Z^S$A zG@HZFqliC_>f=u^d6LOfOrB<< zg(X^w(Xj_+Jv6(;alvbbQx?ecbZZg8{{=@zo$?%x%N&l&9FB`1v--6V`G-W#LIeQG zGlt~jy5O~d3M2o-ggy%qZpg^bnEW%7fAP+ML~S6$(EG@Y4l(%v6E5!PFq0AS&Rc3u zFPtoQiL1zvTn$}?q@VBiP@C{Iytsm}?ik@Qd~Fz2hun`&_>lzT_JZpGsa>U>eKdXU zJ5lqz#Ym`l#d5a`DK)*OdKH?0OCY97QfNoqRwpQXIHiU9(A>5xEJy@R3v-plsX&B0 zeBJj<^+}J9oOsVJ^Y9h^RrZs25iD@d!zrojBW-$pC(?QR{2K1*#sD2V$K*vOf5zm? zOkNW2ybZ;+)+44hJKVdg`b^^UwWBc4#wDTr7)D4PsHAI~V0SVGp9d@P^IsUKLaJb>{sYlW#EjCX;V5`FrnhC^@uO>Zjt| zsd4VqICpBCt`Biir?}YCMvq|__-LoI;hErbBY_y6}k zXP>j@964uv4cR(#_S$=|{aSmiwbxqb)U?r1DjIJZE{v}$O%${F^1AVCsgy0`*NtRL z!-WwmTV7}7%h~eex-BKEXvlw&s4=J8m@{0o%(9gzmyO2mo#rlcea_5}uJ117N8i(J zG+5(iHdi*5c(T%EG{MYhc0?7bl(V_@Teftz;(a`Cj$3yaA2Ood#=MD4A#e3m#)qt; z{VF=K+kT3bMs}2q)w1rgwWqv3ogJUZS*<{5W1%>1mQmZB%EX93kcA?9CeYJ`#B&|- zTqp26^rHv<_VD%JiyDzlM#C;MSF!dKjYbzpHvf@RN7u|d^8G_m!`L%n7?DT6`{mYe zy4A4<>)3;H5650THh%Z|s1e;{%+Fb7shrM^wq(ntO~$*;_#b}{oDQ@{_L8E z&pfp2+i&e!Q#R&acxm5-&z_$?dVIqB130e|=&+OPYCGAI{K|JecI4IvqDDifu?!QG zHFI07A}4Tj9;0oU<}Y|UuM}@;~86b zRMV5=Lxo%kz_W6NVKZl`2^JM~i+9MKJzj{rAgscc%*n6%%b&iQ$<7UcAnjVnC}%4xDEUd^BwGWqg1ubf-*(?wS%#SCIh zuM+r(iEA%fqXi6H-f8OafBV)qe|-9De=Zh9tGo%B|+)<{bl;HMZTDn=SQc$1P-TH)f;LSxii) zv3xw6&yJfp0G2xQ8(D_noyOcerXI64J~7iAZ!+R#RCv2FYlmpIY(#JGyxnNX5&{0$ zj;*y9yGb8gBC#EB-?L{Tf{h)Ch!jsT{2A24;*fO*V41^|DmcH zi0JB-9Byb{X|Jf77Nu2qgn7x)$|FPm% zv*z@F-kywpqRqGxSw^Aj)PV7Tx|F2^QI`caUH+=o? zziOl^ zqI2c##?q2FIGmB|HH+rBlQ*wiH1nlw8RWFY(cZL&g|1_A!y{MU@+3RvtYt&>Zx&xg zzV_;SBj1>MZ}bhf864^8+;6`;Ax3P|p62+AOFmQim@{HmU;N&8zQ5*W?6`kE`OaH0 zUl)J;{c2ev7q8$9y?F6IfB4$SDFgGr z!gDZK!=!(bV9&c48+xU<;oVVV*>>Zq5t)^?CNMqaLNSrs4Jw(=6n5uZjQOL*LS+Jb zKAqi*{kv@3+>;%zjBhNO!<@O+>?jW4PGhP4zB6C8My;ZJ-C`^T*=^f1fi;&eJD|%1 zDGsWFBpPebTLl*6I8N8>L@sM#zb*obC95Sn+A49LiEL~)mSbl-E#utoDd5-zzTHM+ z-Wu&KT063PdOfG8e4noD@V#FMcof}b$wFM7I8fDFS;T(ZI8i7C){Xapb>lrYKyBU5 zTdnT-n1}obCW7Qn9nj##GVA+1Ib;t?l8-1G&7M=-9x=H998LoSZn?Wgya)aFe)+-| zoBrqQf0bvhvk117tP#$txkq0BEk+~W)y&*wtQCK)*}Sh-xlD9WuE2ohv)yPEE5@#4 zb3TU?EBK@l)CY&?hq0CLFLJ9mS;eC`x%Y?@*Z43_ZUI0T`#+q|AYgA?TQ=}FvX+bC zZ9&P0oYCg2t@F;BQ{xisUyYA$16$_JB>UQt=-xQkwzaJXJN#;Q_JSt3cg>22=VU&1 z92-4pG}dnPq|q?K{hP$GY;RI*m87xQnQlcAlEz#NZ>0o=JD)UG;+(W_Do?gMw80@A zDC^{T%3=-#zv_84d%`NFaDXJi%v!}^!J`Gw3!2_*6$^rTbQ`fAv&Y$j!gkDU&(52Z&F{b>DNowJmt^zhTr#K@oBt+UW4EzD^}Qd=qFs2N-GiD}?238? zd1jq)z0qd8#aN5~)*0_<-e9}|^Vwi*D2u*eJ|k^-{NcgJDe_3+NSxS`+yBt77JuOQ zhS#bwV-}9-j9JQ1Zp0oR#-1-1ot|6)yeu51I7*$qQVgq@qmIBgt2A89PB_TV-er<0 zmp}JRU`=1d3hwG-;kV&wtRS95vWIJ$DDFFrCt@D~rc%}um{R7*?A#ye+E!i(=627- z?m4JWu(xDFq%=^bgyl*nHUT>IlRLh0>xva$iWzgkQG*E|2P@EYyChpe;I*aN+l{zY zG)3n+yN$&{JhJIGSdXI9Ywx^)VHfD+e7BVMqA3iHrmgBW9z^Cbj=6b9d0CAHfB|iovfZXARne5Js>!n zZj37OqAf`ziB^n3`($cltYf^CZfo7Rd%(>N{~9-DrcY4zYSq*Kp5i}b?TgM9yy6TX6TQLy^R z5m9_DimPW-qMlKedParn8P%$1R4$(}YtDRX({@X0?(+w3`O$zqZPD!tm)V$_#5hy| z!zOewrNIQa-kgPXv0~~^&o)orb$t5pJ=Kpt*gXB<@#@Ka)kDY8m)>-L*|@qU|LCy` zFC5UpS^>6H2SWuHPGhY^d;7g8EObz4wepaf?PAqCPgjrLt<{-g(^s)hWx+0LSG)CV$N2V@$+uJL(;)#$IzcyCXZizN3&Ycji0kDY0*9=&hs$z#>Kp3z3FgXrH72<7ib2m7%q2v~KfL+j9Dr$dSSFeoUFl(Mm$ zh&+C*dhf~VOJ}^e#1maaW{sZj!vbJLqe%mE+K(l=Gz8T0=`eHI9VX7Brm6e(RSz7m z-Dn9my~>m4Yd4l)vyCo@(`GcGHMzj)b2?idGdWYAWb!E{Cz(9Sx zb`}^cuZn$AJ$_>96X&(&lWnMVjh^jmJDwEVqe%mkEwlgUz5S0tA%F%ieE#gzQ>Ug5 z9jv}|%x#d+Ut;nXHBa6e77888CaYK}K{+{2>>oRWbv6as|B$CL(A7@4(zI+J_OVX6 z(7aG;*gCaglj@uP!q_AzR3na=sTV-fJ=AFv8(iUJ_?z0qrWV-ws*z1vBaQalv{Z({ zx8UU9YCimMz~r=Xa#nfrd=19i#LP6hFz&Q`%R8tGq+*IXnv9uc=T1I&;l=0O&T&HS zVc+ccHBB-55W6O`-B#}Rwi4UY5B8;T`q+cj6Gxk?2hQSz11JmsfXNSQp0u)wBzk)z zd82zzPTzZW>cl~g<5Q=qM-Md1mFHp$mM0-jinW)9ujz#-#woh~lEvKK{Yb}<^DzU4 z_L1OOEb)Yxn;9^4-~%ue=gbTk+QnQ9r*sVa`Z>hkWb!R0uQ2&GlkbRkE;N6Bnn^gi z7HeVWS5BS1kNfcHgZ9LD`WtKM14OeA!r#M|K5nDswUBP7UUkvLE^i_9%Bj=OUO2lC zjZfWw8j#+#5NqL_Hv1p~T5gps*VN^<{5!4XWP&YY@l}sLjAb}|~SOmdqW3kZf9o9lyQXqVe$em~MXH34xBh33z{WAat?^ff+xoyj+t{Jjf| zs#Bfl9rzJU;yI+=1r{GjbKR`+Wct_EK$@$t(S>oQJvNZm4uDvX*h&DLdh*QFvqyMJ z>g~l6JVd!bbO?W=3Blik8Pg%%^?9w^M|Sx|PT)OfxPg7VNW5n|d$~r>_qW-zogHn` zz*Jv*w(EWE?FQ`f>HF@RzEcqPyR?Cg^>(pEJ=@=6uV5*gG%&Y|>)kG58hhn#2`87t zdL_Ypj$-{Ha?ve~SC@UFu0lKtcnvm+wC40s|4TWL8u^a%Ad><5SO_ zYObC*K6MyJnJv)8(kpN-@3?GTiRS2$uY z8^_hHID1$koTM_ltvtLQ{2oixa&+!H4J(!alfc|sX25-?mB0dj2Lx2+hMUvbkhb61 zD@%l%s=0zWN{m2pN4e$z51E$^XnT^)e_BX2-rSm%N}%T@4RNbb>(slJpu-hywwPlO z?^dHJPAI6sX(%_&R3AU$r9QF5cCk_dfNBsRe@od)?1ghP&H+WY`@*yD}<~toQpGf z9fe&mb7`7Bc9xukE?31nHg5&et2~*$v1$MeF$KTs)ZmWMuz!p;kC&i9XsRBgG%~&a zly{Een*||W<;nE72N=SVa?l^qdIr1nT=k15s%KBs&cimS4#Yn7=KH4t zU~C-6y$8;njeY)>TQjEA1N;}a`R|xqWQPqV5%DgdP-TeHR?~&goF()4^nKnn6Kf|5 ztKGby-4tsVlq>?3XtZ5BTIIlZnM1f81(PZmt_!F4k(nVP&7b`q&S8=gCpX8hi7nPGv9g6V9mmUtjvA;V9_=8 zr{^?T7Kg9YLFw7PRS=UZC=JTlR#9C8H7~J4XnZ$eLWx+MNsLJYlUYn=i+A2(aY}U; zq}g4#Lvo%xj&isooWxRgIOLi3f1;br;x$yHJxxXuJ86au*X=Ni9!PCYHBFX{M&2Bm zgnn6^i+3KII&uUekarcw6FsCq(Dxmfa`Sy--2gCq$9dq~9rq{txY3LzaYwl@#M`UL z1QU#fASoX?0dgPEL&AJeB1(D!u+N@w5fwEAv{9ZcD#A4vyv&<7-1_bfxSC^sc;fNG z;dFq~+zTs&1_kS^AQ!^lY>SmGR?5IBl&D@d1QuAM3!#>#&eq$FRZ7FAK#{z4gd%r@ zf_8+0c0|0p&p(KL*-3LGLx_4hmNv7axU!@g^ehB~>gi`N>zI4R0mM3~IlHMgd+PMD z8Rdyip*+JT(rdJfXp7+$e?R)o>;%^#wdmTJhOP-EqVqmrkf}tpv)vKaloE1;`>hO& z!zfRqvyXe`68uG{&>uk!D|2dE5df4>p@$U!&W4P2_Gt&`JX;alm9>PN5RTt*N^LIX z#1(lMRRlJ$-Bw?Av<^O3m9o!|kZs9(r}Zf_gNvF*s9`Y>)w^*6=unC@7tCrq;~uP} zATp5_Yoy67t}ToI)Ru*FWwp%&|F@v}xg%uDoaW-mjxA{KD(AIm4B{|VV+yDNKs+BB zZ78j=-*_9FZy&{p;o+hfOL?k-2O{^weG$}~c5y}4XoGlbH#BnR)Sfi6MKQnOR)s2N zRmuXXa8u$unePiN@jYaslaW-z$Awdl&$os7(aeZB0^~!|cc&OAoj65ov;AEBl{@_)oTy>DcyTC%0gm<2g@B@}Xy@-Lh{4RN7XV(4neV7|eH zcuL6>L3^u93NkLZs?fX7qHpwLlPu&4@OThpo=1^8qd?#IYc6eZLBhcj6WTx1=S^-MM} zxtYl=;$1*7+*rc=6k{;;^aJ94?o4ejQrj>@*ZH!8x{%t&;aph@tKr__M4 znjr27c~_$Y@l=9qcaj0vgP~ygvgS<^rrkuUabBLLJab=WS5$T7>?m(FRdyV(~>k;BRRgRi!0C z?`Uomp}A3HKa)F|+$G)x6tjxfE}_qgG!x`nCf6~!p2-d3omR}|)KXBs)pL?N#j<(Q zoaNA=lBn)K1(mKg1*vowg?cU9Hw&>;nkIl6l$r#esC|aEA!(MjzIuB|TXxTjN{TgVlW- za*djMzfbespD_7!U@_jQF}LPIP29MP+x2?_i}7NO#cFQVgeBk+W;_^Jj5lA*t-1Ch z^^+!+9}Xn|?tqlc^K_EkUbh&xiVHBW(+;B0;uD!Fj_0p5hECB&kiVkKhW zJWt+A7B~W02~0alXk-zSg-jZmEM~GqybCJVVvd{A{QNHf^ZEv3PJ1mlZ!2VKqVt(7 zV8TYDY(C1CbrHr>Zf7Nj?2yuzDhF3?sqd~2&(=c4%yC@m#1lF=*o&cDNbR$OXBTu1 zIl=6O(^@;_x+^9ehU>?(8-{!0s-#XlapIaol)391my|gH-{JblC1t{+8?4LnsXL$1 z#Aiv=p+`y!k@z}azK?1W>AxboQ&W?ooU{k1H87Po3O!kK+@cLZ=w3S#bWz?#)Dp4h zQJ2qn0SuaBnA&1yB%|<40=~-RS4>`GLi%lJ=2vbxn7NNLyWVnzY>BJ3mX7V`JMwNi zKcm{)RM}a9N|rZUkhi8EdWPzFsCU$uvgps1nT!X(e`qJ9#aV4t>hv~#t`j1Ai2E~@ zoIt(ioS1Ql#kEB#GinaO-^sXU`rs*|4kl1q`N(@Y)d4Jueu@D%&H(4{N52pVRtLkY z-bBBr_l8)(lYY2T796dVnEx8X7p3$!lN2pYMq5FQOT!gmzaCB%W|ym!U~D=>OL1Q9 zKD`gxfm$s?KUuBoeA&L;g`L8n!-$sObW$wB%JId=P(5_jw24Yf3}4B=}ZaWnnS!6YJ=*$Y%Q-=k=3 zw!h}IIhMhBNex5wPTV7%n0g8qfUbmqQ-La@Rh~@WMr{BL8*Fre)b5OF7L9VG`{C9% z2J<5d1Yp^pI*7YVcf)uZk8P2*KmkBLB;s3aTOdEMi_9|r0Bk9h*Y<#O6PJlcXvu_2 z-xq|@%SU|n7F)ZiU%qkbY#^Wyrv|`tU{(hgaPeBL;bjY}iE;)$j-**3Ns(Qy#VTS# zSuUKEyTC5jS{bs-Ne&Oh3`Yp=7ix_sSv3i2>_$Fm%1Ea!I5d>RId5~BJlT%zr`>}8 zzJitfma9hsc;-LaqKSM?<=xrR5H(G>tvMdxNH8GPK5m|GUg86`+DE~-Q=!>csum0R z5qY)i49yA$+nUNnXE-*$$K=gH^O`b8idibo>zp6Ba+<^B{OT@;;7dXnBHJG&R}GW=Vr_wJT~?_w-vUjZ_u&VDGsVN-dY}m0h6YN0(LQd zpF2nt#tY(FGOS4LC|cTfz(t#)&gmml2Wi?07Sg*0V_T^iTBB$CR$+Xrts3&y;;zH@ zYwOTyy2q?g%4(#!$|I+FZKuYqhaMxVJsCj*)+2cLCKpPPLk`nOV4J-VCD|qzDBFTZ zwb?tsHa!_ZZT7-sAKTT1(%Kx;+H`bExM03{1J~6fOx!C?@g%M^AN7`7=x9lXvLidC z!DTo#f-0CBMMM;F8iu1rPQfIo=9ml|P+yB(aL<>Ti;&CDX)!effk+UQ=>NjtME{D3 z5J1G!m-+K6L4(u7TlgWNyI2IE*ViFAE%qbS0o-m;CM2t%9I9Ka9OB%tV2zgV5Z?(c zpJuM&7A(N88AN`0_5AUvCr;H`kb_JlNha3l+5SD26a=D419SJ78!Z5i=&J3cnIEnQ z2Im1{DKv|J%%>TAj6DS>ZEN3p3s$lea&e?VJcr%k6CTwx8jf7c1I^8<=_VnrCxfFP zR1YK9>I=aZ#aqqYCCP8ps6%H^Bd8v>S0*7R08!i(Ldnb)y|z>Bys*4R&kLdm?c%m_ zxdx~ag^vfK-GO+BY`qb;&)Q88C+8kspxE#I10?+|Wwsg}-G57UvNK=Vm8Akcq>@Dy z+ysk4sl)svOMi;VNhVJ+d5Vc<6sih#n}faPUJUEh3v|-7SG%IJEnMo?=y^fI+9DSF zat%-$)~5o86_&4J(3vrzzpjzg@_MA8Cow{ z=%ENLI#K5i>jkRgf}yIjU>_o5?GO~K&cW%kMzfNI3rqThW(jdbNAG}L00u9l<+pV4 zMtp{HNC|HB=sTIbi^;p0yobr}i+2G9Co#?-gq)-Z8I%awlE`r;w7H6qL5XNK zS90iXo7_8@D-^}j7tS5GZKDQawR#^QzEa_`P3j(~#DKs94>&kC9rBDTnu~qakEf87 z#-OfZ{!%8(m@H?qf(h?=W17-J;+e(*M5K)(ncV83&wx%(AExrvJCm_AO+&8Hvi-t0 z_5LsqVLQ|^#56y8*%)OV&I31DNb9SGjtT=}b5YtYhUD6m4kNb%0dLWwdrcL)l|O$= zEd9c@(_+7wgAzk92kg)5`Gte4uv^@Upm)QPGp!HRt=U{YTaU_kp|V&-;Dxdn)sXC- zU9iuB8KO{t&@Acr0p497d&w0v`ltZ8hSre?fq^{UiUu7=eL@SeT&qMoj;6FF>xejQ zm>34(u_IMXA2`j6Y;VEHVsd^W1cj69Clqjr7Gj46r|3asabVj}X%V+K!#hr&9 z(C*Q@#2LF<+G!wWOJLU<03{oj)toq};UCk~$_t&2r_7xQG{UetU;*!jbwiDhYpO$x zyU29%g2p{1taDfBwRp!bb}_K?sq6?MRgw#ZS_CFFUUMg`^$6~;g<8eV@(p>+_SsgY z9R?<I*4=pw2aH+x0L6uC>;u)tjG@ze7!TU=D34G`n74Z(mk8LH7 zaGftZfCk043N~S7Ev&Z3y7g6St1*)1B-G>}+0FC^e*8h~{;3l$HEU`Gg;6_q|4lj| z%=K*zMi64{f&kRit%_*)X+Z$oaRRGf5H7A!!7Toq6ZI`7uQ2&GhhDRla7!|jRXrLS zwu^?OpYi;Xh(0i$p?S+wY#vB4uCL)!chKm^^2-x=YYM^kE z4^U>fArQ)cln)5I@>N05?pZz*xH9ma1i0E>&f4z010UA7tWnqm1p`=oPHH$EgBm~T zQS6-Rp>4zr*(0th3FY>;%0pFJpvycsxPrfUt~k zR)X|AcT@i`b=Lzfi;ac0k^I`5F9qyhZyN>gcI_n!xyw$Arl6){^G>LI zq)%d<6WO2L2?If~cy@7o#2wxqKG7({*vsUDflIxgLnAEq>RomySuP0M$$Ad};XWW- zc0&d{TO@qCl9@tw$jp`KaI&)c$XU{f(?_P^T&}AY;NwV*XR{B)H)n8klseB^P_W}gbD}Zv2{$=Gugm|-bOKc8^tsm0~hg)CIWwx#|vGuQX)SA zRaskQnC{>=%^2y=PwN{JNpbJD;dRRdj7)NXmijY92c%up0qLq```{ve;ed9 zpt*BOc3^a}`LQ}~F`bfWu)900U4o~oub*4?X7IVD0`;#UZ%!8}B{xGY6*c)|`1j zYlXGhimILE+XIAvH7gD>d0Zmzw^X>TKpA`3g9^J>B=P(4Ru9!3ap3dZ_*ZE=mB z7u45&=}oEuYTf<2!0xu2<3qUi$9P1agQmJ&L<(GO`)SahG@z{pKuNOw_=(zUX%6f^ z1hxbQW=A0hU$!RjE7SL%*HoHRaZx&1<;n96ZoEf`BaJSMdsO_R)}~`aLBAZ#2Nz#R zM$IWn*POb--7RuTLYAv9?42q}2c5b?)2Whmhp1B}>6o)kj!?K8+eSyd19N(a_0l0H zoZiDJnkvBM7JlQLvXBZM6?#2EpPXDhESp;t->w=KT7AZk#6G+5!Z|83)h@vz?B(@6 z<41b3{p+w-T;4N&qzmRQ#b0=rqH4Vb5pT?qf;gVStwmL|wZJdYNV%%cqHQDNWR1lE z70%E>wc3V|LV1hoU=fc9P6stQeB(#bCWHP6%&HkDZn~ddxy7*|;nQ8=5**hv$j@Ljpil`-Lp(~}I z=0gvVTZb3*^!_tbPkhF^fa1M^GOoQed<~AEyS?I@3D;k;m_(P0RR4^Ei!V^cHzbAY zSvdJy745T1_%?vJDhp|lpo*p;6Tpv*`p=NAJX+DL_iC(8a^eGgfkj0vKr~LiEBaxxK;xchkwH@4m&Q6cl{FQO@ZPH8O-=I zW#f$w|L=G(Tmt+#eI{J&TJh0GFm_Fhy^Zh}a0#WywrBn{7YjMp7xV`d z>204D`SAolf5ip*MFb`kC2fb3SfXDO?iz(Mp$p$H$`>YK@C>f%Iucp%j!*#KeHLLT zL89=Cml}EM62U!hnir3hi&}>twJkXl9%ZH-FES46x%d`%pKzTYg2@Saehp&pD_6sCjZLhr%Y;i4W$+7z`aCK z=#A@cH9a|!m%cY4i`puR1U^P)!S+d1jm~)%)&T9h=qbtzFP#2QRgyfSW0@KXxTNB49rrt7m625&2hs) zt#wCjlc)@jK^soJR^&z|Z)EZ&CghYNzsE$gi%{R;+E~e(J7C@bR)S_4r;lqsEd4^U z<;e(I4E<8EAzD#aV3Y6S_g*tX&Z8c@Ts&O;BYkL(oOQ=as6>kVY6zSy*71WB3eN zSsVr7%oCily}UkJOBSadob9Xo1fBm7s85jPUvkJ^W%4T~uQBceR*1#@sK zh>TzXJ_@+kw>(#6lVEt@J}3xt$cs<6Y$ltjnD{?Y3n!GQviMGL86V)1arx`)Z+i{~ z`hzXPJv$_~q}pvS6iSy}wgNXdeB}Ca`ioFalja>zR#AZh6Uy`a90wH#inK(Qf^BCO zBG1DJ!_E!b?`^`QZ@E^DcS}VyvpUuF6sH>6cOkjfIbFCNr`pL9d|AC^p@^{XDP3`K zTW49C8TFbK84S11WddotKU2WT%jFqP+*V_?6)sPO3ch{Gvb&hP?gjK>kG!1{{zQyh z2iwqlU7tk652S^1;I2$q6J@I)U35)EJ0_rEJbZxw-6{mt zl@cU?K0~?z2-}3ajda9+LO*h~%YwyH+GLa=XfwtU00Wps6HHo|B$>1_X%p{slpQH> ztg;t|N+RN3!+QbOzzP~zK?5sjUwN=PTB2rS}5$z zOp1N`O%52%tuFE5HhikpVQSj)BUTYQeVpBlST}X(9-)`fjY#9Y!ZhJ}7vNHstpMga zTjfI6ikiT#;V0UXanNbUf}4sbCJ`o4@h-3|)&UgBB?<(LBZ@PCZY)nBdS}hZ zrV?~uMz~YLP;+-D&3S`2Fksmigibxk+D_~vq}GvN1|rjo0R@2_<+_YFAc?$-PqUcJ zW-^D#+`zJZCXDmp_yhgf(&`sMa3ub!RVr<%HMq``iMZSd1Mj;X00~NV3CrunUSKh+ zK%hah&sPhyUo_76T;QEQ@*>O}-7cf?eyZ?RI2nFMzhA7y1vY>>hiA?5_I8QQkS0cO zM>UwBt1%D?c~9jOZYi33_d>~87dz_|-i)uT4J_zZLd*QBwZ zOM(kim$+47XhI>|j%0TVwCilSyHLrNoT&IaWOe1}p&aWJv8h~(hO2q5S2w2b87LMcK7jAp$h5bM5dVGx@WydGd0 zNV$z4@rmSHs1F-r;$2{2@RwV&`C({L2vg@|55QB!!so8*30}9v%V7?uDln!-%OMpG z-okwaggRo#m_}NP-p}vQsKJi+Z5H3xLJkQ!a{@-Y0Z@`-WCaX^;gVk9H0wS3h>`2t zW?^l^&p8j40#3QtRFC2F&1dkPH$=dK{)p#b&Gp2#HXa`^R0{<3t=k5`6Q|X|1>6;^ z#rm&&Mn+$O^)pZi5Da%ERA-Q|5!<|#*%&*KK~SABP-O$RH?4< zX~CR{oln3YGkIOT_Yzmz-U98U9X-Pcr@rt}Ze>35#QQ~GmCqhOpX>yMBw%lOa%Y|KIimWDKO^X>Tj=*+k6(~M*49)ayg44qN zTIj=AlFIID{UAO{A5RL6H>^QwYIAA47SFxOrFY$MK^p8R>;^I`c=+)q=qN)+x#t)6 zzmP?)t^x4l(cMAw&ZRn>Lq%fU9ojX$2aA-Iqb5N{LJLPZo9vqo@&I|7yyLPN3n`=| z(&SJ-=pjcCtQ8edlMs0~6UKIk{63Ta#^k??cizKhsZF$SzdC4@NO??gYZd4&_Y58%fj6N#Y3vARq-SOOce%&OvAG>B=JziTg^Op)G_#I z?$XaJ--)dcoy{Q25JQ7W_@oLRA>1ZZt;^Xr*LUR$!V4xG^-;y~wUDuFey|g_{eoMq zv$(M88tg2YLlzX+9(%m0&+V_Z0OG{rb9f$mJP%OK79uRvOCEbX7gp_M{f0<&DLqWL zlc7o2apHbg_q4O4=Bi^D+JH8{r=0^;gB13ETY#sX6N%SRO3eDCKF_W)7V(4bsPL|w z-3zz7mpc2Cmq>#t*)!f4J$geBL;%Ac?-gBYR^ZL5 zM%3;SKcGD8)839Pb2cxw&k&*%jjG#|a4Xm?pM`zP$lxZ7j3wN+>MdV@SU<>5MS^m2 zWWybTs(oh%ZN(Q`1mjX?`EDE<#lc<(FvEiUgrr`oeKE6OdD9c}dtCLF=N>E!3hQ5? zuB*Fz8QcS0e;8<8^go=$s_;+m&h97=(mKbMc*D_V}kCm$_$m zOR<13#)BPD3vvF#$vVrO^(!LNV+hDc$vdHN9Z(f;0@s?AwQ>oBUxCXNDY-tq<6Ne!P#0+e_8k{RrsOt)c`YBXo7~r*Rayxi~h=RMGB=MIfQ^Z zw!k036o$I>*5QmrKX~psWh8}%Q-@S9K}xJ=Jlu1rwL)|M)-6S$&gAXDAD^6h?mSa4 z-!HlTQ}NbTn#No&^P4>YzNH3DJ%ELpW$M8Prk*v-~|Er`MYTwJK#F?sI3%V^wnh$w2UFD2P7xo`4h$h!li<%v# zv=)BGRV{F-0(Hg5J`pH%eT!AenHkm+j>-ks!T=ib4m?~fS35m&X$n=WxVp<(_?T$; z@l_RRo$9f6Q}~eH1>rD~A=Q!)pGUy}i>upz;;7uir)`)lBvauw?hb*lz7I!#N<2(ycileFc3LVP3B@Hclq2tck$!{GD$!`>Whn0Mb z7Sx9ywnM%9)xU)KHs$BT4-3OTX}hj9q=mIpYs*~~mtl4^pN`%m&?8sI>QP%QvWq!~ zFp&?(`FIqa_<{mX6zRATj-hXW1se>0&{#P2q@w+vF{&?G3fuZ?Bq2Y*GIvXQeIjR; z#J7|}MlFaZH$JrRSQ0y^2aSO#B=aaUDW_2=noZ!{|ikZaD_%f5PF!|q1{>Hn^ zuOLpv>|O*OV_rA`VIFT+v$^#QlgCoOWb(Skb61G%4M|OghT(R7eVQN(A?y*|7n;Q1 zW}48Cn8gv>H)C#ls{hR!-tq1Y8x%yVIho6jX37Er?aaQ8{v52ted8U4fTd7(aFT^m zNxQxUb_!`BE`_>8xpDP0mJQ<+3hWB;bABQ zX7?`OR#xy^Bmwa!iN4_%a`%~r@0U=F)n!36=j5L?G&Jrgd5nL?Q;@yR_j#COe5BqTFD zcT1l486~+Ieu#p`517aYNyJh~qTBK+3?1Fn)q% zudTyFZLj}f^`$OJ-9|$NI5^4EF&rKqCT43EVXBJtFfoz`hSmt7Nuc*#WWMC>|uL2*nUq$z^rCN(yapBk8*6%g)|TNKfRZSKw{?1U66@^!6s7dS@& zM1y)hF1w(uJiPugHcgX_C`6bY1!$~oZxQ1RQGSuh=a_t+$yp{ZdAq4NXeB9Lj+v75 z6Yap&Z6-UI%GML@$@yw$0(@{iUtNv$ZSF#ELIwr*to7R}7Cy%1j8Zr*!WP*ORs@#r zXf-4!?Aaoiq#+tHaRS1%8A~~mnMV{-H-I9OKEB?}0G&!ag*YK-boN~$@lO5R%dj<- z(Z%4=nuop$*ni^@QK`d!)89+FWz}ui}q~CyO65cxSwUa5v2v6AMmZRg^mce zej_YL$?JtY<{CZBEXgp7hTP_}#dejfXziKCTI4(L2+UV13`F!N$RkW1Wg?^=A@B%U zM~i2#!UH7A*|7p*%(Fl^mchd`_oN3{F5J?i1lNJU!&yNf!=V}9Udf5xh8qkgW-H81 z5@uF>1ICW1Ms2hEH8K6XdfC3!2`9A9!X=2r zHl(GQ*SiGYpTeawI%I2#sFIQaGXfc0sZ^4RChq{u6CyB}3K@bjdK+qt_AyB_Aw7z2 z5%0XE8f|gA)xuU}3`#)6c_kg^rBZw^lMgcaAL5<2sMN(J@G(jRM-{eP(eDB%O66Ph z`%HeogiBNZ$m|^M;`&yux+d=B)C?vV|CAQ@;%Bq`sq-;qgR=YD4R5stu$O?w>@UzC zf;Bir90ukK-j2<|POMX;RGvo3!eqvz#W2Kf_3Ylqda(lf9thv9wTnKuDHqT=jNEK5 z>apIwBsv=M(<-w&p`5nYt&-DS=`+AiQAIZEEoAZ&7D-jSiOEtX%a|-@vO>J`Vzxvq z&n-KlxrK)UbSy%98>46+i!g~Yi7}xJs(;2+MIfcU#9$}Sy^t*be87)QAs} zNzkL-zEb9sheI95vE$B*m^m<1g2+V*XP%%>;#q#a{Uck6C+uKL0Z>-;8@ zZ!vj=3AHN$UyE_h%=(lhi|jF3Yae&0J0zbX$#)k5B0?8F!f}qi%H&r}USslWCchEy zywl)eaJoA>kv)rt2>eX8!`b)mapZH^-TB&v@;#pG!w&oFtG zi58YO*r|v#=l$G%d_k7N-Ic z^6+)v)77UvK62tcyUfE^_*dCa-bFCaIS(hLu8*|o^_@uP@bhc9ryB)y>>QKxO#Y0? z7n!^)-gz5}ZK+30Yj(JISM{01=W9n`o{dXF`7w-;I#5a1Hp1>?6h0NO%UNcV?`GL` zQ+-rI+>H7%Js*Qdr-Uwi&UJj!bm0w~;JqrQ?5oWCJ0@Ra@^vQPVDk6g;ZSmDkJL}a zxl`lZsd4VqI9(s&q)u_MrHyXGF!0e%XT@*H;d^X_UA(ATp`K@0@x0LyE8Yck*j#PJ z#|PG?w*WSz6LPFgY*iy1DNr0+U!ersNm8AV^XI76(!9(p4`;01a-73a?S{6|$%!&r z3#q1;Y-ze^A?VXsAvY=R0+(pN1-*bRKw5kl>?%D^V-{ge10Z2BFh>xdcX^k9GJnman)JwE>KQb`EYvkW8h L=y$)|`py3baK|x7 diff --git a/file-data-map/User/dfebc555-001b-489f-92a3-642abc3b97f7.ser b/file-data-map/User/dfebc555-001b-489f-92a3-642abc3b97f7.ser new file mode 100644 index 0000000000000000000000000000000000000000..2220353df1fe739d11fff219a378091e132838a9 GIT binary patch literal 381 zcmYk1F;4VPb7GVqq+7 zZ8TJd*59GM*x1l|dl2JPGxOf$ee?VcIcs3O9ZP1lK}AfWwHPZFqHV{aKw?4>(isb^ zFfgl(2l*!C+eUB_+eEP1Jm#m|CzQgkD@$BawFx;PIYtC4Gd1F>6LU=C`|NZmFMSWZ z29zSfEw!+-gJc^}l=0ux*Vj+s#<+Sn{rGwhpi+AzC`=wkli}55@bbUc+OaME0=77U AYXATM literal 0 HcmV?d00001 From 5a495a077cc780757ac2f62b5392a02445248aa2 Mon Sep 17 00:00:00 2001 From: Alpha Date: Thu, 29 Jan 2026 13:43:11 +0900 Subject: [PATCH 26/35] =?UTF-8?q?fix:=20.ser=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=ED=98=95=EC=83=81=EA=B4=80=EB=A6=AC=20=EC=95=88=20=EB=90=98?= =?UTF-8?q?=EA=B2=8C=20=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4db85a08..b8e774cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .idea -.ser \ No newline at end of file +*.ser \ No newline at end of file From 7a6bfe8f11d8f84c797c9d818b2804bbd54a490c Mon Sep 17 00:00:00 2001 From: Alpha Date: Thu, 29 Jan 2026 15:23:09 +0900 Subject: [PATCH 27/35] Feat: Channel Type, Channel create logic edit --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../app/router/RouteChannelService.class | Bin 1711 -> 2127 bytes .../app/router/RouteMessageService.class | Bin 3117 -> 3492 bytes .../app/router/RouteUserService.class | Bin 1687 -> 2058 bytes .../mission/discodeit/entity/Channel.class | Bin 2966 -> 3151 bytes .../compileJava/previous-compilation-data.bin | Bin 28483 -> 28560 bytes .../sprint/mission/discodeit/UserState.java | 5 +-- .../mission/discodeit/app/router/IsLogin.java | 16 +++++++++ .../app/router/RouteChannelService.java | 14 +++++--- .../app/router/RouteMessageService.java | 23 +++++++----- .../app/router/RouteUserService.java | 11 ++++-- .../mission/discodeit/entity/Channel.java | 34 ++++++++++++------ .../mission/discodeit/entity/ChannelType.java | 6 ++++ .../file/FileChannelRepository.java | 7 ---- .../discodeit/service/auth/AuthService.java | 4 +-- .../service/basic/BasicChannelService.java | 29 +++++++++++++-- 16 files changed, 106 insertions(+), 43 deletions(-) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/IsLogin.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/ChannelType.java diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 22707704c322250ab15773226930cf0006d367ba..c95faae7957a35f5d98e91cf1d33bd85f6e3b93e 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6cG0RS|b1lIrn literal 17 VcmZQxwaR1i+k`Ae1~6c`1pqXR1jzsZ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class index 7697d074a20898add257f8a1d596c7b5b6e3d060..921ab936e531e5daeab1fb6d4229308114392723 100644 GIT binary patch delta 1081 zcmYjPSx*yD6#niEFkPllOF;yxLj{E?iwG_VR0UB`ir|8ZYlR5~Yte!lpNfe_BZ*ok zBm{v#B5B}7B!H-izWbuT!1zqdvxzarbK6Rs;S+#*bcanI zv(z`(I?&q}V5rn@izP)ZiDRt+1_r6o=M4ljzX>LoCCD-?NN1=B=N7jm9T`%)eOmVo zhV0_je(zmxh2Ie zql6=tJGXkgLt1if-n&aiDQ{dHxHDuxx$a}-q5-?~@2rIF)(wKoS}kJ__7Yoz-JGqU z?iO;)`%xp|fQ(wy>0V)nVL#k54&sphTqq1V(IBId*E0t-Z_ftHPBh6l%JFoLANKqI zyK0uv5^u3b^J^O|8gPQa5t|x|&VP))m{4LsSP4-pg^`3sn?xn*MFHg?ugx z=`7fhjm@a0jj2UG+)zSjLIIj-JBTWrr*^MFg%2*=LK#9R$1_x6ltRX^57Vf@8A_*6 zav%AhMJG{1gy0;-@^1zg2xI6XI|GJnhtc?(R^=DcjS?;rn99h5Q`C-2lqE#Gk|D(T zva9dVs=AipP)nD=)Ust%@kxaEBx!M8P4NcQg#Siad;I-4@Ami$@}}&3NvQ;{Y7xo7 cN>^3_t+-4OPj`jLpzK%aDA3^EBzztC3qI@P`~Uy| delta 807 zcmYk4$xjn;6vscmnU=l?2EggByC(0W70sQU?~QQ2_7WI<>1ZC z#Ur;SUJOPs@xUM8K`;IR>YrhZ@y)av4{yo$z2AG^_nr9?c^kAo{r-3eOtARMT5vwA zbjT!NVA)h+D<+-qYSPJTb+=4HHenYFZarAe6tZ*oGWmQq7vKm{gDRV9Y7~*x%)?AF zm&xBvrnWZ=*)@f}zEx1v%zKrU_2lBlO1_XPY-BTQV0EI{M*h~lS0vZzbiLzEzsQkeo(Em0TrMg1G`@Kj8R`NSHq|M zwiEAB2N*@}l(Jxv^gANaqX*Qv@kBYsB}zy00XuCIrKI~t%(qLh^scu^L(ISHHOavK zBB4@YsEBWGPgdzni=QPTzKS@tqGp{a8KaK|254fOX3o;WJZ+?6r+*iQy-%T}IqZE5&07=D1da$0 V;j)z630J&%^PXSeY8kx-e*nK7gLeP` diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class index e11fbf1e909166d2328f67cbb1812ef6c81711a9..1303c670dd7b6eec3e748407b3bd9ac247d3ae17 100644 GIT binary patch delta 1636 zcmah}TTEMZ82|lyJEc8fR|Ly|t=wt36d2=HDBGAw88GDPHm5s-V=454ZQ0GuqHby= zdmu*=haA&R_%sTMi6(9)7{7np;o^fn{LlBD@BjUN=ewS- zEw{4`Km7IW0{|`faMsXm6ujZCpvN0vs8%FlpYl{^EOIAIPCfJtf?p1YC68=?0Y(9$ zh*YF8I24yEmwQK(-VEB2F?nQyA+xk=TskK?d{V&U=#PZF0guydJDCC#_6RVGNXLr| zrssSvh9k0{K`ngWuH|XdkXoLu4$xpFlGBj?_t;S})v2JeMjeYXv*21(k_Qipl zoA)=i7B;r$Zd$iLziQoDSlybxW8J(vO)lGWcVaUi$7XI<8el<|fW0EJk)uRevu>Y= z{jkms4yEOzKtQ30A`~;Ycw)03<<0(K*<(Vf2pf-99h{2jQKs~;!uk}bP$8lc4ysOg zL<$6C3OhX!_Ef~{bMz;SP6Mh@BjA9DS{zg!vnE}=hz2w&Hr24viDm&UB3x)yW>h|Q zSb3r<&(24ih@;41NS&G-l_GL?qWpTaE3Imeu7jbZx>8xxT1?jM8*}l*Kcjl+(W(5X zb~vliC88TW6k0&O5OD`06nv@8Z9qPHMZC(H(>-z|N!uO_^~-@#IiyFw;?k7q21N{E zSP5!Qr=7q_0jET~j?)ZBs4UfrQR`xFDxF$eUOprdXaB|K4z!K&a`^NZRX)|8Vs9zG zYHdaN7!%=*=QJw&iQ{ozkHHDmp>qtc96ZmNYX@ATFuBaY>zuOD%LHRbbTkAjwI3IS(~q z!5ZzWU}hnE9Vzn=@8Jb=#yVbF$zG;AE1?)24V_#%C3J@9JSI%;I-+??*tv%ivz-uR zDqlxc56QZUbu``JWF_W9oQ%7Z?Z^@ya@)&f%XMxE+ldbpVh zoy>w`tN>lC4Bf08$5}0USv~q#0|pSHP&*({K>HC!gi=`E)vl9e3g>7@9#QD$=~hEr z&-`dyZ~+$y&$Z|!a%6ai-YOwx=BDhRfM_p2g<*$2N7|oUvvb=M7(()ezu;u_x$bzI~7!Drh_o1mk^qsq_{$VBcY%GyMUndriVX}aQ{ TdXJNnKc zP`SfF4kMXK7d1DfdpMFC|lW>+1W01n6`)CqR$+BI;S)<7@DDJDlf&zT+DU_0nf^(cu!8 z^}26C_3I&jeN})#hvy7{JyULG>-N4>*R4b<G%9M)m8o2Utb$w)Ztnl?4+A? zcfba@!A+az9ma5UkNwO3t5>>ZqM=M;VkVxLA5M%XU7Msn7dYzWhdRBk4sEXDBb_ez zBzr^N)1ufcPOM^sIIn&9^I8@z+JnN!3!-0?j}g&6P_Z+{5%S&>;FKdPfm6VB9PLyl~&GOkwm2AG6xNy0jT1Gg+b=hM=Ql@F( z6&hI*GQUQQ*E!CcoZy~Rejxn)m=^AHk~L28fYW@<86HZKV+ z0zo)Oa+7nEM!)2Gv|)|fXyY1P(WW(2w8UDY%&ggyU$Z~YMkhZ^i(x9I+t9=^OjmiI xaD6~ZOxV!fo3{+%tvrg|mgI)zUBVI$%daQQoTQlU^P)ZSD&|~}wQPDb@Gs>M`8NOn diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class index 967494228006efabcfa53aa020925d8c31ba7d54..bac6d809ad43a62f44b993b981076aaa94ad0204 100644 GIT binary patch delta 1045 zcmYjP+fEZv6kVrNn09&!wUnwru~sNhuoX}ND=I3=&5CkUyf!cav{qA!#;0QB!AN4# zOo)n*V4`U-F#!SveeeT}G4VGje1OIn_smqo!=8O+?REBL?eo(5+$Mef^Z5&aW`vVc z2N%c2yY7#SMHyOgCNIZN{|(GI2oF@ zXI3-QpWK@pOPS~Ix8^6^nYVMB>l<718{0E;?(H{I?ydRNt=UEQ=F%iFwr3VI)6X)~ z@B9+>V6TWGj$)K3N!BQtVL&OzKDd*YyDc6Z5K+ca4sY^fPo)Qy998f#ND~i+!*N-i zRqeH!qeg91xIYm$!LRf)zhJ^4n%&@M3;yQ93gm>--aJ-O8G8aV*fTOX7{9&8W$6tw0r?}RT4Vc z)iE@mgIw|kFp69x-wm)M#1sgf^{s;0#o{!~v*0Vpw-=_dd%5@n#h#EcG9#Ibtb(kT z>=E5@rLjMSoBF9Dh29k;eD;HMcLhFsAnR+%6Qw?lhGyM250n@eVAb!nq~I#aS->9s z_iPGz`ssWM#^q%yCEyZ$L-e@Rfvn^U;eZpnaTrA;eKAhZP^~m@8xmzSSvju2i`%Hg zDDD3Ns*#|Dzo5QnP={Bf$!j#=GNp4<@=@aUpqDfuCD4a{^6F`TFh-exe3+arv-vl@ zh+oJv16K*mVZ>0i31N`3ke;{>LqZeE;af+CuX+tGU(FioeFxXT)JY85B)OWPlGcDv y=l?J3&=#i(?$B1JHsyf2JVC2!6^LM?kc~hau2EP`cU?<<0|Xgx6SuPPZQw5nfz#*! delta 780 zcmYk4%TE(g6vlsd+A{5M`>;Gzp5-BrQd(Xj0u{kG0-6+bq0uxjA!&D^M< zD147MicUh+spHN&BOSIlNu5c(rh!IhTaEaFG&?_xlxlGfjdZ$A)6OY{vA(FNn(_EH ziVq5z++u!p)m|I3=%mY}Ta%>6x#Q~ycG9a!lW|`A+82WKYX;mcE0^t}yW(7a#kL4C zq&e;45y2-5h5t)uG$Y<&OLoC7A7(Min8~;nNwj15e;T>2o%>DBFV*bC169tg!27LH z5zHV?fC|at?&2Pz1UV;_2~gD%eS*HK{~#V-h$%6@ShHBS*r3>E@)PO+v&6k}7A`UW zkyyO;fD>+PI*JL2($RXrR!6p+q;5C(cL|r@^_6IB2<&=ILO56=QZ5Xa@bB%(C?Ds= zPZ1LzCqa!US}SVS(N8@?vevku7inRJHs(d1{&CVTc# z$<#ir?%Ia8c7>;&uvy^mpdV?u_&F#%#sOUY%p?(xldewMi- H^alI|Orv>Q diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class index 859b9d46861818f2587f7acbfb633e770cd450b6..984d1d6d28514074bfb1c60b406e25b76f2f8155 100644 GIT binary patch delta 1318 zcmai!Sx*yD6vzKF)0xs?C{o!M6{J)LOhH6M7C{uP3xW#nia^C(gu38XFn)uZ_)h!+ z5^ZgG@X04l^uaIUlaI##old3%NSbEux%b?2erKD``-)$c=J$WAUjg*u?TYzV?Fyh4 zy%zdlD=??#;x`lVvHAF%Np-)40T>Dj=i`a7*=gPkB&2@O!Vw%54O)|N%))WR#IP1_ zJ!#<-S{3Ls@kDG|+6`McgC_b@lk+z*YT+!-i4R)LH)dg6{LxB{ixw{7vM_xM%2n~s z7gHm<#Dq~Ny0yTkA3j|P77;S&r6+#sdxK9*JjF9Vo=e{a5j4IjFU4ce_>{9Gv_GknQ;T+j=d8Vw=lyK<2zX^&Q8{$(z_P7S%HQ-)COc( z#o&Bpg&ZfVm=encRY@7$qz-6ecOnkm;w@0%(p5QTx85O2X=`T7O5;$jh9G0fN^~?M zfEI^Tp0)P!G~GO9PP)QF5{z}%=W2?h5gmBA4TXyC40J)Iyr@G zpBmjP6x_!Hddh%N`pAH~gy(>=?cj)W&Pm<%e#i@X{fJVLf1yoCZR<%}*N`>`jdQFU zQ|jk@0{nn-|ctcV~_spU*!jYalG5m|2lT- z*nx2a6VMcNtQCrLEBX0iVX`RWCk#wtN+i{&cGAEpq(niD_|F(fBc{N$SSY6RGVh#$ z8Sz=|*3KKafQzD{ru!}%m_?LKW=*daET)%z=L}rMH8J3PrQ8tf&h%H0OI5^x7W1s= zc#2gw)?`LeWVN5p=L(iZ$?X$k?j;r=BHn8e)r~jek2^kl9U8pYg??hah-1|9M{tzh zfkBv-KW6=ha1*zn;I)C3 z&Cy2DP8)&~oiNY^A9@kwI`m;DBD5w&4O7-Uv-+!GEZ{Ex*uoN~Fuww^**nG_#D&u&aT~&C1?1K$lt;W^1awT>VDLGBbU0|V{QrIkG zn(t}z8+z%_mP^Rk-|RjaEPUG0!Fb72?TH$dl;*)Q`lCa;69dE zDH{&6MmBUwcpa!&!On)_lFP1sz-&4EkY168zX@q%D`|TJsX2)EqX{Tc1I4VSKzB diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index 15af448bb7faa003b20fece49232e1fcf99567f2..16a2789c84c8ebc23542c3250ed30d9cfd8f46b8 100644 GIT binary patch literal 28560 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 literal 28483 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 b?C;_Z+q=__p1|u}c0{2ax`UY00LK0eTFMX0 diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java b/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java index 891c15bb..4a672f94 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java @@ -8,10 +8,7 @@ public class UserState { private String username = ""; - public void userState(boolean isLogin, String username) { - if(isLogin) { - this.username = ""; - } + public void userState(String username) { this.username = username; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/IsLogin.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/IsLogin.java new file mode 100644 index 00000000..80c0c936 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/IsLogin.java @@ -0,0 +1,16 @@ +package com.sprint.mission.discodeit.app.router; + +import com.sprint.mission.discodeit.UserState; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class IsLogin { + private final UserState userState; + public boolean check(String service, int menu) { + boolean isLogin = !userState.getUsername().isEmpty(); + if(service.equals("User")) return isLogin && (menu == 2 || menu == 4); + return isLogin || menu == 3; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java index 98c46e6a..f2c9fdbd 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java @@ -1,6 +1,5 @@ package com.sprint.mission.discodeit.app.router; -import com.sprint.mission.discodeit.app.JavaApplication; import com.sprint.mission.discodeit.service.basic.BasicChannelService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -11,10 +10,15 @@ @RequiredArgsConstructor public class RouteChannelService { private final BasicChannelService channelService; - private final Scanner sc; + private final IsLogin isLogin; + private final Scanner scanner; public void channelService(int routeCRUD) { int menu; + if(!isLogin.check("Channel", routeCRUD)) { + System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); + return; + } switch (routeCRUD) { @@ -35,8 +39,8 @@ public void channelService(int routeCRUD) { System.out.println("2 : 전체 채널을 가져옵니다"); // TODO:try-catch로 안정성 확보하기 - menu = sc.nextInt(); - sc.nextLine(); + menu = scanner.nextInt(); + scanner.nextLine(); if (menu == 1) channelService.readChannel(); else if (menu == 2) channelService.readAllChannel(); @@ -48,7 +52,7 @@ public void channelService(int routeCRUD) { break; default: - return; + System.err.println("잘못된 입력값입니다."); } } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java index 3c05c45a..183145b7 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java @@ -14,14 +14,19 @@ public class RouteMessageService { private final FileUserRepository userRepository; private final FileChannelRepository channelRepository; private final BasicMessageService messageService; - private final Scanner sc; + private final Scanner scanner; + private final IsLogin isLogin; - public void messageService(int routeCURD) { + public void messageService(int routeCRUD) { int m; String senderUserName; String sendeeChannelName; + if(!isLogin.check("message", routeCRUD)) { + System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); + return; + } - switch (routeCURD) { + switch (routeCRUD) { case 1: /// create messageService.createMessage(); @@ -29,7 +34,7 @@ public void messageService(int routeCURD) { case 2: /// update System.out.println("누가 보낸 메시지인가요?"); - senderUserName = sc.nextLine(); + senderUserName = scanner.nextLine(); if (userRepository.isPresentUser(senderUserName)) { System.out.println("존재하지 않는 사용자입니다."); return; @@ -41,12 +46,12 @@ public void messageService(int routeCURD) { System.out.println("현재는 내가 보낸 메시지, 특정 채널 메시지를 조회하는 기능만 있습니다."); System.out.println("1. 내가 보낸 메시지 확인하기"); System.out.println("2. 채널에 있는 메시지 확인하기"); - m = sc.nextInt(); - sc.nextLine(); + m = scanner.nextInt(); + scanner.nextLine(); if (m == 1) { System.out.println("누가 보낸 메시지인가요?"); - senderUserName = sc.nextLine(); + senderUserName = scanner.nextLine(); if (userRepository.isPresentUser(senderUserName)) { System.out.println("존재하지 않는 사용자입니다."); return; @@ -54,7 +59,7 @@ public void messageService(int routeCURD) { messageService.getMessageForSender(senderUserName); } else if (m == 2) { System.out.println("어디로 보낸 메시지인가요?"); - sendeeChannelName = sc.nextLine(); + sendeeChannelName = scanner.nextLine(); if (channelRepository.isPresentChannel(sendeeChannelName)) { System.out.println("존재하지 않는 채널입니다."); return; @@ -66,7 +71,7 @@ public void messageService(int routeCURD) { /// delete System.out.println("현재는 내가 보낸 메시지를 삭제하는 기능만 지원하고 있습니다."); System.out.println("사용자명은 어떻게 되나요?"); - senderUserName = sc.nextLine(); + senderUserName = scanner.nextLine(); if (userRepository.isPresentUser(senderUserName)) { System.out.println("존재하지 않는 사용자입니다."); return; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java index c9ef8664..9327a7f3 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java @@ -10,10 +10,15 @@ @RequiredArgsConstructor public class RouteUserService { private final BasicUserService userService; - private final Scanner sc; + private final Scanner scanner; + private final IsLogin isLogin; public void userService(int routeCRUD) { int menu; + if(!isLogin.check("User", routeCRUD)) { + System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); + return; + } switch (routeCRUD) { /// create @@ -32,8 +37,8 @@ public void userService(int routeCRUD) { System.out.println("1 : 특정 사용자만 가져옵니다"); System.out.println("2 : 전체 사용자를 가져옵니다"); - menu = sc.nextInt(); - sc.nextLine(); + menu = scanner.nextInt(); + scanner.nextLine(); if (menu == 1) userService.getUserName(); else if (menu == 2) userService.getAllUserName(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index 03624adb..7ba9400b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -4,31 +4,42 @@ import java.io.Serial; import java.io.Serializable; -import java.text.SimpleDateFormat; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import java.util.Date; +import java.util.Map; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; @Getter public class Channel implements Serializable { - private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") + @Serial + private static final long serialVersionUID = 1L; + + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") .withZone(ZoneId.of("Asia/Seoul")); private final UUID id; private final Instant createAt; + private final String createUser; + private final Map accessUser = new ConcurrentHashMap<>(); + private final ChannelType channelType; private String name; private Instant updateAt; - @Serial - private static final long serialVersionUID = 1L; - public Channel(String name) { - Instant n = Instant.now(); - this.name = name; + public Channel(String name, String createUser, UUID createUserId) { + this(name, createUser, createUserId, ChannelType.PUBLIC); + } + + public Channel(String name, String createUser, UUID createUserId, ChannelType channelType) { + Instant now = Instant.now(); this.id = UUID.randomUUID(); - this.createAt = n; - this.updateAt = n; + this.name = name; + this.createUser = createUser; + this.channelType = channelType; + this.createAt = now; + this.updateAt = now; + accessUser.put(createUser, createUserId); } /// setter @@ -49,9 +60,10 @@ public void channelUpdater(String name) { public String toString() { return "====================\n" + "채널명 : " + this.getName() + "\n" + + "타입 : " + this.getChannelType() + "\n" + // 타입 정보 추가 "채널ID : " + this.getId() + "\n" + "채널수정일 : " + formatter.format(this.getUpdateAt()) + "\n" + "채널생성일 : " + formatter.format(this.getCreateAt()) + "\n" + "====================\n"; } -} +} \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/ChannelType.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ChannelType.java new file mode 100644 index 00000000..6a8745e8 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ChannelType.java @@ -0,0 +1,6 @@ +package com.sprint.mission.discodeit.entity; + +public enum ChannelType { + PUBLIC, + PRIVATE +} \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 31ef63e1..776a76fd 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -56,13 +56,6 @@ private FileChannelRepository() { throw new RuntimeException(e); } } - private static class Holder { - private static final FileChannelRepository INSTANCE = new FileChannelRepository(); - } - public static FileChannelRepository getInstance() { - return Holder.INSTANCE; - } - /// interface @Override diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java index f66bf77b..f11c8780 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java @@ -26,7 +26,7 @@ public boolean login() { UUID id = userRepository.userNameToId(name); if(!userRepository.check(id, password)) { - userState.userState(false, name); + userState.userState(name); System.out.println("성공!"); return true; } else { @@ -36,6 +36,6 @@ public boolean login() { } public void logout() { - userState.userState(true, ""); + userState.userState(""); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java index 3c7c4d7b..334b9f54 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -1,20 +1,25 @@ package com.sprint.mission.discodeit.service.basic; +import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.ChannelType; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.ChannelService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; import java.util.Scanner; +import java.util.UUID; @Service @RequiredArgsConstructor public class BasicChannelService implements ChannelService { private final Scanner scanner; private final FileChannelRepository channelRepository; - + private final FileUserRepository userRepository; + private final UserState userState; @Override public void createChannel() { @@ -26,7 +31,21 @@ public void createChannel() { return; } - channelRepository.save(new Channel(name)); + String createUserName = userState.getUsername(); + UUID createUserId = userRepository.userNameToId(createUserName); + + System.out.println("해당 채널의 성격을 알려주세요. (숫자 혹은 뒤의 영어를 입력해주시면 됩니다.)"); + System.out.println("1. PUBLIC"); + System.out.println("2. PRIVATE"); + String type = scanner.nextLine().trim(); + + if(type.equalsIgnoreCase("public") || type.equals("1")) { + channelRepository.save(new Channel(name, createUserName, createUserId)); + } else if (type.equalsIgnoreCase("private") || type.equals("2")) { + channelRepository.save(new Channel(name, createUserName, createUserId, ChannelType.PUBLIC)); + } else { + System.err.println("잘못된 입력값입니다. 처음으로 돌아갑니다."); + } System.out.println("잘 들어갔어요!"); } @@ -72,6 +91,12 @@ public void updateChannel() { System.out.println("잘 변경되었어요!"); } + @Override + public void inviteUserInPrivateChannel() { + System.out.println("현재 당신이 참여하고 있는 PRIVATE 채널은 다음과 같습니다."); + + } + @Override public void deleteChannel() { System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); From 0b2f97980f3a52f79b5e4bdafdf37d5e33ed9af2 Mon Sep 17 00:00:00 2001 From: Alpha Date: Fri, 30 Jan 2026 16:32:42 +0900 Subject: [PATCH 28/35] =?UTF-8?q?Feat:=20Add=20ChannelService=20type,=20et?= =?UTF-8?q?c..=20=EC=B1=84=EB=84=90=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=ED=95=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20ResponseDto=EB=A5=BC=20=EC=9D=B4=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EC=B1=84=EB=84=90=20=EC=84=9C=EB=B9=84=EC=8A=A4?= =?UTF-8?q?=EB=A5=BC=20=EA=B3=A0=EB=8F=84=ED=99=94=ED=95=98=EC=98=80?= =?UTF-8?q?=EC=9C=BC=EB=A9=B0=20=ED=96=A5=ED=9B=84=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EC=9D=98=20=EB=A7=88=EC=A7=80=EB=A7=89=20=EC=9D=BD?= =?UTF-8?q?=EC=9D=80=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=82=B4=EC=9A=A9=20?= =?UTF-8?q?=EB=93=B1=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=EC=9D=B4=20=ED=95=84=EC=9A=94=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../app/router/RouteMessageService.class | Bin 3492 -> 3288 bytes .../mission/discodeit/app/router/Router.class | Bin 3914 -> 3914 bytes .../mission/discodeit/entity/Channel.class | Bin 3151 -> 3519 bytes .../repository/ChannelRepository.class | Bin 620 -> 628 bytes .../repository/MessageRepository.class | Bin 729 -> 704 bytes .../file/FileChannelRepository$Holder.class | Bin 688 -> 0 bytes .../file/FileChannelRepository.class | Bin 8878 -> 12651 bytes .../file/FileMessageRepository.class | Bin 12606 -> 12123 bytes .../repository/jcf/JCFChannelRepository.class | Bin 3635 -> 3456 bytes .../repository/jcf/JCFMessageRepository.class | Bin 7985 -> 6862 bytes .../discodeit/service/MessageService.class | Bin 416 -> 434 bytes .../compileJava/previous-compilation-data.bin | Bin 28560 -> 29144 bytes .../sprint/mission/discodeit/UserState.java | 12 +- .../mission/discodeit/app/router/IsLogin.java | 6 +- .../app/router/RouteMessageService.java | 27 +--- .../mission/discodeit/app/router/Router.java | 4 +- .../discodeit/dto/CreateMessageDto.java | 14 ++ .../mission/discodeit/dto/FindAllUser.java | 4 - .../mission/discodeit/dto/FindChannelDto.java | 20 +++ .../discodeit/dto/MessageResponseDto.java | 13 ++ .../discodeit/dto/ResponseChannelDto.java | 45 ++++++ .../mission/discodeit/entity/Channel.java | 25 ++- .../mission/discodeit/entity/ReadStatus.java | 12 +- .../repository/ChannelRepository.java | 3 +- .../repository/MessageRepository.java | 10 +- .../repository/ReadStatusRepository.java | 4 + .../file/FileChannelRepository.java | 145 ++++++++++++++---- .../file/FileMessageRepository.java | 68 ++++---- .../file/FileReadStatusRepository.java | 111 ++++++++++++++ .../repository/jcf/JCFChannelRepository.java | 6 +- .../repository/jcf/JCFMessageRepository.java | 55 +++---- .../discodeit/service/MessageService.java | 2 +- .../discodeit/service/ReadStatusService.java | 4 + .../discodeit/service/auth/AuthService.java | 2 +- .../service/basic/BasicChannelService.java | 22 ++- .../service/basic/BasicMessageService.java | 81 ++++++---- .../service/basic/BasicReadStatusService.java | 32 ++++ .../service/basic/BasicUserService.java | 28 ++-- .../1e0d54e4-d371-4ac2-b912-b3514b0ffccc.ser | Bin 381 -> 0 bytes .../dfebc555-001b-489f-92a3-642abc3b97f7.ser | Bin 381 -> 0 bytes 42 files changed, 545 insertions(+), 210 deletions(-) delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository$Holder.class create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateMessageDto.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/FindAllUser.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/FindChannelDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageResponseDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/ResponseChannelDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java delete mode 100644 file-data-map/User/1e0d54e4-d371-4ac2-b912-b3514b0ffccc.ser delete mode 100644 file-data-map/User/dfebc555-001b-489f-92a3-642abc3b97f7.ser diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index c95faae7957a35f5d98e91cf1d33bd85f6e3b93e..ca1b228fbb7b586a8b284d17703bfd2d7b23e5b2 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6d#0RS|t1n2+& literal 17 VcmZQxwaR1i+k`Ae1~6cG0RS|b1lIrn diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index fcfa2a407bd6fd63dd055b95f04139f24e1d0e83..59a36e2bf0622cbac5f3efc7110e7077857fcbbd 100644 GIT binary patch literal 8 PcmZQzV4TCdgryGv1<(QE literal 8 PcmZQzV4TDLUhg9S2T%gD diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class index 1303c670dd7b6eec3e748407b3bd9ac247d3ae17..ece9aef61654765c8ce5f78e1ac7912722c54712 100644 GIT binary patch delta 1229 zcmZ9LTW=dx5XXPV*Vt^t;-+cc#3_k{<2W%%QptsCbAfBuf=YIAA03fIx@`_yR=*B={Ie6=KdNI1&$MXLfGqKmVEYS~Gt4`i_q;P5|A7zTu26>IQLwjaRwx#=c+F+JB>30WnepL}m4bARWTw2P{ zNXr8(7(Bxn#U2TDvq7_4)YSh2ht7XB6WmgBI^jiwqSy1PRkqqaM=7xu=4FF2Nrma% zR4&-X(S-|Z)`|cQ9WU7>XHs`;8?1B59rrJ}E8(N=_u<|>vF$6pj76tXvWpY$-LR$J zbWe1od|7W;H$q+RryY0PsYqX>Js7tV`Mg$=X@`jEs-nd>&$1^E@}MV$Urz=lO8aFQ zMEX!1P<8wS#QJ;sYg8=U(;{*cV~hJ^dt2;l^xPKTk8+e89hZQWnTBuv+ELAQG?YD&fD_j*oLOZYWnn{uh(RueN+gsfsd`8(!Pa zmc6J@@U)6b>=W2B6g(9yACC-P_1G=YK&FKakmR~IG~_j#X&R(G#EdLJmb1O%XrnfIV!MeFx(l^!kQjA9+vFc z{(muc^bTo#k-DNDCk_h~raoCoE!=uAJC}-0`cktOlNYc0Qd755^Pi;_uA~-bl9w(d zFWoG2VJD8Lcow;&A3xb2jA(6II2;_%oM;s2eK0po8VNRftUaR1h+9j-)x!Vl2dc3`Kt|*?@bkhrpSJ6MB5PQ!Z1b@jH=L$+m0PZrBa=_ znFV4JSt8?{l4A@jxyE&+Pn`YG>9?qU4)f{l@R*OV#g!f9`x z&B5IQfqaZ{Kgpldu+k1u6Ig-pC^-pa%tKwqW1j2;o>eDlM=4E_LCr@%dWN-V-39*~1vh4)98SZAF an;~vG-I!#U%yo{t1ykntJf_pu8Q>qAc0~IC diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class index 1931e91038994531cbdfa2a7291f95d3d989aa95..a13baf8c51f90958b8a0510c81b1fc9973ff1022 100644 GIT binary patch delta 14 VcmX>lcS>$UEEA*O<~XJ|JOClcS>$UEE8ki<~XJ|JOC>b1zG?A diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class index 984d1d6d28514074bfb1c60b406e25b76f2f8155..458522fd498d5444af3619b82b6a10efef59d14c 100644 GIT binary patch literal 3519 zcmbVOYgZFj6x}!E0m%d;0*ddqB!EGws06WyRk3KSF|qbNBvTkoX6R&s%l@jitMSpU z)gRD5(0|j_eeVpJF@^<{54o>%_c>>ueb4aszkmD%;3i%TAcDRGq8eg|3*@VIBj4O~ zOv}wT%x2THt$fXFR_&T$x_QHLP4{(vc|*4>qyF^urXdi2T)w@!vMg|Ub)R<&N%UhN zfux2MG=a%|+^63K(=y#ffsKjP7y6c-uj|%&zT`6W^}p|X_c%xhVCjhtU67^$x4d-|<;hQuMc^$nR+QOiCuzG~BZ9Rqo%@a33oI3GP2qY>bB8_+rjh zWQ3nHRbhhNlG@UXicj zq2X@Wwa2={lDp)dPtBLJCl0>*v|g(%sb1jqf%7|N7(73jPrvL5o|NKps{DD13B$$K z4Obo=ebQn}Zx}1qmf19!=#pjG>?TwLqspw-?Z%q@GJnso42N%}#$-~wx~$%$d}Qg) z%8PSkyDNmdF*^~>JpVy!8{RhUG&g~(-FthK)d=xr0D&&l(=G1>?tkcQP-Y!8AU*~< z+6zwT5~)lO#;cVib-OXJ=auZ1Q#J0I@{MZ#olEiw<21X*AOs#^07vi`UvU0}k28W2 zza{LvoM&V!R3kg68u@LZU0K;xc+Ss9XZ?(8wp4Y-zN|*}M~*|ZN#RRkKj-Qh|3Qdy zOywr0rhkKYi^Q+W_$&S&sn4n$7rn4LITkxP7CSi>{Tvy-A~{Or8Tz_GGG*Sw(GT*z%B_g}RFDD5`5af0 zw0djZZ7`dSD!-hqwxg4MA`IGK5ok;&N7vSyQ0 z-8J*j=b3gvp`Y@MJLqXteZ8eoV-+Kc?STll!40V}qm#lNKLt(sdXEQ@usl3hi&W&T zP$F8#mFBzh`H>C;exz2sM5O9v31bAG_=S@QY?9zZkQK%=_?)zKi?vPR+5M!SK=dH{J1$ijyy+C2fsy8#dF2)Nk=_!FES nsm^u-9_|77VPwsooK1BDjqeKN_N?N3H_(w?fm)IZPluXEkcplfL1QH+S`&Wu#)W3-3^xBFF4~& zzw|>p<4o&J`?a6yj8Mku^au2>kl)bhb9Of*LMnDM$vNlEd!G0HzWet-PyYhYk8c!2 zP!mI~iYV#?TJGwLx|Y+eS?&7tT_fWO)Lk+y)4MEC)7>*wk9vV)OMKSvFDFJvi$DF4 z$YzU={!EOF6uZpE zGSP>)ZCgevD-f|~1Uk2o7clopv-Yakhy4Qe_e^h2(#zUb;J%o)4LE>8R zNWn96+T>(vh_P{WD{JS2L%bwtgTa^bvWi!5hM_STpO!$zvmEDCyo&P-LdG$eNdr`U zSA`2IRlcaA&u1+xWPMg?N56{8(heoKKj|8dLh|b>24p2Px`sCyvP=4)iXprq5F>re zx4f-d!c0ltt13p2BJXU8x3y%YUs_={OV&44q@|OhWKCryWlY6&8Jk8@$_glWOT|r$ zvmS$(3tR~0`zhxc`32k2bJ|3>8OUS|*R`Ee7H$?isbZ=mW-#<%oIT-f74P7-z@EH5 zZw%U2M)z(p%enLO!xgw)#qP}k+L{zwDPe+DDi*`L0ZpEjI{Kx8~^ zXDCspT&fTfYrQ#>UO18dAC=lCAlTAcMh$Py&fd@+CJ>93FwL2umV-#M1=f3ZkRAdm zGoYe5c9wGJ`Rz}j{bqrEB5$OuMbkB@`G95Fp6=0Ylo(Iv?EJJnuU$1P!(lmOsa+FA z1z8~LfJHHG7o3bSY)a3oVZS*k14ApW*tX|-j=m6>5DfH?+X0Afbl!jAuJ!dsrExkTC!qVT;HaZb#a-=L-vcTeGKv^327Fr3Ir3`<)8@ zV6r_^7$L-uW{-(L;0|IO zj2t>Fm$+=U{>ql>uWXH6BeK=|EBhzc{df=W^X>;e?L#zjAH_8JGNk;98q{( zZ@iW$uEMDf1T!rw_VBD{S7b2Oj^CaDe5DzN!W z``GJggVg>UPx4Yd^*chcAu0beLEBIg1*B*rjT$*Tm0uHv;aN;Abv zPF4c?*Urm9#8}OGy__}28Dz22F0|hlgpQ?bZ+kmaB20M>b zX!$fRO3OQvs~G0@TJj0nxsI;lM!22e_9<=wzmqQl8K(X892f*ahezqXCXVC1bn;Qs zq-}whIzlA`a>(GEHjtB~`u3ef4zK)bdD;{2-u zbapdP>$X4(bmdmlE^P*C+ZKp#4OM`;HUsV67Km>URe&yR2HLX?Pz^q!%Oh~$a;>NH TJ$^sIXFMs~eU2~jHTL}rk0IA1 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class index 384191d8ab8bd0a92f0c211356e3dc006eb846f6..0ce15532e37d1f59d41d5e76cb01c33b9bf57826 100644 GIT binary patch delta 40 wcmaFE@`YtX8Y83Uit*D)Rg08rfrod5s; diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class index 977b753d0869e7d6322c72ab594699dbf911410b..55d8ef924b076e5aae4e4c7565726ccc3af2c5ab 100644 GIT binary patch delta 325 zcmcb~dVrPd)W2Q(7#J9A8N?@Yr8AmNe#fXhnUP6k;#%2y&g6{5yu8#L&lE-mw$kF% zA`nA3J+;I$&lw`)n_66)n4ZeWprqlGl~|UjUs{rxqaPaT>0+&kB;b=-Tw=}0z!{vG zo|jlsS_IS(Nl=3gqt8SES^bofe0``jL8-+B`FX{uE+zTac0lt$PJv3f8WI&Y?U=U~K@0%wpGXh=vvjSUxXYda}R$}ZX6n)uf|_yhb=#%ZY( zA_orJX5Z|*dGltze?Gqe;1*8H;4rxM)zmdJEu?j)!Wf~X8wlg80EKlm&Xf^W=?`~^ z#_$kd7DySk80<~>J9i^4L-*-zg1%+Y@HKLa*?X#RF~}czmMVqaO_0tj(GSs%Rq)I; zpQ1%=7?gb_ElMiXG$;ea`!Saiqeptdpq65KWKc6`g=qUSi!bz?ta{>OZV8 zFR{uI0eK%_L_RHg{Yy>IBBRz>ImMU%hq`Oozit diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository$Holder.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository$Holder.class deleted file mode 100644 index 6581a9884e8ed2ac157c355aa224a399ba4495f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 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 P05*uQx>pUW!-#wv3|#JD diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class index 95bf0678e193070083de2426e19a08d7340f674b..f0d12420ee4280a08d9254039b3bc48f0b044805 100644 GIT binary patch literal 12123 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 Ogvr5A<>&HC)c+r$jzxd~ literal 12606 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class index a448a62c31419c348a42642a4ca474f422362d43..57afae7ea15d3f06224c6d7ccf01c49554f8e627 100644 GIT binary patch delta 1125 zcmbu7+fEZv6o&tqX&E{_2$Qx!%0Yq#iZm6c-atvv7R#Zi6g<#+Dy2%XwkEB{EAdAbq)m~7rYR~HzqI>OTvQTY3Yc^Wd z%znAisMfRXru|a?nOuSj6Cs>}f-9_`BEx^P=RXTSSH0-tj%E8}|EzVD`%HKk2N{Fh z8^SR299II|1;ns|A%1;W#hN^K(jSS4bAkdy8P|~~ciE2nF0OQmqvVa@G)6JbM-Zdj z1x&a^k!|1_&tK=NSK$vN?1qGW_T^s-*cf!ivlKQ(Y14e-NMHs@oW~qyB{;>V=6Gro z1=)<%DPds?+ft~7o6J;l&dIVGZjn0#<%B4Y4!@4u@*Rev!xEw*@Toixo)pS{yrWEJWH*!n7F=ynJ+NDBCX&(RU9ctT+<*rOFOkQ^g)(w=45Th69aBT zq74m7$hF%;63f_?4R`|cg{~FyY+wT;yzD8?RaimH2)s$hTq1KOGsqjMV2=#f6wX|# zF7|C8l@nOUd)pG_xN5S4n(P^}7wW`P$6yZYQFq2YSGYroMb5a?k@t^R_!#?g0`G!} rcGn?g;&+L!{1q>{SEM)pa7aZ?yT+*E08jY!aAO#CW`@lCcnae;PknM5 delta 1309 zcmbu7%~BIV6opUEBpH*5AY)J@i2RfaC>0^B0ILK<5CRB@{D}}TY9J6L1OAIkw>m4! zm2W_S8(jDRK7kucAH$8}>7J>CSXNo3l~kv@bNjpJ+T}fsJHlJ(UxvXlP6bvvDj^<*=d)S{ivu6CH{#U%rMVf5p& zK;%zB;iq6U#Lx-k^SFh&H97Fb1r#M#+II%f-5ML2oaVPJG8 zsXy1mUFVzst>|)I1p<@D|Skk|U`=IoDZSXPyb? z<$>1zLWU}`kK-6$pFp+BaD-7nt(QUW=5T}W=XvWFJV^8`78FbiCN?Fk8V1*T8a+j+ zr_sPqGa3;?6IyUaf!k=Zg|Cvhsm#UmDdJefEhRLL6n7dqCskS#lodR#DV#_^U z5ZJ}=MY#?L$d2o(hq}jeP#DUtEImp z)_S4p`0YR5{cUE}RJ9*+)$j<9 S`Rij~1W&jNshx?Z2>k*IgsIg4 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.class index 5b23a8dbfde5aee7ae3aa45968862e152e473bd1..8c0ba5b57949e9f12ebec90d0824547dc0ba8612 100644 GIT binary patch literal 6862 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 Invd%L07uZ0A^-pY diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class index a6d7b5ae20db5beb400978c196090d40a050cb32..02017635d408377c60ccfce37b6787798d538e67 100644 GIT binary patch delta 114 zcmZ3$yos6X)W2Q(7#J9A8AK*>9g`K-@X1OnOVlqd$;{CY4fS-f)(m50U@I+7E%Hp6 tc)Q(>hk=oS6R4h*k%5=?!cE diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index 16a2789c84c8ebc23542c3250ed30d9cfd8f46b8..72fac949f4c2ea458994b7bb6ad7b88aefac8104 100644 GIT binary patch literal 29144 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

Fv6 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 diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java b/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java index 4a672f94..50d9e683 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/UserState.java @@ -3,12 +3,20 @@ import lombok.Getter; import org.springframework.stereotype.Component; +import java.util.UUID; + @Component @Getter public class UserState { - private String username = ""; + private String userName = ""; + private UUID userId = null; + public void userState(String username, UUID userId) { + this.userName = username; + this.userId = userId; + } public void userState(String username) { - this.username = username; + this.userName = ""; + this.userId = null; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/IsLogin.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/IsLogin.java index 80c0c936..53a78388 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/IsLogin.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/IsLogin.java @@ -9,8 +9,10 @@ public class IsLogin { private final UserState userState; public boolean check(String service, int menu) { - boolean isLogin = !userState.getUsername().isEmpty(); - if(service.equals("User")) return isLogin && (menu == 2 || menu == 4); + boolean isLogin = !userState.getUserName().isEmpty(); + if(service.equals("User")) { + return isLogin || menu != 4; + } return isLogin || menu == 3; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java index 183145b7..b3d41b72 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.app.router; +import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.basic.BasicMessageService; @@ -16,10 +17,10 @@ public class RouteMessageService { private final BasicMessageService messageService; private final Scanner scanner; private final IsLogin isLogin; + private final UserState userState; public void messageService(int routeCRUD) { int m; - String senderUserName; String sendeeChannelName; if(!isLogin.check("message", routeCRUD)) { System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); @@ -33,13 +34,7 @@ public void messageService(int routeCRUD) { break; case 2: /// update - System.out.println("누가 보낸 메시지인가요?"); - senderUserName = scanner.nextLine(); - if (userRepository.isPresentUser(senderUserName)) { - System.out.println("존재하지 않는 사용자입니다."); - return; - } - messageService.updateMessage(senderUserName); + messageService.updateMessage(userState.getUserName()); break; case 3: /// read @@ -50,13 +45,7 @@ public void messageService(int routeCRUD) { scanner.nextLine(); if (m == 1) { - System.out.println("누가 보낸 메시지인가요?"); - senderUserName = scanner.nextLine(); - if (userRepository.isPresentUser(senderUserName)) { - System.out.println("존재하지 않는 사용자입니다."); - return; - } - messageService.getMessageForSender(senderUserName); + messageService.getMessageForSender(userState.getUserId()); } else if (m == 2) { System.out.println("어디로 보낸 메시지인가요?"); sendeeChannelName = scanner.nextLine(); @@ -70,13 +59,7 @@ public void messageService(int routeCRUD) { case 4: /// delete System.out.println("현재는 내가 보낸 메시지를 삭제하는 기능만 지원하고 있습니다."); - System.out.println("사용자명은 어떻게 되나요?"); - senderUserName = scanner.nextLine(); - if (userRepository.isPresentUser(senderUserName)) { - System.out.println("존재하지 않는 사용자입니다."); - return; - } - messageService.deleteMessage(senderUserName); + messageService.deleteMessage(userState.getUserName()); break; default: return; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java index 49b86527..0f5e1fc1 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java @@ -31,11 +31,11 @@ public void route() { int menu; while(true) { - boolean isLogin = userState.getUsername().isEmpty(); + boolean isLogin = userState.getUserName().isEmpty(); System.out.println("===================="); System.out.println("0. 프로그램 종료하기"); System.out.println(isLogin ? "1. 로그인하기" : - "1. 로그아웃하기 (현재 사용자 : " + userState.getUsername() + ")"); + "1. 로그아웃하기 (현재 사용자 : " + userState.getUserName() + ")"); System.out.println("2. 사용자 관련 서비스"); System.out.println("3. 채널 관련 서비스"); System.out.println("4. 메시지 관련 서비스"); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateMessageDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateMessageDto.java new file mode 100644 index 00000000..1098bddc --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateMessageDto.java @@ -0,0 +1,14 @@ +package com.sprint.mission.discodeit.dto; + +import com.sprint.mission.discodeit.entity.BinaryContent; + +import java.util.List; +import java.util.UUID; + +public record CreateMessageDto( + UUID userID, + UUID channelId, + String content, + List binaryContents +) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindAllUser.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindAllUser.java deleted file mode 100644 index e3f17f0d..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindAllUser.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.sprint.mission.discodeit.dto; - -public class FindAllUser { -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindChannelDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindChannelDto.java new file mode 100644 index 00000000..b19df475 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindChannelDto.java @@ -0,0 +1,20 @@ +package com.sprint.mission.discodeit.dto; + +import com.sprint.mission.discodeit.entity.ChannelType; +import lombok.NonNull; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; + +public record FindChannelDto( + String channelInfo, + ChannelType channelType, + Instant lastMessage +) { + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); + + public @NonNull String getInfo() { + return channelInfo + "\n마지막 메시지 : " + FORMATTER.format(lastMessage); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageResponseDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageResponseDto.java new file mode 100644 index 00000000..1181aaed --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageResponseDto.java @@ -0,0 +1,13 @@ +package com.sprint.mission.discodeit.dto; + +import java.util.UUID; + +public record MessageResponseDto( + UUID id, + UUID channelId, + UUID userId, + String createAt, + String updateAt, + String content +) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/ResponseChannelDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/ResponseChannelDto.java new file mode 100644 index 00000000..adf8935d --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/ResponseChannelDto.java @@ -0,0 +1,45 @@ +package com.sprint.mission.discodeit.dto; + +import com.sprint.mission.discodeit.entity.ChannelType; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +public record ResponseChannelDto( + String channelName, + UUID channelId, + ChannelType type, + Instant createAt, + Instant updateAt, + String createUser, + Map accessableUsers +) { + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); + + @Override + public String toString() { + String result = "====================\n" + + "채널명 : " + channelName + "\n" + + "채널ID : " + channelId + "\n" + + "타입 : " + type + "\n" + + "채널생성일 : " + FORMATTER.format(createAt) + "\n" + + "채널수정일 : " + FORMATTER.format(updateAt) + "\n"; + + String accessUserResult = ""; + if(type.equals(ChannelType.PRIVATE)) { + try { + accessUserResult = accessableUsers.entrySet().stream() + .map(entry -> "멤버명 : " + entry.getKey() + "\n멤버 ID : " + entry.getValue() + "\n") + .collect(Collectors.joining()); + } catch (Exception ignore) {} + } + + if(accessUserResult.isEmpty()) return result + "관리자: " + createUser; + + return result + "관리자: " + createUser + "\n" + accessUserResult; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index 7ba9400b..0e73ccdf 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -10,19 +10,17 @@ import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; @Getter public class Channel implements Serializable { @Serial private static final long serialVersionUID = 1L; - - private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초") - .withZone(ZoneId.of("Asia/Seoul")); - private final UUID id; private final Instant createAt; private final String createUser; - private final Map accessUser = new ConcurrentHashMap<>(); + private final Map accessableUser = new ConcurrentHashMap<>(); + private final Map userReadStatusMap = new ConcurrentHashMap<>(); private final ChannelType channelType; private String name; private Instant updateAt; @@ -39,7 +37,7 @@ public Channel(String name, String createUser, UUID createUserId, ChannelType ch this.channelType = channelType; this.createAt = now; this.updateAt = now; - accessUser.put(createUser, createUserId); + accessableUser.put(createUser, createUserId); } /// setter @@ -56,14 +54,11 @@ public void channelUpdater(String name) { setName(name); } - @Override - public String toString() { - return "====================\n" + - "채널명 : " + this.getName() + "\n" + - "타입 : " + this.getChannelType() + "\n" + // 타입 정보 추가 - "채널ID : " + this.getId() + "\n" + - "채널수정일 : " + formatter.format(this.getUpdateAt()) + "\n" + - "채널생성일 : " + formatter.format(this.getCreateAt()) + "\n" + - "====================\n"; + public void addAccessUser(String userName, UUID userId) { + accessableUser.put(userName, userId); + } + + public void removeAccessUser(String userName) { + accessableUser.remove(userName); } } \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java index 98046ae7..ead9442f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java @@ -2,23 +2,25 @@ import lombok.Getter; +import java.io.Serializable; import java.time.Instant; import java.util.UUID; @Getter -public class ReadStatus { - private final UUID id = UUID.randomUUID(); +public class ReadStatus implements Serializable { + private final UUID id; private final UUID userId; private final UUID channelId; - private Instant readAt; + private Instant lastReadAt; public ReadStatus(UUID userId, UUID channelId){ this.userId = userId; this.channelId = channelId; - readAt = Instant.now(); + id = UUID.randomUUID(); + lastReadAt = Instant.now(); }; public void updateReadAt() { - readAt = Instant.now(); + lastReadAt = Instant.now(); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java index 9a32c298..3f6e4bb0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.repository; +import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.entity.Channel; import java.util.List; @@ -9,7 +10,7 @@ public interface ChannelRepository { boolean save(String oldName, String newName); String readChannel(String name); - List readAllChannel(); + List readAllChannel(); boolean deleteChannel(String name); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java index 9e05c32c..b8106bdf 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -1,16 +1,18 @@ package com.sprint.mission.discodeit.repository; +import com.sprint.mission.discodeit.dto.MessageResponseDto; + import java.util.List; import java.util.UUID; public interface MessageRepository { - boolean createMessage(String content, String sendeeChannelName, String senderUser); + boolean createMessage(String content, UUID channelId, UUID userId); - List getInChannelMessage(String channelName); + List getInChannelMessage(UUID userId); - List getMessageForSender(String senderName); + List getMessageForSender(UUID userId); boolean updateMessage(UUID id, String content); - boolean deleteMessage(String userName, UUID id); + boolean deleteMessage(UUID userId, UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusRepository.java new file mode 100644 index 00000000..349a0491 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository; + +public interface ReadStatusRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 776a76fd..ebb12054 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -1,31 +1,41 @@ package com.sprint.mission.discodeit.repository.file; +import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.ChannelType; import com.sprint.mission.discodeit.repository.ChannelRepository; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.Instant; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @Repository +@RequiredArgsConstructor public class FileChannelRepository implements ChannelRepository { - private final Map channelNameMap = new ConcurrentHashMap<>(); - private final Map channelIdMap = new ConcurrentHashMap<>(); - private final Path DIRECTORY; + private final Map publicChannelNameMap = new ConcurrentHashMap<>(); + private final Map publicChannelIdMap = new ConcurrentHashMap<>(); + private final Map privateChannelNameMap = new ConcurrentHashMap<>(); + private final Map privateChannelIdMap = new ConcurrentHashMap<>(); + private final UserState userState; + private Path DIRECTORY; private final String EXTENSION = ".ser"; private Path resolvePath(UUID id) { - String EXTENSION = ".ser"; return DIRECTORY.resolve(id + EXTENSION); } - /// Singleton - private FileChannelRepository() { + @PostConstruct + public void init() { this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Channel.class.getSimpleName()); if(Files.notExists(DIRECTORY)) { try { @@ -49,8 +59,13 @@ private FileChannelRepository() { throw new RuntimeException(e); } }).forEach(channel -> { - channelNameMap.put(channel.getName(), channel); - channelIdMap.put(channel.getId(), channel); + if (channel.getChannelType() == ChannelType.PRIVATE) { + privateChannelNameMap.put(channel.getName(), channel); + privateChannelIdMap.put(channel.getId(), channel); + } else { + publicChannelNameMap.put(channel.getName(), channel); + publicChannelIdMap.put(channel.getId(), channel); + } }); } catch (IOException e) { throw new RuntimeException(e); @@ -69,8 +84,17 @@ public boolean save(Channel channel) { ObjectOutputStream oos = new ObjectOutputStream(fos)){ oos.writeObject(channel); oos.flush(); - channelNameMap.getOrDefault(channel.getName(), - channelNameMap.put(channel.getName(), channel)); + if (channel.getChannelType() == ChannelType.PUBLIC) { + publicChannelNameMap.getOrDefault(channel.getName(), + publicChannelNameMap.put(channel.getName(), channel)); + publicChannelIdMap.getOrDefault(channel.getId(), + publicChannelIdMap.put(channel.getId(), channel)); + } else { + privateChannelIdMap.getOrDefault(channel.getId(), + privateChannelIdMap.put(channel.getId(), channel)); + privateChannelNameMap.getOrDefault(channel.getName(), + privateChannelNameMap.put(channel.getName(), channel)); + } return true; } catch (IOException e) { @@ -81,16 +105,31 @@ public boolean save(Channel channel) { @Override public boolean save(String oldName, String newName) { - Channel channel = channelNameMap.get(oldName); - Path path = resolvePath(channelNameMap.get(oldName).getId()); + Channel channel = publicChannelNameMap.getOrDefault(oldName, null); + boolean isPrivate = false; + + if (channel == null) { + channel = privateChannelNameMap.getOrDefault(oldName, null); + isPrivate = true; + } + + if (channel == null) return false; + + Path path = resolvePath(publicChannelNameMap.get(oldName).getId()); try(FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)){ oos.writeObject(channel); oos.flush(); - channelNameMap.put(newName, channel); - channelNameMap.remove(channel.getName()); + if (!isPrivate) { + publicChannelNameMap.put(newName, channel); + publicChannelNameMap.remove(oldName); + } else { + privateChannelNameMap.put(newName, channel); + privateChannelNameMap.remove(oldName); + } + channel.channelUpdater(newName); return true; @@ -102,38 +141,75 @@ public boolean save(String oldName, String newName) { @Override public String readChannel(String name) { - try { - return channelNameMap.get(name).toString(); - } catch (Exception e) { - return null; - } + if(publicChannelNameMap.containsKey(name)) + return publicChannelNameMap.get(name).toString(); + if(privateChannelNameMap.containsKey(name)) + return privateChannelNameMap.get(name).toString(); + return null; + } + + public ChannelType getChannelType(String name) { + if(publicChannelNameMap.containsKey(name)) + return publicChannelNameMap.get(name).getChannelType(); + if(privateChannelNameMap.containsKey(name)) + return privateChannelNameMap.get(name).getChannelType(); + return null; } public UUID readChannelId(String name) { try { - return channelNameMap.get(name).getId(); + return publicChannelNameMap.get(name).getId(); } catch (Exception e) { return null; } } - @Override - public List readAllChannel() { - if(channelNameMap.isEmpty()) { - return null; - } - return channelNameMap.values().stream().toList(); + @Override // FIXME: 접근 권한 있는 채널만 조회하도록 변경해야 함. + public List readAllChannel() { + List result = new ArrayList<>(); + + result.addAll(publicChannelNameMap.values().stream().map(this::requestChannelInfo).toList()); + result.addAll(accessAblePrivateChannel(userState.getUserName()).stream().toList()); + return result; + } + + private List accessAblePrivateChannel(String userName) { + List requestDto = new ArrayList<>(); + privateChannelIdMap.values().stream() + .filter(channel -> channel.getAccessableUser() != null && channel.getAccessableUser().containsKey(userName)) + .forEach(channel -> requestDto.add(requestChannelInfo(channel))); + + return requestDto; + } + + private ResponseChannelDto requestChannelInfo(Channel channel) { + String name = channel.getName(); + UUID id = channel.getId(); + ChannelType type = channel.getChannelType(); + Instant createAt = channel.getCreateAt(); + Instant updateAt = channel.getUpdateAt(); + String createUser = channel.getCreateUser(); + Map accessableUser = null; + try { + accessableUser = channel.getAccessableUser(); + } catch (Exception ignore) {} + + return new ResponseChannelDto(name, id, type, createAt, updateAt, createUser, accessableUser); + } + + public void invitePrivateServer(String channelName, String userName, UUID userId) { + privateChannelNameMap.get(channelName).addAccessUser(userName, userId); } @Override public boolean deleteChannel(String name) { - UUID id = channelNameMap.get(name).getId(); + UUID id = publicChannelNameMap.get(name).getId(); Path path = resolvePath(id); try { Files.delete(path); - channelNameMap.remove(name); - channelIdMap.remove(id); + publicChannelNameMap.remove(name); + publicChannelIdMap.remove(id); return true; } catch (IOException e) { return false; @@ -142,12 +218,17 @@ public boolean deleteChannel(String name) { /// public boolean isPresentChannel(String name) { - return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null) == null; + try { + publicChannelNameMap.get(publicChannelNameMap.get(name).getName()); + return true; + } catch (Exception ignore) { + return false; + } } public UUID channelNameToId(String name) { try { - return channelNameMap.get(name).getId(); + return publicChannelNameMap.get(name).getId(); } catch (Exception e) { return null; } @@ -155,7 +236,7 @@ public UUID channelNameToId(String name) { public String channelIdToName(UUID id) { try { - return channelIdMap.get(id).getName(); + return publicChannelIdMap.get(id).getName(); } catch (Exception e) { return null; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 094bac1d..0c3e527b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -1,18 +1,20 @@ package com.sprint.mission.discodeit.repository.file; +import com.sprint.mission.discodeit.dto.MessageResponseDto; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.repository.MessageRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -22,9 +24,7 @@ public class FileMessageRepository implements MessageRepository { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); private final Map messageIdMap = new ConcurrentHashMap<>(128); - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - private final FileChannelRepository channelRepository; - private final FileUserRepository userRepository; + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); private Path DIRECTORY; private final String EXTENSION = ".ser"; @@ -73,10 +73,7 @@ public void init() { } @Override - public boolean createMessage(String content, String sendeeChannelName, String senderUser) { - UUID channelId = channelRepository.readChannelId(sendeeChannelName); - UUID userId = userRepository.userNameToId(senderUser); - + public boolean createMessage(String content, UUID channelId, UUID userId) { Message message = new Message(channelId, userId, content); channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); @@ -93,24 +90,42 @@ public boolean createMessage(String content, String sendeeChannelName, String se } @Override - public List getInChannelMessage(String channelName) { - List result = new ArrayList<>(); + public List getInChannelMessage(UUID channelId) { + List result = new ArrayList<>(); try{ - channelIdMessageMap.get(channelRepository.channelNameToId(channelName)) + channelIdMessageMap.get(channelId) .stream().sorted(Comparator.comparing(Message::getCreateAt)) - .forEach(message -> result.add(formatMessage(message))); + .forEach(message -> { + result.add(new MessageResponseDto( + message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() + )); + }); return result; } catch (Exception e) { return List.of(); } } + public Instant getLastMessageInChannel(UUID channelId) { + try { + return channelIdMessageMap.get(channelId) + .stream().max(Comparator.comparing(Message::getCreateAt)).orElse(null).getCreateAt(); + } catch (NullPointerException e) { + return null; + } + } + @Override - public List getMessageForSender(String senderName) { - List result = new ArrayList<>(); + public List getMessageForSender(UUID userId) { + List result = new ArrayList<>(); try{ - userIdMessageMap.get(userRepository.userNameToId(senderName)) - .forEach(message -> result.add(formatMessage(message))); + userIdMessageMap.get(userId) + .stream().sorted(Comparator.comparing(Message::getCreateAt)) + .forEach(message -> { + result.add(new MessageResponseDto( + message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() + )); + }); } catch (Exception e) { return List.of(); } @@ -132,8 +147,7 @@ public boolean updateMessage(UUID id, String content) { } @Override - public boolean deleteMessage(String userName, UUID id) { - UUID userId = userRepository.userNameToId(userName); + public boolean deleteMessage(UUID userId, UUID id) { Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); UUID channelId = message.getSendChannelId(); @@ -149,20 +163,8 @@ public boolean deleteMessage(String userName, UUID id) { } } - public boolean check(String userName, UUID id) { - Object result = userIdMessageMap.get(userRepository.userNameToId(userName)).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); + public boolean check(UUID userId, UUID id) { + Object result = userIdMessageMap.get(userId).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); return result == null; } - - - /// formatting method - private String formatMessage(Message message) { - return "====================\n" + - "메시지ID: " + message.getId().toString() + "\n" - + "채널명: " + channelRepository.channelIdToName(message.getSendChannelId()) + "\n" - + "보낸이: " + userRepository.userIdToName(message.getSenderUserId()) + "\n" - + "생성일: " + sdf.format(message.getCreateAt()) + "\n" - + "수정일: " + sdf.format(message.getUpdateAt()) + "\n" - + "내용: " + message.getContent() + "\n"; - } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java new file mode 100644 index 00000000..0d2914ad --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java @@ -0,0 +1,111 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.entity.ReadStatus; +import com.sprint.mission.discodeit.repository.ReadStatusRepository; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.Instant; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +@RequiredArgsConstructor +public class FileReadStatusRepository implements ReadStatusRepository { + // TODO: ID:ReadStatus + // TODO: UserId:ReadStatus + private final Map idReadStatusMap = new ConcurrentHashMap<>(); + private final Map> userIdReadStatusMap = new ConcurrentHashMap<>(); + private Path DIRECTORY; + private final String EXTENSION = ".ser"; + + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); + } + + @PostConstruct + public void init() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", ReadStatus.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + try { + Files.list(DIRECTORY).filter(path-> path.toString().endsWith(EXTENSION)) + .map(path->{ + try (FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis)) { + return (ReadStatus) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(readstatus -> { + idReadStatusMap.put(readstatus.getId(), readstatus); + userIdReadStatusMap.computeIfAbsent(readstatus.getUserId(), id -> new ArrayList<>()).add(readstatus); + }); + } catch (Exception e) { + System.err.println("[ERROR] : " + e); + } + } + + public void create(UUID userId, UUID channelId) { + ReadStatus temp = new ReadStatus(userId, channelId); + idReadStatusMap.put(temp.getId(), temp); + userIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(temp); + Path path = resolvePath(temp.getId()); + try (FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(temp); + } catch (IOException e) { + System.err.println("[ERROR] : " + e); + } + } + + public Instant find(UUID id) { + return idReadStatusMap.get(id).getLastReadAt(); + } + + public Map findAllByUserId(UUID userId) { + List tempList = userIdReadStatusMap.get(userId); + Map result = new HashMap<>(); + for(ReadStatus temp : tempList) { + result.put(temp.getChannelId(), temp.getLastReadAt()); + } + + return result; + } + + public void update(UUID id) { + ReadStatus temp = idReadStatusMap.get(id); + Path path = resolvePath(id); + try (FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(temp); + } catch (IOException e) { + System.err.println("[ERROR] : " + e); + } + } + + public boolean delete(UUID id) { + Path path = resolvePath(id); + try { + Files.delete(path); + userIdReadStatusMap.remove(idReadStatusMap.remove(id).getUserId()); + return true; + } catch (IOException e) { + System.err.println("[ERROR] : "+ e); + return false; + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java index fa72e258..9423ab33 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.repository.jcf; +import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.repository.ChannelRepository; @@ -62,11 +63,12 @@ public UUID readChannelId(String name) { } @Override - public List readAllChannel() { + public List readAllChannel() { if(channelNameMap.isEmpty()) { return null; } - return channelNameMap.values().stream().toList(); +// return channelNameMap.values().stream().toList(); + return null; } @Override diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java index dd4a1a04..d76cbc52 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.repository.jcf; +import com.sprint.mission.discodeit.dto.MessageResponseDto; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.repository.MessageRepository; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; @@ -10,6 +11,8 @@ import java.io.IOException; import java.nio.file.Files; import java.text.SimpleDateFormat; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -19,15 +22,10 @@ public class JCFMessageRepository implements MessageRepository { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); private final Map messageIdMap = new ConcurrentHashMap<>(128); - private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - private final FileChannelRepository channelRepository; - private final FileUserRepository userRepository; + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); @Override - public boolean createMessage(String content, String sendeeChannelName, String senderUser) { - UUID channelId = channelRepository.readChannelId(sendeeChannelName); - UUID userId = userRepository.userNameToId(senderUser); - + public boolean createMessage(String content, UUID channelId, UUID userId) { Message message = new Message(channelId, userId, content); channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); @@ -35,12 +33,16 @@ public boolean createMessage(String content, String sendeeChannelName, String se } @Override - public List getInChannelMessage(String channelName) { - List result = new ArrayList<>(); + public List getInChannelMessage(UUID channelId) { + List result = new ArrayList<>(); try{ - channelIdMessageMap.get(channelRepository.channelNameToId(channelName)) + channelIdMessageMap.get(channelId) .stream().sorted(Comparator.comparing(Message::getCreateAt)) - .forEach(message -> result.add(formatMessage(message))); + .forEach(message -> { + result.add(new MessageResponseDto( + message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() + )); + }); return result; } catch (Exception e) { return List.of(); @@ -48,11 +50,16 @@ public List getInChannelMessage(String channelName) { } @Override - public List getMessageForSender(String senderName) { - List result = new ArrayList<>(); + public List getMessageForSender(UUID userId) { + List result = new ArrayList<>(); try{ - userIdMessageMap.get(userRepository.userNameToId(senderName)) - .forEach(message -> result.add(formatMessage(message))); + userIdMessageMap.get(userId) + .stream().sorted(Comparator.comparing(Message::getCreateAt)) + .forEach(message -> { + result.add(new MessageResponseDto( + message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() + )); + }); } catch (Exception e) { return List.of(); } @@ -70,8 +77,7 @@ public boolean updateMessage(UUID id, String content) { } @Override - public boolean deleteMessage(String userName, UUID id) { - UUID userId = userRepository.userNameToId(userName); + public boolean deleteMessage(UUID userId, UUID id) { Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); UUID channelId = message.getSendChannelId(); try { @@ -84,19 +90,8 @@ public boolean deleteMessage(String userName, UUID id) { } } - public boolean check(String userName, UUID id) { - Object result = userIdMessageMap.get(userRepository.userNameToId(userName)).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); + public boolean check(UUID userId, UUID id) { + Object result = userIdMessageMap.get(userId).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); return result == null; } - - /// formatting method - private String formatMessage(Message message) { - return "====================\n" + - "메시지ID: " + message.getId().toString() + "\n" - + "채널명: " + channelRepository.channelIdToName(message.getSendChannelId()) + "\n" - + "보낸이: " + userRepository.userIdToName(message.getSenderUserId()) + "\n" - + "생성일: " + sdf.format(message.getCreateAt()) + "\n" - + "수정일: " + sdf.format(message.getUpdateAt()) + "\n" - + "내용: " + message.getContent() + "\n"; - } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index 76c6117a..15d727a1 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -14,7 +14,7 @@ public interface MessageService { void updateMessage(String channelName); - void getMessageForSender(String senderName); + void getMessageForSender(UUID userId); void getMessageInChannel(String name); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java new file mode 100644 index 00000000..dbd68d67 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.service; + +public interface ReadStatusService { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java index f11c8780..e5191205 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java @@ -26,7 +26,7 @@ public boolean login() { UUID id = userRepository.userNameToId(name); if(!userRepository.check(id, password)) { - userState.userState(name); + userState.userState(name, id); System.out.println("성공!"); return true; } else { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java index 334b9f54..f8995a3e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -1,14 +1,18 @@ package com.sprint.mission.discodeit.service.basic; import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.dto.FindChannelDto; +import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.ChannelType; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; +import com.sprint.mission.discodeit.repository.file.FileMessageRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.ChannelService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.Instant; import java.util.List; import java.util.Scanner; import java.util.UUID; @@ -20,6 +24,7 @@ public class BasicChannelService implements ChannelService { private final FileChannelRepository channelRepository; private final FileUserRepository userRepository; private final UserState userState; + private final FileMessageRepository messageRepository; @Override public void createChannel() { @@ -31,7 +36,7 @@ public void createChannel() { return; } - String createUserName = userState.getUsername(); + String createUserName = userState.getUserName(); UUID createUserId = userRepository.userNameToId(createUserName); System.out.println("해당 채널의 성격을 알려주세요. (숫자 혹은 뒤의 영어를 입력해주시면 됩니다.)"); @@ -42,7 +47,7 @@ public void createChannel() { if(type.equalsIgnoreCase("public") || type.equals("1")) { channelRepository.save(new Channel(name, createUserName, createUserId)); } else if (type.equalsIgnoreCase("private") || type.equals("2")) { - channelRepository.save(new Channel(name, createUserName, createUserId, ChannelType.PUBLIC)); + channelRepository.save(new Channel(name, createUserName, createUserId, ChannelType.PRIVATE)); } else { System.err.println("잘못된 입력값입니다. 처음으로 돌아갑니다."); } @@ -55,12 +60,19 @@ public void readChannel() { System.out.println("검색할 채널명을 알려주세요"); String name = scanner.nextLine().trim(); - channelRepository.readChannel(name); + UUID channelId = channelRepository.channelNameToId(name); + + String channelInfo = channelRepository.readChannel(name); + ChannelType channelType = channelRepository.getChannelType(name); + Instant lastMessageTime = messageRepository.getLastMessageInChannel(channelId); + FindChannelDto requestChannelDto = new FindChannelDto(channelInfo, channelType, lastMessageTime); + + System.out.println(requestChannelDto.getInfo()); } @Override public void readAllChannel() { - List allChannel = channelRepository.readAllChannel(); + List allChannel = channelRepository.readAllChannel(); if (allChannel.isEmpty()) { System.out.println("채널이 존재하지 않습니다."); @@ -91,7 +103,7 @@ public void updateChannel() { System.out.println("잘 변경되었어요!"); } - @Override +// @Override public void inviteUserInPrivateChannel() { System.out.println("현재 당신이 참여하고 있는 PRIVATE 채널은 다음과 같습니다."); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java index eb0e04be..e40a21b9 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -1,5 +1,7 @@ package com.sprint.mission.discodeit.service.basic; +import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.dto.MessageResponseDto; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileMessageRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; @@ -14,94 +16,103 @@ @Service @RequiredArgsConstructor -public class BasicMessageService implements MessageService -{ - private final Scanner sc; +public class BasicMessageService implements MessageService { + private final UserState userState; + private final Scanner scanner; private final FileUserRepository userRepository; private final FileChannelRepository channelRepository; private final FileMessageRepository messageRepository; @Override public void createMessage() { - System.out.println("누가 보내는 메시지인가요?"); - String senderUserName = sc.nextLine(); - if(userRepository.userNameToId(senderUserName) == null){ - System.err.println("존재하지 않는 사용자입니다."); - return; - }; - + String senderUserName = userState.getUserName(); + System.out.println("현재 사용자 : " + senderUserName); System.out.println("어디로 보내는 메시지인가요?"); - String sendeeChannelName = sc.nextLine(); + String sendeeChannelName = scanner.nextLine(); - if(channelRepository.isPresentChannel(sendeeChannelName)) { - System.out.println("존재하지 않는 채널입니다."); + if(!channelRepository.isPresentChannel(sendeeChannelName)) { + System.err.println("존재하지 않는 채널입니다."); return; } + UUID channelId = channelRepository.readChannelId(sendeeChannelName); + UUID userId = userRepository.userNameToId(senderUserName); + while(true) { System.out.println("현재 메시지를 보낼 채널은 " + sendeeChannelName + "입니다."); System.out.println("현재 메시지를 보낼 사람은 " + senderUserName + "입니다."); System.out.println("무어라 보내고 싶으신가요?"); - String text = sc.nextLine(); + String text = scanner.nextLine(); System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); - String n = sc.nextLine(); + String n = scanner.nextLine(); if (Objects.equals(n, "0")) { System.out.println("처음으로 돌아갑니다."); return; } else if (Objects.equals(n, "1")) { - if(messageRepository.createMessage(text, sendeeChannelName, senderUserName)) { + if(messageRepository.createMessage(text, channelId, userId)) { System.out.println("성공."); } return; } else { - System.out.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); + System.err.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); } } } @Override - public void getMessageForSender(String senderName) { - List messages = messageRepository.getMessageForSender(senderName); - if (messages.isEmpty()) { + public void getMessageForSender(UUID userId) { + List messageRequestDto = messageRepository.getMessageForSender(userId); + if (messageRequestDto.isEmpty()) { System.out.println("아쉽지만 아무것도 없네요!"); return; } System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - messages.forEach(System.out::print); + messageRequestDto.forEach(dto -> System.out.println(formattingMessage(dto))); } @Override public void getMessageInChannel(String channelName) { - List messages = messageRepository.getInChannelMessage(channelName); + UUID channelId = channelRepository.channelNameToId(channelName); + List messageRequestDto = messageRepository.getInChannelMessage(channelId); - if (messages.isEmpty()) { + if (messageRequestDto.isEmpty()) { System.out.println("해당 채널에 보낸 메시지가 없어요."); return; } - messages.forEach(System.out::print); - System.out.println("총 메시지 : " + messages.size()); + messageRequestDto.forEach(dto -> System.out.println(formattingMessage(dto))); + System.out.println("총 메시지 : " + messageRequestDto.size()); + } + + private String formattingMessage(MessageResponseDto dto) { + String id = "ID: " + dto.id().toString(); + String user = "사용자명: " + userRepository.userIdToName(dto.userId()); + String channel = "채널명: " + channelRepository.channelIdToName(dto.channelId()); + + return id + "\n" + user + "\n" + channel + "\n" + "내용: " + dto.content() + "\n" + "생성일: " + dto.createAt() + "\n" + "수정일: " + dto.updateAt(); } @Override public void updateMessage(String userName) { - getMessageForSender(userName); + UUID userId = userRepository.userNameToId(userName); + + getMessageForSender(userId); System.out.println("어떤 것을 수정하고 싶나요?"); - String id = sc.nextLine(); + String id = scanner.nextLine(); - if (messageRepository.check(userName, UUID.fromString(id))) { + if (messageRepository.check(userId, UUID.fromString(id))) { System.out.println("실패. 해당 ID를 찾지 못했습니다."); return; } System.out.println("무슨 내용으로 수정하고 싶나요?"); - String content = sc.nextLine(); + String content = scanner.nextLine(); if(messageRepository.updateMessage(UUID.fromString(id), content)) { System.out.println("성공적으로 변경되었습니다."); @@ -112,20 +123,22 @@ public void updateMessage(String userName) { @Override public void deleteMessage(String userName) { - getMessageForSender(userName); + UUID userId = userRepository.userNameToId(userName); + + getMessageForSender(userId); System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); - String id = sc.nextLine(); + String id = scanner.nextLine(); - if (messageRepository.check(userName, UUID.fromString(id))) { + if (messageRepository.check(userId, UUID.fromString(id))) { System.out.println("실패. 해당 ID를 찾지 못했습니다."); return; } System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); - String isDelete = sc.nextLine(); + String isDelete = scanner.nextLine(); if (isDelete.equalsIgnoreCase("Y")) { - if(messageRepository.deleteMessage(userName, UUID.fromString(id))) { + if(messageRepository.deleteMessage(userId, UUID.fromString(id))) { System.out.println("성공!"); } else System.out.println("실패!"); } else System.out.println("초기로 돌아갑니다"); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java new file mode 100644 index 00000000..89584ca8 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java @@ -0,0 +1,32 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.repository.file.FileReadStatusRepository; +import com.sprint.mission.discodeit.service.ReadStatusService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.Instant; +import java.util.Map; +import java.util.Scanner; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class BasicReadStatusService implements ReadStatusService { + private final Scanner scanner; + private final FileReadStatusRepository readStatusRepository; + + public void create(UUID userId, UUID channelId){ + readStatusRepository.create(userId, channelId); + } + public void find(UUID id) { + Instant lastReadAt = readStatusRepository.find(id); + } + public void findAllByUserId(UUID userId) { + Map result = readStatusRepository.findAllByUserId(userId); + } + public void update(UUID userId, UUID channelId) { + + } + public void delete(UUID id) {} +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java index e8f1a025..bad93833 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -1,6 +1,7 @@ package com.sprint.mission.discodeit.service.basic; import com.sprint.mission.discodeit.Input; +import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.dto.CreateUserDto; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.UserService; @@ -18,6 +19,7 @@ public class BasicUserService implements UserService { private final FileUserRepository userRepository; private final AttachmentRepository attachmentRepository; private final Input Input; + private final UserState userState; @Override public void createUser() { @@ -49,9 +51,9 @@ public void createUser() { public void updateUser() { System.out.println("===================="); System.out.println("사용자 변경 메뉴입니다."); - UUID userId = workRoute("변경"); + UUID userId = workRoute(); if(userId == null) { - System.out.println("일치하는 사용자가 없습니다."); + System.err.println("일치하지 않습니다. 처음으로 돌아갑니다."); return; } @@ -108,7 +110,7 @@ public void getUserName() { public void getAllUserName() { List userList = userRepository.getAllUser(); if (userList.isEmpty()) { - System.out.println("사용자가 없습니다."); + System.err.println("사용자가 없습니다."); return; } @@ -119,9 +121,9 @@ public void getAllUserName() { /// Delete @Override public void deleteUser() { - System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.out.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); + System.err.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.err.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.err.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); int n = scanner.nextInt(); scanner.nextLine(); @@ -130,10 +132,10 @@ public void deleteUser() { return; } - UUID userId = workRoute("삭제"); + UUID userId = workRoute(); if (userId == null) { - System.out.println("일치하는 계정을 찾을 수 없습니다."); + System.err.println("일치하는 계정을 찾을 수 없습니다."); return; } @@ -142,14 +144,10 @@ public void deleteUser() { System.out.println("계정이 삭제되었습니다."); } - private UUID workRoute(String work) { - System.out.println(work + "하고자 하는 사용자명을 입력해주세요"); - String name = scanner.nextLine(); - UUID userId = userRepository.userNameToId(name); - - if (userId == null) return null; + private UUID workRoute() { + UUID userId = userRepository.userNameToId(userState.getUserName()); - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + System.out.println("현재 로그인한 " + userState.getUserName() +"의 비밀번호를 입력해주세요"); String pw = scanner.nextLine(); if (userRepository.check(userId, pw)) return null; diff --git a/file-data-map/User/1e0d54e4-d371-4ac2-b912-b3514b0ffccc.ser b/file-data-map/User/1e0d54e4-d371-4ac2-b912-b3514b0ffccc.ser deleted file mode 100644 index a631c6d8cae6cf2bc69bde58066943ef72a83ded..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381 zcmYk1zfJ-{5XOf?3j-+r5Q}}-7R|VCA|3DDzD$JCic0+?wFWkdbv-3-^m-_ z1Fs5&P;g6iY;7XhD&%GKH}&+e^t8V_|MOlh9(;YYt8WCk(eP?Ccpdj2{`Xotw%K0~ Cv4Hge diff --git a/file-data-map/User/dfebc555-001b-489f-92a3-642abc3b97f7.ser b/file-data-map/User/dfebc555-001b-489f-92a3-642abc3b97f7.ser deleted file mode 100644 index 2220353df1fe739d11fff219a378091e132838a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381 zcmYk1F;4VPb7GVqq+7 zZ8TJd*59GM*x1l|dl2JPGxOf$ee?VcIcs3O9ZP1lK}AfWwHPZFqHV{aKw?4>(isb^ zFfgl(2l*!C+eUB_+eEP1Jm#m|CzQgkD@$BawFx;PIYtC4Gd1F>6LU=C`|NZmFMSWZ z29zSfEw!+-gJc^}l=0ux*Vj+s#<+Sn{rGwhpi+AzC`=wkli}55@bbUc+OaME0=77U AYXATM From f450080ae645dce818baf8cc1dd1e060f87ea67a Mon Sep 17 00:00:00 2001 From: Alpha Date: Mon, 2 Feb 2026 20:46:38 +0900 Subject: [PATCH 29/35] =?UTF-8?q?Feat:=20=EC=B2=A8=EB=B6=80=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EA=B8=B0=EB=8A=A5=20=EB=93=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 첨부파일 기능을 추가했다. (아직 테스트중) MVC에 맞게 조금 리팩토링했다. (Service에서 출력하는 기능 제거 등) 메시지 조회 불가능한 버그를 고쳤다. (아직 테스트 중) --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../app/router/RouteChannelService.class | Bin 2127 -> 0 bytes .../app/router/RouteMessageService.class | Bin 3288 -> 0 bytes .../app/router/RouteUserService.class | Bin 2058 -> 0 bytes .../mission/discodeit/app/router/Router.class | Bin 3914 -> 4362 bytes .../repository/MessageRepository.class | Bin 704 -> 742 bytes .../discodeit/repository/UserRepository.class | Bin 697 -> 694 bytes .../file/FileChannelRepository.class | Bin 12651 -> 12555 bytes .../file/FileMessageRepository.class | Bin 12123 -> 12570 bytes .../repository/file/FileUserRepository.class | Bin 11113 -> 11107 bytes .../repository/jcf/JCFMessageRepository.class | Bin 6862 -> 6939 bytes .../repository/jcf/JCFUserRepository.class | Bin 5658 -> 5652 bytes .../discodeit/service/ChannelService.class | Bin 271 -> 621 bytes .../discodeit/service/MessageService.class | Bin 434 -> 926 bytes .../discodeit/service/UserService.class | Bin 256 -> 777 bytes .../compileJava/previous-compilation-data.bin | Bin 29144 -> 29670 bytes .../mission/discodeit/app/router/IsLogin.java | 4 +- .../discodeit/app/router/RouteChannel.java | 174 +++++++++++++++ .../app/router/RouteChannelService.java | 58 ----- .../discodeit/app/router/RouteMessage.java | 199 ++++++++++++++++++ .../app/router/RouteMessageService.java | 68 ------ .../discodeit/app/router/RouteUser.java | 169 +++++++++++++++ .../app/router/RouteUserService.java | 56 ----- .../mission/discodeit/app/router/Router.java | 51 +++-- .../discodeit/dto/BinaryContentDto.java | 9 + .../mission/discodeit/dto/LoginDto.java | 4 + .../discodeit/dto/ResponseChannelDto.java | 4 +- .../discodeit/entity/AttachmentType.java | 5 + .../mission/discodeit/exepction/NotFound.java | 7 + .../repository/BinaryContentRepository.java | 11 + .../repository/MessageRepository.java | 10 +- .../discodeit/repository/UserRepository.java | 2 +- .../file/FileBinaryContentRepository.java | 46 ++++ .../file/FileChannelRepository.java | 22 +- .../file/FileMessageRepository.java | 31 ++- .../file/FileReadStatusRepository.java | 29 ++- .../repository/file/FileUserRepository.java | 2 +- .../repository/jcf/JCFMessageRepository.java | 20 +- .../repository/jcf/JCFUserRepository.java | 2 +- .../service/AttechmentRepository.java | 4 - .../discodeit/service/ChannelService.java | 26 +-- .../discodeit/service/MessageService.java | 19 +- .../discodeit/service/ReadStatusService.java | 13 ++ .../discodeit/service/UserService.java | 34 ++- .../discodeit/service/auth/AuthService.java | 28 +-- .../service/basic/AttachmentRepository.java | 33 --- .../basic/BasicBinaryContentService.java | 19 ++ .../service/basic/BasicChannelService.java | 100 ++------- .../service/basic/BasicMessageService.java | 144 +++++-------- .../service/basic/BasicReadStatusService.java | 28 ++- .../service/basic/BasicUserService.java | 146 +++---------- 52 files changed, 933 insertions(+), 644 deletions(-) delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteMessageService.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannel.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/LoginDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/entity/AttachmentType.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/exepction/NotFound.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/AttechmentRepository.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index ca1b228fbb7b586a8b284d17703bfd2d7b23e5b2..f58c131b5971b6b3f52cb58a8af0777338c2a713 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6a?0su4!1VaD- literal 17 VcmZQxwaR1i+k`Ae1~6d#0RS|t1n2+& diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index 59a36e2bf0622cbac5f3efc7110e7077857fcbbd..baa0f5981145c9778e922e2f8c37e705ee1d0afd 100644 GIT binary patch literal 8 PcmZQzV4NenPW2rC2G9b0 literal 8 PcmZQzV4TCdgryGv1<(QE diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteChannelService.class deleted file mode 100644 index 921ab936e531e5daeab1fb6d4229308114392723..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2127 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/RouteUserService.class deleted file mode 100644 index bac6d809ad43a62f44b993b981076aaa94ad0204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2058 zcmb7FZBrXn6n-uV@v4Yi-F z4j-J-ar_`N6^ny2c9=T-P!K3Mjz7SkLc$+#9LIBaV~v%`=!d&!_uO-ybI)_mJ^Sk) zKm7ur2Z|3BaCzXCP>Cvrld6%Hvl&y4xgX66k@}MAt0JxH- zb2c)Z+MZj@&u)gdHlF40KQ1iX3+KOkwDo+Wu&}W`_b9ym%}ltkuv(aZ65e`tk1V$5 zp5$jg&(D6};m02A^Rn)3!D z4+`^No%P}khStt-cX<2$CYk;1lwW%A!g|dqfEQh4+(pJOM<|6Z8VjC}NjQ!-sU}%f z(REIJQSbCc&eBryu%jgAPU4gY-4bFr&9KWZYpDeR==@_Vu3I)4ap7=A!dbk<;1xRw zO{W_ainRT^X9aQRB=ia5s*~IjB^yxET<9-IxG40sr0-3oO1Cach}&FG@Dz6n;l~vu zJm{A&Aa+Vx|LXW{uF~16PHVbmouR83iMNfB=%ahjP$!NzkV}tqb3_?WktUchR3$a0 zn40)5D&1+W=NMR=9IZ($%g|lEACt1(CBv|C`Jgq1x1V7lKucBE5K;yD#<~B9Vbf{Y3HM> zU_npQI(+kxR!|pgSjX<=rXOhUQ(BCcn^p_0R$863?vPK*I`%K&rt{Xigpn0QgGb0! zNVzCGNs`6Ub)4vNWY4u`_abT>x85bRG*>QSkMntc3AN7Kr6stRmno79@6dCAX1d6y zhGYXmXvA(D!#=u|O*lh2U7&m~;{fG#5bxp;ZXtq68c7+n;}e=eU(l)N(1nM@$k#Z5 zAwmli_9WR3V}uwX9x#eAlH%%naZrosRY~&k`?&Ce%{1~MeQx%Pgw6tt^fc4 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class index a13baf8c51f90958b8a0510c81b1fc9973ff1022..2e184edbf086c0c38925dbc94cd82a88073cae9c 100644 GIT binary patch literal 4362 zcmbVPT~rj;9sk{RW!7~JWHqJ;m^Cp7D`7Pl6GgEGHIjf@QLM4C8I}=7c4xLbvqt-A z6Kpiv#HP{`qg11o_|aCaAjX`$^d+ZHee5}X=}TVRrEfi_?dd7~-I-AkHl&numV4*k z|HtqCzwZD3@jst@24F4j%t8P&6a-bwM3F#k!b-*MbjC29c*?MC!!qL?hMllFbi;{j z>2y3}WgR^e-|h|qv$D3HX>~M57pQ8Ul6&WU%K9)un57`BVm4HP%Kwc`V0NeONGV&i z6xGeEs&3w|9nj)Q&FqY~It1NG(T|{5L5Ye-5fLbvNFbmX_Qq7&IV3Qns`}Mgn1{y{ z%vbR^zV7T#Id%(Ul`@6P_R(N6Nn1Tb#Xk* zO(?FRlP1MiO+HF>TL@1IlrO7|j-2Yroj-H$_HeHM<7ob)Be@GFMtb}14POsou|Q;b zZPeS&pB?trBlK>iiY2HLcs!+b>y4I~(41X{)5V$XXr^P+@P)Ka1` z`O}y4{U@XMZXM2@Bb1&qxjQ}icP@rdBe0;3BsY3;J%#pbDPje2UOtsSekMO~c#;Si ziOW%xyP3^KYA?zo*ly2Kvr!LVYRiwZm^U$?;8`DPT z^ATNIqWjKt(fRzce%dM=nJPh+)KnM;@P>keDh}bh_mj=7xJ)m-Q#w18)-ty4W?R8J z)}-M30#A&U;w{-!yPnx(Wm1~6@nAwvJG^H?_#sO~zP~SbPv8Nbk9^s+GHPB!9NY7d+B?D}UkBe9v(H^r;Yf zXm76Mj^7z0&!6p!vbyE2AI{x8I?^|syYy)RUIjl9sGc$qIvgwBEDOm7#|q;Jj;c6@ zcbK?q4AXEL1eO%2!;{OfEKN-~AxqOwc~gJIZ986Ry<~k4Cl&lms%EVjcQ0;j->)ZR z@oVHIFHkINqvxOZ!k!CBQCEK)&A;0}a#m=_3=w?ASibQvdmiCniqF6M}AO+(`vYT#W5E)16w*_vH+V&e(rbCE%Utzk5 z)#-j}P47HzO`9Ie{R&gy&YN1$mt79^Q?p5kZtunbVNA5>PM6iOP0P@V?D6Qrvh7*Z zF;dL!1BPwT`|C~9Vzb9|iM^d*JH(OSB zHeEkCrpB#2#JGcS3y|*_NAKla{rLXX7tyFCldXoMv$eb_P&3xq_4edHe9LR@qE#b( zJ^B7?W2Gv(Ix4DpgEYyesWGY9wr(pJ6nJ`)6$%|r!EJ$sQd6vK;-dXRlzbryT zUR<0-WCP%iyk^~zU7S0zTXIJ}E;t4uc(*t5|NB57ML9vP{yTOHVhG9*<}}>I+(_vV z%H+7n8!J9QDDu<*ihZ(A@HF6)RQuyne|*Ltr3jM8hfufH8&~ZrKMiHZFxHe`q0VFc z2^SGi!BL{!%3qS&!m%NIeE>QcHwB1`xb4Fse}J4E&t`-^Ek>zkn~IGR)=Up^UheU?J)_ zuH+-40a5mzi?9VxvJYE~y)?rML(9|Jh^_&p7$y_e~%Y%7pw3Y z*5D6(@qLbU_!HLS&%8$df{pkqrGA0U7{SZYXnOGrTI=%% zvo9XZX5(+v+Q&1{kN5zmIqoHf56Kb08GgOZhGGq5)De}4F<`oA!LS;z1A$l?gxyW zz%@5I<`Db$eE&q;Sl!8$HWXtQpNqR)8_lPnV!mh3^3*b-N_{KHvll^ZQ79oGUlYFS zUOu#?wbn^pKl0=C#}DFFLUCcd_0Uoafo`~qBfFQ@+{W8OIDUg70&d_egbbqB2w^Wu zm|kUgouQ;L6cTh`hYK?5sq~?hF?@c7a|BdNE1%~q!1*zJL@FjG!ztj(tc=~pyRoH% z=#JG4Vpr^$LA1w8gM*02N@osYL#(uD5Mm4ok4tXV)wtP{;A`Y#)GZZqztSxh()yLM zD|eAq%4eTz;7a+xqKV|LEE+|)zeV c`>U5Z%6t!z;wpbPm=9ny3EW~08Aj=U0Z1qeegFUf literal 3914 zcmbVPTXYm>9shlsu(Mf)BrK&Eu1kS5yM-*2OOXUDq)>vJ6bS?i-X@!AGGupVotaIc zUW#qdT2K)|Q<|o85gq;~18i>NcE=)vX(DO3UX{ zwpDO-J9W%k1VTA)KTe3TBB>ZrU=#xtSJr;PTu}x^72r;IDBF9#=CbvxFR$i%-m*aOoJU@AZ zstgQG{%WB3>dgoa2&~*rlsf~H19QQjB8wf=^VZek#i8QJ`B^Mvc^p#lG!D~2vJSlD zq=Q9Oz&Ou%A5Jtc%^ilj$&4O6(ILf=6aWkjP#;vnE8U+(yM3sbXyjIuHrfLuui=v z%ggU+kL{V?V>4x!(9&rJ&M4?pk(CkJy&xk>7%_;_Cmp^@5wM<>Os{-9vr_rIim!q% z*D_D}79S8G3+!E({^jH}!9_tqzl!Ij2~7(!p`4dMb)fWr3}KxsIo)xz9$gypH5FgS zH>M3~^8x>_A?4&WcDUNj_7I?yeO0bEewY>xspvX%Lb_peJ#DGEZUIO`8&(Oo=w#?X|j(YBn1lXCek`)v43Jj*d(lXM<}4#n)f<$Afsoy}^Ov z@MuX#-xC)Jwv1Les!`l^DiC4Xw5YG`@#3hfW4&TG~dH(}`VTg8xxB{2) ztS>qgr(kjtl@-kt-Y|~MsUeY#c%{qR&`JLcrQ(iS`+Q#v@lOxdmZRZG1$4*V) z3(0Y4&8tE;5FVL2LRj~zarBO0Uo1BRxP?HAKxYK&V`paoYYBXTz;BMA^3KSV)Wi4g z6>Q{wEq(I{y}kj z%NVR=UF8@=vTo5B+LCqQF*MvEX2{D{W*+y8JsS@D90JYB%PSoTulI^a7DBxok)(y( z$pVtuQ7;E%p5#szQ5ZkrzAjAiS`yZhq?X`XqSX?i7J~#!!LMqVC@yym!+8 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class index 55d8ef924b076e5aae4e4c7565726ccc3af2c5ab..3ef2dc2fac08660bbbb310c01225dee51653a62a 100644 GIT binary patch delta 160 zcmX@W`izz9)W2Q(7#J9A86+lhg>$hb7o{eaq%tzNO)N4I^2tgpOVrOv%uCk~E-A{) zOShi5+(b|yEi*60F(=0}&p9J8FE2G`;`@FMnBe42Mh`Z&l+>KmlF9cNHARFqAcmBd zWaj9HhI+bKYlcl`Win)Bn{3WhFU!KnAj}}jz{tQ3bOS3R11FGTWDo%r;?+nz+$KLO4CO z#52!1BQY;8H3u%Qq%pBie6k>82{%X{Dm=ND(Sw&aB{e4%X42%_jGB|BnDiN0Cwno~ Pb1^V7hyv|oVh{rWFdHY7 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class index b61b372938b23d5521c58a6e5b43d0901d41e309..8f6b1c51f4b757b59736e5ab8f30e594174d2693 100644 GIT binary patch delta 21 ccmdnVx{Y3`2YX_ delta 24 fcmdnSx|4OobVhEj^wbi^oSe|&)S}Jv8O0d^YuE@n diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class index 1dcbb72c09e7b72bebbc23e71c75d20e111ba127..9166d8836d86225eb20213bdea9ad7139f4b95c9 100644 GIT binary patch delta 1698 zcmZux{Zo`x6n^f0z5A{&7RHKeErtRvEDM_HjHqb?>S(y;KoL_jxWEe7Dmx2kR?4WP zlaxAL5ZV+aG_pW8kR^n1YbyJ&GP8c^Yo@V&XsDU~fuiSKR>K+R-MQ!9=REhEyXQIg zPE@v5Mjlp|s4$>i!wDP_m=$cQ4AfN>*7|nt^anOnZ}J6occ+Heb@zS2P~9$HqhD@S z=QP_Biv-#0+u$KOU-+skS8ByBbvV z31quudWu~Z+UzqfU_e1c!+RK%RkoG(iyDR@1+*G}8rp+4~Pm2h328>YXxGb9;>u>zCs z)yRu*(w)s~QI0Y^jcs@aO{ieZt>jmbT|)L&MBu|Xs>E9Ec?1?_-6Kjw zDNM}QDV`8dvOp1NqF8L=jD-^G#ClqNRwkZ;VE$oI&YcF~CE5V>Uz91(6x1jPZgF}Q zbWf6GQD9KuyzL(ZcuSy*<;sZFn#$_hYr?AIW5Th89 za~AAq4(EDqs~4tnqXv|Da-$eGEwefls-p{W#%}E^m|E&es1B<`)s?Wu3Y55CN9lK1 zbySHJSSXOga)&?_?BZemixCzuMq7%0Tt#y?!K?hb@fE(s_q0VA#IICnn4@l|6sp7= z)~goxppHHHEM_BsOzeP*cP$Sg?rLO6U9(;AV>h;A59;weUf}mKd!Zfs*a7=_$qw=$ zEzEI{85%XFXu(aqguih}9?Lk;9525bucbo)e@@mtq0gyF|5RK znVeNS^UetJa8_D!8;R{Co*=P<#7+{I$Um}HtEZ5RE>`ulT)eP9=^T5h7amq=1J28d zg=L~c7P=lv?k9c$5AYti*yA2PEr(p=nNc2M1U9^ndofB?E|D>Y`4l-5mzgPsMfgzG zWM2_snU|Ah{)Bn1$SpYsM4S9BC&T##bAQR(^EK|rHDuu%EXH*#VJ|Gj4QY1|B>jN7 z_>ob6f)hW>>+XH(P44-Paen7{*T~M?*^D)iyHK4V{wMLjh^N2ic`UUpXH3}3M?~r{ z!v9Y@WThu8BJv-PUku2qyp25CwY<6VvphQk{gQWfeUB%$$sH9-d!c%B`Tq3e#)`+V zqTD@#RWaVqRLny*TQ!HRx0rS&7GMQ!Hb>pA#2OT$TYjG3wu1en=r>kVgi8_bTTP%$ Y@-g5Q*WpChC@>~y4543k*}3S(fAZp&CjbBd delta 1727 zcmZuxYfw~W7=FIJojvP8#Sw5*NJy@`3z)$um!y$$@&Z59kjzYAr3)qsgk`xCQ=`aC zx6d1^n-D0OOCYeTh_#hwQ%p{2w`rQv@kcrSP=EBVk)E?G#X8RJoaZ~w`+o2Hp6_|z zudV7vRsTb3@)W#{eH!*d3TUKauTa8N_LEK+Bi4rw?n*Qs+%?`t?B zcc@A6of@s<&vA#oUcji?}f zfaVPoc$c{ckI>?cc!cpT51M_E_+gATdn!!%X1ghf4p$Ieab|zP_*)OO0*l>jw*+y_ zZVnZgbhA#~G zR~2Hd2Z9y;Eh@RyAj(KLK)r)z1)73d1@*;c3cAPWV^LsGkocd0Gz1^kF?OVBvN24L z!3y(aHp<^PVUgQXauTRLd!WpiZ*qNwxUh(V9U)JrZ1(t^u5gp+&Ecb-!v<8ioI#v5 zaRJ+x#>bhA&1xnbiv$Wf-I;(^VER@r3iPCceXCuIGI)$?c z5m!^}QFyvZj`G)yZ*d7f5=$|Fs}wZAr;g)#R$&$ouMX3&neD#?@u){Cwju+K$i_?D zwVfefri!mnu^o6GuhDBKS01$Db?ie6I`AfrViyb9%^bU!VY|i@yV*yr6mgHtnb+b8 zi=l?k&#r*~M5+)GE9#7ud-z18QDMD@F>3d?+>rfSQjE>Ks#neR0$e% z1%o)(FZy{5<3|$D;Rl;I2Ja#X@4*3yBFcI)_1US>5oCH=QtUxGw$sr|$3t{HOveSX zHEprliCErhGtec!PwS02&dxdk7yNh}y|OL6LU`r1^ao>4k{`ev4D!r}Xb;M?jI*g{ zSi}fy6m>cWG#;PQBZL%|n~E=(=^S$LrBpI62%o%|nPmQ&dA^aiGh4&~*_bsi@gj47 z$630B*|>}}{DArFf(7^qdH7idvif3v$9?#NQLi8oSLIg6PW4aj`HOL`v)&T9&>7EI z<<4~VCiz?BZ<9}!9nR$m2eL*)T;(Z|5P{@z?1{4=Lafhus)LzX;^Q+{^z0 DaOb5) diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class index f0d12420ee4280a08d9254039b3bc48f0b044805..9eb7079e77f5d7204751f9b461f1c3227e906e3d 100644 GIT binary patch literal 12570 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 PA3ZJlv;0;5j`;rp7H`u} literal 12123 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 Ogvr5A<>&HC)c+r$jzxd~ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class index 74b42e0c4d3d6709723db00919fd48d978cd2cf3..9ee352a177ebb9d306d0261ad4ceed19354b7313 100644 GIT binary patch delta 42 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 literal 6862 zcmb_g349dg75{&mW0GZn5Fm;OA_idtaXGD!fP?@NOaPM*g&sQWPLd(JJL}FYnzmZo zYOA&Ow5QtI(;l?-42MT;wY9bOZtZ>FmEL!2wf{FWyF0rH5q`fWzuo=jo9}z?|K9t* z_Z^QvbMzqq>(z7(5rw4*I~{kjIV7z@@w{uL;=6ZuZElQRS!4N)Ca zpet;g6h+R=+K%PgxzYIk#9(}T=hgsFZ}Ek~%*3#f$(X6GWbm@b$SO<^fni5mBTb*C zV>%iXYK&|)HL7sNl2~ZeU_O&@#S2@5M%xrLVy1>!I%cCuVQR@-Uj?ye^RC%7*s;%{ z!xTCLmv|=c+_&FMxM8P^*AVCrkJoUj!nBgAZp(3};1ryuV=hits4|jCh1nBmitQEW z&ew5Tvu_QJiwlCJP1Tj7jnKbU~ ziB$Uj3*#58OLZ(mE4kvhInzih%q{b@-z%KpOGYMwX;ZKqD>SUsu?njdW|a_j(#b~7 zAPE%e#p8xBse*pT^{hwEk_d+MTs%+1c{Xgl; zK~-qiu^vp4S|gD#v-Dm(EJhsO78X#%-)U!@eA>);KsV~>z$OK4(9Uf!62l4$!cxXh ziVbMkT!^n1lr2|^da_!=vQ@_g*rpJ%2NfF2LgFE6L^axlLl^4k77poYKmSQ1BP&H< zhmM`t#Z<^=lZI;s30FZ!#?{aDM$)NQM<4oGK3vnG8TNE$C zr5Y~NVMro0mgrI#LR1V+%JFJsLPruNbB_trXJ(R}h00XvZqITF$&ij=$?DpinYIsj zLiXzz5g|1c(v_4vOv|8HBWlqbMHbB(E~gF;ODOX+I84$K!i1ek&wu}-ITMfb>ySL(P{Uexo&Zm)C+6JMp{)wrI$TX**MboBRc z=~ZaUXV;4yX}Dm+qNCM@zw?D^iyNkE^wS<_g*jF zyNtpxDb!tIxx><50vZxo2-J zQP?(yLmtvuX@~b5+sg{o$(^a}>#U5qBcI-9=K76&DfTpW+X*8zz-@s%2c6aKu*Gt? zX>t#QJb%3XC0(MilKRQl=mQNyC!dS^Px7wP5*7)6A4W03Vye(OIjV}dP->6q4%^9H z+yL z*%+}{Ql=)&6ys5J|5?YGTq?Cf6e1P*LoRiWPF&PmZdHc+OalH|=ROUTM9OY@53y;#ml-kwMW$JS_{ozErAt(Me| zITIZz&yl$BT@Z?a2?DXS+s+O7+n=F9$;vD2+(_JEZko2s%!ro`sEkm$YaPGAZwng^ud-N~1NMj+@AksV8OETIkTWnhGED!{(-T3Q!;^dk z+l)*yWjf8>wmp*121n3v)e2EB(B@C};;l!nGi5lA>1b*Si&v?jlm)Jw4w{;(Fn{u)TnT*c@K&IXM-GLL^K95CcQ$O_ z$-9&Y?&33V8p@t|YAinAjnicBF840%y9f7j&V78ko%_@p{%*P-YR|IPrH4?puDa!3 zXv>abDsTids_-yQnNxiPb0WByZ|1cg#e(r~st;011Y`V`lPfTf+UMhJqT0yuhuE{) z*M!3qD}S4C6jbZA9>9Z~EqxEMRmHjI;*-=|jZd+6Y88h95AY+mW(uFiBOD|Ke2LRU z-P-$c=AJ`1t4F{uJ%Y0%g8K+s6sMj8Dvck(nh0oDo1j0R%{zA-#+ExNu1+pG&`Cjp ze?ByRFJkXv-Zd>jD`Hql8LJV;8eWZvEiD|ohM!0A83LjDqE%}N^FdGM3Vari5#Hzc zULsKk>G?c+9%s*NsAnm%N<*E7QH{q>r4fRdOG1jNeq_JEnNJkWeKIh&J!I~@$<6Hw z%)JA3p1sR_i&qkV!QzF)270^>=MmRhTD*=HcW}h{?A^$xO+~BE4O!h@w7T7ko7lK| zoYm4(u(}D6XDPPAYCp;}TcTSsdndj~b0x}G2WB@hy4wrps%2y7sXn-)>L6Vtw3|tT zszMaph8gH$?{>_>g+&8qQC1;rO+^Em$Rr6H(B#q54^k~uUm+^>5e|VzM1?QoD?T(e zjlZ?*PfKnTp!vij*Dez0?~d?m4;S(=yzpVD9j#;7=Ve)GeCrVm`uU|vuKDaOb#CVr z>j+XDQhjh;jc4(4-a}YLi~SH@L}K=mqW##6-PnTx4Dq(c!X>=L*yDL%1Hq029+1RO z7d?;;LMVOWiwI?PdP!JCiR(RDS9{c*E7Y}6Q=l%{OYV-A2uxQ=B*k3{UoE%_H&LeK z>WT?nm8o>qj@HMZRo{VXnu{Q?QHlWXffnP^Vn8XdXvB)55i0^C79&djeU0-a>p1^u z#5H6$DlgT_kn+Bj;)QRQ5~pw>)^Z4T%l*i)w7B;{D>dhN%^A4n5c2n7`&}Fyu70y9 zpotgUyeh`29#W|Q6c`}=I@=@{z5z5uWeH(h6tAZgv9NwA1Ku)*D@$cnhKuP^ewaow z$TN`*w!X!3rznam+KGy~=s2Pt4McIZ3`99pAPQH}=&SY!G=5&j&nxc6b^N(u3^)0$ zH?zf#w;sYf{S~9qF>N%vofpz=EHE2F09JWrLu^^)aZYUElK=k)&_V!937~}lTAu>| zH#z};m9$^nUl-I}zevey;fLi6Pm&+wItJrGFRt7;~7`XtRGY}vE diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class index 205f3af2567802a8d2a6c79a6dfa46f6ca8ef1e9..18a5c6afe871ed9607b2f179db5bcbbd4a79005b 100644 GIT binary patch literal 621 zcmaix%}xR_5XYyu?7H}cAnF?k7kluCni!SD1eLfqZ*^Otq_ms1i}BSw_y9hXao8mh zk?3u{e*b@F=Hv729RSYYFoFt!lhjP8%dFI%PNZ|vXv(Ea4Hwc=C+t+Ff?kf8)#<`b@ z_NDXKjuSc5%;y%JZ+;D&{%`moTxPTr3#R9&8|E1=_K%F>cg0B}Endnfff$?3=9mm47}_NOpFZ1lM@+bC+g}2^ClOiCYGc+XC&t3rRFd)Fl%Ur zF*5L$7Nj7Hasw5mz}4`9c#b(aZ~@+w)SOhfA(Qtq>KU`LFfy<*urV+IX?7^h0i`*i QG#7|wU}WG1l1vOd00S{3ApigX diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/MessageService.class index 02017635d408377c60ccfce37b6787798d538e67..52ce94fa4931a9542550538bc9fe6a3dd0eceaa1 100644 GIT binary patch literal 926 zcma)4T~E|N6g{&ntqTIHtB7CVcib2IU}7X7iP4a30%}s02j9l_x(w+~$;_1a+kEf` z_@j(>riGR45_xEvId|^4=bkyg|NQ&~;2j>vXbHT|%5h>(jM6R{D{ED$lU&)X%t^V# zk~viwCHrKp98p>yW3&aj$MRGrh18?u^S5KloIsQrl8yv6U+zt+sblid)>V-HSLWR( zcU0zIq>*ECWUN5j(GRA-VM*siAC9EfRD9yHz;eLMkcHMjRGs8O!}CT%|aalP9h7l^Y`JJLL>`(5e$eNpU|CiPQ|z>_J$e!Wweu&1osVhbu(;;A~R8fob& z!y@1Ow{v^iogHR7Q!&uZ(gM$BSUW>UTL*jIUg7p7v!k2}_Fv%Xl=^?x4#s*LdsDai zhwMUDKbCi7rI6M&K{`~bT~#ng?_xAx`P@YU0&^U4 zAm*gbBjR(+r=>Yu<6nor1^5sz;(Al+w6MhRa)4LRMJsg7bL<$t$zKaS?zn~9lhW#W j=?<6HaCbuHyO=P*_ZpbV?g!`r9!{WjzA3N~COrBJ@c8o( literal 434 zcmY+AOHRWu5QfL4O-f53P`E?c-~~&>3REc)1*E9#jXg?TC3a;yJsb-Tz@ZS6hiJR8 z*k=LTh9kVuCjU_Z>@WPbZWwBD*idNY67OY=a<#X~cfE-|dFdKXSq7|?kJ zQ@Iw#VEIaf!K}d0doQfZ(I|98d%HU5lCM_Tb88mWR6SEiqRc#Xb_|B5bxahN6!l+t z+^D*+Np5Q=aiPm5`FQ`krhmkMHl#}ejOZLAh@d%33}fP_4P`KC(G<@1C~498;nYQo P(nEAfdIneY4q)~NVajSI diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class index 19e5eea129a600a5cbe1311d1ec02e18e77cf380..616b396d180a7596fffaa75fb6be911914dc55a7 100644 GIT binary patch literal 777 zcmbVKO-~y!5FMw%=4Q!Z#;hb_wYzWhx9$BnxMVJjHDY|oqIXb&S{g&RJ+8ati5z> z?{&g*fS~^p$5a>8x>ff|W-1@bUst!BctNw;^(;Hi5w|#^iiajIP+?*^pavtuu^Szt%a% z-hRX3&a@#sTFF1opt{_d5DKp|+11V;K)SDox$=dD^!60t$F$-RilUS=tVYnv#6?gX z41S)5H?5T`YW7WG6Fv*3Td)4cZn^bHkf0CvVnlIWP=g}mF|r1hOXcsGeGN4OG)EsR z)_i~#XmJ9y8`MJm63#Nt3eIYvv}vuXdeQzw>wrFkQll^EwLzN|Wec#Nui^6BGqyU% A4*&oF delta 149 zcmeBVYhdC!^>5cc1_lOO2HuHWeqLP3MX8A;siDQGMT`v08k%8@3|yrJDR3d~^wbiN zq+eogDkB3Qkms0_gAm|KNzF-xXrJuJq;1T~!pOkNz{bD;q}ib~2bAW7(p(^#fsuh5 JNHQ_-007Fa9*_V4 diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index 72fac949f4c2ea458994b7bb6ad7b88aefac8104..2978fe5fbe6ca83a153b05df917ffc4c49f75b94 100644 GIT binary patch literal 29670 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

  • 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 I$wx2r-_Bp=S^xk5 literal 29144 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

    Fv6 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 requestAllChannelDto = channelService.findAll(); + if(requestAllChannelDto.isEmpty()) { + System.err.println("채널이 존재하지 않습니다."); + return; + } + + requestAllChannelDto.forEach(req -> { + System.out.println(req); + System.out.println("마지막 메시지 시간 : " + messageService.lastMessageTime(req.channelName())); + }); + System.out.println("총 채널 수 : " + requestAllChannelDto.size()); + } + } + + private void delete() { + System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); + + int n = scanner.nextInt(); + scanner.nextLine(); + + if (n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + } + + System.out.print("삭제하려는 채널명을 알려주세요: "); + String name = scanner.nextLine(); + + if (!channelService.isPresent(name)) { + System.err.println("해당 채널을 찾을 수 없습니다."); + return; + } + + UUID channelId = channelService.findChannelId(name); + + if(channelService.delete(name)) { + messageService.delete(channelId); + readStatusService.deleteForChannel(channelId); + binaryContentRepository.delete(AttachmentType.CHANNEL, channelId); + System.out.println("성공적으로 삭제되었습니다."); + } else { + System.err.println("삭제하지 못했어요!"); + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java deleted file mode 100644 index f2c9fdbd..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannelService.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.sprint.mission.discodeit.app.router; - -import com.sprint.mission.discodeit.service.basic.BasicChannelService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import java.util.Scanner; - -@Component -@RequiredArgsConstructor -public class RouteChannelService { - private final BasicChannelService channelService; - private final IsLogin isLogin; - private final Scanner scanner; - - public void channelService(int routeCRUD) { - int menu; - if(!isLogin.check("Channel", routeCRUD)) { - System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); - return; - } - - switch (routeCRUD) { - - /// create - case 1: - channelService.createChannel(); - break; - - /// update - case 2: - channelService.updateChannel(); - break; - - /// read - case 3: - System.out.println("전체 사용자 정보를 가져올까요?"); - System.out.println("1 : 특정 채널만 가져옵니다"); - System.out.println("2 : 전체 채널을 가져옵니다"); - - // TODO:try-catch로 안정성 확보하기 - menu = scanner.nextInt(); - scanner.nextLine(); - - if (menu == 1) channelService.readChannel(); - else if (menu == 2) channelService.readAllChannel(); - break; - - /// delete - case 4: - channelService.deleteChannel(); - break; - - default: - System.err.println("잘못된 입력값입니다."); - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java new file mode 100644 index 00000000..cd30fd8b --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java @@ -0,0 +1,199 @@ +package com.sprint.mission.discodeit.app.router; + +import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.dto.BinaryContentDto; +import com.sprint.mission.discodeit.entity.AttachmentType; +import com.sprint.mission.discodeit.entity.BinaryContent; +import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.service.ChannelService; +import com.sprint.mission.discodeit.service.basic.BasicMessageService; +import com.sprint.mission.discodeit.service.basic.BasicReadStatusService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.*; + +@Component +@RequiredArgsConstructor +public class RouteMessage { + private final BasicMessageService messageService; + private final Scanner scanner; + private final IsLogin isLogin; + private final UserState userState; + private final ChannelService channelService; + private final BasicReadStatusService readStatusService; + + public void route(int routeCRUD) { + if(!isLogin.check("message", routeCRUD)) { + System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); + return; + } + + switch (routeCRUD) { + case 1: + /// create + create(); + break; + case 2: + /// update + messageService.findAllForSender(userState.getUserId()); + update(); + break; + case 3: + /// read + read(); + break; + case 4: + /// delete + delete(); + break; + default: + return; + } + } + + private void create() { + String senderUserName = userState.getUserName(); + System.out.println("현재 사용자 : " + senderUserName); + System.out.println("어디로 보내는 메시지인가요?"); + String sendeeChannelName = scanner.nextLine(); + channelService.isPresent(sendeeChannelName); + + while(true) { + System.out.println("현재 메시지를 보낼 채널은 " + sendeeChannelName + "입니다."); + System.out.println("현재 메시지를 보낼 사람은 " + senderUserName + "입니다."); + System.out.println("무어라 보내고 싶으신가요?"); + String text = scanner.nextLine(); + + List attatchmentList = attatchment(); + + System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); + System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); + String n = scanner.nextLine(); + + if (Objects.equals(n, "0")) { + System.out.println("처음으로 돌아갑니다."); + return; + } else if (Objects.equals(n, "1")) { + if(messageService.create(text, sendeeChannelName, senderUserName, attatchmentList)) { + System.out.println("성공."); + } else { + System.err.println("알 수 없는 오류로 인해 실패했습니다."); + } + return; + } else { + System.err.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); + } + } + } + + private List attatchment() { + System.out.println("추가할 파일을 입력해주세요."); + System.out.println("마무리됐을 경우, 그냥 엔터를 입력해주세요."); + List result = new ArrayList<>(); + while(true) { + String filename = scanner.nextLine(); + if(filename.trim().isEmpty()) return result; + if(!filename.matches("^.+\\.(png|jpg)$")) { + System.err.println("잘못된 확장자 형식입니다. jpg, png만 지원합니다."); + continue; + } + + result.add(new BinaryContentDto(AttachmentType.MESSAGE, null, filename)); + } + } + + private void update() { + System.out.println("어떤 것을 수정하고 싶나요?"); + String messageId = scanner.nextLine(); + UUID parseUUID; + + try{ + parseUUID = UUID.fromString(messageId); + } catch (Exception e) { + System.err.println("잘못된 입력값입니다 : " + e); + return; + } + + System.out.println("무슨 내용으로 수정하고 싶나요?"); + String content = scanner.nextLine(); + + try { + if (messageService.update(parseUUID, content)) { + System.out.println("성공적으로 변경되었습니다."); + } else { + System.err.println("알 수 없는 오류로 인해 변경하지 못했습니다."); + } + } catch (NotFound e) { + System.err.println(e); + } + } + + private void read() { + System.out.println("현재는 내가 보낸 메시지, 특정 채널 메시지를 조회하는 기능만 있습니다."); + System.out.println("1. 내가 보낸 메시지 확인하기"); + System.out.println("2. 채널에 있는 메시지 확인하기"); + int m = scanner.nextInt(); + scanner.nextLine(); + + List requestDto; + + if (m == 1) { + requestDto = messageService.findAllForSender(userState.getUserId()); + } else if (m == 2) { + System.out.println("어디로 보낸 메시지인가요?"); + String sendeeChannelName = scanner.nextLine(); + if (channelService.isPresent(sendeeChannelName)) { + System.out.println("존재하지 않는 채널입니다."); + return; + } + readStatusService.update(userState.getUserId(), sendeeChannelName); + requestDto = messageService.findAllInChannel(sendeeChannelName); + } else return; + + showMessage(requestDto); + } + + private void showMessage(List requestDto) { + if(requestDto.isEmpty()) { + System.out.println("아무것도 없네요!"); + return; + } + + requestDto.forEach(System.out::println); + System.out.println("총 메세지 개수 : " + requestDto.size()); + } + + private void delete() { + UUID userId = userState.getUserId(); + + System.out.println("현재는 내가 보낸 메시지를 삭제하는 기능만 지원하고 있습니다."); + System.out.println("당신이 보낸 메시지는 다음과 같습니다."); + messageService.findAllForSender(userId); + + System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); + String id = scanner.nextLine(); + UUID parseId; + + try{ + parseId = UUID.fromString(id); + } catch (Exception e) { + System.err.println("잘못된 입력값입니다. : " + e); + return; + } + + if (!messageService.isPresent(userId, parseId)) { + System.err.println("실패. 해당 ID를 찾지 못했습니다."); + return; + } + + System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); + String isDelete = scanner.nextLine(); + + if (isDelete.equalsIgnoreCase("Y")) { + if(messageService.delete(userId, UUID.fromString(id))) { + System.out.println("성공!"); + } else System.err.println("실패!"); + } else System.out.println("초기로 돌아갑니다"); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java deleted file mode 100644 index b3d41b72..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessageService.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.sprint.mission.discodeit.app.router; - -import com.sprint.mission.discodeit.UserState; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; -import com.sprint.mission.discodeit.service.basic.BasicMessageService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import java.util.Scanner; - -@Component -@RequiredArgsConstructor -public class RouteMessageService { - private final FileUserRepository userRepository; - private final FileChannelRepository channelRepository; - private final BasicMessageService messageService; - private final Scanner scanner; - private final IsLogin isLogin; - private final UserState userState; - - public void messageService(int routeCRUD) { - int m; - String sendeeChannelName; - if(!isLogin.check("message", routeCRUD)) { - System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); - return; - } - - switch (routeCRUD) { - case 1: - /// create - messageService.createMessage(); - break; - case 2: - /// update - messageService.updateMessage(userState.getUserName()); - break; - case 3: - /// read - System.out.println("현재는 내가 보낸 메시지, 특정 채널 메시지를 조회하는 기능만 있습니다."); - System.out.println("1. 내가 보낸 메시지 확인하기"); - System.out.println("2. 채널에 있는 메시지 확인하기"); - m = scanner.nextInt(); - scanner.nextLine(); - - if (m == 1) { - messageService.getMessageForSender(userState.getUserId()); - } else if (m == 2) { - System.out.println("어디로 보낸 메시지인가요?"); - sendeeChannelName = scanner.nextLine(); - if (channelRepository.isPresentChannel(sendeeChannelName)) { - System.out.println("존재하지 않는 채널입니다."); - return; - } - messageService.getMessageInChannel(sendeeChannelName); - } - break; - case 4: - /// delete - System.out.println("현재는 내가 보낸 메시지를 삭제하는 기능만 지원하고 있습니다."); - messageService.deleteMessage(userState.getUserName()); - break; - default: - return; - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java new file mode 100644 index 00000000..bfa64322 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java @@ -0,0 +1,169 @@ +package com.sprint.mission.discodeit.app.router; + +import com.sprint.mission.discodeit.Input; +import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.service.basic.BasicBinaryContentService; +import com.sprint.mission.discodeit.service.basic.BasicUserService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Scanner; + +@Component +@RequiredArgsConstructor +public class RouteUser { + private final BasicUserService userService; + private final BasicBinaryContentService binaryContentService; + private final Scanner scanner; + private final IsLogin isLogin; + private final Input input; + private final UserState userState; + + public void route(int routeCRUD) { + int menu; + if(!isLogin.check("User", routeCRUD)) { + System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); + return; + } + + switch (routeCRUD) { + /// create + case 1: + create(); + break; + + /// update + case 2: + update(); + break; + + /// read + case 3: + System.out.println("전체 사용자 정보를 가져올까요?"); + System.out.println("1 : 특정 사용자만 가져옵니다"); + System.out.println("2 : 전체 사용자를 가져옵니다"); + + menu = scanner.nextInt(); + scanner.nextLine(); + + if (menu == 1) find(); + else if (menu == 2) findAll(); + break; + + /// delete + case 4: + delete(); + break; + + default: + return; + } + } + + private void create() { + System.out.println("===================="); + System.out.println("회원가입에 오신 것을 환영합니다."); + System.out.print("먼저, 사용할 이름을 작성해주세요 : "); + String name = scanner.nextLine().trim(); + + if (userService.isPresent(name)) { + System.out.println("이미 존재하는 사용자명입니다."); + return; + } + + System.out.print("사용할 비밀번호를 입력해주세요 : "); + String password = scanner.nextLine(); + + System.out.print("사용할 프로필 이미지를 입력해주세요 : "); + String profileImage = scanner.nextLine(); + if(userService.create(new CreateUserDto(name, password, profileImage))) { + System.out.println("성공적으로 추가했습니다."); + } else System.err.println("알 수 없는 오류로 실패했습니다."); + } + + private void update() { + System.out.println("===================="); + System.out.println("사용자 변경 메뉴입니다."); + System.out.println("현재 로그인한 사용자의 비밀번호를 입력해주세요"); + String password = scanner.nextLine(); + if(!userService.isValid(password)) { + System.err.println("비밀번호가 일치하지 않습니다. 처음으로 돌아갑니다."); + } + + while(true) { + System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); + + String reName = input.inputUpdateField("사용자명", "\\S+"); + String rePassword = input.inputUpdateField("비밀번호", "\\S+"); + String reMail = input.inputUpdateField("이메일", "\\S+@\\S+\\.\\S+"); + String rePhoneNumber = input.inputUpdateField("전화번호", "^\\d{10,11}$"); + String reProfile = input.inputUpdateField("프로필 이미지", "\\."); + + System.out.println("이대로 진행하시겠습니까?"); + System.out.println("맞으면 y, 다시 입력하려면 re"); + System.out.println("취소하려면 n을 입력해주시기 바랍니다."); + + String finalCheckIsContinue = scanner.nextLine(); + + if(finalCheckIsContinue.equalsIgnoreCase("re")) continue; + if(finalCheckIsContinue.equalsIgnoreCase("n")) return; + + if(finalCheckIsContinue.equalsIgnoreCase("y") && userService.update(reName, rePassword, reMail, rePhoneNumber, reProfile)) { + System.out.println("성공적으로 변경되었습니다."); + } + + System.err.println("알 수 없는 오류로 인해 실패했습니다."); + } + } + + private void find() { + System.out.println("조회하고자 하는 사용자명을 입력해주세요"); + String name = scanner.nextLine(); + + try { + System.out.println(userService.find(name)); + System.out.println("===================="); + } catch (NotFound e) { + System.err.println("[ERROR]" + e); + } + } + + private void findAll() { + if(userService.findAll().isEmpty()) { + System.err.println("사용자를 찾을 수 없습니다."); + } + + List findAllUser = userService.findAll(); + + findAllUser.forEach(System.out::println); + System.out.println("총 사용자 : " + findAllUser.size()); + } + + private void delete() { + System.err.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); + System.err.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); + System.err.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); + + int n = scanner.nextInt(); + scanner.nextLine(); + if (n == 0) { + System.out.println("처음으로 돌아갑니다."); + return; + } + + System.out.println("현재 로그인한 사용자의 비밀번호를 입력해주세요."); + String password = scanner.nextLine(); + + if(!userService.isValid(password)) { + System.err.println("비밀번호가 일치하지 않습니다. 처음으로 돌아갑니다."); + } + + if(userService.delete(userState.getUserId())) { + userState.userState(""); + System.out.println("성공적으로 삭제되었습니다."); + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java deleted file mode 100644 index 9327a7f3..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUserService.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.sprint.mission.discodeit.app.router; - -import com.sprint.mission.discodeit.service.basic.BasicUserService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import java.util.Scanner; - -@Component -@RequiredArgsConstructor -public class RouteUserService { - private final BasicUserService userService; - private final Scanner scanner; - private final IsLogin isLogin; - - public void userService(int routeCRUD) { - int menu; - if(!isLogin.check("User", routeCRUD)) { - System.err.println("해당 기능은 로그인한 후 이용 가능합니다."); - return; - } - - switch (routeCRUD) { - /// create - case 1: - userService.createUser(); - break; - - /// update - case 2: - userService.updateUser(); - break; - - /// read - case 3: - System.out.println("전체 사용자 정보를 가져올까요?"); - System.out.println("1 : 특정 사용자만 가져옵니다"); - System.out.println("2 : 전체 사용자를 가져옵니다"); - - menu = scanner.nextInt(); - scanner.nextLine(); - - if (menu == 1) userService.getUserName(); - else if (menu == 2) userService.getAllUserName(); - break; - - /// delete - case 4: - userService.deleteUser(); - break; - - default: - return; - } - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java index 0f5e1fc1..6e02f783 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java @@ -1,6 +1,7 @@ package com.sprint.mission.discodeit.app.router; import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.dto.LoginDto; import com.sprint.mission.discodeit.service.auth.AuthService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -10,24 +11,15 @@ @Component @RequiredArgsConstructor public class Router { - private final RouteMessageService routeMessageService; - private final RouteUserService routeUserService; - private final RouteChannelService routeChannelService; - private final Scanner sc; + private final RouteMessage routeMessage; + private final RouteUser routeUser; + private final RouteChannel routeChannel; + private final Scanner scanner; private final AuthService authService; private final UserState userState; - private int inputChecker() { - try{ - return Integer.parseInt(sc.nextLine().trim()); - } catch (NumberFormatException e) { - System.out.println("잘못된 입력값입니다."); - } - return -1; - } - public void route() { - int subMenu = 0; + int subMenu; int menu; while(true) { @@ -41,15 +33,15 @@ public void route() { System.out.println("4. 메시지 관련 서비스"); System.out.println("===================="); - menu = sc.nextInt(); - sc.nextLine(); + menu = scanner.nextInt(); + scanner.nextLine(); if (menu == 0) System.exit(0); switch (menu) { case 1: if (isLogin) { - authService.login(); + login(); } else { authService.logout(); } @@ -61,7 +53,7 @@ public void route() { if(subMenu == -1) continue; - routeUserService.userService(subMenu); + routeUser.route(subMenu); break; case 3: @@ -70,7 +62,7 @@ public void route() { if(subMenu == -1) continue; - routeChannelService.channelService(subMenu); + routeChannel.route(subMenu); break; case 4: @@ -79,7 +71,7 @@ public void route() { if(subMenu == -1) continue; - routeMessageService.messageService(subMenu); + routeMessage.route(subMenu); break; default: @@ -87,4 +79,23 @@ public void route() { } } } + + private int inputChecker() { + try{ + return Integer.parseInt(scanner.nextLine().trim()); + } catch (NumberFormatException e) { + System.out.println("잘못된 입력값입니다."); + } + return -1; + } + + private void login() { + System.out.println("로그인 서비스입니다."); + System.out.println("로그인할 사용자명을 입력해주세요"); + String name = scanner.nextLine().trim(); + System.out.println("해당 사용자의 비밀번호를 입력해주세요"); + String password = scanner.nextLine().trim(); + + authService.login(new LoginDto(name, password)); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java new file mode 100644 index 00000000..e94e9380 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java @@ -0,0 +1,9 @@ +package com.sprint.mission.discodeit.dto; + +import com.sprint.mission.discodeit.entity.AttachmentType; + +import java.util.List; +import java.util.UUID; + +public record BinaryContentDto(AttachmentType type, UUID id, String filename) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/LoginDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/LoginDto.java new file mode 100644 index 00000000..e671368d --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/LoginDto.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.dto; + +public record LoginDto(String name, String password) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/ResponseChannelDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/ResponseChannelDto.java index adf8935d..b2d27dac 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/ResponseChannelDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/ResponseChannelDto.java @@ -16,7 +16,7 @@ public record ResponseChannelDto( Instant createAt, Instant updateAt, String createUser, - Map accessableUsers + Map accessibleUsers ) { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); @@ -32,7 +32,7 @@ public String toString() { String accessUserResult = ""; if(type.equals(ChannelType.PRIVATE)) { try { - accessUserResult = accessableUsers.entrySet().stream() + accessUserResult = accessibleUsers.entrySet().stream() .map(entry -> "멤버명 : " + entry.getKey() + "\n멤버 ID : " + entry.getValue() + "\n") .collect(Collectors.joining()); } catch (Exception ignore) {} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/AttachmentType.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/AttachmentType.java new file mode 100644 index 00000000..a64d65c9 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/AttachmentType.java @@ -0,0 +1,5 @@ +package com.sprint.mission.discodeit.entity; + +public enum AttachmentType { + USER, MESSAGE, CHANNEL +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/exepction/NotFound.java b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/NotFound.java new file mode 100644 index 00000000..a22bbeed --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/NotFound.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.exepction; + +public class NotFound extends RuntimeException { + public NotFound(String message) { + super(message); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java new file mode 100644 index 00000000..4decc1b6 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java @@ -0,0 +1,11 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.entity.AttachmentType; + +import java.util.UUID; + +public interface BinaryContentRepository { + boolean create(AttachmentType type, UUID id, String file); + + boolean delete(AttachmentType type, UUID id); +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java index b8106bdf..88a9c2cc 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -6,13 +6,15 @@ import java.util.UUID; public interface MessageRepository { - boolean createMessage(String content, UUID channelId, UUID userId); + String create(String content, UUID channelId, UUID userId); - List getInChannelMessage(UUID userId); + List findAllInChannel(UUID userId); - List getMessageForSender(UUID userId); + List findAllForSender(UUID userId); boolean updateMessage(UUID id, String content); - boolean deleteMessage(UUID userId, UUID id); + boolean delete(UUID userId, UUID id); + + void delete(UUID channelId); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index 6bdcbf88..7797bfcd 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -12,7 +12,7 @@ public interface UserRepository { String getUser(String name); - List getAllUser(); + List findAll(); boolean deleteUser(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java new file mode 100644 index 00000000..6fa54f6f --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java @@ -0,0 +1,46 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.entity.AttachmentType; +import com.sprint.mission.discodeit.entity.BinaryContent; +import com.sprint.mission.discodeit.repository.BinaryContentRepository; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +public class FileBinaryContentRepository implements BinaryContentRepository { + private final Map fileIdMap = new ConcurrentHashMap<>(); + private final Map> messageIdMap = new ConcurrentHashMap<>(); + private final Map userIdMap = new ConcurrentHashMap<>(); + private final Map channelIdMap = new ConcurrentHashMap<>(); + + @Override + public boolean create(AttachmentType type, UUID id, String file) { + BinaryContent binaryContent = new BinaryContent(file); + fileIdMap.put(binaryContent.getId(), binaryContent); + switch (type){ + case MESSAGE -> messageIdMap.computeIfAbsent(id, m -> new ArrayList<>()).add(binaryContent); + case CHANNEL -> channelIdMap.put(id, binaryContent); + case USER -> userIdMap.put(id, binaryContent); + } + return true; + } + + @Override + public boolean delete(AttachmentType type, UUID id) { + try{ + switch (type){ + case MESSAGE -> messageIdMap.remove(id); + case CHANNEL -> channelIdMap.remove(id); + case USER -> userIdMap.remove(id); + } + return true; + } catch (Exception e) { + return false; + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index ebb12054..42a41927 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -4,6 +4,7 @@ import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.ChannelType; +import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.repository.ChannelRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; @@ -85,15 +86,11 @@ public boolean save(Channel channel) { oos.writeObject(channel); oos.flush(); if (channel.getChannelType() == ChannelType.PUBLIC) { - publicChannelNameMap.getOrDefault(channel.getName(), - publicChannelNameMap.put(channel.getName(), channel)); - publicChannelIdMap.getOrDefault(channel.getId(), - publicChannelIdMap.put(channel.getId(), channel)); + publicChannelNameMap.put(channel.getName(), channel); + publicChannelIdMap.put(channel.getId(), channel); } else { - privateChannelIdMap.getOrDefault(channel.getId(), - privateChannelIdMap.put(channel.getId(), channel)); - privateChannelNameMap.getOrDefault(channel.getName(), - privateChannelNameMap.put(channel.getName(), channel)); + privateChannelIdMap.put(channel.getId(), channel); + privateChannelNameMap.put(channel.getName(), channel); } return true; @@ -157,11 +154,12 @@ public ChannelType getChannelType(String name) { } public UUID readChannelId(String name) { - try { + if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getId(); - } catch (Exception e) { - return null; - } + if(privateChannelNameMap.containsKey(name)) + return privateChannelNameMap.get(name).getId(); + + throw new NotFound("해당 채널을 찾을 수 없습니다"); } @Override // FIXME: 접근 권한 있는 채널만 조회하도록 변경해야 함. diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 0c3e527b..530eea40 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -73,24 +73,36 @@ public void init() { } @Override - public boolean createMessage(String content, UUID channelId, UUID userId) { + public String create(String content, UUID channelId, UUID userId) { + // 1. 필수값 검증 (방어 코드 추가) + if (channelId == null) { + throw new IllegalArgumentException("Channel ID cannot be null"); + } + if (userId == null) { + throw new IllegalArgumentException("User ID cannot be null"); + } + Message message = new Message(channelId, userId, content); + + // ConcurrentHashMap은 null key를 허용하지 않으므로 위에서 검증 필수 channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); + Path path = resolvePath(message.getId()); try ( FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos) ) { oos.writeObject(message); - return true; + return message.getUserId().toString(); } catch (IOException e) { - return false; + e.printStackTrace(); // 에러 로그 확인용 + return ""; } } @Override - public List getInChannelMessage(UUID channelId) { + public List findAllInChannel(UUID channelId) { List result = new ArrayList<>(); try{ channelIdMessageMap.get(channelId) @@ -116,7 +128,7 @@ public Instant getLastMessageInChannel(UUID channelId) { } @Override - public List getMessageForSender(UUID userId) { + public List findAllForSender(UUID userId) { List result = new ArrayList<>(); try{ userIdMessageMap.get(userId) @@ -147,7 +159,7 @@ public boolean updateMessage(UUID id, String content) { } @Override - public boolean deleteMessage(UUID userId, UUID id) { + public boolean delete(UUID userId, UUID id) { Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); UUID channelId = message.getSendChannelId(); @@ -163,6 +175,13 @@ public boolean deleteMessage(UUID userId, UUID id) { } } + @Override + public void delete(UUID channelId) { + channelIdMessageMap.get(channelId).forEach(message -> { + delete(message.getUserId(), message.getId()); + }); + } + public boolean check(UUID userId, UUID id) { Object result = userIdMessageMap.get(userId).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); return result == null; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java index 0d2914ad..b9e426d4 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java @@ -2,6 +2,7 @@ import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.ReadStatus; +import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.repository.ReadStatusRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; @@ -22,6 +23,7 @@ public class FileReadStatusRepository implements ReadStatusRepository { // TODO: UserId:ReadStatus private final Map idReadStatusMap = new ConcurrentHashMap<>(); private final Map> userIdReadStatusMap = new ConcurrentHashMap<>(); + private final Map> channelIdReadStatusMap = new ConcurrentHashMap<>(); private Path DIRECTORY; private final String EXTENSION = ".ser"; @@ -63,6 +65,7 @@ public void create(UUID userId, UUID channelId) { ReadStatus temp = new ReadStatus(userId, channelId); idReadStatusMap.put(temp.getId(), temp); userIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(temp); + channelIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(temp); Path path = resolvePath(temp.getId()); try (FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { @@ -86,14 +89,20 @@ public Map findAllByUserId(UUID userId) { return result; } - public void update(UUID id) { - ReadStatus temp = idReadStatusMap.get(id); - Path path = resolvePath(id); + public boolean update(UUID userId, UUID channelId) { + ReadStatus temp = userIdReadStatusMap.get(userId).stream().filter(readStatus -> readStatus.getChannelId().equals(channelId)).findFirst().orElse(null); + + if(temp == null) throw new NotFound("상태값을 찾지 못했습니다."); + + Path path = resolvePath(userId); try (FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(temp); + temp.updateReadAt(); + return true; } catch (IOException e) { System.err.println("[ERROR] : " + e); + return false; } } @@ -101,11 +110,23 @@ public boolean delete(UUID id) { Path path = resolvePath(id); try { Files.delete(path); - userIdReadStatusMap.remove(idReadStatusMap.remove(id).getUserId()); + ReadStatus temp = idReadStatusMap.remove(id); + userIdReadStatusMap.remove(temp.getUserId()); + channelIdReadStatusMap.remove(temp.getChannelId()); return true; } catch (IOException e) { System.err.println("[ERROR] : "+ e); return false; } } + + public void deleteForChannel(UUID channelId) { + List temp = channelIdReadStatusMap.get(channelId); + temp.forEach(t -> delete(t.getId())); + } + + public void deleteForUser(UUID userId) { + List temp = userIdReadStatusMap.get(userId); + temp.forEach(t -> delete(t.getId())); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index 6fcb1b17..f9648897 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -101,7 +101,7 @@ public String getUser(String name) { } @Override - public List getAllUser() { + public List findAll() { List result = new ArrayList<>(); idUserMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(UserFinder.from(user, userStatusMap.get(user.getId())))); return result; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java index d76cbc52..6c05e75a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -3,14 +3,9 @@ import com.sprint.mission.discodeit.dto.MessageResponseDto; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.repository.MessageRepository; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; -import java.io.IOException; -import java.nio.file.Files; -import java.text.SimpleDateFormat; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; @@ -25,15 +20,15 @@ public class JCFMessageRepository implements MessageRepository { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); @Override - public boolean createMessage(String content, UUID channelId, UUID userId) { + public String create(String content, UUID channelId, UUID userId) { Message message = new Message(channelId, userId, content); channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); - return true; + return ""; } @Override - public List getInChannelMessage(UUID channelId) { + public List findAllInChannel(UUID channelId) { List result = new ArrayList<>(); try{ channelIdMessageMap.get(channelId) @@ -50,7 +45,7 @@ public List getInChannelMessage(UUID channelId) { } @Override - public List getMessageForSender(UUID userId) { + public List findAllForSender(UUID userId) { List result = new ArrayList<>(); try{ userIdMessageMap.get(userId) @@ -77,7 +72,7 @@ public boolean updateMessage(UUID id, String content) { } @Override - public boolean deleteMessage(UUID userId, UUID id) { + public boolean delete(UUID userId, UUID id) { Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); UUID channelId = message.getSendChannelId(); try { @@ -90,6 +85,11 @@ public boolean deleteMessage(UUID userId, UUID id) { } } + @Override + public void delete(UUID channelId) { + + } + public boolean check(UUID userId, UUID id) { Object result = userIdMessageMap.get(userId).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); return result == null; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java index 874a3055..510630bf 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -44,7 +44,7 @@ public String getUser(String name) { } @Override - public List getAllUser() { + public List findAll() { List result = new ArrayList<>(); usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(user.toString())); return result; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/AttechmentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/AttechmentRepository.java deleted file mode 100644 index 38c13a28..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/AttechmentRepository.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.sprint.mission.discodeit.service; - -public interface AttechmentRepository { -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index bd46b5ad..87321b41 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -1,23 +1,15 @@ package com.sprint.mission.discodeit.service; -import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.dto.FindChannelDto; +import com.sprint.mission.discodeit.dto.ResponseChannelDto; -import java.util.Scanner; -import java.util.UUID; +import java.util.List; public interface ChannelService { - void createChannel(); - void updateChannel(); - - void readChannel(); - - void readAllChannel(); - void deleteChannel(); - - /// check -// void isChannelName(); -// Channel isChannelName(String name); -// String isChannelName(UUID id); -// Channel check(String name); -// Channel check(UUID id); + boolean isPresent(String name); + boolean create(String type, String name); + FindChannelDto find(String name); + List findAll(); + boolean update(String oldName, String newName); + boolean delete(String name); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index 15d727a1..82158cf7 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -1,22 +1,21 @@ package com.sprint.mission.discodeit.service; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.entity.User; - import java.util.List; -import java.util.Scanner; import java.util.UUID; public interface MessageService { - void createMessage(); + boolean create(String text, String sendeeChannelName, String senderUserName); + + boolean update(UUID messageId, String content); + + List findAllForSender(UUID userId); - void updateMessage(String channelName); + List findAllInChannel(String name); - void getMessageForSender(UUID userId); + boolean delete(UUID userId, UUID messageId); - void getMessageInChannel(String name); + void delete(UUID channelId); - void deleteMessage(String userName); + String lastMessageTime(String channelName); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java index dbd68d67..5f753a7f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java @@ -1,4 +1,17 @@ package com.sprint.mission.discodeit.service; +import java.util.UUID; + public interface ReadStatusService { + void create(UUID userId, UUID channelId); + + void find(UUID id); + + void findAllByUserId(UUID userId); + + boolean update(UUID userId, String channelName); + + void deleteForChannel(UUID channelId); + + void deleteForUser(UUID userId); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java index b5808b70..dc425bb5 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -1,28 +1,18 @@ package com.sprint.mission.discodeit.service; -import java.util.Scanner; +import com.sprint.mission.discodeit.dto.CreateUserDto; -/// 인터페이스를 쓰고자 하는 이유를 생각해보기 -/// Test Driven Develope 방식으로 생각하기 -/// 이것을 바탕으로 쓰겠다는 청사진을 작성하는 것이다. -/// 설계를 먼저 제대로 하면 인터페이스 수정이 줄어들 것이다. -/// 협업할 때 다른 사람이 이해하기 쉬운 방식으로 구현하기. -/// -/// 자바랑 자바스크립트는 별도로 생각하고 구현하기. (변수명 정확히 하기) -/// 묵직하게 자바 스타일로 구현하는 것이 중요하다. -/// Question: 자바 스타일을 배우기 위해 좋은 가이드라인 / 책이 있을지 +import java.util.List; +import java.util.UUID; public interface UserService { - void createUser(); - void updateUser(); - void getUserName(); - void getAllUserName(); - void deleteUser(); -} + boolean isPresent(String name); -/// 네 맞아요 -/// 협업하는 것을 해본 적이 없어서 이번 과정을 신청해봤고 -/// 그래서 피드백 받는 과정이 참 좋네요 -/// 근데 진짜 자바스크립트 기반으로 생각하게 돼요 -/// 재훈님 은비님 스타일 흡수하는 것이 좋겠다는 피드백을 받음 -/// FIXME : 암호화 알고리즘 간단한 것을 적용해보는 것도 생각해보기 \ No newline at end of file + boolean isValid(String password); + + boolean create(CreateUserDto requestDto); + boolean update(String reName, String rePassword, String reMail, String rePhoneNumber, String reProfile); + String find(String name); + List findAll(); + boolean delete(UUID id); +} \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java index e5191205..8f766b0e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java @@ -1,37 +1,29 @@ package com.sprint.mission.discodeit.service.auth; import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.dto.LoginDto; +import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; - -import java.util.Scanner; import java.util.UUID; @Service @RequiredArgsConstructor public class AuthService { private final FileUserRepository userRepository; - private final Scanner scanner; private final UserState userState; - public boolean login() { - System.out.println("로그인 서비스입니다."); - System.out.println("로그인할 사용자명을 입력해주세요"); - String name = scanner.nextLine().trim(); - System.out.println("해당 사용자의 비밀번호를 입력해주세요"); - String password = scanner.nextLine().trim(); - + public void login(LoginDto requestDto) { /// 검증로직 - UUID id = userRepository.userNameToId(name); + try { + UUID id = userRepository.userNameToId(requestDto.name()); - if(!userRepository.check(id, password)) { - userState.userState(name, id); - System.out.println("성공!"); - return true; - } else { - System.err.println("실패, 다시 확인해주시기 바랍니다."); - return false; + if(!userRepository.check(id, requestDto.password())) { + userState.userState(requestDto.name(), id); + } else throw new Exception(); + } catch (Exception ignore) { + throw new NotFound("해당 사용자를 찾지 못했습니다."); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java deleted file mode 100644 index bb0b8994..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/AttachmentRepository.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.sprint.mission.discodeit.service.basic; - -import com.sprint.mission.discodeit.entity.BinaryContent; -import com.sprint.mission.discodeit.service.AttechmentRepository; -import org.springframework.stereotype.Repository; - -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -@Repository -public class AttachmentRepository implements AttechmentRepository { - private final Map fileIdMap = new ConcurrentHashMap<>();private final Map relationIdMap = new ConcurrentHashMap<>(); - public boolean create(UUID id, String file) { - BinaryContent binaryContent = new BinaryContent(file); - fileIdMap.put(binaryContent.getId(), binaryContent); - relationIdMap.put(id, binaryContent); - return true; - } - - public boolean delete(UUID relationId) { - try{ - relationIdMap.remove(relationId); - return true; - } catch (Exception e) { - return false; - } - } - - public String getAttachementFile(UUID id) { - return fileIdMap.get(id).getFileName(); - } -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java new file mode 100644 index 00000000..d2b5c50e --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java @@ -0,0 +1,19 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.dto.BinaryContentDto; +import com.sprint.mission.discodeit.repository.BinaryContentRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class BasicBinaryContentService { + private final BinaryContentRepository binaryContentRepository; + +// public boolean create(String filename) { +// binaryContentRepository; +// return true; +// } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java index f8995a3e..0e16d1ec 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -14,126 +14,62 @@ import java.time.Instant; import java.util.List; -import java.util.Scanner; import java.util.UUID; @Service @RequiredArgsConstructor public class BasicChannelService implements ChannelService { - private final Scanner scanner; private final FileChannelRepository channelRepository; private final FileUserRepository userRepository; private final UserState userState; private final FileMessageRepository messageRepository; @Override - public void createChannel() { - System.out.println("사용하려는 채널명이 무엇인가요?"); - String name = scanner.nextLine().trim(); - - if (channelRepository.isPresentChannel(name)) { - System.out.println("이미 존재하는 채널명이에요!"); - return; - } + public boolean isPresent(String name) { + return channelRepository.isPresentChannel(name); + } + @Override + public boolean create(String type, String name) { String createUserName = userState.getUserName(); UUID createUserId = userRepository.userNameToId(createUserName); - System.out.println("해당 채널의 성격을 알려주세요. (숫자 혹은 뒤의 영어를 입력해주시면 됩니다.)"); - System.out.println("1. PUBLIC"); - System.out.println("2. PRIVATE"); - String type = scanner.nextLine().trim(); - if(type.equalsIgnoreCase("public") || type.equals("1")) { channelRepository.save(new Channel(name, createUserName, createUserId)); } else if (type.equalsIgnoreCase("private") || type.equals("2")) { channelRepository.save(new Channel(name, createUserName, createUserId, ChannelType.PRIVATE)); - } else { - System.err.println("잘못된 입력값입니다. 처음으로 돌아갑니다."); - } + } else return false; - System.out.println("잘 들어갔어요!"); + return true; } @Override - public void readChannel() { - System.out.println("검색할 채널명을 알려주세요"); - String name = scanner.nextLine().trim(); - + public FindChannelDto find(String name) { UUID channelId = channelRepository.channelNameToId(name); String channelInfo = channelRepository.readChannel(name); ChannelType channelType = channelRepository.getChannelType(name); Instant lastMessageTime = messageRepository.getLastMessageInChannel(channelId); - FindChannelDto requestChannelDto = new FindChannelDto(channelInfo, channelType, lastMessageTime); - System.out.println(requestChannelDto.getInfo()); + return new FindChannelDto(channelInfo, channelType, lastMessageTime); } - @Override - public void readAllChannel() { - List allChannel = channelRepository.readAllChannel(); - - if (allChannel.isEmpty()) { - System.out.println("채널이 존재하지 않습니다."); - return; - } - - allChannel.forEach(System.out::println); - - System.out.println("현재 총 채널수 : " + allChannel.size()); + public UUID findChannelId(String channelName) { + return channelRepository.channelNameToId(channelName); } @Override - public void updateChannel() { - System.out.println("변경하고자 하는 채널명을 알려주세요"); - String oldName = scanner.nextLine(); - - if(!channelRepository.isPresentChannel(oldName)) { - System.out.println("해당 채널이 존재하지 않습니다."); - return; - } - - System.out.println("현재 채널명 : " + oldName); - System.out.println("무엇으로 변경하고 싶은가요? "); - - String newName = scanner.nextLine(); - - if(channelRepository.save(oldName, newName)) - System.out.println("잘 변경되었어요!"); + public List findAll() { + return channelRepository.readAllChannel(); } -// @Override - public void inviteUserInPrivateChannel() { - System.out.println("현재 당신이 참여하고 있는 PRIVATE 채널은 다음과 같습니다."); - + @Override + public boolean update(String oldName, String newName) { + return channelRepository.save(oldName, newName); } @Override - public void deleteChannel() { - System.out.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.out.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.out.println("[Warning!] 계속 진행하려면 아무 숫자나 입력해주세요"); - - int n = scanner.nextInt(); - scanner.nextLine(); - if (n == 0) { - System.out.println("처음으로 돌아갑니다."); - return; - } - - System.out.print("삭제하려는 채널명을 알려주세요: "); - String inputChannelName = scanner.nextLine(); - - if(!channelRepository.isPresentChannel(inputChannelName)) { - System.out.println("해당 채널을 찾을 수 없습니다."); - return; - } - - if (channelRepository.deleteChannel(inputChannelName)) { - System.out.println("해당 채널이 삭제되었습니다."); - } else { - System.err.println("오류가 발생하여 삭제할 수 없습니다."); - } + public boolean delete(String name) { + return channelRepository.deleteChannel(name); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java index e40a21b9..5b2e4a74 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -1,7 +1,11 @@ package com.sprint.mission.discodeit.service.basic; import com.sprint.mission.discodeit.UserState; +import com.sprint.mission.discodeit.dto.BinaryContentDto; import com.sprint.mission.discodeit.dto.MessageResponseDto; +import com.sprint.mission.discodeit.entity.AttachmentType; +import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.repository.file.FileBinaryContentRepository; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileMessageRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; @@ -10,83 +14,54 @@ import org.springframework.stereotype.Service; import java.util.List; -import java.util.Objects; -import java.util.Scanner; import java.util.UUID; @Service @RequiredArgsConstructor public class BasicMessageService implements MessageService { private final UserState userState; - private final Scanner scanner; private final FileUserRepository userRepository; private final FileChannelRepository channelRepository; private final FileMessageRepository messageRepository; + private final FileBinaryContentRepository binaryContentRepository; - @Override - public void createMessage() { - String senderUserName = userState.getUserName(); - System.out.println("현재 사용자 : " + senderUserName); - System.out.println("어디로 보내는 메시지인가요?"); - String sendeeChannelName = scanner.nextLine(); - - if(!channelRepository.isPresentChannel(sendeeChannelName)) { - System.err.println("존재하지 않는 채널입니다."); - return; - } + public boolean isPresent(UUID userId, UUID messageId) { + return messageRepository.check(userId, messageId); + } + @Override + public boolean create(String text, String sendeeChannelName, String senderUserName) { UUID channelId = channelRepository.readChannelId(sendeeChannelName); UUID userId = userRepository.userNameToId(senderUserName); - while(true) { - System.out.println("현재 메시지를 보낼 채널은 " + sendeeChannelName + "입니다."); - System.out.println("현재 메시지를 보낼 사람은 " + senderUserName + "입니다."); - System.out.println("무어라 보내고 싶으신가요?"); - String text = scanner.nextLine(); - - System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); - System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); - String n = scanner.nextLine(); - - if (Objects.equals(n, "0")) { - System.out.println("처음으로 돌아갑니다."); - return; - } else if (Objects.equals(n, "1")) { - if(messageRepository.createMessage(text, channelId, userId)) { - System.out.println("성공."); - } - return; - } else { - System.err.println("잘못 입력했습니다. 메시지 입력 부분으로 돌아갑니다."); - } - } + /// 사실 2차 검증이라 불필요한거 같긴 한데.. + return channelId != null && userId != null && !messageRepository.create(text, channelId, userId).isEmpty(); } - @Override - public void getMessageForSender(UUID userId) { - List messageRequestDto = messageRepository.getMessageForSender(userId); - if (messageRequestDto.isEmpty()) { - System.out.println("아쉽지만 아무것도 없네요!"); - return; - } + public boolean create(String text, String sendeeChannelName, String senderUserName, List binaryContentDtos) { + UUID channelId = channelRepository.readChannelId(sendeeChannelName); + UUID userId = userRepository.userNameToId(senderUserName); + + String messageIdS = messageRepository.create(text, channelId, userId); + + if(messageIdS.isEmpty()) throw new NotFound("메시지 ID가 없습니다"); + + UUID messageId = UUID.fromString(messageIdS); - System.out.println("당신이 보낸 메시지는 아래와 같습니다."); - messageRequestDto.forEach(dto -> System.out.println(formattingMessage(dto))); + binaryContentDtos.forEach(content -> binaryContentRepository.create(AttachmentType.MESSAGE, messageId, content.filename())); + return true; } @Override - public void getMessageInChannel(String channelName) { - UUID channelId = channelRepository.channelNameToId(channelName); - List messageRequestDto = messageRepository.getInChannelMessage(channelId); - - if (messageRequestDto.isEmpty()) { - System.out.println("해당 채널에 보낸 메시지가 없어요."); - return; - } + public List findAllForSender(UUID userId) { + return messageRepository.findAllForSender(userId).stream().map(this::formattingMessage).toList(); + } - messageRequestDto.forEach(dto -> System.out.println(formattingMessage(dto))); - System.out.println("총 메시지 : " + messageRequestDto.size()); + @Override + public List findAllInChannel(String channelName) { + UUID channelId = channelRepository.channelNameToId(channelName); + return messageRepository.findAllInChannel(channelId).stream().map(this::formattingMessage).toList(); } private String formattingMessage(MessageResponseDto dto) { @@ -94,53 +69,38 @@ private String formattingMessage(MessageResponseDto dto) { String user = "사용자명: " + userRepository.userIdToName(dto.userId()); String channel = "채널명: " + channelRepository.channelIdToName(dto.channelId()); - return id + "\n" + user + "\n" + channel + "\n" + "내용: " + dto.content() + "\n" + "생성일: " + dto.createAt() + "\n" + "수정일: " + dto.updateAt(); + return id + "\n" + + user + "\n" + + channel + "\n" + + "내용: " + dto.content() + "\n" + + "생성일: " + dto.createAt() + "\n" + + "수정일: " + dto.updateAt(); } @Override - public void updateMessage(String userName) { - UUID userId = userRepository.userNameToId(userName); - - getMessageForSender(userId); + public boolean update(UUID messageId, String content) { + UUID userId = userState.getUserId(); - System.out.println("어떤 것을 수정하고 싶나요?"); - String id = scanner.nextLine(); - - if (messageRepository.check(userId, UUID.fromString(id))) { - System.out.println("실패. 해당 ID를 찾지 못했습니다."); - return; + if (messageRepository.check(userId, messageId)) { + throw new NotFound("해당 ID를 찾지 못했습니다."); } - System.out.println("무슨 내용으로 수정하고 싶나요?"); - String content = scanner.nextLine(); - - if(messageRepository.updateMessage(UUID.fromString(id), content)) { - System.out.println("성공적으로 변경되었습니다."); - } else { - System.err.println("실패!"); - } + return messageRepository.updateMessage(messageId, content); } @Override - public void deleteMessage(String userName) { - UUID userId = userRepository.userNameToId(userName); - - getMessageForSender(userId); - System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); - String id = scanner.nextLine(); - - if (messageRepository.check(userId, UUID.fromString(id))) { - System.out.println("실패. 해당 ID를 찾지 못했습니다."); - return; - } + public boolean delete(UUID userId, UUID messageId) { + return messageRepository.delete(userId, messageId); + } - System.out.println("해당 메시지를 삭제합니까? (Y or any Key)"); - String isDelete = scanner.nextLine(); + @Override + public void delete(UUID channelId) { + messageRepository.delete(channelId); + } - if (isDelete.equalsIgnoreCase("Y")) { - if(messageRepository.deleteMessage(userId, UUID.fromString(id))) { - System.out.println("성공!"); - } else System.out.println("실패!"); - } else System.out.println("초기로 돌아갑니다"); + @Override + public String lastMessageTime(String channelName) { + UUID channelId = channelRepository.channelNameToId(channelName); + return messageRepository.findAllInChannel(channelId).stream().map(MessageResponseDto::createAt).max(String::compareTo).orElse("없음"); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java index 89584ca8..c7809528 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.service.basic; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileReadStatusRepository; import com.sprint.mission.discodeit.service.ReadStatusService; import lombok.RequiredArgsConstructor; @@ -7,26 +8,43 @@ import java.time.Instant; import java.util.Map; -import java.util.Scanner; import java.util.UUID; @Service @RequiredArgsConstructor public class BasicReadStatusService implements ReadStatusService { - private final Scanner scanner; private final FileReadStatusRepository readStatusRepository; + private final FileChannelRepository channelRepository; + @Override public void create(UUID userId, UUID channelId){ readStatusRepository.create(userId, channelId); } + + @Override public void find(UUID id) { Instant lastReadAt = readStatusRepository.find(id); } + @Override public void findAllByUserId(UUID userId) { Map result = readStatusRepository.findAllByUserId(userId); } - public void update(UUID userId, UUID channelId) { - + @Override + public boolean update(UUID userId, String channelName) { + UUID channelId = channelRepository.channelNameToId(channelName); + try { + readStatusRepository.update(userId, channelId); + return true; + } catch (Exception e) { + return false; + } + } + @Override + public void deleteForChannel(UUID channelId) { + readStatusRepository.deleteForChannel(channelId); + } + @Override + public void deleteForUser(UUID userId) { + readStatusRepository.deleteForChannel(userId); } - public void delete(UUID id) {} } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java index bad93833..12e34edf 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -1,157 +1,71 @@ package com.sprint.mission.discodeit.service.basic; -import com.sprint.mission.discodeit.Input; import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.entity.AttachmentType; +import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.repository.file.FileBinaryContentRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Scanner; import java.util.UUID; @Service @RequiredArgsConstructor public class BasicUserService implements UserService { - private final Scanner scanner; private final FileUserRepository userRepository; - private final AttachmentRepository attachmentRepository; - private final Input Input; + private final FileBinaryContentRepository binaryContentRepository; private final UserState userState; @Override - public void createUser() { - System.out.println("회원가입에 오신 것을 환영합니다."); - System.out.print("먼저, 사용할 이름을 작성해주세요 : "); - String name = scanner.nextLine().trim(); - - if (userRepository.userNameToId(name) != null) { - System.out.println("이미 존재하는 사용자명입니다."); - return; - } - - System.out.print("사용할 비밀번호를 입력해주세요 : "); - String password = scanner.nextLine(); + public boolean isPresent(String name) { + return userRepository.userNameToId(name) != null; + } - System.out.print("사용할 프로필 이미지를 입력해주세요 : "); - String profileImage = scanner.nextLine(); - CreateUserDto requestDto = new CreateUserDto(name, password, profileImage); + @Override + public boolean isValid(String password) { + return userRepository.check(userState.getUserId(), password); + } - if(userRepository.createUser(requestDto)) { - System.out.println("사용자 " + name + "님이 추가되었습니다."); - } else { - System.err.println("알 수 없는 오류가 발생하여 저장하지 못했습니다."); - } + @Override + public boolean create(CreateUserDto requestDto) { + return userRepository.createUser(requestDto); } /// Update @Override - public void updateUser() { - System.out.println("===================="); - System.out.println("사용자 변경 메뉴입니다."); - UUID userId = workRoute(); - if(userId == null) { - System.err.println("일치하지 않습니다. 처음으로 돌아갑니다."); - return; - } - - while(true) { - System.out.println("변경하지 않으실 필드에는 엔터를 눌러주시기 바랍니다."); - - String reName = Input.inputUpdateField("사용자명", "\\S+"); - String rePassword = Input.inputUpdateField("비밀번호", "\\S+"); - String reMail = Input.inputUpdateField("이메일", "\\S+@\\S+\\.\\S+"); - String rePhoneNumber = Input.inputUpdateField("전화번호", "^\\d{10,11}$"); - String reProfile = Input.inputUpdateField("프로필 이미지", "\\."); - - System.out.println("이대로 진행하시겠습니까?"); - System.out.println("맞으면 y, 다시 입력하려면 re"); - System.out.println("취소하려면 아무 키나 입력해주시기 바랍니다."); + public boolean update(String reName, String rePassword, String reMail, String rePhoneNumber, String reProfile) { + UUID userId = userState.getUserId(); - String finalCheckIsContinue = scanner.nextLine(); - switch (finalCheckIsContinue.toLowerCase()){ - case "y": - if(userRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { - if(reProfile != null){ - attachmentRepository.delete(userId); - attachmentRepository.create(userId, reProfile); - } - System.out.println("완료"); - return; - } - System.err.println("실패"); - return; - case "re": - continue; - default: - return; + if(userRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { + if(reProfile != null){ + binaryContentRepository.delete(AttachmentType.USER, userId); + binaryContentRepository.create(AttachmentType.USER, userId, reProfile); } + return true; } + return false; } /// Read @Override - public void getUserName() { - System.out.println("조회하고자 하는 사용자명을 입력해주세요"); - String name = scanner.nextLine(); - - if (userRepository.userNameToId(name) == null) { - System.out.println("조회하고자 하는 사용자가 없습니다."); - return; - } - - System.out.println(userRepository.getUser(name)); - System.out.println("===================="); + public String find(String name) { + if(userRepository.userNameToId(name) == null) + throw new NotFound("해당 사용자를 찾지 못했습니다"); + return userRepository.getUser(name); } @Override - public void getAllUserName() { - List userList = userRepository.getAllUser(); - if (userList.isEmpty()) { - System.err.println("사용자가 없습니다."); - return; - } - - userList.forEach(System.out::println); - System.out.println("현재 총 사용자 : " + userList.size()); + public List findAll() { + return userRepository.findAll(); } /// Delete @Override - public void deleteUser() { - System.err.println("[Warning!] 지금 계정을 삭제하려 하고 있습니다."); - System.err.println("[Warning!] 만약 잘못 들어오신 경우, 0을 눌러주시기 바랍니다."); - System.err.println("[Warning!] 계속 진행하시려면 아무 숫자나 입력해주세요."); - - int n = scanner.nextInt(); - scanner.nextLine(); - if (n == 0) { - System.out.println("처음으로 돌아갑니다."); - return; - } - - UUID userId = workRoute(); - - if (userId == null) { - System.err.println("일치하는 계정을 찾을 수 없습니다."); - return; - } - - userRepository.deleteUser(userId); - - System.out.println("계정이 삭제되었습니다."); - } - - private UUID workRoute() { - UUID userId = userRepository.userNameToId(userState.getUserName()); - - System.out.println("현재 로그인한 " + userState.getUserName() +"의 비밀번호를 입력해주세요"); - String pw = scanner.nextLine(); - - if (userRepository.check(userId, pw)) return null; - - return userId; + public boolean delete(UUID id) { + return userRepository.deleteUser(id); } } From bb6257c0007ab20140b95f17ebffdcf645807452 Mon Sep 17 00:00:00 2001 From: Alpha Date: Tue, 3 Feb 2026 11:45:40 +0900 Subject: [PATCH 30/35] =?UTF-8?q?Fix=20:=20Private=20Server=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=98=A4=EB=A5=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../mission/discodeit/app/router/Router.class | Bin 4362 -> 4576 bytes .../mission/discodeit/entity/User.class | Bin 4586 -> 4461 bytes .../file/FileChannelRepository.class | Bin 12555 -> 12747 bytes .../file/FileMessageRepository.class | Bin 12570 -> 12707 bytes .../compileJava/previous-compilation-data.bin | Bin 29670 -> 29676 bytes .../discodeit/app/router/RouteMessage.java | 3 +- .../mission/discodeit/app/router/Router.java | 6 +- .../discodeit/dto/BinaryContentDto.java | 1 - .../mission/discodeit/dto/CreateUserDto.java | 18 +-- .../discodeit/entity/BinaryContent.java | 16 ++- .../mission/discodeit/entity/ReadStatus.java | 3 +- .../sprint/mission/discodeit/entity/User.java | 10 +- .../repository/BinaryContentRepository.java | 3 + .../file/FileBinaryContentRepository.java | 106 +++++++++++++++++- .../file/FileChannelRepository.java | 49 ++++---- .../file/FileMessageRepository.java | 69 +++++++----- .../file/FileReadStatusRepository.java | 14 +-- .../service/basic/BasicMessageService.java | 1 + 20 files changed, 206 insertions(+), 93 deletions(-) diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index f58c131b5971b6b3f52cb58a8af0777338c2a713..7b5a5abad65a9fe3106b2970bdc258df47289cf8 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6cI3IH^l1l9lm literal 17 VcmZQxwaR1i+k`Ae1~6a?0su4!1VaD- diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index baa0f5981145c9778e922e2f8c37e705ee1d0afd..d5bf4a39aad5ea350324047c1892dbdcbbe5bb24 100644 GIT binary patch literal 8 PcmZQzV4S0HKjIVs2eAUb literal 8 PcmZQzV4NenPW2rC2G9b0 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/router/Router.class index 2e184edbf086c0c38925dbc94cd82a88073cae9c..378f3f3fc267efbd321b7b2ae6a5803bbe17f9e4 100644 GIT binary patch delta 689 zcmZuvOKVd>7(J8JOnP&3Z?I}DfoRpJjgN@BD{V0)pimNsOHl~*n%35&Bvk|#g1Awn zR;OA`eOp^!wWcvv<6FBBUHA(`T?nrH0pjc27)lqyo$veZ`Ocj0%rM87eO|7;`(1tx zpanAp?VC(VoD`_rn>>&V_a@V+aP(lO)z{yhN!MZlPU$#}#R5(%o1G7VAswr5MxbeR z$A5M-H_bt}_h-A)sb&qsI45yl{g5B^g>(AF_inetC~0_zX^BU+@MHBwn-Ndcm?yl# zjb{S2JEDn1Jh5}B5YV@!(^j^If<77LFM%XT@tSa0xScjfU6^u>Dk|hMmR96 zB6^$17mw&(Ax6}oS4A)I+^ulo4(f0bmw2GJv(?wx%7gE?j4N=G{S#Mljd>T@*SQ=R zRb9rA$g5w*MyhTw>sxHqMeLYx;|9j43N%#rjk0z@#3T-p5kWhinjb<}JP zj>8w5!r;0x6nG#00$J7q|>X1ewQdosR;a`3ID+`KP!#Zl%UBU)7Iger&TfAYyHWjs` zNYI?EJ48HbfSF?m8U|s*5L_66amUGC8)WS8rr_FLC2g~=g9u8PVMibQJWX&fh1&8( zofLboHNzbf488{vMeMG?IRAX2Om3<8s=Ow&V-NdG>4XCZtW2!uamX%%yU4Y~xx<&k z68+e{O$L>Jz)>yp`YUsTM?DT*9MP=9qaRmYC!EbV_H8=g!<2M^hnN6t|iY{0c16oGVnIE*u>jY2i+V0YT6p+_@0c zEG>^tUz(Mb+80Q;NeF~ix^maXf1n8e0TCZZ8T?qh_nhDJKIb|2{d?*EMRQ~C=Pv-a z@O{Nx^M)Ln1qH=M%S}ytln7JDz2=s(=f)bnN=Nla2b!t=MG&M$72%x zh@uz@PuP1DfrB#RFDs40hgf#R;x(WjjVL_DGuie(EG%ba1*%cW@$>2N_4{kls^4;9-jKl*~#!afVFiaEn<5I_D3S+lezah=bn4M^G)X0#viSbFTWQ)0N9P$xyWMJ z=xLXnH_D&=*kBJ%AGu`fDP( zSj1{9Pw0~;c3m7|6~xUcs|`D2IIWQ;PF-9IO+5J{s>`UgutxbQP2zOEA8&k-;7dzv zwdVZdia9x>7L}A$DL-k_PB4JmNHdnCbc}b4N0Mn=X)oAH#9pH^aiyc9E-8{~e49Af z(Mgxi(#06+>FGFvlbUoj=6U=n={V_>?gCq1F6@Fudg#(qdKo(@mZ?i0@fq)Xe$w-d zWa*NP{Q_%oX{ifKB}bQjST4{eP8vOV_>H49x!ky;T^C1x5ZM*RmUijcxiU}zx{9{V z9B0Nud1cP%imJNW8)~`P1%vubc1x}VbQvUrjWg|f#pU8LxAezjnhY~ilX`oPy5W@( zx{O3f;4G^st(j6@J6Dr}Jyl69);$FsPf3R*jPtf&D=Zv6Qj?&OoBGh6k5Y3jM&FL9 zM!U}I6R7xcc|wzII$ZKIqoMQRPEQK#qV}EWkf+?TL!Q>;8C`xM&+ak0*d(|=(Js$1 zH|2R81!!H(5ZlB^c>GH6w_Q-0d91yssjhZy+x=AxKg!8>U z;^V6?D6toHc~Bnm$W-zVE5;FB9*|W6eKfPRdc^$Vnwqj2%`UG9dK#Z}?&;8knVL>A zJ;;O^S6O*$T@|{qY8-*cD8^wD?#Bb9uVGcO$h91=j~S2VcuUM!&2Nest9fRLdKY#^ zK9Hn>fcnOm`nsV5XUcF3EEXASoKEjHcpN7jVEMphGM>L3DFAq6f?UU^q9)4qR4|FO zU1TC3A~)bJq8n>m-F0(NDF`5eznQF9ecQ(}`&Y>M)yFig6F0%P9Xm>3ZCZ z11L4|<#VNO#4=5$!$xfzWroZo=6dKRW-C`}iJGh>NoL7xZp4KKDdwvdnQTb+MZt&- zXGH+ttN_zh2dK$S-g%!tggu*Kx9;@q#b$pK8ZF3A+k_60VY7uNL|VYU14-nppg=3f z=e370D}<7Otr>HQytXEk3mUN?;Alowk=N0P>cAMyt0}oUuNK1Mw9QCYTC%+MCOmA# zl!(d}3#RNqXSHPPl!BwCy!NaRUNrJAn;4vpojlXFp_!;&=CcsH@D`s<{8i5rcn_!e z9EA{0Bai&k=F=+5KQn1Zpqx9O$Ed7;mwxx-HpWdY-&ja(x0_y>gTX+jTR`6(8X*%u}s?UVg^oO15Doqz^RKCV^p@Y(i zrVCZFoR7Njyp#yj#^jZfvJm1YQYN?1Rim)W^y*|Au^tGkHsfF&kQk(4z@+GjV5JR$M9mMWKdc80dgXs z#}mwk2xda|@5jFtJXx8g>4iG zMOK?dz=_^cLztErn2J+HPNbw)GZeyrYsqA@rL1h+nW>KXfZZPwTfo6zEucxjNx~g) z?tneuY8FpXR<_sXwR;^b&dx?js;3!x(#L%z0XDNz`pnbe08{HAsTO!}h{yB`+`x)K}HO z)htLnuUl<4i*JeCE%zu}k)B2StEfq)Q`;&`R(41_>>}G@+Japc>ErBkUN`sZ3%?SL z|72Ne`iyE!?*)~3vfRra#%eAcZA7z4p(ftez=QB0*G96~2o(%K&v9hW7+Ls)pm6}OL`vWN5nB%N zHAlHU?!PGrkj>_nw5> zkB#m?wkvISfgw@f4>2znt?uT)BP&&bVZ6xwyee4K?T56==CQ=9>S?^6$s@g+#Ltvz zTRt3OA#<5<;f;?j6K_^q)qKU9h0Ee`t9w>NaZx0kJE<~y6v6iD=`(xfP59wRZiv}U zC$lV2H#&u@qFKG{u%r$XZh+Um$U0jh1|P$we93O<`xJVZIYVdD^O1&mgWs6hx4(Jc z=tMKHm10;8qgjWuB9CByIFd(SLCo@FqPrXuvphZTPvb6m5e=`-R?TYGqQYkBU&P(1 zZe9kAYnI$1f1_MEo;J;6LwPY9 z%THeTDMQ;T6hRMU!+I49O8{MY4eQNkA6}8hk{*Y_CU{k5Q}_qRBVy3}3H-xrojl6; z9A{qD){_DX&9Vg3o-?3bpc1QUdZoXXC%I;ydVxV_i|{0ujjhS0sHiqsiAKdDuNwXO zwGT=HJ;RH8#52Pq5fJZhlHvSMMY@ILYE`|$M?^TZa$}4h8(Qi<#(zmpF delta 4920 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class index 9eb7079e77f5d7204751f9b461f1c3227e906e3d..c793766702f05c31f21f5c028290c9f1a49d0c30 100644 GIT binary patch literal 12707 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 literal 12570 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 PA3ZJlv;0;5j`;rp7H`u} diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index 2978fe5fbe6ca83a153b05df917ffc4c49f75b94..d8dda03c54df0296ba3c1b539cf16ae4a353406b 100644 GIT binary patch delta 345 zcmV-f0jB=u=K<{J0gzJ=E%AFhF$!SARAZa=S|jA4kz+8i_4>r{7`;;!^cv`9;S!Ilga^N5UCm?U(xME|1|;G5n+@MJ(D~FTqQ4dU-&D; z#t2g#cys$5oNQfHS`QG>@4uuCXpi5fOc0+LJaB=Ny#kvMk5U}KHERhvV9kU;evv}B zlV}5U5a&kAzVFV15)&zwReR9fXvZwH+;ABEp@)7LdlWPS!5TDN3#hxRbJu0l7zhJx& zPLs6-R}cwT`aq7$Sb*W%SC9ND*yWQP2B;9l_54BFejcky&F?2Uui<}_)CSB01bKe5 rq6b<54+a2hLAU`)j{yXJ8mIwSvk3`=0SO480eOC7YnlPGlL}L51QnRr delta 339 zcmV-Z0j&P)=K<#D0gzJ=2k&E(j937I{QBA;YxeT>kz+887;1ISlbc8U_{u0>Qh@Nlga^N5ZM{gZ2=o4Kd6VG!-xhZ+LJs2TqQHf2|$i- zR}qj{o})&zwRx6|%&mM*y(&FuxV{$I#HlWPS!5VZS5F(DucoYdOmJ;PC? zQIoX=R}h9qjpHX+ko41B>gva8J0g=D2B;7cUKJ{{n-RzBK+v#wCSr_})CSA~19`Kf l2U-CQ1#3aL0ZESm1AZE)0kaGVgaHNypaFSfYqOaOQ)$F;mlXg2 diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java index cd30fd8b..38519de6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java @@ -3,7 +3,6 @@ import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.dto.BinaryContentDto; import com.sprint.mission.discodeit.entity.AttachmentType; -import com.sprint.mission.discodeit.entity.BinaryContent; import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.service.ChannelService; import com.sprint.mission.discodeit.service.basic.BasicMessageService; @@ -143,7 +142,7 @@ private void read() { } else if (m == 2) { System.out.println("어디로 보낸 메시지인가요?"); String sendeeChannelName = scanner.nextLine(); - if (channelService.isPresent(sendeeChannelName)) { + if (!channelService.isPresent(sendeeChannelName)) { System.out.println("존재하지 않는 채널입니다."); return; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java index 6e02f783..0817aea3 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/Router.java @@ -96,6 +96,10 @@ private void login() { System.out.println("해당 사용자의 비밀번호를 입력해주세요"); String password = scanner.nextLine().trim(); - authService.login(new LoginDto(name, password)); + try { + authService.login(new LoginDto(name, password)); + } catch (Exception e) { + System.err.println("[ERROR] " + e); + } } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java index e94e9380..27c386c3 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java @@ -2,7 +2,6 @@ import com.sprint.mission.discodeit.entity.AttachmentType; -import java.util.List; import java.util.UUID; public record BinaryContentDto(AttachmentType type, UUID id, String filename) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java index 7fe8d212..1db8732e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java @@ -1,10 +1,12 @@ package com.sprint.mission.discodeit.dto; +import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.entity.BinaryContent; import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.entity.UserStatus; import java.util.List; +import java.util.UUID; public record CreateUserDto( String username, @@ -12,18 +14,18 @@ public record CreateUserDto( String profileImage ) { public List toEntity() { - BinaryContent binaryContent = binaryContent(profileImage); - if(binaryContent == null) { - User user = new User(username, password); - return List.of(user, new UserStatus(user.getId())); + User user = new User(username, password); + BinaryContent binaryContent; + + if(!profileImage.isEmpty()) { + binaryContent = binaryContent(user.getId(), profileImage); + user.setProfileId(binaryContent.getId()); } - User user = new User (username, password, binaryContent.getId()); return List.of(user,new UserStatus(user.getId())); } - private BinaryContent binaryContent(String profileImage) { - if(profileImage.trim().isEmpty()) return null; - return new BinaryContent(profileImage); + private BinaryContent binaryContent(UUID id, String profileImage) { + return new BinaryContent(AttachmentType.USER, id, profileImage); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java index e706fab1..6e8218d9 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java @@ -2,19 +2,31 @@ import lombok.Getter; +import java.io.Serial; +import java.io.Serializable; import java.time.Instant; import java.util.UUID; @Getter -public class BinaryContent { +public class BinaryContent implements Serializable { private final UUID id = UUID.randomUUID(); + private final UUID relationId; + private final AttachmentType type; private final Instant createAt; private final String fileName; private final String fileExtension; - public BinaryContent(String fileName) { + public BinaryContent(AttachmentType type, UUID relationId,String fileName) { this.createAt = Instant.now(); this.fileName = fileName.split("\\.")[0]; this.fileExtension = fileName.split("\\.")[1]; + this.type = type; + this.relationId = relationId; + } + + @Override + public String toString() { + return " BinaryContent ID : " + id + + " fileName : " + fileName + "." + fileExtension + "\n"; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java index ead9442f..74af6d1b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java @@ -8,7 +8,7 @@ @Getter public class ReadStatus implements Serializable { - private final UUID id; + private final UUID id = UUID.randomUUID(); private final UUID userId; private final UUID channelId; private Instant lastReadAt; @@ -16,7 +16,6 @@ public class ReadStatus implements Serializable { public ReadStatus(UUID userId, UUID channelId){ this.userId = userId; this.channelId = channelId; - id = UUID.randomUUID(); lastReadAt = Instant.now(); }; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index 70e92db4..41607177 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -33,17 +33,11 @@ public User(String name, String password) { this.updateAt = now; } - public User(String name, String password, UUID profileId) { - this.id = UUID.randomUUID(); + public void setProfileId(UUID profileId) { this.profileId = profileId; - this.name = name; - this.password = password; - Instant now = Instant.now(); - this.createAt = now; - this.updateAt = now; } - public void setUpdateAt() { + private void setUpdateAt() { this.updateAt = Instant.now(); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java index 4decc1b6..f2779a7a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java @@ -2,10 +2,13 @@ import com.sprint.mission.discodeit.entity.AttachmentType; +import java.util.List; import java.util.UUID; public interface BinaryContentRepository { boolean create(AttachmentType type, UUID id, String file); + List find(AttachmentType type, UUID id); + boolean delete(AttachmentType type, UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java index 6fa54f6f..6d98c24a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java @@ -2,9 +2,15 @@ import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.entity.BinaryContent; +import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.repository.BinaryContentRepository; +import jakarta.annotation.PostConstruct; import org.springframework.stereotype.Repository; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -17,30 +23,118 @@ public class FileBinaryContentRepository implements BinaryContentRepository { private final Map> messageIdMap = new ConcurrentHashMap<>(); private final Map userIdMap = new ConcurrentHashMap<>(); private final Map channelIdMap = new ConcurrentHashMap<>(); + private Path DIRECTORY; + private final String EXTENSION = ".ser"; + + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); + } + + @PostConstruct + public void init() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", BinaryContent.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + try { + Files.list(DIRECTORY).filter(path-> path.toString().endsWith(EXTENSION)) + .map(path->{ + try (FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis)) { + return (BinaryContent) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(binaryContent -> { + switch (binaryContent.getType()){ + case USER -> userIdMap.put(binaryContent.getRelationId(), binaryContent); + case CHANNEL -> channelIdMap.put(binaryContent.getRelationId(), binaryContent); + case MESSAGE -> messageIdMap.computeIfAbsent(binaryContent.getId(), id -> new ArrayList<>()).add(binaryContent); + } + }); + } catch (Exception e) { + System.err.println("[ERROR] : " + e); + } + } @Override public boolean create(AttachmentType type, UUID id, String file) { - BinaryContent binaryContent = new BinaryContent(file); + BinaryContent binaryContent = new BinaryContent(type, id, file); fileIdMap.put(binaryContent.getId(), binaryContent); switch (type){ case MESSAGE -> messageIdMap.computeIfAbsent(id, m -> new ArrayList<>()).add(binaryContent); case CHANNEL -> channelIdMap.put(id, binaryContent); case USER -> userIdMap.put(id, binaryContent); } + + Path path = resolvePath(binaryContent.getId()); + + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(binaryContent); + } catch (IOException e) { + System.err.println("파일 생성에 실패했다 : " + e); + return false; + } + return true; } + @Override + public List find(AttachmentType type, UUID id){ + try { + switch (type){ + case MESSAGE -> { + return messageIdMap.get(id).stream().map(BinaryContent::toString).toList(); + } + case CHANNEL -> { + return List.of(channelIdMap.get(id).toString()); + } + case USER -> { + return List.of(userIdMap.get(id).toString()); + } + } + } catch (Exception e) { + throw new NotFound("왠지 모르지만 오류가 발생했다!"); + } + return List.of(); + } + @Override public boolean delete(AttachmentType type, UUID id) { - try{ + try { switch (type){ - case MESSAGE -> messageIdMap.remove(id); - case CHANNEL -> channelIdMap.remove(id); - case USER -> userIdMap.remove(id); + case MESSAGE -> { + messageIdMap.remove(id).forEach(t -> { + delete(t.getId()); + }); + } + case CHANNEL -> { + delete(channelIdMap.remove(id).getId()); + } + case USER -> { + delete(userIdMap.remove(id).getId()); + } } - return true; } catch (Exception e) { return false; } + + return true; + } + + private void delete(UUID id) { + try { + Path path = resolvePath(id); + Files.delete(path); + } catch (IOException e) { + throw new RuntimeException(e); + } } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 42a41927..e61a3f11 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -102,17 +102,18 @@ public boolean save(Channel channel) { @Override public boolean save(String oldName, String newName) { - Channel channel = publicChannelNameMap.getOrDefault(oldName, null); - boolean isPrivate = false; - - if (channel == null) { - channel = privateChannelNameMap.getOrDefault(oldName, null); - isPrivate = true; + if(!isPresentChannel(oldName)) return false; + boolean isPrivate = privateChannelNameMap.containsKey(oldName); + Path path; + Channel channel; + + if(isPrivate) { + channel = privateChannelNameMap.get(oldName); + } else { + channel = publicChannelNameMap.get(oldName); } - if (channel == null) return false; - - Path path = resolvePath(publicChannelNameMap.get(oldName).getId()); + path = resolvePath(channel.getId()); try(FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)){ @@ -142,7 +143,7 @@ public String readChannel(String name) { return publicChannelNameMap.get(name).toString(); if(privateChannelNameMap.containsKey(name)) return privateChannelNameMap.get(name).toString(); - return null; + return ""; } public ChannelType getChannelType(String name) { @@ -166,7 +167,10 @@ public UUID readChannelId(String name) { public List readAllChannel() { List result = new ArrayList<>(); + /// public result.addAll(publicChannelNameMap.values().stream().map(this::requestChannelInfo).toList()); + + /// private result.addAll(accessAblePrivateChannel(userState.getUserName()).stream().toList()); return result; } @@ -216,27 +220,20 @@ public boolean deleteChannel(String name) { /// public boolean isPresentChannel(String name) { - try { - publicChannelNameMap.get(publicChannelNameMap.get(name).getName()); - return true; - } catch (Exception ignore) { - return false; - } + return publicChannelNameMap.containsKey(name) || privateChannelNameMap.containsKey(name); } public UUID channelNameToId(String name) { - try { - return publicChannelNameMap.get(name).getId(); - } catch (Exception e) { - return null; - } + if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getId(); + if(privateChannelNameMap.containsKey(name)) return privateChannelNameMap.get(name).getId(); + + throw new NotFound("해당 채널을 찾을 수 없습니다"); } public String channelIdToName(UUID id) { - try { - return publicChannelIdMap.get(id).getName(); - } catch (Exception e) { - return null; - } + if(publicChannelIdMap.containsKey(id)) return publicChannelIdMap.get(id).getName(); + if(privateChannelIdMap.containsKey(id)) return privateChannelIdMap.get(id).getName(); + + throw new NotFound("해당 채널을 찾을 수 없습니다"); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 530eea40..3bcffc4f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -74,17 +74,9 @@ public void init() { @Override public String create(String content, UUID channelId, UUID userId) { - // 1. 필수값 검증 (방어 코드 추가) - if (channelId == null) { - throw new IllegalArgumentException("Channel ID cannot be null"); - } - if (userId == null) { - throw new IllegalArgumentException("User ID cannot be null"); - } - Message message = new Message(channelId, userId, content); - // ConcurrentHashMap은 null key를 허용하지 않으므로 위에서 검증 필수 + messageIdMap.put(message.getId(), message); channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); @@ -94,9 +86,8 @@ public String create(String content, UUID channelId, UUID userId) { ObjectOutputStream oos = new ObjectOutputStream(fos) ) { oos.writeObject(message); - return message.getUserId().toString(); + return message.getId().toString(); } catch (IOException e) { - e.printStackTrace(); // 에러 로그 확인용 return ""; } } @@ -105,8 +96,8 @@ public String create(String content, UUID channelId, UUID userId) { public List findAllInChannel(UUID channelId) { List result = new ArrayList<>(); try{ - channelIdMessageMap.get(channelId) - .stream().sorted(Comparator.comparing(Message::getCreateAt)) + List messages = channelIdMessageMap.get(channelId); + messages.stream().sorted(Comparator.comparing(Message::getCreateAt)) .forEach(message -> { result.add(new MessageResponseDto( message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() @@ -130,14 +121,16 @@ public Instant getLastMessageInChannel(UUID channelId) { @Override public List findAllForSender(UUID userId) { List result = new ArrayList<>(); + List messages = userIdMessageMap.get(userId); try{ - userIdMessageMap.get(userId) - .stream().sorted(Comparator.comparing(Message::getCreateAt)) - .forEach(message -> { - result.add(new MessageResponseDto( - message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() - )); - }); + if(messages != null) { + messages.stream().sorted(Comparator.comparing(Message::getCreateAt)) + .forEach(message -> { + result.add(new MessageResponseDto( + message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() + )); + }); + } } catch (Exception e) { return List.of(); } @@ -146,12 +139,15 @@ public List findAllForSender(UUID userId) { @Override public boolean updateMessage(UUID id, String content) { + Message message = messageIdMap.get(id); + if (message == null) return false; + + message.updateMessage(content); + Path path = resolvePath(id); try(FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(messageIdMap.get(id)); - messageIdMap.get(id).updateMessage(content); - System.out.println("성공"); + oos.writeObject(message); return true; } catch (IOException e) { return false; @@ -160,14 +156,22 @@ public boolean updateMessage(UUID id, String content) { @Override public boolean delete(UUID userId, UUID id) { - Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); + List userMessages = userIdMessageMap.get(userId); + if (userMessages == null) return false; + + Message message = userMessages.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); + if (message == null) return false; + UUID channelId = message.getSendChannelId(); Path path = resolvePath(id); try { - Files.delete(path); + Files.deleteIfExists(path); userIdMessageMap.get(userId).remove(message); - channelIdMessageMap.get(channelId).remove(message); + + if(channelIdMessageMap.containsKey(channelId)) { + channelIdMessageMap.get(channelId).remove(message); + } messageIdMap.remove(message.getId()); return true; } catch (IOException e) { @@ -177,13 +181,18 @@ public boolean delete(UUID userId, UUID id) { @Override public void delete(UUID channelId) { - channelIdMessageMap.get(channelId).forEach(message -> { - delete(message.getUserId(), message.getId()); - }); + if(channelIdMessageMap.containsKey(channelId)) { + new ArrayList<>(channelIdMessageMap.get(channelId)).forEach(message -> { + delete(message.getUserId(), message.getId()); + }); + } } public boolean check(UUID userId, UUID id) { - Object result = userIdMessageMap.get(userId).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); + List messages = userIdMessageMap.get(userId); + if(messages == null) return true; + + Object result = messages.stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); return result == null; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java index b9e426d4..12652f25 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java @@ -62,14 +62,14 @@ public void init() { } public void create(UUID userId, UUID channelId) { - ReadStatus temp = new ReadStatus(userId, channelId); - idReadStatusMap.put(temp.getId(), temp); - userIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(temp); - channelIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(temp); - Path path = resolvePath(temp.getId()); + ReadStatus readStatus = new ReadStatus(userId, channelId); + idReadStatusMap.put(readStatus.getId(), readStatus); + userIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(readStatus); + channelIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(readStatus); + Path path = resolvePath(readStatus.getId()); try (FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(temp); + oos.writeObject(readStatus); } catch (IOException e) { System.err.println("[ERROR] : " + e); } @@ -94,7 +94,7 @@ public boolean update(UUID userId, UUID channelId) { if(temp == null) throw new NotFound("상태값을 찾지 못했습니다."); - Path path = resolvePath(userId); + Path path = resolvePath(temp.getId()); try (FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(temp); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java index 5b2e4a74..340b4b5d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -73,6 +73,7 @@ private String formattingMessage(MessageResponseDto dto) { + user + "\n" + channel + "\n" + "내용: " + dto.content() + "\n" + + "첨부파일: " + binaryContentRepository.find(AttachmentType.MESSAGE, dto.id()) + "\n" + "생성일: " + dto.createAt() + "\n" + "수정일: " + dto.updateAt(); } From 9120721db8f3ab70dce6c7ff0e9fc6c042493fed Mon Sep 17 00:00:00 2001 From: Alpha Date: Tue, 3 Feb 2026 15:07:49 +0900 Subject: [PATCH 31/35] Feat: Add user profile, show user profile, show message in binaryContents --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../com/sprint/mission/discodeit/Input.class | Bin 2573 -> 2549 bytes .../discodeit/app/router/RoutePrintText.class | Bin 2251 -> 2319 bytes .../mission/discodeit/entity/User.class | Bin 4461 -> 4436 bytes .../repository/ChannelRepository.class | Bin 628 -> 737 bytes .../discodeit/repository/UserRepository.class | Bin 694 -> 745 bytes .../file/FileChannelRepository.class | Bin 12747 -> 12760 bytes .../repository/file/FileUserRepository.class | Bin 11107 -> 11330 bytes .../repository/jcf/JCFChannelRepository.class | Bin 3456 -> 3638 bytes .../repository/jcf/JCFUserRepository.class | Bin 5652 -> 0 bytes .../discodeit/service/ChannelService.class | Bin 621 -> 860 bytes .../discodeit/service/UserService.class | Bin 777 -> 904 bytes .../compileJava/previous-compilation-data.bin | Bin 29676 -> 29624 bytes .../com/sprint/mission/discodeit/Input.java | 6 +- .../discodeit/app/router/RouteChannel.java | 37 ++- .../discodeit/app/router/RoutePrintText.java | 2 + .../discodeit/app/router/RouteUser.java | 36 ++- .../mission/discodeit/dto/UserFinder.java | 11 +- .../discodeit/entity/BinaryContent.java | 4 +- .../sprint/mission/discodeit/entity/User.java | 3 +- .../repository/ChannelRepository.java | 4 +- .../discodeit/repository/UserRepository.java | 5 +- .../file/FileBinaryContentRepository.java | 19 +- .../file/FileChannelRepository.java | 17 +- .../file/FileMessageRepository.java | 11 +- .../repository/file/FileUserRepository.java | 17 +- .../repository/jcf/JCFChannelRepository.java | 19 +- .../repository/jcf/JCFUserRepository.java | 213 +++++++++--------- .../discodeit/service/ChannelService.java | 8 +- .../discodeit/service/MessageService.java | 2 +- .../discodeit/service/ReadStatusService.java | 3 +- .../discodeit/service/UserService.java | 9 +- .../basic/BasicBinaryContentService.java | 9 +- .../service/basic/BasicChannelService.java | 15 +- .../service/basic/BasicMessageService.java | 2 +- .../service/basic/BasicReadStatusService.java | 4 +- .../service/basic/BasicUserService.java | 20 +- 37 files changed, 285 insertions(+), 191 deletions(-) delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.class diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 7b5a5abad65a9fe3106b2970bdc258df47289cf8..59a49c1f4af6a7840ca7981f34476d7aac568be5 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~6bZ1OPMX1S0?d literal 17 VcmZQxwaR1i+k`Ae1~6cI3IH^l1l9lm diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/Input.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/Input.class index 5af5a4f88e57e7d7452861f4449cf434d1fa87fe..c76ccc5aa9956a807505bd5b7249529f08c12b29 100644 GIT binary patch delta 760 zcmZXR%TLr$6vlsThgM261BHyrBLdC@)6N4&93P0NpeTYUiuiVXiw{7Axa2QzVeSey zu8dnj850)9g)8HK;KH42H!MtydTs}aiD`Pyx!>*i&i9=@ZCI^$KmA&H5A-m%=&l+n zY3A(h9tC!&L32F5lcK{ekKODs=vB{RE$Xvbvb#O@(W461K%&><09y>Kskzw=98xc= zVw;aax64)zdmN#|plW(%Vsh5S;7RnUp+TM` z&1@vaCOT-6cQ!%nMNBEaS2tU7eH46v{EqOJ#9E zP*3dqq~0O!H#G_sRGZR*e2lbRT6gwD8Z5z5p}(z6ut3cc`~8EWT(Y?6(=PghP#h1e z`Ox$INKi;M8S2Q1?0h7&wL(@As%h7Crq*<7brwe5|Dr~?EH`@H!{SGaN(ApX9)!yn zL1vlGMS)C4^?W<>?*20~u|6{q{Yt%?MD#PwzoV+C6`)qOS|PY9IVKC#tk<}{hTf2T ZQ{K3sw`9!yC_ZFLFjvmgHZ#n!`42K6Y9ast delta 758 zcmZXRxl1CV5C)!tGiI~!6{ zjm_RzbHj9I@_A-vvax`J`lo7*v^#WgNVglK(Zh6EbUPg3s3N6n!YTd5=!qm9dL-Rz z_8;hVI8K$qoLyXSQ6z2lanj)w^@?z2erjf+fYW-;?6hqR&N`f9Kz}j^3WqpvG3;=G zi*Kt!-&ORX%@orXkNobBbwy-T&FHU@4wccR)_(O=CoM0usHoIwt5UzPqKP57kAX{= zh(xZBE#4GOhKRi+**D2U;wSW`)zVd(aGSI2ULm?hncJGB_Vw?N-aFdji7cHfxFW|l zI0nJitHhh2;fVGMs+PMcrIl}4~i|KZh09uMcH9U333=IyOrl(k^)n-y0vA}f_B13>x;V$S-cer*GRkl zB6#tpEN61Ga@-Ag;xea+5)wk)5^z>;H_LO@YZpKQH!ZCzjjAvR!FWth)r!qr-PDtX zoMoA1ebH(b>!t@Q?Vj{SgC`pDV0r4pEY9pl`JIY(LkUlp2;QlfPI|Ita=(fTHl~HK zS!iTO7t1ja;{TMaSaS$jp^$bAdPiaDmF0BL%3N|;DQX0(SC4GQDnmPg1Ce?c>R$M z0{8GfVbZ_UK|&0cAqHm7LI++m-!Lfk0kA21~x;)tX8K$c^UkIw%+W?gW2?y&68a#%%;t2C~-LIc+b F{sVHJO&I_H delta 403 zcmX9(Jx>Bb6r6Y59d{?1sD#7@p`fAAa3(g!MoUoe= zveLrR*3QJgU}BtIik*2g`{wQ2`?2>?@9poo4`3d5U9WFMqR97tj87SYXOiSc1VdKonT8iOW>eWFcGGCrDRcuMpKW;9`{+8#JJRH7W;1 zEN}?J@`VUYvfq2Lb26;rCRDtLcsTA9W_3QH9u^<#*id=NqJ&M(EK{l3180lXHk}0A z@X?8vu|r`AQ)=ig(ZC+|$!fO)@*z)(Upb;a)mYPbq484VHJa@5*l~kfbTIJ`?8!U4 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/User.class index b02c8e7f1944d627ab58fcaf31b7ca82184e22e1..128baa85180139188ddb7b9e8b5359154cb63b9d 100644 GIT binary patch delta 53 zcmaE>bVX^y9S+9m&7U};Ss8OC`|(*z%Q3JsFfjNturdTNa54lk@G=B3h%f{*$T5U$ JUcq;i2>^-p3_t(? delta 78 zcmcbj^j2xZ9S*SqTP%QU^IeW;R>p$KmVDOoN(>wf3=IAZj0^z`tPFt+oD4w>ybQq% RA`Br6atxuH`}vMC0RSnb5m*2K diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/ChannelRepository.class index 0ce15532e37d1f59d41d5e76cb01c33b9bf57826..1e422d9d895462b1969d52e40da5b9b533131a65 100644 GIT binary patch delta 216 zcmeyu@{pD5)W2Q(7#J9A86-DySu+NyX!v9$mL=-vB<7{-2bUCO=A~O}LWD|7GIR8O zGK)*B85uZAi&KmI5_3}-890M8)AJHbN{fK(Xe_!XXE1t+i58_Mra0#01QcbKC6=T* zXC&t3rRGfDz!=HMHkpgb#fOQ39q0;HMg~D3B?QDw48kmo3?d8yKo(XhQ3f#vMwk>I MPzNJ}I9Q(q0OchwsQ>@~ delta 108 zcmaFJ`h|t-)W2Q(7#J9A8N@eoSu-jNX=wUnC6*=XmzHGa==)?Amsm40a0X|l=Ovbu z7Ns&Wcxp_Z&geDyCu2Ax>*PQt7d1u(L7;vn1|b$k24Myf21W*UAfJ_yfe%PAGKhjD F#Q<(p7E}NL diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class index 8f6b1c51f4b757b59736e5ab8f30e594174d2693..b49184754e4b2fd4c564e4e70a093257d8412d00 100644 GIT binary patch delta 102 zcmdnS`jT}+ETb$-T4r7fBZH%cPgY`CqJB=HQa4xErQai1reb&G&$`MMo`DaK9)n zNSa!hn&LwcaLGNj$(V8~TmEP&D{#rQWooML_aJf_hd1|k`0lyqe&;*qo{KX-ooTx8 zSMxCdgXChJX_BwW1Ou*VxQ-jD-FHOx{kV!-8h*xYf!A#3@Pgu!`2u6FglXRRMUeVq z!-{L`tJ}BMN4M83Yb&pe9`Bf4mRn+v9-5b1SZL38?^G>qFF({)v8=6PXAcuv@tcOh z_+4fAhWTX$!V`aJ7=b?peN<{_kc#lrTseMIynVb&op#6A+yc9*4_PGH?#+FcQ4a(= z?77cmvdaaE~ zu`#&6r|dGxoAQ>I)M~O@-gaFN_m=d16hYq6WP?+GCaYzQnLo_)_mD;% zJFLk{S!I@0-qNCyBSTV;>*%|hRLBamOrzT=9XPGYaw!*RBPokxXnwBKX?J?bIYF%2 z9vNwh$t)_GQ(EjL=T%K)ns};@BQsP)R5uAx{i4#Ohsuw-oEC=Km_=#SnQNb4b3 zF$}4gfIi5^gLoDXV-D3U#BdbhQOv_*uCnMH$rukGOoRoK&;yehgYL!>>}B8vew%paTiRFgDsE$`t2}0{1gwBBRw5Fs7v%qCDHXnHxR8-t#Q=>TZmQ@-Ac5E=r*+=zF+7K7-cm3c{_~!1BSPtb!sC% z8e>%-#K$bOCMGqYy$Lsk1isdn?+ln?JwQ*RWO5C}eO!0J8?}^p4~Al|j3E-;5lzO* zIR3}DQXp{<`VEpoDPo0-iE3TQTp|;Rc!(4LGJ>W-919`h#J?P!yvx81TPLZX1e@U7 zf{RlF?=<4lah>}A_%`C#|G4_OIn_~zgRE@5n`cNz#4et;4xW<5dyEJZ%RN}}i2mO5 zdX0VZFcWG*IGWK5EfnDBUCAeR1x@ZsK3+=xm%NVLJ9!nDFgNxDJaCdtbP8siMhMRE zva{%kbBM)xR`LQ;@V=@|m?_0dOI$SMLsq2KO(M}EbL9*Cg0U*dtM^`dPmdFHF zQdi#BD2u6lfx49VT*PGr;1i1U8NzS{arm5X<_o@;FOi0?R8~^0e53wOs`2@r4fO+? zsg2FlS6#8@`P?9KlgKS17B!=HWFTH*DfJ#JqoTs^0JW}n|B-dH4DKEZeJ9rTFeS{BmF!jvf108~q7^Vu76O5c*YIE|Dj5PT1 z?OQMaQAp=B7{HOz7o%xsVqllr7R1O}S;zM9W0xzbB$rH1(aEx2Ri!wLoR3ONwMrkA zo*L!cNS+4SBvU%`*-Y`b&>jVEsb+p}$WB&fkL;EGZtH;5Nxj=TBn{H!_G#|iIU+|p Yy^qO>PM?$XIm37+#yTtS$pv)(2b6bx=>Px# delta 1566 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 delta 2565 zcmaJ@4RDm@5q_Tg`*L?*?k<Xs`TH|O85Kja)8rz?wj}B zcX!|2efHhmJE2d?r~V%xF28B@jSk+cDh6E7x4`ZFX?z0-&8NT7r4KT z?`Zh0j_=`B70_2XexT!r_>tPEH@kkKqZ>aZ))}@-)Z1RSdPl#}@tTgG;}@zaw<`Qg z9lydM!jbIi?c30$;SIvm6WtK4Uq29w*SEJXny=waB3~_?ksoxS8o$=@8`Kl-?yi9) z(fxTnpb+qG;>O$^Z$2&UC;ZLg3 zb7lQs2z~0&EoX;zoH?}Z?Czs}XgHgLzZ>k$BU8hVPwm})=81a@r|;_cr`qcYRQyZF zzYXs>;(bAHG!}Pb6E5fkP7~H>XQxJsdd*YpARf_ZSLZz?IW}rK?95SR-Z^q`>2y<9 z*Ly>58xFci9MtGjgWiyzex3QI`GLM=1IbvT`|v(*)E3mlTYG<3QXVT2?d>A8HL*lz zb3AS)u77=eKsD!=)TggBG&T^S>Tt`&G`7V02R@uW$D@hvjN;*Q1y5N$2^aggPU9Uq zlk7h{QfTAi(_T9_xZviX&Nb}z$%jK;2S07_HtJl>s82rZ7rna;-e+~L^*ICzyG3m%Ibne*4q(4C(DE?OnMZ?sU$8fyk2u`$!Th};FvJm5VftbK6kk0mB9lk6#Y zaW|*)>=jc%E;iGam(6&dq_$L2&X8PnfNdI1U7qw7wyLd_b>YkH--|qKg&*6p_WjfL z)vI#~=1kjLdWpR>s5X97c|un-za>@j+hJ(71F%^~+H4~xl48txACd=z^B_vF-Skug zo6sf_l?csFEs4?P&pCQyRPK1-a-%tkPHH)kQbV6O@V<_ScYZzLF(3A~$4jO{pWVpL;Q z_4?!x3e566DLs3xsz`!L2T>xk9M~u8qbS2yWQ2bebMY7&upb}60W+AHW{oswgK6e+ z-jXR1385^&iy=sFE(d%rWBQ1Sk>YFRy3w1?$Qb@nBUu@Nl%j>D!jlS zBRguwB_TLMYs)d(IwD8tXssQi^CYU@*^wDUrWY(Kp z?SklA((J67HKUf%u^T!vv&_MDN)jM{4>Jj9$`pVe8D}2hpE#HLGb4D%80#jO7T&KLGO diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class index 57afae7ea15d3f06224c6d7ccf01c49554f8e627..0831db3d166c4609394dc8ff52f1ee530908d151 100644 GIT binary patch delta 1340 zcmbtT+fEZv6kTU#+R|w)(pG{LP$UL1ng)vrSV1mA5nHa}g^MykfnotIh4>^s`t1A& zUSf<7et_Sg(U0&|ah=m)T77|NW^&Fxd-h&y?{)UPh`nzxKmYpp2|zarug!?wA3ztb z`H&3aI=Tfy>(;In-znzu@pNvxD4=bv2!t=RrT_epG*OQmLG+@}Zq*xg9|qo9`g2Xp z*xx-<)uBSxTJFo|2iC03&1~N8^PY=Hyre+Y&UUsiYHef%W^Kz8v0r&dYEL=wiywR^klFWw*VerO0IglY)fWbqmXc@9^chY+OK11}>|_JQxx{4nFfFu2xmJ;B%z zORm8!dV-7sVi-XkcRy|;E%RtMs4sx=29bT91tg9{1!}owFiM`3{j%!HaG9Zz_)R#C zMx5az8EP2?G&>B^8pAmAC+PJE9wc-IlL}1pr^T>6=5N`PsU2*io&G7@QROFGkOZc2 zSCx{$Jz5%DIC$D5+;LC#h*~a@V;>FTR8Q z%naH;{oy^?T1dGQl&ph7UR7IhKp`sL7_YHEikJz2NtmwkA>V@aW6*!hgg$DUcxf1l$|qU z`JVlZ*ryLTNl6myr7Y4QJwp^G^}ixzv7!hk0x{8JZv>hq%R`nS$tVYO46Pg`IVtis zfHqg9Hs=m%I0>s*Ba)+6=>~ER_}4&3O2U?=db&cF78k0e;yOLhntR>REn%%6Q<)hS zJxgWg+=Bmcd>$jOl=&9CTr3N}NcbhfFCPgn^$_YW`D;2?sf3OVt{VS^E$#*bqj*Bg KR8{~_Vg3ed^OxrU delta 1217 zcmbtTO;1xn6g~4^%WGe2DWw8wAt@n7s!dRf5rryP%6Cx&MOqchhk%yG2pcz+e_+h4 z{0A&tR3#+1Fs}VC?p&j1rjNF|(P+|i?%duv=bn2{4?Fjw_SfT2p8=#$dT+Oywv7m` z`f&||a@p+a@*#$lAJ=h1z}ni$Y(L+9DPZ=-a~4KEmd#g&xG#_0^U}7iGzVU+7uH6K z#q?&OR9Y{}Ve_<0V6s>4H%-YA>wDiY41^FsGX!pu)Igf|P{Vx`K4#r$Vns%-c@knw zzVWnY##!xW4v1m`9X!35#FVOH+^K&7Tp!R{;ay;i-wFe0tp+xqE-cZN?7ygg<0w4W_rWPT2J;Nm@514&{Y3z|5I zyNnFVJ)?n5++$@2#1HhrWx;1*QGX&377-M!*Wh#Tp`u;htBq#@CLSs`Fj1HY26Kf4uI{1r1eoV^0mLr(s!c z7~R7)V^*=A{N=8e*mRD&%GVnHM{{go)0t$W9fO>t+&>lBt-GT@#uYNI{*h6QNa(-C cZ+2YOi`>%le~M>3T`UZv$jH`_58JSR0!M*_3;+NC diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.class deleted file mode 100644 index 0f8986ad7fdaf56489ed41ecb09ff3c5de1da88f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5652 zcmbtY>3n8`_dIF*UR)>E1NmzxHp*ujjrQNzd3d@XH5}-rRZj-gD1g-i+UT`}*qu zcHlp8G$3LjY9oe5g~Tc6tdq(+g_Eg+Cr-H;U!ie(u8{M0DnvSx!xm;Ktks(;elDNN zc!f-*RB{V`s;9Qx=afeWoMIdnB2AbL+rk_hbJ47@Bjb&w%EeNS3S+r)Ip-Bp*<3l} zW!;>gD!E0kob$cXh199cNNRu2-lJu=^k_}0FsnjAnZ^~G`|B_$NQDg$*Y76(+co*6g=GG~b$IR(T zm)C_IeW9k2`Lu<#3LP`zVczLEC15Oc+z!35d&qbEN;!@-=(MpO8x$-ek%TEMsD`1z z4EZdUlcZ@jHrYsFGc%tn@2M2?xeR#-R2Fswftwo1<6{0^8~5RUg&58EWpCx^=+VAC z>WMQj~hp|mzPMsrNXOUus6m2y<1g()ae1?)~SQP8qh5j9EoN0_qqawI>+2}&I zLcCJUhUr!~VCsj&7$ELKk{lK%JvR0T_pG5n*TP%iOC{%mR7xDZh)5`XHumEH zr@~n$UvbL{t<`MldC=qK^PC!NYtlM^K??_M9KvB{wQjY(iFV39>v>FJ*(5uGG(}W= zm~P>$8nST&N0~^cSj@B7S54YKQYmP!slDNX?vLT!79O*49FO1Peyr$}9F7?d3YIr- zSYZkegzV}-rW!PRt4C{z3Ho^gPg;1&#(Uu?EUt$+DF%tuEBP)-7^&@&k~!|-PKMzE~D-JHa;L*BThDJ;c0~jXB=0?`646BJXo5B zawiL%NhMNzz?h;O0o#pRJuqgT_{Nk=?@TM)XQMs+`)v;c>GagJRPIWoo(H ztwd7MC|#yxz!fcTL+w6o&ixh>QxIgIKz+Xyi7Xjf-#Ub zPr6XVJQnnsZ;j*%+3q}Ta>kS^c_w`(QbTnib?u~cK&r!J-`E(>x_Po3;F~{%XW^$I zM{X2bXQ9DCZMsPYbLB(C$KnXgM4S>24wJDk-3qpFEsP%Vgz@&!p-HPbufr^8t-kCL zFUUnzOCL#k%d{lMGNW$hw8EMxQ5kVmvmkL6&#?yb&e(~p(;hP4&KIj4roL{pJ8!S# zFso$9tCTYC-kc1oMN?kiH%TdTN)5VYf54TQ#)?nu_B_Armz-kI4dv!W+=$~>__c-C zZTto|74E6`K(27sJME_WHFjz^BThy>7-*I~RKI)6%XpSM7!0#1y-ew3JgKN5uOW=?H z=Rh4M@qd=r?7!G}6|W`mSA~stDVAu<$R1 zl{0Up-5_^ZO|%VsH~Jv2E%JfM^@sSb*nki7o?n8s`;TA_rToODC3au}A4etCi_i9gu&74G^fC3B(P zM$$r?g*6t|;cJw|6b%XmUHEz!^m(c^Qr0TS*H0j=L*B4)NpwkU96KWtK!XlI{yhP{ zD=xxX4R&XsR|DIMZ{VA>OovSZfmRLPQe2{2RpsH5cJo~(AV~hx z{1rEwZ=jb2_(;FFo4`JW3G^#m$D_b6F+73yG+_O8oB-t`T#ECE=4Y;sb2DaP3pU|i z1H|SK#4L2+drYIMr7VzqpOT_+f}C6NbJ{!WKNW{IKRGaH=7wH%euxYc1d* zfbtM4Z7UP@umNRVjgNJ>tkV_N#bw6PAm8+%?*e}%Z{jzkoE`>P50YVw z_J0?p-7LJ_+F=`?&!v?g;m5qvQq6TDOofywQ#N4HRtVz~MG8N`g%HMzG$Js%*S`Vp zB31|s8qrO7x&-v)*k!EXhBFtjK+|*+XR7j8^vY#KtGKseXAO7Iko(w{eVktVnVSQo zYJd%S5WD!HEMp}oqV5{!0!1QE9&p~C;p8k{{vG2rzQXZ diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class index 18a5c6afe871ed9607b2f179db5bcbbd4a79005b..7e3706f440de1af74134bab5568109873402a789 100644 GIT binary patch delta 358 zcmaFMa)(Xe)W2Q(7#J9A8RXa*m>3z1Cnqw>PSpLHC7PC*m*SX{6Ht^{mROSNoROH9 zmzu-KprYZEl~|UjpOcuEt{+@dl$n=qtqBn-Ey>K$_sJ|Sv1Vl8C@oGc@=MH3Wn|zC z&P>lsEGaDlvZJx+p6t))#la4>Zt`?S4RPVjyt2%aRH)U#sYPX}MT`vQ6Bnx@+Y}n= z>0+%J#mK;&3~?O9IyR8ao+*>}GU_pMOn$@YQpd!=4)h@_BZB~t5(Hu<1|b$k24Mz% zAPcLM2m==bBUp-)i9r;oLyUm|s6(8A4Jr&Yi~}qr!5|40;$>!#0;&YrAq~Wg3^G8H Hi9r?srL;~p delta 145 zcmcb^_Lha~)W2Q(7#J9A86-AxNigcNr)B1)IOgOqG6-pC`eY@RCF+-!WajAmWEPiL zGcs@nXQt;RmXsEyGBS8-OzvUyn*4xKZE`M?4kO#-Sxhdrj0^%m)0h|pS%4-ma4|44 jumky=Obo(6N`!#{C@jjr1{G#yWZ(b_Gct&Q^@sxil;Rq8 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class index 616b396d180a7596fffaa75fb6be911914dc55a7..c09a92f6f2fc87f766989340619d077721e9c6f1 100644 GIT binary patch delta 318 zcmeBV>tN?P^>5cc1_lOO2BnEy)AUp|e6kYD67@?nKXSS3dr)Ml;rD&0=2qj z=B1<-O+LY>C*r7~iDaiwW^suPHl5cc1_lOO28D@S(oW%M$f-67$ma zgG-7s^U|#~F@z?oFzKnNX+R}POEPoxeKLznY%mp0WXi5*V_;-p2U^U^$iT(Gz{1GD z&A@{Y;sp!wG4Ml$L|GXGfQkiySO|!Pfmj5rM3g}cp^F17B+eiK6p{ogVPcR18Z6Bq SgHR$16lP?QV_*fz$^!rlmn{?k diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index d8dda03c54df0296ba3c1b539cf16ae4a353406b..a0a62d3243cff68584635b45cd6a56b72e64f10b 100644 GIT binary patch literal 29624 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 requestAllChannelDto = channelService.findAll(); + List requestAllChannelDto = channelService.findAll(userState.getUserName()); if(requestAllChannelDto.isEmpty()) { System.err.println("채널이 존재하지 않습니다."); return; @@ -163,7 +170,7 @@ private void delete() { UUID channelId = channelService.findChannelId(name); if(channelService.delete(name)) { - messageService.delete(channelId); + messageService.deleAllFromUser(channelId); readStatusService.deleteForChannel(channelId); binaryContentRepository.delete(AttachmentType.CHANNEL, channelId); System.out.println("성공적으로 삭제되었습니다."); @@ -171,4 +178,30 @@ private void delete() { System.err.println("삭제하지 못했어요!"); } } + + private void invite() { + System.out.println("현재 당신이 접속하고 있는 Private Channel은 다음과 같습니다."); + + channelService.findAllPrivateChannel(userState.getUserName()); + + System.out.println("초대하고자 하는 채널명을 입력해주세요."); + String channelName = scanner.nextLine().trim(); + + if(!channelService.isPresent(channelName)) { + System.err.println("해당 채널이 존재하지 않습니다."); + return; + } + + System.out.println("초대하고자 하는 사용자명을 입력해주세요."); + String userName = scanner.nextLine().trim(); + + if(!userService.isPresent(userName)) { + System.err.println("해당 사용자가 존재하지 않습니다."); + return; + } + + UUID userId = userService.userNameToId(userName); + + channelService.invitePrivateServer(channelName, userName, userId); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java index 5c543760..0f6e1e0d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RoutePrintText.java @@ -37,5 +37,7 @@ static void printText(String text) { System.out.println("2. " + retouchText.get(1) + " Update"); System.out.println("3. " + retouchText.get(1) + " Read"); System.out.println("4. " + retouchText.get(1) + " Delete"); + if(retouchText.get(0).equals("채널")) + System.out.println("5. Private Channel Invite"); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java index bfa64322..af2042e4 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java @@ -3,8 +3,11 @@ import com.sprint.mission.discodeit.Input; import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UserFinder; +import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.service.basic.BasicBinaryContentService; +import com.sprint.mission.discodeit.service.basic.BasicMessageService; import com.sprint.mission.discodeit.service.basic.BasicUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -16,6 +19,7 @@ @RequiredArgsConstructor public class RouteUser { private final BasicUserService userService; + private final BasicMessageService messageService; private final BasicBinaryContentService binaryContentService; private final Scanner scanner; private final IsLogin isLogin; @@ -89,8 +93,9 @@ private void update() { System.out.println("사용자 변경 메뉴입니다."); System.out.println("현재 로그인한 사용자의 비밀번호를 입력해주세요"); String password = scanner.nextLine(); - if(!userService.isValid(password)) { + if(userService.isValid(userState.getUserId(), password)) { System.err.println("비밀번호가 일치하지 않습니다. 처음으로 돌아갑니다."); + return; } while(true) { @@ -100,7 +105,7 @@ private void update() { String rePassword = input.inputUpdateField("비밀번호", "\\S+"); String reMail = input.inputUpdateField("이메일", "\\S+@\\S+\\.\\S+"); String rePhoneNumber = input.inputUpdateField("전화번호", "^\\d{10,11}$"); - String reProfile = input.inputUpdateField("프로필 이미지", "\\."); + String reProfile = input.inputUpdateField("프로필 이미지", "(?i).*\\.(jpg|png)$"); System.out.println("이대로 진행하시겠습니까?"); System.out.println("맞으면 y, 다시 입력하려면 re"); @@ -111,11 +116,13 @@ private void update() { if(finalCheckIsContinue.equalsIgnoreCase("re")) continue; if(finalCheckIsContinue.equalsIgnoreCase("n")) return; - if(finalCheckIsContinue.equalsIgnoreCase("y") && userService.update(reName, rePassword, reMail, rePhoneNumber, reProfile)) { + if(finalCheckIsContinue.equalsIgnoreCase("y") && userService.update(userState.getUserId(), reName, rePassword, reMail, rePhoneNumber, reProfile)) { System.out.println("성공적으로 변경되었습니다."); + return; } System.err.println("알 수 없는 오류로 인해 실패했습니다."); + return; } } @@ -124,7 +131,11 @@ private void find() { String name = scanner.nextLine(); try { - System.out.println(userService.find(name)); + UserFinder requestDto = userService.find(name); + String profile = binaryContentService.find(AttachmentType.USER, requestDto.id()).get(0); + + System.out.println(requestDto.userInfo()); + System.out.println("프로필 이미지 : " + profile); System.out.println("===================="); } catch (NotFound e) { System.err.println("[ERROR]" + e); @@ -136,9 +147,18 @@ private void findAll() { System.err.println("사용자를 찾을 수 없습니다."); } - List findAllUser = userService.findAll(); + List findAllUser = userService.findAll(); - findAllUser.forEach(System.out::println); + findAllUser.forEach(requestDto -> { + try { + String profile = binaryContentService.find(AttachmentType.USER, requestDto.id()).get(0); + System.out.println(requestDto.userInfo()); + System.out.println("프로필 이미지 : " + profile); + } catch (Exception ignore) { + System.out.println(requestDto.userInfo()); + } + System.out.println("===================="); + }); System.out.println("총 사용자 : " + findAllUser.size()); } @@ -157,11 +177,13 @@ private void delete() { System.out.println("현재 로그인한 사용자의 비밀번호를 입력해주세요."); String password = scanner.nextLine(); - if(!userService.isValid(password)) { + if(userService.isValid(userState.getUserId(), password)) { System.err.println("비밀번호가 일치하지 않습니다. 처음으로 돌아갑니다."); + return; } if(userService.delete(userState.getUserId())) { + messageService.deleteAll(userState.getUserId()); userState.userState(""); System.out.println("성공적으로 삭제되었습니다."); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java index 7c2fc042..908bc50a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java @@ -1,13 +1,8 @@ package com.sprint.mission.discodeit.dto; -import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.entity.UserStatus; -public record UserFinder() { - public static String from(User user, UserStatus userStatus) { - if(userStatus == null ) { - return user.toString() + "\n오프라인\n===================="; - } - return user.toString() + "\n" + userStatus.toString() + "\n===================="; - } +import java.util.UUID; + +public record UserFinder(UUID id, String name, String userInfo, UserStatus userStatus) { } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java index 6e8218d9..b229d9ed 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java @@ -26,7 +26,7 @@ public BinaryContent(AttachmentType type, UUID relationId,String fileName) { @Override public String toString() { - return " BinaryContent ID : " + id - + " fileName : " + fileName + "." + fileExtension + "\n"; + return "\n BinaryContent ID : " + id + + "\n fileName : " + fileName + "." + fileExtension + "\n"; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index 41607177..e00f237d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -76,8 +76,7 @@ private void setPhoneNumber(String phoneNumber) { @Override public String toString() { - return "====================" - + "\n사용자ID : " + this.getId() + return "사용자ID : " + this.getId() + "\n사용자명 : " + this.getName() + "\n이메일 : " + this.getEmail() + "\n전화번호 : " + this.getPhoneNumber() diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java index 3f6e4bb0..deaa611c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -10,7 +10,9 @@ public interface ChannelRepository { boolean save(String oldName, String newName); String readChannel(String name); - List readAllChannel(); + List readAllChannel(String userName); + + List readAllPrivateChannel(String userName); boolean deleteChannel(String name); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index 7797bfcd..0fcf0f68 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -1,6 +1,7 @@ package com.sprint.mission.discodeit.repository; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UserFinder; import java.util.List; import java.util.UUID; @@ -10,9 +11,9 @@ public interface UserRepository { boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber); - String getUser(String name); + UserFinder find(String name); - List findAll(); + List findAll(); boolean deleteUser(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java index 6d98c24a..17fc5549 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java @@ -88,20 +88,19 @@ public boolean create(AttachmentType type, UUID id, String file) { @Override public List find(AttachmentType type, UUID id){ - try { - switch (type){ - case MESSAGE -> { + switch (type){ + case MESSAGE -> { + if(messageIdMap.containsKey(id)) return messageIdMap.get(id).stream().map(BinaryContent::toString).toList(); - } - case CHANNEL -> { + } + case CHANNEL -> { + if(channelIdMap.containsKey(id)) return List.of(channelIdMap.get(id).toString()); - } - case USER -> { + } + case USER -> { + if(userIdMap.containsKey(id)) return List.of(userIdMap.get(id).toString()); - } } - } catch (Exception e) { - throw new NotFound("왠지 모르지만 오류가 발생했다!"); } return List.of(); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index e61a3f11..8fd4fdb7 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -1,6 +1,5 @@ package com.sprint.mission.discodeit.repository.file; -import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.ChannelType; @@ -28,7 +27,6 @@ public class FileChannelRepository implements ChannelRepository { private final Map publicChannelIdMap = new ConcurrentHashMap<>(); private final Map privateChannelNameMap = new ConcurrentHashMap<>(); private final Map privateChannelIdMap = new ConcurrentHashMap<>(); - private final UserState userState; private Path DIRECTORY; private final String EXTENSION = ".ser"; private Path resolvePath(UUID id) { @@ -145,7 +143,6 @@ public String readChannel(String name) { return privateChannelNameMap.get(name).toString(); return ""; } - public ChannelType getChannelType(String name) { if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getChannelType(); @@ -163,18 +160,26 @@ public UUID readChannelId(String name) { throw new NotFound("해당 채널을 찾을 수 없습니다"); } - @Override // FIXME: 접근 권한 있는 채널만 조회하도록 변경해야 함. - public List readAllChannel() { + @Override + public List readAllChannel(String userName) { List result = new ArrayList<>(); /// public result.addAll(publicChannelNameMap.values().stream().map(this::requestChannelInfo).toList()); /// private - result.addAll(accessAblePrivateChannel(userState.getUserName()).stream().toList()); + result.addAll(accessAblePrivateChannel(userName).stream().toList()); return result; } + @Override + public List readAllPrivateChannel(String userName) { + if(accessAblePrivateChannel(userName).isEmpty()) + throw new NotFound("권한이 있는 Private Channel이 없습니다!"); + + return new ArrayList<>(accessAblePrivateChannel(userName).stream().toList()); + } + private List accessAblePrivateChannel(String userName) { List requestDto = new ArrayList<>(); privateChannelIdMap.values().stream() diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 3bcffc4f..088dc72c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -180,9 +180,14 @@ public boolean delete(UUID userId, UUID id) { } @Override - public void delete(UUID channelId) { - if(channelIdMessageMap.containsKey(channelId)) { - new ArrayList<>(channelIdMessageMap.get(channelId)).forEach(message -> { + public void delete(UUID id) { + if(channelIdMessageMap.containsKey(id)) { + new ArrayList<>(channelIdMessageMap.get(id)).forEach(message -> { + delete(message.getUserId(), message.getId()); + }); + } + if(userIdMessageMap.containsKey(id)) { + new ArrayList<>(userIdMessageMap.get(id)).forEach(message -> { delete(message.getUserId(), message.getId()); }); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index f9648897..e5029b6f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -95,15 +95,22 @@ public boolean updateUser(UUID userId, String reName, String rePassword, String } @Override - public String getUser(String name) { + public UserFinder find(String name) { User user = idUserMap.get(userNameIdMap.get(name)); - return UserFinder.from(user, userStatusMap.get(user.getId())); + UUID id = user.getId(); + String userName = user.getName(); + + return new UserFinder(id, userName, user.toString(), userStatusMap.get(user.getId())); } @Override - public List findAll() { - List result = new ArrayList<>(); - idUserMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(UserFinder.from(user, userStatusMap.get(user.getId())))); + public List findAll() { + List result = new ArrayList<>(); + idUserMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { + UUID id = user.getId(); + String userName = user.getName(); + result.add(new UserFinder(id, userName, user.toString(), userStatusMap.get(user.getId()))); + }); return result; } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java index 9423ab33..e726f764 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -54,6 +54,16 @@ public String readChannel(String name) { } } + @Override + public List readAllChannel(String userName) { + return List.of(); + } + + @Override + public List readAllPrivateChannel(String userName) { + return List.of(); + } + public UUID readChannelId(String name) { try { return channelNameMap.get(name).getId(); @@ -62,15 +72,6 @@ public UUID readChannelId(String name) { } } - @Override - public List readAllChannel() { - if(channelNameMap.isEmpty()) { - return null; - } -// return channelNameMap.values().stream().toList(); - return null; - } - @Override public boolean deleteChannel(String name) { UUID id = channelNameMap.get(name).getId(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java index 510630bf..ba508faa 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -1,106 +1,107 @@ -package com.sprint.mission.discodeit.repository.jcf; - -import com.sprint.mission.discodeit.dto.CreateUserDto; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.entity.UserStatus; -import com.sprint.mission.discodeit.repository.UserRepository; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -public class JCFUserRepository implements UserRepository { - private final Map usersMap = new ConcurrentHashMap<>(); - private final Map usersName = new ConcurrentHashMap<>(); - - private JCFUserRepository() {} - private static class Holder { - private static final JCFUserRepository INSTANCE = new JCFUserRepository(); - } - public static JCFUserRepository getInstance() { - return Holder.INSTANCE; - } - - @Override - public boolean createUser(CreateUserDto dto) { - List userSet = dto.toEntity(); - User user = (User) userSet.get(0); - UserStatus userStatus = (UserStatus) userSet.get(1); - - if(isDuplicateName(user.getName())) return false; - usersName.put(user.getName(), user.getId()); - usersMap.put(user.getId(), user); - return true; - } - - @Override - public boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber) { - usersMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); - return false; - } - - @Override - public String getUser(String name) { - return usersMap.get(usersName.get(name)).toString(); - } - - @Override - public List findAll() { - List result = new ArrayList<>(); - usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(user.toString())); - return result; - } - - @Override - public boolean deleteUser(UUID id) { - usersName.remove(usersMap.get(id).getName()); - usersMap.remove(id); - return true; - } - - /// check method - private boolean isDuplicateName(String name) { - try { - usersName.get(name); - return true; - } catch (Exception e) { - return false; - } - } - - public boolean isPresentUser(Object arg) { - try { - if(arg instanceof String) { - usersMap.get(usersName.get((String) arg)); - } else if(arg instanceof UUID){ - usersMap.get((UUID) arg); - } else { - return true; - } - } catch (Exception ignored) {} - return false; - } - - public UUID userNameToId(String name) { - try { - return usersName.get(name); - } catch (Exception e) { - return null; - } - } - - public String userIdToName(UUID id) { - try { - return usersMap.get(id).getName(); - } catch (Exception e) { - return null; - } - } - - public boolean check(UUID id, String pw) { - try { - return !usersMap.get(id).getPassword().equals(pw); - } catch (Exception e) { - return true; - } - } -} +//package com.sprint.mission.discodeit.repository.jcf; +// +//import com.sprint.mission.discodeit.dto.CreateUserDto; +//import com.sprint.mission.discodeit.dto.UserFinder; +//import com.sprint.mission.discodeit.entity.User; +//import com.sprint.mission.discodeit.entity.UserStatus; +//import com.sprint.mission.discodeit.repository.UserRepository; +// +//import java.util.*; +//import java.util.concurrent.ConcurrentHashMap; +// +//public class JCFUserRepository implements UserRepository { +// private final Map usersMap = new ConcurrentHashMap<>(); +// private final Map usersName = new ConcurrentHashMap<>(); +// +// private JCFUserRepository() {} +// private static class Holder { +// private static final JCFUserRepository INSTANCE = new JCFUserRepository(); +// } +// public static JCFUserRepository getInstance() { +// return Holder.INSTANCE; +// } +// +// @Override +// public boolean createUser(CreateUserDto dto) { +// List userSet = dto.toEntity(); +// User user = (User) userSet.get(0); +// UserStatus userStatus = (UserStatus) userSet.get(1); +// +// if(isDuplicateName(user.getName())) return false; +// usersName.put(user.getName(), user.getId()); +// usersMap.put(user.getId(), user); +// return true; +// } +// +// @Override +// public boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber) { +// usersMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); +// return false; +// } +// +// @Override +// public UserFinder find(String name) { +// return usersMap.get(usersName.get(name)).toString(); +// } +// +// @Override +// public List findAll() { +// List result = new ArrayList<>(); +// usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(user.toString())); +// return result; +// } +// +// @Override +// public boolean deleteUser(UUID id) { +// usersName.remove(usersMap.get(id).getName()); +// usersMap.remove(id); +// return true; +// } +// +// /// check method +// private boolean isDuplicateName(String name) { +// try { +// usersName.get(name); +// return true; +// } catch (Exception e) { +// return false; +// } +// } +// +// public boolean isPresentUser(Object arg) { +// try { +// if(arg instanceof String) { +// usersMap.get(usersName.get((String) arg)); +// } else if(arg instanceof UUID){ +// usersMap.get((UUID) arg); +// } else { +// return true; +// } +// } catch (Exception ignored) {} +// return false; +// } +// +// public UUID userNameToId(String name) { +// try { +// return usersName.get(name); +// } catch (Exception e) { +// return null; +// } +// } +// +// public String userIdToName(UUID id) { +// try { +// return usersMap.get(id).getName(); +// } catch (Exception e) { +// return null; +// } +// } +// +// public boolean check(UUID id, String pw) { +// try { +// return !usersMap.get(id).getPassword().equals(pw); +// } catch (Exception e) { +// return true; +// } +// } +//} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 87321b41..4c383b2a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -4,12 +4,18 @@ import com.sprint.mission.discodeit.dto.ResponseChannelDto; import java.util.List; +import java.util.UUID; public interface ChannelService { boolean isPresent(String name); boolean create(String type, String name); FindChannelDto find(String name); - List findAll(); + + List findAllPrivateChannel(String userName); + + List findAll(String userName); boolean update(String oldName, String newName); boolean delete(String name); + + boolean invitePrivateServer(String channelName, String userName, UUID userId); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index 82158cf7..f8e71678 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -15,7 +15,7 @@ public interface MessageService { boolean delete(UUID userId, UUID messageId); - void delete(UUID channelId); + void deleteAll(UUID channelId); String lastMessageTime(String channelName); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java index 5f753a7f..79b7a41e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ReadStatusService.java @@ -1,11 +1,12 @@ package com.sprint.mission.discodeit.service; +import java.time.Instant; import java.util.UUID; public interface ReadStatusService { void create(UUID userId, UUID channelId); - void find(UUID id); + Instant find(UUID id); void findAllByUserId(UUID userId); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java index dc425bb5..6379d5be 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -1,6 +1,7 @@ package com.sprint.mission.discodeit.service; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UserFinder; import java.util.List; import java.util.UUID; @@ -8,11 +9,11 @@ public interface UserService { boolean isPresent(String name); - boolean isValid(String password); + boolean isValid(UUID userId, String password); boolean create(CreateUserDto requestDto); - boolean update(String reName, String rePassword, String reMail, String rePhoneNumber, String reProfile); - String find(String name); - List findAll(); + boolean update(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber, String reProfile); + UserFinder find(String name); + List findAll(); boolean delete(UUID id); } \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java index d2b5c50e..eb9ea8a5 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java @@ -1,10 +1,12 @@ package com.sprint.mission.discodeit.service.basic; import com.sprint.mission.discodeit.dto.BinaryContentDto; +import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.repository.BinaryContentRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; import java.util.UUID; @Service @@ -12,8 +14,7 @@ public class BasicBinaryContentService { private final BinaryContentRepository binaryContentRepository; -// public boolean create(String filename) { -// binaryContentRepository; -// return true; -// } + public List find(AttachmentType type, UUID id) { + return binaryContentRepository.find(type, id); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java index 0e16d1ec..bd34fd55 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -54,13 +54,18 @@ public FindChannelDto find(String name) { return new FindChannelDto(channelInfo, channelType, lastMessageTime); } + @Override + public List findAllPrivateChannel(String userName) { + return channelRepository.readAllPrivateChannel(userName); + } + public UUID findChannelId(String channelName) { return channelRepository.channelNameToId(channelName); } @Override - public List findAll() { - return channelRepository.readAllChannel(); + public List findAll(String userName) { + return channelRepository.readAllChannel(userName); } @Override @@ -72,4 +77,10 @@ public boolean update(String oldName, String newName) { public boolean delete(String name) { return channelRepository.deleteChannel(name); } + + @Override + public boolean invitePrivateServer(String channelName, String userName, UUID userId) { + channelRepository.invitePrivateServer(channelName, userName, userId); + return true; + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java index 340b4b5d..c5824905 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -95,7 +95,7 @@ public boolean delete(UUID userId, UUID messageId) { } @Override - public void delete(UUID channelId) { + public void deleteAll(UUID channelId) { messageRepository.delete(channelId); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java index c7809528..f857b9bb 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java @@ -22,8 +22,8 @@ public void create(UUID userId, UUID channelId){ } @Override - public void find(UUID id) { - Instant lastReadAt = readStatusRepository.find(id); + public Instant find(UUID id) { + return readStatusRepository.find(id); } @Override public void findAllByUserId(UUID userId) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java index 12e34edf..e719a388 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -1,7 +1,7 @@ package com.sprint.mission.discodeit.service.basic; -import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UserFinder; import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.repository.file.FileBinaryContentRepository; @@ -18,7 +18,10 @@ public class BasicUserService implements UserService { private final FileUserRepository userRepository; private final FileBinaryContentRepository binaryContentRepository; - private final UserState userState; + + public UUID userNameToId(String name) { + return userRepository.userNameToId(name); + } @Override public boolean isPresent(String name) { @@ -26,8 +29,8 @@ public boolean isPresent(String name) { } @Override - public boolean isValid(String password) { - return userRepository.check(userState.getUserId(), password); + public boolean isValid(UUID userId, String password) { + return userRepository.check(userId, password); } @Override @@ -37,8 +40,7 @@ public boolean create(CreateUserDto requestDto) { /// Update @Override - public boolean update(String reName, String rePassword, String reMail, String rePhoneNumber, String reProfile) { - UUID userId = userState.getUserId(); + public boolean update(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber, String reProfile) { if(userRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { if(reProfile != null){ @@ -52,14 +54,14 @@ public boolean update(String reName, String rePassword, String reMail, String re /// Read @Override - public String find(String name) { + public UserFinder find(String name) { if(userRepository.userNameToId(name) == null) throw new NotFound("해당 사용자를 찾지 못했습니다"); - return userRepository.getUser(name); + return userRepository.find(name); } @Override - public List findAll() { + public List findAll() { return userRepository.findAll(); } From 8d5517c7c3be39ba2cf2e491c494d960726550b0 Mon Sep 17 00:00:00 2001 From: Alpha Date: Wed, 4 Feb 2026 17:02:30 +0900 Subject: [PATCH 32/35] =?UTF-8?q?Fix:=20Some=20more=201.=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80/=EC=B1=84=EB=84=90=20=EC=82=AD=EC=A0=9C=EC=8B=9C=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=EB=9E=91=20BinaryContent=EB=8F=84?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C=EB=90=98=EA=B2=8C=20=EC=B2=B4=EC=9D=B4?= =?UTF-8?q?=EB=8B=9D=202.=20Exeption=20=EC=A2=85=EB=A5=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=A8=203.=20=EC=A0=84=EB=B0=98=EC=A0=81=EC=9D=B8?= =?UTF-8?q?=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=EC=9D=84=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=ED=95=A8=204.=20Relation=EC=9D=84=20BinaryContent?= =?UTF-8?q?=EC=97=90=EC=84=9C=20User,=20Message=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EC=82=B0=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../com/sprint/mission/discodeit/Input.class | Bin 2549 -> 2552 bytes .../discodeit/app/JavaApplication$sc.class | Bin 675 -> 675 bytes .../discodeit/app/JavaApplication.class | Bin 1318 -> 1318 bytes .../mission/discodeit/entity/Channel.class | Bin 3519 -> 3527 bytes .../mission/discodeit/entity/Message.class | Bin 2058 -> 2509 bytes .../mission/discodeit/entity/User.class | Bin 4436 -> 4589 bytes .../repository/ChannelRepository.class | Bin 737 -> 741 bytes .../repository/MessageRepository.class | Bin 742 -> 977 bytes .../discodeit/repository/UserRepository.class | Bin 745 -> 649 bytes .../file/FileChannelRepository.class | Bin 12760 -> 14478 bytes .../file/FileMessageRepository.class | Bin 12707 -> 14205 bytes .../repository/file/FileUserRepository.class | Bin 11330 -> 11524 bytes .../repository/jcf/JCFChannelRepository.class | Bin 3638 -> 0 bytes .../repository/jcf/JCFMessageRepository.class | Bin 6939 -> 0 bytes .../discodeit/service/ChannelService.class | Bin 860 -> 1134 bytes .../discodeit/service/MessageService.class | Bin 926 -> 916 bytes .../discodeit/service/UserService.class | Bin 904 -> 767 bytes .../compileJava/previous-compilation-data.bin | Bin 29624 -> 31526 bytes .../com/sprint/mission/discodeit/Input.java | 2 +- .../discodeit/app/JavaApplication.java | 2 - .../discodeit/app/router/RouteChannel.java | 108 +++++---- .../discodeit/app/router/RouteMessage.java | 94 +++++--- .../discodeit/app/router/RouteUser.java | 83 +++++-- ...ntDto.java => CreateBinaryContentDto.java} | 4 +- .../discodeit/dto/CreateMessageDto.java | 10 +- .../mission/discodeit/dto/CreateUserDto.java | 21 +- .../discodeit/dto/CreateUserStatusDto.java | 6 + .../discodeit/dto/DeleteUserStatusDto.java | 6 + .../discodeit/dto/FindUserStatusDto.java | 6 + ...esponseDto.java => MessageRequestDto.java} | 4 +- .../discodeit/dto/UpdateChannelDto.java | 4 + .../mission/discodeit/dto/UpdateUserDto.java | 8 + .../mission/discodeit/dto/UserFinder.java | 2 +- .../discodeit/dto/UserStatusUpdateDto.java | 7 + .../discodeit/entity/BinaryContent.java | 12 +- .../mission/discodeit/entity/Channel.java | 15 +- .../mission/discodeit/entity/Message.java | 5 +- .../mission/discodeit/entity/ReadStatus.java | 9 +- .../sprint/mission/discodeit/entity/User.java | 25 ++- .../mission/discodeit/entity/UserStatus.java | 25 ++- .../discodeit/exepction/DoNotDuplicate.java | 7 + .../exepction/DoNotUpdatePrivateChannel.java | 7 + .../discodeit/exepction/FailedCreate.java | 7 + .../discodeit/exepction/FailedDelete.java | 7 + .../discodeit/exepction/FailedFound.java | 7 + .../discodeit/exepction/FailedInit.java | 7 + .../discodeit/exepction/FailedUpdate.java | 7 + .../repository/BinaryContentRepository.java | 11 +- .../repository/ChannelRepository.java | 5 +- .../repository/MessageRepository.java | 12 +- .../discodeit/repository/UserRepository.java | 7 +- .../file/FileBinaryContentRepository.java | 98 ++++----- .../file/FileChannelRepository.java | 101 +++++---- .../file/FileMessageRepository.java | 70 +++--- .../file/FileReadStatusRepository.java | 24 +- .../repository/file/FileUserRepository.java | 60 +++-- .../file/FileUserStatusRepository.java | 125 +++++++++++ .../repository/jcf/JCFChannelRepository.java | 206 +++++++++--------- .../repository/jcf/JCFMessageRepository.java | 195 ++++++++--------- .../repository/userStatusRepository.java | 4 + .../discodeit/service/ChannelService.java | 13 +- .../discodeit/service/MessageService.java | 6 +- .../discodeit/service/UserService.java | 3 +- .../discodeit/service/UserStatusService.java | 4 + .../discodeit/service/auth/AuthService.java | 1 + .../basic/BasicBinaryContentService.java | 18 +- .../service/basic/BasicChannelService.java | 30 ++- .../service/basic/BasicMessageService.java | 56 ++--- .../service/basic/BasicReadStatusService.java | 2 +- .../service/basic/BasicUserService.java | 25 ++- .../service/basic/BasicUserStatusService.java | 41 ++++ 73 files changed, 1012 insertions(+), 612 deletions(-) delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class delete mode 100644 discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.class rename discordit/src/main/java/com/sprint/mission/discodeit/dto/{BinaryContentDto.java => CreateBinaryContentDto.java} (56%) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserStatusDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/DeleteUserStatusDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/FindUserStatusDto.java rename discordit/src/main/java/com/sprint/mission/discodeit/dto/{MessageResponseDto.java => MessageRequestDto.java} (69%) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/UpdateChannelDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/UpdateUserDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/dto/UserStatusUpdateDto.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/exepction/DoNotDuplicate.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/exepction/DoNotUpdatePrivateChannel.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedCreate.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedDelete.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedFound.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedInit.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedUpdate.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserStatusRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/userStatusRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/UserStatusService.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserStatusService.java diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 59a49c1f4af6a7840ca7981f34476d7aac568be5..94a2111796b83fa36e9388656bb30c4ed11ac3d6 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~A|V2LLn?1WEt^ literal 17 VcmZQxwaR1i+k`Ae1~6bZ1OPMX1S0?d diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index d5bf4a39aad5ea350324047c1892dbdcbbe5bb24..0ed8a6f01ee31698ef860131450b7326c6f56d13 100644 GIT binary patch literal 8 PcmZQzV4S1+=iD3s2-*WF literal 8 PcmZQzV4S0HKjIVs2eAUb diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/Input.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/Input.class index c76ccc5aa9956a807505bd5b7249529f08c12b29..1599b068f082d05ee723ac72e4107e80b8a2f8ef 100644 GIT binary patch delta 37 tcmew={6l!dO(qe6l+uEn%;dz9ROgJ;eD delta 19 acmZ3?x|nr?6%!-JWNRi@M$XBNOiBPVj|80n diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/app/JavaApplication.class index a1f3fc07100348037e986ee58d92a0b7d529e299..c282a29ab2d6d538fe928990289138d3d0da0ac4 100644 GIT binary patch delta 65 zcmZ3+wTx@STV_Vq$?ur08M!BGu@q?XGq5lSFz_&lGKesUF~~58GpH~~Fz7HyGMF$( UG1ve_92sO8+!*91A7)7g0GI;`bN~PV delta 65 zcmZ3+wTx@STV_V~$?ur08F?pbu@qmGl(!qFvu`SGN>>}G3YQzGnfE* UHVkqMjtue)ZVZZ(53?i#0Gj~{jsO4v diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Channel.class index 458522fd498d5444af3619b82b6a10efef59d14c..5e2123907e7375479ee200e8d679ebcacbb935c5 100644 GIT binary patch delta 254 zcmdlleO!9Od`8C1%?lVAS@;AKQ&Jq0lT(X}Gm~;sC$DC85)>&)&CM@MMH2nR+5l8v z&32oSRf>U&L3(mD$97#=1{MZk27U$+1}O$P26-S91>U{GQ(V^C(WVNhXk zVo+u9V^EuH&)LDM#lX&>J^2i$Bc~n%D}z1*CxgLcF|Ht1V<69DaxPaSt2qM?gT>_2 zTxqP<4BQMhlg+pT83iU^9|cVCy_f delta 250 zcmX>uy!kei&$v0YbzfrUYgfuBK~L5e|csenMZwcD6h!m^E_;mTX@VT&jYh< b86_r9;8vWh$E(gL31*c8SyEuu0bX_hs4F`g diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/entity/Message.class index 6809dffb5dd7dd92c2f5b13b98e26bfc278090e5..96d549e7794180fee5966eb712bb8d71123089ff 100644 GIT binary patch literal 2509 zcmbtVZBrXn7(F+yBrIaWrn zQ#*d}lb`%ij_2M@LK5OIj+x2cyEo50&w0-ClE41`{SN@2^wbsC96sxbKmnlwJnfbSv|~S1i38o7DizSOc`_KHKbGWBjx(EPx`@+0y8VC z<#Ru7PhhPY zG@R%(^nB$syeRSl->G>~HK<8XInr02dgJWNC~}XbK*Fmrz?fA(MJC6FAO+`=Z+i=^7^5Sv*! z&rIj9h>tAX(YYR_`9a%f7Iy`TCLLbjRAlJ6b?+zls7~E-74O)0RWs!NdXIeC|NWkK zowcp)Es~^OyniS|oe`5*@tCoYo2ijQx89U#)}Q_efro9XXGs}EJs(Psh0$U4P$0F- z#0yN6JzqX)HjZTYB95R?4yxqik`*IrAEwlaM@2Wv|DlK&obUx^`|;kKb}%RRr8)^} z&)m>$NX7UCUjF~!hKQ`goj8`NBK?{S4@`kl`1Z+er;I6jTvgpBNYkXmKDhk6$@XZ- zlKJYBw4JNBEpy4k)(PCS8+Imiln zim(I=x>wE0DPUIiy;<3VwEcwp1U}`LjcWEB0$k_u8Se4-Epv7sW89~)jU>L{$)B{( zaJ_B+2JsHrdujU}##)%R*IJmf*IQVyH(FS<=h7`Kndh=SmukWOg}0LUl203XJ})6f zJ~_-`l0IiRtLCwQMO-28t61Z16W6dq%k9`BzQQiw=v&Vt`=r_F_)kB{ zWcbC{={7%s($LFugO`_wUVhB56UOs4R~=f$UVDq1TE5t|{&NEbN|UpeXEwI#%9GL4 zob+^%X<>p(=ut{Doxwe>8X&JTwrIb_?K9|cqo70RThwo}2R`40&kuv==%q&uf0y7| zuMyTowuR+0@R;`6x&(H94SrY{6~$s8u|-9P>>!TJCI literal 2058 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 delta 213 zcmaFL`jA!N)W2Q(7#J9A86?>mm>3x>CvRkwov7PwqpsnTl~|UjpOcuEt{+@dl$n=q zjVYoT#mK;(pOfO3n41b@<)xN`SQG!eV=hWfocxxtr+|}*feUCpHv6?J)VvbU6p$iD2F~Ej^t{B9(xOyGhBT;t4Um)#ns#eD3=^#X?(m$lwOjqz9Ho zw+o#Qayrm%JL}03OqTUb4D3Mv3bHV804Yu&<^p1FAm#yLCI(&>Mg~3xejp2^jFk~A z4UrN6N(thY5@HZ$U69fRUX$CowNwKe(hQGcSGOKC{U+jOM(Y z!I|lKi6x~)sf-MfllvJJCtqdMVJj}k&nr%y%*K?+q^vQqPC-I5ijhHB!zU}TEK$F- zBr``pG}P0@S~G0&dnU_zMh14EWxUJ`96*W_h`AUTSQr_&8F(0&z*4M?ARz``AZB9V z14{AZmJ(nPWPljR$;2Q8)B!XUs6&`R1R)GE3@8N_7G)5FCff$?3=9mm3=$K$LU`Dci&7IyQW+VXG<+rs$WH7Q7VybREKAfcEy>K$ z4-NHnv7R_znuo2lAO)<<7_3Y&r6gZJ6f6{4oLb~kl5edU#mK-_lv-GtT3iC;PmX3h z%+8jQnv+_RI$4t`%Z-(hft!JWg^_`WftP`ifgR`spb#Heh@U|KC?p6JVqy>iDiLN7 PK`0Rg3Ntc@fhENOWt}K= delta 325 zcmeBVeaR|t>ff$?3=9mm3^MEtOpFX>6EDh6)HUSiN-j!GEJ+P5PAy_&FxHs7kWp!3 zH$P+4#8uMuT%`pmaJgs=pRB~PME%l|%pCpDP)`?Y2tOw=FI_*lq$o2lolFtUC`Jah zQlJAoQ-F-3RKLXBR7M7_BBj)T#Ny)e{33|3Z(?Q+BLiAr2r85(x-}Y(&MSB#4G2U^Il3uo#r;keR^9WG2qSVi&bg zi@UX25tV+l+E|Mgtt5n0)79F=*4o9^?zOcl*nO|c_doZ(dGls61nBqm_sehId-vXV z?z!ju&vMUw`TE-jpC+R7U0h5qDlo`xQXv&FE$WW-)+PGl;b^k1H=Ia>W6`=`IME#o zhQi6Zc&IOy2q$Clt#v)&NT_ZxewsD}qR~)fx!uK7+}ygnrD?^o!@}v@> z_}pMP?xl$|$)J->noOrKm8nTIjjf4fsF!Kn`cSeX9_tImlUteIar9}NGaED|o0wXX zho&->hI^!=q%-NPQA`K|!9;O1mTcJ)P6%wyvRKJhsKt!kn3o5>C7=9 z5ZV&z(;8hIfH?Vm6k4I)TnsY^u`FT&tPlOiO(+zJLP^RO^gFxkegGJ24okFup96>`NuJWk{5| z+N3zaLlh-r(hbj_X2W`+!Ans}$!a#iw^*x5_lYF8q^%u|%hp{5r{kQ%OPlE$dHX#~ z{>wydxJu19VkRA2I1J39km$F9XNXN9i7ecA9iA?Lv&r zxFJQN0C31yzJjSGW=Eh*3x0HyWNP=D^nftw%VM%M2>R0fF_ZpBx+frk+XTmGEyC{q zxJjRo{z=*W)*=N!51I5yrRwfTED;hwK4j3R(&0z(Y{v{QJxrfAX|IHrl0Y!nnd<9< z=_EoygB}A2#@1kt(Ko43>Y;s@%VN7C5!e*64gFCHdg-(Dq(S>l8W6FM?Nx%wSl!A# zWKd}-G$&!9Ml2GP10ru1#izWl%XyTF(fWyuJu*&IMCVgAH zY^gJJrREL8R#PkzfoDg8gOGce-Z1EQ zCjFlN0MC^1Cz(N@lTgVQ)2Uf>bZaIvbJL$BYx(nkHCwO~7|F=~YSQ26?_e+)6Dj1z zU1`G-|4IKc=-(#2NpAsNnI-C1ir`loBauu*%au{(8VTJ;OeSWCQZgd!T9MIa8%$<5 zsj!|lUx!n-*?9vzvD@TA#(vlcCt7;@WKV~nx5i-4F(Z@h*I>FDW{h3#nXeDr^2Xiw zAAaD;io?5i9J=YQ3X8uA3xBHTo*NF|wExh}I}Y9a;B+q=Vg)aA36R63V@P0?j|#aA zX*Zvg+5H@CnR&8jA2$9IkW%tQro{hCCYdW%XF6*$U?+)iFMP7elNnoU*+=V8&Z9m8f}zF zuOwSe4kf%B3?h2Nt0ZafsSJL{u^gU6p5>uLA2Mf0?D6s}#!mVIu4H;3PpayWnaVOx zIEm2&vLtoXCMP-^6U)j~YRAb0Fq1K-CCVsLtM|P4e7I^Nl#GkvJXjY^>j19XTZ}fEO+=9=cppOhL^O1)x z6_<3mkBYg>!xx}r^v2y!9=ds`;_&0!4{g8W@B`Z`4)1$fU3ToOIP9=kiCC`~yabf@BRKQGUu4rlRY+Z)k ztWPV*sWLD5`4W@cBfyx>}<> z$cci-u=(uL687R_hT8n-7e~)4O+)_15BpcR88pQnlv|zv2S&HvHZawWE%6-WfcHLCCpq^Ryyx4Gq4cV3Q28XaKbtr9Evu%z|O^;n&wmFm=9JcMqT=MV@?F`o;}(aJ)kb)U%E zWQej1eh7Jv8tP;P)*p^`M^eF2JBjo1$WQa)jL{D66eKE9`yFQ)nFWIsqP{?CQfN!w ziDnNv`CInPqqnOw&qk5RT9a+@4P#q;?ux*| zF{hb_SeBM8qTWm#uw^};$<$=Ak&}s^5HAv@B$%J7ftN3JgO&?=WQ^Y)BT>qky4mqq znVFq&;ms_b&w%6TjHTk;At8XUCl|{NXVR&;V(>UrZHvX%>jUrgJ(2@#j>R|D;Y>Fk ziiyL*MlOBijd{uz#bQYW?LePS8xrG-_?upSj=yE_w{f1$&m%r4Poh{1M>oYbhNJ|8 zlWIx-1Ifh!IVnUrVW$(Z)<8}4qChl=L(Q3OvDn5`UxOCMXwTxDLBFWt)#%~QV^}Mx zb(a0Cxtju!NGDDM8a(_0D*Y@w60GifUj9D+z~C26{vrPe+03ZbwJFmC2Z5gS+Q#)d zpT7CuUul;7a>bC^;46d;j_!|M_+@aekpCgGI@kQ zUxq)r7UN!#w%?lkG!K>W5E?qlxD#U!OZyupKgEM(ybbMtkcK~+Jj|a%_n+nIFD4)4 zLG=Aip8js~0Z=I7f6CLpOdjAtq$aKS^dhb{BB6xAD4^*>?9tfB29?1_;8aJcG7Eo5 zQ#1l;Itpw*KzS`nMdXu165RLU3l0}wjc1%k*w1l14_%&6&lMc{?!l%gJRp2|dv&-!(AE0TS2WZxQ zVwt(%DXKm|wfE9g>uKHrI%jo1m9!00Ls#`6oj)QS2dJ^?AhigOtu8u9%jB-pMQB_t zx0ku7pGxu06;dO7S}z_4YX!QH3#c(N=?V z{924W3-#N1bQzsZJ#;?ay9jSCrWnrKw^FMTMFkaLY%#x&-wy%B@O_QG!)mp7_*&36 z$$gDM^NYjy@$z+OfjIekT$w+>mYiG#pasFx!K&&3>KUM`mJU<2t7eG$mT|lexc%RU*9{XuJT6Q~H@VLh@ z-hFPN5PYz9fchsD?yc8P{bbe``3wC;1N4Z$aHQTX-O`9|f1xzGN5I&lUB1r@(&HoG ze>!cU?Kr5qfo`VTaGgx=qg}Xe$FE%P2S7i8YcX9<5#X)AB(6A5@<(n2i|-a zs4a(fI-!vjbS}>GTWA$@d@1zNMJc)*bFBrP%R!|BRMrBp?^b$Q2nkQ8t-PH-NN!Nt z$v5zaAm4qKh6+T^Hh>TE4!#lkE2hW!CPAyxT7rt-rqu?S21O0pT;6Wb!$&Zt$RL+N z<#q>}3AN*gJx2gDx3g0aBuyM1tA=eJ@?nT=R(AX18 z@iW+7RWm>bcTr)%UeP3A^0W)bpe4if#V+5M2k99xmD|w#RTmD+%IgcOL|+1{dbi-p z?@j}&zDSVeFA``OenW=6*KYt@LZH@PXyZw!eceT?{e?imbMA9JGU`FWM*k$w-g^Bg z;3)Qc{KWze&j=_=zqF#??~ztxM5cVc%lE<{eNQlRCEaRaV-GzDX|AL@p{a+_wohH3 z0R9i+xrOebXMmMm_?4^1%yN7zMihjj3qeLbcv=tLZ-6~t1zV2bttcqQFiRhLu0~4& z_L~G|QgjoJU~dJA?!k2z#yx}kXMr1WbC*NcS5k+L1{cKevjZr`Vv{dpc{Zve9&0<$~7?2TadrvHFh z{xIKpBFy%T$!w2i_Lq5>y$#IX4rcEFvmXYtANfz1{Rm?-p%RHbfPwhdmSK9iYmk1k zv_>E>M89RkVrJq%7&_H4l=&>RY_1yhAC}EpN3%eBK3O|+0J7SkY2=;AUFA zr=JSzi-&nuS52+t7XBg$7lS-|AG9|M=$y-^lba=Jt5UR|glE`~y8)yOgUCq_U|~Zv z1A$@|J}IfDr|1kCQ417D4qj~OH(TMp5C<3HF~n8Zs~olfw9e-H5E9&=IG69|2QbT2 zn!~$sR|M)a_+xm(z#P+9GHs8IFxA3)&?5e44!MpXm(=bWPTX(s#|^sC;0NVTJpM=F zPx*8^Yt|9}liY8a{S{ETfPRAIGPReisU6^|$I3w>7HEFRcJt-!{`I&{8c1$NBb(=LIBFMt>duejk{6Nyue#(t2Jxe7SLSo~0 zAK)`r<1N`hNNkaG1-HAc%%z|Fc#`;Jb=+rlxRLM<^Et5b^9FhT2q4#h>|m3fW9WUt zb2JVg<&3B2@s;-r*cE&qqh6#&`XM6xkC1`BMDM1bP?&y-?BeHm`xnS2eyJpL5g-F+ zr9kFF>o~PfkkGcxmew{MzCd@GHEtZfK-|lZLNE>Z!dEg=w*uGcRQMKH;3I&mPB;Z# z*r2^hmB<<`f*3Rt} znntg}#9nh~y~bWgjkS(xRKlOh@*lcoA2_l6oes?S0L)_UN-!rFt+2EN4D3>yQafod z-2LP(*lRPS_oZ(rM)bb4!e*qxkq;D6!IXjvZEMp~dEB0Oqc!npshsbW$`B(Q?4tZk z{L#V0C}}9Y6_Tqemxm|pKz}RrEQ?=~S^T}Dp?<7DuL9LV2~@U>w9@{HDE~J^_=i9=SSb0_{RT%^X2lgs;@shm8dQ@J~Z%iYdidC2tYaGH+?s5#BytanD7A>!oxsI2u zR~)4Bv4#4XMd}hrT;fGZHGDC54DkxM-dxTeQ{;5kR$_BjqS6czV~OI?1<|2WXA$nQ z);mSgglA}?T&k=MMt(zl)WP%=6?jCJQ}p`NhIq<_46&k6Xiam!WqlV*qVfc<))f_J zg+xI*x1use$tB}8HHH?#hAtpKT?o&)2s^x}MsoK?y-}m&y2)>`zgk!T;9TP3cWBM&gqM-E0p_zloK| zn}sq4H!x`AWxxiC%@#HqEeMuW5AjtvN9E=L-k58_^Bk&lVq3yC&dB+zkb;Y!f#>h=cOkKt_{aP+b@y}r1;4EBe$Bt(SFN_!_;qXCA^x4!`+KYR bCH|A$_E)>@A87kG=J8^VH~DQu82|qQ4A2mD literal 12760 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 G$^U;nvmubuvw9zS7uXgyYeK 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class index b850eea6043fbec71168c44b05c771bab7e199c3..d4ee8b2e658da95e9f44a20563fa3986b3bca7fd 100644 GIT binary patch literal 11524 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 NVBCBBK7UBz{|7C@+7ti) literal 11330 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.class deleted file mode 100644 index 0831db3d166c4609394dc8ff52f1ee530908d151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3638 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/ChannelService.class index 7e3706f440de1af74134bab5568109873402a789..98b9dc5b6dcd32fb144463d59623b6bdc40ba34e 100644 GIT binary patch delta 476 zcmcb^_Kt(=)W2Q(7#J9A8B`{6&0wwzMkP?#AjACS9DXA<-Wn|z>E=o-- zNewMdE%Hmu-FQKgk;zPB;(Mjc(1H}8xN}BgUS4XBOG&;pNE264YGG+=aS4#m$iSA8 znv+@rG=meuaLmbJWDwQx$x19s)Xz!GOV3z1Cm&>#ov2$niCKN(Z7vR$w9LE|Mh4f(jLgE5 z1sQ*vu;=Hb_$B71GBU8|rItfjY$>TZsU<)m;mo|U%#zfAqRg_ylGNbTqO#N?Mh0`B zX4T1inY1T6G3zjLOwMOksOMy2;0D^t!N9=6$iTzE%K$VF$Y*7Q3h^=UGcdt~1b{Mv zK+MD-1XL}ITS|n13u+M1d{LkdF|hgK3~XrTD>FziNJ7PUnHi*jNneG_)3kPt+Y6`$TMX!A7jAebjA-{oGGa}Kw}(pawdl|Ew5)~WZ+<6U}0q7 zWZ+_8WMBuniRnHU6tx`Y^n5mF*>DN&%57=t*} kKu#u@fk0si21%$e&@d@^um#c#G6*qQpec+Da$qau0o6+~kN^Mx delta 344 zcmbQjK98O2)W2Q(7#J9A85AdSMb%qs_+%xPCFi%E7M6kvD+5iF28+os$U?<{LUKT*j12N%D-;0p9X~4o diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/service/UserService.class index c09a92f6f2fc87f766989340619d077721e9c6f1..da9a039490d89b25e32ccafafbedf3c686137140 100644 GIT binary patch delta 115 zcmeBR|If;G>ff$?3=9mm46+-!)EOr}RS^g+NJ%V74J}SBaw*BT){NSGi!p@Jjg^ss ypMimekwJ(-n1PXj9jFH=!~qr(VGsohi2;R}7{q}}Bp4(SN~D0oj11CXNf`k1&k-O1 delta 199 zcmey*+QBYx>ff$?3=9mm3`*<_OpFW$lRq-bZq#LAWXzqoP1Z4s6>`Q Q4xvOID9p&90G3n)04XUY0RR91 diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index a0a62d3243cff68584635b45cd6a56b72e64f10b..f95a05c8fe25b7909ee438cb45510634ce101d9a 100644 GIT binary patch literal 31526 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νq;!I{kMp<=&c3)i1tuzK}wwfYa@Lv|nCXt+BK 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 literal 29624 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 { + System.out.println("채널명 : " + channel.channelName()); + }); + } catch (Exception e) { + System.err.println("[ERROR] " + e); + } System.out.println("초대하고자 하는 채널명을 입력해주세요."); String channelName = scanner.nextLine().trim(); @@ -202,6 +224,14 @@ private void invite() { UUID userId = userService.userNameToId(userName); - channelService.invitePrivateServer(channelName, userName, userId); + channelService.includePrivateChannel(channelName, userName, userId); + + System.out.println("성공"); + } + + private void accessTimeUpdate() { + String userName = userState.getUserName(); + UUID userId = userState.getUserId(); + userStatusService.update(new UserStatusUpdateDto(userId, userName, Instant.now())); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java index 38519de6..ef8c42c3 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java @@ -1,15 +1,21 @@ package com.sprint.mission.discodeit.app.router; import com.sprint.mission.discodeit.UserState; -import com.sprint.mission.discodeit.dto.BinaryContentDto; +import com.sprint.mission.discodeit.dto.CreateBinaryContentDto; +import com.sprint.mission.discodeit.dto.CreateMessageDto; +import com.sprint.mission.discodeit.dto.UserStatusUpdateDto; import com.sprint.mission.discodeit.entity.AttachmentType; +import com.sprint.mission.discodeit.exepction.FailedFound; import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.service.ChannelService; +import com.sprint.mission.discodeit.service.basic.BasicBinaryContentService; import com.sprint.mission.discodeit.service.basic.BasicMessageService; import com.sprint.mission.discodeit.service.basic.BasicReadStatusService; +import com.sprint.mission.discodeit.service.basic.BasicUserStatusService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import java.time.Instant; import java.util.*; @Component @@ -21,6 +27,8 @@ public class RouteMessage { private final UserState userState; private final ChannelService channelService; private final BasicReadStatusService readStatusService; + private final BasicUserStatusService userStatusService; + private final BasicBinaryContentService binaryContentService; public void route(int routeCRUD) { if(!isLogin.check("message", routeCRUD)) { @@ -28,31 +36,37 @@ public void route(int routeCRUD) { return; } - switch (routeCRUD) { - case 1: - /// create - create(); - break; - case 2: - /// update - messageService.findAllForSender(userState.getUserId()); - update(); - break; - case 3: - /// read - read(); - break; - case 4: - /// delete - delete(); - break; - default: - return; + try { + switch (routeCRUD) { + case 1: + /// create + create(); + break; + case 2: + /// update + messageService.findAllForSender(userState.getUserId()).forEach(System.out::println); + update(); + break; + case 3: + /// read + read(); + break; + case 4: + /// delete + delete(); + break; + } + } catch (Exception e) { + System.err.println("[ERROR] " + e); } } private void create() { String senderUserName = userState.getUserName(); + + System.out.println("당신이 메시지를 보낼 수 있는 채널은 다음과 같습니다."); + channelService.findAll(senderUserName).forEach(System.out::println); + System.out.println("현재 사용자 : " + senderUserName); System.out.println("어디로 보내는 메시지인가요?"); String sendeeChannelName = scanner.nextLine(); @@ -64,7 +78,7 @@ private void create() { System.out.println("무어라 보내고 싶으신가요?"); String text = scanner.nextLine(); - List attatchmentList = attatchment(); + List binaryContents = binaryContent(); System.out.println("현재 채널에 '" + text + "'라고 보내려 합니다."); System.out.println("보내시려면 1을, 아니라면 0을 입력해주세요"); @@ -74,8 +88,9 @@ private void create() { System.out.println("처음으로 돌아갑니다."); return; } else if (Objects.equals(n, "1")) { - if(messageService.create(text, sendeeChannelName, senderUserName, attatchmentList)) { + if(messageService.create(new CreateMessageDto(text, sendeeChannelName, senderUserName, binaryContents))) { System.out.println("성공."); + accessTimeUpdate(); } else { System.err.println("알 수 없는 오류로 인해 실패했습니다."); } @@ -86,10 +101,11 @@ private void create() { } } - private List attatchment() { + private List binaryContent() { System.out.println("추가할 파일을 입력해주세요."); System.out.println("마무리됐을 경우, 그냥 엔터를 입력해주세요."); - List result = new ArrayList<>(); + List result = new ArrayList<>(); + while(true) { String filename = scanner.nextLine(); if(filename.trim().isEmpty()) return result; @@ -98,7 +114,9 @@ private List attatchment() { continue; } - result.add(new BinaryContentDto(AttachmentType.MESSAGE, null, filename)); + UUID id = binaryContentService.create(new CreateBinaryContentDto(AttachmentType.MESSAGE, filename, null)); + + result.add(id); } } @@ -118,13 +136,14 @@ private void update() { String content = scanner.nextLine(); try { - if (messageService.update(parseUUID, content)) { + if (messageService.update(userState.getUserId(), parseUUID, content)) { System.out.println("성공적으로 변경되었습니다."); + accessTimeUpdate(); } else { System.err.println("알 수 없는 오류로 인해 변경하지 못했습니다."); } - } catch (NotFound e) { - System.err.println(e); + } catch (FailedFound e) { + System.err.println("[ERROR] " + e); } } @@ -135,10 +154,12 @@ private void read() { int m = scanner.nextInt(); scanner.nextLine(); + UUID userId = userState.getUserId(); List requestDto; if (m == 1) { - requestDto = messageService.findAllForSender(userState.getUserId()); + requestDto = messageService.findAllForSender(userId); + accessTimeUpdate(); } else if (m == 2) { System.out.println("어디로 보낸 메시지인가요?"); String sendeeChannelName = scanner.nextLine(); @@ -146,8 +167,10 @@ private void read() { System.out.println("존재하지 않는 채널입니다."); return; } - readStatusService.update(userState.getUserId(), sendeeChannelName); + readStatusService.update(userId, sendeeChannelName); requestDto = messageService.findAllInChannel(sendeeChannelName); + accessTimeUpdate(); + readStatusService.update(userId, sendeeChannelName); } else return; showMessage(requestDto); @@ -168,7 +191,7 @@ private void delete() { System.out.println("현재는 내가 보낸 메시지를 삭제하는 기능만 지원하고 있습니다."); System.out.println("당신이 보낸 메시지는 다음과 같습니다."); - messageService.findAllForSender(userId); + messageService.findAllForSender(userId).forEach(System.out::println); System.out.println("어떤 메시지를 삭제하고 싶나요? ID로 입력해주세요."); String id = scanner.nextLine(); @@ -192,7 +215,14 @@ private void delete() { if (isDelete.equalsIgnoreCase("Y")) { if(messageService.delete(userId, UUID.fromString(id))) { System.out.println("성공!"); + accessTimeUpdate(); } else System.err.println("실패!"); } else System.out.println("초기로 돌아갑니다"); } + + private void accessTimeUpdate() { + String userName = userState.getUserName(); + UUID userId = userState.getUserId(); + userStatusService.update(new UserStatusUpdateDto(userId, userName, Instant.now())); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java index af2042e4..bfc837ed 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java @@ -2,29 +2,32 @@ import com.sprint.mission.discodeit.Input; import com.sprint.mission.discodeit.UserState; -import com.sprint.mission.discodeit.dto.CreateUserDto; -import com.sprint.mission.discodeit.dto.UserFinder; +import com.sprint.mission.discodeit.dto.*; import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.exepction.NotFound; -import com.sprint.mission.discodeit.service.basic.BasicBinaryContentService; -import com.sprint.mission.discodeit.service.basic.BasicMessageService; -import com.sprint.mission.discodeit.service.basic.BasicUserService; +import com.sprint.mission.discodeit.service.ReadStatusService; +import com.sprint.mission.discodeit.service.basic.*; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import java.time.Instant; import java.util.List; import java.util.Scanner; +import java.util.UUID; @Component @RequiredArgsConstructor public class RouteUser { private final BasicUserService userService; private final BasicMessageService messageService; + private final BasicChannelService channelService; + private final BasicUserStatusService userStatusService; private final BasicBinaryContentService binaryContentService; private final Scanner scanner; private final IsLogin isLogin; private final Input input; private final UserState userState; + private final ReadStatusService readStatusService; public void route(int routeCRUD) { int menu; @@ -61,9 +64,6 @@ public void route(int routeCRUD) { case 4: delete(); break; - - default: - return; } } @@ -83,9 +83,17 @@ private void create() { System.out.print("사용할 프로필 이미지를 입력해주세요 : "); String profileImage = scanner.nextLine(); - if(userService.create(new CreateUserDto(name, password, profileImage))) { + try { + UUID profileId = !profileImage.isEmpty() ? + binaryContentService.create(new CreateBinaryContentDto(AttachmentType.USER, profileImage, null)) : null; + + userService.create(new CreateUserDto(name, password, profileId)); + UUID id = userService.userNameToId(name); + userStatusService.create(new CreateUserStatusDto(name, id)); System.out.println("성공적으로 추가했습니다."); - } else System.err.println("알 수 없는 오류로 실패했습니다."); + } catch (Exception e) { + System.err.println("[ERROR] " + e); + } } private void update() { @@ -116,9 +124,16 @@ private void update() { if(finalCheckIsContinue.equalsIgnoreCase("re")) continue; if(finalCheckIsContinue.equalsIgnoreCase("n")) return; - if(finalCheckIsContinue.equalsIgnoreCase("y") && userService.update(userState.getUserId(), reName, rePassword, reMail, rePhoneNumber, reProfile)) { - System.out.println("성공적으로 변경되었습니다."); - return; + if(finalCheckIsContinue.equalsIgnoreCase("y")) { + UUID reProfileId = !reProfile.isEmpty() ? + binaryContentService.create(new CreateBinaryContentDto(AttachmentType.USER, reProfile, null)) : null; + if(reProfileId != null) binaryContentService.delete(reProfileId); + + if(userService.update(new UpdateUserDto(userState.getUserId(), reName, rePassword, reMail, rePhoneNumber, reProfileId))) { + System.out.println("성공적으로 변경되었습니다."); + accessTimeUpdate(); + return; + } } System.err.println("알 수 없는 오류로 인해 실패했습니다."); @@ -132,14 +147,17 @@ private void find() { try { UserFinder requestDto = userService.find(name); - String profile = binaryContentService.find(AttachmentType.USER, requestDto.id()).get(0); + String profile = binaryContentService.find(requestDto.profileId()); System.out.println(requestDto.userInfo()); System.out.println("프로필 이미지 : " + profile); + System.out.println("접속상태 : " + userStatusService.find(new FindUserStatusDto(requestDto.id(), requestDto.name()))); System.out.println("===================="); } catch (NotFound e) { System.err.println("[ERROR]" + e); } + + accessTimeUpdate(); } private void findAll() { @@ -151,15 +169,19 @@ private void findAll() { findAllUser.forEach(requestDto -> { try { - String profile = binaryContentService.find(AttachmentType.USER, requestDto.id()).get(0); + String profile = binaryContentService.find(requestDto.profileId()); System.out.println(requestDto.userInfo()); System.out.println("프로필 이미지 : " + profile); } catch (Exception ignore) { System.out.println(requestDto.userInfo()); } + + System.out.println("접속상태 : " + userStatusService.find(new FindUserStatusDto(requestDto.id(), requestDto.name()))); System.out.println("===================="); }); System.out.println("총 사용자 : " + findAllUser.size()); + + accessTimeUpdate(); } private void delete() { @@ -177,15 +199,40 @@ private void delete() { System.out.println("현재 로그인한 사용자의 비밀번호를 입력해주세요."); String password = scanner.nextLine(); - if(userService.isValid(userState.getUserId(), password)) { + UUID userId = userState.getUserId(); + String userName = userState.getUserName(); + List allPrivateChannelDto = channelService.findAllPrivateChannel(userName); + + if(userService.isValid(userId, password)) { System.err.println("비밀번호가 일치하지 않습니다. 처음으로 돌아갑니다."); return; } - if(userService.delete(userState.getUserId())) { - messageService.deleteAll(userState.getUserId()); + UUID profileId = userService.find(userName).profileId(); + + if(userService.delete(userId)) { // FIXME: BinaryContent, 채널 삭제로 인한 타인의 메시지 삭제 + messageService.deleteAll(userId); + userStatusService.delete(new DeleteUserStatusDto(userId, userName)); + readStatusService.deleteForUser(userId); + binaryContentService.delete(profileId); + if(!allPrivateChannelDto.isEmpty()) + allPrivateChannelDto.forEach(req -> { + channelService.excludePrivateChannel(req.channelName(), userName); + }); + if(channelService.isCeatePrivateChannel(userName)) { + channelService.deleteAll(userName); + messageService.deleteAll(channelService.findChannelId(userName)); + } userState.userState(""); System.out.println("성공적으로 삭제되었습니다."); } } + + private void accessTimeUpdate() { + if(userState.getUserName().isEmpty()) return; + + String userName = userState.getUserName(); + UUID userId = userState.getUserId(); + userStatusService.update(new UserStatusUpdateDto(userId, userName, Instant.now())); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateBinaryContentDto.java similarity index 56% rename from discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java rename to discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateBinaryContentDto.java index 27c386c3..688ed6c8 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/BinaryContentDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateBinaryContentDto.java @@ -4,5 +4,7 @@ import java.util.UUID; -public record BinaryContentDto(AttachmentType type, UUID id, String filename) { +public record CreateBinaryContentDto( + AttachmentType type, String filename, byte[] bytes +) { } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateMessageDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateMessageDto.java index 1098bddc..0a4987b2 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateMessageDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateMessageDto.java @@ -1,14 +1,12 @@ package com.sprint.mission.discodeit.dto; -import com.sprint.mission.discodeit.entity.BinaryContent; - import java.util.List; import java.util.UUID; public record CreateMessageDto( - UUID userID, - UUID channelId, - String content, - List binaryContents + String text, + String sendeeChannelName, + String senderUserName, + List binaryContentIds ) { } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java index 1db8732e..dfb6fe88 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserDto.java @@ -1,31 +1,16 @@ package com.sprint.mission.discodeit.dto; -import com.sprint.mission.discodeit.entity.AttachmentType; -import com.sprint.mission.discodeit.entity.BinaryContent; import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.entity.UserStatus; -import java.util.List; import java.util.UUID; public record CreateUserDto( String username, String password, - String profileImage + UUID profileId ) { - public List toEntity() { - User user = new User(username, password); - BinaryContent binaryContent; + public User toEntity() { - if(!profileImage.isEmpty()) { - binaryContent = binaryContent(user.getId(), profileImage); - user.setProfileId(binaryContent.getId()); - } - - return List.of(user,new UserStatus(user.getId())); - } - - private BinaryContent binaryContent(UUID id, String profileImage) { - return new BinaryContent(AttachmentType.USER, id, profileImage); + return new User(username, password, profileId); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserStatusDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserStatusDto.java new file mode 100644 index 00000000..81f03d38 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateUserStatusDto.java @@ -0,0 +1,6 @@ +package com.sprint.mission.discodeit.dto; + +import java.util.UUID; + +public record CreateUserStatusDto(String name, UUID id) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/DeleteUserStatusDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/DeleteUserStatusDto.java new file mode 100644 index 00000000..82230a8b --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/DeleteUserStatusDto.java @@ -0,0 +1,6 @@ +package com.sprint.mission.discodeit.dto; + +import java.util.UUID; + +public record DeleteUserStatusDto(UUID id, String name) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindUserStatusDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindUserStatusDto.java new file mode 100644 index 00000000..c60224c1 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/FindUserStatusDto.java @@ -0,0 +1,6 @@ +package com.sprint.mission.discodeit.dto; + +import java.util.UUID; + +public record FindUserStatusDto(UUID id, String name) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageResponseDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageRequestDto.java similarity index 69% rename from discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageResponseDto.java rename to discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageRequestDto.java index 1181aaed..f31190c7 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageResponseDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/MessageRequestDto.java @@ -1,11 +1,13 @@ package com.sprint.mission.discodeit.dto; +import java.util.List; import java.util.UUID; -public record MessageResponseDto( +public record MessageRequestDto( UUID id, UUID channelId, UUID userId, + List attachmentIds, String createAt, String updateAt, String content diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UpdateChannelDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UpdateChannelDto.java new file mode 100644 index 00000000..73bb3873 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UpdateChannelDto.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.dto; + +public record UpdateChannelDto(String oldName, String newName) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UpdateUserDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UpdateUserDto.java new file mode 100644 index 00000000..b27336d9 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UpdateUserDto.java @@ -0,0 +1,8 @@ +package com.sprint.mission.discodeit.dto; + +import java.util.UUID; + +public record UpdateUserDto( + UUID id, String reName, String rePassword, String reMail, String rePhoneNumber, UUID reProfileId +) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java index 908bc50a..bece17c7 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java @@ -4,5 +4,5 @@ import java.util.UUID; -public record UserFinder(UUID id, String name, String userInfo, UserStatus userStatus) { +public record UserFinder(UUID id, String name, String userInfo, UUID profileId) { } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserStatusUpdateDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserStatusUpdateDto.java new file mode 100644 index 00000000..6668ca85 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserStatusUpdateDto.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.dto; + +import java.time.Instant; +import java.util.UUID; + +public record UserStatusUpdateDto(UUID id, String name, Instant time) { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java index b229d9ed..5c042c20 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java @@ -2,26 +2,26 @@ import lombok.Getter; -import java.io.Serial; import java.io.Serializable; import java.time.Instant; import java.util.UUID; @Getter public class BinaryContent implements Serializable { - private final UUID id = UUID.randomUUID(); - private final UUID relationId; - private final AttachmentType type; + private final UUID id; private final Instant createAt; private final String fileName; private final String fileExtension; + private final AttachmentType type; + private final byte[] bytes; - public BinaryContent(AttachmentType type, UUID relationId,String fileName) { + public BinaryContent(AttachmentType type, String fileName, byte[] bytes) { + this.id = UUID.randomUUID(); this.createAt = Instant.now(); this.fileName = fileName.split("\\.")[0]; this.fileExtension = fileName.split("\\.")[1]; + this.bytes = bytes; this.type = type; - this.relationId = relationId; } @Override diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index 0e73ccdf..bf1798e2 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -5,12 +5,9 @@ import java.io.Serial; import java.io.Serializable; import java.time.Instant; -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; @Getter public class Channel implements Serializable { @@ -19,7 +16,7 @@ public class Channel implements Serializable { private final UUID id; private final Instant createAt; private final String createUser; - private final Map accessableUser = new ConcurrentHashMap<>(); + private final Map accessibleUser = new ConcurrentHashMap<>(); private final Map userReadStatusMap = new ConcurrentHashMap<>(); private final ChannelType channelType; private String name; @@ -37,7 +34,7 @@ public Channel(String name, String createUser, UUID createUserId, ChannelType ch this.channelType = channelType; this.createAt = now; this.updateAt = now; - accessableUser.put(createUser, createUserId); + accessibleUser.put(createUser, createUserId); } /// setter @@ -54,11 +51,11 @@ public void channelUpdater(String name) { setName(name); } - public void addAccessUser(String userName, UUID userId) { - accessableUser.put(userName, userId); + public void addAccessibleUser(String userName, UUID userId) { + accessibleUser.put(userName, userId); } - public void removeAccessUser(String userName) { - accessableUser.remove(userName); + public void removeAccessibleUser(String userName) { + accessibleUser.remove(userName); } } \ No newline at end of file diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java index 8902cbf8..82b894c1 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -5,6 +5,7 @@ import java.io.Serial; import java.io.Serializable; import java.time.Instant; +import java.util.List; import java.util.UUID; @Getter @@ -13,12 +14,13 @@ public class Message implements Serializable { private final Instant createAt; private final UUID channelId; private final UUID userId; + private final List attachmentIds; private Instant updateAt; private String content; @Serial private static final long serialVersionUID = 1L; - public Message(UUID channelId, UUID userId, String content) { + public Message(UUID channelId, UUID userId, String content, List attachmentIds) { Instant n = Instant.now(); this.id = UUID.randomUUID(); this.channelId = channelId; @@ -26,6 +28,7 @@ public Message(UUID channelId, UUID userId, String content) { this.content = content; this.createAt = n; this.updateAt = n; + this.attachmentIds = attachmentIds; } public UUID getSenderUserId() { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java index 74af6d1b..f11fb23f 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java @@ -11,15 +11,18 @@ public class ReadStatus implements Serializable { private final UUID id = UUID.randomUUID(); private final UUID userId; private final UUID channelId; - private Instant lastReadAt; + private final Instant createAt; + private Instant updateAt; public ReadStatus(UUID userId, UUID channelId){ + Instant now = Instant.now(); this.userId = userId; this.channelId = channelId; - lastReadAt = Instant.now(); + createAt = now; + updateAt = now; }; public void updateReadAt() { - lastReadAt = Instant.now(); + updateAt = Instant.now(); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java index e00f237d..1aaacaa6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -3,10 +3,10 @@ import lombok.Getter; import java.io.Serial; +import java.io.Serializable; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import java.io.Serializable; import java.util.UUID; @Getter @@ -24,8 +24,9 @@ public class User implements Serializable { @Serial private static final long serialVersionUID = 1L; - public User(String name, String password) { + public User(String name, String password, UUID profileId) { Instant now = Instant.now(); + this.profileId = profileId; this.id = UUID.randomUUID(); this.name = name; this.password = password; @@ -33,21 +34,21 @@ public User(String name, String password) { this.updateAt = now; } - public void setProfileId(UUID profileId) { - this.profileId = profileId; - } - private void setUpdateAt() { this.updateAt = Instant.now(); } - public void updateUser(String name, String password, String email, String phoneNumber) { + public void updateUser(String name, String password, String email, String phoneNumber, UUID profileId) { /// null checker - boolean[] argumentsList = {check(name), check(password), check(email), check(phoneNumber)}; + boolean[] argumentsList = { + check(name), check(password), check(email), check(phoneNumber), check(String.valueOf(profileId)) + }; if(argumentsList[0]) setName(name); if(argumentsList[1]) setPassword(password); if(argumentsList[2]) setEmail(email); if(argumentsList[3]) setPhoneNumber(phoneNumber); + if(argumentsList[4]) setProfileId(profileId); + setUpdateAt(); } private boolean check(String text) { @@ -56,22 +57,22 @@ private boolean check(String text) { private void setName(String name) { this.name = name; - setUpdateAt(); } private void setPassword(String password) { this.password = password; - setUpdateAt(); } private void setEmail(String email) { this.email = email; - setUpdateAt(); } private void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; - setUpdateAt(); + } + + private void setProfileId(UUID profileId) { + this.profileId = profileId; } @Override diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java b/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java index 44036d9d..dc693d5e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java @@ -9,23 +9,32 @@ @Getter public class UserStatus implements Serializable { - private final UUID id = UUID.randomUUID(); + private final UUID id; private final UUID userId; - private Instant lastAccessTime; + private final String userName; + private final Instant createAt; + private Instant updateAt; - public UserStatus(UUID userId) { + public UserStatus(UUID userId, String userName) { + this.id = UUID.randomUUID(); + Instant now = Instant.now(); this.userId = userId; - lastAccessTime = Instant.now(); + this.userName = userName; + updateAt = now; + createAt = now; } public void lastAccessTimeUpdater() { - lastAccessTime = Instant.now(); + updateAt = Instant.now(); } - @Override - public String toString() { + public void lastAccessTimeUpdater(Instant time) { + updateAt = time; + } + + public String isOnline() { try { - Duration duration = Duration.between(this.getLastAccessTime(), Instant.now()); + Duration duration = Duration.between(this.getUpdateAt(), Instant.now()); if(duration.toMinutes() > 5) return "오프라인"; return "온라인"; } catch (Exception ignore) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/exepction/DoNotDuplicate.java b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/DoNotDuplicate.java new file mode 100644 index 00000000..78392ce7 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/DoNotDuplicate.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.exepction; + +public class DoNotDuplicate extends RuntimeException { + public DoNotDuplicate(String message) { + super(message); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/exepction/DoNotUpdatePrivateChannel.java b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/DoNotUpdatePrivateChannel.java new file mode 100644 index 00000000..69a153b2 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/DoNotUpdatePrivateChannel.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.exepction; + +public class DoNotUpdatePrivateChannel extends RuntimeException { + public DoNotUpdatePrivateChannel(String message) { + super(message); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedCreate.java b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedCreate.java new file mode 100644 index 00000000..86f877b2 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedCreate.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.exepction; + +public class FailedCreate extends RuntimeException { + public FailedCreate(String message) { + super(message); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedDelete.java b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedDelete.java new file mode 100644 index 00000000..d1917239 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedDelete.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.exepction; + +public class FailedDelete extends RuntimeException { + public FailedDelete(String message) { + super(message); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedFound.java b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedFound.java new file mode 100644 index 00000000..acca7e0a --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedFound.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.exepction; + +public class FailedFound extends RuntimeException { + public FailedFound(String message) { + super(message); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedInit.java b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedInit.java new file mode 100644 index 00000000..98d5fbab --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedInit.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.exepction; + +public class FailedInit extends RuntimeException { + public FailedInit(String message) { + super(message); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedUpdate.java b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedUpdate.java new file mode 100644 index 00000000..89142438 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/exepction/FailedUpdate.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.exepction; + +public class FailedUpdate extends RuntimeException { + public FailedUpdate(String message) { + super(message); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java index f2779a7a..8ec877b0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java @@ -1,14 +1,19 @@ package com.sprint.mission.discodeit.repository; +import com.sprint.mission.discodeit.dto.CreateBinaryContentDto; import com.sprint.mission.discodeit.entity.AttachmentType; import java.util.List; import java.util.UUID; public interface BinaryContentRepository { - boolean create(AttachmentType type, UUID id, String file); + UUID create(CreateBinaryContentDto requestDto); - List find(AttachmentType type, UUID id); + String find(UUID id); - boolean delete(AttachmentType type, UUID id); + List findAllByIdIn(List ids); + + boolean delete(UUID id); + + void delete(List ids); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java index deaa611c..4d4ecf74 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -1,18 +1,19 @@ package com.sprint.mission.discodeit.repository; import com.sprint.mission.discodeit.dto.ResponseChannelDto; +import com.sprint.mission.discodeit.dto.UpdateChannelDto; import com.sprint.mission.discodeit.entity.Channel; import java.util.List; public interface ChannelRepository { boolean save(Channel channel); - boolean save(String oldName, String newName); + boolean save(UpdateChannelDto requestDto); String readChannel(String name); List readAllChannel(String userName); - List readAllPrivateChannel(String userName); + List findAllPrivateChannel(String userName); boolean deleteChannel(String name); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java index 88a9c2cc..f4f4bcab 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -1,20 +1,20 @@ package com.sprint.mission.discodeit.repository; -import com.sprint.mission.discodeit.dto.MessageResponseDto; +import com.sprint.mission.discodeit.dto.MessageRequestDto; import java.util.List; import java.util.UUID; public interface MessageRepository { - String create(String content, UUID channelId, UUID userId); + UUID create(String content, UUID channelId, UUID userId, List attachmentIdList); - List findAllInChannel(UUID userId); + List findAllInChannel(UUID userId); - List findAllForSender(UUID userId); + List findAllForSender(UUID userId); boolean updateMessage(UUID id, String content); - boolean delete(UUID userId, UUID id); + UUID delete(UUID userId, UUID id); - void delete(UUID channelId); + List> deleteAll(UUID channelId); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index 0fcf0f68..be6e9eda 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -1,19 +1,20 @@ package com.sprint.mission.discodeit.repository; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UpdateUserDto; import com.sprint.mission.discodeit.dto.UserFinder; import java.util.List; import java.util.UUID; public interface UserRepository { - boolean createUser(CreateUserDto dto); + UUID create(CreateUserDto dto); - boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber); + boolean update(UpdateUserDto requestDto); UserFinder find(String name); List findAll(); - boolean deleteUser(UUID id); + boolean delete(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java index 17fc5549..308e42e6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java @@ -1,10 +1,14 @@ package com.sprint.mission.discodeit.repository.file; +import com.sprint.mission.discodeit.dto.CreateBinaryContentDto; import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.entity.BinaryContent; -import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.exepction.FailedCreate; +import com.sprint.mission.discodeit.exepction.FailedDelete; +import com.sprint.mission.discodeit.exepction.FailedInit; import com.sprint.mission.discodeit.repository.BinaryContentRepository; import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; import java.io.*; @@ -17,12 +21,10 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Repository public class FileBinaryContentRepository implements BinaryContentRepository { private final Map fileIdMap = new ConcurrentHashMap<>(); - private final Map> messageIdMap = new ConcurrentHashMap<>(); - private final Map userIdMap = new ConcurrentHashMap<>(); - private final Map channelIdMap = new ConcurrentHashMap<>(); private Path DIRECTORY; private final String EXTENSION = ".ser"; @@ -52,88 +54,64 @@ public void init() { throw new RuntimeException(e); } }).forEach(binaryContent -> { - switch (binaryContent.getType()){ - case USER -> userIdMap.put(binaryContent.getRelationId(), binaryContent); - case CHANNEL -> channelIdMap.put(binaryContent.getRelationId(), binaryContent); - case MESSAGE -> messageIdMap.computeIfAbsent(binaryContent.getId(), id -> new ArrayList<>()).add(binaryContent); - } + fileIdMap.put(binaryContent.getId(), binaryContent); }); } catch (Exception e) { - System.err.println("[ERROR] : " + e); + throw new FailedInit("FileBinaryContentRepository init failed"); } } @Override - public boolean create(AttachmentType type, UUID id, String file) { - BinaryContent binaryContent = new BinaryContent(type, id, file); - fileIdMap.put(binaryContent.getId(), binaryContent); - switch (type){ - case MESSAGE -> messageIdMap.computeIfAbsent(id, m -> new ArrayList<>()).add(binaryContent); - case CHANNEL -> channelIdMap.put(id, binaryContent); - case USER -> userIdMap.put(id, binaryContent); - } - + public UUID create(CreateBinaryContentDto requestDto) { + AttachmentType type = requestDto.type(); + String file = requestDto.filename(); + BinaryContent binaryContent = new BinaryContent(type, file, null); + Path path = resolvePath(binaryContent.getId()); - try(FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(binaryContent); } catch (IOException e) { - System.err.println("파일 생성에 실패했다 : " + e); - return false; + throw new FailedCreate("파일 생성에 실패했습니다."); } - return true; - } + fileIdMap.put(binaryContent.getId(), binaryContent); - @Override - public List find(AttachmentType type, UUID id){ - switch (type){ - case MESSAGE -> { - if(messageIdMap.containsKey(id)) - return messageIdMap.get(id).stream().map(BinaryContent::toString).toList(); - } - case CHANNEL -> { - if(channelIdMap.containsKey(id)) - return List.of(channelIdMap.get(id).toString()); - } - case USER -> { - if(userIdMap.containsKey(id)) - return List.of(userIdMap.get(id).toString()); - } - } - return List.of(); + return binaryContent.getId(); } @Override - public boolean delete(AttachmentType type, UUID id) { + public String find(UUID id) { try { - switch (type){ - case MESSAGE -> { - messageIdMap.remove(id).forEach(t -> { - delete(t.getId()); - }); - } - case CHANNEL -> { - delete(channelIdMap.remove(id).getId()); - } - case USER -> { - delete(userIdMap.remove(id).getId()); - } - } + return fileIdMap.get(id).toString(); } catch (Exception e) { - return false; + System.err.println("왠지 모르지만, 여기서 오류난다. " + e.getMessage()); + return null; } + } - return true; + @Override + public List findAllByIdIn(List ids) { + List result = new ArrayList<>(); + ids.forEach(id -> result.add(fileIdMap.get(id).toString())); + return result; } - private void delete(UUID id) { + @Override + public boolean delete(UUID id) { try { Path path = resolvePath(id); - Files.delete(path); + Files.deleteIfExists(path); } catch (IOException e) { - throw new RuntimeException(e); + throw new FailedDelete("IOException 발생"); } + + fileIdMap.remove(id); + return true; + } + + @Override + public void delete(List ids) { + ids.forEach(this::delete); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 8fd4fdb7..7b16fe37 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -1,9 +1,10 @@ package com.sprint.mission.discodeit.repository.file; import com.sprint.mission.discodeit.dto.ResponseChannelDto; +import com.sprint.mission.discodeit.dto.UpdateChannelDto; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.ChannelType; -import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.exepction.*; import com.sprint.mission.discodeit.repository.ChannelRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; @@ -67,16 +68,13 @@ public void init() { } }); } catch (IOException e) { - throw new RuntimeException(e); + throw new FailedInit("FileChannelRepository init failed"); } } /// interface @Override public boolean save(Channel channel) { - // 입력값: 현재 채널, 변경할 이름 - // TODO: 채널명 변경, 기존 키 삭제 및 추가 - Path path = resolvePath(channel.getId()); try(FileOutputStream fos = new FileOutputStream(path.toFile()); @@ -93,23 +91,19 @@ public boolean save(Channel channel) { return true; } catch (IOException e) { - System.err.println("[ERROR] " + e); + throw new FailedCreate("Channel save failed"); } - return false; } @Override - public boolean save(String oldName, String newName) { + public boolean save(UpdateChannelDto requestDto) { + String oldName = requestDto.oldName(); + String newName = requestDto.newName(); if(!isPresentChannel(oldName)) return false; - boolean isPrivate = privateChannelNameMap.containsKey(oldName); + if(privateChannelNameMap.containsKey(oldName)) + throw new DoNotUpdatePrivateChannel("Do not update private channel"); Path path; - Channel channel; - - if(isPrivate) { - channel = privateChannelNameMap.get(oldName); - } else { - channel = publicChannelNameMap.get(oldName); - } + Channel channel = publicChannelNameMap.get(oldName); path = resolvePath(channel.getId()); @@ -118,20 +112,13 @@ public boolean save(String oldName, String newName) { oos.writeObject(channel); oos.flush(); - if (!isPrivate) { - publicChannelNameMap.put(newName, channel); - publicChannelNameMap.remove(oldName); - } else { - privateChannelNameMap.put(newName, channel); - privateChannelNameMap.remove(oldName); - } - + publicChannelNameMap.put(newName, channel); + publicChannelNameMap.remove(oldName); channel.channelUpdater(newName); return true; } catch (IOException e) { - System.err.println("[ERROR] " + e); - return false; + throw new FailedUpdate("Channel update failed"); } } @@ -141,23 +128,23 @@ public String readChannel(String name) { return publicChannelNameMap.get(name).toString(); if(privateChannelNameMap.containsKey(name)) return privateChannelNameMap.get(name).toString(); - return ""; + throw new FailedFound("Channel not found"); } public ChannelType getChannelType(String name) { if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getChannelType(); if(privateChannelNameMap.containsKey(name)) return privateChannelNameMap.get(name).getChannelType(); - return null; + throw new FailedFound("ChannelType not found"); } - public UUID readChannelId(String name) { + public UUID getChannelId(String name) { if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getId(); if(privateChannelNameMap.containsKey(name)) return privateChannelNameMap.get(name).getId(); - throw new NotFound("해당 채널을 찾을 수 없습니다"); + throw new FailedFound("ChannelId not found"); } @Override @@ -168,22 +155,22 @@ public List readAllChannel(String userName) { result.addAll(publicChannelNameMap.values().stream().map(this::requestChannelInfo).toList()); /// private - result.addAll(accessAblePrivateChannel(userName).stream().toList()); + result.addAll(accessiblePrivateChannel(userName).stream().toList()); return result; } @Override - public List readAllPrivateChannel(String userName) { - if(accessAblePrivateChannel(userName).isEmpty()) + public List findAllPrivateChannel(String userName) { + if(accessiblePrivateChannel(userName).isEmpty()) throw new NotFound("권한이 있는 Private Channel이 없습니다!"); - return new ArrayList<>(accessAblePrivateChannel(userName).stream().toList()); + return new ArrayList<>(accessiblePrivateChannel(userName).stream().toList()); } - private List accessAblePrivateChannel(String userName) { + private List accessiblePrivateChannel(String userName) { List requestDto = new ArrayList<>(); privateChannelIdMap.values().stream() - .filter(channel -> channel.getAccessableUser() != null && channel.getAccessableUser().containsKey(userName)) + .filter(channel -> channel.getAccessibleUser() != null && channel.getAccessibleUser().containsKey(userName)) .forEach(channel -> requestDto.add(requestChannelInfo(channel))); return requestDto; @@ -198,36 +185,62 @@ private ResponseChannelDto requestChannelInfo(Channel channel) { String createUser = channel.getCreateUser(); Map accessableUser = null; try { - accessableUser = channel.getAccessableUser(); + accessableUser = channel.getAccessibleUser(); } catch (Exception ignore) {} return new ResponseChannelDto(name, id, type, createAt, updateAt, createUser, accessableUser); } - public void invitePrivateServer(String channelName, String userName, UUID userId) { - privateChannelNameMap.get(channelName).addAccessUser(userName, userId); + public void includePrivateChannel(String channelName, String userName, UUID userId) { + privateChannelNameMap.get(channelName).addAccessibleUser(userName, userId); + } + + public void excludePrivateChannel(String channelName, String userName) { + privateChannelNameMap.get(channelName).removeAccessibleUser(userName); } @Override public boolean deleteChannel(String name) { - UUID id = publicChannelNameMap.get(name).getId(); + UUID id; + boolean isPrivate = privateChannelNameMap.containsKey(name); + + if(isPrivate){ + id = privateChannelNameMap.get(name).getId(); + } else { + id = publicChannelNameMap.get(name).getId(); + } Path path = resolvePath(id); try { - Files.delete(path); - publicChannelNameMap.remove(name); - publicChannelIdMap.remove(id); + Files.deleteIfExists(path); + if(isPrivate){ + privateChannelNameMap.remove(name); + privateChannelIdMap.remove(id); + } else { + publicChannelNameMap.remove(name); + publicChannelIdMap.remove(id); + } return true; } catch (IOException e) { - return false; + throw new FailedDelete("Channel delete failed"); } } + public void deleteAllChannel(String name) { + List channels = privateChannelNameMap.values().stream().filter(channel -> channel.getCreateUser().equals(name)).toList(); + + channels.forEach(channel -> deleteChannel(channel.getName())); + } + /// public boolean isPresentChannel(String name) { return publicChannelNameMap.containsKey(name) || privateChannelNameMap.containsKey(name); } + public boolean isCeatePrivateChannel(String name) { + return !privateChannelNameMap.values().stream().filter(channel -> channel.getCreateUser().equals(name)).toList().isEmpty(); + } + public UUID channelNameToId(String name) { if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getId(); if(privateChannelNameMap.containsKey(name)) return privateChannelNameMap.get(name).getId(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 088dc72c..6b9f2296 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -1,8 +1,9 @@ package com.sprint.mission.discodeit.repository.file; -import com.sprint.mission.discodeit.dto.MessageResponseDto; +import com.sprint.mission.discodeit.dto.MessageRequestDto; import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.exepction.*; import com.sprint.mission.discodeit.repository.MessageRepository; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; @@ -68,13 +69,13 @@ public void init() { messageIdMap.put(message.getId(), message); }); } catch (Exception e) { - throw new RuntimeException(e); + throw new FailedInit("FileMessageRepository init failed"); } } @Override - public String create(String content, UUID channelId, UUID userId) { - Message message = new Message(channelId, userId, content); + public UUID create(String content, UUID channelId, UUID userId, List attachmentIdList) { + Message message = new Message(channelId, userId, content, attachmentIdList); messageIdMap.put(message.getId(), message); channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); @@ -86,21 +87,26 @@ public String create(String content, UUID channelId, UUID userId) { ObjectOutputStream oos = new ObjectOutputStream(fos) ) { oos.writeObject(message); - return message.getId().toString(); + return message.getId(); } catch (IOException e) { - return ""; + throw new FailedCreate("Message create failed"); } } @Override - public List findAllInChannel(UUID channelId) { - List result = new ArrayList<>(); + public List findAllInChannel(UUID channelId) { + List result = new ArrayList<>(); try{ List messages = channelIdMessageMap.get(channelId); messages.stream().sorted(Comparator.comparing(Message::getCreateAt)) .forEach(message -> { - result.add(new MessageResponseDto( - message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() + result.add(new MessageRequestDto( + message.getId(), + message.getChannelId(), + message.getUserId(), + message.getAttachmentIds(), + FORMATTER.format(message.getCreateAt()), + FORMATTER.format(message.getUpdateAt()), message.getContent() )); }); return result; @@ -114,25 +120,31 @@ public Instant getLastMessageInChannel(UUID channelId) { return channelIdMessageMap.get(channelId) .stream().max(Comparator.comparing(Message::getCreateAt)).orElse(null).getCreateAt(); } catch (NullPointerException e) { - return null; + throw new FailedFound("Last message not found"); } } @Override - public List findAllForSender(UUID userId) { - List result = new ArrayList<>(); + public List findAllForSender(UUID userId) { + List result = new ArrayList<>(); List messages = userIdMessageMap.get(userId); try{ if(messages != null) { messages.stream().sorted(Comparator.comparing(Message::getCreateAt)) .forEach(message -> { - result.add(new MessageResponseDto( - message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() + result.add(new MessageRequestDto( + message.getId(), + message.getChannelId(), + message.getUserId(), + message.getAttachmentIds(), + FORMATTER.format(message.getCreateAt()), + FORMATTER.format(message.getUpdateAt()), + message.getContent() )); }); } } catch (Exception e) { - return List.of(); + throw new FailedFound("Message not found"); } return result; } @@ -140,7 +152,7 @@ public List findAllForSender(UUID userId) { @Override public boolean updateMessage(UUID id, String content) { Message message = messageIdMap.get(id); - if (message == null) return false; + if (message == null) throw new FailedFound("Message not found"); message.updateMessage(content); @@ -150,17 +162,17 @@ public boolean updateMessage(UUID id, String content) { oos.writeObject(message); return true; } catch (IOException e) { - return false; + throw new FailedUpdate("Message update failed"); } } @Override - public boolean delete(UUID userId, UUID id) { + public UUID delete(UUID userId, UUID id) { List userMessages = userIdMessageMap.get(userId); - if (userMessages == null) return false; + if (userMessages == null) throw new FailedFound("Message not found(Delete)"); Message message = userMessages.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); - if (message == null) return false; + if (message == null) throw new FailedFound("Message not found(Delete)"); UUID channelId = message.getSendChannelId(); @@ -173,31 +185,35 @@ public boolean delete(UUID userId, UUID id) { channelIdMessageMap.get(channelId).remove(message); } messageIdMap.remove(message.getId()); - return true; + return message.getId(); } catch (IOException e) { - return false; + throw new FailedDelete("Message delete failed"); } } @Override - public void delete(UUID id) { + public List> deleteAll(UUID id) { + List> result = new ArrayList<>(); if(channelIdMessageMap.containsKey(id)) { new ArrayList<>(channelIdMessageMap.get(id)).forEach(message -> { + result.add(message.getAttachmentIds()); delete(message.getUserId(), message.getId()); }); } if(userIdMessageMap.containsKey(id)) { new ArrayList<>(userIdMessageMap.get(id)).forEach(message -> { + result.add(message.getAttachmentIds()); delete(message.getUserId(), message.getId()); }); } + return result; } public boolean check(UUID userId, UUID id) { List messages = userIdMessageMap.get(userId); - if(messages == null) return true; + if(messages == null) return false; - Object result = messages.stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); - return result == null; + Object result = messages.stream().filter(message -> message.getId().equals(id)).findFirst().orElse(null); + return result != null; } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java index 12652f25..924bdd0a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java @@ -1,7 +1,9 @@ package com.sprint.mission.discodeit.repository.file; -import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.ReadStatus; +import com.sprint.mission.discodeit.exepction.FailedDelete; +import com.sprint.mission.discodeit.exepction.FailedInit; +import com.sprint.mission.discodeit.exepction.FailedUpdate; import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.repository.ReadStatusRepository; import jakarta.annotation.PostConstruct; @@ -19,8 +21,6 @@ @Repository @RequiredArgsConstructor public class FileReadStatusRepository implements ReadStatusRepository { - // TODO: ID:ReadStatus - // TODO: UserId:ReadStatus private final Map idReadStatusMap = new ConcurrentHashMap<>(); private final Map> userIdReadStatusMap = new ConcurrentHashMap<>(); private final Map> channelIdReadStatusMap = new ConcurrentHashMap<>(); @@ -57,7 +57,7 @@ public void init() { userIdReadStatusMap.computeIfAbsent(readstatus.getUserId(), id -> new ArrayList<>()).add(readstatus); }); } catch (Exception e) { - System.err.println("[ERROR] : " + e); + throw new FailedInit("FileReadStatusRepository init failed"); } } @@ -71,19 +71,19 @@ public void create(UUID userId, UUID channelId) { ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(readStatus); } catch (IOException e) { - System.err.println("[ERROR] : " + e); + throw new FailedInit("FileReadStatusRepository init failed"); } } public Instant find(UUID id) { - return idReadStatusMap.get(id).getLastReadAt(); + return idReadStatusMap.get(id).getUpdateAt(); } public Map findAllByUserId(UUID userId) { List tempList = userIdReadStatusMap.get(userId); Map result = new HashMap<>(); for(ReadStatus temp : tempList) { - result.put(temp.getChannelId(), temp.getLastReadAt()); + result.put(temp.getChannelId(), temp.getUpdateAt()); } return result; @@ -101,8 +101,7 @@ public boolean update(UUID userId, UUID channelId) { temp.updateReadAt(); return true; } catch (IOException e) { - System.err.println("[ERROR] : " + e); - return false; + throw new FailedUpdate("ReadStatus update failed"); } } @@ -115,18 +114,17 @@ public boolean delete(UUID id) { channelIdReadStatusMap.remove(temp.getChannelId()); return true; } catch (IOException e) { - System.err.println("[ERROR] : "+ e); - return false; + throw new FailedDelete("ReadStatus delete failed"); } } public void deleteForChannel(UUID channelId) { List temp = channelIdReadStatusMap.get(channelId); - temp.forEach(t -> delete(t.getId())); + temp.forEach(readStatus -> delete(readStatus.getId())); } public void deleteForUser(UUID userId) { List temp = userIdReadStatusMap.get(userId); - temp.forEach(t -> delete(t.getId())); + temp.forEach(readStatus -> delete(readStatus.getId())); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index e5029b6f..763b0a99 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -1,9 +1,10 @@ package com.sprint.mission.discodeit.repository.file; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UpdateUserDto; import com.sprint.mission.discodeit.dto.UserFinder; import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.entity.UserStatus; +import com.sprint.mission.discodeit.exepction.*; import com.sprint.mission.discodeit.repository.UserRepository; import org.springframework.stereotype.Repository; @@ -18,9 +19,9 @@ public class FileUserRepository implements UserRepository { private final Map idUserMap = new ConcurrentHashMap<>(); private final Map userNameIdMap = new ConcurrentHashMap<>(); - private final Map userStatusMap = new ConcurrentHashMap<>(); private final Path DIRECTORY; private final String EXTENSION = ".ser"; + private final UUID nullUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); public FileUserRepository() { this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); @@ -32,7 +33,6 @@ public FileUserRepository() { } } - /// 파일에서 user값을 불러와, hashMap으로 다시 저장하는 과정 try { Files.list(DIRECTORY) .filter(path -> path.toString().endsWith(EXTENSION)) @@ -50,7 +50,7 @@ public FileUserRepository() { userNameIdMap.put(user.getName(), user.getId()); }); } catch (IOException e) { - throw new RuntimeException(e); + throw new FailedInit("FileUserRepository init failed"); } } @@ -60,13 +60,10 @@ private Path resolvePath(UUID id) { } @Override - public boolean createUser(CreateUserDto dto) { - List userSet = dto.toEntity(); - User user = (User) userSet.get(0); - UserStatus userStatus = (UserStatus) userSet.get(1); + public UUID create(CreateUserDto dto) { + User user = dto.toEntity(); userNameIdMap.put(user.getName(), user.getId()); idUserMap.put(user.getId(), user); - userStatusMap.put(user.getId(), userStatus); Path path = resolvePath(user.getId()); try ( @@ -74,23 +71,30 @@ public boolean createUser(CreateUserDto dto) { ObjectOutputStream oos = new ObjectOutputStream(fos) ) { oos.writeObject(user); - return true; + return user.getId(); } catch (IOException e) { - return false; + throw new FailedCreate("FileBinaryContentRepository create failed"); } } @Override - public boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber) { + public boolean update(UpdateUserDto requestDto) { + UUID userId = requestDto.id(); + String reName = requestDto.reName(); + String rePassword = requestDto.rePassword(); + String reMail = requestDto.reMail(); + String rePhoneNumber = requestDto.rePhoneNumber(); + UUID reProfileId = requestDto.reProfileId(); + Path path = resolvePath(userId); try(FileOutputStream fos = new FileOutputStream(path.toFile()); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(idUserMap.get(userId)); - idUserMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); + idUserMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber, reProfileId); return true; } catch (IOException e) { - return false; + throw new FailedUpdate("User update failed"); } } @@ -100,7 +104,7 @@ public UserFinder find(String name) { UUID id = user.getId(); String userName = user.getName(); - return new UserFinder(id, userName, user.toString(), userStatusMap.get(user.getId())); + return new UserFinder(id, userName, user.toString(), user.getProfileId()); } @Override @@ -109,20 +113,19 @@ public List findAll() { idUserMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { UUID id = user.getId(); String userName = user.getName(); - result.add(new UserFinder(id, userName, user.toString(), userStatusMap.get(user.getId()))); + result.add(new UserFinder(id, userName, user.toString(), user.getProfileId())); }); return result; } @Override - public boolean deleteUser(UUID id) { + public boolean delete(UUID id) { Path path = resolvePath(id); try { Files.delete(path); } catch (IOException e) { - return false; + throw new FailedDelete("User delete failed"); } - userStatusMap.remove(id); userNameIdMap.remove(idUserMap.get(id).getName()); idUserMap.remove(id); return true; @@ -132,7 +135,7 @@ public UUID userNameToId(String name) { try { return userNameIdMap.get(name); } catch (Exception e) { - return null; + throw new FailedFound("Do not found this user : " + name); } } @@ -140,7 +143,7 @@ public String userIdToName(UUID id) { try { return idUserMap.get(id).getName(); } catch (Exception e) { - return null; + throw new FailedFound("Do not found this user : " + id); } } @@ -152,7 +155,7 @@ public boolean check(UUID id, String pw) { } } - public boolean isPresentThis(String checkThis, String findThis) { + public boolean duplicateChecker(String checkThis, String findThis) { try { if (checkThis.equals("이메일") && idUserMap.values().stream().anyMatch(u -> u.getEmail().equals(findThis))) return true; if (checkThis.equals("전화번호") && idUserMap.values().stream().anyMatch(u -> u.getPhoneNumber().equals(findThis))) return true; @@ -160,17 +163,4 @@ public boolean isPresentThis(String checkThis, String findThis) { } catch (Exception ignored) {} return false; } - - public boolean isPresentUser(Object arg) { - try { - if(arg instanceof String) { - idUserMap.get(userNameIdMap.get((String) arg)); - } else if(arg instanceof UUID){ - idUserMap.get((UUID) arg); - } else { - return true; - } - } catch (Exception ignored) {} - return false; - } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserStatusRepository.java new file mode 100644 index 00000000..d8c49f17 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserStatusRepository.java @@ -0,0 +1,125 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.dto.CreateUserStatusDto; +import com.sprint.mission.discodeit.dto.DeleteUserStatusDto; +import com.sprint.mission.discodeit.dto.FindUserStatusDto; +import com.sprint.mission.discodeit.dto.UserStatusUpdateDto; +import com.sprint.mission.discodeit.entity.UserStatus; +import com.sprint.mission.discodeit.exepction.FailedCreate; +import com.sprint.mission.discodeit.exepction.FailedDelete; +import com.sprint.mission.discodeit.exepction.FailedInit; +import com.sprint.mission.discodeit.repository.userStatusRepository; +import org.springframework.stereotype.Repository; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +public class FileUserStatusRepository implements userStatusRepository { + private final Map idMap = new ConcurrentHashMap<>(); + private final Map userIdMap = new ConcurrentHashMap<>(); + private final Map userNameMap = new ConcurrentHashMap<>(); + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; + + public FileUserStatusRepository() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", UserStatus.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + try { + Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (UserStatus) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }).forEach(userStatus -> { + idMap.put(userStatus.getId(), userStatus); + userIdMap.put(userStatus.getUserId(), userStatus); + userNameMap.put(userStatus.getUserName(), userStatus); + }); + } catch (IOException e) { + throw new FailedInit("FileUserStatusRepository init failed"); + } + } + + private Path resolvePath(UUID id) { + String EXTENSION = ".ser"; + return DIRECTORY.resolve(id + EXTENSION); + } + + public boolean create(CreateUserStatusDto requestDto){ + UserStatus userStatus = new UserStatus(requestDto.id(), requestDto.name()); + idMap.put(userStatus.getId(), userStatus); + userIdMap.put(requestDto.id(), userStatus); + userNameMap.put(requestDto.name(), userStatus); + + return save(userStatus); + } + public String find(FindUserStatusDto requestDto) { + if(!userIdMap.containsKey(requestDto.id())) + return ""; + return userIdMap.get(requestDto.id()).isOnline(); + } + public List findAll(List requestDto) { + List result = new ArrayList<>(); + requestDto.forEach(req -> result.add(find(req))); + return result; + } + public boolean update(UserStatusUpdateDto requestDto) { + UserStatus userStatus = userIdMap.get(requestDto.id()); + + if(requestDto.time() == null) { + userStatus.lastAccessTimeUpdater(); + } + + userStatus.lastAccessTimeUpdater(requestDto.time()); + + return save(userStatus); + } + + public boolean delete(DeleteUserStatusDto requestDto) { + UUID id = userIdMap.get(requestDto.id()).getId(); + + Path path = resolvePath(id); + try { + Files.deleteIfExists(path); + } catch (IOException e) { + throw new FailedDelete("UserStatus delete failed"); + } + + userIdMap.remove(requestDto.id()); + idMap.remove(userNameMap.remove(requestDto.name()).getId()); + + return true; + } + + private boolean save(UserStatus userStatus) { + Path path = resolvePath(userStatus.getId()); + try(FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(userStatus); + return true; + } catch (IOException e) { + throw new FailedCreate("UserStatus save failed"); + } + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java index e726f764..42b37951 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -1,103 +1,103 @@ -package com.sprint.mission.discodeit.repository.jcf; - -import com.sprint.mission.discodeit.dto.ResponseChannelDto; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.repository.ChannelRepository; - -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -public class JCFChannelRepository implements ChannelRepository { - private final Map channelNameMap = new ConcurrentHashMap<>(); - private final Map channelIdMap = new ConcurrentHashMap<>(); - - /// Singleton - private JCFChannelRepository() {} - private static class Holder { - private static final JCFChannelRepository INSTANCE = new JCFChannelRepository(); - } - public static JCFChannelRepository getInstance() { - return Holder.INSTANCE; - } - - - /// interface - @Override - public boolean save(Channel channel) { - channelNameMap.getOrDefault(channel.getName(), - channelNameMap.put(channel.getName(), channel)); - return true; - } - - @Override - public boolean save(String oldName, String newName) { - Channel channel = channelNameMap.get(oldName); - - try{ - channelNameMap.put(newName, channel); - channelNameMap.remove(channel.getName()); - channel.channelUpdater(newName); - return true; - } catch (Exception e) { - return false; - } - } - - @Override - public String readChannel(String name) { - try { - return channelNameMap.get(name).toString(); - } catch (Exception e) { - return null; - } - } - - @Override - public List readAllChannel(String userName) { - return List.of(); - } - - @Override - public List readAllPrivateChannel(String userName) { - return List.of(); - } - - public UUID readChannelId(String name) { - try { - return channelNameMap.get(name).getId(); - } catch (Exception e) { - return null; - } - } - - @Override - public boolean deleteChannel(String name) { - UUID id = channelNameMap.get(name).getId(); - channelNameMap.remove(name); - channelIdMap.remove(id); - return true; - } - - /// - public boolean isPresentChannel(String name) { - return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null) == null; - } - - public UUID channelNameToId(String name) { - try { - return channelNameMap.get(name).getId(); - } catch (Exception e) { - return null; - } - } - - public String channelIdToName(UUID id) { - try { - return channelIdMap.get(id).getName(); - } catch (Exception e) { - return null; - } - } -} +//package com.sprint.mission.discodeit.repository.jcf; +// +//import com.sprint.mission.discodeit.dto.ResponseChannelDto; +//import com.sprint.mission.discodeit.entity.Channel; +//import com.sprint.mission.discodeit.repository.ChannelRepository; +// +//import java.util.List; +//import java.util.Map; +//import java.util.UUID; +//import java.util.concurrent.ConcurrentHashMap; +// +//public class JCFChannelRepository implements ChannelRepository { +// private final Map channelNameMap = new ConcurrentHashMap<>(); +// private final Map channelIdMap = new ConcurrentHashMap<>(); +// +// /// Singleton +// private JCFChannelRepository() {} +// private static class Holder { +// private static final JCFChannelRepository INSTANCE = new JCFChannelRepository(); +// } +// public static JCFChannelRepository getInstance() { +// return Holder.INSTANCE; +// } +// +// +// /// interface +// @Override +// public boolean save(Channel channel) { +// channelNameMap.getOrDefault(channel.getName(), +// channelNameMap.put(channel.getName(), channel)); +// return true; +// } +// +// @Override +// public boolean save(String oldName, String newName) { +// Channel channel = channelNameMap.get(oldName); +// +// try{ +// channelNameMap.put(newName, channel); +// channelNameMap.remove(channel.getName()); +// channel.channelUpdater(newName); +// return true; +// } catch (Exception e) { +// return false; +// } +// } +// +// @Override +// public String readChannel(String name) { +// try { +// return channelNameMap.get(name).toString(); +// } catch (Exception e) { +// return null; +// } +// } +// +// @Override +// public List readAllChannel(String userName) { +// return List.of(); +// } +// +// @Override +// public List findAllPrivateChannel(String userName) { +// return List.of(); +// } +// +// public UUID readChannelId(String name) { +// try { +// return channelNameMap.get(name).getId(); +// } catch (Exception e) { +// return null; +// } +// } +// +// @Override +// public boolean deleteChannel(String name) { +// UUID id = channelNameMap.get(name).getId(); +// channelNameMap.remove(name); +// channelIdMap.remove(id); +// return true; +// } +// +// /// +// public boolean isPresentChannel(String name) { +// return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null) == null; +// } +// +// public UUID channelNameToId(String name) { +// try { +// return channelNameMap.get(name).getId(); +// } catch (Exception e) { +// return null; +// } +// } +// +// public String channelIdToName(UUID id) { +// try { +// return channelIdMap.get(id).getName(); +// } catch (Exception e) { +// return null; +// } +// } +//} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java index 6c05e75a..c6fe9c33 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -1,97 +1,98 @@ -package com.sprint.mission.discodeit.repository.jcf; - -import com.sprint.mission.discodeit.dto.MessageResponseDto; -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.repository.MessageRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; - -@Repository -@RequiredArgsConstructor -public class JCFMessageRepository implements MessageRepository { - private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); - private final Map> userIdMessageMap = new ConcurrentHashMap<>(); - private final Map messageIdMap = new ConcurrentHashMap<>(128); - private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); - - @Override - public String create(String content, UUID channelId, UUID userId) { - Message message = new Message(channelId, userId, content); - channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); - userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); - return ""; - } - - @Override - public List findAllInChannel(UUID channelId) { - List result = new ArrayList<>(); - try{ - channelIdMessageMap.get(channelId) - .stream().sorted(Comparator.comparing(Message::getCreateAt)) - .forEach(message -> { - result.add(new MessageResponseDto( - message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() - )); - }); - return result; - } catch (Exception e) { - return List.of(); - } - } - - @Override - public List findAllForSender(UUID userId) { - List result = new ArrayList<>(); - try{ - userIdMessageMap.get(userId) - .stream().sorted(Comparator.comparing(Message::getCreateAt)) - .forEach(message -> { - result.add(new MessageResponseDto( - message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() - )); - }); - } catch (Exception e) { - return List.of(); - } - return result; - } - - @Override - public boolean updateMessage(UUID id, String content) { - try { - messageIdMap.get(id).updateMessage(content); - return true; - } catch (Exception e) { - return false; - } - } - - @Override - public boolean delete(UUID userId, UUID id) { - Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); - UUID channelId = message.getSendChannelId(); - try { - userIdMessageMap.get(userId).remove(message); - channelIdMessageMap.get(channelId).remove(message); - messageIdMap.remove(message.getId()); - return true; - } catch (Exception e) { - return false; - } - } - - @Override - public void delete(UUID channelId) { - - } - - public boolean check(UUID userId, UUID id) { - Object result = userIdMessageMap.get(userId).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); - return result == null; - } -} +//package com.sprint.mission.discodeit.repository.jcf; +// +//import com.sprint.mission.discodeit.dto.MessageResponseDto; +//import com.sprint.mission.discodeit.entity.Message; +//import com.sprint.mission.discodeit.repository.MessageRepository; +//import lombok.RequiredArgsConstructor; +//import org.springframework.stereotype.Repository; +// +//import java.time.ZoneId; +//import java.time.format.DateTimeFormatter; +//import java.util.*; +//import java.util.concurrent.ConcurrentHashMap; +// +//@Repository +//@RequiredArgsConstructor +//public class JCFMessageRepository implements MessageRepository { +// private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); +// private final Map> userIdMessageMap = new ConcurrentHashMap<>(); +// private final Map messageIdMap = new ConcurrentHashMap<>(128); +// private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); +// +// @Override +// public String create(String content, UUID channelId, UUID userId) { +// Message message = new Message(channelId, userId, content); +// channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); +// userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); +// return ""; +// } +// +// @Override +// public List findAllInChannel(UUID channelId) { +// List result = new ArrayList<>(); +// try{ +// channelIdMessageMap.get(channelId) +// .stream().sorted(Comparator.comparing(Message::getCreateAt)) +// .forEach(message -> { +// result.add(new MessageResponseDto( +// message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() +// )); +// }); +// return result; +// } catch (Exception e) { +// return List.of(); +// } +// } +// +// @Override +// public List findAllForSender(UUID userId) { +// List result = new ArrayList<>(); +// try{ +// userIdMessageMap.get(userId) +// .stream().sorted(Comparator.comparing(Message::getCreateAt)) +// .forEach(message -> { +// result.add(new MessageResponseDto( +// message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() +// )); +// }); +// } catch (Exception e) { +// return List.of(); +// } +// return result; +// } +// +// @Override +// public boolean updateMessage(UUID id, String content) { +// try { +// messageIdMap.get(id).updateMessage(content); +// return true; +// } catch (Exception e) { +// return false; +// } +// } +// +// @Override +// public UUID delete(UUID userId, UUID id) { +// Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); +// UUID channelId = message.getSendChannelId(); +// try { +// userIdMessageMap.get(userId).remove(message); +// channelIdMessageMap.get(channelId).remove(message); +// messageIdMap.remove(message.getId()); +// return true; +// } catch (Exception e) { +// return false; +// } +// } +// +// @Override +// public List delete(UUID channelId) { +// +// return null; +// } +// +// public boolean check(UUID userId, UUID id) { +// Object result = userIdMessageMap.get(userId).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); +// return result == null; +// } +//} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/userStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/userStatusRepository.java new file mode 100644 index 00000000..2da7b0e6 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/userStatusRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository; + +public interface userStatusRepository { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 4c383b2a..af29f7d6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -2,20 +2,27 @@ import com.sprint.mission.discodeit.dto.FindChannelDto; import com.sprint.mission.discodeit.dto.ResponseChannelDto; +import com.sprint.mission.discodeit.dto.UpdateChannelDto; import java.util.List; import java.util.UUID; public interface ChannelService { boolean isPresent(String name); - boolean create(String type, String name); + boolean create(String type, String name, String createUserName); FindChannelDto find(String name); List findAllPrivateChannel(String userName); List findAll(String userName); - boolean update(String oldName, String newName); + boolean update(UpdateChannelDto requestDto); boolean delete(String name); - boolean invitePrivateServer(String channelName, String userName, UUID userId); + void deleteAll(String name); + + boolean includePrivateChannel(String channelName, String userName, UUID userId); + + void excludePrivateChannel(String channelName, String userName); + + boolean isCeatePrivateChannel(String userName); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index f8e71678..16c9ea76 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -1,13 +1,15 @@ package com.sprint.mission.discodeit.service; +import com.sprint.mission.discodeit.dto.CreateMessageDto; + import java.util.List; import java.util.UUID; public interface MessageService { - boolean create(String text, String sendeeChannelName, String senderUserName); + boolean create(CreateMessageDto requestDto); - boolean update(UUID messageId, String content); + boolean update(UUID userId, UUID messageId, String content); List findAllForSender(UUID userId); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java index 6379d5be..b726fb04 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -1,6 +1,7 @@ package com.sprint.mission.discodeit.service; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UpdateUserDto; import com.sprint.mission.discodeit.dto.UserFinder; import java.util.List; @@ -12,7 +13,7 @@ public interface UserService { boolean isValid(UUID userId, String password); boolean create(CreateUserDto requestDto); - boolean update(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber, String reProfile); + boolean update(UpdateUserDto requestDto); UserFinder find(String name); List findAll(); boolean delete(UUID id); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/UserStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserStatusService.java new file mode 100644 index 00000000..521fe028 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/UserStatusService.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.service; + +public interface UserStatusService { +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java index 8f766b0e..80acdc10 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java @@ -6,6 +6,7 @@ import com.sprint.mission.discodeit.repository.file.FileUserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; + import java.util.UUID; @Service diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java index eb9ea8a5..344b4a9e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java @@ -1,6 +1,6 @@ package com.sprint.mission.discodeit.service.basic; -import com.sprint.mission.discodeit.dto.BinaryContentDto; +import com.sprint.mission.discodeit.dto.CreateBinaryContentDto; import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.repository.BinaryContentRepository; import lombok.RequiredArgsConstructor; @@ -14,7 +14,19 @@ public class BasicBinaryContentService { private final BinaryContentRepository binaryContentRepository; - public List find(AttachmentType type, UUID id) { - return binaryContentRepository.find(type, id); + public UUID create(CreateBinaryContentDto createBinaryContentDto) { + return binaryContentRepository.create(createBinaryContentDto); + } + + public String find(UUID id) { + return binaryContentRepository.find(id); + } + + public List findAllByIdIn(List ids) { + return binaryContentRepository.findAllByIdIn(ids); + } + + public boolean delete(UUID id) { + return binaryContentRepository.delete(id); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java index bd34fd55..e6728ad8 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -3,6 +3,7 @@ import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.dto.FindChannelDto; import com.sprint.mission.discodeit.dto.ResponseChannelDto; +import com.sprint.mission.discodeit.dto.UpdateChannelDto; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.ChannelType; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; @@ -21,7 +22,6 @@ public class BasicChannelService implements ChannelService { private final FileChannelRepository channelRepository; private final FileUserRepository userRepository; - private final UserState userState; private final FileMessageRepository messageRepository; @Override @@ -30,8 +30,7 @@ public boolean isPresent(String name) { } @Override - public boolean create(String type, String name) { - String createUserName = userState.getUserName(); + public boolean create(String type, String name, String createUserName) { UUID createUserId = userRepository.userNameToId(createUserName); if(type.equalsIgnoreCase("public") || type.equals("1")) { @@ -56,7 +55,7 @@ public FindChannelDto find(String name) { @Override public List findAllPrivateChannel(String userName) { - return channelRepository.readAllPrivateChannel(userName); + return channelRepository.findAllPrivateChannel(userName); } public UUID findChannelId(String channelName) { @@ -69,8 +68,8 @@ public List findAll(String userName) { } @Override - public boolean update(String oldName, String newName) { - return channelRepository.save(oldName, newName); + public boolean update(UpdateChannelDto requestDto) { + return channelRepository.save(requestDto); } @Override @@ -79,8 +78,23 @@ public boolean delete(String name) { } @Override - public boolean invitePrivateServer(String channelName, String userName, UUID userId) { - channelRepository.invitePrivateServer(channelName, userName, userId); + public void deleteAll(String name) { + channelRepository.deleteAllChannel(name); + } + + @Override + public boolean includePrivateChannel(String channelName, String userName, UUID userId) { + channelRepository.includePrivateChannel(channelName, userName, userId); return true; } + + @Override + public void excludePrivateChannel(String channelName, String userName) { + channelRepository.excludePrivateChannel(channelName, userName); + } + + @Override + public boolean isCeatePrivateChannel(String userName) { + return channelRepository.isCeatePrivateChannel(userName); + } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java index c5824905..7bb9878e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -1,10 +1,9 @@ package com.sprint.mission.discodeit.service.basic; -import com.sprint.mission.discodeit.UserState; -import com.sprint.mission.discodeit.dto.BinaryContentDto; -import com.sprint.mission.discodeit.dto.MessageResponseDto; +import com.sprint.mission.discodeit.dto.CreateMessageDto; +import com.sprint.mission.discodeit.dto.MessageRequestDto; import com.sprint.mission.discodeit.entity.AttachmentType; -import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.exepction.FailedFound; import com.sprint.mission.discodeit.repository.file.FileBinaryContentRepository; import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.repository.file.FileMessageRepository; @@ -19,36 +18,26 @@ @Service @RequiredArgsConstructor public class BasicMessageService implements MessageService { - private final UserState userState; private final FileUserRepository userRepository; private final FileChannelRepository channelRepository; private final FileMessageRepository messageRepository; private final FileBinaryContentRepository binaryContentRepository; + private final UUID nullUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); public boolean isPresent(UUID userId, UUID messageId) { return messageRepository.check(userId, messageId); } @Override - public boolean create(String text, String sendeeChannelName, String senderUserName) { - UUID channelId = channelRepository.readChannelId(sendeeChannelName); - UUID userId = userRepository.userNameToId(senderUserName); - - /// 사실 2차 검증이라 불필요한거 같긴 한데.. - return channelId != null && userId != null && !messageRepository.create(text, channelId, userId).isEmpty(); - } + public boolean create(CreateMessageDto requestDto) { + String text = requestDto.text(); + String sendeeChannelName = requestDto.sendeeChannelName(); + String senderUserName = requestDto.senderUserName(); + List binaryContentIds = requestDto.binaryContentIds(); - public boolean create(String text, String sendeeChannelName, String senderUserName, List binaryContentDtos) { - UUID channelId = channelRepository.readChannelId(sendeeChannelName); + UUID channelId = channelRepository.getChannelId(sendeeChannelName); UUID userId = userRepository.userNameToId(senderUserName); - - String messageIdS = messageRepository.create(text, channelId, userId); - - if(messageIdS.isEmpty()) throw new NotFound("메시지 ID가 없습니다"); - - UUID messageId = UUID.fromString(messageIdS); - - binaryContentDtos.forEach(content -> binaryContentRepository.create(AttachmentType.MESSAGE, messageId, content.filename())); + messageRepository.create(text, channelId, userId, binaryContentIds); return true; } @@ -64,7 +53,7 @@ public List findAllInChannel(String channelName) { return messageRepository.findAllInChannel(channelId).stream().map(this::formattingMessage).toList(); } - private String formattingMessage(MessageResponseDto dto) { + private String formattingMessage(MessageRequestDto dto) { String id = "ID: " + dto.id().toString(); String user = "사용자명: " + userRepository.userIdToName(dto.userId()); String channel = "채널명: " + channelRepository.channelIdToName(dto.channelId()); @@ -73,17 +62,15 @@ private String formattingMessage(MessageResponseDto dto) { + user + "\n" + channel + "\n" + "내용: " + dto.content() + "\n" - + "첨부파일: " + binaryContentRepository.find(AttachmentType.MESSAGE, dto.id()) + "\n" + + "첨부파일: " + String.join("", binaryContentRepository.findAllByIdIn(dto.attachmentIds())) + "\n" + "생성일: " + dto.createAt() + "\n" - + "수정일: " + dto.updateAt(); + + "수정일: " + dto.updateAt() + "\n===================="; } @Override - public boolean update(UUID messageId, String content) { - UUID userId = userState.getUserId(); - + public boolean update(UUID userId, UUID messageId, String content) { if (messageRepository.check(userId, messageId)) { - throw new NotFound("해당 ID를 찾지 못했습니다."); + throw new FailedFound("해당 ID를 찾지 못했습니다."); } return messageRepository.updateMessage(messageId, content); @@ -91,17 +78,20 @@ public boolean update(UUID messageId, String content) { @Override public boolean delete(UUID userId, UUID messageId) { - return messageRepository.delete(userId, messageId); + UUID delete = messageRepository.delete(userId, messageId); + if(delete.equals(nullUUID)) return false; + binaryContentRepository.delete(delete); + return true; } @Override - public void deleteAll(UUID channelId) { - messageRepository.delete(channelId); + public void deleteAll(UUID id) { + messageRepository.deleteAll(id).forEach(binaryContentRepository::delete); } @Override public String lastMessageTime(String channelName) { UUID channelId = channelRepository.channelNameToId(channelName); - return messageRepository.findAllInChannel(channelId).stream().map(MessageResponseDto::createAt).max(String::compareTo).orElse("없음"); + return messageRepository.findAllInChannel(channelId).stream().map(MessageRequestDto::createAt).max(String::compareTo).orElse("없음"); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java index f857b9bb..31a3fea7 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java @@ -45,6 +45,6 @@ public void deleteForChannel(UUID channelId) { } @Override public void deleteForUser(UUID userId) { - readStatusRepository.deleteForChannel(userId); + readStatusRepository.deleteForUser(userId); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java index e719a388..96fa675e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -1,9 +1,9 @@ package com.sprint.mission.discodeit.service.basic; import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UpdateUserDto; import com.sprint.mission.discodeit.dto.UserFinder; -import com.sprint.mission.discodeit.entity.AttachmentType; -import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.exepction.FailedFound; import com.sprint.mission.discodeit.repository.file.FileBinaryContentRepository; import com.sprint.mission.discodeit.repository.file.FileUserRepository; import com.sprint.mission.discodeit.service.UserService; @@ -18,6 +18,7 @@ public class BasicUserService implements UserService { private final FileUserRepository userRepository; private final FileBinaryContentRepository binaryContentRepository; + private final UUID nullUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); public UUID userNameToId(String name) { return userRepository.userNameToId(name); @@ -35,17 +36,20 @@ public boolean isValid(UUID userId, String password) { @Override public boolean create(CreateUserDto requestDto) { - return userRepository.createUser(requestDto); + UUID userId = userRepository.create(requestDto); + + return userId != nullUUID; } /// Update @Override - public boolean update(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber, String reProfile) { + public boolean update(UpdateUserDto requestDto) { + UUID reProfileId = requestDto.reProfileId(); + UUID userId = requestDto.id(); - if(userRepository.updateUser(userId, reName, rePassword, reMail, rePhoneNumber)) { - if(reProfile != null){ - binaryContentRepository.delete(AttachmentType.USER, userId); - binaryContentRepository.create(AttachmentType.USER, userId, reProfile); + if(userRepository.update(requestDto)) { + if(reProfileId != null){ + binaryContentRepository.delete(userId); } return true; } @@ -56,7 +60,7 @@ public boolean update(UUID userId, String reName, String rePassword, String reMa @Override public UserFinder find(String name) { if(userRepository.userNameToId(name) == null) - throw new NotFound("해당 사용자를 찾지 못했습니다"); + throw new FailedFound("해당 사용자를 찾지 못했습니다"); return userRepository.find(name); } @@ -68,6 +72,7 @@ public List findAll() { /// Delete @Override public boolean delete(UUID id) { - return userRepository.deleteUser(id); + binaryContentRepository.delete(id); + return userRepository.delete(id); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserStatusService.java new file mode 100644 index 00000000..19b91d5a --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserStatusService.java @@ -0,0 +1,41 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.dto.CreateUserStatusDto; +import com.sprint.mission.discodeit.dto.DeleteUserStatusDto; +import com.sprint.mission.discodeit.dto.FindUserStatusDto; +import com.sprint.mission.discodeit.dto.UserStatusUpdateDto; +import com.sprint.mission.discodeit.exepction.DoNotDuplicate; +import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.repository.file.FileUserStatusRepository; +import com.sprint.mission.discodeit.service.UserStatusService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class BasicUserStatusService implements UserStatusService { + private final FileUserStatusRepository userStatusRepository; + private final FileUserRepository userRepository; + + public void create(CreateUserStatusDto requestDto){ + FindUserStatusDto dto = new FindUserStatusDto(requestDto.id(), requestDto.name()); + + if(userRepository.userIdToName(requestDto.id()).isEmpty()) + throw new NotFound("해당 유저가 없습니다."); + if(!userStatusRepository.find(dto).isEmpty()) + throw new DoNotDuplicate("이미 존재합니다."); + + userStatusRepository.create(requestDto); + } + public String find(FindUserStatusDto requestDto) { + return userStatusRepository.find(requestDto); + } + public void findAll() {} + public void update(UserStatusUpdateDto requestDto) { + userStatusRepository.update(requestDto); + } + public void delete(DeleteUserStatusDto requestDto) { + userStatusRepository.delete(requestDto); + } +} From 105fbbac1924975ffb3f8e94aeff0422ad9d66ee Mon Sep 17 00:00:00 2001 From: Alpha Date: Wed, 4 Feb 2026 22:53:09 +0900 Subject: [PATCH 33/35] =?UTF-8?q?Feat:=20JCF=20System,=20Profile=20setting?= =?UTF-8?q?s,=20etc..=201.=20JCF=20System=EC=9D=84=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=96=88=EB=8B=A4.=202.=20yml=20Profile=EC=9D=84=20=ED=86=B5?= =?UTF-8?q?=ED=95=B4=20=EA=B5=90=EC=B2=B4=ED=95=A0=20=EC=88=98=20=EC=9E=88?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=84=A4=EC=A0=95=ED=96=88=EB=8B=A4.=203.?= =?UTF-8?q?=20FIX:=20=EC=9C=A0=EC=A0=80=20=EC=82=AD=EC=A0=9C=EC=8B=9C=20?= =?UTF-8?q?=ED=95=B4=EB=8B=B9=20=EC=B1=84=EB=84=90=EC=9D=98=20=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=EB=A5=BC=20=EC=82=AD=EC=A0=9C=ED=95=98?= =?UTF-8?q?=EB=8B=A4=20=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=EB=A5=BC=20=EC=88=98=EC=A0=95=ED=96=88=EB=8B=A4.=204.?= =?UTF-8?q?=20Refector:=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8A=94=20Import=EB=A5=BC=20=EC=82=AD=EC=A0=9C=ED=96=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../repository/ChannelRepository.class | Bin 741 -> 1602 bytes .../repository/MessageRepository.class | Bin 977 -> 1142 bytes .../discodeit/repository/UserRepository.class | Bin 649 -> 985 bytes .../file/FileChannelRepository.class | Bin 14478 -> 14493 bytes .../file/FileMessageRepository.class | Bin 14205 -> 14242 bytes .../repository/file/FileUserRepository.class | Bin 11524 -> 11501 bytes .../compileJava/previous-compilation-data.bin | Bin 31526 -> 31193 bytes .../discodeit/app/router/RouteChannel.java | 3 +- .../discodeit/app/router/RouteMessage.java | 1 - .../discodeit/app/router/RouteUser.java | 32 +- .../discodeit/dto/CreateBinaryContentDto.java | 2 - .../mission/discodeit/dto/UserFinder.java | 2 - .../repository/BinaryContentRepository.java | 1 - .../repository/ChannelRepository.java | 24 ++ .../repository/MessageRepository.java | 5 + .../repository/ReadStatusRepository.java | 17 + .../discodeit/repository/UserRepository.java | 8 + .../repository/UserStatusRepository.java | 20 ++ .../file/FileBinaryContentRepository.java | 4 +- .../file/FileChannelRepository.java | 24 +- .../file/FileMessageRepository.java | 8 +- .../file/FileReadStatusRepository.java | 11 +- .../repository/file/FileUserRepository.java | 9 +- .../file/FileUserStatusRepository.java | 14 +- .../jcf/JCFBinaryContentRepository.java | 59 ++++ .../repository/jcf/JCFChannelRepository.java | 297 ++++++++++++------ .../repository/jcf/JCFMessageRepository.java | 250 +++++++++------ .../jcf/JCFReadStatusRepository.java | 73 +++++ .../repository/jcf/JCFUserRepository.java | 213 +++++++------ .../jcf/JCFUserStatusRepository.java | 69 ++++ .../repository/userStatusRepository.java | 4 - .../discodeit/service/auth/AuthService.java | 2 +- .../basic/BasicBinaryContentService.java | 1 - .../service/basic/BasicChannelService.java | 15 +- .../service/basic/BasicMessageService.java | 21 +- .../service/basic/BasicReadStatusService.java | 8 +- .../service/basic/BasicUserService.java | 10 +- .../service/basic/BasicUserStatusService.java | 8 +- discordit/src/main/resources/application.yml | 3 +- 41 files changed, 832 insertions(+), 386 deletions(-) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/UserStatusRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFBinaryContentRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFReadStatusRepository.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserStatusRepository.java delete mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/repository/userStatusRepository.java diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 94a2111796b83fa36e9388656bb30c4ed11ac3d6..5b5045e336c107ea5a119be531a47b35634e02f6 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~A}g1OPNU1atrZ literal 17 VcmZQxwaR1i+k`Ae1~A|V2LLn?1WEt^ diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index 0ed8a6f01ee31698ef860131450b7326c6f56d13..58872460babf7ae1f8d6bbd9a2a2d0604a6b78b8 100644 GIT binary patch literal 8 PcmZQzV4S0IkPA!(DQg@kgyl{VpKo`fEJ! z0elo<)^_43b{pWq4|`_k%$%9C{`LFEPXKrWPYaMC@X8S*ON}Mt+8QyXnBbPnlp|cq zv?b|SD5ixxv-VDG&Z&1eLkf^3P(8ILw&mG;Xni_5rH&?$RrZ7uc;4t-NKLtBdPdu7 zenGMWs!xR5wWU3xno32W;Dlufyja5LYGDn=uB~a*>An^LYe~{?K2;je1Xd-r-RJ^= zokl0_zo&5s!&Wm1p(c(U5vUBQj*|OlV+7u(68wX1L(?L#78AE!0^6yyL94!Io;4V> z_c5zt#JuyonVw~N9i}wqUGf!`9|J|j9vgC7`x3=`T~gI#zrJ{>W(kK>jRjZpYj}%A zYsZY6X1kJ2;w2H-vK@z_?~XjW7}|_B7wK#BW89#-#0QJM`mctuUB(^HcN0CmOc_$r zF(DG~s`(kM=Y&=c2cI`PFuShN@2Q1$|EiE7F1ysj=Q49aEhRH}Ug5oY!=zqC$|_S` zNfpj=##(1;5B;VS6Iq|r)fYz66luGC5vrXUb8aHZp%KV1%r5nWFCF@UdFaV{R6qXh zJTuQAPk_J*{>A_{vIKIF$8!NsIdnIeA5#vBF;ohmRalFmasX9eeG#g{#v-%{mmxEy zzk*e2_+_AuWv-qd+B!dU4X(#E!hUbS%?K*5z%ArAb#4bu-hsPOsF<0Cu=G8+ACrV~ e9>De@^e}mACkgE)MK_=sb3MXl2s{pCKluYbqNmRQ delta 124 zcmX@a^ORNK)W2Q(7#J9A86?;lm>3x>Cx2v;-KZ$bz0x=VV5DO!NFatl3g;h#~L6m_JCdCWX!N?#6)+Y`CGX@ZG diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/MessageRepository.class index 34c9103a89250e66f71c318c46cd20461895dbeb..0caa8efe7f07c58c30ac04ac15150b4470e12d60 100644 GIT binary patch delta 216 zcmcb}{*8m{)W2Q(7#J9A8RR!|u`o%Cr>B$WrWO|`rl)%5IcFs1<)!8@GN?}O zXO!S6$;?gF_slCUNz5ym%+2&nR3NiBpeVICH4mnRkwIBwVx0n$X4K^OOoogclNFiW zg@hOw8Q6i=ure}mGBB_(G6+xhVV2StVGxB%a56E70p&TslHv>!2w^UuFi;ApM{@E8 XW-%oxAWND-215Z*Ko+Q!i9rqkWLqaN delta 122 zcmeyyagm+t)W2Q(7#J9A8KgIIu`o>zV0t_`hgqMIZSovucMpCBCI)t(EGr`e7m(rs zVkQOw7Dfgk24Mz9uoNc~g9uQVgMk4kEXp8;5C-W0N&$t%C)=@zaZ3QDB*7*~0RZK& B4O;*J diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/UserRepository.class index 50920becded8da91672470fa5abb0d1b52281d65..b60deb59171d9f2a9fcb0be95957c5a06b4ebdfa 100644 GIT binary patch delta 389 zcmeBVy~!?c>ff$?3=9mm49e^bOpFX>6EDhc)IG^q&r@2QTI83Qn;MeunZn4RqT!R3 zSeB@tlbDyTA6!zDnU`*@2@xtS$;{CY4fS-fW@G^C@=OWI2kAuULMVaiK{f`cD>)-I zIomU@EHNh&XqPI`u6mGV2yIv_k78tCDkx`U5J)L4$jMAjEJ<|+nUY$>$e@nJvDi)E z1lt^vky*^hz>$`jmjYpO1yBCLsKv-RS(zy&j)jpyj6s}%k%1i;POOX!d<+agAqfUa ogpep$NQyxkD#Xde02E@70Sn7A$RUK~fx-$v%*db!B$*hL0DCcC%>V!Z delta 49 zcmcb~-pML(>ff$?3=9mm3=-@NOpFX>6EDhc)IG^K`4f{4BkN>&<`^ypMg}pU3MK|| E0BF|>e*gdg diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileChannelRepository.class index d7127d077f645b65131307477ba940e5ff37042b..19025d60954b64dd159ad2b1bab9b53e0166a434 100644 GIT binary patch literal 14493 zcmcIr33yc1^*?7alQ)^XKn$CMB0*6@NEj`Gk{}wAfYA^lA<$q^hs*>w+7CfoL$cHn4Qfb>Z$5Q}O&rERtHl zR8%!%g+X4XbJU=8DiRHJ$79{;L?RqZ1sd(!%Yw;uOM-nqGN`D8O35^+%%m|imT6&k zyf={SOGGfCH@4F?wCr*T~{77It0*R0bXCqSYN!BmEsMN&pg zGU-$qF)nw6qTr>;Ozv69a6(3&ZqgJwgQ=wX?aQ0nI$D;tfvpxv>9Zq+Rj*Z2Rhl%7 z&cx8BmSxS2%a<wz&plXw5QVk?iy2|0kWF*4LcyvRUsmdbhl-wekGpF85 zvzWYT=wMbTlJL=abiP4vGif$mkmF4qo0F+5K?+YhVo8d{vX5-{+(A->N zN|j!^h^b5*r8X2y1#5eQeFoJr%^cOo;Hr_-=78lqKAKM#8??ZrOXyO#P}cn$qroI} zTLyVMBE5alus8+GR8>H?K3YhP1~r+~OpD+vBXtW(MWDn~Utq;ojkH!lT^n>6)2X?{ zTO+acOZ!rYBOhH(R~Xc4(h`E}TS^rz z2Cc}f8&TA#X!*KCd}DA;G+aMp zg)C^bNmtV~2>K{g$P_5J2FrFTKPFRHd2ax*j|;+?DQMCf>IR8aSV)AbT1R!)6H190 zbtslS=~%b;L!dno4n>eH!u6#TrXGXVnzW80$RtV=BjrP`M>M6v38s10%8o^Gv^BbD zy-86*uzP}ieNlw@)J)Lil3Qd+s^p8C)JNANOc2IQ7Zv1hPZ*7T5hYDZQ5vfWc8dcr zb^q^_ENM918&0S-Y&2;TVZBCAJkcENUdL2fa2@s}DX8ycI)79b2yY7aX^SojB8o#T zD92uUH`6o;>Jjy^Qp$B@j~eQu8|X%H?3+;IEK!_^RlIs0z1O6zv<>D$hH43+HsqK~ z6%-!|+|4GvpSB}~TUA10E}O!YX`RIPx3|WJqzk&7|Au1F%{u zF5O7@88NI0^**|V?v&Mh5Glo4O{PyY`JqgZqfw(5Cl4RpMfb?;4>S3*vzfyGD>ETuj4 z8G}A+(&uO|Dr7dB097G?VbyE^D{r&35$~^vS29Gk?!k*gC@fvgNC5+(Y2KqT8*ksdFe^;vg}rw3~mV9;WS7$ z`siu;f70#RHvvfG3$aZA!(V$#^s*niNuBHtAWV-B@^|ZY!ndO!_K4 zj|hk)k;IdLES50Gh~iaZlCPWe4f-a$wmTk61tYQK6=9^Jf?kU{{w=0UPf#^Y@wRwM zFQPpMCVS~crYTMFN`Q*Wv|44Q1(PegHEj3M3v{DM_dUTz-_NECr(amv+}R{kerVE< zWJ+-&+#BBjWzD0XnDkT0Wn(PzTB?LWKRa1V>zQ8q1yq!=w6%mx>U>FT?V?|s^cyjd zHx<_q-k{$CJe{EObjn^7Psc)D`aSYihMDNBN1A=~GTrEXlAazn5OgdSgo{ z+hNdanUGM)w;_=TZf*rI@zJYPBpUp)Nq?cgLW3KE(X@cBQ!^=5O=yfqqX1;U3aDOx zr#B4xhe`jWe*xuYV>&wsbTph{IxUBeZq0%mH@ztU;I02@;kB`VfSaQx6Eg%%#YF-6 zB~04tOSy>M2762{W&s;k&yn_f7>hf z+<)YOCn}FTxc%_0cUM~SRa&m6dUoD?5j-ffW@P zFc}DzPs{EfjfGATbwK|cZEr5-;kVClAX=PV?{F}dl`Hhgb4;Gg7eX@{e zPp%*@B@zC#v4To?vX@(M=<>=vPaNKHsPf3ZZHKqrdE|j@l}GkIr7qj=tvuq0SRc*d zD@<;ca$g+2J{^oEB{j8~yi{OAndWJQyYyUX@-pr~T1;Rx_MKK&ORNWIBy^lW%snwd zCL6W%6?RFLeLGEFAtD#S(g3ymc9XjV(HiZ`T2?eHZ#EbhPH#>vSl<$}w+KF7MRyu} zHL{b++&0F~8MB(N6~_-|_wg9#7$H8#tGV0c5Ce|;fcHWgi{>BgSO^uPX}|E^Z!osb zm5R6WX>~x9$-H*Z%1-9jVxOqVy}#mf_kR5f+SUDJ?Sh_F9gdZ?aC453PB$@@o2;;uN>1xV&S%Q z@0xI8xg4#)D_i5;!RU%$A|lULqdT=O0>siZy0tOpKA|TPlZEGlVs}a% zfOz#$ut2VHdPO-fLf$2)jie0l>9HC(jnQ~pGK6lJ?NA6pu}})kv&sTst%q}vzZlEl zPXK(Vp-xc{{gGIAG#wfN?=LK%KP^j6{>@`PV})$ZwI5k-kOm?YmzogXRFKiRC&Wky zm&ieZdV__;g_tVW2q4G*EZ#^2mpC+c0>;jb3gto*BS{T;^Q}DAvBKqXSzM;2CA2)Q z*F7~F>|GNIPA^PjI-uafLJL2cdM0_rZ?VZ&#q_x+pJ<`tW0ISLgIJ4|cF~br!s!>_ zw8dJJ9l-UY2XLO&#mdKJGaIETqg)iR>2J$>KA)-45+e`oo|G(7b)+_*rv0c85<^8P z>X9*idyEtvCla&EtBM*MKuLLZt^s=>Uq?Kh=ne}3R57_&Sv8A}W=XW+)n98ou~xrd zUfUxjePcYaK7comiEv!<4>n7gH_YI3Ucu3Fd=}o6$|={0cn`Q@ibtKKpvK5E;%s3& zoD%uVopSo-SP#D>o2;Li{3Tvcjz9W7H1#WK`?bkW@>Avbqg@#HJ8Ap9$)D$e zavnfKdpUPt>?_j#s>wrqpq#g&{dH;hv&n~e5Z!;3r@xtekPo2m4SD*9$^D>E%>R<7 zf1CUS9{^Tq!M73#wKEAP4gOE&W$j4c$aN~iMNDUmFlCPa0k>!mq-l5=gb5s@VtieJ z?>cbbhc6Xed_A7=y@mapz!N^Ou%D$LpHtY+3DCip5SUvbA5Wk?DRjtBr$Zook%E>K zTGCX6XQB(M2Z*bO$mklNk^|(+-j-)?$7OFPR#*5B&}sXGD5vo|86=5LBR3d~1dZkpi}23jTo>(?af&vC#r;`| z&O|-dqJvqynQy>i-iZ+&=FPY;zYD@B;ygy~&~`(0MeRWfc%Gy=T}2fac67Nb=Jiv3 z$3bd1KvRWt(UY|JAhp~_r&~`;57Lz@cT-vG5UuQ*IY3>*(s7X9Q9Vf4ii{x_4bpXT z7jqFB6LP!3MZ0MX=G@R#@vZ@S&+tC*pGg-|9d%-<>nVn7ky=(AEKJzdPN5kXA!7m< zRZI0W3nORKm2?4JMRTZ!7GPcrW-g{UT}GR6=prhugzf5a#_?``4-^z9pLK`TYW47q z7-f?C27@|FBKYy~O=uC@Z^4!My}VWH$yEee2HFOzXZF*UetO@MA-bij<`C^*8lXGc zhUl)Y+5x(|&h2+@7vpFV<{2lvy*KS|S}86Tb=oq32pT|_JKST1y|$K5myEfXCr zcpT>#@1E-sg8ORw>4^!RJ$3qNH<@+CeviMnp9cJ%;X1c;OC!4d9%*zBL$JZFiq8+w zQ^Syd8r~9b!)vRXX$O4(*Gcql+J);j{L1xyygYmu*Am)-S8SbV|D3vNdn}}KXkaON zuf)t{pw>a>(sHW7$houvuUS^&Ul;7L3URX@fZ>zWQ z`w$M3=w7~=-w*xnwJcO5dbS;Skhk+KuwM!7<69B2E@ibOmHdZR8dPP_Ee72+rOluN zM=_?@pi+b8*&S#m#*gTqCH|sxXIUCc(YqJL@#tze0zYtBcb9$^LJf%5jU^SQ!Vxq zx2kiCU-{h`$Eqt9&+-?GYZ-n+hVAql@GT)w>-X6HB-DQ3qLqFRyx_;~xn3EyPkiHv z3En+*`ca&t#P9W&h;w*{K~egp75#p%v>L<0@};hdpAXP4#b>U?%W>@+578sgW+z^g z?!|Q%e&xC!{y&IoGwsCt#7?w7tFGE-meF`mBbf@ofkSnkEFIOg<$ z%k}6@;N?vU@tcOvY@l1=LAT>+C$76N?pfSFhuD?aeg|xQExrj7AA)J{{f78ZG5U3s zOR{~@_MsQ~HohG`I!l< zmMKYokvI)mih%0sqyh+gih_}u{gVHlLOaVJ8dL^n|x!u$++ zFO0esU$t#h2GVtCk!^xSdlRnUj_ zf(j&YLh10*M^T(VPK`KV&y-&cp&8XAZL8LPOOxgM7LLf@-ot=`h+0HS7a8 z+z-U_I23unp~MlwVeGlcX}L<2mSZXrZ(+30ay3$?l&dBI7*ejbwBhH$I^Y(bTIa#< zS#`zuJ*Up#IxlW!)OmN4r>f-U^TQZ5Gg{JpT=+3?O;TuW{ioLjAE4jM4= z;G-K9XYu{~0Jxk^Rs10Cib4HM{wO@m5M0e41IqT=9;RCOA+!kOt0LD?U`U;=k;La1 z{BeUGHuw?wlZ?Ly`IKvI)T}H1CwaFO_SeAV;`HOJl&Q01O>IA4kVX9R2?x>h*kF83 zt+ZNCu~#~dA64-HGRos*^f-PDXuU|eTv-tY5W0vTLl^U>_|q2uFIhRf9h zA#6a^*9l1P6TXMN;SXT+A7X>_W0by^FzV;jK)*nR|0T84uYf>*1LW~C5XSE?`}aT< ze^8pa3@(Gcf^sq!T1(YFK}y?JTU%Ro`2yXg*0@sI#C!NNP)t3(juvF+bp|EVjh>1LYk};qEavt_aHZ;g%`Py zGct)-C%4zIseBzF_GgFHYwUH@SnHTdW&F9E{GnU+LJ}(p>%xrB!7Smfg>d4dm6ny@ z1H06w)CLWP8?jlm#}-KMOW#m}XgpA93sUL81I1J{x#&_m+O$^o*^Jj)j7Mr^u~RFD z80BCW6&B)6hY%yQq3q@%S9QJ&`|U!1JM1irUz}b1eIs4{c!gdSs>`HM**a22W1NAo zi{`W2A?9LRSBo9G8i}3waXQB`kyFZYCzO+i43v9Rq@3vNm4|GvE~ka0EP<5xe+z&D zl2Eiool@$P2Fb8FQsT^^+$YCGNGXCtF1GAhB1NXUpD!1Wah_y2ja8!7jse)ntBqi} zOU|DxQVT3nJ`{a=w4ax(%qBqXeXl!Y_1PNrS+sm|vUQ?jz2+cQNGu$gS){Ijw@7|2 zn~B`V?T2_dQeD1ek1KLWJTlOhtW1@4qzkmkdR=JJ0`!F) zf4@WM$tuxP2wvAB0_kvVJK}+ZvFm8nN?g!uic2hp3m^3c1`ND%@)36et8In_5y1K~l-ookP5; z3!0GQ7=B0V5U<9O6koFh>R*E$b{noeP}bVoz3O&1mEyQW&Qu0!Wy{WMcT-6l3OEha z3}+9tfK4VLozB4awiek7YFCN^~w=fs&-Iybk?WsAqM>vo2L< z0=VHY5mYV$o{Q1-)Qaem*b=NTiKg=~KMjkI0b>3Fe-VYRRUKzNgF7r) z6&+GGTusJN5W#^(mBILcXtnGIaUg>KUuQREHlY}a&k}UAJuEX5E0LKV8H1ZD{BSLN z1Lw<@Z(M4*pgHppUx!a9{QbN>KY%ZASkkmDX)1y73WL84@m>5Z--K%g?!E$e^Bm}Z z^(x{dKhIx7`x@-zzmB#S`MXfwPxz<&b9MI%{w4oL-M!4eAr2r85(x-}Y(&MSB#4G2U^Il3uo#r;keR^9WG2qSVi&bg zi@UX25tV+l+E|Mgtt5n0)79F=*4o9^?zOcl*nO|c_doZ(dGls61nBqm_sehId-vXV z?z!ju&vMUw`TE-jpC+R7U0h5qDlo`xQXv&FE$WW-)+PGl;b^k1H=Ia>W6`=`IME#o zhQi6Zc&IOy2q$Clt#v)&NT_ZxewsD}qR~)fx!uK7+}ygnrD?^o!@}v@> z_}pMP?xl$|$)J->noOrKm8nTIjjf4fsF!Kn`cSeX9_tImlUteIar9}NGaED|o0wXX zho&->hI^!=q%-NPQA`K|!9;O1mTcJ)P6%wyvRKJhsKt!kn3o5>C7=9 z5ZV&z(;8hIfH?Vm6k4I)TnsY^u`FT&tPlOiO(+zJLP^RO^gFxkegGJ24okFup96>`NuJWk{5| z+N3zaLlh-r(hbj_X2W`+!Ans}$!a#iw^*x5_lYF8q^%u|%hp{5r{kQ%OPlE$dHX#~ z{>wydxJu19VkRA2I1J39km$F9XNXN9i7ecA9iA?Lv&r zxFJQN0C31yzJjSGW=Eh*3x0HyWNP=D^nftw%VM%M2>R0fF_ZpBx+frk+XTmGEyC{q zxJjRo{z=*W)*=N!51I5yrRwfTED;hwK4j3R(&0z(Y{v{QJxrfAX|IHrl0Y!nnd<9< z=_EoygB}A2#@1kt(Ko43>Y;s@%VN7C5!e*64gFCHdg-(Dq(S>l8W6FM?Nx%wSl!A# zWKd}-G$&!9Ml2GP10ru1#izWl%XyTF(fWyuJu*&IMCVgAH zY^gJJrREL8R#PkzfoDg8gOGce-Z1EQ zCjFlN0MC^1Cz(N@lTgVQ)2Uf>bZaIvbJL$BYx(nkHCwO~7|F=~YSQ26?_e+)6Dj1z zU1`G-|4IKc=-(#2NpAsNnI-C1ir`loBauu*%au{(8VTJ;OeSWCQZgd!T9MIa8%$<5 zsj!|lUx!n-*?9vzvD@TA#(vlcCt7;@WKV~nx5i-4F(Z@h*I>FDW{h3#nXeDr^2Xiw zAAaD;io?5i9J=YQ3X8uA3xBHTo*NF|wExh}I}Y9a;B+q=Vg)aA36R63V@P0?j|#aA zX*Zvg+5H@CnR&8jA2$9IkW%tQro{hCCYdW%XF6*$U?+)iFMP7elNnoU*+=V8&Z9m8f}zF zuOwSe4kf%B3?h2Nt0ZafsSJL{u^gU6p5>uLA2Mf0?D6s}#!mVIu4H;3PpayWnaVOx zIEm2&vLtoXCMP-^6U)j~YRAb0Fq1K-CCVsLtM|P4e7I^Nl#GkvJXjY^>j19XTZ}fEO+=9=cppOhL^O1)x z6_<3mkBYg>!xx}r^v2y!9=ds`;_&0!4{g8W@B`Z`4)1$fU3ToOIP9=kiCC`~yabf@BRKQGUu4rlRY+Z)k ztWPV*sWLD5`4W@cBfyx>}<> z$cci-u=(uL687R_hT8n-7e~)4O+)_15BpcR88pQnlv|zv2S&HvHZawWE%6-WfcHLCCpq^Ryyx4Gq4cV3Q28XaKbtr9Evu%z|O^;n&wmFm=9JcMqT=MV@?F`o;}(aJ)kb)U%E zWQej1eh7Jv8tP;P)*p^`M^eF2JBjo1$WQa)jL{D66eKE9`yFQ)nFWIsqP{?CQfN!w ziDnNv`CInPqqnOw&qk5RT9a+@4P#q;?ux*| zF{hb_SeBM8qTWm#uw^};$<$=Ak&}s^5HAv@B$%J7ftN3JgO&?=WQ^Y)BT>qky4mqq znVFq&;ms_b&w%6TjHTk;At8XUCl|{NXVR&;V(>UrZHvX%>jUrgJ(2@#j>R|D;Y>Fk ziiyL*MlOBijd{uz#bQYW?LePS8xrG-_?upSj=yE_w{f1$&m%r4Poh{1M>oYbhNJ|8 zlWIx-1Ifh!IVnUrVW$(Z)<8}4qChl=L(Q3OvDn5`UxOCMXwTxDLBFWt)#%~QV^}Mx zb(a0Cxtju!NGDDM8a(_0D*Y@w60GifUj9D+z~C26{vrPe+03ZbwJFmC2Z5gS+Q#)d zpT7CuUul;7a>bC^;46d;j_!|M_+@aekpCgGI@kQ zUxq)r7UN!#w%?lkG!K>W5E?qlxD#U!OZyupKgEM(ybbMtkcK~+Jj|a%_n+nIFD4)4 zLG=Aip8js~0Z=I7f6CLpOdjAtq$aKS^dhb{BB6xAD4^*>?9tfB29?1_;8aJcG7Eo5 zQ#1l;Itpw*KzS`nMdXu165RLU3l0}wjc1%k*w1l14_%&6&lMc{?!l%gJRp2|dv&-!(AE0TS2WZxQ zVwt(%DXKm|wfE9g>uKHrI%jo1m9!00Ls#`6oj)QS2dJ^?AhigOtu8u9%jB-pMQB_t zx0ku7pGxu06;dO7S}z_4YX!QH3#c(N=?V z{924W3-#N1bQzsZJ#;?ay9jSCrWnrKw^FMTMFkaLY%#x&-wy%B@O_QG!)mp7_*&36 z$$gDM^NYjy@$z+OfjIekT$w+>mYiG#pasFx!K&&3>KUM`mJU<2t7eG$mT|lexc%RU*9{XuJT6Q~H@VLh@ z-hFPN5PYz9fchsD?yc8P{bbe``3wC;1N4Z$aHQTX-O`9|f1xzGN5I&lUB1r@(&HoG ze>!cU?Kr5qfo`VTaGgx=qg}Xe$FE%P2S7i8YcX9<5#X)AB(6A5@<(n2i|-a zs4a(fI-!vjbS}>GTWA$@d@1zNMJc)*bFBrP%R!|BRMrBp?^b$Q2nkQ8t-PH-NN!Nt z$v5zaAm4qKh6+T^Hh>TE4!#lkE2hW!CPAyxT7rt-rqu?S21O0pT;6Wb!$&Zt$RL+N z<#q>}3AN*gJx2gDx3g0aBuyM1tA=eJ@?nT=R(AX18 z@iW+7RWm>bcTr)%UeP3A^0W)bpe4if#V+5M2k99xmD|w#RTmD+%IgcOL|+1{dbi-p z?@j}&zDSVeFA``OenW=6*KYt@LZH@PXyZw!eceT?{e?imbMA9JGU`FWM*k$w-g^Bg z;3)Qc{KWze&j=_=zqF#??~ztxM5cVc%lE<{eNQlRCEaRaV-GzDX|AL@p{a+_wohH3 z0R9i+xrOebXMmMm_?4^1%yN7zMihjj3qeLbcv=tLZ-6~t1zV2bttcqQFiRhLu0~4& z_L~G|QgjoJU~dJA?!k2z#yx}kXMr1WbC*NcS5k+L1{cKevjZr`Vv{dpc{Zve9&0<$~7?2TadrvHFh z{xIKpBFy%T$!w2i_Lq5>y$#IX4rcEFvmXYtANfz1{Rm?-p%RHbfPwhdmSK9iYmk1k zv_>E>M89RkVrJq%7&_H4l=&>RY_1yhAC}EpN3%eBK3O|+0J7SkY2=;AUFA zr=JSzi-&nuS52+t7XBg$7lS-|AG9|M=$y-^lba=Jt5UR|glE`~y8)yOgUCq_U|~Zv z1A$@|J}IfDr|1kCQ417D4qj~OH(TMp5C<3HF~n8Zs~olfw9e-H5E9&=IG69|2QbT2 zn!~$sR|M)a_+xm(z#P+9GHs8IFxA3)&?5e44!MpXm(=bWPTX(s#|^sC;0NVTJpM=F zPx*8^Yt|9}liY8a{S{ETfPRAIGPReisU6^|$I3w>7HEFRcJt-!{`I&{8c1$NBb(=LIBFMt>duejk{6Nyue#(t2Jxe7SLSo~0 zAK)`r<1N`hNNkaG1-HAc%%z|Fc#`;Jb=+rlxRLM<^Et5b^9FhT2q4#h>|m3fW9WUt zb2JVg<&3B2@s;-r*cE&qqh6#&`XM6xkC1`BMDM1bP?&y-?BeHm`xnS2eyJpL5g-F+ zr9kFF>o~PfkkGcxmew{MzCd@GHEtZfK-|lZLNE>Z!dEg=w*uGcRQMKH;3I&mPB;Z# z*r2^hmB<<`f*3Rt} znntg}#9nh~y~bWgjkS(xRKlOh@*lcoA2_l6oes?S0L)_UN-!rFt+2EN4D3>yQafod z-2LP(*lRPS_oZ(rM)bb4!e*qxkq;D6!IXjvZEMp~dEB0Oqc!npshsbW$`B(Q?4tZk z{L#V0C}}9Y6_Tqemxm|pKz}RrEQ?=~S^T}Dp?<7DuL9LV2~@U>w9@{HDE~J^_=i9=SSb0_{RT%^X2lgs;@shm8dQ@J~Z%iYdidC2tYaGH+?s5#BytanD7A>!oxsI2u zR~)4Bv4#4XMd}hrT;fGZHGDC54DkxM-dxTeQ{;5kR$_BjqS6czV~OI?1<|2WXA$nQ z);mSgglA}?T&k=MMt(zl)WP%=6?jCJQ}p`NhIq<_46&k6Xiam!WqlV*qVfc<))f_J zg+xI*x1use$tB}8HHH?#hAtpKT?o&)2s^x}MsoK?y-}m&y2)>`zgk!T;9TP3cWBM&gqM-E0p_zloK| zn}sq4H!x`AWxxiC%@#HqEeMuW5AjtvN9E=L-k58_^Bk&lVq3yC&dB+zkb;Y!f#>h=cOkKt_{aP+b@y}r1;4EBe$Bt(SFN_!_;qXCA^x4!`+KYR bCH|A$_E)>@A87kG=J8^VH~DQu82|qQ4A2mD diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileMessageRepository.class index 9eccca47318d20910bab1985bb9ddd677876cf64..12fe164ed9eed9388592b72b0fc797bdace9638e 100644 GIT binary patch delta 6158 zcmbVQ33!y%)qc-x-^}DoGE5dSF=Sz#Y=j+>0J4aPBp_nI5v&f$0FjW1$)G~DBQ7Y~ z{%yR(t*u&Hr7CTMkx3w8&??ro`fJ^-*4DaKY^`=v`QQ7^gn-iL@%f)j=DYXYbI(2J z-1DAuzWJi{_UO#Vzufl#fLXR&FKn;yf>mv2xHbG{c zC391(xuuGPTD@(U2|qG<+@_95`_b%P3eMKLkphi6{6Vhg4 zmVwzOPQ)DLvDK!{!+ZlLnOK06)l%DP$0>q5<+JCddvPij8>ll;k0t7PTS!h*rAXivtYP7(K%fCor_!>OtfI53Og&@5kyV2;e6HQ zT;S?35yK|+rt^H#FEnuxHmi`UYQ(n%Swn%b;G)JzTdX0QJSaU(7$ z>0FkRU#ughcx{-TYVzV@Y}FQACddhPKA4q3eXDVWCS565(Ahm)9UAUaMwVZ_G2A(< zuDK&-*;I|IOk9oa>Q195?OJ@-!1ql255BLSF_vZe;lPG8T#M^WDC|(Dxz8%NUXU>q zYFbVjx^Sb3n{cx_=q}_YCpLH)9X~d43vN|DPqq9+o$49k4&tXKeug_#)Kge=8+K~t zel8f6@_2K!>SWqNwG7;?c6o}%--TV8=NE#&5YN(0v9?Vy#!4i-(K6vK{K`Z(cB_AR zf_ZnL$HaXaWX{HxXh+10+t6d6SDon1J0XF+CidxDP7gOVE#K7E*3MXuG#R*G6=qKG z%%{v)#El2kJ>LAPerz@H;NYcL$eP>U9^R~N_Tm8S+A|O9=zBykHmE)~#(1?a9yReB zJf?za;Q*2^a(Ts6ps>NxF3)_kA zb&=TeNNdyl!JI`DiQ5#9cvXK!<+Ls_O-aYiOn~i?jnNAt^r>W;;?tzG#%OCS+}zr+ zII>yO{hIX=L$aydjCr|?^g)}NA}x_vWDpCI#ha6WAbTiK=SN#wm}rS7UY(r4u#y6G zV`j0dkXIl@>VeFQ@(Dz(WTn%rO|T!KIahsE=&WvVID^qR@FBd%ZuRSyp9si~HErp(8? zG+1x7d_I>ERxJxmIT>>VUcHUJ;9*{wB&TTY7YQ~eQJvFye;UE(>&x7ld0jMOb+BobH|%jmA1+?cuiiNNjzy zsUy=RzxB#9@~j~Q(-?V9%`SR)`0oTZ5w5-Hm6zmYLtZiERe7x^Q0$P#n=_sA1}{Y3 zH02TT`uM>kGvJ2doJ!(q6z z7g>9dTjme!!3n#yF!>I@b14iI>Oel#IDy{<2%=cxtmK5HC0j0)t$KqlFWjcjT>(4) zfNX!DzU)2}l~?S;C}1zf*;pC|h3hs9q}wrCZ5UM?w@k6g6(l-EF5^SwO4?${6t5nU zwx!Hp*@r6UeoPJ7{nM9+9RBJAYM1w6?j98B)9m}Pun&uFLP2V_v=7Tx?nHWBKURjy zdl4GY3w>B!wh!lOwVG_KL-F(Uu+;`q+x74Q8+Iatn=TIdztf9L2X<3|a!f}J8gLRe zpcPwSxBN5>=~S(h7L@5$i#%22szfculXEgwVG7n_7WbUWU8f+5Mc9nR^dnGA2h_qN zYWwKXt_DxDfi0?M^q6>csG_nw;ONEWHBRcA8*nDDE#TaXYwTD_f|pMHf!4Fr&hpo# zS8lLbE56Eo_~CI@EC~txsK(Wg+d=`?UfeF|#ho=qKkf?-+;^1a2T^i->pwn%+{_w>b?#sFxfR+ExtKwu4f(NSMU-hU_QeCn z0NFKzCX+$KuP@*lsG+>iLjHgD;@=u_^HGNogLM^?TqB<|h@B{(A%5%U`M7|%NifP* z;7VdC#BcpPI;H)Hi2E^<{;jN1KOyJsm{EwIQuNQ5!S3JzcXIO`+h;_fhJ!iswh#Hq&xqJ^)oEgu6xmqyO9 zEVGZG@3`WRf}Qg#o0EV$ry>|XI@$*B^FKP2l5t0%eW62*rDLx!wo>6<;|Ms8;SM+w z;$Q-25HRlsTzz8b$%B4hX+bhGk#~OAs z(@It-OLBT;xCYpnxQFTV*v$D0-o`I^kKGLI-7G>qjD}3Y+LkE+{R`lZr?B^vu zz}*85vL8^}D;t59f?)n^+yrC~pXZbpKhE7b`%|YgGB42$l)8^WITmAcpCO^;W@Q``~vAx z_NvPAK|wk@J_@IO*Whi*$gkd(T2)n${u2H2GP3b1e++p|T~QTUNJANowmD)oA|9LU zU?0L}#OKv*U#hX1#qie6h=;J=R+f-ayEsXQU4mriPgp6M~)N|>i0=}T8;Tiq}^sMquEIoJ#HV-)l_1wBDQz7F(?c8sEDDg1l z#AI?`PZgRe@;s`rfhx36g^g69mB+8=@oiSIQ>~NoXYt)3rNbm@ps&!a!Ps9{ZB z?Q&~VviWt(Ub!4lg_HA~7PG3ITo|`#KAV1HNy*enP}_Bi1q)_`eR8Uf$7Jiq$}!lv z(cH!RWXbW?axHfx+rJ@0M-mahY}V@&S;giM;`4mW)$=iljpq!U%o4Ux1*a6n`Cjr3 z4V-_BftP6m8T@?9`G)&XJl_7eey2+ckS2OVzgIN$%hFI;vKq>=x_&vG-MO4mPh6~I z>#&5+RdmSe%5H186KOS$N}coiDhKNI!cKUWRIqIJRSXRE_N>Um*&~*+vX!y@p2%kg zMpZEJB}lBbo-^sG`J4meu$ZaRddk^cU##cq{HZzdY1}rQqN*vZhJ4jroyyf3R=rxw z#4^4Y4aaDCP#)s#W?+{5S{`QX)Uli2CRbZg)L<1pScUIw7>6l@KRpKxS!&4XsWN52 zafCEj+Kl*N?zbiBNB9P}Qgt?A38&`a!0HpXFyiiz#mA+ny)6Q z$(9wlNxsx;9Cuh6^9Lih9E3|6@&dbv*X8%}2W#|}{89dFjoy)W<%1OMLphWheSBo}iTpjq_gRYX9r@Ri v)bMrrTn;Cf`O`vD%sV#6;Hu3?t-fXR4hpoT%ORVOs?jgDVYVz=4g&uNQEF%z delta 6049 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 diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class index d4ee8b2e658da95e9f44a20563fa3986b3bca7fd..1170ed575cb687485eeefacf4f17fbed1467b157 100644 GIT binary patch literal 11501 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 NVBCBBK7UBz{|7C@+7ti) diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index f95a05c8fe25b7909ee438cb45510634ce101d9a..5af8628d0c01aa1e6bff7060243ba6a34ad7e471 100644 GIT binary patch literal 31193 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νq;!I{kMp<=&c3)i1tuzK}wwfYa@Lv|nCXt+BK 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 diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannel.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannel.java index b2fc2f08..359456e4 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannel.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteChannel.java @@ -4,13 +4,12 @@ import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.dto.UpdateChannelDto; import com.sprint.mission.discodeit.dto.UserStatusUpdateDto; -import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.repository.BinaryContentRepository; import com.sprint.mission.discodeit.service.ReadStatusService; -import com.sprint.mission.discodeit.service.basic.BasicUserStatusService; import com.sprint.mission.discodeit.service.basic.BasicChannelService; import com.sprint.mission.discodeit.service.basic.BasicMessageService; import com.sprint.mission.discodeit.service.basic.BasicUserService; +import com.sprint.mission.discodeit.service.basic.BasicUserStatusService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java index ef8c42c3..6a6cdf44 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteMessage.java @@ -6,7 +6,6 @@ import com.sprint.mission.discodeit.dto.UserStatusUpdateDto; import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.exepction.FailedFound; -import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.service.ChannelService; import com.sprint.mission.discodeit.service.basic.BasicBinaryContentService; import com.sprint.mission.discodeit.service.basic.BasicMessageService; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java index bfc837ed..67d8a8d6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/app/router/RouteUser.java @@ -210,21 +210,25 @@ private void delete() { UUID profileId = userService.find(userName).profileId(); - if(userService.delete(userId)) { // FIXME: BinaryContent, 채널 삭제로 인한 타인의 메시지 삭제 - messageService.deleteAll(userId); - userStatusService.delete(new DeleteUserStatusDto(userId, userName)); - readStatusService.deleteForUser(userId); - binaryContentService.delete(profileId); - if(!allPrivateChannelDto.isEmpty()) - allPrivateChannelDto.forEach(req -> { - channelService.excludePrivateChannel(req.channelName(), userName); - }); - if(channelService.isCeatePrivateChannel(userName)) { - channelService.deleteAll(userName); - messageService.deleteAll(channelService.findChannelId(userName)); + try { + if(userService.delete(userId)) { // FIXME: BinaryContent, 채널 삭제로 인한 타인의 메시지 삭제 + messageService.deleteAll(userId); + userStatusService.delete(new DeleteUserStatusDto(userId, userName)); + readStatusService.deleteForUser(userId); + binaryContentService.delete(profileId); + if(!allPrivateChannelDto.isEmpty()) + allPrivateChannelDto.forEach(req -> { + channelService.excludePrivateChannel(req.channelName(), userName); + }); + if(channelService.isCeatePrivateChannel(userName)) { + messageService.deleteAll(channelService.findChannelId(userName)); + channelService.deleteAll(userName); + } + userState.userState(""); + System.out.println("성공적으로 삭제되었습니다."); } - userState.userState(""); - System.out.println("성공적으로 삭제되었습니다."); + } catch (Exception e) { + System.err.println("[ERROR] " + e); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateBinaryContentDto.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateBinaryContentDto.java index 688ed6c8..14873061 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateBinaryContentDto.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/CreateBinaryContentDto.java @@ -2,8 +2,6 @@ import com.sprint.mission.discodeit.entity.AttachmentType; -import java.util.UUID; - public record CreateBinaryContentDto( AttachmentType type, String filename, byte[] bytes ) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java index bece17c7..68e48cb9 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/dto/UserFinder.java @@ -1,7 +1,5 @@ package com.sprint.mission.discodeit.dto; -import com.sprint.mission.discodeit.entity.UserStatus; - import java.util.UUID; public record UserFinder(UUID id, String name, String userInfo, UUID profileId) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java index 8ec877b0..9279d4a0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java @@ -1,7 +1,6 @@ package com.sprint.mission.discodeit.repository; import com.sprint.mission.discodeit.dto.CreateBinaryContentDto; -import com.sprint.mission.discodeit.entity.AttachmentType; import java.util.List; import java.util.UUID; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java index 4d4ecf74..5df3a256 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -3,17 +3,41 @@ import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.dto.UpdateChannelDto; import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.ChannelType; import java.util.List; +import java.util.UUID; public interface ChannelRepository { boolean save(Channel channel); boolean save(UpdateChannelDto requestDto); String readChannel(String name); + ChannelType getChannelType(String name); + + UUID getChannelId(String name); + List readAllChannel(String userName); List findAllPrivateChannel(String userName); + List accessiblePrivateChannel(String userName); + + ResponseChannelDto requestChannelInfo(Channel channel); + + void includePrivateChannel(String channelName, String userName, UUID userId); + + void excludePrivateChannel(String channelName, String userName); + boolean deleteChannel(String name); + + void deleteAllChannel(String name); + + boolean isPresentChannel(String name); + + boolean isCreatePrivateChannel(String name); + + UUID channelNameToId(String name); + + String channelIdToName(UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java index f4f4bcab..b392ceea 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -2,6 +2,7 @@ import com.sprint.mission.discodeit.dto.MessageRequestDto; +import java.time.Instant; import java.util.List; import java.util.UUID; @@ -10,6 +11,8 @@ public interface MessageRepository { List findAllInChannel(UUID userId); + Instant getLastMessageInChannel(UUID channelId); + List findAllForSender(UUID userId); boolean updateMessage(UUID id, String content); @@ -17,4 +20,6 @@ public interface MessageRepository { UUID delete(UUID userId, UUID id); List> deleteAll(UUID channelId); + + boolean isPresentMessage(UUID userId, UUID id); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusRepository.java index 349a0491..e11fe9ab 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusRepository.java @@ -1,4 +1,21 @@ package com.sprint.mission.discodeit.repository; +import java.time.Instant; +import java.util.Map; +import java.util.UUID; + public interface ReadStatusRepository { + void create(UUID userId, UUID channelId); + + Instant find(UUID id); + + Map findAllByUserId(UUID userId); + + boolean update(UUID userId, UUID channelId); + + boolean delete(UUID id); + + void deleteForChannel(UUID channelId); + + void deleteForUser(UUID userId); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index be6e9eda..592928ce 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -17,4 +17,12 @@ public interface UserRepository { List findAll(); boolean delete(UUID id); + + UUID userNameToId(String name); + + String userIdToName(UUID id); + + boolean checkInvalid(UUID id, String pw); + + boolean duplicateChecker(String checkThis, String findThis); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserStatusRepository.java new file mode 100644 index 00000000..06e3f332 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/UserStatusRepository.java @@ -0,0 +1,20 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.dto.CreateUserStatusDto; +import com.sprint.mission.discodeit.dto.DeleteUserStatusDto; +import com.sprint.mission.discodeit.dto.FindUserStatusDto; +import com.sprint.mission.discodeit.dto.UserStatusUpdateDto; + +import java.util.List; + +public interface UserStatusRepository { + boolean create(CreateUserStatusDto requestDto); + + String find(FindUserStatusDto requestDto); + + List findAll(List requestDto); + + boolean update(UserStatusUpdateDto requestDto); + + boolean delete(DeleteUserStatusDto requestDto); +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java index 308e42e6..037707a6 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileBinaryContentRepository.java @@ -8,7 +8,7 @@ import com.sprint.mission.discodeit.exepction.FailedInit; import com.sprint.mission.discodeit.repository.BinaryContentRepository; import jakarta.annotation.PostConstruct; -import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import java.io.*; @@ -21,8 +21,8 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; -@Slf4j @Repository +@Profile("file") public class FileBinaryContentRepository implements BinaryContentRepository { private final Map fileIdMap = new ConcurrentHashMap<>(); private Path DIRECTORY; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java index 7b16fe37..116eaaaf 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -7,7 +7,7 @@ import com.sprint.mission.discodeit.exepction.*; import com.sprint.mission.discodeit.repository.ChannelRepository; import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import java.io.*; @@ -22,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap; @Repository -@RequiredArgsConstructor +@Profile("file") public class FileChannelRepository implements ChannelRepository { private final Map publicChannelNameMap = new ConcurrentHashMap<>(); private final Map publicChannelIdMap = new ConcurrentHashMap<>(); @@ -130,6 +130,8 @@ public String readChannel(String name) { return privateChannelNameMap.get(name).toString(); throw new FailedFound("Channel not found"); } + + @Override public ChannelType getChannelType(String name) { if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getChannelType(); @@ -138,6 +140,7 @@ public ChannelType getChannelType(String name) { throw new FailedFound("ChannelType not found"); } + @Override public UUID getChannelId(String name) { if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getId(); @@ -167,7 +170,8 @@ public List findAllPrivateChannel(String userName) { return new ArrayList<>(accessiblePrivateChannel(userName).stream().toList()); } - private List accessiblePrivateChannel(String userName) { + @Override + public List accessiblePrivateChannel(String userName) { List requestDto = new ArrayList<>(); privateChannelIdMap.values().stream() .filter(channel -> channel.getAccessibleUser() != null && channel.getAccessibleUser().containsKey(userName)) @@ -176,7 +180,8 @@ private List accessiblePrivateChannel(String userName) { return requestDto; } - private ResponseChannelDto requestChannelInfo(Channel channel) { + @Override + public ResponseChannelDto requestChannelInfo(Channel channel) { String name = channel.getName(); UUID id = channel.getId(); ChannelType type = channel.getChannelType(); @@ -191,10 +196,12 @@ private ResponseChannelDto requestChannelInfo(Channel channel) { return new ResponseChannelDto(name, id, type, createAt, updateAt, createUser, accessableUser); } + @Override public void includePrivateChannel(String channelName, String userName, UUID userId) { privateChannelNameMap.get(channelName).addAccessibleUser(userName, userId); } + @Override public void excludePrivateChannel(String channelName, String userName) { privateChannelNameMap.get(channelName).removeAccessibleUser(userName); } @@ -226,21 +233,25 @@ public boolean deleteChannel(String name) { } } + @Override public void deleteAllChannel(String name) { List channels = privateChannelNameMap.values().stream().filter(channel -> channel.getCreateUser().equals(name)).toList(); channels.forEach(channel -> deleteChannel(channel.getName())); } - /// + + @Override public boolean isPresentChannel(String name) { return publicChannelNameMap.containsKey(name) || privateChannelNameMap.containsKey(name); } - public boolean isCeatePrivateChannel(String name) { + @Override + public boolean isCreatePrivateChannel(String name) { return !privateChannelNameMap.values().stream().filter(channel -> channel.getCreateUser().equals(name)).toList().isEmpty(); } + @Override public UUID channelNameToId(String name) { if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getId(); if(privateChannelNameMap.containsKey(name)) return privateChannelNameMap.get(name).getId(); @@ -248,6 +259,7 @@ public UUID channelNameToId(String name) { throw new NotFound("해당 채널을 찾을 수 없습니다"); } + @Override public String channelIdToName(UUID id) { if(publicChannelIdMap.containsKey(id)) return publicChannelIdMap.get(id).getName(); if(privateChannelIdMap.containsKey(id)) return privateChannelIdMap.get(id).getName(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java index 6b9f2296..9978177a 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -6,7 +6,7 @@ import com.sprint.mission.discodeit.exepction.*; import com.sprint.mission.discodeit.repository.MessageRepository; import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import java.io.*; @@ -20,7 +20,7 @@ import java.util.concurrent.ConcurrentHashMap; @Repository -@RequiredArgsConstructor +@Profile("file") public class FileMessageRepository implements MessageRepository { private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); private final Map> userIdMessageMap = new ConcurrentHashMap<>(); @@ -115,6 +115,7 @@ public List findAllInChannel(UUID channelId) { } } + @Override public Instant getLastMessageInChannel(UUID channelId) { try { return channelIdMessageMap.get(channelId) @@ -209,7 +210,8 @@ public List> deleteAll(UUID id) { return result; } - public boolean check(UUID userId, UUID id) { + @Override + public boolean isPresentMessage(UUID userId, UUID id) { List messages = userIdMessageMap.get(userId); if(messages == null) return false; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java index 924bdd0a..8768824b 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileReadStatusRepository.java @@ -7,7 +7,7 @@ import com.sprint.mission.discodeit.exepction.NotFound; import com.sprint.mission.discodeit.repository.ReadStatusRepository; import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import java.io.*; @@ -19,7 +19,7 @@ import java.util.concurrent.ConcurrentHashMap; @Repository -@RequiredArgsConstructor +@Profile("file") public class FileReadStatusRepository implements ReadStatusRepository { private final Map idReadStatusMap = new ConcurrentHashMap<>(); private final Map> userIdReadStatusMap = new ConcurrentHashMap<>(); @@ -61,6 +61,7 @@ public void init() { } } + @Override public void create(UUID userId, UUID channelId) { ReadStatus readStatus = new ReadStatus(userId, channelId); idReadStatusMap.put(readStatus.getId(), readStatus); @@ -75,10 +76,12 @@ public void create(UUID userId, UUID channelId) { } } + @Override public Instant find(UUID id) { return idReadStatusMap.get(id).getUpdateAt(); } + @Override public Map findAllByUserId(UUID userId) { List tempList = userIdReadStatusMap.get(userId); Map result = new HashMap<>(); @@ -89,6 +92,7 @@ public Map findAllByUserId(UUID userId) { return result; } + @Override public boolean update(UUID userId, UUID channelId) { ReadStatus temp = userIdReadStatusMap.get(userId).stream().filter(readStatus -> readStatus.getChannelId().equals(channelId)).findFirst().orElse(null); @@ -105,6 +109,7 @@ public boolean update(UUID userId, UUID channelId) { } } + @Override public boolean delete(UUID id) { Path path = resolvePath(id); try { @@ -118,11 +123,13 @@ public boolean delete(UUID id) { } } + @Override public void deleteForChannel(UUID channelId) { List temp = channelIdReadStatusMap.get(channelId); temp.forEach(readStatus -> delete(readStatus.getId())); } + @Override public void deleteForUser(UUID userId) { List temp = userIdReadStatusMap.get(userId); temp.forEach(readStatus -> delete(readStatus.getId())); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java index 763b0a99..ec66cf07 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -6,6 +6,7 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.exepction.*; import com.sprint.mission.discodeit.repository.UserRepository; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import java.io.*; @@ -16,12 +17,12 @@ import java.util.concurrent.ConcurrentHashMap; @Repository +@Profile("file") public class FileUserRepository implements UserRepository { private final Map idUserMap = new ConcurrentHashMap<>(); private final Map userNameIdMap = new ConcurrentHashMap<>(); private final Path DIRECTORY; private final String EXTENSION = ".ser"; - private final UUID nullUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); public FileUserRepository() { this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); @@ -131,6 +132,7 @@ public boolean delete(UUID id) { return true; } + @Override public UUID userNameToId(String name) { try { return userNameIdMap.get(name); @@ -139,6 +141,7 @@ public UUID userNameToId(String name) { } } + @Override public String userIdToName(UUID id) { try { return idUserMap.get(id).getName(); @@ -147,7 +150,8 @@ public String userIdToName(UUID id) { } } - public boolean check(UUID id, String pw) { + @Override + public boolean checkInvalid(UUID id, String pw) { try { return !idUserMap.get(id).getPassword().equals(pw); } catch (Exception e) { @@ -155,6 +159,7 @@ public boolean check(UUID id, String pw) { } } + @Override public boolean duplicateChecker(String checkThis, String findThis) { try { if (checkThis.equals("이메일") && idUserMap.values().stream().anyMatch(u -> u.getEmail().equals(findThis))) return true; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserStatusRepository.java index d8c49f17..a9903b8c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserStatusRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserStatusRepository.java @@ -8,7 +8,8 @@ import com.sprint.mission.discodeit.exepction.FailedCreate; import com.sprint.mission.discodeit.exepction.FailedDelete; import com.sprint.mission.discodeit.exepction.FailedInit; -import com.sprint.mission.discodeit.repository.userStatusRepository; +import com.sprint.mission.discodeit.repository.UserStatusRepository; +import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Repository; import java.io.*; @@ -22,7 +23,8 @@ import java.util.concurrent.ConcurrentHashMap; @Repository -public class FileUserStatusRepository implements userStatusRepository { +@Profile("file") +public class FileUserStatusRepository implements UserStatusRepository { private final Map idMap = new ConcurrentHashMap<>(); private final Map userIdMap = new ConcurrentHashMap<>(); private final Map userNameMap = new ConcurrentHashMap<>(); @@ -66,6 +68,7 @@ private Path resolvePath(UUID id) { return DIRECTORY.resolve(id + EXTENSION); } + @Override public boolean create(CreateUserStatusDto requestDto){ UserStatus userStatus = new UserStatus(requestDto.id(), requestDto.name()); idMap.put(userStatus.getId(), userStatus); @@ -74,16 +77,22 @@ public boolean create(CreateUserStatusDto requestDto){ return save(userStatus); } + + @Override public String find(FindUserStatusDto requestDto) { if(!userIdMap.containsKey(requestDto.id())) return ""; return userIdMap.get(requestDto.id()).isOnline(); } + + @Override public List findAll(List requestDto) { List result = new ArrayList<>(); requestDto.forEach(req -> result.add(find(req))); return result; } + + @Override public boolean update(UserStatusUpdateDto requestDto) { UserStatus userStatus = userIdMap.get(requestDto.id()); @@ -96,6 +105,7 @@ public boolean update(UserStatusUpdateDto requestDto) { return save(userStatus); } + @Override public boolean delete(DeleteUserStatusDto requestDto) { UUID id = userIdMap.get(requestDto.id()).getId(); diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFBinaryContentRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFBinaryContentRepository.java new file mode 100644 index 00000000..78ffb193 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFBinaryContentRepository.java @@ -0,0 +1,59 @@ +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.dto.CreateBinaryContentDto; +import com.sprint.mission.discodeit.entity.AttachmentType; +import com.sprint.mission.discodeit.entity.BinaryContent; +import com.sprint.mission.discodeit.exepction.FailedFound; +import com.sprint.mission.discodeit.repository.BinaryContentRepository; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +@Profile("jcf") +public class JCFBinaryContentRepository implements BinaryContentRepository { + private final Map fileIdMap = new ConcurrentHashMap<>(); + + @Override + public UUID create(CreateBinaryContentDto requestDto) { + AttachmentType type = requestDto.type(); + String file = requestDto.filename(); + BinaryContent binaryContent = new BinaryContent(type, file, null); + + fileIdMap.put(binaryContent.getId(), binaryContent); + + return binaryContent.getId(); + } + + @Override + public String find(UUID id) { + try { + return fileIdMap.get(id).toString(); + } catch (Exception e) { + throw new FailedFound("Binary content not found"); + } + } + + @Override + public List findAllByIdIn(List ids) { + List result = new ArrayList<>(); + ids.forEach(id -> result.add(fileIdMap.get(id).toString())); + return result; + } + + @Override + public boolean delete(UUID id) { + fileIdMap.remove(id); + return true; + } + + @Override + public void delete(List ids) { + ids.forEach(this::delete); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java index 42b37951..c2e9c91e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -1,103 +1,194 @@ -//package com.sprint.mission.discodeit.repository.jcf; -// -//import com.sprint.mission.discodeit.dto.ResponseChannelDto; -//import com.sprint.mission.discodeit.entity.Channel; -//import com.sprint.mission.discodeit.repository.ChannelRepository; -// -//import java.util.List; -//import java.util.Map; -//import java.util.UUID; -//import java.util.concurrent.ConcurrentHashMap; -// -//public class JCFChannelRepository implements ChannelRepository { -// private final Map channelNameMap = new ConcurrentHashMap<>(); -// private final Map channelIdMap = new ConcurrentHashMap<>(); -// -// /// Singleton -// private JCFChannelRepository() {} -// private static class Holder { -// private static final JCFChannelRepository INSTANCE = new JCFChannelRepository(); -// } -// public static JCFChannelRepository getInstance() { -// return Holder.INSTANCE; -// } -// -// -// /// interface -// @Override -// public boolean save(Channel channel) { -// channelNameMap.getOrDefault(channel.getName(), -// channelNameMap.put(channel.getName(), channel)); -// return true; -// } -// -// @Override -// public boolean save(String oldName, String newName) { -// Channel channel = channelNameMap.get(oldName); -// -// try{ -// channelNameMap.put(newName, channel); -// channelNameMap.remove(channel.getName()); -// channel.channelUpdater(newName); -// return true; -// } catch (Exception e) { -// return false; -// } -// } -// -// @Override -// public String readChannel(String name) { -// try { -// return channelNameMap.get(name).toString(); -// } catch (Exception e) { -// return null; -// } -// } -// -// @Override -// public List readAllChannel(String userName) { -// return List.of(); -// } -// -// @Override -// public List findAllPrivateChannel(String userName) { -// return List.of(); -// } -// -// public UUID readChannelId(String name) { -// try { -// return channelNameMap.get(name).getId(); -// } catch (Exception e) { -// return null; -// } -// } -// -// @Override -// public boolean deleteChannel(String name) { -// UUID id = channelNameMap.get(name).getId(); -// channelNameMap.remove(name); -// channelIdMap.remove(id); -// return true; -// } -// -// /// -// public boolean isPresentChannel(String name) { -// return channelNameMap.getOrDefault(channelNameMap.get(name).getName(), null) == null; -// } -// -// public UUID channelNameToId(String name) { -// try { -// return channelNameMap.get(name).getId(); -// } catch (Exception e) { -// return null; -// } -// } -// -// public String channelIdToName(UUID id) { -// try { -// return channelIdMap.get(id).getName(); -// } catch (Exception e) { -// return null; -// } -// } -//} +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.dto.ResponseChannelDto; +import com.sprint.mission.discodeit.dto.UpdateChannelDto; +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.ChannelType; +import com.sprint.mission.discodeit.exepction.DoNotUpdatePrivateChannel; +import com.sprint.mission.discodeit.exepction.FailedFound; +import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Repository; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +@Profile("jcf") +public class JCFChannelRepository implements ChannelRepository { + private final Map publicChannelNameMap = new ConcurrentHashMap<>(); + private final Map publicChannelIdMap = new ConcurrentHashMap<>(); + private final Map privateChannelNameMap = new ConcurrentHashMap<>(); + private final Map privateChannelIdMap = new ConcurrentHashMap<>(); + + /// interface + @Override + public boolean save(Channel channel) { + if (channel.getChannelType() == ChannelType.PUBLIC) { + publicChannelNameMap.put(channel.getName(), channel); + publicChannelIdMap.put(channel.getId(), channel); + } else { + privateChannelIdMap.put(channel.getId(), channel); + privateChannelNameMap.put(channel.getName(), channel); + } + + return true; + } + + @Override + public boolean save(UpdateChannelDto requestDto) { + String oldName = requestDto.oldName(); + String newName = requestDto.newName(); + if(!isPresentChannel(oldName)) return false; + if(privateChannelNameMap.containsKey(oldName)) + throw new DoNotUpdatePrivateChannel("Do not update private channel"); + Channel channel = publicChannelNameMap.get(oldName); + publicChannelNameMap.put(newName, channel); + publicChannelNameMap.remove(oldName); + channel.channelUpdater(newName); + return true; + } + + @Override + public String readChannel(String name) { + if(publicChannelNameMap.containsKey(name)) + return publicChannelNameMap.get(name).toString(); + if(privateChannelNameMap.containsKey(name)) + return privateChannelNameMap.get(name).toString(); + throw new FailedFound("Channel not found"); + } + + @Override + public ChannelType getChannelType(String name) { + if(publicChannelNameMap.containsKey(name)) + return publicChannelNameMap.get(name).getChannelType(); + if(privateChannelNameMap.containsKey(name)) + return privateChannelNameMap.get(name).getChannelType(); + throw new FailedFound("ChannelType not found"); + } + + @Override + public UUID getChannelId(String name) { + if(publicChannelNameMap.containsKey(name)) + return publicChannelNameMap.get(name).getId(); + if(privateChannelNameMap.containsKey(name)) + return privateChannelNameMap.get(name).getId(); + + throw new FailedFound("ChannelId not found"); + } + + @Override + public List readAllChannel(String userName) { + List result = new ArrayList<>(); + + /// public + result.addAll(publicChannelNameMap.values().stream().map(this::requestChannelInfo).toList()); + + /// private + result.addAll(accessiblePrivateChannel(userName).stream().toList()); + return result; + } + + @Override + public List findAllPrivateChannel(String userName) { + if(accessiblePrivateChannel(userName).isEmpty()) + throw new NotFound("권한이 있는 Private Channel이 없습니다!"); + + return new ArrayList<>(accessiblePrivateChannel(userName).stream().toList()); + } + + @Override + public List accessiblePrivateChannel(String userName) { + List requestDto = new ArrayList<>(); + privateChannelIdMap.values().stream() + .filter(channel -> channel.getAccessibleUser() != null && channel.getAccessibleUser().containsKey(userName)) + .forEach(channel -> requestDto.add(requestChannelInfo(channel))); + + return requestDto; + } + + @Override + public ResponseChannelDto requestChannelInfo(Channel channel) { + String name = channel.getName(); + UUID id = channel.getId(); + ChannelType type = channel.getChannelType(); + Instant createAt = channel.getCreateAt(); + Instant updateAt = channel.getUpdateAt(); + String createUser = channel.getCreateUser(); + Map accessableUser = null; + try { + accessableUser = channel.getAccessibleUser(); + } catch (Exception ignore) {} + + return new ResponseChannelDto(name, id, type, createAt, updateAt, createUser, accessableUser); + } + + @Override + public void includePrivateChannel(String channelName, String userName, UUID userId) { + privateChannelNameMap.get(channelName).addAccessibleUser(userName, userId); + } + + @Override + public void excludePrivateChannel(String channelName, String userName) { + privateChannelNameMap.get(channelName).removeAccessibleUser(userName); + } + + @Override + public boolean deleteChannel(String name) { + UUID id; + boolean isPrivate = privateChannelNameMap.containsKey(name); + + if(isPrivate){ + id = privateChannelNameMap.get(name).getId(); + } else { + id = publicChannelNameMap.get(name).getId(); + } + + if(isPrivate){ + privateChannelNameMap.remove(name); + privateChannelIdMap.remove(id); + } else { + publicChannelNameMap.remove(name); + publicChannelIdMap.remove(id); + } + return true; + } + + @Override + public void deleteAllChannel(String name) { + List channels = privateChannelNameMap.values().stream().filter(channel -> channel.getCreateUser().equals(name)).toList(); + + channels.forEach(channel -> deleteChannel(channel.getName())); + } + + @Override + public boolean isPresentChannel(String name) { + return publicChannelNameMap.containsKey(name) || privateChannelNameMap.containsKey(name); + } + + @Override + public boolean isCreatePrivateChannel(String name) { + return !privateChannelNameMap.values().stream().filter(channel -> channel.getCreateUser().equals(name)).toList().isEmpty(); + } + + @Override + public UUID channelNameToId(String name) { + if(publicChannelNameMap.containsKey(name)) return publicChannelNameMap.get(name).getId(); + if(privateChannelNameMap.containsKey(name)) return privateChannelNameMap.get(name).getId(); + + throw new NotFound("해당 채널을 찾을 수 없습니다"); + } + + @Override + public String channelIdToName(UUID id) { + if(publicChannelIdMap.containsKey(id)) return publicChannelIdMap.get(id).getName(); + if(privateChannelIdMap.containsKey(id)) return privateChannelIdMap.get(id).getName(); + + throw new NotFound("해당 채널을 찾을 수 없습니다"); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java index c6fe9c33..80ec58fb 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -1,98 +1,152 @@ -//package com.sprint.mission.discodeit.repository.jcf; -// -//import com.sprint.mission.discodeit.dto.MessageResponseDto; -//import com.sprint.mission.discodeit.entity.Message; -//import com.sprint.mission.discodeit.repository.MessageRepository; -//import lombok.RequiredArgsConstructor; -//import org.springframework.stereotype.Repository; -// -//import java.time.ZoneId; -//import java.time.format.DateTimeFormatter; -//import java.util.*; -//import java.util.concurrent.ConcurrentHashMap; -// -//@Repository -//@RequiredArgsConstructor -//public class JCFMessageRepository implements MessageRepository { -// private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); -// private final Map> userIdMessageMap = new ConcurrentHashMap<>(); -// private final Map messageIdMap = new ConcurrentHashMap<>(128); -// private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); -// -// @Override -// public String create(String content, UUID channelId, UUID userId) { -// Message message = new Message(channelId, userId, content); -// channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); -// userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); -// return ""; -// } -// -// @Override -// public List findAllInChannel(UUID channelId) { -// List result = new ArrayList<>(); -// try{ -// channelIdMessageMap.get(channelId) -// .stream().sorted(Comparator.comparing(Message::getCreateAt)) -// .forEach(message -> { -// result.add(new MessageResponseDto( -// message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() -// )); -// }); -// return result; -// } catch (Exception e) { -// return List.of(); -// } -// } -// -// @Override -// public List findAllForSender(UUID userId) { -// List result = new ArrayList<>(); -// try{ -// userIdMessageMap.get(userId) -// .stream().sorted(Comparator.comparing(Message::getCreateAt)) -// .forEach(message -> { -// result.add(new MessageResponseDto( -// message.getId(), message.getChannelId(), message.getUserId(), FORMATTER.format(message.getCreateAt()), FORMATTER.format(message.getUpdateAt()), message.getContent() -// )); -// }); -// } catch (Exception e) { -// return List.of(); -// } -// return result; -// } -// -// @Override -// public boolean updateMessage(UUID id, String content) { -// try { -// messageIdMap.get(id).updateMessage(content); -// return true; -// } catch (Exception e) { -// return false; -// } -// } -// -// @Override -// public UUID delete(UUID userId, UUID id) { -// Message message = userIdMessageMap.get(userId).stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); -// UUID channelId = message.getSendChannelId(); -// try { -// userIdMessageMap.get(userId).remove(message); -// channelIdMessageMap.get(channelId).remove(message); -// messageIdMap.remove(message.getId()); -// return true; -// } catch (Exception e) { -// return false; -// } -// } -// -// @Override -// public List delete(UUID channelId) { -// -// return null; -// } -// -// public boolean check(UUID userId, UUID id) { -// Object result = userIdMessageMap.get(userId).stream().filter(m -> m.getId().equals(id)).findFirst().orElse(null); -// return result == null; -// } -//} +package com.sprint.mission.discodeit.repository.jcf; + + +import com.sprint.mission.discodeit.dto.MessageRequestDto; +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.exepction.FailedDelete; +import com.sprint.mission.discodeit.exepction.FailedFound; +import com.sprint.mission.discodeit.repository.MessageRepository; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Repository; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +@Profile("jcf") +public class JCFMessageRepository implements MessageRepository { + private final Map> channelIdMessageMap = new ConcurrentHashMap<>(); + private final Map> userIdMessageMap = new ConcurrentHashMap<>(); + private final Map messageIdMap = new ConcurrentHashMap<>(128); + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초").withZone(ZoneId.of("Asia/Seoul")); + + @Override + public UUID create(String content, UUID channelId, UUID userId, List attachmentIdList) { + Message message = new Message(channelId, userId, content, attachmentIdList); + + messageIdMap.put(message.getId(), message); + channelIdMessageMap.computeIfAbsent(channelId, m -> new ArrayList<>()).add(message); + userIdMessageMap.computeIfAbsent(userId, m -> new ArrayList<>()).add(message); + + return message.getId(); + } + + @Override + public List findAllInChannel(UUID channelId) { + List result = new ArrayList<>(); + try{ + List messages = channelIdMessageMap.get(channelId); + messages.stream().sorted(Comparator.comparing(Message::getCreateAt)) + .forEach(message -> { + result.add(new MessageRequestDto( + message.getId(), + message.getChannelId(), + message.getUserId(), + message.getAttachmentIds(), + FORMATTER.format(message.getCreateAt()), + FORMATTER.format(message.getUpdateAt()), message.getContent() + )); + }); + return result; + } catch (Exception e) { + return List.of(); + } + } + + @Override + public Instant getLastMessageInChannel(UUID channelId) { + try { + return channelIdMessageMap.get(channelId) + .stream().max(Comparator.comparing(Message::getCreateAt)).orElse(null).getCreateAt(); + } catch (NullPointerException e) { + throw new FailedFound("Last message not found"); + } + } + + @Override + public List findAllForSender(UUID userId) { + List result = new ArrayList<>(); + List messages = userIdMessageMap.get(userId); + try{ + if(messages != null) { + messages.stream().sorted(Comparator.comparing(Message::getCreateAt)) + .forEach(message -> { + result.add(new MessageRequestDto( + message.getId(), + message.getChannelId(), + message.getUserId(), + message.getAttachmentIds(), + FORMATTER.format(message.getCreateAt()), + FORMATTER.format(message.getUpdateAt()), + message.getContent() + )); + }); + } + } catch (Exception e) { + throw new FailedFound("Message not found"); + } + return result; + } + + @Override + public boolean updateMessage(UUID id, String content) { + Message message = messageIdMap.get(id); + if (message == null) throw new FailedFound("Message not found"); + + message.updateMessage(content); + + return true; + } + + @Override + public UUID delete(UUID userId, UUID id) { + List userMessages = userIdMessageMap.get(userId); + if (userMessages == null) throw new FailedFound("Message not found(Delete)"); + + Message message = userMessages.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null); + if (message == null) throw new FailedFound("Message not found(Delete)"); + + UUID channelId = message.getSendChannelId(); + try { + userIdMessageMap.get(userId).remove(message); + + if(channelIdMessageMap.containsKey(channelId)) { + channelIdMessageMap.get(channelId).remove(message); + } + messageIdMap.remove(message.getId()); + return message.getId(); + } catch (Exception e) { + throw new FailedDelete("Message delete failed"); + } + } + + @Override + public List> deleteAll(UUID id) { + List> result = new ArrayList<>(); + if(channelIdMessageMap.containsKey(id)) { + new ArrayList<>(channelIdMessageMap.get(id)).forEach(message -> { + result.add(message.getAttachmentIds()); + delete(message.getUserId(), message.getId()); + }); + } + if(userIdMessageMap.containsKey(id)) { + new ArrayList<>(userIdMessageMap.get(id)).forEach(message -> { + result.add(message.getAttachmentIds()); + delete(message.getUserId(), message.getId()); + }); + } + return result; + } + + @Override + public boolean isPresentMessage(UUID userId, UUID id) { + List messages = userIdMessageMap.get(userId); + if(messages == null) return false; + + Object result = messages.stream().filter(message -> message.getId().equals(id)).findFirst().orElse(null); + return result != null; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFReadStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFReadStatusRepository.java new file mode 100644 index 00000000..f02725cc --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFReadStatusRepository.java @@ -0,0 +1,73 @@ +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.entity.ReadStatus; +import com.sprint.mission.discodeit.exepction.NotFound; +import com.sprint.mission.discodeit.repository.ReadStatusRepository; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Repository; + +import java.time.Instant; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +@Profile("jcf") +public class JCFReadStatusRepository implements ReadStatusRepository { + private final Map idReadStatusMap = new ConcurrentHashMap<>(); + private final Map> userIdReadStatusMap = new ConcurrentHashMap<>(); + private final Map> channelIdReadStatusMap = new ConcurrentHashMap<>(); + + @Override + public void create(UUID userId, UUID channelId) { + ReadStatus readStatus = new ReadStatus(userId, channelId); + idReadStatusMap.put(readStatus.getId(), readStatus); + userIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(readStatus); + channelIdReadStatusMap.computeIfAbsent(userId, id -> new ArrayList<>()).add(readStatus); + } + + @Override + public Instant find(UUID id) { + return idReadStatusMap.get(id).getUpdateAt(); + } + + @Override + public Map findAllByUserId(UUID userId) { + List tempList = userIdReadStatusMap.get(userId); + Map result = new HashMap<>(); + for(ReadStatus temp : tempList) { + result.put(temp.getChannelId(), temp.getUpdateAt()); + } + + return result; + } + + @Override + public boolean update(UUID userId, UUID channelId) { + ReadStatus temp = userIdReadStatusMap.get(userId).stream().filter(readStatus -> readStatus.getChannelId().equals(channelId)).findFirst().orElse(null); + + if(temp == null) throw new NotFound("상태값을 찾지 못했습니다."); + + temp.updateReadAt(); + return true; + } + + @Override + public boolean delete(UUID id) { + ReadStatus temp = idReadStatusMap.remove(id); + userIdReadStatusMap.remove(temp.getUserId()); + channelIdReadStatusMap.remove(temp.getChannelId()); + return true; + } + + @Override + public void deleteForChannel(UUID channelId) { + List temp = channelIdReadStatusMap.get(channelId); + temp.forEach(readStatus -> delete(readStatus.getId())); + } + + @Override + public void deleteForUser(UUID userId) { + List temp = userIdReadStatusMap.get(userId); + temp.forEach(readStatus -> delete(readStatus.getId())); + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java index ba508faa..b39a5592 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -1,107 +1,106 @@ -//package com.sprint.mission.discodeit.repository.jcf; -// -//import com.sprint.mission.discodeit.dto.CreateUserDto; -//import com.sprint.mission.discodeit.dto.UserFinder; -//import com.sprint.mission.discodeit.entity.User; -//import com.sprint.mission.discodeit.entity.UserStatus; -//import com.sprint.mission.discodeit.repository.UserRepository; -// -//import java.util.*; -//import java.util.concurrent.ConcurrentHashMap; -// -//public class JCFUserRepository implements UserRepository { -// private final Map usersMap = new ConcurrentHashMap<>(); -// private final Map usersName = new ConcurrentHashMap<>(); -// -// private JCFUserRepository() {} -// private static class Holder { -// private static final JCFUserRepository INSTANCE = new JCFUserRepository(); -// } -// public static JCFUserRepository getInstance() { -// return Holder.INSTANCE; -// } -// -// @Override -// public boolean createUser(CreateUserDto dto) { -// List userSet = dto.toEntity(); -// User user = (User) userSet.get(0); -// UserStatus userStatus = (UserStatus) userSet.get(1); -// -// if(isDuplicateName(user.getName())) return false; -// usersName.put(user.getName(), user.getId()); -// usersMap.put(user.getId(), user); -// return true; -// } -// -// @Override -// public boolean updateUser(UUID userId, String reName, String rePassword, String reMail, String rePhoneNumber) { -// usersMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber); -// return false; -// } -// -// @Override -// public UserFinder find(String name) { -// return usersMap.get(usersName.get(name)).toString(); -// } -// -// @Override -// public List findAll() { -// List result = new ArrayList<>(); -// usersMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> result.add(user.toString())); -// return result; -// } -// -// @Override -// public boolean deleteUser(UUID id) { -// usersName.remove(usersMap.get(id).getName()); -// usersMap.remove(id); -// return true; -// } -// -// /// check method -// private boolean isDuplicateName(String name) { -// try { -// usersName.get(name); -// return true; -// } catch (Exception e) { -// return false; -// } -// } -// -// public boolean isPresentUser(Object arg) { -// try { -// if(arg instanceof String) { -// usersMap.get(usersName.get((String) arg)); -// } else if(arg instanceof UUID){ -// usersMap.get((UUID) arg); -// } else { -// return true; -// } -// } catch (Exception ignored) {} -// return false; -// } -// -// public UUID userNameToId(String name) { -// try { -// return usersName.get(name); -// } catch (Exception e) { -// return null; -// } -// } -// -// public String userIdToName(UUID id) { -// try { -// return usersMap.get(id).getName(); -// } catch (Exception e) { -// return null; -// } -// } -// -// public boolean check(UUID id, String pw) { -// try { -// return !usersMap.get(id).getPassword().equals(pw); -// } catch (Exception e) { -// return true; -// } -// } -//} +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.dto.CreateUserDto; +import com.sprint.mission.discodeit.dto.UpdateUserDto; +import com.sprint.mission.discodeit.dto.UserFinder; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.exepction.FailedFound; +import com.sprint.mission.discodeit.repository.UserRepository; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Repository; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +@Profile("jcf") +public class JCFUserRepository implements UserRepository { + private final Map idUserMap = new ConcurrentHashMap<>(); + private final Map userNameIdMap = new ConcurrentHashMap<>(); + + @Override + public UUID create(CreateUserDto dto) { + User user = dto.toEntity(); + userNameIdMap.put(user.getName(), user.getId()); + idUserMap.put(user.getId(), user); + + return user.getId(); + } + + @Override + public boolean update(UpdateUserDto requestDto) { + UUID userId = requestDto.id(); + String reName = requestDto.reName(); + String rePassword = requestDto.rePassword(); + String reMail = requestDto.reMail(); + String rePhoneNumber = requestDto.rePhoneNumber(); + UUID reProfileId = requestDto.reProfileId(); + + idUserMap.get(userId).updateUser(reName, rePassword, reMail, rePhoneNumber, reProfileId); + return true; + } + + @Override + public UserFinder find(String name) { + User user = idUserMap.get(userNameIdMap.get(name)); + UUID id = user.getId(); + String userName = user.getName(); + + return new UserFinder(id, userName, user.toString(), user.getProfileId()); + } + + @Override + public List findAll() { + List result = new ArrayList<>(); + idUserMap.values().stream().sorted(Comparator.comparing(User::getName)).forEach(user -> { + UUID id = user.getId(); + String userName = user.getName(); + result.add(new UserFinder(id, userName, user.toString(), user.getProfileId())); + }); + return result; + } + + @Override + public boolean delete(UUID id) { + userNameIdMap.remove(idUserMap.get(id).getName()); + idUserMap.remove(id); + return true; + } + + @Override + public UUID userNameToId(String name) { + try { + return userNameIdMap.get(name); + } catch (Exception e) { + throw new FailedFound("Do not found this user : " + name); + } + } + + @Override + public String userIdToName(UUID id) { + try { + return idUserMap.get(id).getName(); + } catch (Exception e) { + throw new FailedFound("Do not found this user : " + id); + } + } + + @Override + public boolean checkInvalid(UUID id, String pw) { + try { + return !idUserMap.get(id).getPassword().equals(pw); + } catch (Exception e) { + return true; + } + } + + @Override + public boolean duplicateChecker(String checkThis, String findThis) { + try { + if (checkThis.equals("이메일") && idUserMap.values().stream().anyMatch(u -> u.getEmail().equals(findThis))) return true; + if (checkThis.equals("전화번호") && idUserMap.values().stream().anyMatch(u -> u.getPhoneNumber().equals(findThis))) return true; + if (checkThis.equals("사용자명") && userNameIdMap.get(findThis) != null) return true; + } catch (Exception ignored) {} + return false; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserStatusRepository.java new file mode 100644 index 00000000..d13b0fa0 --- /dev/null +++ b/discordit/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserStatusRepository.java @@ -0,0 +1,69 @@ +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.dto.CreateUserStatusDto; +import com.sprint.mission.discodeit.dto.DeleteUserStatusDto; +import com.sprint.mission.discodeit.dto.FindUserStatusDto; +import com.sprint.mission.discodeit.dto.UserStatusUpdateDto; +import com.sprint.mission.discodeit.entity.UserStatus; +import com.sprint.mission.discodeit.repository.UserStatusRepository; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +@Repository +@Profile("jcf") +public class JCFUserStatusRepository implements UserStatusRepository { + private final Map idMap = new ConcurrentHashMap<>(); + private final Map userIdMap = new ConcurrentHashMap<>(); + private final Map userNameMap = new ConcurrentHashMap<>(); + + @Override + public boolean create(CreateUserStatusDto requestDto){ + UserStatus userStatus = new UserStatus(requestDto.id(), requestDto.name()); + idMap.put(userStatus.getId(), userStatus); + userIdMap.put(requestDto.id(), userStatus); + userNameMap.put(requestDto.name(), userStatus); + + return true; + } + + @Override + public String find(FindUserStatusDto requestDto) { + if(!userIdMap.containsKey(requestDto.id())) + return ""; + return userIdMap.get(requestDto.id()).isOnline(); + } + + @Override + public List findAll(List requestDto) { + List result = new ArrayList<>(); + requestDto.forEach(req -> result.add(find(req))); + return result; + } + + @Override + public boolean update(UserStatusUpdateDto requestDto) { + UserStatus userStatus = userIdMap.get(requestDto.id()); + + if(requestDto.time() == null) { + userStatus.lastAccessTimeUpdater(); + } + + userStatus.lastAccessTimeUpdater(requestDto.time()); + + return true; + } + + @Override + public boolean delete(DeleteUserStatusDto requestDto) { + userIdMap.remove(requestDto.id()); + idMap.remove(userNameMap.remove(requestDto.name()).getId()); + + return true; + } +} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/repository/userStatusRepository.java b/discordit/src/main/java/com/sprint/mission/discodeit/repository/userStatusRepository.java deleted file mode 100644 index 2da7b0e6..00000000 --- a/discordit/src/main/java/com/sprint/mission/discodeit/repository/userStatusRepository.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.sprint.mission.discodeit.repository; - -public interface userStatusRepository { -} diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java index 80acdc10..37f5720c 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/auth/AuthService.java @@ -20,7 +20,7 @@ public void login(LoginDto requestDto) { try { UUID id = userRepository.userNameToId(requestDto.name()); - if(!userRepository.check(id, requestDto.password())) { + if(!userRepository.checkInvalid(id, requestDto.password())) { userState.userState(requestDto.name(), id); } else throw new Exception(); } catch (Exception ignore) { diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java index 344b4a9e..d9912148 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicBinaryContentService.java @@ -1,7 +1,6 @@ package com.sprint.mission.discodeit.service.basic; import com.sprint.mission.discodeit.dto.CreateBinaryContentDto; -import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.repository.BinaryContentRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java index e6728ad8..587baa9e 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -1,14 +1,13 @@ package com.sprint.mission.discodeit.service.basic; -import com.sprint.mission.discodeit.UserState; import com.sprint.mission.discodeit.dto.FindChannelDto; import com.sprint.mission.discodeit.dto.ResponseChannelDto; import com.sprint.mission.discodeit.dto.UpdateChannelDto; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.ChannelType; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.repository.file.FileMessageRepository; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.repository.MessageRepository; +import com.sprint.mission.discodeit.repository.UserRepository; import com.sprint.mission.discodeit.service.ChannelService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -20,9 +19,9 @@ @Service @RequiredArgsConstructor public class BasicChannelService implements ChannelService { - private final FileChannelRepository channelRepository; - private final FileUserRepository userRepository; - private final FileMessageRepository messageRepository; + private final ChannelRepository channelRepository; + private final UserRepository userRepository; + private final MessageRepository messageRepository; @Override public boolean isPresent(String name) { @@ -95,6 +94,6 @@ public void excludePrivateChannel(String channelName, String userName) { @Override public boolean isCeatePrivateChannel(String userName) { - return channelRepository.isCeatePrivateChannel(userName); + return channelRepository.isCreatePrivateChannel(userName); } } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java index 7bb9878e..7752dd83 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -2,12 +2,11 @@ import com.sprint.mission.discodeit.dto.CreateMessageDto; import com.sprint.mission.discodeit.dto.MessageRequestDto; -import com.sprint.mission.discodeit.entity.AttachmentType; import com.sprint.mission.discodeit.exepction.FailedFound; -import com.sprint.mission.discodeit.repository.file.FileBinaryContentRepository; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.repository.file.FileMessageRepository; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.repository.BinaryContentRepository; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.repository.MessageRepository; +import com.sprint.mission.discodeit.repository.UserRepository; import com.sprint.mission.discodeit.service.MessageService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -18,14 +17,14 @@ @Service @RequiredArgsConstructor public class BasicMessageService implements MessageService { - private final FileUserRepository userRepository; - private final FileChannelRepository channelRepository; - private final FileMessageRepository messageRepository; - private final FileBinaryContentRepository binaryContentRepository; + private final UserRepository userRepository; + private final ChannelRepository channelRepository; + private final MessageRepository messageRepository; + private final BinaryContentRepository binaryContentRepository; private final UUID nullUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); public boolean isPresent(UUID userId, UUID messageId) { - return messageRepository.check(userId, messageId); + return messageRepository.isPresentMessage(userId, messageId); } @Override @@ -69,7 +68,7 @@ private String formattingMessage(MessageRequestDto dto) { @Override public boolean update(UUID userId, UUID messageId, String content) { - if (messageRepository.check(userId, messageId)) { + if (messageRepository.isPresentMessage(userId, messageId)) { throw new FailedFound("해당 ID를 찾지 못했습니다."); } diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java index 31a3fea7..f1d020ee 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicReadStatusService.java @@ -1,7 +1,7 @@ package com.sprint.mission.discodeit.service.basic; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.repository.file.FileReadStatusRepository; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.repository.ReadStatusRepository; import com.sprint.mission.discodeit.service.ReadStatusService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -13,8 +13,8 @@ @Service @RequiredArgsConstructor public class BasicReadStatusService implements ReadStatusService { - private final FileReadStatusRepository readStatusRepository; - private final FileChannelRepository channelRepository; + private final ReadStatusRepository readStatusRepository; + private final ChannelRepository channelRepository; @Override public void create(UUID userId, UUID channelId){ diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java index 96fa675e..03d0281d 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -4,8 +4,8 @@ import com.sprint.mission.discodeit.dto.UpdateUserDto; import com.sprint.mission.discodeit.dto.UserFinder; import com.sprint.mission.discodeit.exepction.FailedFound; -import com.sprint.mission.discodeit.repository.file.FileBinaryContentRepository; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.repository.BinaryContentRepository; +import com.sprint.mission.discodeit.repository.UserRepository; import com.sprint.mission.discodeit.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -16,8 +16,8 @@ @Service @RequiredArgsConstructor public class BasicUserService implements UserService { - private final FileUserRepository userRepository; - private final FileBinaryContentRepository binaryContentRepository; + private final UserRepository userRepository; + private final BinaryContentRepository binaryContentRepository; private final UUID nullUUID = UUID.fromString("00000000-0000-0000-0000-000000000000"); public UUID userNameToId(String name) { @@ -31,7 +31,7 @@ public boolean isPresent(String name) { @Override public boolean isValid(UUID userId, String password) { - return userRepository.check(userId, password); + return userRepository.checkInvalid(userId, password); } @Override diff --git a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserStatusService.java b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserStatusService.java index 19b91d5a..a1efbbe0 100644 --- a/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserStatusService.java +++ b/discordit/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserStatusService.java @@ -6,8 +6,8 @@ import com.sprint.mission.discodeit.dto.UserStatusUpdateDto; import com.sprint.mission.discodeit.exepction.DoNotDuplicate; import com.sprint.mission.discodeit.exepction.NotFound; -import com.sprint.mission.discodeit.repository.file.FileUserRepository; -import com.sprint.mission.discodeit.repository.file.FileUserStatusRepository; +import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.repository.UserStatusRepository; import com.sprint.mission.discodeit.service.UserStatusService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -15,8 +15,8 @@ @Service @RequiredArgsConstructor public class BasicUserStatusService implements UserStatusService { - private final FileUserStatusRepository userStatusRepository; - private final FileUserRepository userRepository; + private final UserStatusRepository userStatusRepository; + private final UserRepository userRepository; public void create(CreateUserStatusDto requestDto){ FindUserStatusDto dto = new FindUserStatusDto(requestDto.id(), requestDto.name()); diff --git a/discordit/src/main/resources/application.yml b/discordit/src/main/resources/application.yml index b9923ff0..b5354ef4 100644 --- a/discordit/src/main/resources/application.yml +++ b/discordit/src/main/resources/application.yml @@ -1,4 +1,5 @@ spring: application: name: "discodeit" - + profiles: + active: file From daa5b7590db10e33545d9f950889184f6fc7ffc1 Mon Sep 17 00:00:00 2001 From: Alpha Date: Sun, 8 Feb 2026 17:30:39 +0900 Subject: [PATCH 34/35] =?UTF-8?q?Feat:=20=EC=8B=AC=ED=99=94=EA=B3=BC?= =?UTF-8?q?=EC=A0=95=20Application.yml=EC=9D=84=20=ED=86=B5=ED=95=B4=20fil?= =?UTF-8?q?e,=20jcf=EB=A5=BC=20=EC=84=A0=ED=83=9D=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EA=B2=8C=20=ED=96=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes discordit/.gradle/file-system.probe | Bin 8 -> 8 bytes .../com/sprint/mission/discodeit/Input.class | Bin 2552 -> 2527 bytes .../file/FileChannelRepository.class | Bin 14493 -> 14493 bytes .../file/FileMessageRepository.class | Bin 14242 -> 14242 bytes .../repository/file/FileUserRepository.class | Bin 11501 -> 11501 bytes .../compileJava/previous-compilation-data.bin | Bin 31193 -> 31941 bytes .../com/sprint/mission/discodeit/Input.java | 4 +- .../config/FileRepositoryConfig.java | 46 ++++++++++++++++++ .../discodeit/config/JCFRepositoryConfig.java | 46 ++++++++++++++++++ .../discodeit/service/auth/AuthService.java | 4 +- discordit/src/main/resources/application.yml | 7 ++- 12 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/config/FileRepositoryConfig.java create mode 100644 discordit/src/main/java/com/sprint/mission/discodeit/config/JCFRepositoryConfig.java diff --git a/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/discordit/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 5b5045e336c107ea5a119be531a47b35634e02f6..fe21c6f9d380200e88340b2277c30541f2f9ceae 100644 GIT binary patch literal 17 VcmZQxwaR1i+k`Ae1~A~*2mmx|1f&1} literal 17 VcmZQxwaR1i+k`Ae1~A}g1OPNU1atrZ diff --git a/discordit/.gradle/file-system.probe b/discordit/.gradle/file-system.probe index 58872460babf7ae1f8d6bbd9a2a2d0604a6b78b8..86a6209ef6a00b23770f44e4cce222f6ac20dfe7 100644 GIT binary patch literal 8 PcmZQzV4PzUt)c+{1&aZJ literal 8 PcmZQzV4S0I*SPF4$b+n(p*TAl_KPZ=pxA>Z_9=< zZkU@+WRFm%;q>cT(xYL3m18=-uM4J&-=XZ|M|b2wVky+)9$cvX0nJmEGC=? zVu>V$Xd4<+VBEGeX4oGmG#(ELWROf2iDZ++TGH5pmlAv&AeSl%sb(ED6wp9Xf5p-g zlUs~~&A237!dBwgro-DwX9xN0WEZ=2bPx5Ea+19?YHgCfTl*f$`ln<6noau&pqyC} zhEgG$gL=s!z2dMes%2EeK8}c~6>?NJACpBrEu7$@Os{FZF5OG*U(wK?7k|Y#PZPo! zwb>}Ev*d8jwk3G2E1}ZaEatqJ7BLsZw2HauY!iA_s1@2Sv_q)R)_E#IZV*V9!njQy zckHO=mgBCp_gKJvdnvKi*)6_D!S*V^KItAq0{O1=eo)3w zD*2@-Mmf%yS|7KUQ{Fo!h+_+mP1ffJkG=F*9tmx6=`*%AqPq zmCJtd7D_efi?aE?L^EmYeCy4G>SEJpgZ<^E*Vg$v!d9rCl`LeH{MTqac@&XvBhtqs h(wVJ~<04bHXXy`QvJ5{PwBJa!b!QA2uN}*H_#X(7o}>T( delta 654 zcmWNPSx6L66o$VW3XN$sq1mRUlVpx-v&Co|W-jeJW!sCHSlJ9sq)#nAlxf?ogwTX~ zDSF5p>Y=ovji`r$Xd#dmnzSb|B3}agxexcA^Z)lh_x|T}g}OpLV_7LPiDMR%NMi=+ zWRpP=nKs!~VO(~*>w_;x$UNLy0SXC{PYDGq!^1kf)Zk+ei)f&V160sRB~4UE>*my$ zg==t#l*)QC*}z;jlE)_eY^IzoT3dB>8xeMJgq|*e{7ji5+A&A)#URaY&UTk~mDO1ltvLXul%f3!Pum94*T^XPie#Qmu53 zOX>urwAk~x9-Eq5?>r@>Rmf=}Z9>|GbUH66Yn8pI>?LJ8l=a%MyDq7d@pQ|OYm{-_ z{&aUcZisu6Y231B^4gp|!tco3UUGVjYH95Qi|r?r>@ipgggi&#k!Tk)`$oAu0*8hGwc`saZ{yZ!I%f zhmAUxvYrhD+0G_mn}vipLp`k$=+b_Tjg0C%#n$@SQd+$PI?Q?722 z!ENl^RoEV35h}Q+2vKV3mB*<3^+>2!B7L!cd4DWlzsl~bY(R>GRP#`=9WM0eEI4k&|k}oDyIGpfZqCZGt0vA8cJl7p- z!i>7=<3BQkPo(nMbh@)mwL1|1MmKMD^G-KGYd}oVyco9QVE*&9Uf6TM&b0nv@34~lLQ*&s43vdTm~N#?jG->Ngcp3|8D z;wVvDOBKFMJuBDPE7Y@9YUyfI=B={IO}n?$DlzZ9Uo(AD_LHJ_o2H(v-Kp`_=v+&& S8S%ZaicE_?Xl0mh{_+2eQIpmH delta 640 zcmWNP+e=hY7{z~wva+x+G&LJW87Cbr$8j!NVq;BYIzp6o(JmBaS>7t2vVx?GnO4@; zd?~~!?WMvvgkm?5=w?@nDD0u9{(zn%S{&GW^YL5XUhCT@)*5Ra9dRY5F`K0y`au4tT#S!9{HS-*T99ORP63X1Tunw6B0&wBjqB)~yRX{3@CHquH3Cy3gq?q(~v ziG^&&$re^ot#2!P*e+~`kUGvt+{rGkY42kjlR8ha+n!iHWu@(B9`!6yZ!d>*$1y@2 z*X?blKj(L1I|-b`L%Up^lCRUI$75%nmFAo@7nGt?-Y!zi4LR+TzkbRYu=nORTfUoe zbxSb^$z(`jW5R9|;f|~iQ^kn93{$K6d7V4CYyZppV+HR^_CT^xb$qC_wxT^!lre=G zr;Q0Zc+3D#C3?m^o{OHe-T6){`K64#BAM4R^`0_5Nb<$hdM6UTtLYDtn4y55CZk}` znlY0Fb@3lrz$a4qYgkKwppllFwSfvNV!8uiD{Q6%UmYQJE+R!Q?$nQxt=&VAsLoZC Tm?yy(mfv)QYAlEO7JBy|Bkq(V diff --git a/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class b/discordit/build/classes/java/main/com/sprint/mission/discodeit/repository/file/FileUserRepository.class index 1170ed575cb687485eeefacf4f17fbed1467b157..b8930dd08bafce0546c8227fa7fd9544ee65bf0e 100644 GIT binary patch delta 438 zcmW-d%S)7D6vlraInpOgW{Yk%mqeZUW>WDwg%+qyYK|0WnQ1p^p`wV5C8?N|wHT#@ zQ;?xTk~z8(X4BF|D_ghiKky%zRS)ql&f%Q*xt!-{;Amh!9ZZ%|z-fv(!+FjT<^op< z&`pSb%DAt|AQyQ`B~wJ0Bg%VfSth{;8u>^QYh1RU!C7B3$7snVLQ$u-6(4P)Y!~c0 zHFR)|PP(|sEm7Yg#Us^WZipnsDm}T?aNcR{6|9dUeK^Tox$2jjd;eW{3~_}AB6~=$ zz~ek-k|(@Wo!2g_evjeY@3I5OKO*H(LB|9gw=d;i-6@XqjA~}Axne6YPazAEd5xb} zoM4f&yrGV_I(^CV72n*9rppRt#lBZ&T%&|foZ_=3A{lpG@oW%e(+(r~l5GX@gWK## zG0OzI_9vP)^TIab#hq>I@zD2@>2F6_Mlp} delta 434 zcmWNNOHWf#6otPVt?`-^tOFs2mRcz7Eu>WxDp5!f8(#8A1hF()6(^{KK#_-Hs5~6- zP7V+>Q6e$&7@2g!kbxr|Gvy!f2Rd?P5BAPE*=z0foh8qbzcao>3Fj%IkYcW>{CKIy zN4usz%IN1hDFVDA#0X(N;P9Dhmbk+zwX6~63w7qm_uh4nbJXYJrD5yleOxq2_5l?n zh|xj=t*Umqct|fDq}5;2ERhb@>CCPB^HyVz)_S?bV=l}6Do-dODfg6IpHjy&38s0( zbKdfTVF^sBPwQ`A^C1Jde}QAmJt*hbT79F{A+ufn)gI*{8KO*@yTM)WM=mfUn_1js zDd3aB&neWrqA!?y@Q1ym*JVLjF+VF7?F~F^a)m7u4=vi?gy_2v?U=uzyyuso?9r_Q z2037eLvs?&SbL_`X)`U3-{hQxdrYz3$!}cuOc+;W!oDT#+d^Ao79ywKO1V|(<|w6N X6;gMIh*eCCZkTN4A1iDURr~(|t2|k# diff --git a/discordit/build/tmp/compileJava/previous-compilation-data.bin b/discordit/build/tmp/compileJava/previous-compilation-data.bin index 5af8628d0c01aa1e6bff7060243ba6a34ad7e471..454a6129239b4e1e00d2a92598f462c327d20684 100644 GIT binary patch literal 31941 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 literal 31193 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 Date: Wed, 11 Feb 2026 08:14:50 +0900 Subject: [PATCH 35/35] gitignore edit --- discordit/.gitignore | 210 +++++++++++++++--- .../.gradle/8.14.4/checksums/checksums.lock | Bin 0 -> 17 bytes .../8.14.4/checksums/md5-checksums.bin | Bin 0 -> 30147 bytes .../8.14.4/checksums/sha1-checksums.bin | Bin 0 -> 43337 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .../.gradle/8.14.4/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/8.14.4/fileHashes/fileHashes.bin | Bin 0 -> 18697 bytes .../.gradle/8.14.4/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes discordit/.gradle/8.14.4/gc.properties | 0 9 files changed, 176 insertions(+), 34 deletions(-) create mode 100644 discordit/.gradle/8.14.4/checksums/checksums.lock create mode 100644 discordit/.gradle/8.14.4/checksums/md5-checksums.bin create mode 100644 discordit/.gradle/8.14.4/checksums/sha1-checksums.bin create mode 100644 discordit/.gradle/8.14.4/executionHistory/executionHistory.lock create mode 100644 discordit/.gradle/8.14.4/fileChanges/last-build.bin create mode 100644 discordit/.gradle/8.14.4/fileHashes/fileHashes.bin create mode 100644 discordit/.gradle/8.14.4/fileHashes/fileHashes.lock create mode 100644 discordit/.gradle/8.14.4/gc.properties diff --git a/discordit/.gitignore b/discordit/.gitignore index c2065bc2..bb905cd0 100644 --- a/discordit/.gitignore +++ b/discordit/.gitignore @@ -1,37 +1,179 @@ -HELP.md -.gradle -build/ -!gradle/wrapper/gradle-wrapper.jar -!**/src/main/**/build/ -!**/src/test/**/build/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache -bin/ -!**/src/main/**/bin/ -!**/src/test/**/bin/ - -### IntelliJ IDEA ### +# Created by https://www.toptal.com/developers/gitignore/api/windows,macos,intellij+all,java +# Edit at https://www.toptal.com/developers/gitignore?templates=windows,macos,intellij+all,java + +### Intellij+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + .idea + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format *.iws -*.iml -*.ipr + +# IntelliJ out/ -!**/src/main/**/out/ -!**/src/test/**/out/ - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ - -### VS Code ### -.vscode/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij+all Patch ### +# Ignore everything but code style settings and run configurations +# that are supposed to be shared within teams. + +.idea/* + +!.idea/codeStyles +!.idea/runConfigurations + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows,macos,intellij+all,java \ No newline at end of file diff --git a/discordit/.gradle/8.14.4/checksums/checksums.lock b/discordit/.gradle/8.14.4/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..4392a487bba84cc0be80572e3badc8bf90999ef5 GIT binary patch literal 17 VcmZQBJ+LcHl0TG_0SuUS0{|#t1DpT= literal 0 HcmV?d00001 diff --git a/discordit/.gradle/8.14.4/checksums/md5-checksums.bin b/discordit/.gradle/8.14.4/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..b7be7f874356a752237e987eec788d8fb6192bc5 GIT binary patch literal 30147 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 literal 0 HcmV?d00001 diff --git a/discordit/.gradle/8.14.4/checksums/sha1-checksums.bin b/discordit/.gradle/8.14.4/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..674793b4ff051e12c18b7287966eec711a8101d8 GIT binary patch literal 43337 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 Mz}FbEufoaxKM8D^Z~y=R literal 0 HcmV?d00001 diff --git a/discordit/.gradle/8.14.4/executionHistory/executionHistory.lock b/discordit/.gradle/8.14.4/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..8c0651e84eac45ddc9fe820aa9441f0d40f12f62 GIT binary patch literal 17 ScmZR6D_kgJTqfkf00jUdeFBsK literal 0 HcmV?d00001 diff --git a/discordit/.gradle/8.14.4/fileChanges/last-build.bin b/discordit/.gradle/8.14.4/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/discordit/.gradle/8.14.4/fileHashes/fileHashes.bin b/discordit/.gradle/8.14.4/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..6b97a148f43c5dd9c79db881df1b185136baf2d7 GIT binary patch literal 18697 zcmeI(K`4V^9LMno@5Qq0vP?<2ut_f^hsEJlqow7bYz}U-gGiQ)!oh)q6Rji)2b5My zYHnLQIgstCEwA;j5{yz9U zZY_tG)cHZ~Vm@;DwmD?y!zxdt(ru%G!+twISNZHs*J9Ft)^6udDpzlrC#^M}2q1s} z0tg_000IagfB*srAbb%7 literal 0 HcmV?d00001 diff --git a/discordit/.gradle/8.14.4/gc.properties b/discordit/.gradle/8.14.4/gc.properties new file mode 100644 index 00000000..e69de29b