From dc5e83a1cc1796f1fdabf3a9623740750bbc0c43 Mon Sep 17 00:00:00 2001 From: Fernando Ferreira de Lima Filho <fferreiralf@ufrn.edu.br> Date: Fri, 27 May 2022 07:59:43 -0300 Subject: [PATCH] feature: client service, transfer service, deposit serice --- .../ufrn/imd/balance/BalanceApplication.class | Bin 748 -> 748 bytes .../controller/BalanceController.class | Bin 1465 -> 1465 bytes .../br/ufrn/imd/balance/domain/Account.class | Bin 1653 -> 1653 bytes .../br/ufrn/imd/balance/domain/Client.class | Bin 1849 -> 1849 bytes .../balance/repository/ClientRepository.class | Bin 443 -> 443 bytes .../imd/balance/service/BalanceService.class | Bin 2588 -> 2600 bytes .../compile/default-compile/inputFiles.lst | 12 +- .../default-testCompile/inputFiles.lst | 2 +- WebServices/client/.DS_Store | Bin 0 -> 6148 bytes WebServices/client/.gitignore | 26 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../client/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + WebServices/client/Dockerfile | 3 + WebServices/client/mvnw | 286 ++++++++++++++++++ WebServices/client/mvnw.cmd | 161 ++++++++++ WebServices/client/pom.xml | 43 +++ .../br/ufrn/imd/client/ClientApplication.java | 27 ++ .../imd/client/config/RestClientConfig.java | 15 + .../br/ufrn/imd/client/domain/Account.java | 41 +++ .../br/ufrn/imd/client/domain/Client.java | 15 + .../ufrn/imd/client/utils/MachineState.java | 222 ++++++++++++++ .../br/ufrn/imd/client/utils/NameSpace.java | 14 + .../client/utils/message/DepositMessage.java | 17 ++ .../client/utils/message/TransferMessage.java | 19 ++ .../utils/message/WithdrawalMessage.java | 16 + .../client/src/main/resources/application.yml | 5 + .../withdrawal/CourseApplicationTests.java | 16 + WebServices/deposit/Dockerfile | 4 +- WebServices/deposit/pom.xml | 6 +- .../DepositApplication.java} | 6 +- .../deposit/controller/DepositController.java | 22 ++ .../br/ufrn/imd/deposit}/domain/Account.java | 2 +- .../br/ufrn/imd/deposit}/domain/Client.java | 2 +- .../deposit/repository/ClientRepository.java | 9 + .../imd/deposit/service/DepositService.java | 31 ++ .../controller/WithdrawalController.java | 22 -- .../withdrawal/service/WithdrawalService.java | 31 -- .../src/main/resources/application.yml | 4 +- .../deposit/target/classes/application.yml | 4 +- .../target/maven-archiver/pom.properties | 2 +- .../compile/default-compile/createdFiles.lst | 12 +- .../compile/default-compile/inputFiles.lst | 12 +- .../default-testCompile/inputFiles.lst | 2 +- WebServices/docker-compose.yml | 29 ++ WebServices/pom.xml | 3 + WebServices/transfer/Dockerfile | 4 +- WebServices/transfer/pom.xml | 6 +- .../TransferApplication.java} | 6 +- .../controller/TransferController.java | 24 ++ .../br/ufrn/imd/transfer}/domain/Account.java | 2 +- .../br/ufrn/imd/transfer}/domain/Client.java | 2 +- .../repository/ClientRepository.java | 4 +- .../imd/transfer/service/TransferService.java | 45 +++ .../controller/WithdrawalController.java | 22 -- .../repository/ClientRepository.java | 16 - .../withdrawal/service/WithdrawalService.java | 31 -- .../src/main/resources/application.yml | 4 +- .../transfer/target/classes/application.yml | 4 +- .../target/maven-archiver/pom.properties | 2 +- .../compile/default-compile/createdFiles.lst | 12 +- .../compile/default-compile/inputFiles.lst | 12 +- .../default-testCompile/inputFiles.lst | 2 +- .../withdrawal/WithdrawalApplication.class | Bin 763 -> 763 bytes .../controller/WithdrawalController.class | Bin 1485 -> 1485 bytes .../ufrn/imd/withdrawal/domain/Account.class | Bin 1659 -> 1659 bytes .../ufrn/imd/withdrawal/domain/Client.class | Bin 1867 -> 1867 bytes .../repository/ClientRepository.class | Bin 780 -> 780 bytes .../service/WithdrawalService.class | Bin 3065 -> 3076 bytes .../compile/default-compile/inputFiles.lst | 12 +- .../default-testCompile/inputFiles.lst | 2 +- 71 files changed, 1276 insertions(+), 194 deletions(-) create mode 100644 WebServices/client/.DS_Store create mode 100644 WebServices/client/.gitignore create mode 100644 WebServices/client/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 WebServices/client/.mvn/wrapper/maven-wrapper.jar create mode 100644 WebServices/client/.mvn/wrapper/maven-wrapper.properties create mode 100644 WebServices/client/Dockerfile create mode 100755 WebServices/client/mvnw create mode 100644 WebServices/client/mvnw.cmd create mode 100644 WebServices/client/pom.xml create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/ClientApplication.java create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/config/RestClientConfig.java create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/domain/Account.java create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/domain/Client.java create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/utils/MachineState.java create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/utils/NameSpace.java create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/DepositMessage.java create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/TransferMessage.java create mode 100644 WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/WithdrawalMessage.java create mode 100644 WebServices/client/src/main/resources/application.yml create mode 100644 WebServices/client/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java rename WebServices/deposit/src/main/java/br/ufrn/imd/{withdrawal/WithdrawalApplication.java => deposit/DepositApplication.java} (60%) create mode 100644 WebServices/deposit/src/main/java/br/ufrn/imd/deposit/controller/DepositController.java rename WebServices/{transfer/src/main/java/br/ufrn/imd/withdrawal => deposit/src/main/java/br/ufrn/imd/deposit}/domain/Account.java (91%) rename WebServices/{transfer/src/main/java/br/ufrn/imd/withdrawal => deposit/src/main/java/br/ufrn/imd/deposit}/domain/Client.java (92%) create mode 100644 WebServices/deposit/src/main/java/br/ufrn/imd/deposit/repository/ClientRepository.java create mode 100644 WebServices/deposit/src/main/java/br/ufrn/imd/deposit/service/DepositService.java delete mode 100644 WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java delete mode 100644 WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java rename WebServices/transfer/src/main/java/br/ufrn/imd/{withdrawal/WithdrawalApplication.java => transfer/TransferApplication.java} (60%) create mode 100644 WebServices/transfer/src/main/java/br/ufrn/imd/transfer/controller/TransferController.java rename WebServices/{deposit/src/main/java/br/ufrn/imd/withdrawal => transfer/src/main/java/br/ufrn/imd/transfer}/domain/Account.java (91%) rename WebServices/{deposit/src/main/java/br/ufrn/imd/withdrawal => transfer/src/main/java/br/ufrn/imd/transfer}/domain/Client.java (92%) rename WebServices/{deposit/src/main/java/br/ufrn/imd/withdrawal => transfer/src/main/java/br/ufrn/imd/transfer}/repository/ClientRepository.java (82%) create mode 100644 WebServices/transfer/src/main/java/br/ufrn/imd/transfer/service/TransferService.java delete mode 100644 WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java delete mode 100644 WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java delete mode 100644 WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java diff --git a/WebServices/balance/target/classes/br/ufrn/imd/balance/BalanceApplication.class b/WebServices/balance/target/classes/br/ufrn/imd/balance/BalanceApplication.class index 954080045c0ccad237634742e89490f67f07358f..bffd26e76cdc4d2045552b96e278834359ee8de3 100644 GIT binary patch delta 300 zcmaFE`i7PF)W2Q(7#JAL8D!ZRm?kGNYMZbyG6-ZPmL=-vB<7{-`zK|kCYLZWu-Rnh zWtP}6GB9gshA}d*IOnINaxpM7aPly)GO$fFsO08i5M&T$XAoj!(3-5kC@B_PP?VXM z?pRQelbM`Yl9`{!!yv*SI{7kV_QaK2>KPOnfMx-0W?*0fvVdj)Np>JlA4oF-X;!W6 z3>+K5(p*3iB+UR+zzrmMAPRsqFObK{z{kK3Gz6sC3~U$!1BVc!)(!@NaD;v?pbP^8 o7uW=#8TwE|I2gnj#DNkLK+MVr<ba$b2_~f&q=7WZUKs`k09)WCqW}N^ delta 286 zcmYL@y-EX76okLC$<6+_(IoyxBf(DBVy(0h8y~<<>s5m!hS&tb%HA&QlL&%h;RE<A zc?NOr8t}rMVVE;>&fLx2(f7~i7jVLELY?)Hjf73MLb^udbT}DK&y3ps!KG0@f4CjY z#!uyoy}1-eW7a(EZKv$eGg_nKvB<~8<SxIs9u01$MpjzTEn{n!eY<~Vk3cK@3osuS zhEloM#4dZsUMo8idK(SI!t`%|ge9q1x~UQ$KCa3j>IB&bwX6SpA_pZxWz>-`N+On7 Uk<rq3CgIO%SJ+`y?Dww0FEB|SMF0Q* diff --git a/WebServices/balance/target/classes/br/ufrn/imd/balance/controller/BalanceController.class b/WebServices/balance/target/classes/br/ufrn/imd/balance/controller/BalanceController.class index b48af94711e95246e8a2876a7785419cef6e5794..b15ff45f576939bf2cd27cfb7aed02a32bafd5aa 100644 GIT binary patch delta 473 zcmYk2J5K^Z6ot>s?y|BxTo6|AjZYpT6c`H)jW#Btu`w}Ls2c(?m?*LJ57?0TBbtZ= zNsP6njfMZkcov9S%suzq-1+X@=?1z1`~Can6~HD6CZs??ZHR(nLKm>>mD@`GveKyL z56|lEd9$_pDT*p0<EpI1)SLK<>N{5#t{(!iAPo3SIO<+oDq4tRB8UVg1$^7JMy**A za8mn!z`aJ(t-9A+>0=Aim^Cq@l6uYv!jCz1pqG^)S|YEGbVv1MB5XlJ+5=_;w3Pag z?K>nnR^!VBqTXz(N$2SZRZ{)1p!cg0`T(mzRzohr7==x13i=3>D9<i?CDqP6VXTMv zNw$OWXG}e?CNa<GvBA}njCanU84FmX<uxo}nGGw<4MF3*EP++FdGr$1qg$B{QkiTU rV~=$Ixq&`+fVF<H)^N8W*5Dk8Ecj^>YyI7#%yML{b6)5a;s*I2o2WRe delta 454 zcmYjM%T5A85UiP97?@pjc`c%%;0svPHPOV2;i6ZgCyeogN({u{L1IWe_zj!+5luvb zCVqei6Hgxe13$vpgG8M}S68OGt9oD!tm4bp<1>IwtVI#Vg218#$C5-5B?*DDfG1E1 zYVRR)`{J~rvW8+CYTqoY1NI@qTg`T}Q)Teg8+U_lMtvH+h>ZxM428f+sT_+XY~-*k zuwui;swRFATTe1Lt@>5nKd-mX{JrB=<D{dmdDdX?XfWuy>Xq-_7^QLz1<EEUCPPB6 zCX~d&gcczuv=M`eF=9J}oY3*^!JfbmD}5LbFmH#-ajJR_NW-D({%8@W&H6b=B1Qjc z>O&048$#_BC!I@}p}&a+vY5maQNf5$Q^V-08PezkRYILWdVPevN)POg7{{Nt_0L=W gddtymBku@_cpkIE+59j?g0>Wh&*>CLV3(Nx2B^(5L;wH) diff --git a/WebServices/balance/target/classes/br/ufrn/imd/balance/domain/Account.class b/WebServices/balance/target/classes/br/ufrn/imd/balance/domain/Account.class index 2240ebaf1196cb360434bc8a121fd3b4dcfe3d8e..e2f70865b12aa4ea035f3721a1c35aa9d9d9cc77 100644 GIT binary patch literal 1653 zcma)7YflqF6ur|YEkz2HD&UKkw&k(DA7D%n(9~2kQk!V}vTesQq@BgxStI@`O>9j3 z;1BRe8PDu4bqiH#vO9C{oO{o?_s*t2e|`T!M0aUDNfAbKb=z>?+0qc5rcpQBrfhJd zX?08?jg3aba-~XAj8S&q{9qb5ZW+((`@8{ff>F-%3d`8#wlLe`lUZ+bfE~}QaoZ7= zd{y3J#GW!5*|emiOsQ&S+vRbn&_9TXh$f?n${&idRJ_IQbw*P!p+IzaO*jI%H>9+b zsgTuSl=mV&8V8!kQCv$eHxV>9;NS_D+%^?&dgK5NIZE5D!++wzR6RW48eiVp-l>+W zuNftz+o^M#(RfJnuCj$}0XRK?ebZ{Y9f`w)E5&=4M^QLqlngrFpJ~f-QK|+%5K^dz zjMfSvqNC=7Tmg5;6XYn?7{xZNCQnn8E@fzjE;EW2inSD>><ndSMDG?dl%q+#yON<P znr1Xw5t8qCWmf&6j#sRP*{+!wG}HyonA#JV#6so&*9i4wpK-NkHD8#v+2IOPV-$C| zDr5TjK^1ECDFA#Oj3&dNpk|Fp1M|qgyT?GGHpE*#(`2C->eEp(L4@-oqFf)QH`z2G zJ)V9{Z)WLT%e5Q)vCtnvCisL__0=AHGq!QP)!{nLqWMugaf;D2C20uzl>R&@jR$jr zeFpXztWm64*khc=X#x%mFE}2?n#XhY4V}XQW(lm$HAClNUx4)%YYc0y^o=f-mbx@s zTJF+(X{AexU*M0>RlF03(UAqbOFo{8*y&#`(4%*nI^y{>SCp2pABh5x#ZeXlv`}0- zyfwLjRVR*X^5bkNk1gW^0yaj=v=S&^!>YLwp6cV#X)ikOBYIjBfmW?6j){1BR-wah zMqkSL)28(M9i-G{GP*|B2c<mG(Z8wG-D6(&pwjQ!4Y~<ef7ia!>}OOGp3(5YuHB;B f1A^yI7kmf*4=0%yPZJ!Wd!D}g-fh*lXpQJM-IF-= literal 1653 zcma)6YflqF6ur|YEk&!83WzU6E#<MkQ7|S5Xlf9R)Fv9gY`bF_($3=UtPy{eCK3}r z_yhb=#xuLyx~=P@$<FNDIrpA3=g#)~kFVc|Xoc4Dl%bnBO4BVp+}6WNmhNQfZkARV z6<zKKv(w;?D{T3qw#kS+W;C{8OIMjvHO!93(<r5X2}TKFF&f|AH{Y2?$CPcOCKYdU zXN}R+b5APK<qhGAW{0m!X)9Bqs>`VCXS_EKG>@yeY;mJzA!#;d;}MtKF%`Fba)3r$ zrPuAlzv97EKRn<XU)$W;sn_Z+8D*r`ZE}av$%y7%<p|jZa5{#4!|r%piOq~B#aoXj zad5^c+ca_B79Xs%X?r-T2Hz7>sQZjoD-oieIgwDv9f^cB<{OMs8@2_8<J&^=9bb6e zM19R^x6maMy}~*SrqrH*w{zP~$MD`b(hyzC2xS_U-8F?Y)>|zbZGpn#6R!4b>zV18 zU9QjvM#+jMO}kvx(A9FBat+7<5U61^5e0>3(U?3i4|)y_fFj3Bw*#h$%6#PfJ(EC$ z{T@+i0MqYS9*{oIAg14o{I2aeE&fnw=L(?%%lgX3cYF)iRvoStXoltrG)Bh?G(qJ8 zP19*yxPO}qZ-0FcPn-L^r5Kg`kg$zi{{s^rbmQm(KEDj%Hc<-YM<|E)y#BIi6c4De zK92PXtcw1O-g6qK5&{qvZjWL<g=g{=O<@B<fgM3$hR$Gp7OU5oQ<zKDFT|<~N0g{8 z9#OKobVR97h$rYAMy*9>p2t`X@X$Dm6*5CT`b|?O{FvrS(nY+FB>^a6s|W!_pL`CZ zCO0ta!f8!D%$D=n3IQNwV|0lwhsswmYp#s1dN@1pX9sFBeXW^LtJamq-<PlF3RU7t zCjYl&;CEP3ACu8MTnhXhQ2Cpqe^RO4W4?P(8MwAUiwF(6_L&kNagu0{#$#PuqUD(6 h<ZyC1Hrb%7G0Can<jI)i1YPs>UH5ORzC|~PegdFEH+292 diff --git a/WebServices/balance/target/classes/br/ufrn/imd/balance/domain/Client.class b/WebServices/balance/target/classes/br/ufrn/imd/balance/domain/Client.class index cad3be1b378141f47fb5c2a9c5d93f199a5c96fa..e032c6c679dddb8a69e3ac2305623337db71fcd2 100644 GIT binary patch literal 1849 zcma)7Yfl<M6urY!5ET_|ebkm}74WfrKeTCLP#X-@rc#n7O_~L!I0k0T?$Ff!sy3-< z(hvOs{ZUQN?5>E2L=txP-Z}T4GiPSt@4w%Fi0Bz@L@B^1U9pYUXImPgSu-kT!<1ES z)U2i{q>*n3E>)C5jFLy@7t_FO-Po@j@hY+rMkzNdEaQON!fc3dW~IRacHFScZAV!0 zePN3c+hsJAx1^&?smf-f#lsMxKa5d8)EJEy&nXI0@jACR7)`xvNhO-REF6K}n^IcJ zROsq3nsh6^8poQ)QCur8)KGM{$HZ$cxos+5bIAc3aFmYgCw=i?DxDm2jW29%@0ALr z4~#<6Y+{*X9f}W>Eo2?As9CLA(9CF|*vHyU4~2r+9%A<;FIjkCdalRxt|esNYP6aX zfVfZiNt+mXDWp)Z;7z7O+?k!(GPLKd8jn+uZYOAl?l1~wvgH`TgajpMh|x$<NWRx< zR=8dAwsWj#Rn11(#1>-<{A5TS3hcprzeRfI2O5)axH`0IZ%rG<DQp*`VlROmnten2 zwLkOF)1OOFiYD|*RuVKxHyDK-t_m<EigC}~v58JnpFx`v2g2{hXeo0&QV`TVf{9GF zL;0E8AjZ5$oVtK$AC@=(ZQey-u61JK2Ug3j@*Sb?+Ms9hn!Y@YrhA;0ZCoIAvO#HB z6T~-6A)2Nr4d6Y73mBj{zSw)j!-z)_jbKb79_2Jf<4C|-7Ybv2*a)&Wk()xCa?nv* zKSQ%f-$Hr^V*q13_lxFo%cqq7;Wn7Za~L`Z*bvY$pcfELdT6>wi-=I?D_X*Pm?6L~ z1xhl0`;Qny$fertb1SEm&8?o&@;OliHH3v~f}DqM6Qq0s^l(?F#isPZfjCV%6a*lN zR1!(;1#SzTdTj<q-8ihtyV+tcTfzhQY>Zah#;ilR=8ANg;%SX{m=S4fjdYu#^{hdM z=k<k_*=|8swbWaR)2`Qn9dws?pC0sTdCAeMT6(9$Z|S-AkRE~MqH8}X{T;Lc(ucuY l_h3)g9@CQ^#o6l>KgECCW#;AU6bI<JtM7$-A+*AEqW`$BV@?17 literal 1849 zcma)6YflqF6ur|Ylmb;+6e!4>QXcCY1!F>Zn34)cY7-L^vu(#Rq@5+ZQzQN=O(Z6M z@CW##jAwS2QtCoz(wWYkd+#~-+`0Yp_t$SCTBD5w#prP_Md^uNp6X>SPS4`>JWlJ3 zQVzF;*(h_{5te*c*k;7`81-*i(ov>VWwX)ZQKZrz#wa9ejE0KG=4aDrn6hpZq~djM zZ!j8p+mcE&d09B3(%_p?TFO+&>M$C1Bfc0X8plywR=H8AA!s__;uV+NHWjbA;Be}3 zls?x_uk{B~>GXta|HAgpeyLD;&nP0zCTDcJgYluVg{;FZZdR)nI5V0pR&1m7$(Dv_ z){KgY%0RGYHBBLnP0tGf*#NQ!l9wzjxSj~O-m`?<vKp<XghRpy{HR5Yy%18Um(V8H zLGE16#WJ{WSv7DUEDFi@Tg?i$OD2TX)mT;Z%tYsK_KgvBB%t)nb){@I1eXd-Qm?r> zvTAQk8}cYLg;6nxMh7!rw(HWLE2YVYb9#+BToq7k9Q(f8iA*PqpHq7#;NizJTFBiL zCR+CZGP%VLuIDNO8227<`jSWc5hUQy#+`@Hjb1|H&}!LLzAJP)`aD@z^-wSx4R{4R z7z}l~k)$lmC8?hVl9Zw0B;BFAjHa$Z^fIGg7Xx=tIp$To*|cjCmT~A#u=uLq0!?AQ zV}!aXLZj3}z4)EL=!U2dUm)W=i1RI+QtpoD#A%4qFo2Wm3R=F~Agm*>jpCefXw1!* zrE!=iVBW<Z!k)<gB$i(~qtJIZ!9A=46vjFR9$7?<(<DyAo;O%d<AgY$(F}e^@vnmo zQ%19X`VZJ6u%+AS^UG%x&aa$N<N`>SODJ^`Yu@v31EhTb<Z!FgWYb!9kkg?3VK}64 zm4Y$lg3n>qwHerT;;07iM(cIalAeQ)#%R7R%sQBBtXP*Q9@m5$?THa<bB%S2q4_LO z&KKiS%5XQKt5WKg;!i=>feyMQE<z=*eV0=Hr|4BFz1QKV^i*4-WuRPE?FWUv0X9VX rF?e+k1**0}s{z5`?%+&dutE0&f+O9*BLTr7df@VV=njNt_=xBqrdwg^ diff --git a/WebServices/balance/target/classes/br/ufrn/imd/balance/repository/ClientRepository.class b/WebServices/balance/target/classes/br/ufrn/imd/balance/repository/ClientRepository.class index 712598f71b37c3cbba4cc4f301c93fcfe4229165..f128f54efbc02db6a1a6ca5bdd451f668683b795 100644 GIT binary patch delta 106 zcmdnZyqlT#)W2Q(7#JAL8F<+lm?jG`8cDJ<urM+RWF?j*>gOcprR)1AWu+#Uursht z4rjEOxLAFn=!A)<JapI?85kLuftVGjodL*V2a-$-91NUbnu~!ONV5Uuc^DV~9~cq^ delta 105 zcmdnZyqj70)W2Q(7#JAL8F<+lxY!xE*%^2yZk;r7lImo4MvsZSM#78?0$GV=iTXK- ydFlH8Nm;4MB@-hobl4af7#Wy=m>H;>0Z6g{NhStX1~xFw&cFer*?{t#3=9A+R}u;U diff --git a/WebServices/balance/target/classes/br/ufrn/imd/balance/service/BalanceService.class b/WebServices/balance/target/classes/br/ufrn/imd/balance/service/BalanceService.class index 024f7cfd65e02a5b76b37a900ac69cee13c4af8a..10c822e3aec17ef8ac1fb016ab2bfa02b8003aae 100644 GIT binary patch delta 1114 zcmZWo&r=jf6#jZ<c6#Y;WV0-|K)?lDT^7iyF<_#S2pT2wLnRVX6Em<QEDkfcI}kl_ z%`sG;Qk6rFIe73#vKmvdtg^gN9=&<;Kky&W^7TMLB~H~$_xoPI_rBNPo8QuZq>~%( z9zOvvh+7;6LqXkRg=P+mA-U+RIz`X%=ZllGi|$;wKKsmxADi>aemNXsF!Mdr4Aw|c zas?Xj5l51tVJB$BbE;K|6dD=$yc<q9OD;n?-!ryzW-6?d{rRH;P1w!R%#d04GBJq^ zTGRvkxTpg|n?ww@T4Oyb$EKPz)G5Ic7wATgV=vjnI<4NadJ5f#{pz%pO(f8RUXB7o zQG3_#wvn?B{pwe1K%}VUqQn6lRBx<&m%yj^jN>pvD&n>hmc8QSa##+0$CDVqpz4ne z*Xe?vOMC(4#|F(fj;mkHwuHc!IKlB1Lsvwj-`GW!hB2ZxVtca!r*N9%>;K&6X4?{H zFshh+O6dO2N{nG#Id*5<3Kz;%hCX$WHL2%pqfx-bC5elW3~|p{nk_l%cca_nxT;>6 z?d@^=z)(NxuR312lwGO1l}>>x_)&+9tCz+^8<igpg0LD^oaJ#hTnI{4f$Lb{m{)J@ z+-`|778w#tZs=Th=E9(Io8d)Xz2+HpEzXtC@0@I~@qvJwlW{Z&PmnHw#0)OeIX{WZ z406=>-AXhEZj~cs$f<KYXLGDFbkMeAjlmuZf*UK#=%jd)WHHdH^`>1)i%e)8?QL2G ztrj5(NV4k5>Z4UZGR11x^$6()XuU_afsg5{V?d|dBLrl1U=R6p<j>@#YHJuM{E2LD z4PAdDZ{RUL0ctq(6y0M49vQ!n*3>cUUzjsyUkyW3k8rYvZ+h=WDRq(7h-xDxP1Dpi zqJ^aFKr;@Lr3+`HrUo#9NwPq*bPneuDj8hB+7$8mmf#p8TvNP==`D&wv>Jqo!b5yl z==}@X|F<Ti3eB6RwkwFOYuidozhzQrStz;gybuwhwEy7B%yjDehq$)W&E}P*x3A2C iLm>ucw?&vEyF{;+;0C2y!ZL26LWmxKDpv3lTHXUF>$}?k delta 1035 zcmZ8g$x;(h6g{sK`o))rX+uCI5{U+ZFvJlR9Ki_%QE|e#LmCW*bVxU-3yY0wt<>9E zuH9JW7#vDVOIMa3;KsE(|3J#y0mnu6>3i<I@0@$P`$6PhB>idr)ms2tabpR>STCSs zLl7IWDNO8kfo}A0?C|KFUcs&ac600z*o$6)KI{|Nj{^b%2RRM}&@T|eVU8mL0~qv@ zM@z>(D5ec_27jNOvD6pVs^<OQRx%hlb26PV6KOMN=0~l>dWKj_>wt>u^~zuobxt4X zlUR-w5<@t~aa`gAhN-XDwq3_9nuS5jy=rHikdBiEP7$0okd!!svm7H5=Ww1OUNR!; zmKF+Jz(t8#)Ttl7C`lO;=8Tyl<?+-|dcqoYIW9?D#uW}zB8^dwjD&?TiDtB`nBGv! zP~D%OF>~2W<FsQH<6dU0RGkWrOI$@(VglFHU9Hi_kRsL6{iyn`b;Sj8m}H31Z2xQa z2wG}hb^2Q9@NgwN?PhbSp@N&W^JY%n@b#*XzAn}1Z&HW-iJE_W54*)|eq7!0?^jbS zs=oT;M(B@1U(R$Kb%@1PiS4ZBuq6s`C0dbG@Aak*hTx>-nq%guYZq^F%rNK!wta27 zz##kcd8=4C!EzWrx2OV-sVIM_b6jU=Qd7Jk=p=rX$GmvfL7b)$^x<fz_cl#WVekEc zVI@85g!P1e!YEczRRcx0iT4q9C7*${m7%?aPs1y!LK#)>$P<x#@CgFpCH^-MBfj=B zg2OK$%cyR9M4cL9bg!F56+sP2Mo6xf$U1B$@zumOE=Ul@DIzhf!CJBrqkIBQbi_Jh zs~FKBx*08t?sgGs#EIk_mL}VtgFU8bLD8EBkQISCXtQ3~Zw0Y9_~N<CVHm<&J@t4~ zuc;WKhSvy<gpD~Y^Cs~OE$j(2L;!7QU#w45v`8%+E~DlJB2N+Uocz_%jUX+pgGddX ezZagO*r7{M=@h0>q|9cDCB<9FL>K-0+kOIxFRgO` diff --git a/WebServices/balance/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/WebServices/balance/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 0835eb4..71603fe 100644 --- a/WebServices/balance/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/WebServices/balance/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,6 +1,6 @@ -/home/ff/code/dim/devdojo-microservices/balance/src/main/java/br/ufrn/imd/balance/service/BalanceService.java -/home/ff/code/dim/devdojo-microservices/balance/src/main/java/br/ufrn/imd/balance/domain/Account.java -/home/ff/code/dim/devdojo-microservices/balance/src/main/java/br/ufrn/imd/balance/repository/ClientRepository.java -/home/ff/code/dim/devdojo-microservices/balance/src/main/java/br/ufrn/imd/balance/controller/BalanceController.java -/home/ff/code/dim/devdojo-microservices/balance/src/main/java/br/ufrn/imd/balance/BalanceApplication.java -/home/ff/code/dim/devdojo-microservices/balance/src/main/java/br/ufrn/imd/balance/domain/Client.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/balance/src/main/java/br/ufrn/imd/balance/BalanceApplication.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/balance/src/main/java/br/ufrn/imd/balance/controller/BalanceController.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/balance/src/main/java/br/ufrn/imd/balance/domain/Client.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/balance/src/main/java/br/ufrn/imd/balance/service/BalanceService.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/balance/src/main/java/br/ufrn/imd/balance/repository/ClientRepository.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/balance/src/main/java/br/ufrn/imd/balance/domain/Account.java diff --git a/WebServices/balance/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/WebServices/balance/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst index 68bbe32..87bcf06 100644 --- a/WebServices/balance/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ b/WebServices/balance/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -1 +1 @@ -/home/ff/code/dim/devdojo-microservices/balance/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/balance/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java diff --git a/WebServices/client/.DS_Store b/WebServices/client/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**<q8>++&mCkOWA81W14cNZ<zv;LbK1Poaz?KmsK2CSc!( z0ynLxE!0092;Krf2c+FF_Fe*7ECH>lEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0<F0fCPF1$Cyrb|F7^5{eNG?83~ZUUlGt@xh*qZDeu<Z%US-OSsOPv j)R!Z4KLME7ReXlK;d!wEw5GODWMKRea10D2@KpjYNUI8I literal 0 HcmV?d00001 diff --git a/WebServices/client/.gitignore b/WebServices/client/.gitignore new file mode 100644 index 0000000..ba5cb5c --- /dev/null +++ b/WebServices/client/.gitignore @@ -0,0 +1,26 @@ +HELP.md +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ diff --git a/WebServices/client/.mvn/wrapper/MavenWrapperDownloader.java b/WebServices/client/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..47336fd --- /dev/null +++ b/WebServices/client/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/WebServices/client/.mvn/wrapper/maven-wrapper.jar b/WebServices/client/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 H`mg^3F4joe literal 0 HcmV?d00001 diff --git a/WebServices/client/.mvn/wrapper/maven-wrapper.properties b/WebServices/client/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..cd0d451 --- /dev/null +++ b/WebServices/client/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip diff --git a/WebServices/client/Dockerfile b/WebServices/client/Dockerfile new file mode 100644 index 0000000..9885e74 --- /dev/null +++ b/WebServices/client/Dockerfile @@ -0,0 +1,3 @@ +FROM openjdk:11 +COPY target/withdrawal.jar withdrawal.jar +ENTRYPOINT ["java","-jar","withdrawal.jar"] \ No newline at end of file diff --git a/WebServices/client/mvnw b/WebServices/client/mvnw new file mode 100755 index 0000000..5551fde --- /dev/null +++ b/WebServices/client/mvnw @@ -0,0 +1,286 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/WebServices/client/mvnw.cmd b/WebServices/client/mvnw.cmd new file mode 100644 index 0000000..e5cfb0a --- /dev/null +++ b/WebServices/client/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/WebServices/client/pom.xml b/WebServices/client/pom.xml new file mode 100644 index 0000000..a2109e3 --- /dev/null +++ b/WebServices/client/pom.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>br.ufrn.imd</groupId> + <artifactId>dim0614</artifactId> + <version>1.0-SNAPSHOT</version> + <relativePath>../</relativePath> <!-- lookup parent from repository --> + </parent> + + <artifactId>client</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>client</name> + <description>Spring Boot Micro-services By DevDojo</description> + + <properties> + <java.version>11</java.version> + </properties> + + <build> + <finalName>client</finalName> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <configuration> + <executable>true</executable> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.8.0</version> + <configuration> + <source>11</source> + <target>11</target> + </configuration> + </plugin> + </plugins> + </build> + +</project> diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/ClientApplication.java b/WebServices/client/src/main/java/br/ufrn/imd/client/ClientApplication.java new file mode 100644 index 0000000..d22474d --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/ClientApplication.java @@ -0,0 +1,27 @@ +package br.ufrn.imd.client; + +import br.ufrn.imd.client.utils.MachineState; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ClientApplication { + + public static void main(String[] args) { + SpringApplication.run(ClientApplication.class, args); + + MachineState mS = new MachineState(); + + for(;;) { + while(!mS.hasUser()) mS.login(); + + while(mS.quit() || mS.hasUser()) { + mS.render(); + mS.processEvents(); + mS.update(); + } + } + + } + +} diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/config/RestClientConfig.java b/WebServices/client/src/main/java/br/ufrn/imd/client/config/RestClientConfig.java new file mode 100644 index 0000000..7a86a8e --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/config/RestClientConfig.java @@ -0,0 +1,15 @@ +package br.ufrn.imd.client.config; + +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestClientConfig { + + @Bean + public RestTemplate restTemplate(RestTemplateBuilder builder) { + return builder.build(); + } +} diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/domain/Account.java b/WebServices/client/src/main/java/br/ufrn/imd/client/domain/Account.java new file mode 100644 index 0000000..9eaee50 --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/domain/Account.java @@ -0,0 +1,41 @@ +package br.ufrn.imd.client.domain; + +import java.io.Serializable; + +public class Account implements Serializable { + private static final long serialVersionUID = 2L; + private Integer id; + private String number; + private Double balance; + + public Account() {} + public Account(Integer id, String number, Double balance) { + this.id = id; + this.number = number; + this.balance = balance; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public Double getBalance() { + return balance; + } + + public void setBalance(Double balance) { + this.balance = balance; + } +} diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/domain/Client.java b/WebServices/client/src/main/java/br/ufrn/imd/client/domain/Client.java new file mode 100644 index 0000000..3aa1f75 --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/domain/Client.java @@ -0,0 +1,15 @@ +package br.ufrn.imd.client.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +public class Client implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer id; + +} diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/utils/MachineState.java b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/MachineState.java new file mode 100644 index 0000000..a6c226d --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/MachineState.java @@ -0,0 +1,222 @@ +package br.ufrn.imd.client.utils; + +import br.ufrn.imd.client.domain.Account; +import br.ufrn.imd.client.domain.Client; +import br.ufrn.imd.client.utils.message.DepositMessage; +import br.ufrn.imd.client.utils.message.TransferMessage; +import br.ufrn.imd.client.utils.message.WithdrawalMessage; +import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import java.net.MalformedURLException; +import java.rmi.Naming; +import java.rmi.NotBoundException; +import java.rmi.RemoteException; +import java.util.Scanner; + +import static ufrn.imd.utils.NameSpace.*; + +@Data +public class MachineState { + + @Autowired + private RestTemplate restTemplate; + public static final String INITIAL= "INITIAL"; + public static final String READ = "READ"; + public static final String DEPOSIT = "DEPOSIT"; + public static final String BALANCE = "BALANCE"; + public static final String WITHDRAWAL = "WITHDRAWAL"; + public static final String TRANSFER = "TRANSFER"; + + public static final String START = "START"; + public static final String INVALID_INPUT = "INVALID_INPUT"; + public static final String QUIT = "QUIT"; + + private String state; + private Scanner sc; + private String inputValue; + + private Client client; + + public MachineState() { + state = INITIAL; + inputValue = new String(); + sc = new Scanner(System.in); + } + + public void login() { + System.out.println(">>> Please enter your bank account number"); +// String accountNumber = sc.nextLine(); +// +// ResponseEntity<Client> response = restTemplate.getForEntity(HOST_AUTHENTICATOR_SERVICE, Client.class); +// +// if(response.getStatusCodeValue() == 200) { + state = INITIAL; +// this.client = response.getBody(); + this.client = new Client(1); +// } else { +// System.out.println(">>> Bad credentials"); +// } + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + public Boolean hasUser() { + return client != null; + } + + public Boolean quit() { + return !state.equals(QUIT); + } + + public void update() { + if(state.equals(INITIAL)) { + state = START; + } else if(state.equals(START)) { + state = READ; + } else if(state.equals(READ)) { + state = inputValue; + } else if(state.equals(INVALID_INPUT)) { + state = START; + } else if(state.equals(DEPOSIT)) { + state = START; + } else if(state.equals(BALANCE)) { + state = START; + } else if(state.equals(WITHDRAWAL)) { + state = START; + } else if(state.equals(TRANSFER)) { + state = START; + } + } + + public void processEvents() { + if(state.equals(READ)) { + inputValue = sc.nextLine().trim().toUpperCase(); + if(!inputValue.isEmpty() && + !inputValue.equals(QUIT) && + !inputValue.equals(DEPOSIT) && + !inputValue.equals(BALANCE) && + !inputValue.equals(WITHDRAWAL) && + !inputValue.equals(TRANSFER)) { + inputValue = INVALID_INPUT; + } + } else if(state.equals(DEPOSIT)) { + String v = sc.nextLine(); + DepositMessage depositMessage = new DepositMessage(this.client, Double.parseDouble(v)); + ResponseEntity<Account> response = restTemplate.postForEntity(HOST_DEPOSIT_SERVICE, depositMessage, Account.class); + if(response.getStatusCodeValue() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", response.getBody().getBalance()) + ); + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + } else if(state.equals(BALANCE)) { + ResponseEntity<Account> response = restTemplate.getForEntity(HOST_BALANCE_SERVICE, Account.class); + if(response.getStatusCodeValue() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", response.getBody().getBalance()) + ); + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + } else if(state.equals(WITHDRAWAL)) { + String v = sc.nextLine(); + WithdrawalMessage withdrawalMessage = new WithdrawalMessage(this.client, Double.parseDouble(v)); + ResponseEntity<Account> response = restTemplate.postForEntity(HOST_WITHDRAWAL_SERVICE, withdrawalMessage, Account.class); + if(response.getStatusCodeValue()== 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", response.getBody().getBalance()) + ); + } else if(response.getStatusCodeValue() == 500) { + System.out.println( + String.format(">>> %s", response.getBody()) + ); + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } else if(state.equals(TRANSFER)) { + String accountNumber = sc.nextLine(); + System.out.println(">>> Please enter with the value that you want transfer"); + String v = sc.nextLine(); + + Account account = new Account(null, accountNumber, null); + TransferMessage transferMessage = new TransferMessage(this.client, account, Double.parseDouble(v)); + ResponseEntity<Account> response = restTemplate.postForEntity(HOST_TRANSFER_SERVICE, transferMessage, Account.class); + + if(response.getStatusCodeValue() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", response.getBody().getBalance()) + ); + } else if(response.getStatusCodeValue() == 500) { + System.out.println( + String.format(">>> %s", response.getBody()) + ); + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } else if(state.equals(QUIT)) { + this.client = null; + System.out.println(">>> You have logged out"); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + + public void render() { + try { + if(state.equals(INITIAL)) { + System.out.println(">>> Initializing..."); + Thread.sleep(1000); + } else if(state.equals(START)) { + System.out.println("These are the avaliable operations"); + System.out.println("---------------------------------"); + System.out.println(" - deposit \t\t - balance"); + System.out.println(" - withdrawal \t - transfer"); + System.out.println(" - quit"); + System.out.println("---------------------------------"); + Thread.sleep(1000); + } else if(state.equals(READ)) { + System.out.println(">>> Please enter with wich operation do you want"); + } else if(state.equals(INVALID_INPUT)) { + System.out.println(">>> Please enter with a VALID operation"); + Thread.sleep(3000); + } else if(state.equals(DEPOSIT)) { + System.out.println(">>> Starting deposit operation"); + System.out.println(">>> Please enter with the value that you want deposit"); + } else if(state.equals(WITHDRAWAL)) { + System.out.println(">>> Starting withdrawal operation"); + System.out.println(">>> Please enter the value you want to withdraw"); + } else if(state.equals(TRANSFER)) { + System.out.println(">>> Starting transfer operation"); + System.out.println(">>> Please enter with the recipient's account number"); + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/utils/NameSpace.java b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/NameSpace.java new file mode 100644 index 0000000..c6b2156 --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/NameSpace.java @@ -0,0 +1,14 @@ +package ufrn.imd.utils; + +public class NameSpace { + public final static Integer PORT_AUTHENTICATOR_SERVICE = 1905; + public final static Integer PORT_WITHDRAWAL_SERVICE = 1906; + public static final Integer PORT_DEPOSIT_SERVICE = 1907; + public static final Integer PORT_BALANCE_SERVICE = 1908; + public static final Integer PORT_TRANSFER_SERVICE = 1909; + public final static String HOST_AUTHENTICATOR_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_AUTHENTICATOR_SERVICE, "authenticator"); + public final static String HOST_WITHDRAWAL_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_WITHDRAWAL_SERVICE, "withdrawal"); + public static final String HOST_DEPOSIT_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_DEPOSIT_SERVICE, "deposit"); + public static final String HOST_BALANCE_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_BALANCE_SERVICE, "balance"); + public final static String HOST_TRANSFER_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_TRANSFER_SERVICE, "transfer"); +} diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/DepositMessage.java b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/DepositMessage.java new file mode 100644 index 0000000..04ad429 --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/DepositMessage.java @@ -0,0 +1,17 @@ +package br.ufrn.imd.client.utils.message; + +import br.ufrn.imd.client.domain.Client; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +public class DepositMessage implements Serializable { + + private static final long serialVersionUID = 2L; + + private Client client; + private Double value; +} diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/TransferMessage.java b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/TransferMessage.java new file mode 100644 index 0000000..fc7c285 --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/TransferMessage.java @@ -0,0 +1,19 @@ +package br.ufrn.imd.client.utils.message; + +import br.ufrn.imd.client.domain.Account; +import br.ufrn.imd.client.domain.Client; +import lombok.AllArgsConstructor; +import lombok.Data; + + +import java.io.Serializable; + +@Data +@AllArgsConstructor +public class TransferMessage implements Serializable { + private static final long serialVersionUID = 2L; + + private Client from; + private Account to; + private Double value; +} diff --git a/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/WithdrawalMessage.java b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/WithdrawalMessage.java new file mode 100644 index 0000000..2db871d --- /dev/null +++ b/WebServices/client/src/main/java/br/ufrn/imd/client/utils/message/WithdrawalMessage.java @@ -0,0 +1,16 @@ +package br.ufrn.imd.client.utils.message; + +import br.ufrn.imd.client.domain.Client; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +public class WithdrawalMessage implements Serializable { + private static final long serialVersionUID = 2L; + + private Client client; + private Double value; +} diff --git a/WebServices/client/src/main/resources/application.yml b/WebServices/client/src/main/resources/application.yml new file mode 100644 index 0000000..67cdb45 --- /dev/null +++ b/WebServices/client/src/main/resources/application.yml @@ -0,0 +1,5 @@ +server: + port: 8087 +spring: + application: + name: client \ No newline at end of file diff --git a/WebServices/client/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java b/WebServices/client/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java new file mode 100644 index 0000000..b84743f --- /dev/null +++ b/WebServices/client/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java @@ -0,0 +1,16 @@ +package br.ufrn.imd.withdrawal; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class CourseApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/WebServices/deposit/Dockerfile b/WebServices/deposit/Dockerfile index 9885e74..875766f 100644 --- a/WebServices/deposit/Dockerfile +++ b/WebServices/deposit/Dockerfile @@ -1,3 +1,3 @@ FROM openjdk:11 -COPY target/withdrawal.jar withdrawal.jar -ENTRYPOINT ["java","-jar","withdrawal.jar"] \ No newline at end of file +COPY target/deposit.jar deposit.jar +ENTRYPOINT ["java","-jar","deposit.jar"] \ No newline at end of file diff --git a/WebServices/deposit/pom.xml b/WebServices/deposit/pom.xml index 55a7972..5611f6e 100644 --- a/WebServices/deposit/pom.xml +++ b/WebServices/deposit/pom.xml @@ -9,9 +9,9 @@ <relativePath>../</relativePath> <!-- lookup parent from repository --> </parent> - <artifactId>withdrawal</artifactId> + <artifactId>deposit</artifactId> <version>0.0.1-SNAPSHOT</version> - <name>withdrawal</name> + <name>deposit</name> <description>Spring Boot Micro-services By DevDojo</description> <properties> @@ -19,7 +19,7 @@ </properties> <build> - <finalName>withdrawal</finalName> + <finalName>deposit</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/DepositApplication.java similarity index 60% rename from WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java rename to WebServices/deposit/src/main/java/br/ufrn/imd/deposit/DepositApplication.java index ba5b3a9..23b7f58 100644 --- a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java +++ b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/DepositApplication.java @@ -1,13 +1,13 @@ -package br.ufrn.imd.withdrawal; +package br.ufrn.imd.deposit; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class WithdrawalApplication { +public class DepositApplication { public static void main(String[] args) { - SpringApplication.run(WithdrawalApplication.class, args); + SpringApplication.run(DepositApplication.class, args); } } diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/controller/DepositController.java b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/controller/DepositController.java new file mode 100644 index 0000000..1511647 --- /dev/null +++ b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/controller/DepositController.java @@ -0,0 +1,22 @@ +package br.ufrn.imd.deposit.controller; + +import br.ufrn.imd.deposit.domain.Client; +import br.ufrn.imd.deposit.service.DepositService; +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +@AllArgsConstructor +@RestController +@RequestMapping("/banking/client/{id}") +public class DepositController { + @Autowired + private final DepositService service; + + @PatchMapping + @ResponseStatus(HttpStatus.OK) + public Client deposit(@PathVariable Integer id, @RequestParam(name = "value") Double value) { + return service.deposit(value, new Client(id)); + } +} diff --git a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/domain/Account.java similarity index 91% rename from WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java rename to WebServices/deposit/src/main/java/br/ufrn/imd/deposit/domain/Account.java index e96c207..becc0a6 100644 --- a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java +++ b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/domain/Account.java @@ -1,4 +1,4 @@ -package br.ufrn.imd.withdrawal.domain; +package br.ufrn.imd.deposit.domain; import lombok.*; diff --git a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/domain/Client.java similarity index 92% rename from WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java rename to WebServices/deposit/src/main/java/br/ufrn/imd/deposit/domain/Client.java index af2368f..52f7c63 100644 --- a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java +++ b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/domain/Client.java @@ -1,4 +1,4 @@ -package br.ufrn.imd.withdrawal.domain; +package br.ufrn.imd.deposit.domain; import lombok.*; diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/repository/ClientRepository.java b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/repository/ClientRepository.java new file mode 100644 index 0000000..bd5c797 --- /dev/null +++ b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/repository/ClientRepository.java @@ -0,0 +1,9 @@ +package br.ufrn.imd.deposit.repository; + +import br.ufrn.imd.deposit.domain.Client; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ClientRepository extends JpaRepository<Client, Integer> { +} diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/service/DepositService.java b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/service/DepositService.java new file mode 100644 index 0000000..bae0c46 --- /dev/null +++ b/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/service/DepositService.java @@ -0,0 +1,31 @@ +package br.ufrn.imd.deposit.service; + +import br.ufrn.imd.deposit.domain.Account; +import br.ufrn.imd.deposit.domain.Client; +import br.ufrn.imd.deposit.repository.ClientRepository; +import lombok.AllArgsConstructor; +import lombok.extern.java.Log; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Log +@AllArgsConstructor +@Service +public class DepositService { + @Autowired + private final ClientRepository clientRepository; + + public Client deposit(Double value, Client client) { + client = clientRepository.findById(client.getId()) + .orElseThrow(() -> new RuntimeException("Invalid user!")); + + Account account = client.getAccount(); + account.setBalance(account.getBalance() + value); + client = clientRepository.save(client); + + log.info("Deposit concluded!"); + log.info(String.format("Total: %.2f", client.getAccount().getBalance())); + + return client; + } +} diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java b/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java deleted file mode 100644 index f65f991..0000000 --- a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java +++ /dev/null @@ -1,22 +0,0 @@ -package br.ufrn.imd.withdrawal.controller; - -import br.ufrn.imd.withdrawal.domain.Client; -import br.ufrn.imd.withdrawal.service.WithdrawalService; -import lombok.AllArgsConstructor; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -@RequiredArgsConstructor -@RestController -@RequestMapping("/banking/client/{id}") -public class WithdrawalController { - - private final WithdrawalService service; - - @GetMapping - public Client withdrawal(@PathVariable Integer id, @RequestParam(name = "value") Double value) { - return service.withdraw(value, new Client(id)); - } -} diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java b/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java deleted file mode 100644 index b3e0f26..0000000 --- a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java +++ /dev/null @@ -1,31 +0,0 @@ -package br.ufrn.imd.withdrawal.service; - -import br.ufrn.imd.withdrawal.domain.Account; -import br.ufrn.imd.withdrawal.domain.Client; -import br.ufrn.imd.withdrawal.repository.ClientRepository; -import lombok.AllArgsConstructor; -import lombok.extern.java.Log; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Log -@AllArgsConstructor -@Service -public class WithdrawalService { - @Autowired - private final ClientRepository clientRepository; - - public Client withdraw(Double value, Client client) { - client = clientRepository.findById(client.getId()) - .orElseThrow(() -> new RuntimeException("Invalid user!")); - - Account account = client.getAccount(); - if(value > account.getBalance()) throw new RuntimeException("Insufficient balance"); - - account.setBalance(account.getBalance() - value); - client = clientRepository.save(client); - log.info("Withdrawal concluded!"); - log.info(String.format("Account balance: R$ %.2f", client.getAccount().getBalance())); - return client; - } -} diff --git a/WebServices/deposit/src/main/resources/application.yml b/WebServices/deposit/src/main/resources/application.yml index 02b4469..394dadd 100644 --- a/WebServices/deposit/src/main/resources/application.yml +++ b/WebServices/deposit/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8083 + port: 8085 eureka: instance: prefer-ip-address: true @@ -11,7 +11,7 @@ eureka: spring: application: - name: withdrawal + name: deposit datasource: url: jdbc:postgresql://postgresServ:5432/postgres username: postgres diff --git a/WebServices/deposit/target/classes/application.yml b/WebServices/deposit/target/classes/application.yml index 02b4469..394dadd 100644 --- a/WebServices/deposit/target/classes/application.yml +++ b/WebServices/deposit/target/classes/application.yml @@ -1,5 +1,5 @@ server: - port: 8083 + port: 8085 eureka: instance: prefer-ip-address: true @@ -11,7 +11,7 @@ eureka: spring: application: - name: withdrawal + name: deposit datasource: url: jdbc:postgresql://postgresServ:5432/postgres username: postgres diff --git a/WebServices/deposit/target/maven-archiver/pom.properties b/WebServices/deposit/target/maven-archiver/pom.properties index 6b1d262..0bb7375 100644 --- a/WebServices/deposit/target/maven-archiver/pom.properties +++ b/WebServices/deposit/target/maven-archiver/pom.properties @@ -1,4 +1,4 @@ #Created by Apache Maven 3.6.3 groupId=br.ufrn.imd -artifactId=withdrawal +artifactId=deposit version=0.0.1-SNAPSHOT diff --git a/WebServices/deposit/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/WebServices/deposit/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 3d142b7..d4f4dfd 100644 --- a/WebServices/deposit/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/WebServices/deposit/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,6 +1,6 @@ -br/ufrn/imd/withdrawal/domain/Account.class -br/ufrn/imd/withdrawal/domain/Client.class -br/ufrn/imd/withdrawal/controller/WithdrawalController.class -br/ufrn/imd/withdrawal/service/WithdrawalService.class -br/ufrn/imd/withdrawal/repository/ClientRepository.class -br/ufrn/imd/withdrawal/WithdrawalApplication.class +br/ufrn/imd/deposit/controller/DepositController.class +br/ufrn/imd/deposit/domain/Account.class +br/ufrn/imd/deposit/DepositApplication.class +br/ufrn/imd/deposit/service/DepositService.class +br/ufrn/imd/deposit/repository/ClientRepository.class +br/ufrn/imd/deposit/domain/Client.class diff --git a/WebServices/deposit/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/WebServices/deposit/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index f1ec510..839b90f 100644 --- a/WebServices/deposit/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/WebServices/deposit/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,6 +1,6 @@ -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/domain/Client.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/DepositApplication.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/repository/ClientRepository.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/service/DepositService.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/domain/Account.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/deposit/src/main/java/br/ufrn/imd/deposit/controller/DepositController.java diff --git a/WebServices/deposit/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/WebServices/deposit/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst index 756fc38..34faa20 100644 --- a/WebServices/deposit/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ b/WebServices/deposit/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -1 +1 @@ -/home/ff/code/dim/devdojo-microservices/withdrawal/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/deposit/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java diff --git a/WebServices/docker-compose.yml b/WebServices/docker-compose.yml index 66129b8..c262ff3 100644 --- a/WebServices/docker-compose.yml +++ b/WebServices/docker-compose.yml @@ -66,6 +66,35 @@ services: - postgres - gateway + deposit: + container_name: deposit-server + build: + context: deposit + dockerfile: ./Dockerfile + ports: + - 8085:8085 + networks: + - sigsmartcampus2-network + depends_on: + - postgres + - gateway + + + transfer: + container_name: tranfer-server + build: + context: transfer + dockerfile: ./Dockerfile + ports: + - 8086:8086 + networks: + - sigsmartcampus2-network + depends_on: + - postgres + - gateway + + + networks: sigsmartcampus2-network: driver: bridge diff --git a/WebServices/pom.xml b/WebServices/pom.xml index d96ad08..bc46f03 100644 --- a/WebServices/pom.xml +++ b/WebServices/pom.xml @@ -19,6 +19,9 @@ <module>gateway</module> <module>discovery</module> <module>balance</module> + <module>transfer</module> + <module>deposit</module> + <module>client</module> </modules> <properties> <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version> diff --git a/WebServices/transfer/Dockerfile b/WebServices/transfer/Dockerfile index 9885e74..5b37841 100644 --- a/WebServices/transfer/Dockerfile +++ b/WebServices/transfer/Dockerfile @@ -1,3 +1,3 @@ FROM openjdk:11 -COPY target/withdrawal.jar withdrawal.jar -ENTRYPOINT ["java","-jar","withdrawal.jar"] \ No newline at end of file +COPY target/transfer.jar transfer.jar +ENTRYPOINT ["java","-jar","transfer.jar"] \ No newline at end of file diff --git a/WebServices/transfer/pom.xml b/WebServices/transfer/pom.xml index 55a7972..29acda3 100644 --- a/WebServices/transfer/pom.xml +++ b/WebServices/transfer/pom.xml @@ -9,9 +9,9 @@ <relativePath>../</relativePath> <!-- lookup parent from repository --> </parent> - <artifactId>withdrawal</artifactId> + <artifactId>transfer</artifactId> <version>0.0.1-SNAPSHOT</version> - <name>withdrawal</name> + <name>transfer</name> <description>Spring Boot Micro-services By DevDojo</description> <properties> @@ -19,7 +19,7 @@ </properties> <build> - <finalName>withdrawal</finalName> + <finalName>transfer</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> diff --git a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/TransferApplication.java similarity index 60% rename from WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java rename to WebServices/transfer/src/main/java/br/ufrn/imd/transfer/TransferApplication.java index ba5b3a9..912127f 100644 --- a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java +++ b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/TransferApplication.java @@ -1,13 +1,13 @@ -package br.ufrn.imd.withdrawal; +package br.ufrn.imd.transfer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class WithdrawalApplication { +public class TransferApplication { public static void main(String[] args) { - SpringApplication.run(WithdrawalApplication.class, args); + SpringApplication.run(TransferApplication.class, args); } } diff --git a/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/controller/TransferController.java b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/controller/TransferController.java new file mode 100644 index 0000000..2d8606e --- /dev/null +++ b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/controller/TransferController.java @@ -0,0 +1,24 @@ +package br.ufrn.imd.transfer.controller; + +import br.ufrn.imd.transfer.domain.Account; +import br.ufrn.imd.transfer.domain.Client; +import br.ufrn.imd.transfer.service.TransferService; +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +@AllArgsConstructor +@RestController +@RequestMapping("/banking/client/{id}") +public class TransferController { + @Autowired + private final TransferService service; + + @PatchMapping + @ResponseStatus(HttpStatus.OK) + public Client transfer(@PathVariable Integer id, @RequestParam(name = "value") Double value, + @RequestParam(name = "toAccount") String toAccountNumber) { + return service.transfer(value, new Client(id), new Account(null, toAccountNumber, null)); + } +} diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/domain/Account.java similarity index 91% rename from WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java rename to WebServices/transfer/src/main/java/br/ufrn/imd/transfer/domain/Account.java index e96c207..aa147cb 100644 --- a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java +++ b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/domain/Account.java @@ -1,4 +1,4 @@ -package br.ufrn.imd.withdrawal.domain; +package br.ufrn.imd.transfer.domain; import lombok.*; diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/domain/Client.java similarity index 92% rename from WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java rename to WebServices/transfer/src/main/java/br/ufrn/imd/transfer/domain/Client.java index af2368f..79a7f25 100644 --- a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java +++ b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/domain/Client.java @@ -1,4 +1,4 @@ -package br.ufrn.imd.withdrawal.domain; +package br.ufrn.imd.transfer.domain; import lombok.*; diff --git a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/repository/ClientRepository.java similarity index 82% rename from WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java rename to WebServices/transfer/src/main/java/br/ufrn/imd/transfer/repository/ClientRepository.java index f2ab6a9..917cc22 100644 --- a/WebServices/deposit/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java +++ b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/repository/ClientRepository.java @@ -1,6 +1,6 @@ -package br.ufrn.imd.withdrawal.repository; +package br.ufrn.imd.transfer.repository; -import br.ufrn.imd.withdrawal.domain.Client; +import br.ufrn.imd.transfer.domain.Client; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; diff --git a/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/service/TransferService.java b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/service/TransferService.java new file mode 100644 index 0000000..77f1ddb --- /dev/null +++ b/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/service/TransferService.java @@ -0,0 +1,45 @@ +package br.ufrn.imd.transfer.service; + +import br.ufrn.imd.transfer.domain.Account; +import br.ufrn.imd.transfer.domain.Client; +import br.ufrn.imd.transfer.repository.ClientRepository; +import lombok.AllArgsConstructor; +import lombok.extern.java.Log; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Log +@AllArgsConstructor +@Service +public class TransferService { + @Autowired + private final ClientRepository clientRepository; + + public Client transfer(Double value, Client fromClient, Account toAccount) { + fromClient = clientRepository.findById(fromClient.getId()) + .orElseThrow(() -> new RuntimeException("Invalid user!")); + + Account finalToAccount = toAccount; + Client toClient = clientRepository.findByAccountNumber(toAccount.getNumber()) + .orElseThrow(() -> new RuntimeException( + String.format("Customer not found with account number %s", finalToAccount.getNumber()))); + + if(fromClient.getId().equals(toClient.getId())) + throw new RuntimeException("Invalid account"); + + Account fromAccount = fromClient.getAccount(); + if(value > fromAccount.getBalance()) throw new RuntimeException("Insufficient balance"); + + fromAccount.setBalance(fromAccount.getBalance() - value); + toAccount = toClient.getAccount(); + toAccount.setBalance(toAccount.getBalance() + value); + + clientRepository.save(toClient); + fromClient = clientRepository.save(fromClient); + log.info("Transfer concluded!"); + log.info(String.format("Account balance: R$ %.2f", fromClient.getAccount().getBalance())); + + return fromClient; + } + +} diff --git a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java b/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java deleted file mode 100644 index f65f991..0000000 --- a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java +++ /dev/null @@ -1,22 +0,0 @@ -package br.ufrn.imd.withdrawal.controller; - -import br.ufrn.imd.withdrawal.domain.Client; -import br.ufrn.imd.withdrawal.service.WithdrawalService; -import lombok.AllArgsConstructor; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -@RequiredArgsConstructor -@RestController -@RequestMapping("/banking/client/{id}") -public class WithdrawalController { - - private final WithdrawalService service; - - @GetMapping - public Client withdrawal(@PathVariable Integer id, @RequestParam(name = "value") Double value) { - return service.withdraw(value, new Client(id)); - } -} diff --git a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java b/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java deleted file mode 100644 index f2ab6a9..0000000 --- a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -package br.ufrn.imd.withdrawal.repository; - -import br.ufrn.imd.withdrawal.domain.Client; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface ClientRepository extends JpaRepository<Client, Integer> { - - @Query(value = "SELECT c from Client c where c.account.number = ?1") - Optional<Client> findByAccountNumber(String number); - -} diff --git a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java b/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java deleted file mode 100644 index b3e0f26..0000000 --- a/WebServices/transfer/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java +++ /dev/null @@ -1,31 +0,0 @@ -package br.ufrn.imd.withdrawal.service; - -import br.ufrn.imd.withdrawal.domain.Account; -import br.ufrn.imd.withdrawal.domain.Client; -import br.ufrn.imd.withdrawal.repository.ClientRepository; -import lombok.AllArgsConstructor; -import lombok.extern.java.Log; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Log -@AllArgsConstructor -@Service -public class WithdrawalService { - @Autowired - private final ClientRepository clientRepository; - - public Client withdraw(Double value, Client client) { - client = clientRepository.findById(client.getId()) - .orElseThrow(() -> new RuntimeException("Invalid user!")); - - Account account = client.getAccount(); - if(value > account.getBalance()) throw new RuntimeException("Insufficient balance"); - - account.setBalance(account.getBalance() - value); - client = clientRepository.save(client); - log.info("Withdrawal concluded!"); - log.info(String.format("Account balance: R$ %.2f", client.getAccount().getBalance())); - return client; - } -} diff --git a/WebServices/transfer/src/main/resources/application.yml b/WebServices/transfer/src/main/resources/application.yml index 02b4469..3d54e54 100644 --- a/WebServices/transfer/src/main/resources/application.yml +++ b/WebServices/transfer/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8083 + port: 8086 eureka: instance: prefer-ip-address: true @@ -11,7 +11,7 @@ eureka: spring: application: - name: withdrawal + name: transfer datasource: url: jdbc:postgresql://postgresServ:5432/postgres username: postgres diff --git a/WebServices/transfer/target/classes/application.yml b/WebServices/transfer/target/classes/application.yml index 02b4469..3d54e54 100644 --- a/WebServices/transfer/target/classes/application.yml +++ b/WebServices/transfer/target/classes/application.yml @@ -1,5 +1,5 @@ server: - port: 8083 + port: 8086 eureka: instance: prefer-ip-address: true @@ -11,7 +11,7 @@ eureka: spring: application: - name: withdrawal + name: transfer datasource: url: jdbc:postgresql://postgresServ:5432/postgres username: postgres diff --git a/WebServices/transfer/target/maven-archiver/pom.properties b/WebServices/transfer/target/maven-archiver/pom.properties index 6b1d262..42f8405 100644 --- a/WebServices/transfer/target/maven-archiver/pom.properties +++ b/WebServices/transfer/target/maven-archiver/pom.properties @@ -1,4 +1,4 @@ #Created by Apache Maven 3.6.3 groupId=br.ufrn.imd -artifactId=withdrawal +artifactId=transfer version=0.0.1-SNAPSHOT diff --git a/WebServices/transfer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/WebServices/transfer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 3d142b7..b4c8e86 100644 --- a/WebServices/transfer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/WebServices/transfer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,6 +1,6 @@ -br/ufrn/imd/withdrawal/domain/Account.class -br/ufrn/imd/withdrawal/domain/Client.class -br/ufrn/imd/withdrawal/controller/WithdrawalController.class -br/ufrn/imd/withdrawal/service/WithdrawalService.class -br/ufrn/imd/withdrawal/repository/ClientRepository.class -br/ufrn/imd/withdrawal/WithdrawalApplication.class +br/ufrn/imd/transfer/repository/ClientRepository.class +br/ufrn/imd/transfer/controller/TransferController.class +br/ufrn/imd/transfer/domain/Client.class +br/ufrn/imd/transfer/domain/Account.class +br/ufrn/imd/transfer/TransferApplication.class +br/ufrn/imd/transfer/service/TransferService.class diff --git a/WebServices/transfer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/WebServices/transfer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index f1ec510..0fe3447 100644 --- a/WebServices/transfer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/WebServices/transfer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,6 +1,6 @@ -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/domain/Client.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/controller/TransferController.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/domain/Account.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/service/TransferService.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/repository/ClientRepository.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/transfer/src/main/java/br/ufrn/imd/transfer/TransferApplication.java diff --git a/WebServices/transfer/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/WebServices/transfer/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst index 756fc38..75e2baf 100644 --- a/WebServices/transfer/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ b/WebServices/transfer/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -1 +1 @@ -/home/ff/code/dim/devdojo-microservices/withdrawal/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/transfer/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java diff --git a/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/WithdrawalApplication.class b/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/WithdrawalApplication.class index 57df24479a401277212450f2b0c1421ad7f0f678..603452df1fdb1d9b21704013c709dd2e2fd6c7a8 100644 GIT binary patch delta 280 zcmYL@y-osA6okJ6Tz0uGiXi@CVW%W!H8I){8y~<9>s5&X3^s(8XCV6^hJs)$d;lNA z*B~*@t|k_D=1k_yoV#)>SN;5c{{XHy3@D^SJHIFywLvmT;^$=a6yM$tdJkix-06?{ z<7=aMe9|>aH!qJpPmxN5qdYsChMr9t0rhlYr!HcPX8L8r+3Rx35z6Tb6f|jH7)Zrp z6T9}3aGu*<nAvDyO&I+yh^tZ+*4a==7QW2OAgo*ajoRIR-pc`>H>e~2D+$?VN5-z6 RGl}dwdpYiNAkOZ#;0F@0A8`Nx delta 269 zcmYL@O-{l<9L0bC!nCCp`H+hEv2dq#0c>Dnbip0;0<s_`nh^J#p=rWBSYcdv0Ix(s zd{a!EWZuim`<U6eog4k^zrKMfR|$2ph|`2VXAuJ<ykER6J|2wP&Fzy>pS{1#i{+|Z z+t#Hx!lF42&r>eAEFLq<%XTm*GwYOh_PXMlK#Tqam`@8MsiD}!F5hCC%8rHJMuCPf zJp@QNl4?jdHR8*YY7F9TkbhEp{_iJpP$N=D8^gbmm}6Qp+Pcmp{C7GPb~zFIcYE*) DXu}zB diff --git a/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/controller/WithdrawalController.class b/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/controller/WithdrawalController.class index ea0b867d1bfb8e2a439a9605f0ad0b8962c6b618..7490642f25322c94102afc0587ae0754a3d8d1e1 100644 GIT binary patch delta 468 zcmYk1O-=$q5QSgQ03$Of!;kzaf{OC1uu(UJjaw3SM&k;V7zjZVkS#8}z+~2P1fz+H z(S!pSxr<)F_<Gp5=&E|JtLp2X88gHD{C%GSI6y^%BCv0bqxMuyMKrhs%uaLIEO(o| z%W~ta(>fnm*|B{qev<BCvwPDLa2;M<w7d`q`rw8~Ls%eVjWZz~Aw+zLA|~LewtMYC z&Hh&7hK>YQHLM6!NV4j2w+~6I*;UuI^>t?-i=48Tv+iS7Jz?gLbg0P7Ed>EJXFn)! zBdn9A^2KCIBrAorh6T9brSeee%mz<TUinxEEb=V%;fG1t;H2CUC_E!j`atNUIKlEO z;*T^Hq!{HIAdEC)dfrU*#)y)0*hI!@2yo*TN4DvD722R7c~N9(OIVFrVb%*1<O;<X t1fHn=Qw)a^nRiJF@7eEsPdKaHg2I$TMQ66;d^Jd8hkBPh|0zTt<v*qcIJW=* delta 462 zcmYLEO)mpc6g}^~&P+QqXs4>a+iFo$R3g|23qPPciLfweq>Ug!w{{kG@-|j}0|}Lo z_yH1r13$sG3vp&7<mJA5&%Ni~d+wX_=1jhRKfM50!dwC-iWW*XB*tw_VA6(#vV|!N z{?*ov5nDUjt7}tTm_{o&IIHVR<zIEa9CNvG*f?DgSSafc*{|Q#u<odK+(jG-fs+1| zrHqSVR4h!pn89oassf9wWOYsD(gMk5&<d&t!Qp<jw$rTdp6XROptt3`zLv-5sywxh z0tH&sD&U2a8A--A9K_%f)nGu;r~G?}>1W7|$|F=8vD=8+#ouHD(2H*V`Cl@6kR)Oo zpBL3rNRuOxVKyO|J_j>EA1$1arSGSC;r;;z0)w=n6S4$P8)0uKXoX(V+x{aAzw!Wa sM<nsD#EF#j{j&a)*wJ|++HVMgVv>x}s5cj>@QCxo1@234LY!di2Y|mg82|tP diff --git a/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/domain/Account.class b/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/domain/Account.class index efc81792b6d3adf086960859ca0c809421a9d70b..49719789db7ffb21c4173020f3b813348fcd0c9d 100644 GIT binary patch literal 1659 zcma)7YflqF6ur|YEkz2HD&Pwdf$~`24=^SOXlg1NsZBI~nYLpY($3;`R>WVWiNwSY z{s4cJ@yzZPw@^)+?9SXf=iYPfy|d}B-#>m5(LGvAQiRcL)v?_7j<RH{ZXHOyTX*;Y zZ(4P`#ig>=Yc<<dI!Q4`***S|TTQMS){E+%sKJ|Hl=HmOwswRgc~gGo)usTr?U@zf zw56?H7dIKPXN-n6Y}M9W=?ZVUA`T(u2OSYvXEav&OHou>G=#IpXyO$V$d;(cwnXlA zrEJYLvbGuJy@*fNzTs(Wp=!b^))922$H7yfgu}I{d*lEOw6(DthyTTcseHIE48FLz zwOuZj-!Mujw^bDmqtTG&9qmZf0C2Jg`-a_gTMCB>SIG~qh@x=DC|TubX$>t4XWFz~ zlxn~arIPv)qt*EkQKvZ}SHK<e1UVKejA9#hU8E^WmohX(ml;Lp7b+=2*%`{vkl9_$ zP>#mU?plT>Xp+%zNh-1Jm09+OI$E-8yjkHGG}HyonBJ9`#9XPbn}m|G&xPK#>o2*( zTS8-SjN)yfi?{&!UPYP$QULf;7>$QPLD>eA2Ig_6nO&ezC*lpCX?%Vm)T&NDL4@-T zQLYPfJlr%O$2{Gb<FTc8Y}cuYC(?Wincyp0F}J(-<=Dav*N1B~js8dR#3@FTl%xUd zQ|1eyG#-o!_8HhCu!gZ_VUGwJr7<`#zu<TfYaY+pw{#8%7$>kM*A$(HeF4@xtTC*) z!gsn@SUjTX!qO4V6qb)@_AC4mn!`JR7!x^<cfrTg0(Rz?3-p+sp^kVy!xg1P?1!QN zWO0;*03#GP4{t+mVKs^4hWsR3%45s;fPjtB5-kVHSFswdgs1vsblQu~`-o$$i9oB- z6~{z8JuA@RH=`@%Ous4peg`Q{nT)Q}jb15Fb@X2<P4}4BJ*f1%c9U+w)!nskH2npY ogl9C^vun5MPLJT3{(|q~U*a_LY(K#fy6@?G;N4bpi&lyL06$+l-2eap literal 1659 zcma)6YflqF6ur|YEk&x73WzU6Ddn-gQ7|S5Xlf9R)Fv9gY`bF_($3=Utcbr#6N!l* z`~m(b<C*QYZtH4jvNJn(&b{Z%xwHNG>-!HPTA{TprRa8sl5|H8clEH6rh93+pQcqt zd6zrFY}L5q3R}LaY%*d`8I5e%(p9EZHM8aMBueRDj8RNjjK;S2%@3y0GG)`KNX47n zSz|Q$(vwQGc}=*Y-s0<0+R9X@>M|<&86S-U&EqOA8{DW^NScY*c)}%jOvNpq9H1dr z>2>qyzj!cJj}ExTS2nkHs+H<%Mk(pF>)c^<CZu^+IYKr8oQh!Iuv=bRVl(AQ@!sQc z9Go#q*G-(a!TT$1+8&Oo!4HHK>LH`mQi!N)PAC*`hay3Z`5L3dhHZgibX!Qi;|s5v zsINKg2D)UTS6BzZgxVAEc5b`w7~VTa8lr6(heGXHj(KRd49jktLK^FhhK<fZWd0df zd$#q$bj&taXa%EqN%JOMt}1A3F-p7!WB}+0Vl*BG1;^2tEHIC{CiQ_rCrmawOyi~b zkOf_zK!p7+QK1jhYg!hN9#21}*N*J2?KutpSZMQdfdk9>)<!pd3pZCCt>tK%W^*(` zr*bq-#T-r1IYw7c<S*>~^Hn^r@AHOYRPaN>Hg^5bOnlPqqs#aRQ-nK32`~&%2Jcz@ zebF!;uwy-n^=Yi~{)`*IX^aX8Kv%FmjQK2{i8nNf4QK^+2!UxjkM#wt-eOK*E|k9! zD=!>Vth{(k@$%9!CB7gYql*}|7M*zsW4VKe#u==T8R*e(nmXpkG*_Ii;C&<xKptCp z2*~^7vlunGfms($YVtw0jL(+q00K5xP1geDtC%%c%2z#@o%ORjYEnI|sX(jNmBgQz zuV;=*Q6=LiE!puqD5;OhXdW(g{Owcum!tnusoi6~dr;YNZGjdM>UZrc#XjRC;U0}e ny0%2i5y|nv<YHv9LDwUa6NAYU5y>&S;p@BU-&TE#ZV~+keET|G diff --git a/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/domain/Client.class b/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/domain/Client.class index 2625605e6d1bba272ba887022881afbb37aeabce..5e2dd34d47c70f5b75f879d4e3181027bc3e5cb5 100644 GIT binary patch literal 1867 zcma)7YflqF6ur|Ylp+NR%0m=IXv<@LKfss}9;T#%k=n$>#0>3NhP1O}cPiqq(nMn7 z2Y-M+%6MjXDFq6Yq&vNL&%Ni|Gc)Dyzu$j|=ou}=Da2@M$FUlp9c9US#X69Bx8m>v zUb8B8ol9k{)TB^4P7y|_J^qDTHLj}G*3O<NBO7Cs_OjBpwuK{kO@8A$H36{eg(cy* z(pK;DtBlwNquv!;xtc3o;<bi|LWlWdj6$-)Xs~cXkylz&g|ozH<XuB)Sr;YgO7vb< z%GO+?tIKHEtN3c|8y;5+RTfshf}%TZUc44cI9!X0M-EVzt4&-zyc7?n;^Dq9`26bH zW-(v<z$l`49b*o(DBjkNR8_#@yj-@SnbAz)a(9<~AZo_j=-pDHXybv`6K!5^*ix<7 zwMJb5kO(+G86RUWrIPv;?8&s~J9ac%g8UV`A`%p)TS*$D+l<1QY^j^zLz0rz%c!p) zmDp_5cZ5^)cXXg&mwBzkvCG(nAQ{oS65B9+#hm^rg3Qz#p?B@dTkgO<jZI^;)lOrJ z?7-G57>=Fvr^qEKO+#j$xg-tKbw*KF=sc{6W8L(&Zm5+vATib?fC#!V%4Is{1xMBA z7|LW@^dH*}ZoK!o)29&4gOdQDNu33z)6<jKwi`}atV?tCdVIGR%w1wM+UDe};XdiZ zC7OgmVSJ(#p;3xc7ruAnK87fP56%JNYl!<1^<hmR?iVybgGj(&4+?t&SRb-CkQ+gq zcG1ynz!;4qeG}<*tRbw4+%KBQ%^uO@53j*pJg-3q0UH6j8|W!S!#<ks(KI5|1&U_y zJ<1T^hXW;<p#4Xz5#-X%_PMzu%I4;eX!e9Ch8n`4h9KwTn*`~A06o0vjM%g}J`iU} zd&2;vkV+wGyui)D)68aJHI1W&{486y$CmT~0UM+FrZJ09Zn$D+O!2iQTFi(wwZ_hx zVe~9Ohwt^Nmf5p{E^2AE6hB&K4(y;e;(dD1uH`vLFKX$Zj-aLQ+CzE-mea2Nq{;7~ r4Ustv{@gunU3*MV+7xFyD}IXqdgqyEJ1Gv)b5Gw3??M=bi$wnc;_Pe& literal 1867 zcmb7EYflqF6ur|Ylp<AHl&6RwZF#J36pRTeU`h~-R1y;tvu(#Rq@5+ZQxSiaCK3}r z_yhb=#xuK1Y3l;oq%)m6_ug~vxpVvL_m7`Mv_vZjiqXSfiqa#!Jl4xnoSww#X`GfB zr5tVxv%be|M_BSrag7n%WYk}<q@zr!_RM;dN0CZ@7^9G=G8)`EFh80`-IO(>C>5`9 zdxg>P>!wtq!S{qC%5}afrKL=TtPZ0gH{z3VsBs*{WrZ8XDuSj0E?#iSZBy~83l66q zN9l9z_(Fdmm5vX&_AjojZ<mUtw~QjvY;Z=`+8FODTgV#R;%22{fit7ot+H)2KiJX` zjjC}Z)PB`AkIcGJwHl_7#;WItn6Uu9JCc_yEV!NsxZbpcELinsL&729W4_lq#-0f& z)N{y_ZR2;UXl@Vm3sx2M2eyRd+s#Iq+a(j)>Vm8a+Ge78IQzzk+7}S}&L!0p>ViuJ zGO3qb?OWAXrVWu4TEl23h)EkcU%X2YPW93ygtK~$I$RY|avb}%+mcK>lAl(4Cg9=6 zGs<WG11VbbFf!R(8{<<sfsK0)JKf>YdJqXXw4ihF`PWyG*tME=g>MMmnm$k8MLi>o zMgm^MI_5+juOw-VW|GuTSCW*Wp(I_W8;qte2KADocV{EGQ$FAoyyCQL5|**+&b0Wf zp9bB+#K#ELQ-nsShkEflfng3&AHD#`c>w3DIHlYjuZz<lrC|Uq*A>isw*gp(VH?3Y z<It#^Z;Zxao`87+dkA|X|D9NV?u0^L-2^wWUZF77QScZ;)HqGzG~{`M<rGec^BLX7 z?<oF<uwm$E+E4!udjz(0D}8?cgu?lS6N;Px>2e9BPGZe_{w;vC4}ctQb((BiD-UuS zv_A}o6s}S*rd;qDthzP>yG|U{;N57wE?Uxa@X;`eEn$|yTw}$$MDe&L+-OgXSc_|{ zTMW%-ma@JW9Vx@zgw9K;Tgu#0p|38JQ4T73?dwSSm!jvT^j?SGGEcQRnn&VJ)xJ^a w3ls>EehgmSgMq3o&|*MvxH~u#7;MnpfZ#}X@NhtIi0--k?z;n_89pHT1Io#2q5uE@ diff --git a/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/repository/ClientRepository.class b/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/repository/ClientRepository.class index cac00542eafbda4dc9b6de42f0e978b7fa504608..47bbb2a46dba1eb8a389a3a169a1073dc11bd96e 100644 GIT binary patch delta 195 zcmeBS>tW+P^>5cc1_lOm22pkfrpYEurZVgdEQ|~SS&3zd`Z<Yt>H7XjS*gh-><ny- z45pI{7)>V%J5MZnCB>Fknwykb1XSvqT9T2U5|CJwn44OXT2wswA*1@_7{+!+?aBF! zqLbyA#3F!t85x*?m=$OjBhY+y1`Z&f6Ubv?;9}qg(%e8<9w6o|X5eEG01B`&GVlW_ VW(Gm9Dj}$9VX$g8ph^)21^^JZAZ`Ev delta 184 zcmeBS>tPc<^>5cc1_lOm22pkfA$A5~b_S7&lbxjmd{av@@>2p5ixP8FOHzx985!8} zN^_G^izZ%qGntX8eexYf)yW-9Ium(Kg&7$HvJ%S@^>Y&Q()In5vQm>vCPrICurV?) zGB5!#GtdG?7DfgZ238=O4aj3<WMBtU96-#(z{$V`q`83#L71nQffuL>BE`qR4^|=o MR>B697Gz)m02bRHvH$=8 diff --git a/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/service/WithdrawalService.class b/WebServices/withdrawal/target/classes/br/ufrn/imd/withdrawal/service/WithdrawalService.class index 0a390799acfbdb13134073353582f653bbca73c5..8133ad60aa5061c891cf6074a70d8122854e15f9 100644 GIT binary patch delta 1354 zcmZ8g-*XdH6#j0q*-bXLHl%42Qd5%t&?IdQ)Rrm~(6k7}{s61hs-W9u8&bB}nrw<% zw4i{Zs4(||H+}R~L_)z)d~?RZ@xgb;f5Hbxhw<EPr|p=T<lOV)e)oLeIr%$!G1l<Q z!+Sph7{qlA9`QgKh$sx91!LLBSw^{-o19%R=bY>3e(oQdvr6TXbCAKC&P+2X!*;>c z(TE)yLJW;tcZMyaTIC3%Nj%h2X&udoYG`4IxivMXWaTWoSS%6#7+JHz5yMWg%YQ%* zfT5Mc2UXl=8IfmJvkav;H28INpi4t1L#Jr;wTbgg^>I9g$3?#{84MzWZVg$6KJlBU zk1{>z6<2(F^)NBaaqPw(@ux4{uH#7zXy|7MZ#6Wz<dp2PVR7umph&3sfPC#~j(rfP z)O|xb4&aamqQ6a@5xX{PnH<mHS%zT2^`;H0X1XGc=orRf4I_g4($vm#I3n(=ovMaW zhPY_+#=U+#FZL+W0Ubv%&M|>W26bpd=jQa-mZ(!sh4k8=nU;;5;CKO3;vcnLmv6kp zF^!i+LhI6{2s0e7;x&=ib`$<dVJNYPoWUC$Z%TZnRGzo}m=zb4)})RC<~2~m+i0!7 z#Zkm*@wIkD{K0;WQo*?CoVE+cjf$~oI%cKHFqjqwi;1$YwZ-ksi<%_C8T^*9I9o78 zi?^f6k9QavM$5~FRVpNFRkM;3$Gj(62{LcnPSvRxOY7KG9jmyY;k+pMyP_N);6u`t zUNh#6ImfOL&V#hr5r~Q3{kKLMRlLs-NoTgnw7#$VL%5{V+I-BhjI&htQ3z)l_-MIo zR^0V8s~SFI=n}a=B3SJlv+XmrB@JJQn}O6S&0sx%6oGhYdpwBCoupG(E+Rz(bXLjg zWEF}8!O3eNuZOJs@Gz_6ku^kaA%2s54<4moc?VRTa3dhE4ZA2OZ~jGD1th^r_B$kd z>S(`<v<LU_1W-rcPv{t@;8PRbbqw{^ktcKGOEi3sqch=ScQAIpcOxnbifcGt$BQn~ zUA*Ffy#6iX;n(XpC9R?S0Pl=fA`;fr8s;d`^9|5Klx3?~ms}II7NP%VllV$ctje~t zvPrC<gaxwlbOx47YXyra6PY%ggpDP_d5iKS*S{FlXi+QV1w2#^DwNzOP~G5ukgSJd zdiD;SZ1-&>|F0P*%~oZ1ZrSGR`o=&cwvUk$3h8p{gf2DBy7MDkSEaW}C1OYrTeFC4 n&O*VvZf<3By64D$kG^uY7YV8PGOpkgd`cm?Usv%tu3_hYp=<#) delta 1327 zcmY*Y-%}e^6#njRlHF`BC4@i%C?z!5KtSjZ!B#*m)JiR-6vd)qS&|Jbgbjub6lqP> zwrbTXb03`X!5@EtKUz~-N81OV93B4vpM3YlM`s-M+=a0=Gud;`chC9Gch0@{QvA<Y z`NzL+e-EG!n?b~J*gyb}h0u?I2%$p;hH+HGQxZOA;AxB)=*Dpk&*(T|z`&>kPfBo1 zW}T8G<2p_on833-p3^XC;CY-e5XF>^7c{(R;3Z7U{g)Zk&8Z(mNLkbvd_#q-C4OV= zVmk2iZVhJ{!lRZuU&x*^i{_H$TE!KHK)>zS?w}aZ4o4Vj^5)WP)=aM1?tHdru8FJK zo*D+dKa=;us6eWHQry+XBODK+nPUc~hFOjbvZ6+>ZLSW$3L{5mE{ua5^RP86a4aIv zkQC!e@+`*^91R7IWxT>s1j%SzFjvj)yy?t!pDsDBy<{Cdm$8;zyWlWHN1T;XE@x+K z%W+#~O$y6c9Q)vMl(5RNhI1V2c$K3G4~Q@Pab3d($9cHoSAWw1YWyDk*zAIpaW!1v zcnxLA(#uda;;fo^JKIuPv5E<X9ugW87Xl4c8ZL6YjyE{o#3f<+QsRcvqB89FBBrz^ zQLpv}4P3?*5}FdfsC8-_Z;44YRmTwV>XuwP-#z9vW9G$Y>Jjm~dT8%`s)h@t*}TON z%6f}QGhZT)hCM8<`I6!vUtA>otzy*QCeHhNsD6BNCf-PgY&*HaeM}Q>(RSuUec)KQ z`d-&Vd2?k&jI)IJm<>=<Z*#nZ_c;#Wpy<@wx~MYU2s3A9+(L0(!v}OTP814@rDX;_ z;y6~(W3cF`eoBeY^|-jGUk_;bkfBZ7(PQN95}yVWWhCgrM(L_6Xq2ZxtBAZQVAxIT z0NEC@KC%h4Qq&&u{vg~(cBA74SZ4*wEvO1^ORNI_T?9r6)J~==(7P%KlKJQpRDBC$ zDiXR0ey3{(O;^g$=eAH)!7h*L7OEA<{I3y?)Kn0Ww$}F@qEo7*B(jMu)X_%gmsDRx zlD-ciNZ(r09Yq7`NqdZ*a|4c3M`x&~8R}}CdTOJnj&0qPvzI)eynz(jsX1zfHq+E# zGp5mrE+T)JP#x?q^l9|Id&mna6fRjnDf_U0XC8xO6~c^;o2c(de*^Xvd5Wh_P7vT; z_4@6o|Ee1(Z;x7X`x$8rhYfkglq2WdN+RUX@J1J-(aEmqUD9`(H%bB@LGMm{(yK+) zBJm0uw$OMTVX5T*86lcLA7Kg}r4vqX6CEPpJ^C9IdKK63E{$)Hd`|x3B;pA?i6j34 DC0zFh diff --git a/WebServices/withdrawal/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/WebServices/withdrawal/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index f1ec510..048a3ab 100644 --- a/WebServices/withdrawal/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/WebServices/withdrawal/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,6 +1,6 @@ -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java -/home/ff/code/dim/devdojo-microservices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/domain/Client.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/controller/WithdrawalController.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/repository/ClientRepository.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/domain/Account.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/service/WithdrawalService.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/withdrawal/src/main/java/br/ufrn/imd/withdrawal/WithdrawalApplication.java diff --git a/WebServices/withdrawal/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/WebServices/withdrawal/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst index 756fc38..51bcfa0 100644 --- a/WebServices/withdrawal/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ b/WebServices/withdrawal/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -1 +1 @@ -/home/ff/code/dim/devdojo-microservices/withdrawal/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java +/home/ff/code/IMD-AULAS/dim0614/WebServices/withdrawal/src/test/java/br/ufrn/imd/withdrawal/CourseApplicationTests.java -- GitLab