From fd0e31b698c82e3c9eddf696a667433fb4ddab88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Thu, 6 May 2021 23:32:41 +0900 Subject: [PATCH 01/31] [#1] Create `oauth_access_token` table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사용자의 access token을 저장하고 있는 테이블 추가 --- BE/baseball/src/main/resources/schema.sql | 31 ++++++++++++++++++---- docs/database/Schema.mwb | Bin 16806 -> 17898 bytes docs/database/Schema.png | Bin 79963 -> 93864 bytes 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/BE/baseball/src/main/resources/schema.sql b/BE/baseball/src/main/resources/schema.sql index a8b66992e..2ab0fdb22 100644 --- a/BE/baseball/src/main/resources/schema.sql +++ b/BE/baseball/src/main/resources/schema.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Wed May 5 17:44:37 2021 +-- Thu May 6 23:30:17 2021 -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -73,13 +73,13 @@ DROP TABLE IF EXISTS `baseball`.`user` ; CREATE TABLE IF NOT EXISTS `baseball`.`user` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NOT NULL, - `game_id` BIGINT NULL, - `venue` CHAR(4) NULL, + `current_game_id` BIGINT NULL, + `current_game_venue` CHAR(4) NULL, PRIMARY KEY (`id`), - INDEX `fk_user_game1_idx` (`game_id` ASC), + INDEX `fk_user_game1_idx` (`current_game_id` ASC), UNIQUE INDEX `email_UNIQUE` (`email` ASC), CONSTRAINT `fk_user_game1` - FOREIGN KEY (`game_id`) + FOREIGN KEY (`current_game_id`) REFERENCES `baseball`.`game` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) @@ -194,6 +194,27 @@ CREATE TABLE IF NOT EXISTS `baseball`.`batting_history` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `baseball`.`oauth_access_token` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `baseball`.`oauth_access_token` ; + +CREATE TABLE IF NOT EXISTS `baseball`.`oauth_access_token` ( + `id` BIGINT NOT NULL, + `user_id` BIGINT NOT NULL, + `resource_owner` VARCHAR(45) NOT NULL, + `access_token` VARCHAR(100) NOT NULL, + PRIMARY KEY (`id`), + INDEX `fk_oauth_access_token_user1_idx` (`user_id` ASC), + INDEX `uk_user_id_resource_owner` (`user_id` ASC, `resource_owner` ASC), + CONSTRAINT `fk_oauth_access_token_user1` + FOREIGN KEY (`user_id`) + REFERENCES `baseball`.`user` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/docs/database/Schema.mwb b/docs/database/Schema.mwb index 6d3addeb63f72a0cf925fade9e98b3818115a34c..cbb44ab8056f019d453a5cf578b50b5144efcaf7 100644 GIT binary patch delta 17641 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 literal 16806 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 diff --git a/docs/database/Schema.png b/docs/database/Schema.png index 92506db293737be0bab9bf9bef2adaaafe7d3786..92bf89005eb6d978613810a3c064ea2174b3b2e2 100644 GIT binary patch literal 93864 zcmb5W1z1(vx<9-Kku51A5=ux52oj>ClypnCbW3+ArGzL*mvnc7l!$yBt?auxhAepx@apeArae4Mh{T^S$MHEwhB#)n0arfF=CMPPDC-0~v*+Tt) z6--mKC+LwiQZb@6~b0`8oy%D;lVUbJ8i*qpi1y;p9?pu`n^^XA~q7 zXyl=*YBrL{&O{Z*5T|5{R*Z!{yVgmnW|}=SGjsSBGZh!*&-v=e*?)Un8TjlqzeKX6 zNBb+y$alHrDmUX2UVr`?X1%43Z{hPu94=8|B*N{aOjBA#-PIs^`s5woz_rpCsr2q| z-z@&TD0Z0|u2=Zky`f0@o7XtFF_u;xm9VLDIFA@un2PiBEiYeX`pD@jyw$CUj@03w zC}&Eo+w?BqGU}d3X(_C0)j7Y5_-QIg5^bzeQnEPxqwy!lqc1Hg$TYvF-D*r9wo{0z zT?jENIsOcY6P4#H$`cceFplT9v-j~4h*s3@7lIn`D8W~PF@g;$2@`u%HYOF+NAi6< zM8o34ekEM5(Y?32`)3RX1Ge4JWr?R!o|afu2D|TziuE(6^hCZ6$c%ELX&aOLE_Kra zr_RV%HAUr#vKQ24KQE&2E7qjUH$vrhKLt^u)F%12j7Q2 zmBvE%RDS=Y(14TBQi#2h^l3g-{*Z-IzO_|NLB$QzBb#F7p|@{5sd+byQc~0De}wQK z&Hw1?6t~Qe(&b0KO(tKs#mT@*|GR@b<@Z&bdo?lCOf2MFUIKcQ$0rJDPZ;9sj}5ny z&k!?G-}-)0IIF6C<41Gv(XIG4+?Q!R{U#ymm}8Q>b2o*>016@Z)vcC!&}y zhVH=3eVu9^j}q~mlQ5r_k)_*0LNz@T9`~_pDrse>n&r)sIY;dVPhOmST<;S}m2li% z>$$eM&>g(q3k~?5|Y7S(>OW_cqXQ{+56>f0Q8;j3gWBDEt1U z_Q6)c7(3lA&J7Mbl}wp@MF%__+=MD*GpkqNTNK~gi_>3%l1tqz1<8cB5Y3q!L5P`y zqv*zizNbweh06NVJ|&E@>L2Odec1oRL5u#32+Ko_%v|52%}?QKP>L@sdnYGsvA)oE zCNE8VDb*v4b4?i=ZP1AGW*;Nn9*-h=8;%eNOk%cQ&*sz+Gc$8LGlyZnGHgi#AJ)(g zRwZB|em-(ULzw2`=~1%X)EdsUM0ujCijD9XF79<&)O?34gujXQbXs0^j_4{q=I2U1 zhAGDo1;c;LsRx{5{ZHVBvkO)1Wi&>xNd=)uAGTOIO?Q774YFwJ9HDTyY;YuiMj`0x zoWH!nueEh?B=xhP`s=6jm;;{_S|%2Dazsp?ri2y3H=($=P&raFEOIcL>!@5Af4p8| z!ZU?v@+!j8MX;2A>Z`9p`aeEbkw%vNgCoM^ujCGHveQ6L9>$f?2$QR2z=Z6^oqC_;an)UjyX6ecaNDVkj z^;gR;ETn8oTMymYpwaddjtZwh_)1S--?)P%e24VMWmz2@QY4gBtoSR1XqQAFJWHa` zR~+kvS5rO!{`P=g| zS!SBQ&!UC2slykluG3w5`D9P4S=-)@k=W49=|a`Q!hCARz)TJDPJ~z=p>!{^5XX~k z|7zQX>^swsTs_faYS#Gbe3-UOs)Br2Q*_UI)+e2xA4QY+XgxqyUcr{_>I&Y_;fv?> zOEg&CP4o0HbxG~`)w5~6Bxb&bctXj})!$x8$IZugDkkQyAnvd1a(Na`>;cIA%)9Yg zoB($E}NRr&V)OEmwhAT&gHkIRdwDoSGV z@Ga(zb5rMRCbr}`YX3)nm-AJIEQa~hw&3=Ful0{>q-49lEVw}Ya&KrOfED!=gE=X8Gt0d#l09!T}8fLxP`>q8y zH#ch}0VY+3-=Fs@Dmpxuxb7v{aUmNy|NGgwZyLjy_|ew1p#3k2v*_5^Sf{n&m1^yp z7cY+~u&_eR2eSCRkc0?-;n{_*7?h7WIc9@7ij#FtYa_)eNlBC6qL`d|7LZ0JCIslE z?gth+^%6979!Et%L05Og_ZGV?{f-b+gMS&Mg#$v6&S(1lb&v}2UFI)ER^?Q&Za<%A zDk>{_j(AvDzjwP>Q+VGN78X8DSIi%}#i}bKEiEk}F*BwCt?#gMME6EW8+)8g?z7GD zYTJ#m%By(fgZyeo_9>pbovlH52jdR*_D1ZZD+Adlo{chek)1~HI@=_EaZD%YzsI^C zGnu4|Z(;AHp2rmiDIKlMXZJ_~`k(>^>r>?zU z@LE;bVqx@yL(vbpmX?-{JC`khpU4*f^lX*1jYZ>ir1VG8yR$pkO*;Z^yGEj-qU!3z z2y6<0Pv^vU-p8Ss&5;aBcF@FLCr*(C3sMr4qOUW}V<^Vb; z1>I+E_qnVlejegpgF8p`UIHDvmr^14`EQBL=;-K!rJ)be(TD4!k>gbr6$OH?-@NGz zCE=*C7D#Dw-q6%Z+uGXlSsN}aD`Tgpr{BCkHCk>u-Q?5MqMw$YezY-O?YPpfI?Cm* zpmuor7#SDCnqT?siphy}=&v}{*A34|tyNW30aM}&>tMwU@2OXYRR&~cWRO;#8B8M?oc1H} zvBUb$2h=U=KTD|}Ja|vjsrr)}?!aN9s9vTLznfAjn}gwtBDrxxOrgwLadQnfn3#Wm zI&cbePX~e{~`#qoh0zRu|^yl`kTigj3nLFAoYX3qpj|M2+H+cB#7OO!G^u zTldv9HOI!sn+}GxE>3!Uu)mI+p(6wZ1#Qk`b+D>SOe{ATg>ynELt{21H7U&9h&EI)w6+q>Yd@Cq4s93;)`pr=6>%mnwxV!C7Q+*E7A;F%x30rqo_Z5e z`RlU5M`#fP*5?UYqDAt(qQhR=xxuVem`2X8_@1+CX^-Z)fw}P=$x>&6a-{%Gk+Mmh zLbC{q7tI)U13{tkcinSy?{zU@IgojFJYBW58IWxXph8C_|3^PqmN);#QWYpk-&)3r zYMP>Y;1=;Pjse|w7)82iSFU(pd6EXwvkho;L zXOpzZJL=K@4x^oBmj%S!I>+r2HWIa2lOFGP?PNSCZo1A#clw{mdEqEAU(i}>K+y5D zVJ)V?13jQ==ZL70sj&O|x6RpfZR^7Rk2*BbkB-PKdViV=Zc<)y!_-^LCta4q?Y*4c z2+0Se!9x)rqD{DH^81wFu^9AzeWgm&l_PsO?+fG6bWb>^o*;rB>yug2 zvn_>dK`sTwg{tlt`?YQloR-={tZpX);-09pM?n-N3+lXJZEr0${a;bE>JS6g=ECi% z(sQ}PV#3jF`Y>mq|ADC&LjUf;YnGB}@&nl1j439*&y%~mvdt*XKRU7yS{wOK`H6ei z32vM@O`|jq?PVWOJl8Opn}~H$wI;c768I*rCQoUY+Xx#m@dFukx3XzT+v(tNYjM+Q zPZ<9$5`%Jw)r8USbs?~qik4d17 zGm-xx)PuE^zwFsX6gjCgG(M70Vn!QjtZD=ok0S!vABs;`+p;0hv5D{D2Y=Y5N8&xM zapkM=qJF%h6_{GJz5s&!sb;K{@HbjZ(*|o_V3&w3k1Z0S1 zexnb1y&s9z)e@jzc{MNp&Xt@f#6%aWImBv9u=&H~70ApL)8v(DaNtL_oLPa;%>1L- zQ|SkU-3px2{mj;!eLk*BO$ddP4F9{8!-qaKHxKrc3y&^5Xsw2|40SKMkWD=iQAF3# zAL#$`cM#m1lpZ{(uFiX5rJqqJap~;7jBkCO26da$QC*mQfsTac% zc1*-N(awky~8K`oZq`*>CZ;x6ONrZ`>%indCVmN>y+@*~YO!vi<*hfOE?ZLv+uM}qW}s(TUuO}{8LC_k7Eu0RcmBL>UU+`;wsvNg$s$JB zkL1SUA3i+KgZu;f*ZZhC%>?})=4jZ;v!hRRR582K!-2m z?)&9{26uqb+S(JJ1F*EbewCDzOf`6LXJ!{YI-^hVWOrDUv9-0;@sN|ll^xK~(1@g$ zzt75g6>%dnW(7$qtfK+9PivHC9~+m1PvG-$3iK`zf-riVcJ`BY7lnZxC0xIoBDi)I zF8tZ_bzy-PJ`0?T(HG^~Q}^AK)N^k>C5~@h8)HY)9|(V0UZ_ud!SxILIi#bRQGD&@ zzh-7-p*F9NmdD)JxrP8}92yo@IPLK51Eb*iF*SEbj$(R^DM>6~MJK0&FK=$3=mX|y zY;1(S$fQ$_Y=xg+5mS-z;QBKj24)vfkC6&YDB z#Z2tVhk{LR8_h?8jt9GoMQhpF*;}LK^jusj%tTkOT9SR++o zqREE>p`@$~FKfIw_lT0>a#;Kh+==Tj&}y`dmW_>#kO++BUFoQwvR&NifAQsNUcHntPRl1ynD;cc8=8M%c%F{w!^?nn$GmJbF6VO!y;_`n~THgha{V zT}(*4kNf^|i{I7S^@-PM zX?Hm|IO4O+)a&mIy+%^+1Ft7alLV|-4%^)ws0E|~zlkvOn|134+wjP7C z%E0hIZ9YBOo1dGLh`7z~?&$XbA6*F4pn>=A-%Dk(^YHLIeE1M9gO#T6UrCPN6Ug2-Fpcm7_r;z=BZlhH36A{ zJ)a9<%}~l!VA$W;$(@b^Xk_fP;qC1WRg2TL@U3<@0o5R-aCMrhA7~?Rvvk!tU+*b> z+JGr5KUna2A1?~W*=zr_OYpz-_XAZuv9F`KA$PvJ!8vT)!4zgK#qepds2poQ!7D!9 zPoIA`3ukF#V?*%9zh`NU=N*lPw)XnM!WG2Ln>Xvs*$#%ba-ZFsoS5+by}>OnFMr8n zKeQ-64JD=`3bC}Xs0k;!79e~-<~I`g@FjcnlQq%k=*Qs$HdH`l=W}MCkO?fJ2LTEZhXm`Sm;`p$2id^M?dPdDtM}? zsp)+-wLcGq%)TPl&R?&7C6I9bcx{*1FM>c|V{x{g8JS}+5HXN41P&>^5Kyah5i!td z(7Z+{mPLO2W2)17W?7Qej6(Mz%`|osk9bblYtg&&=8jz;FcfK&KfMU4xq?Mhfy}Qs z=)g>kd4_f4Z0r?n^RonZs~LmEK9!wI)8PjXjEUX*+(-p{D6E?6|&F#`)sI$$c$iVal0VL2iFt zI_<*zOFlR#R!P%W+#sm*g2%-)lWd?k7~8MWmiyxiyF+_v%L=|$E#RC-(6Ej+;2aNV2q z4+|5tINXhQGMI_4DV()7`Et>`aegfG@k-vm$4Q ziHW!4WSo)v<^n0Kpq;Ug9&U^$kll0NA&$=?p=5k2QmPrz-(L`D#HA@EQcB8_PFv|j z8k|MiXfPsU^%ugkv3XEC(PMshbBID!fYHe@YN{@x(O}jyFqPszZIT?-ll|EZGSfqA zR*(IXv|oKMi_iC37v(uEhUSB6J(`Y>LM9K0?jEDY2(+$N*YA^jouB{Cb9rTz+T}OA zUYUMnmp}2G8PP=vRvJ-djFJj8aJ*Bb+fZlRMHFZNV&3A)%44gaY(*VcMR^|-KM)}>f@HP4 zW?}?H+7ZnYKHj@28GDOFs`9~Dx)U}RkN?9`xn#^gQb%L3Wp6JrZCTyaDiM`+lGQn| z-MxbL>4MEiHc}`-mJ!^H?Kj`cVM$zv<-bAv1Brf<*@_4X?UAnP|ig<`S ziD=eXZM}sl(-!TtIyOArP$h)#|J%3kNI9}*s|NGci;Y{s)s2?~e_7t5Zvqj*jd||v z6gC&l{H2pt;qLoER#bb?oj~y_DPcnp3wYM->?9^84j1b+nf0ZC$W=u{K4`%9|8CyM zO6;@HJVZ2imyZnRN)~>VTy@y}&HC@&4VNm-?t;{Zw!`}b+|$`&M<~r>lk!$u{ZrR3 z+1hgE$a*d>0;EJ=1Sz_dV!^X}l_2@0Jd28sUL9r}P+4QU3vH8)?ZrxeCd=!qPPYjq zBe8QTKd7eX4wwx&IcbJH%^%7ca?(^1c~2-=?ntfdg8AwyLY`c(F7hm2ua^>0ljzCG zy0luogT?K&jgdK|K=T)ZfVcg7c~C9$v_vI$+Em!*JBgMG3@!6F_!|G=8V(U>P+q}e_`d_Ic!gC70YI*Og7c z86iJKmg~KxuXVvg_XXEu`{LG?UfK64-!}nY`kI=6cizCdG|B%=%#RCQ?j`8q*1uNJ zg=CWXPC{54-$`W(r}nnDXScW!q6?KU=X-SY^w=(d4WL@kTZxapV=vqMgi!KY03W?a zNFC3OU<32$C9~&Jikxi(bc^WSh?W~=?$tJAuTPBfv*fzjIe~<+IGcZ|m;M&AyOA^* zaQ6mc8+*C@FdN%VqqHF;X!DD!)49jQ*YyCq@>>E-PUoX|OXIHMqO zoTWC+c5DOZV4y!+)CWM3-`!aR8?2MR6;2TC_3E7qYif>Hhw_0iJy?Dk@oT2VF9@4N zNl`J?QoGUfaaY;Pmp#K|B-|G9;U#ko}g?H_~bhw({|=CS8h zHFMLmWBUK%w>lq`s03?0OpV3F&MsUI!EQ169$SU`Bvrv`tRk1?=~R=?1>koaQp4xZ zLA1}FzDszGRj)BIE>05v3!Jsn2C&f0$$9|0Unsg0xQkiR#4sz3Ha#vv z%31ZU5@DxX!%x3;bpd)Jy086nl{zRO-~c|0k^f+A{Cnc#f$?#zk>tookpV|l)nUN- zU0q!$&0oG`^t}XIO9Z$rny={Hox?+CXJ_x7rfZ7gCdO;M9FL5)k1^+c+%baGM|mn- zN-(L=x0$;H`3I-N#Vww?)$05{Pl$Nsxj|v+8WR;I8_U)*JnRgF6>1%G7XZODt!kS~ zL|kHk)>Za@BBvM#c;x{c`}^9p_Ot^X`)!XM7N4o9Ipp^YZ8dqG*i-yDHp%SgSxtTO zZP5_2%yxbU*7&QOCHr(1vVW7)KMFEw^!xV)y}Qru*C%^g=pE|Pa(S@!BZ)TzEGn>n26L5rlKIyb7r{F_Zp9Ncs~iIp?IqgPdr{x!+r#N; zXuf>?Di_abetvoasCOV+UeIw_L0$dl?m`zHg@BCWGZ~rCprCf%txw8=Kt`*=$hhw_ zGBOGZPJaYoc9G2Q0lc#9xt)SSFHn`xPZRZ9jh1ZeYSS2qc-=XSwQOUgFSuF3;o(<(B_rupsxR#Kw_~3OR%Hd}7Ny-}uS*NfExN`wtHbk-kZ6y4lBW+0 zqQ1U91lx<5W?;Yt1qCB|K3?GQA@FbBthAkO?Cph=4(ZLCR}h{87vMP^9US1`;@-c1 zU*N@zZ+$(l%azH20SjuMiT)%T5jKlA##Ummk_jY$JEG@yzL-|-5 z!?8=m)$j#pxLPR3!EAQ$GJcUWpKi|c;6W)+a$u@pvSD;t&_&SlE4>4RAVO%07Pl*m}CLq2*LpoD%<0y~lpa#o|e~C7O&Y z5MvhR381@^lat@RNsY+*sOY_-1Wg9+=JMvI+`xWssz`ennalCE!P#9lWKs|w1vx3{ z>e?EFaDXC%9W|s+^RL_t<7{tlk6tDgpP0B~ekTx*qS0!U-7lU4=WA}brH{=UvI1K_ z1$vR?;eHDRPft$}#;`&#>~w>x&oVK~_FAg%q<(!-zNhE5aMOnR{{0{NJObG*KBAh1 zhj!8o)145WSnL$MBS*s|=5vkBy7V$-%)=%JmOj0#vOtcjlP zT@+u+*H8z!A9P(s0Atb_#zmC5o5e5gxYiY4$3|iS*@Aze*6=o@UL#+Sns5wYrl3Mc zG?P|Z4BeZ*qoC!=ICU6vx8q0qjCFX(<&obMHg=sn;4tk%eg>A=9pLp)JU}#J2=3ns zY^txrpZWP#`pw@usDtDzR|V&FVmE3q2stVBlWPOYp@v+lQL+!oYYG z#k%2@DeP^3^y6D_Fp_(oi7;3;;o;dzGiepj99V;^)nC4RDbT8xYZ7B1)P-ip!4XOM zdMICQZA|QL-(m zbd|vxPGmQha&@gKFW=`F<4|wiV?rSXZS)jJwi;@b$y~AVF z@vhQxWcBDeCOSM>=eQD)l%!*1WCT|D$bG_Vu!Os>ZL9c<6dI1A zk0^_C95v%9X7!rn37QgU*m$I<5cx>cr<+v)L6M@L5zuZ#Ej$3d(_k-_hUfb%xOUo zUTXt~Uioij^JFoBRyta{-nm<%S*yyb6N-(Ll*O=3TJ!_EL_ICt4l|3<_|?_A)#+bY z*hMxEkG4_Bh5QxrNgrCNdjvs_h*fUyn#tM!u_M{EutIiXey5ZJo ziID%%Q=Z(5dMYM{f=KD{f$rqx<>d#uT1ZHkzuo^NB=3_!dV|o4UWHj7C}jzi**O8s zQf*sV>h=_<(ksxsPUrfU6t-*OkxxTTH zK=9PuJlE!?0X6Nn$Ix_C6fk{Q#t&egnNO%)8<7dTke<>dp$R_H*+}tc;T3lLKFt)X&ARu7(Jl+QA0BzdTbSW(@ zt$Nzq1BAm%e*zmj5sZfI+13~qEsP6koC9v`DjaBC>+xWQ@SaQY(9c|Ki)!k!Z*;wpOu&%%#zauDYy;sEhVUH?!;9Cyq!wHN!6`CSXl{grirlRbpHMieO{90Y$UraiJ^bRvKGoY_y&qnX7(;Oj1AGt|X0o@lHIi^j+%u(3ek87JY!q7dbatki^Dr@4!qS0a zj?jPpyuVCM$XfJ&2A7VVT(VnBm|Ic1UWI)D@meS=D@)eL222eE{u|M+1N(xuFw)jM z0v6OTvG2aGfPga9;4}M7_Q&+?f;1VV%^b{DN2BFf>cazVVlivw%=M76(W!R^U*>F{ z;=*;S;Rx&pXDCbXB+3&jt96jy+Me$~Gp==F1TZydQ3;S42D;j2vd(V)X#~wucft`Q zj8Yyu&{0td6{?z=nBbE0Jp$JSLN!A}Ly*Mbb65-&(g&2u5AxpSbX*-|^fNt!+!+Ro z_7Z?Nk_s(N%`)ct=WW4WzYm?ZrT|Z!4XNoRJurNFb_9}<&Hi#0VkjG}4haN{(BK*uW>96ya-_n8bqKeAT7UE0709AEXwb{=ljOo)Qxo z>2SENp|cZ*EVZi?M|?alU#)(Tv{sGw#KdH=(d)Nd;-l+et=dit*jTS&7_3CZNdJdX z^QP}l;wrY5k(rMoMlB;z+IsHBgTAeg53PWpwFc@oxYN?nt@dcR8@!l&3Tdeqzvjex zs6_Hml2JPl$t6}?zBw*i6y@bnQnVvW%YEtKVgSwpr>?7`1OHk84(?Ec#}Pmh-basK zkSXQvH@`&F=8prp^~He^LLb6P@CV>7kU_^65_(y59J=!eCwWL;+K@l|_T$~JWVZV& z1N7|d_8sr2p6ZIJ)%^lAF6)h@_`Bnir$%AsWps>OE^Ad-BH29Pr*vkYiLo(PrXU^i z&NB%K2?#;K3I-U4gkQQV5W94;x!xLRoSn&Nrir`lZ=BDNmsNo6eg62%4>>goIzd6b zYX1uG*o4yb6ct;n9oL4t_0zriNf6)+&yX+doz!*i^r&2DgoPE^9R-}?uO=Un*zW&ePOjVYfX59j^KCfA+k0I4BkDR8>o3ZXvI2_(c;a@uH!h$7L@ zTGz>zCk`k0D@{4G&CrlaHNyC;jIGX{{l82jcz5=kt7%LEpnqrxenJ|q z=Dp?|R%$v+xi~eovnve`4~PC-S?P3^D}Jd~St`^SwFTc)ughqS5LC(g63CQ-yrQw^ zdcliQv*n73I2@G^G}a(uE;y+!XFbHmwR;iOxcpHuKkug0v3y9%co^Gxg8_7OZEfu} zv4D6Q0fDKG#AA(e6L7DtqqoQ=aYr0M>TRW`+;%eA)usZ=bNo6olJry@n$MoJly{x8 z_3N;(e^Q?ZHD7dLoC~$Mb)vtQSpl>^W7;s~*%c}TBJfK5 ztalkF8X*=T4q>YW|K8&s(b(b*6X&gp&%3lL<`TF2+;dJ zFjK4!MdpSx2^fBI|DIw1E6jQQXRdN~R(AII*cdJ;XO2ps*v9J~YO~MV52arj=c^2+ z)8C6QIq^&uWo9lcpk^GFd#;+NU@1{mpMO(UX@h{x;+l%Fo3Vk7AKs|MS+{lFN;RAR zlV*?eBdgeD7i}ctIV{*(!pqG&TCOMu2BDVqs}H~(yle|EW?c(v~Gc6>eG?=n#8m}$ydi)ql zsVZEd;5nZ<=$hhx^?CZ(BVo(S)X2p6Xj`$UO4YpgK7n+i2OgK1)m+%Aj>}L|e}Dhn z+)|IV#Y=$HlbSeR`Q3K?(@4*)l44^!SgOjQ9SsgX`@XA}f$MDp{lcNPwiZ-C+x`s6 zIxaVbrPlw;xZS;!52(I%RdqAEZ`0Q8+!Vd%>WrQ8#(YskY)vxGE1b9xzou$Fc^m{q z$xGeQ$*eBQuvLGQVqm5cRyL#iWA@J4meGaOdmNwWCp}{S8mqIN%{(EZLk8#NO`86A z_Dr>LrhXSXGPl#}vq`;y{{CZ6Zw(C+1R){ew(F;(DUWcEoPvVTUg{_*aJ#?oI|2$5 z@Itz}xg9L`8G;)Q0Ty&$0P7Ae)OKEG@pPDTO&4dZM838#OA!N z4nboCbRCF?^MZut%?E?2qM`!ceX-BkTAEnMwQJV^4u1ap89>6#OeMycu4!|y5NKm1Ez|vDgKasU0GB73-ykIL2b}w@;b}zPc8S?>i+lVz{z<(>) z>7x5eK&ZouosO=~sq05aX9=o|3k#kv|G8I3{UHY@Y&b#8Xd*ryy;JlSa=qG-BK*fR zLSpIG9%7wwSn6`|_Qfzobv}N4PDQ0DFnx*oY@2SLK1kt(;5RHzI{9QPAPeN=x;i>I zh^`pcqn*n`qs-{95mU&Gga7YrX9xc)2^wj7`aCG)wOa41Y$idvT3cDEwO;_^Z(q-A zqQ(xw5bba8pdsS301vSHoO?p@?;&_*U93$R=9d+-?i_p8qjxYD#W$fD4Y4}5dLn(kw;0?bLMMjW{ANEbKw^aYhRig z1xj4!lXd;X?a#Wu6qZO35?pRpN@nRd-q@tCvhA0>2s57wrKnYMdw2=4{{=}tpf#rQ zjS0b0bCu71Mh=msAPVo}q5`)RRXWw8PW+6`^fI@QK_Wh8!O}tFfmvo@CLtl01SLj<{$6t+ktQl zVjC<`LHGTRv9Yl)UyOiUL8|S>8&P;ApZDo8s5|iRd*K(g_WWc%iJ9ttH^K&#-BD1ulVo%)Lt+NaXE`<8>2@S!};NUV|jvno=Ztm${ zRp#*mE}OSUe(txx?qG9c<2IJ`L(u(~mX;uHX9__jZJ$#0+c$39xOGcSNr?ce&h6WL zE}Ij+zKF@&n=z!xWUkPo@GZpu;b3YAprI>VCTCyvD8Vm7Osa4bUu&c8VHVWxq7Yqep5kDu)koV_+^J;T5Onbr4lv&VhiG1uJBXfGM1x zpQm^u;cjMzh2e1PPd9oA9?$pzZ9;isWJD9*j)n+MgJj~sM2j(doXyGt0QOr%L>O1D zbS~_|>>kneV42%fwIS>?aj*`&ARe5ixHzsg21glJo0(d$<8tmO(l8S4Ca$xr zuF5dL_PpfuH;kA2^I~IfaH65hcbwY|=i>@(PrV&4$WuiXiq%qI8M~-5q0h~YjEQk{ zIGWpaB@e&QTi}I$*mNI#i475qP}`X#3UNJlWY9 zZD25js9acZv{*$K7l-60_0VtVcVIYFn{>xd`&=~S7QgTCx%PH;t^hThNC%G=W?J|;Dl>x3bz2{yz(6=VI}7Qli}Rx< zZmXY^_?QrG%!ir`&>Mhiev4~7mn)1B+&kgalFCYcNUiGV+(E2Q)*pe+K3Qhm1!6%s zIe$Fx1V}u>2Ln$*ZH7GPRJJ_D{8pzlN)HYnH)vdy)N#UINTuuDERC&Y%xKJA?9A1& zCC#Y5nwbySU)36;jf4l#Wyz6GVTAFKPit7X*5Xv&ec7>pk`({ZjeGtYI;snOc1|)s zmXcDQwDf32#b0mV!kL4kpsIRtaUy?VV(^NRh*|wIgwWjF4Dc8iWGN7!F}(Iu9{s0i zR_{&hu=GQPfe`+?Py|~=$^MxID50aF`JTWnf3#enQO?fJUQ?jRT_ZtLR#NiF=bX=F zl#75ZvcY-fgvwV zwtSZMPCyKYGlp9`&;A)U>wrq|@b6hx(N)_wr=kEXAnenz5{9E>d zH*j?%<#EON`fQK#TdPMdj)to{IOgr#S$C#g8J+U|@&^a8L$aK1iu%QfIsF~j!zQiN zwDy+llpiU=0d1wa+Qq>EBE$#z0c+HfWi>TFySlIt_wLWBd(CH)$y;fCgjgK@kxIMHRFMDZw<_hPxZ~z z_Gw$&*}RDJI!nP!{mOZWrK+gn#7s@?xvg)Bg$4Pq&vS|lgkb(ba-iU%7kZP+#u(&B zOg#NXf^e1vK)7a=cXf|Ue zo71cpFbagRZKgief;txi++`xSSCstI>*AeLDZ% z{A(fE;=hWGPScB(m9WdJrltnt##t7JclTy3EWgWOE1=o;5;NgW5>JXXJF;XG9BrjR zsen=`83C844cdH#`2Zw`0Q`Opr+^Kn-SayTL{CpoZx1C&4|ylOPsSwn-17ybE_E0Q zAZ88N0z4B|-A}Ha5wt}`MGqc409_r6h`G0If-5dIj<;s+f^->AQ=LSOh5%-HO@00N z&!2qUk!wodySqX2=TEg z^1Dn4=rzLlUyi1I1Y!EXBy@9i)t|lYPdWf!w?Q(yvSMy(I`SbI1qEe-;9X9L*`$Nv zP@c*k9KADvgNGbP7h3L_)u^<%+4pFDw2uFBE5&JZD(=E)rKcY$Wwq_n+5!^3gk!YH z#|QL4muatRNK8QFUqho)ri<9N`O`ll0j|ET?&d(Bt>e+IL*}EG^eC+8te7 zmKu480hf7up92+H8zG-%Rxi;9q6=XcNl8hF^l@@?7wdV@0F43pefDzz1gvNB4punT zgV1@57$aa5V56kXtba~U4&Zkx9v)JxaLPf-zjvAI$mXI%q@?udJj6gi&caW$DJ|{Q zIPCsSXnA_JN&));Fcw5ZgR-?;pHSj+s(Sbjz+MO#OfY~hfC>PhG}|5$5f%oiX#}3T z+~J(!bvO!16i4}DJvajkMgrL3+}qm=YYnX#GP2$sP5v zCBI4(?A3Qq#974HLDGl06!YPOx|Y_(>0Zx7dti~O>*e10Bqt%NK}T2+)@873KJlT> z83va`s>1TckpA2;7A^)CCjH?j?c^bZL2MW!W7<^1>{80w2qKQ%_#4#vjoDcP6O$@f z62O!|gagD?16-u8uCBh`Ve+;6&_l-|!3s_5Cr_Gz1;zQpi1#McQYIkJ`Zo;z_VQaNpX}&Lu2s9|Bli0ty}nCuGk4- zNhzY-toUdqz0qdrp|zn_xZH3>tD&%J?D?9r^-cWJXM}_bC`=I39F!`(hWd&!gr=p0 z_T9qidF!W-r60zd>9&v&Dl%gHd7Io zm;QtSwH0}yE0z;2#QTJlloT4^YbV}EZvg^!{^;%MFFq4tCUS9h{zmsXh1)i{K;!i0 zBsCzqf`adzosuGk>is$4vB4R&wQ)U5;MF`QewdZX>1TMmiPL|VVei2c4kRXs%dV4( zUs0Z$n9!ZbW4C@FSwN#*r=TG)hf=^yB)!U~t;^cRR42|r7+hcPaUq09WR>xZCW3MA zy{rGnd}lIzmtGd!h>leek969<61oG|as!M1`l9f%-|}uCHmrPBR#szATKEP4NTES_wg|?2?@kFWaZ^;0oZ=2ERj)E zydG%4wnpeLl_>z67wW;i8>PQKvwYcpiGjrQzn2TOp`bvNi60*mJxvd(^q!It2jM&I z`O0PneQ<@?iCsrFzZ}^LIlWGbTY`d3U=AEl`7^3+T4v@IruSOk0osB; z2gmTRYC!S+(Cm&Y(2CsLTp(p;HQ`X{Ubnn_KWMij%}(;JKKP|V$C|~GeeLtoScVq> z#%gLFm8ySoSds&34DI?!`zuF&;-`=aaYTX-AtNhG>l175-~gZ!dPA!bd#6zur14;% z!2iS8d>l{{7=`TT&!4vqDH#2-(>?BPwM_ln@zZWtUMhqO4G%5|NQrw#X<+CA&n^ zC?onk&#uqs^S$ri_x}AJ_xaCtU3I1Ne4od0yk4*8I(Q!k>flR3`+i;SRFV>;@(>=D zS5(-OE$vcGF5&5;31^>vSp9An1GoIriV!o)z}oQE`vT3UoS~usHf>v7*~&kCb{hfl zr;M!ZrcImRm-*zQXj9T*Ckbv7Vkavr)-LBKc9JJgomxJxlJ-m%P0g=!AVFj}x-ksC zdX;K?8(ZcCRCO#Ur+Z{&olC7x%DqL21u;-j@@wD|R2aUq7!kJ@)(dbLyOSoB#zk>65!VJ14wm3ZYOSiQyxk4B2p$>!f@fV_^qV#v#mQb@zusS90HSB~lpsMIZ-F)-VmT;2 zE)EO}_}iEXe~=KEOgufm1GmDk%g)AD1z!dP4CpQ}qIdT8dV*{&JCa5aW!)W{^wc9^ z(t*kn3o0=-HtcEg4xNP8P_Q04^yPis5gY)mLX~N~U&M$Ubh@{0MKz7}y5eh)y<-X) zjF+V)OZm>HYxd+}#Qhx+f1uj9S6G;9R*1w6RMGP)Ji)QL+rn*+X=`iCa3C}y>A^sp zueI1Vi+2V?g3$huhfVX`+r*aMIy;$M*(H-T4H?Vs#|3=o8|39*_w-1BOw(`6&oL`R zmkRIP>4r7Agb4_eWPjZL`qe`|ii|*%N^4u&pO314mQkCXcS*^~L220tQ^P1zNCX}G zYqjj|sbjl$o%#OrD|OD+(6iD3PsdxLxmC`KO1*++p!nXs$TlEmD6ux;SS7Oj{QSUr zKnp@g{QVIV;W^p9MKmP?2ak=-jmwuk(XXMc+z!z`(73ufWd(&H9OXdLY{Y-z%Yo>O zWF-Pfijuc+6>({#P9&L#g8m%a6d42LM-npM&B|3TN zcnS+Y(bnF$Le};Js~%eeN0(*W1=7wgrA*PMVq+wuORMSV?@xMS*M7hFgqs_Gl5B_2 zX)2=EwH(a~UJNQrymE2}z1d)8wLW(2{kwPc#A|fAhYxeS#q z0)kbHS5Z+>WU@PBFVN*CIs*K`I0oAqw7&r8&?%t}i-xKIaJ0oqZ}rNDW)FrCT9uNL zQd%l?WBA+53_1K>PoFN(kCa_QqkG=zLHz_uHIxS3s) zM;V1;FMNo(%xs}65CaXZ08?RoJs5(c0#K9OMB7SIB)?uEAAYVs2N5+E1*$TsKAbpl z@+6K-EO}o~&qhglag$0s3$sEjDQsR?nqIwngr8JojUL&=Br!a^38F15YG>u|j?Bp3 z0UQJTyYV(pj1*lN31niq;3!bbV89e*|15Pk1?-@QjkA>SQx2Z(%x)S(bRS+zOUQAA z08rBgI-+z4ztYlZ(mph-etisiT}ly;ZcO}kE-t%uBN5I8(>k*VX?nwJ1@{Unx`vit zR=CrvHf$zp4je(yP0dkx<92;!iqkIeDjvJ~_E1&R zHTftS)JMF&SJl?u(9YWsso~)D97GG64`F6~v;s=zhYoE>^CcrleYsUBsHb@2+rTV- z^i>)Pq1u@1EpK*62K<{h!^lY6JWD(5y8k23>M@6}Ag#*8;Q+!*l2Fsr11MpFUF&ov zN!xGh)yCm{(gHlYF1gCldaX5B`{czXXC)&=4p827!%e#Z4S)K zaUw?VsvC&1jEwKIgK2CW0PxbUU*EcG695IBygvMRa&mGMura-%>k1uvh)^`l4s6GP zxM8kzb)BA_-E~O&QSIka0kiH!&ZNmmwkVWMfRsRwaPWtO`~i;oJX>`HGd?U0_4UCM zt?_Ge@g6R#H*eq8>0A_Mij5h2Ozw2)$MSEl??LLw;Zaf=t@r%*K@{I!uIW0Lhh0Z5 zC>X2h?c>8$9zb*^UWxX<8!BQvyq%MC*D700W#z9EjuXrM{X>e1D=RCQ3!2H@X%i-l zjEpF@SB=VJeH-0=L6dwCQXlh~E>MO}ztZSs1h^A_jkj#<=#h$UvVS-PTWV*Uoa^M- zRaaD${iQFrOL2M1-@s=sQlz7FpnoyQDt5b0x$c4Ir@My?ckjkJYDu{PIs}S8pnP1L zcY+ejOH@hP{T)^Xn}*<^_VI&k)Cm)CKZAk{I(3vYV0?TWf+Bz}G+y^IG7hV&lO;@` z)dhg~w))IYC6fX(Q#+91-3bRjs7Nb3zT+Amu`X+etr~^|@Mi~`un0OMIfB(L?Z)H(&@uk)ZQtRsA z;LtmhDb<#(Fm*m?YuQ7JoknGnQU@gY=!oz0^Vg-F>4=?$v>X#`QK zKOj=W3PbzCt>8^b^uBvn>(s$?^yo0eD@~v6Da^`hH=A(~q2tDCW*n5`EbNnNJfvec z#w%1h_!|5pH&jD{0gXVepl@tk?>$9lAFdF%a0fYKNFej_`T-Oi9`RtzZBiU$=21s9UX`oZz~P!>0$3hegE1A~v%Vp>t*&Hx+K~ z75G%FK|w(wjCZIeVq|HVV!=S7{zoMwjBF*+FZVC4uI?H+fR^b3^-9c>rZG>8?c{j# zwMlyGPS(Yj=wYtVuTC>_wMUz42(4O3=*YBxPc5ag6SJ zG}4}2JCnr-)CK}uJJls_4PIIs2ms<_VoVx z{vG`?Te>MDC0tcSn{z`n9cokTcRuZ{8*f){jilagS(HE?#%3iv0g($c3rp$HNm~19cOL#ifkg6idaz9 z-(PrKJ4;H+T>Pn*>=s*1^&>gjoAEDq7fg1LhnYsHu1Pxl$o+hBCRqd@)@eX5glzjX0B@@0Hka9T1?i3g6=;)YSlT_F5*APAwcL6iFfP02{rTsUwhLv`L~?;vzBmg)vT=D_bCS6ao@bcLOlVdP1D?#dgvOb zeNavV8w71@{d4j0a^tRUnG3azg7z>xd_N9faQNd%80Lk9gfM1vKBc-4(-)4u>`E@# z^P# zfr3eifmWmGMn=X8$W#bk8t2^y??)z3E%iXp0y(pC$U2ut3&eR9rKPbKFY-?^;jh-r zL`wxleOP@ps^dKvnK4@E7t~Z$oyXqC-fUQ3DUObgwib(eR*ugcsZkyBr~dl&x1pk} zw3JZ&b+)(jQm>GJypt!De5M(RQJz0bG(ayt{sEzbS)Qut0S+sA`)`Ge$vPndfC_*W zaD|x6yL4w17+da{F0$PE>yBdTkGPC$r+b$z!i}#>IYt#ZsxL4EW~r<{C@&|Oj)CCt zu7qLy2>9OkWN>fpojYH@^;cT8_4Is$ocp`Ax6(tHiSU8Fs%@5f02}Rn?;oyP#mvJ~ za{G2#QW8JAAr6;w=k{IiMo`Z@W*RudP$06iM<55OvJuCxS9v*t5iPa7;%e;1Rp2y5 zkYLJl{{D;%dFV*$Acd-_Q6$t5xZ~h(^PBDTr%(8iL1?Ylj9n60s8xGiq|-4z;5$VV zfPV=L4E$b;Qw@&~3mlLJQjsNh?8pQ227x}{!lrZ57;F4vu^R7cdPt!;M4N>d|G7c7 z$hHZLlK?^vT3IDN99wr#9f^$!tjRQ4T?GcpZffipk*&e}rDNqGA|%A4F)cq`??mSb2FAE(@^Y0QMWa zcZB9o#DqUQFX;WW_zz%&_u3E+Fn|pUnKUjg8R!naeY*+)N*`%(t-v7$I^woTwy1wy zr`2XcK5#*}T$v!MY&?LGGiwqAp7HM8yT|UekQfTMV}-6(qkKC&T(WlgzDpc97#>Qd z@o99x= zbVTU!aqx2(exT05SGRljJ)Fu296bG|Tm)$%IC}7X!;q|NWaR7Zt#4?EgAa(6&zUnD zH*FG>=`y?ALCSCfAuobaO+q5EZ9?6EgWy$F&3-lo>nT5q2nHO?>RBdwdeF;$f{V_? z1kB_aKR*)#1E3fglM=&Nz661txr=B-H}L$=#TJK~p>rwo%fG=)!*%$C{J?<&q~M&~ z+%aJ31c4R{B!{DPx(vr|C8hI#!YxF7q2Yrm0zma3V}nW2sAby0LCh)T<(E60P(D!w zwr}4~G-3|~C}rVb!YX}t29VCE;UhqIn0&AijEv$D0+gbUO8sGe*>fV&Ny=4JN?IDw z9md7xxx&)Tms)B97mF~gBbarJpM4fbv6#*Do^s#T=4SeluIUFKwAA&i{vt(5!aMwp z_4KYtZ>6E6To9DQj-0^CBzdlY?c=M&a-q6cf-e-`BE}R9ta#R;8x;uxq9QcF2yVR& z=7l5{dGls;89GHbS67fd$*}omDS@FkEqsZwwL?+xYH|Ji^L@=6Yaoom4z9zKyF4de^5OdFV{1X|n`&n`f?P{@ zzm~ena4fkOt7P}k5W4TPW##0UR##%b{QiD;$l;{iW9*>EkB?Yc4L*4i#u$`H;mK8U z?;gyV5TRN5isiAEuaik>tMeQMT=tam-y`gWyx(VYA3UsP|2=o9GK-tfU#P1Y`e|NX zUKttYh23%(sDJ+WfzfkeZVueL>AM>E8WCfM(43wvl`owJ^RZ zDc#UqIb+Ap!_$ED+MA8Yk)qqUam+fQ>V|%S+ldpyRbCXv9TXAEwZs|Z^+jmp=DUX*3YiNhXJrK^Np^0_d+~|?3avOJ$K&5W-=2nx7n2lv*3LWH ztr6^g@|SJqFQ=td+C3p3n%{3$op0#TzRT)^k^@(`+=)2v%VrCU_FN5v;fzZAllN}j zNO>VDiW+ZUiHE1LYt{A^rQls4?~NmuUyDv8>c(njNYfjx}Pp*M#o%yh%WGjl)|o?nxq5c-%p zHIQ->-|csHMK4J%#m=W{S}?pWC@)DLpLKRxi;=j3bi?DN0JBL4 zOv&pT)?(tq!b`~CB83IvwAT}I)rm6zJ5O6t?0^G1hCX+KkjYDA)6!kj-TH?s!Fi#{ zs@kcaMP^!u*W!|{0AK_X(^Xpf1Ho%BJvhJM-=g2QnYjD=xAD=s8t%4x>;3fVSY)?M zvfuajGqJN*BRT*9g&1~Gn>P>-;KYLXBqA~rlRD-_VERqra71w_cuzvIM;>Mexd6g% zsv)Am4u&Z%GO`8Eu3aqJFuDR2$w@qe3`xip4w{=^N=%IQScG6qaOcjE$9@vBvWp>q zR(T9{Ng+B|qk!vxSIvC-R0r&icAwXH1Rlli-J2K~zD-Y8LEU=k(leay zf@efDkTFn@u{wp3ZU0QMMs*z}!DhM>E$MEXDo^~)$TizxjL>o-^wA?ZG0E3GPqS^? z(OF>dz~qSc-*;1s2nDd`?&_LfP=I`hO*M15k+haGe`uT4)c35!3|_(CRIEsel2jX` zc{3t{@>={Vz8^rlK&;AIa?D<;>x-;>AA8ZzGnl(As!z{|mv0(HdqQ8>+@ zbtK_#FJBrO8w+jDiCKW74gv{zJUzg4IP7PVwOpG;H@e*`a zFy93&4p=p;{d{|YY9r!=RL}3`XDlM`p5CFo#nF#_?SXcJ8ZULkq}V#d@RJGOHY6Xo zNKVw&*1{V@M*IV)V<)H1MIq)IvNEBoh4=1lVo2ao6&K_`TIztxH;h$aJ7xO}!i-!2 zSCD<^&Lj50X!&1({U?)CcmjB;An-JIp}Pz!G)XyO{MGGSy{L?&&&%B6oWci{m8y9b$!?Cj~u$qOAjvxUXw81*>(!UwoNiHojNt;DG%lYO?=8?lmiRCoKD|XIww(ABqUizpWJIpi)@bSc4ELGp zWT{Sn9H8``1Qs{7v5~NO6AUeQiLSHlU<~RTQR8VF(464Ay2hqq)Xci$?Q_ZS)K|RP zp@@a6J)IxCdZ2?(B-Y;A&TbUqB`j_vQ;JnNw!kA{Xti;Vq(ti;Sd- z*G2$O+G5nfV|K4V$42LK8x~v~Q%+?pT?JWzhd%YQG4%2pFPO~7RaMr&>$h#C zi-cxCL|mME6OUs%Hpys*32Y4{Y*bXCH(0Iq(SoCA7b2Rzv<}VO+OdsMBXQ6!M_uEw z7K=;gIjsj{K53iXr+~UjI9=P%3>Vq(H%O}%pIxNyT@dLe-x~q>Z;r}orI#vddTUXP&K4h-m5XQ8EEqC;PD9S;?aT*6auQ%B30mUB?YAERvBYgT6L) z4*-2hRTe_c+66`89Y5e^?v;RXf=bu={rKJ|X`5lw+re|;X3(denR`?b}7 zN>?ElzVG~z&1b+{ri)784Q=y6;7y?qvu6j~dr!DN`(sU`Y^=p=abf(2soLKcj!_7h zb+sbc>MrZ%Lo9)gNM|67UhvCqBL)fE8$9(Ys_Xe{Whp`jUnTWd+EdZxTFUqS0w&yV zBBEwxRS85+Y#V$s{%E}+#3BjUmfR)U5E=&c17@1=C+*LlBbcPRxOkVL{Kj?h(@@V< zKq&83fA_AT027LX9~9DPW(b1gR5|^%l$wyEpFi&FGc~E4FXaAHUGpG3ZsTeLbuQQc z1jT4?boBf5{B=B67~8M7hhf{v)qCIfFG%h1luPj;7>#AY_i9ycRvf8_l?2v*L8GqXh^~GB3{+&Ccp7Kf8&mtEMKo_toG6LNc*XHOacIZyq>u*9ogee%qY32Js z_ukV(F;bz};NsT91eneXv}V1ZHT66+S|=Ny^e4%?1QA zmaIhZ!ed=lR))h`pL9=(zNPfLxevL{%%_yq!5>Yl|NQ{kN$g{s9+?V)pFi_Hf54N* z>YVT1bx4;s3+Rk~zKOFWn;AvW)ANS@mtrY2PKzXGAJYR#3PI(3pD zR=om_JxwfE*eFQVgH9WT7ioIuR~8D<(z>|ZPWs^JywLjER>O5j)hJVO5i%DW@k-2^ zs;WE$@2=E?adW{_|5XZMaD0^SzbhfCOliiyeLHP$511El9PUT@M+~v*M$4%fFz*?T z{%CMZGTUFB#RN65m6Io?7&+FTrJc+080j*R*UEmVtN$Iv#+xJlxV^m;018mx`}gk` z>~6cb*xGAtNSo{IxC#vrECA?{SjDV~Glx1a7Oc8)aN`+nqi+HLNllQTd8L3dWSf3I zczAPk9{fhRxn%Pv;q{BD!rZe58wL<3*6r-<|B)roht~#FsneM>3p;;aac=XN1d~sg zU94A$oA^~D@#KuTk!8S)!s5`z6(*&a$`cv&Mqk~hJ3(~*F;P? zhhX;4)DuX8(ny-6ld4G)2$j063Y|Jd5GH$REODGaZ{O_G6+ZFp+Ej_m6E&T4PwyVu z)8>&en)>snd8Nmx?{obxUM9b}&GvU-Pr7zZUSJamqXQm^q=WGLVV6V4<-g(v9ZSoB z-d;(8(mKVGek(^S6~#a{`zH^@yyKrCA_X-VPaCb_U~li`-I4;=m!*O}ei?s!^ z`*vClY}phiB>rnWoaS5C_1h*wAxo{CxBo2V)fDQPiO>;XiLR*x)l^pp7#h-dSqT^X zoSa{VmK!YI;Zlbd02X7GWr{t}|MI)%+Bi8Elx;H;CZi(IVNeqYkBgaDf+`v+-+#;b zbNh?91F&d(6H#wIVb^ zXtI@soT<+8Ma|>esI-rZ60{C+RKMHEz+J0+It$1%L7iUP-SZ8$49gIn|7#F7{jz}p z=cc8ZnKzmj=u`mt0l<{^k5uWy#DLuRah#DjYAFe>eP_ksQBzkcD>D;M11QU}Wy_VT zSIrL|JPRO|^x=R$K!S@XeHK<$%o;afTmcw?Og+FQuBT6%7#pAU_I?BU(gmbDq&&AX7U>@*?=OG-OX(NZJwNk0@s z!FUBRiszAgIC|98p8(@Qmw@b=dN@$FDw+^zSVJ+>t2yp)Dp)(Lo2`6~+Ug4hK^vYp z$&p)sBhULlFV~i&3v>l5MJ2(ewGkVLe@0yyp~*bj<~yXql9yci*!FB(l(NGETkprR z-37*qRZ@ES4dpvLZNkVx|15_{B}~ZoIwbL=zRQ^WbjnVVx}US*gHPd!tF{TLN|G1* zUi2Rxn_e2ZapTYY;(*{)p0c5x80OLI>JLYw#|hGjhTR_T~)-6BD?Bt?cZ21!g<=`IBF|GnSccyHucdP*e+|aiD4#pWh7+ zXI{Bd>i6wfp)z&JQ?>m`GrK4#!qpcjmJC#8K75c{nfgDU3^&xtIB=(3mNHa3n5M|i z;av4DlAK_iP!ovy)28LX+Z<*}8R1ZCMeAYVldWLgmi<}W_e&k;A=TjZ9~bX@IUP}Z zuj)ju>E-KldG)133z1|=ZHfA)LsmmLx81klSy{htb>5fs3k~yiEvM@$KYt0)%d#+S za1tnay)vz?c917BO1Bzz&RvcZzVh7HuRe5pQ(k`I0xC>?^38usvp}HzBS^qpy!%jD z^Ux4@e)Wov7;MX(I+B2aLAeceGq7uok3()A{(H~W#-FIB`1mOV-)$`AF3@;rJuXqZ)D=lpWBtmr1f^ViB$u}i{_$B(x~ zo)oUmk{WOyyFR-j8XZBY^L&kvhH>Dus*QwUQeyn$S2veU$jlO}6-92ufZyAT2 z8CLB+nJJJ*H^g;xdDLU3Pa?yuIGtMiJsDqp@yNaPx`p3;67N1r1pl7h&dFNY`ex^i z)Ykay;9{4Pfvfs6-3A?(4xajMBlCH`+v0{m*&flr$5mz@3p3sbnb+nUCse<66-{w- zahQ|Xw2A5;2;xfd-8WY?a;qL2sCt=w-kP#&$>P{S(G5}d;jgK48YM+7mqRtMTXQ0; zSi;zLfy{@#m2CLHE&#BcnZ{ODX~ENLQ2#;dLgy?QepUw5MHE~4v@2tb7XOuN{EQdR zMO3k|{=9fcnY>nq_w$x<@Tu1OeOhU~jV02VY-2{fFr?-OZi%Ka8y*RL?iwaNis2 z0M;J)n(iBNr=`+{1Kqy;v1jYBySdym@{NKpEI%kCbtofEwy(23deHL5Rh7Os@1NRB z-)$&ZKk;-u^TSzjWA0-G0f&aSze}u7NQ;XYc**!H!yUHwDb5&g$k`hW*>JN zXYS`ujLv3C5!SL4U$O`wVsf>@0GEt;{)>6(i>bK7#EoF9XrC=rg`K&bHHw(`jdotQTE6IVAJdpPE;B9rBwdGbt*>Fp-R|RfLh~6_Uv3F zKQAL0pO?0<%grlxohP$jH-Fwuvz3gPYFU;S|H+UTC?Vu=pq)CS=J+|z;>u{&N3z=p zJGY4kpT95&CKeQxWzVo*_mrI*i6-zz_L30{-`+QSonPL^(;{@7MzeP0+q2Tl$@OgW z^jXzqCZf^p?#}0`>lL(ZUKus5<<<3D-u^VQt+Ehc*4Or4?F`5@eIW3gC!0(8&sdl_ zu0l>*@7i(yw8NuCQ-|Kx#M`U28wh{@N;To>d!mnB+$LO|Jns3JG%zWqKIf=uO>!w; zF!B}4Tor}QMmq@&oXp%&iF<`^*41TpA1B>O56xz;x!3O{FIa!Z`$+L+ za4a6PvZ5hkkZ}vzA72a27CDaT9mjNf<5pewi!onpR*Rsx!WPq9MYKgC>LHebcN-nc zOFLCxMO?CT;vz@N!K3TNPc$#hME`17m;61d<9^QnCea9J2aw6iwF{1Hm z850pY%*;T9UTymv?EWBqlA5ra;Upt8Z~ozVbiJ|!KVqk|V4LdN=;yssHfJ|3e@k?* zRVtw%Oy`#m?I7sMwTT>cCDUvx5n1PvIVw z=ia^@IBhkqR{%GjZ$Wh|^xs;5{CtAFREAJ1^*D6!zE}&~=i)Y1MB<45L_99}7&1sM zRoUfAB8foBjRgJL4ru_`F*ND%@i6}tUf7FS4af-WVNiYFz5C~nd@@OXL=P|?+!`nG z9Y+$;2s3Q%b#kI{${U?Y&U5^mlQa~qV%52}0lg%d>mBY=U13JDFj`to{xDN9<_pKR zFkWn~(-<#g4;|>b`wm>D*v!r=c93uNSs){JFIEu5 zLGwCY;g|jEXAbSL8KWSeL~?wR#I5peu27x`jqWM-;N@n_SlL?9y>9cUS;nvTCC_&= zZxC#g5WbLd%>hjVnoU$)XWPEL+o9Bn^erG)u_dC$`qe41ViUOUAkn>LbJYv_9y7Ck zsC}_`A^ite;ndPk5L7kJ)!xn`;LgFblMzteAZ`;>Yf7Ca`|QIDkJd5Nqr=e)Byfkv z_}Ca(;@a9;ni$ConzVQ1_n(mtU`;mSeu%1rM@Ujh7d^Fx##2ySkShVVLd&;&K3Geu zC0{S(eiI^h0^!ucjlTvq(%>d=Q=90ILzj;$iQU!YWpv!0t0urmajfJ)?TK8xfxnA^NU z?FER&OCNjIg+(4@epcsl6!>(dj@jI0^@i%)$i}u`s-nAp*9o8Qm6-3Vdz!sDUgA>=P!`_ z20~YKAy0Vp6r8UIk||+524bcRuRXGq-c_49oUksF7%r1e`UK9PCquRv(F33z7iR{* zD5aj$Yk1{Cb?U%B@}#Fpg?1wWAGbTi2jgNtr2xc*!UGIA4H_kA>K}nf%xVajzXe7f zaRi4B4M80x!rU27!vMcOvG*=UuN4THz`z3F7kmTgm~?PW);nMPOYCkb_i-ubW4;)n zu_a#2Y{#Vzfh(rH27IwE+pGTmQ^ZZ+3ft&hQdnq1nb&peA(rErB|*O*SJz!i`_mcl zY*6xAjcQ24w+{tQ*AgDyANR|siMsxaQ{qr}`i~IrcW&c{)Kb6(&lU#Bw-ojqf>D<}lY4&@kMoT(g=jacK8x?UPYAZTXqnPCQJl zTeII;xqH`-_J^Hw9eX}fX`W0iq9p7-$sZbN=89YLQHi)!aB6zmV|v>7ML+lQt1Yw< zVy55U@%<3oK-IIcqMY{0Jn+@n=0bP{-EvIi6E`?Yd8t*!L)M5n&DB-d^yw=@qVoPz zNBPU$|6NAKtN*j$NGfM2GlWpE0D?|lf$jT!z{kvb@lS&*cXM{*yTIhl81DPpRYQYZ z3FPMnOjywOy?TorFCQ)QUvBk&@JFrvnUAu_!V77L zYcmxwRX5by8m|riKL3I98THGa{gGFm8K#t9QsbSx88@mRDG5taICKuM!$8$oa_5d| ze}LGme`H{~3DWQL6Y+x8uiuegmtHpO3bRbX~>UW+0D7zf1zViIdS3{mxW20J! z^uy!b^o&-_ySjS7y&4Pn#YQL^iSy*AgNhuC!#!Jb|7wIK3 zS01JHxJdfGeQQ0FLC@M#{mVo5denkZ*UrO>-zd!T`s|I@>Tllce~F1@LRo`uyAn+o^H22}uezJ_l*sd1xiRw?+x?FEGQ+ zN63=-vA+5ZYD7?Ph|#&!-f+Us4$c{8H@Cmgo~N&G%IZ^=@ZUK=s`G~}Nw@O#RB#m- zKT;_1jH%#!!(dnI zi8o5B-5b0QHYYF{wk5N(N{O?#eOt_->cNIY$Jbo5eJZnUttKA#m_VF{1mBkd)Zu+^ z-|mBNwAA|Zr%%gYDo0lSE-o78&?Ida=ks0O=hU7=$|sPnC6xC-m}t2|n+l>GT3fZR zG3wEUsf~XAd>%=0A`IK50Vj*v)vn*C-?i0elTbk5{7!=-S_L`9?uNbFPZVrvMs1m_ ztm}-_6e?LB46)b_)fk&Es(tEQwdgmcuY;!y`LE#6=AAt(2V}GUd;oHT;Jdtk|0}4@ zFs0IkP;%4$>AP`>hddaBs~Aam^Dbv{ZeggRGJ%i2dz*y_4_q*z@0MI5@E5?ux{m7` z*ykv7azMj;(6mEInOr^RKk~5j?WcR85E?_p0J6o;51kWB_?b6AtN!KGl25=+!)hlX z(t#)UKP_Is9X|hmUaZA;|9G+3FXXgs5#6F>z&}`FbL?1FS{j1MN$%WDo8s-=obQ4j zxRR10xc5a9V6!O?^@G&OzBE$$vGMVizO*1xeC?f*Z$jn+&KH^nI1dn!wGIgqja4FO zB|~#s^Q2!Dte#>TchCL){ICaLi$D*uuVMa2Dz$Wa7h(X!UZGL3U>0()gJ1jJ(Z{&p zF;q7&{PHDeks%HI8~}$RNP#BdGUL|Pd(mmcrtAk^&acoQaIOa^WPBb9>xcl>9>I0+`Q_{^1}!G7+}IGyvV z{y|w$_NNnV@{n-=MMfByjj5@curWMgMU4ugoT1V`O7*rD<&qUth@$olbM?dT;Oo( z2QT#LAYiT9Yl3=ue`)N*622`21=iutk}1|<{ZC5vHE<7H?P!)X)Y18f3y&dwL>@op zA5BdGK|yq;TaLdV$sKRxb;|7Y>-Mu{;b3FaU4*zD?@@S5mJJ381}^yrxQj0&Bt-Ds zrwSxGknD;B2Y4-T)saqvGX{hoiWitB?py|S@bXUy1?-b~d+Kg6n~Kx~jA^vmF6-r( z$*5VSnL^ElA2)_ucm=QMf|$XIgq|E2H}p=_g#Wp7tjx?dH9jXmHUmq29P&pc_cbL! zNlE#7XlU{0&w41wK+`~61l7W)y>c1{-;_iyK$&iS%P_1BE`M&uslBTT(L^np+BVP>mgB>16QF7Es-#T{AkCnOGW-o^nG z-0PI`9}M-#zwNF6krJcgGZrb2U{oMkg0Q)vTfq4R&j&B_b$F0aqHz5ZlI8Cd7WSbu z{q@gZe(V!%>Pt;Y*`AW})KO&9M=+&Q^n3R1#jO)iIxH+MQb`9MD5NNK)LSWw{>cJ^ zZCQ}uTL!wrX@S0*H*dyzOMOd0QVd*vx>ZV_{c-S6Dd%!~Z(2vme~DUY`nCW0@rMdr z37MJOId;+S%{!>C=vpA0*mmy6IMvwQE0*WzBA=F(N#o$?FdVx$e8Zb68v%)vYKjD4zxG?N*-!(vcg3_9SvFNau76;QR%CQX`%I z`P;WYC?D;?(fmdX=pSa$BSXdjoemNR6f@DGP!WJhAmxEbuDE!khl;%<8{YSM6_|=( zWodL#|KBIL`2EHfL?REA?{|T!)CQg+)gWFA`fksoRtA|>w>N(KJU#07`}r{mS<2|Z z9K2OPHi$e!+jy_M+~QFdoMzv@e}_2b*^3ufo5mudqql~LN=QIL4ZRBuG5PT$ERk0b zoM9v#Bcn`9>A+=*gUZ|-MqG?OcqJrkCPrZvz_|{4$Y{yu8#pe-Q~t+L6chbz;Uhi& z2}NnIy2y4IeE{xrfLmv5Ro1l^&SZxe_L6fAQLM;ESr#j~YW{pq?r%Pd5x<_veq5DA zNkfCxNJaq2*mZ>Ff3IHYd@srS_Zy*Uypi9Wcc5yNQT)x={4!36e+P_AN(#!IXmoeJ zR66t-lm}c>Sj4bfAf9B=`PlwiezcjdUdipm^nAzS#hYuqKYsgoYq+elj8@kK;f9qGCcft>znwHk�*Z7IrPaUptW&VMby!;aO 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 literal 79963 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 Date: Thu, 6 May 2021 23:43:57 +0900 Subject: [PATCH 02/31] feat: Create enums MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. AWAY팀과 HOME팀을 가리키는 Venue 이넘 생성 (각각 전광판의 TOP, BOTTOM에 대응) 2. Oauth의 Resource Owner를 가리키는 ResourceOwner 이넘 생성 --- .../team9/baseball/domain/enums/ResourceOwner.java | 5 +++++ .../java/team9/baseball/domain/enums/Venue.java | 13 +++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/domain/enums/ResourceOwner.java create mode 100644 BE/baseball/src/main/java/team9/baseball/domain/enums/Venue.java diff --git a/BE/baseball/src/main/java/team9/baseball/domain/enums/ResourceOwner.java b/BE/baseball/src/main/java/team9/baseball/domain/enums/ResourceOwner.java new file mode 100644 index 000000000..5267977c7 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/domain/enums/ResourceOwner.java @@ -0,0 +1,5 @@ +package team9.baseball.domain.enums; + +public enum ResourceOwner { + GITHUB +} diff --git a/BE/baseball/src/main/java/team9/baseball/domain/enums/Venue.java b/BE/baseball/src/main/java/team9/baseball/domain/enums/Venue.java new file mode 100644 index 000000000..fe1e46faa --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/domain/enums/Venue.java @@ -0,0 +1,13 @@ +package team9.baseball.domain.enums; + +public enum Venue { + AWAY, + HOME; + + public Halves getHalves() { + if (this == Venue.AWAY) { + return Halves.TOP; + } + return Halves.BOTTOM; + } +} From 312123801edf49f98db1d943a595ddb08f9847b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Thu, 6 May 2021 23:48:38 +0900 Subject: [PATCH 03/31] [#1] chore: Set auto increment to oauth_access_token table's primary key --- BE/baseball/src/main/resources/schema.sql | 4 ++-- docs/database/Schema.mwb | Bin 17898 -> 17917 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BE/baseball/src/main/resources/schema.sql b/BE/baseball/src/main/resources/schema.sql index 2ab0fdb22..76a06c0b6 100644 --- a/BE/baseball/src/main/resources/schema.sql +++ b/BE/baseball/src/main/resources/schema.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Thu May 6 23:30:17 2021 +-- Thu May 6 23:47:43 2021 -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -200,7 +200,7 @@ CREATE TABLE IF NOT EXISTS `baseball`.`batting_history` ( DROP TABLE IF EXISTS `baseball`.`oauth_access_token` ; CREATE TABLE IF NOT EXISTS `baseball`.`oauth_access_token` ( - `id` BIGINT NOT NULL, + `id` BIGINT NOT NULL AUTO_INCREMENT, `user_id` BIGINT NOT NULL, `resource_owner` VARCHAR(45) NOT NULL, `access_token` VARCHAR(100) NOT NULL, diff --git a/docs/database/Schema.mwb b/docs/database/Schema.mwb index cbb44ab8056f019d453a5cf578b50b5144efcaf7..1fb44da62960a3f17e81260792cfec40b67059b8 100644 GIT binary patch delta 14651 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 Ss46i^k_;LwnOH6<^#1^4?C)Iw delta 14576 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 aN-IOSr8r1)KxC)nNs~feNu~5ki~K)hvdw7# From 183a093fbdfd3bc7c371ff866596732caa051354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 00:09:12 +0900 Subject: [PATCH 04/31] [#2] feat: Create user aggregate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. user aggregate에 속한 entity 객체들을 생성 2. UserRepository 생성 3. User의 생성 및 조회 테스트 코드 작성 --- .../aggregate/user/OauthAccessToken.java | 25 +++++++++++ .../baseball/domain/aggregate/user/User.java | 44 +++++++++++++++++++ .../baseball/repository/UserRepository.java | 7 +++ .../repository/UserRepositoryTest.java | 35 +++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/domain/aggregate/user/OauthAccessToken.java create mode 100644 BE/baseball/src/main/java/team9/baseball/domain/aggregate/user/User.java create mode 100644 BE/baseball/src/main/java/team9/baseball/repository/UserRepository.java create mode 100644 BE/baseball/src/test/java/team9/baseball/repository/UserRepositoryTest.java diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/user/OauthAccessToken.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/user/OauthAccessToken.java new file mode 100644 index 000000000..ba9198c54 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/user/OauthAccessToken.java @@ -0,0 +1,25 @@ +package team9.baseball.domain.aggregate.user; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.annotation.Id; +import team9.baseball.domain.enums.ResourceOwner; + +@Getter +@Setter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class OauthAccessToken { + @Id + private Long id; + + private String resourceOwner; + + private String accessToken; + + public OauthAccessToken(ResourceOwner resourceOwner, String accessToken) { + this.resourceOwner = resourceOwner.name(); + this.accessToken = accessToken; + } +} diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/user/User.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/user/User.java new file mode 100644 index 000000000..8d5fe2da2 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/user/User.java @@ -0,0 +1,44 @@ +package team9.baseball.domain.aggregate.user; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.annotation.Id; +import org.springframework.data.relational.core.mapping.MappedCollection; +import team9.baseball.domain.enums.ResourceOwner; +import team9.baseball.domain.enums.Venue; +import team9.baseball.exception.NotFoundException; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@Setter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class User { + @Id + private Long id; + + private String email; + + private Long currentGameId; + + private Venue currentGameVenue; + + @MappedCollection(idColumn = "user_id", keyColumn = "resource_owner") + private Map oauthAccessTokenMap = new HashMap<>(); + + public User(String email, OauthAccessToken oauthAccessToken) { + this.email = email; + this.oauthAccessTokenMap.put(oauthAccessToken.getResourceOwner(), oauthAccessToken); + } + + public String getAccessToken(ResourceOwner resourceOwner) { + OauthAccessToken oauthAccessToken = oauthAccessTokenMap.getOrDefault(resourceOwner.name(), null); + if (oauthAccessToken == null) { + throw new NotFoundException(resourceOwner.name() + "의 access token이 존재하지 않습니다."); + } + return oauthAccessToken.getAccessToken(); + } +} diff --git a/BE/baseball/src/main/java/team9/baseball/repository/UserRepository.java b/BE/baseball/src/main/java/team9/baseball/repository/UserRepository.java new file mode 100644 index 000000000..0ee042641 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/repository/UserRepository.java @@ -0,0 +1,7 @@ +package team9.baseball.repository; + +import org.springframework.data.repository.CrudRepository; +import team9.baseball.domain.aggregate.user.User; + +public interface UserRepository extends CrudRepository { +} diff --git a/BE/baseball/src/test/java/team9/baseball/repository/UserRepositoryTest.java b/BE/baseball/src/test/java/team9/baseball/repository/UserRepositoryTest.java new file mode 100644 index 000000000..3384facf9 --- /dev/null +++ b/BE/baseball/src/test/java/team9/baseball/repository/UserRepositoryTest.java @@ -0,0 +1,35 @@ +package team9.baseball.repository; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; +import team9.baseball.domain.aggregate.user.OauthAccessToken; +import team9.baseball.domain.aggregate.user.User; +import team9.baseball.domain.enums.ResourceOwner; + +@SpringBootTest +@Transactional +class UserRepositoryTest { + private UserRepository userRepository; + + @Autowired + public UserRepositoryTest(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @Test + public void 유저생성조회테스트() { + OauthAccessToken oauthAccessToken = new OauthAccessToken(ResourceOwner.GITHUB, "TEST"); + User user = new User("isaac56@naver.com", oauthAccessToken); + User saved = userRepository.save(user); + + Assertions.assertThat(user.getEmail()).isEqualTo(saved.getEmail()); + + User found = userRepository.findById(saved.getId()).get(); + Assertions.assertThat(found.getEmail()).isEqualTo(saved.getEmail()); + + Assertions.assertThat(found.getAccessToken(ResourceOwner.GITHUB)).isEqualTo(oauthAccessToken.getAccessToken()); + } +} From 7cbb4345039fdfa23779d2ee6c732c956a120db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 01:42:55 +0900 Subject: [PATCH 05/31] [#6] feat: Create a method that getting name from uniform number --- .../java/team9/baseball/domain/aggregate/team/Team.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Team.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Team.java index 7f3903f58..5345a0d49 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Team.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Team.java @@ -29,6 +29,13 @@ public Team(String name) { this.name = name; } + public String getPlayerName(int uniform_number) { + if (!playerMap.containsKey(uniform_number)) { + throw new NotFoundException(this.id + "팀에 " + uniform_number + "번호의 선수가 없습니다."); + } + return playerMap.get(uniform_number).getName(); + } + public int getFirstPlayerUniformNumber() { Player firstPlayer = playerMap.values().stream().findFirst(). orElseThrow(() -> new NotFoundException("팀에 속한 선수가 없습니다.")); From 91025c8fcaac1bd6d13cc8cefe80d45ace799698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 01:43:53 +0900 Subject: [PATCH 06/31] [#6] feat: Create common response DTO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit response에 사용될 공통 형식인 ApiResult 클래스 생성 --- .../baseball/DTO/response/ApiResult.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/ApiResult.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/ApiResult.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/ApiResult.java new file mode 100644 index 000000000..33d221630 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/ApiResult.java @@ -0,0 +1,36 @@ +package team9.baseball.DTO.response; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ApiResult { + private T data; + private String error; + + private ApiResult(T data, String error) { + this.data = data; + this.error = error; + } + + public static ApiResult succeed(T data) { + return new ApiResult(data, null); + } + + public static ApiResult failed(String errorMessage) { + return new ApiResult<>(null, errorMessage); + } + + public static ApiResult failed(Throwable throwable) { + return failed(throwable.getMessage()); + } + + public T getData() { + return data; + } + + public String getError() { + return error; + } +} From 75f68ccfc6c47781c4e32afbb9d8172b297c6c5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:16:17 +0900 Subject: [PATCH 07/31] [#6] refactor: Change some method's access modifier from private to public MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. acquireAttackTeam, acuqireDefenseTeam, acqurireCurrentInning() 메소드의 접근제어자를 public으로 변경 2. team id와 등번호로 BattingHistory를 반환해주는 메소드 추가 --- .../baseball/domain/aggregate/game/Game.java | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java index 891bc785e..66e666107 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java @@ -10,6 +10,7 @@ import team9.baseball.domain.aggregate.team.Team; import team9.baseball.domain.enums.Halves; import team9.baseball.domain.enums.PitchResult; +import team9.baseball.exception.NotFoundException; import java.util.HashMap; import java.util.Map; @@ -127,6 +128,34 @@ public int getTotalScore(Halves halves) { return inningMap.values().stream().filter(x -> x.getHalves() == halves).mapToInt(x -> x.getScore()).sum(); } + public Team acquireAttackTeam(Team awayTeam, Team homeTeam) { + if (currentHalves == Halves.TOP) { + return awayTeam; + } + return homeTeam; + } + + public Team acquireDefenseTeam(Team awayTeam, Team homeTeam) { + if (currentHalves == Halves.TOP) { + return homeTeam; + } + return awayTeam; + } + + public Inning acquireCurrentInning() { + String currentInningKey = Inning.acquireKeyInGame(currentInning, currentHalves); + return inningMap.get(currentInningKey); + } + + public BattingHistory acquireBattingHistory(int batterTeamId, int batterUniformNumber) { + String key = BattingHistory.acquireKeyInGame(batterTeamId, batterUniformNumber); + if (!battingHistoryMap.containsKey(key)) { + throw new NotFoundException(String.format("%d번 게임방에 %d팀 %d 번호 선수에 대한 기록이 없습니다.", + this.id, batterTeamId, batterUniformNumber)); + } + return battingHistoryMap.get(key); + } + private void proceedOut(Team awayTeam, Team homeTeam) { //아웃 카운트 증가 this.outCount++; @@ -203,25 +232,6 @@ private void sendBatterOnPlate(Team attackTeam) { battingHistory.plusAppear(); } - private Team acquireAttackTeam(Team awayTeam, Team homeTeam) { - if (currentHalves == Halves.TOP) { - return awayTeam; - } - return homeTeam; - } - - private Team acquireDefenseTeam(Team awayTeam, Team homeTeam) { - if (currentHalves == Halves.TOP) { - return homeTeam; - } - return awayTeam; - } - - private Inning acquireCurrentInning() { - String currentInningKey = Inning.acquireKeyInGame(currentInning, currentHalves); - return inningMap.get(currentInningKey); - } - private int acquireAttackTeamId() { if (currentHalves == Halves.TOP) { return awayTeamId; From f9f582c835e7b1eb6efb458b828d6743fd279c58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:20:00 +0900 Subject: [PATCH 08/31] [#6] feat: Add a necessary query method into UserRepository --- .../src/main/java/team9/baseball/repository/UserRepository.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BE/baseball/src/main/java/team9/baseball/repository/UserRepository.java b/BE/baseball/src/main/java/team9/baseball/repository/UserRepository.java index 0ee042641..edda651c0 100644 --- a/BE/baseball/src/main/java/team9/baseball/repository/UserRepository.java +++ b/BE/baseball/src/main/java/team9/baseball/repository/UserRepository.java @@ -2,6 +2,8 @@ import org.springframework.data.repository.CrudRepository; import team9.baseball.domain.aggregate.user.User; +import team9.baseball.domain.enums.Venue; public interface UserRepository extends CrudRepository { + boolean existsByCurrentGameIdAndCurrentGameVenue(Long currentGameId, Venue currentGameVenue); } From 701a1586c6679d0bcabd847bd8dfa39b174f3aa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:20:33 +0900 Subject: [PATCH 09/31] [#6] feat: Create PlayerDTO --- .../baseball/DTO/response/PlayerDTO.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/PlayerDTO.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/PlayerDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/PlayerDTO.java new file mode 100644 index 000000000..3bbf76b54 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/PlayerDTO.java @@ -0,0 +1,28 @@ +package team9.baseball.DTO.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import team9.baseball.domain.aggregate.team.Team; + +@Getter +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class PlayerDTO { + private int team_id; + private int uniform_number; + private String name; + + public static PlayerDTO of(Team team, Integer uniform_number) { + if (uniform_number == null) { + return null; + } + + return builder() + .team_id(team.getId()) + .uniform_number(uniform_number) + .name(team.getPlayerName(uniform_number)) + .build(); + } +} From 044af1c886a8743261785552afb24c2dc1e6242e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:20:51 +0900 Subject: [PATCH 10/31] [#6] feat: Create TeamDTO --- .../team9/baseball/DTO/response/TeamDTO.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/TeamDTO.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamDTO.java new file mode 100644 index 000000000..e4d52c059 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamDTO.java @@ -0,0 +1,23 @@ +package team9.baseball.DTO.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class TeamDTO { + private String name; + private int score; + private String role; + + public static TeamDTO of(String name, int score, String role) { + return builder() + .name(name) + .score(score) + .role(role) + .build(); + } +} From e17c64151a0eb04dd914a5201ef315b9aa0a4962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:21:15 +0900 Subject: [PATCH 11/31] [#6] feat: Create PitchHistoryDTO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 투구 기록을 담을 DTO 생성 --- .../DTO/response/PitchHistoryDTO.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java new file mode 100644 index 000000000..c574c6492 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java @@ -0,0 +1,22 @@ +package team9.baseball.DTO.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import team9.baseball.domain.aggregate.game.PitchHistory; + +@Getter +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class PitchHistoryDTO { + private String result; + private String log; + + public static PitchHistoryDTO of(PitchHistory pitchHistory) { + return builder() + .result(pitchHistory.getResult().name()) + .log(null) + .build(); + } +} From 1adc355feb166fd2258c049eb9f6fc7a7ba03d5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:21:53 +0900 Subject: [PATCH 12/31] [#6] feat: Create GameStatusDTO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 게임 메인화면을 업데이트하기 위한 리스폰스 DTO입니다. --- .../baseball/DTO/response/GameStatusDTO.java | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java new file mode 100644 index 000000000..e6eb5fb8b --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java @@ -0,0 +1,116 @@ +package team9.baseball.DTO.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import team9.baseball.domain.aggregate.game.BattingHistory; +import team9.baseball.domain.aggregate.game.Game; +import team9.baseball.domain.aggregate.game.Inning; +import team9.baseball.domain.aggregate.team.Team; +import team9.baseball.domain.enums.Halves; +import team9.baseball.domain.enums.Venue; + +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class GameStatusDTO { + private int strike; + + private int ball; + + private int out; + + private TeamDTO away_team; + + private TeamDTO home_team; + + private String inning; + + private String halves; + + private PlayerDTO pitcher; + + private String pitcher_status; + + private PlayerDTO batter; + + private String batter_status; + + private PlayerDTO base1; + + private PlayerDTO base2; + + private PlayerDTO base3; + + private List pitch_histories; + + private String my_role; + + public static GameStatusDTO of(Game game, Team awayTeam, Team homeTeam, Venue userVenue) { + Team attackTeam = game.acquireAttackTeam(awayTeam, homeTeam); + Team defenseTeam = game.acquireDefenseTeam(awayTeam, homeTeam); + + TeamDTO awayTeamDTO = TeamDTO.of(awayTeam.getName(), game.getTotalScore(Halves.TOP), + acquireCurrentRole(game.getCurrentHalves(), Halves.TOP)); + TeamDTO homeTeamDTO = TeamDTO.of(homeTeam.getName(), game.getTotalScore(Halves.BOTTOM), + acquireCurrentRole(game.getCurrentHalves(), Halves.BOTTOM)); + + + BattingHistory batterHistory = game.acquireBattingHistory(attackTeam.getId(), game.getBatterUniformNumber()); + String batterStatus = acquireBatterStatus(batterHistory); + String pitcherStatus = acquirePitcherStatus(game, defenseTeam.getId(), game.getPitcherUniformNumber()); + + String myRole = userVenue.getHalves() == game.getCurrentHalves() ? "ATTACK" : "DEFENSE"; + + return builder() + .strike(game.getStrikeCount()) + .ball(game.getBallCount()) + .out(game.getOutCount()) + .away_team(awayTeamDTO) + .home_team(homeTeamDTO) + .inning(game.getCurrentInning().toString()) + .halves(game.getCurrentHalves().name()) + .pitcher(PlayerDTO.of(defenseTeam, game.getPitcherUniformNumber())) + .pitcher_status(pitcherStatus) + .batter(PlayerDTO.of(attackTeam, game.getBatterUniformNumber())) + .batter_status(batterStatus) + .base1(PlayerDTO.of(attackTeam, game.getBase1UniformNumber())) + .base2(PlayerDTO.of(attackTeam, game.getBase2UniformNumber())) + .base3(PlayerDTO.of(attackTeam, game.getBase3UniformNumber())) + .pitch_histories(acquirePitchHistories(game.acquireCurrentInning())) + .my_role(myRole) + .build(); + } + + private static String acquireBatterStatus(BattingHistory batterHistory) { + return String.format("%d타석 %d안타", batterHistory.getAppear(), batterHistory.getHits()); + } + + private static String acquirePitcherStatus(Game game, int pitcherTeamId, int pitcherUniformNumber) { + long pitcherCount = game.getInningMap().values().stream() + .flatMap(inning -> inning.getPitchHistoryList().stream()) + .filter(pitchHistory -> pitchHistory.getPitcherTeamId() == pitcherTeamId && + pitchHistory.getPitcherUniformNumber() == pitcherUniformNumber) + .count(); + + return "#" + pitcherCount; + } + + private static List acquirePitchHistories(Inning inning) { + return inning.getPitchHistoryList().stream(). + map(pitchHistory -> PitchHistoryDTO.of(pitchHistory)). + collect(Collectors.toList()); + } + + private static String acquireCurrentRole(Halves currentHalves, Halves halves) { + if (currentHalves == halves) { + return "ATTACK"; + } + return "DEFENSE"; + } + +} From 03d65cfbcb884c0923002b5c1dbdcd548cb026f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:23:16 +0900 Subject: [PATCH 13/31] [#6] feat: Create GameService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 야구 게임방의 서비스 레이어입니다. 2. 게임 만들기, 게임 참가하기, 게임진행하기, 게임결과받기 의 기본기능이 있습니다. --- .../team9/baseball/service/GameService.java | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/service/GameService.java diff --git a/BE/baseball/src/main/java/team9/baseball/service/GameService.java b/BE/baseball/src/main/java/team9/baseball/service/GameService.java new file mode 100644 index 000000000..d9fd1acb3 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/service/GameService.java @@ -0,0 +1,104 @@ +package team9.baseball.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import team9.baseball.DTO.response.GameStatusDTO; +import team9.baseball.domain.aggregate.game.Game; +import team9.baseball.domain.aggregate.team.Team; +import team9.baseball.domain.aggregate.user.User; +import team9.baseball.domain.enums.PitchResult; +import team9.baseball.domain.enums.Venue; +import team9.baseball.exception.NotFoundException; +import team9.baseball.repository.GameRepository; +import team9.baseball.repository.TeamRepository; +import team9.baseball.repository.UserRepository; + +@Service +public class GameService { + private final GameRepository gameRepository; + private final TeamRepository teamRepository; + private final UserRepository userRepository; + + @Autowired + public GameService(GameRepository gameRepository, TeamRepository teamRepository, UserRepository userRepository) { + this.gameRepository = gameRepository; + this.teamRepository = teamRepository; + this.userRepository = userRepository; + } + + public void applyPitchResult(long userId, PitchResult pitchResult) { + User user = getUser(userId); + if (user.getCurrentGameId() == null) { + throw new RuntimeException(userId + "사용자는 게임중이 아닙니다."); + } + Game game = getGame(user.getCurrentGameId()); + Team awayTeam = getTeam(game.getAwayTeamId()); + Team homeTeam = getTeam(game.getHomeTeamId()); + + //현재 내가 공격팀이면 공을 던질 수 없다. + if (game.getCurrentHalves() == user.getCurrentGameVenue().getHalves()) { + throw new RuntimeException(userId + "번 사용자는 현재 공격팀입니다."); + } + + switch (pitchResult) { + case HIT: + game.proceedHit(awayTeam, homeTeam); + break; + case STRIKE: + game.proceedStrike(awayTeam, homeTeam); + break; + case BALL: + game.proceedBall(awayTeam, homeTeam); + break; + } + gameRepository.save(game); + } + + public GameStatusDTO getCurrentGameStatus(long userId) { + User user = getUser(userId); + if (user.getCurrentGameId() == null) { + throw new RuntimeException(userId + "사용자는 게임중이 아닙니다."); + } + Game game = getGame(user.getCurrentGameId()); + Team awayTeam = getTeam(game.getAwayTeamId()); + Team homeTeam = getTeam(game.getHomeTeamId()); + + return GameStatusDTO.of(game, awayTeam, homeTeam, user.getCurrentGameVenue()); + } + + public void createNewGame(long userId, int awayTeamId, int homeTeamId) { + User user = getUser(userId); + Team awayTeam = getTeam(awayTeamId); + Team homeTeam = getTeam(homeTeamId); + + Game game = new Game(awayTeam, homeTeam); + game = gameRepository.save(game); + } + + public void joinGame(long userId, long gameId, Venue venue) { + User user = getUser(userId); + if (user.getCurrentGameId() != null) { + throw new RuntimeException(userId + "사용자는 이미 게임중입니다."); + } + Game game = getGame(gameId); + if (userRepository.existsByCurrentGameIdAndCurrentGameVenue(gameId, venue)) { + throw new RuntimeException(gameId + "번 게임의 " + venue + "팀은 다른 사용자가 참가했습니다."); + } + + user.setCurrentGameId(gameId); + user.setCurrentGameVenue(venue); + userRepository.save(user); + } + + private User getUser(long userId) { + return userRepository.findById(userId).orElseThrow(() -> new NotFoundException(userId + " 사용자는 존재하지 않습니다.")); + } + + private Game getGame(long gameId) { + return gameRepository.findById(gameId).orElseThrow(() -> new NotFoundException(gameId + "번 게임은 존재하지 않습니다.")); + } + + private Team getTeam(int teamId) { + return teamRepository.findById(teamId).orElseThrow(() -> new NotFoundException(teamId + "번 팀은 존재하지 않습니다.")); + } +} From 6b039c82e155c7a8546742fb2b34a515ec91a655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:24:15 +0900 Subject: [PATCH 14/31] [#6] feat: Create ApiGameController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인증과정과 Request param을 받는 걸 생략한 game관련 contoroller입니다. (추후 추가 예정) --- .../controller/ApiGameController.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java diff --git a/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java b/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java new file mode 100644 index 000000000..de9a59107 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java @@ -0,0 +1,42 @@ +package team9.baseball.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import team9.baseball.DTO.response.ApiResult; +import team9.baseball.domain.enums.PitchResult; +import team9.baseball.domain.enums.Venue; +import team9.baseball.service.GameService; + +@RestController +@RequestMapping("/game") +public class ApiGameController { + private final GameService gameService; + + @Autowired + public ApiGameController(GameService gameService) { + this.gameService = gameService; + } + + @PostMapping + public ApiResult createGame() { + gameService.createNewGame(1l, 1, 2); + return ApiResult.succeed("OK"); + } + + @PostMapping("/joining") + public ApiResult joinGame() { + gameService.joinGame(1l, 1, Venue.HOME); + return ApiResult.succeed("OK"); + } + + @GetMapping("/status") + public ApiResult getCurrentGameStatus() { + return ApiResult.succeed(gameService.getCurrentGameStatus(1l)); + } + + @PutMapping("/status") + public ApiResult pitch(PitchResult pitchResult) { + gameService.applyPitchResult(1l, pitchResult); + return ApiResult.succeed("OK"); + } +} From c730f230e0f2d4584551464b21b6c4edebce8b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:24:31 +0900 Subject: [PATCH 15/31] [#6] feat: Create GlobalExceptionHandler --- .../GlobalExceptionHandler.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/exceptionHandler/GlobalExceptionHandler.java diff --git a/BE/baseball/src/main/java/team9/baseball/exceptionHandler/GlobalExceptionHandler.java b/BE/baseball/src/main/java/team9/baseball/exceptionHandler/GlobalExceptionHandler.java new file mode 100644 index 000000000..28a23aad0 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/exceptionHandler/GlobalExceptionHandler.java @@ -0,0 +1,23 @@ +package team9.baseball.exceptionHandler; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import team9.baseball.DTO.response.ApiResult; +import team9.baseball.exception.NotFoundException; + +@RestControllerAdvice +public class GlobalExceptionHandler { + @ExceptionHandler(RuntimeException.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ApiResult runtimeExcpetion(Exception ex) { + return ApiResult.failed(ex); + } + + @ExceptionHandler(NotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public ApiResult notFoundException(Exception ex) { + return ApiResult.failed(ex); + } +} From 1091c96b14d0de7669423e883b311689c0d051f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:30:00 +0900 Subject: [PATCH 16/31] [#1] chore: Add `strike_count`, `ball_count` into `pitch_history` table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pitch_history 테이블에 투구 당시 스트라이크, 볼 상황을 기록하도록 두 개 칼럼 추가하였습니다. --- BE/baseball/src/main/resources/data.sql | 10 ++++++++-- BE/baseball/src/main/resources/schema.sql | 4 +++- docs/database/Schema.mwb | Bin 17917 -> 18112 bytes docs/database/Schema.png | Bin 93864 -> 96852 bytes 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/BE/baseball/src/main/resources/data.sql b/BE/baseball/src/main/resources/data.sql index 8dea8816d..3831d0f5e 100644 --- a/BE/baseball/src/main/resources/data.sql +++ b/BE/baseball/src/main/resources/data.sql @@ -1,9 +1,15 @@ -INSERT INTO team (name) VALUES ('코드스쿼드2'); +INSERT INTO team (name) VALUES ('코드쓰쿼드'); INSERT INTO player (team_id, name, uniform_number) VALUES (1, '아이작', 1); INSERT INTO player (team_id, name, uniform_number) VALUES (1, '쏭', 2); INSERT INTO player (team_id, name, uniform_number) VALUES (1, '쑤', 3); +INSERT INTO player (team_id, name, uniform_number) VALUES (1, '쿠퍼', 4); +INSERT INTO player (team_id, name, uniform_number) VALUES (1, '우디', 5); -INSERT INTO team (name) VALUES ('마스터즈2'); +INSERT INTO team (name) VALUES ('마스터'); INSERT INTO player (team_id, name, uniform_number) VALUES (2, '호눅스', 1); INSERT INTO player (team_id, name, uniform_number) VALUES (2, 'JK', 2); INSERT INTO player (team_id, name, uniform_number) VALUES (2, '크롱', 3); +INSERT INTO player (team_id, name, uniform_number) VALUES (2, '세라', 4); +INSERT INTO player (team_id, name, uniform_number) VALUES (2, '헤드', 5); + +INSERT INTO `user` (email) VALUES ('test@test.com'); diff --git a/BE/baseball/src/main/resources/schema.sql b/BE/baseball/src/main/resources/schema.sql index 76a06c0b6..e7cf64e15 100644 --- a/BE/baseball/src/main/resources/schema.sql +++ b/BE/baseball/src/main/resources/schema.sql @@ -1,5 +1,5 @@ -- MySQL Script generated by MySQL Workbench --- Thu May 6 23:47:43 2021 +-- Fri May 7 10:28:19 2021 -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering @@ -142,6 +142,8 @@ CREATE TABLE IF NOT EXISTS `baseball`.`pitch_history` ( `batter_uniform_number` INT NOT NULL, `result` VARCHAR(6) NOT NULL, `index_in_inning` INT NOT NULL, + `strike_count` INT NOT NULL, + `ball_count` INT NOT NULL, PRIMARY KEY (`id`), INDEX `fk_history_inning1_idx` (`inning_id` ASC), INDEX `fk_pitch_history_team1_idx` (`pitcher_team_id` ASC), diff --git a/docs/database/Schema.mwb b/docs/database/Schema.mwb index 1fb44da62960a3f17e81260792cfec40b67059b8..2acb540dbaac0aa4e37152dd49dbf33769f607ab 100644 GIT binary patch delta 17362 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 delta 17151 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 delta 17734 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 Date: Fri, 7 May 2021 10:35:32 +0900 Subject: [PATCH 17/31] [#6] feat: Change Pitchhistory to fit modified `pitch_history` table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 변경된 테이블에 맞게 PitchHistory에 strikeCount, ballCount 추가 --- .../baseball/domain/aggregate/game/PitchHistory.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/PitchHistory.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/PitchHistory.java index 26e614670..c1dcbcbf9 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/PitchHistory.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/PitchHistory.java @@ -24,12 +24,19 @@ public class PitchHistory { private PitchResult result; + private int strikeCount; + + private int ballCount; + public PitchHistory(Integer pitcherTeamId, Integer pitcherUniformNumber, - Integer batterTeamId, Integer batterUniformNumber, PitchResult result) { + Integer batterTeamId, Integer batterUniformNumber, PitchResult result, + int strikeCount, int ballCount) { this.pitcherTeamId = pitcherTeamId; this.pitcherUniformNumber = pitcherUniformNumber; this.batterTeamId = batterTeamId; this.batterUniformNumber = batterUniformNumber; this.result = result; + this.strikeCount = strikeCount; + this.ballCount = ballCount; } } From f5a8bf47ce625fc5bd24dbb19de4c33d1c1bb6b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:37:23 +0900 Subject: [PATCH 18/31] [#6] feat: Modify Game to write strike, ball count into pitchHistory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pitchHistory 기록할 때, 당시의 투구상황을 기록하도록 수정했습니다. --- .../baseball/domain/aggregate/game/Game.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java index 66e666107..39f491b8c 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java @@ -75,15 +75,14 @@ private void initializeBattingHistory(Team team) { } public void proceedStrike(Team awayTeam, Team homeTeam) { - //카운트 증가 - this.strikeCount++; - //기록할 pitch history 생성 PitchHistory pitchHistory = new PitchHistory(acquireDefenseTeamId(), pitcherUniformNumber, - acquireAttackTeamId(), batterUniformNumber, PitchResult.STRIKE); + acquireAttackTeamId(), batterUniformNumber, PitchResult.STRIKE, this.strikeCount, this.ballCount); //현재 이닝에 pitch history 기록 acquireCurrentInning().pitchHistoryList.add(pitchHistory); + //카운트 증가 + this.strikeCount++; //삼진 아웃 처리 if (strikeCount == 3) { proceedOut(awayTeam, homeTeam); @@ -91,15 +90,14 @@ public void proceedStrike(Team awayTeam, Team homeTeam) { } public void proceedBall(Team awayTeam, Team homeTeam) { - //카운트 증가 - this.ballCount++; - //기록할 pitch history 생성 PitchHistory pitchHistory = new PitchHistory(acquireDefenseTeamId(), pitcherUniformNumber, - acquireAttackTeamId(), batterUniformNumber, PitchResult.BALL); + acquireAttackTeamId(), batterUniformNumber, PitchResult.BALL, this.strikeCount, this.ballCount); //현재 이닝에 pitch history 기록 acquireCurrentInning().pitchHistoryList.add(pitchHistory); + //카운트 증가 + this.ballCount++; //볼넷일 경우 출루하고 다음 타자 등판 if (ballCount == 4) { sendBatterOnBase(); @@ -110,11 +108,15 @@ public void proceedBall(Team awayTeam, Team homeTeam) { } public void proceedHit(Team awayTeam, Team homeTeam) { - Team attackTeam = acquireAttackTeam(awayTeam, homeTeam); + //기록할 pitch history 생성 + PitchHistory pitchHistory = new PitchHistory(acquireDefenseTeamId(), pitcherUniformNumber, + acquireAttackTeamId(), batterUniformNumber, PitchResult.BALL, this.strikeCount, this.ballCount); + //현재 이닝에 pitch history 기록 + acquireCurrentInning().pitchHistoryList.add(pitchHistory); //타자의 battingHistory 에 타수 카운트 추가 - String battingHistoryKey = BattingHistory.acquireKeyInGame(attackTeam.getId(), batterUniformNumber); - BattingHistory battingHistory = battingHistoryMap.get(battingHistoryKey); + Team attackTeam = acquireAttackTeam(awayTeam, homeTeam); + BattingHistory battingHistory = acquireBattingHistory(attackTeam.getId(), batterUniformNumber); battingHistory.plusHits(); //타자 출루 From b171378a1589671f0ad0696a2560af1ce3bf3854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:42:14 +0900 Subject: [PATCH 19/31] [#6] feat: Add additional informations into PitchHistoryDTO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PitchHistoryDTO에 투구 당시의 스트라이크, 볼 카운트와 투수, 타자 정보 등을 추가로 담도록 수정 --- .../team9/baseball/DTO/response/GameStatusDTO.java | 6 +++--- .../baseball/DTO/response/PitchHistoryDTO.java | 13 ++++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java index e6eb5fb8b..9aa5190a2 100644 --- a/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java @@ -81,7 +81,7 @@ public static GameStatusDTO of(Game game, Team awayTeam, Team homeTeam, Venue us .base1(PlayerDTO.of(attackTeam, game.getBase1UniformNumber())) .base2(PlayerDTO.of(attackTeam, game.getBase2UniformNumber())) .base3(PlayerDTO.of(attackTeam, game.getBase3UniformNumber())) - .pitch_histories(acquirePitchHistories(game.acquireCurrentInning())) + .pitch_histories(acquirePitchHistories(attackTeam, defenseTeam, game.acquireCurrentInning())) .my_role(myRole) .build(); } @@ -100,9 +100,9 @@ private static String acquirePitcherStatus(Game game, int pitcherTeamId, int pit return "#" + pitcherCount; } - private static List acquirePitchHistories(Inning inning) { + private static List acquirePitchHistories(Team attackTeam, Team defenseTeam, Inning inning) { return inning.getPitchHistoryList().stream(). - map(pitchHistory -> PitchHistoryDTO.of(pitchHistory)). + map(pitchHistory -> PitchHistoryDTO.of(attackTeam, defenseTeam, pitchHistory)). collect(Collectors.toList()); } diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java index c574c6492..2840689ff 100644 --- a/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java @@ -5,18 +5,25 @@ import lombok.Builder; import lombok.Getter; import team9.baseball.domain.aggregate.game.PitchHistory; +import team9.baseball.domain.aggregate.team.Team; @Getter @Builder @AllArgsConstructor(access = AccessLevel.PRIVATE) public class PitchHistoryDTO { + private PlayerDTO pitcher; + private PlayerDTO batter; private String result; - private String log; + private int strike_count; + private int ball_count; - public static PitchHistoryDTO of(PitchHistory pitchHistory) { + public static PitchHistoryDTO of(Team attackTeam, Team defenseTeam, PitchHistory pitchHistory) { return builder() + .pitcher(PlayerDTO.of(defenseTeam, pitchHistory.getPitcherUniformNumber())) + .batter(PlayerDTO.of(attackTeam, pitchHistory.getBatterUniformNumber())) .result(pitchHistory.getResult().name()) - .log(null) + .strike_count(pitchHistory.getStrikeCount()) + .ball_count(pitchHistory.getBallCount()) .build(); } } From 3dfa3d677bcd29d24aab3fb209922134d9ba818c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 10:47:06 +0900 Subject: [PATCH 20/31] [#6] fix: Correct a typo (BALL -> HIT) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 안타를 친상황에서 PitchHistory를 BALL로 기록하고 있었습니다. --- .../main/java/team9/baseball/domain/aggregate/game/Game.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java index 39f491b8c..3fd60f5ad 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java @@ -110,7 +110,7 @@ public void proceedBall(Team awayTeam, Team homeTeam) { public void proceedHit(Team awayTeam, Team homeTeam) { //기록할 pitch history 생성 PitchHistory pitchHistory = new PitchHistory(acquireDefenseTeamId(), pitcherUniformNumber, - acquireAttackTeamId(), batterUniformNumber, PitchResult.BALL, this.strikeCount, this.ballCount); + acquireAttackTeamId(), batterUniformNumber, PitchResult.HIT, this.strikeCount, this.ballCount); //현재 이닝에 pitch history 기록 acquireCurrentInning().pitchHistoryList.add(pitchHistory); From 148918cdeed94963f64164032f23d1fd8fd2e910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 11:11:12 +0900 Subject: [PATCH 21/31] [#6] refactor: Remove unnecessary `key_in_game` from `Inning`, `BattingHistory` entities --- .../baseball/domain/aggregate/game/BattingHistory.java | 3 --- .../java/team9/baseball/domain/aggregate/game/Game.java | 9 ++++----- .../team9/baseball/domain/aggregate/game/Inning.java | 3 --- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/BattingHistory.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/BattingHistory.java index 7b7abd617..a35630ec4 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/BattingHistory.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/BattingHistory.java @@ -23,12 +23,9 @@ public class BattingHistory { private int out; - private String keyInGame; - public BattingHistory(Integer batterTeamId, Integer batterUniformNumber) { this.batterTeamId = batterTeamId; this.batterUniformNumber = batterUniformNumber; - this.keyInGame = acquireKeyInGame(batterTeamId, batterUniformNumber); } public static String acquireKeyInGame(Integer batterTeamId, Integer batterUniformNumber) { diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java index 3fd60f5ad..1270dc73f 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java @@ -63,14 +63,14 @@ public Game(Team awayTeam, Team homeTeam) { this.currentInning = 1; this.currentHalves = Halves.TOP; - Inning firstInning = new Inning(currentInning, currentHalves); - this.inningMap.put(firstInning.getKeyInGame(), firstInning); + this.inningMap.put(Inning.acquireKeyInGame(currentInning, currentHalves), new Inning(currentInning, currentHalves)); } private void initializeBattingHistory(Team team) { for (Player player : team.getPlayerMap().values()) { + String key = BattingHistory.acquireKeyInGame(team.getId(), player.getUniformNumber()); BattingHistory battingHistory = new BattingHistory(team.getId(), player.getUniformNumber()); - this.battingHistoryMap.put(battingHistory.getKeyInGame(), battingHistory); + this.battingHistoryMap.put(key, battingHistory); } } @@ -203,8 +203,7 @@ private void goToNextInning(Team homeTeam, Team awayTeam) { } else { this.currentHalves = Halves.BOTTOM; } - Inning inning = new Inning(currentInning, currentHalves); - this.inningMap.put(inning.getKeyInGame(), inning); + this.inningMap.put(Inning.acquireKeyInGame(currentInning, currentHalves), new Inning(currentInning, currentHalves)); //현재 이닝의 공격팀 수비팀 설정 Team attackTeam = acquireAttackTeam(awayTeam, homeTeam); diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Inning.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Inning.java index 7f4d9e108..38dd32953 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Inning.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Inning.java @@ -24,8 +24,6 @@ public class Inning { private int score; - private String keyInGame; - @MappedCollection(idColumn = "inning_id", keyColumn = "index_in_inning") List pitchHistoryList = new ArrayList<>(); @@ -33,7 +31,6 @@ public Inning(Integer inning, Halves halves) { this.inning = inning; this.halves = halves; this.score = 0; - this.keyInGame = acquireKeyInGame(inning, halves); } public void plusScore() { From 6019b121619d89e37d4db84a56563db69ef3ca5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 11:23:19 +0900 Subject: [PATCH 22/31] [#6] refactor: Remove unnecessary `uniformNumber` from Player entity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Team 객체에서 uniform_number를 key로, Player를 value로 하는 Map을 들고 있습니다. 2. Player는 aggregate root인 Team을 통해서만 접근할 수 있기 때문에, Player 내부에 uniform_number는 필요 없습니다. 3. Player가 uniform_number를 갖고 있으면, spring data jdbc가 쿼리문을 생성할때 uniform_number 칼럼을 중복하여 호출합니다. --- .../baseball/domain/aggregate/game/Game.java | 7 +++---- .../domain/aggregate/team/Player.java | 5 +---- .../baseball/domain/aggregate/team/Team.java | 11 ++++------ .../domain/aggregate/game/GameTest.java | 20 +++++++++---------- .../repository/GameRepositoryTest.java | 12 +++++------ .../repository/TeamRepositoryTest.java | 6 +++--- 6 files changed, 27 insertions(+), 34 deletions(-) diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java index 1270dc73f..b703407b9 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java @@ -6,7 +6,6 @@ import lombok.Setter; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.MappedCollection; -import team9.baseball.domain.aggregate.team.Player; import team9.baseball.domain.aggregate.team.Team; import team9.baseball.domain.enums.Halves; import team9.baseball.domain.enums.PitchResult; @@ -67,9 +66,9 @@ public Game(Team awayTeam, Team homeTeam) { } private void initializeBattingHistory(Team team) { - for (Player player : team.getPlayerMap().values()) { - String key = BattingHistory.acquireKeyInGame(team.getId(), player.getUniformNumber()); - BattingHistory battingHistory = new BattingHistory(team.getId(), player.getUniformNumber()); + for (Integer uniform_number : team.getPlayerMap().keySet()) { + String key = BattingHistory.acquireKeyInGame(team.getId(), uniform_number); + BattingHistory battingHistory = new BattingHistory(team.getId(), uniform_number); this.battingHistoryMap.put(key, battingHistory); } } diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Player.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Player.java index 3ebd37cb2..1c0a128c2 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Player.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Player.java @@ -12,10 +12,7 @@ public class Player { private String name; - private Integer uniformNumber; - - public Player(String name, Integer uniformNumber) { + public Player(String name) { this.name = name; - this.uniformNumber = uniformNumber; } } diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Team.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Team.java index 5345a0d49..bc5b4b587 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Team.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/team/Team.java @@ -37,14 +37,12 @@ public String getPlayerName(int uniform_number) { } public int getFirstPlayerUniformNumber() { - Player firstPlayer = playerMap.values().stream().findFirst(). + return playerMap.keySet().stream().findFirst(). orElseThrow(() -> new NotFoundException("팀에 속한 선수가 없습니다.")); - - return firstPlayer.getUniformNumber(); } - public void addPlayer(Player player) { - playerMap.put(player.getUniformNumber(), player); + public void addPlayer(int uniform_number, Player player) { + playerMap.put(uniform_number, player); } public int getNextPlayerUniformNumber(int currentUniformNumber) { @@ -52,8 +50,7 @@ public int getNextPlayerUniformNumber(int currentUniformNumber) { throw new NotFoundException("팀에 속한 선수가 없습니다."); } - List playerList = playerMap.values().stream().map(x -> x.getUniformNumber()) - .sorted().collect(Collectors.toList()); + List playerList = playerMap.keySet().stream().sorted().collect(Collectors.toList()); int currentIndex = playerList.indexOf(currentUniformNumber); int nextIndex = (currentIndex + 1) % playerList.size(); diff --git a/BE/baseball/src/test/java/team9/baseball/domain/aggregate/game/GameTest.java b/BE/baseball/src/test/java/team9/baseball/domain/aggregate/game/GameTest.java index b798cf93d..c401b6768 100644 --- a/BE/baseball/src/test/java/team9/baseball/domain/aggregate/game/GameTest.java +++ b/BE/baseball/src/test/java/team9/baseball/domain/aggregate/game/GameTest.java @@ -17,19 +17,19 @@ class GameTest { void setUp() { homeTeam = new Team("코드스쿼드"); homeTeam.setId(1); - homeTeam.addPlayer(new Player("아이작", 1)); - homeTeam.addPlayer(new Player("쏭", 2)); - homeTeam.addPlayer(new Player("쑤", 3)); - homeTeam.addPlayer(new Player("쿠퍼", 4)); - homeTeam.addPlayer(new Player("우디", 5)); + homeTeam.addPlayer(1, new Player("아이작")); + homeTeam.addPlayer(2, new Player("쏭")); + homeTeam.addPlayer(3, new Player("쑤")); + homeTeam.addPlayer(4, new Player("쿠퍼")); + homeTeam.addPlayer(5, new Player("우디")); awayTeam = new Team("마스터즈"); awayTeam.setId(2); - awayTeam.addPlayer(new Player("호눅스", 1)); - awayTeam.addPlayer(new Player("JK", 2)); - awayTeam.addPlayer(new Player("크롱", 3)); - awayTeam.addPlayer(new Player("세라", 4)); - awayTeam.addPlayer(new Player("헤드", 5)); + awayTeam.addPlayer(1, new Player("호눅스")); + awayTeam.addPlayer(2, new Player("JK")); + awayTeam.addPlayer(3, new Player("크롱")); + awayTeam.addPlayer(4, new Player("세라")); + awayTeam.addPlayer(5, new Player("헤드")); game = new Game(awayTeam, homeTeam); } diff --git a/BE/baseball/src/test/java/team9/baseball/repository/GameRepositoryTest.java b/BE/baseball/src/test/java/team9/baseball/repository/GameRepositoryTest.java index 6b1707d96..0b046fe95 100644 --- a/BE/baseball/src/test/java/team9/baseball/repository/GameRepositoryTest.java +++ b/BE/baseball/src/test/java/team9/baseball/repository/GameRepositoryTest.java @@ -27,15 +27,15 @@ public GameRepositoryTest(TeamRepository teamRepository, GameRepository gameRepo @BeforeEach void setUp() { Team testTeam = new Team("코드스쿼드"); - testTeam.addPlayer(new Player("아이작", 1)); - testTeam.addPlayer(new Player("쏭", 2)); - testTeam.addPlayer(new Player("쑤", 3)); + testTeam.addPlayer(1, new Player("아이작")); + testTeam.addPlayer(2, new Player("쏭")); + testTeam.addPlayer(3, new Player("쑤")); this.teamRepository.save(testTeam); Team testTeam2 = new Team("마스터즈"); - testTeam2.addPlayer(new Player("호눅스", 1)); - testTeam2.addPlayer(new Player("JK", 2)); - testTeam2.addPlayer(new Player("크롱", 3)); + testTeam2.addPlayer(1, new Player("호눅스")); + testTeam2.addPlayer(2, new Player("JK")); + testTeam2.addPlayer(3, new Player("크롱")); this.teamRepository.save(testTeam2); } diff --git a/BE/baseball/src/test/java/team9/baseball/repository/TeamRepositoryTest.java b/BE/baseball/src/test/java/team9/baseball/repository/TeamRepositoryTest.java index 562c243d3..ada7a7a08 100644 --- a/BE/baseball/src/test/java/team9/baseball/repository/TeamRepositoryTest.java +++ b/BE/baseball/src/test/java/team9/baseball/repository/TeamRepositoryTest.java @@ -23,9 +23,9 @@ public TeamRepositoryTest(TeamRepository teamRepository) { @DisplayName("Team 생성 테스트") void create() { Team testTeam2 = new Team("마스터즈"); - testTeam2.addPlayer(new Player("호눅스", 1)); - testTeam2.addPlayer(new Player("JK", 2)); - testTeam2.addPlayer(new Player("크롱", 3)); + testTeam2.addPlayer(1, new Player("호눅스")); + testTeam2.addPlayer(2, new Player("JK")); + testTeam2.addPlayer(3, new Player("크롱")); Team saved = this.teamRepository.save(testTeam2); Assertions.assertThat(saved.getName()).isEqualTo("마스터즈"); Assertions.assertThat(saved.getPlayerMap().size()).isEqualTo(3); From f90d2897867ba334ed7484c59f389b2ebff18240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 12:20:49 +0900 Subject: [PATCH 23/31] [#6] feat: Create custom query method to get game descriptions list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 게임방 목록을 보여주기 위하여 각 테이블을 조인하는 커스텀 쿼리 작성 --- .../DTO/response/GameDescriptionDTO.java | 16 +++++++++++++++ .../repository/CustomGameRepository.java | 20 +++++++++++++++++++ .../baseball/repository/GameRepository.java | 5 ++++- 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/GameDescriptionDTO.java create mode 100644 BE/baseball/src/main/java/team9/baseball/repository/CustomGameRepository.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/GameDescriptionDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameDescriptionDTO.java new file mode 100644 index 000000000..60cee7909 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameDescriptionDTO.java @@ -0,0 +1,16 @@ +package team9.baseball.DTO.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +public class GameDescriptionDTO { + private Long id; + private String awayTeam; + private String homeTeam; + private String awayUserEmail; + private String homeUserEmail; +} diff --git a/BE/baseball/src/main/java/team9/baseball/repository/CustomGameRepository.java b/BE/baseball/src/main/java/team9/baseball/repository/CustomGameRepository.java new file mode 100644 index 000000000..5699d296b --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/repository/CustomGameRepository.java @@ -0,0 +1,20 @@ +package team9.baseball.repository; + +import org.springframework.data.jdbc.repository.query.Query; +import org.springframework.stereotype.Repository; +import team9.baseball.DTO.response.GameDescriptionDTO; + +import java.util.List; + +@Repository +public interface CustomGameRepository { + @Query("select SG.id, SG.away_team, SG.home_team, away_user.email as `away_user_email`, home_user.email as `home_user_email` from " + + "( " + + "select G.id as `id`, T1.name as `away_team`, T2.name as `home_team` from game G " + + "left join team T1 on G.away_team_id = T1.id " + + "left join team T2 on G.home_team_id = T2.id " + + ") SG " + + "left join `user` away_user on SG.id = away_user.current_game_id and away_user.current_game_venue = 'AWAY' " + + "left join `user` home_user on SG.id = home_user.current_game_id and home_user.current_game_venue = 'HOME'") + List findAllGameDescription(); +} diff --git a/BE/baseball/src/main/java/team9/baseball/repository/GameRepository.java b/BE/baseball/src/main/java/team9/baseball/repository/GameRepository.java index 81ae23d4a..97b96d5c9 100644 --- a/BE/baseball/src/main/java/team9/baseball/repository/GameRepository.java +++ b/BE/baseball/src/main/java/team9/baseball/repository/GameRepository.java @@ -3,5 +3,8 @@ import org.springframework.data.repository.CrudRepository; import team9.baseball.domain.aggregate.game.Game; -public interface GameRepository extends CrudRepository { +import java.util.List; + +public interface GameRepository extends CrudRepository, CustomGameRepository { + List findAll(); } From 6aa30fbb25f05dfb659d99d5d93a59e47e547633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 12:21:17 +0900 Subject: [PATCH 24/31] [#6] feat: Implements getting game list API --- .../java/team9/baseball/controller/ApiGameController.java | 5 +++++ .../src/main/java/team9/baseball/service/GameService.java | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java b/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java index de9a59107..2d3f27533 100644 --- a/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java +++ b/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java @@ -17,6 +17,11 @@ public ApiGameController(GameService gameService) { this.gameService = gameService; } + @GetMapping("/list") + public ApiResult getGameDescriptions() { + return ApiResult.succeed(gameService.getAllGameList()); + } + @PostMapping public ApiResult createGame() { gameService.createNewGame(1l, 1, 2); diff --git a/BE/baseball/src/main/java/team9/baseball/service/GameService.java b/BE/baseball/src/main/java/team9/baseball/service/GameService.java index d9fd1acb3..c8215169b 100644 --- a/BE/baseball/src/main/java/team9/baseball/service/GameService.java +++ b/BE/baseball/src/main/java/team9/baseball/service/GameService.java @@ -2,6 +2,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import team9.baseball.DTO.response.GameDescriptionDTO; import team9.baseball.DTO.response.GameStatusDTO; import team9.baseball.domain.aggregate.game.Game; import team9.baseball.domain.aggregate.team.Team; @@ -13,6 +14,8 @@ import team9.baseball.repository.TeamRepository; import team9.baseball.repository.UserRepository; +import java.util.List; + @Service public class GameService { private final GameRepository gameRepository; @@ -90,6 +93,10 @@ public void joinGame(long userId, long gameId, Venue venue) { userRepository.save(user); } + public List getAllGameList() { + return gameRepository.findAllGameDescription(); + } + private User getUser(long userId) { return userRepository.findById(userId).orElseThrow(() -> new NotFoundException(userId + " 사용자는 존재하지 않습니다.")); } From a817497454235d41d045e6e2fd8e94b3f154924c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 13:31:35 +0900 Subject: [PATCH 25/31] [#6] refactor: Change DTO's builder access modifier from public to private MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 팩토리 메소드 패턴을 위해서 builder의 접근제어자를 private으로 변경 --- .../main/java/team9/baseball/DTO/response/GameStatusDTO.java | 2 +- .../main/java/team9/baseball/DTO/response/PitchHistoryDTO.java | 2 +- .../src/main/java/team9/baseball/DTO/response/PlayerDTO.java | 2 +- .../src/main/java/team9/baseball/DTO/response/TeamDTO.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java index 9aa5190a2..4a6756081 100644 --- a/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameStatusDTO.java @@ -15,7 +15,7 @@ import java.util.stream.Collectors; @Getter -@Builder +@Builder(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class GameStatusDTO { private int strike; diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java index 2840689ff..80ff48b5c 100644 --- a/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/PitchHistoryDTO.java @@ -8,7 +8,7 @@ import team9.baseball.domain.aggregate.team.Team; @Getter -@Builder +@Builder(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class PitchHistoryDTO { private PlayerDTO pitcher; diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/PlayerDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/PlayerDTO.java index 3bbf76b54..dc4167652 100644 --- a/BE/baseball/src/main/java/team9/baseball/DTO/response/PlayerDTO.java +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/PlayerDTO.java @@ -7,7 +7,7 @@ import team9.baseball.domain.aggregate.team.Team; @Getter -@Builder +@Builder(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class PlayerDTO { private int team_id; diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamDTO.java index e4d52c059..6ad250566 100644 --- a/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamDTO.java +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamDTO.java @@ -6,7 +6,7 @@ import lombok.Getter; @Getter -@Builder +@Builder(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class TeamDTO { private String name; From 65cd76bc1ed8ea2b2b92fe2687b7c70ac2a4b867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 14:02:29 +0900 Subject: [PATCH 26/31] [#6] fix: Use `sendBatterOnPlate` method always when change batter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. sendBatterOnPlate 메소드로 타석에 타자를 올리면 타자의 타석 수도 올려줍니다. 2. 게임 첫시작이나 다음이닝 변경 시, sendBatterOnPlate 없이 this.batterUniformNumber만 바꿔주고 있어서 타석 수가 올라가지 않고 있었습니다. --- .../baseball/domain/aggregate/game/Game.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java index b703407b9..6952fe59e 100644 --- a/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java +++ b/BE/baseball/src/main/java/team9/baseball/domain/aggregate/game/Game.java @@ -54,12 +54,12 @@ public class Game { public Game(Team awayTeam, Team homeTeam) { this.awayTeamId = awayTeam.getId(); this.homeTeamId = homeTeam.getId(); - this.pitcherUniformNumber = awayTeam.getFirstPlayerUniformNumber(); - this.batterUniformNumber = homeTeam.getFirstPlayerUniformNumber(); - initializeBattingHistory(awayTeam); initializeBattingHistory(homeTeam); + this.pitcherUniformNumber = homeTeam.getFirstPlayerUniformNumber(); + sendBatterOnPlate(awayTeamId, awayTeam.getFirstPlayerUniformNumber()); + this.currentInning = 1; this.currentHalves = Halves.TOP; this.inningMap.put(Inning.acquireKeyInGame(currentInning, currentHalves), new Inning(currentInning, currentHalves)); @@ -102,7 +102,7 @@ public void proceedBall(Team awayTeam, Team homeTeam) { sendBatterOnBase(); Team attackTeam = acquireAttackTeam(awayTeam, homeTeam); - sendBatterOnPlate(attackTeam); + sendBatterOnPlate(attackTeam.getId(), attackTeam.getNextPlayerUniformNumber(batterUniformNumber)); } } @@ -122,7 +122,7 @@ public void proceedHit(Team awayTeam, Team homeTeam) { sendBatterOnBase(); //타석에 다음 타자 등판 - sendBatterOnPlate(attackTeam); + sendBatterOnPlate(attackTeam.getId(), attackTeam.getNextPlayerUniformNumber(batterUniformNumber)); } public int getTotalScore(Halves halves) { @@ -174,7 +174,7 @@ private void proceedOut(Team awayTeam, Team homeTeam) { //타석에 다음 타자 등판 Team attackTeam = acquireAttackTeam(awayTeam, homeTeam); - sendBatterOnPlate(attackTeam); + sendBatterOnPlate(attackTeam.getId(), attackTeam.getNextPlayerUniformNumber(batterUniformNumber)); } private void sendBatterOnBase() { @@ -189,7 +189,7 @@ private void sendBatterOnBase() { this.base1UniformNumber = this.batterUniformNumber; } - private void goToNextInning(Team homeTeam, Team awayTeam) { + private void goToNextInning(Team awayTeam, Team homeTeam) { //카운트 초기화 this.strikeCount = 0; this.ballCount = 0; @@ -204,7 +204,7 @@ private void goToNextInning(Team homeTeam, Team awayTeam) { } this.inningMap.put(Inning.acquireKeyInGame(currentInning, currentHalves), new Inning(currentInning, currentHalves)); - //현재 이닝의 공격팀 수비팀 설정 + //현재 이닝의 공격팀 수비팀 확인 Team attackTeam = acquireAttackTeam(awayTeam, homeTeam); Team defenseTeam = acquireDefenseTeam(awayTeam, homeTeam); @@ -213,17 +213,15 @@ private void goToNextInning(Team homeTeam, Team awayTeam) { //공격팀 타자 설정 (직전 투수의 다음 등번호가 타자가 됨) int nextBatterUniformNumber = attackTeam.getNextPlayerUniformNumber(pitcherUniformNumber); this.pitcherUniformNumber = nextPitcherUniformNumber; - this.batterUniformNumber = nextBatterUniformNumber; + sendBatterOnPlate(attackTeam.getId(), nextBatterUniformNumber); } - private void sendBatterOnPlate(Team attackTeam) { + private void sendBatterOnPlate(int batterTeamId, int nextBatterUniformNumber) { //카운트 초기화 this.strikeCount = 0; this.ballCount = 0; //타석에 다음 선수 등판 - int batterTeamId = attackTeam.getId(); - int nextBatterUniformNumber = attackTeam.getNextPlayerUniformNumber(batterUniformNumber); this.batterUniformNumber = nextBatterUniformNumber; //선수의 BatterHistory 에 타석 카운트 추가 From ab93dfd9e6b6e86e60bc8131cc91b550c9d400cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 14:03:03 +0900 Subject: [PATCH 27/31] [#6] feat: Create BattingHistoryDTO --- .../DTO/response/BattingHistoryDTO.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/BattingHistoryDTO.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/BattingHistoryDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/BattingHistoryDTO.java new file mode 100644 index 000000000..733c91527 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/BattingHistoryDTO.java @@ -0,0 +1,37 @@ +package team9.baseball.DTO.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import team9.baseball.domain.aggregate.game.BattingHistory; +import team9.baseball.domain.aggregate.team.Team; + +@Getter +@Builder(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class BattingHistoryDTO { + private int uniform_number; + private String name; + private int appear_count; + private int hit_count; + private double hit_ratio; + private boolean playing; + + + public static BattingHistoryDTO of(Team team, BattingHistory battingHistory, int playingUniformNumber) { + double hitRatio = 0; + if (battingHistory.getAppear() != 0) { + hitRatio = (double) battingHistory.getHits() / (double) battingHistory.getAppear(); + } + + return builder() + .uniform_number(battingHistory.getBatterUniformNumber()) + .name(team.getPlayerName(battingHistory.getBatterUniformNumber())) + .appear_count(battingHistory.getAppear()) + .hit_count(battingHistory.getHits()) + .hit_ratio(hitRatio) + .playing(battingHistory.getBatterUniformNumber() == playingUniformNumber) + .build(); + } +} From 9bc59a056b2a90099a504342c2c4a4991f5e1ab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 14:03:10 +0900 Subject: [PATCH 28/31] [#6] feat: Create TeamHistoryDTO --- .../baseball/DTO/response/TeamHistoryDTO.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/TeamHistoryDTO.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamHistoryDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamHistoryDTO.java new file mode 100644 index 000000000..4b378a121 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/TeamHistoryDTO.java @@ -0,0 +1,25 @@ +package team9.baseball.DTO.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +import java.util.List; + +@Getter +@Builder(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class TeamHistoryDTO { + private String team_name; + private List scores; + private List batting_history; + + public static TeamHistoryDTO of(String team_name, List scores, List batting_history) { + return builder() + .team_name(team_name) + .scores(scores) + .batting_history(batting_history) + .build(); + } +} From 8aedf48026fb90af393361ba390244ec76b2cf0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 14:03:17 +0900 Subject: [PATCH 29/31] [#6] feat: Create GameHistoryDTO --- .../baseball/DTO/response/GameHistoryDTO.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/response/GameHistoryDTO.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/response/GameHistoryDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameHistoryDTO.java new file mode 100644 index 000000000..22da78322 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/response/GameHistoryDTO.java @@ -0,0 +1,56 @@ +package team9.baseball.DTO.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import team9.baseball.domain.aggregate.game.Game; +import team9.baseball.domain.aggregate.game.Inning; +import team9.baseball.domain.aggregate.team.Team; +import team9.baseball.domain.enums.Halves; + +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@Builder(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class GameHistoryDTO { + private TeamHistoryDTO away_team; + private TeamHistoryDTO home_team; + + public static GameHistoryDTO of(Game game, Team awayTeam, Team homeTeam) { + List awayScores = acquireScores(game, Halves.TOP); + List homeScores = acquireScores(game, Halves.BOTTOM); + + int awayPlayingUniformNumber = game.getCurrentHalves() == Halves.TOP ? + game.getBatterUniformNumber() : game.getPitcherUniformNumber(); + int homePlayingUniformNumber = game.getCurrentHalves() == Halves.BOTTOM ? + game.getBatterUniformNumber() : game.getPitcherUniformNumber(); + + List awayBattingHistories = acquireBattingHistoryDTOList(game, awayTeam, awayPlayingUniformNumber); + List homeBattingHistories = acquireBattingHistoryDTOList(game, homeTeam, homePlayingUniformNumber); + + return builder() + .away_team(TeamHistoryDTO.of(awayTeam.getName(), awayScores, awayBattingHistories)) + .home_team(TeamHistoryDTO.of(homeTeam.getName(), homeScores, homeBattingHistories)) + .build(); + } + + private static List acquireScores(Game game, Halves halves) { + return game.getInningMap().values().stream(). + filter(x -> x.getHalves() == halves) + .sorted(Comparator.comparingInt(Inning::getInning)) + .map(x -> x.getScore()) + .collect(Collectors.toList()); + } + + private static List acquireBattingHistoryDTOList(Game game, Team team, int playingUniformNumber) { + return game.getBattingHistoryMap().values().stream() + .filter(x -> x.getBatterTeamId() == team.getId()) + .map(x -> BattingHistoryDTO.of(team, x, playingUniformNumber)) + .collect(Collectors.toList()); + } + +} From 858a04df3f47a3d11da46779cd5cf8e155d3cded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 14:04:28 +0900 Subject: [PATCH 30/31] [#6] Implements API that response current game history MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 현재 게임 기록 (스코어, 타율) 을 반환해주는 API 구현 --- .../baseball/controller/ApiGameController.java | 5 +++++ .../java/team9/baseball/service/GameService.java | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java b/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java index 2d3f27533..78ef3e5a1 100644 --- a/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java +++ b/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java @@ -44,4 +44,9 @@ public ApiResult pitch(PitchResult pitchResult) { gameService.applyPitchResult(1l, pitchResult); return ApiResult.succeed("OK"); } + + @GetMapping("/history") + public ApiResult getCurrentGameHistory() { + return ApiResult.succeed(gameService.getCurrentGameHistory(1l)); + } } diff --git a/BE/baseball/src/main/java/team9/baseball/service/GameService.java b/BE/baseball/src/main/java/team9/baseball/service/GameService.java index c8215169b..8ba2b306a 100644 --- a/BE/baseball/src/main/java/team9/baseball/service/GameService.java +++ b/BE/baseball/src/main/java/team9/baseball/service/GameService.java @@ -3,6 +3,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import team9.baseball.DTO.response.GameDescriptionDTO; +import team9.baseball.DTO.response.GameHistoryDTO; import team9.baseball.DTO.response.GameStatusDTO; import team9.baseball.domain.aggregate.game.Game; import team9.baseball.domain.aggregate.team.Team; @@ -69,6 +70,18 @@ public GameStatusDTO getCurrentGameStatus(long userId) { return GameStatusDTO.of(game, awayTeam, homeTeam, user.getCurrentGameVenue()); } + public GameHistoryDTO getCurrentGameHistory(long userId) { + User user = getUser(userId); + if (user.getCurrentGameId() == null) { + throw new RuntimeException(userId + "사용자는 게임중이 아닙니다."); + } + Game game = getGame(user.getCurrentGameId()); + Team awayTeam = getTeam(game.getAwayTeamId()); + Team homeTeam = getTeam(game.getHomeTeamId()); + + return GameHistoryDTO.of(game, awayTeam, homeTeam); + } + public void createNewGame(long userId, int awayTeamId, int homeTeamId) { User user = getUser(userId); Team awayTeam = getTeam(awayTeamId); From 0b10fcf13115b0881e9d1ceec153fdd9530fd567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A5=E1=86=BC=E1=84=8B=E1=85=B5=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=86=A8?= Date: Fri, 7 May 2021 14:17:12 +0900 Subject: [PATCH 31/31] [#6] feat: Create requestDTO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 현재 만든 API 요청을 json body로 읽기위한 request DTO 생성했습니다. 2. GameController에서 json body를 읽도록 수정 --- .../baseball/DTO/request/CreateGameDTO.java | 11 ++++++++++ .../baseball/DTO/request/JoinGameDTO.java | 16 ++++++++++++++ .../baseball/DTO/request/PitchResultDTO.java | 13 ++++++++++++ .../controller/ApiGameController.java | 21 +++++++++++-------- BE/baseball/src/main/resources/data.sql | 4 +++- 5 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/request/CreateGameDTO.java create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/request/JoinGameDTO.java create mode 100644 BE/baseball/src/main/java/team9/baseball/DTO/request/PitchResultDTO.java diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/request/CreateGameDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/request/CreateGameDTO.java new file mode 100644 index 000000000..2bb70f10c --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/request/CreateGameDTO.java @@ -0,0 +1,11 @@ +package team9.baseball.DTO.request; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CreateGameDTO { + private int away_team_id; + private int home_team_id; +} diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/request/JoinGameDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/request/JoinGameDTO.java new file mode 100644 index 000000000..4a1ab95db --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/request/JoinGameDTO.java @@ -0,0 +1,16 @@ +package team9.baseball.DTO.request; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import team9.baseball.domain.enums.Venue; + +import javax.validation.constraints.NotNull; + +@Getter +@AllArgsConstructor +public class JoinGameDTO { + private int game_id; + + @NotNull + private Venue my_venue; +} diff --git a/BE/baseball/src/main/java/team9/baseball/DTO/request/PitchResultDTO.java b/BE/baseball/src/main/java/team9/baseball/DTO/request/PitchResultDTO.java new file mode 100644 index 000000000..a05d48f48 --- /dev/null +++ b/BE/baseball/src/main/java/team9/baseball/DTO/request/PitchResultDTO.java @@ -0,0 +1,13 @@ +package team9.baseball.DTO.request; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import team9.baseball.domain.enums.PitchResult; + +@Getter +@Setter +@NoArgsConstructor +public class PitchResultDTO { + private PitchResult pitch_result; +} diff --git a/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java b/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java index 78ef3e5a1..75c113b5a 100644 --- a/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java +++ b/BE/baseball/src/main/java/team9/baseball/controller/ApiGameController.java @@ -2,11 +2,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import team9.baseball.DTO.request.CreateGameDTO; +import team9.baseball.DTO.request.JoinGameDTO; +import team9.baseball.DTO.request.PitchResultDTO; import team9.baseball.DTO.response.ApiResult; -import team9.baseball.domain.enums.PitchResult; -import team9.baseball.domain.enums.Venue; import team9.baseball.service.GameService; +import javax.validation.Valid; + @RestController @RequestMapping("/game") public class ApiGameController { @@ -23,14 +26,14 @@ public ApiResult getGameDescriptions() { } @PostMapping - public ApiResult createGame() { - gameService.createNewGame(1l, 1, 2); + public ApiResult createGame(@RequestBody CreateGameDTO createGameDTO) { + gameService.createNewGame(1l, createGameDTO.getAway_team_id(), createGameDTO.getHome_team_id()); return ApiResult.succeed("OK"); } @PostMapping("/joining") - public ApiResult joinGame() { - gameService.joinGame(1l, 1, Venue.HOME); + public ApiResult joinGame(@Valid @RequestBody JoinGameDTO joinGameDTO) { + gameService.joinGame(1l, joinGameDTO.getGame_id(), joinGameDTO.getMy_venue()); return ApiResult.succeed("OK"); } @@ -39,9 +42,9 @@ public ApiResult getCurrentGameStatus() { return ApiResult.succeed(gameService.getCurrentGameStatus(1l)); } - @PutMapping("/status") - public ApiResult pitch(PitchResult pitchResult) { - gameService.applyPitchResult(1l, pitchResult); + @PostMapping("/status/pitch-result") + public ApiResult pitch(@RequestBody PitchResultDTO pitchResultDTO) { + gameService.applyPitchResult(1l, pitchResultDTO.getPitch_result()); return ApiResult.succeed("OK"); } diff --git a/BE/baseball/src/main/resources/data.sql b/BE/baseball/src/main/resources/data.sql index 3831d0f5e..81c5e2541 100644 --- a/BE/baseball/src/main/resources/data.sql +++ b/BE/baseball/src/main/resources/data.sql @@ -12,4 +12,6 @@ INSERT INTO player (team_id, name, uniform_number) VALUES (2, '크롱', 3); INSERT INTO player (team_id, name, uniform_number) VALUES (2, '세라', 4); INSERT INTO player (team_id, name, uniform_number) VALUES (2, '헤드', 5); -INSERT INTO `user` (email) VALUES ('test@test.com'); +INSERT INTO `user` (email) VALUES ('isaac@naver.com'); +INSERT INTO `user` (email) VALUES ('soo@naver.com'); +INSERT INTO `user` (email) VALUES ('song@naver.com');