From 0c8ced2be42ba2df035f59ce1d7a4abb4ecd12aa Mon Sep 17 00:00:00 2001 From: Fernando Ferreira de Lima Filho <fferreiralf@ufrn.edu.br> Date: Thu, 21 Apr 2022 11:11:33 -0300 Subject: [PATCH] fluxo request response --- .../java/ufrn/imd/controller/Controller.java | 3 ++ .../java/ufrn/imd/utils/MachineState.java | 44 ++++++++++++------ .../main/java/ufrn/imd/utils/NameSpace.java | 3 ++ .../java/ufrn/imd/utils/ServerResponse.java | 20 ++++++++ .../main/java/ufrn/imd/BankingServerApp.java | 6 +-- .../java/ufrn/imd/controller/Controller.java | 2 + .../impl/BalanceControllerImpl.java | 11 +++-- .../impl/DepositControllerImpl.java | 16 +++++-- .../imd/service/impl/BalanceServiceImpl.java | 8 +++- .../imd/service/impl/DepositServiceImpl.java | 8 +++- .../java/ufrn/imd/utils/ServerResponse.java | 20 ++++++++ .../classes/ufrn/imd/BankingServerApp.class | Bin 1259 -> 1335 bytes .../ufrn/imd/controller/Controller.class | Bin 252 -> 344 bytes .../impl/BalanceControllerImpl$Notify.class | Bin 2838 -> 2869 bytes .../impl/BalanceControllerImpl.class | Bin 2389 -> 2642 bytes .../impl/DepositControllerImpl$Notify.class | Bin 2927 -> 3029 bytes .../impl/DepositControllerImpl.class | Bin 2389 -> 2843 bytes .../imd/service/impl/BalanceServiceImpl.class | Bin 2841 -> 3580 bytes .../imd/service/impl/DepositServiceImpl.class | Bin 3115 -> 3844 bytes 19 files changed, 114 insertions(+), 27 deletions(-) create mode 100644 banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java create mode 100644 banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java diff --git a/banking-client/src/main/java/ufrn/imd/controller/Controller.java b/banking-client/src/main/java/ufrn/imd/controller/Controller.java index 580d6e5..ab932a2 100644 --- a/banking-client/src/main/java/ufrn/imd/controller/Controller.java +++ b/banking-client/src/main/java/ufrn/imd/controller/Controller.java @@ -1,10 +1,13 @@ package ufrn.imd.controller; import ufrn.imd.domain.Client; +import ufrn.imd.utils.ServerResponse; import java.rmi.Remote; import java.rmi.RemoteException; public interface Controller extends Remote { public void registerClient(Client client) throws RemoteException; + + public ServerResponse getResponse(Client client) throws RemoteException; } diff --git a/banking-client/src/main/java/ufrn/imd/utils/MachineState.java b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java index b7a227b..b810c0c 100644 --- a/banking-client/src/main/java/ufrn/imd/utils/MachineState.java +++ b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java @@ -2,6 +2,7 @@ package ufrn.imd.utils; import lombok.Data; import ufrn.imd.controller.Controller; +import ufrn.imd.domain.Account; import ufrn.imd.domain.Client; import java.net.MalformedURLException; @@ -10,19 +11,18 @@ import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.util.Scanner; +import static ufrn.imd.utils.NameSpace.HOST_BALANCE_SERVICE; import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE; @Data public class MachineState { public static final String INITIAL= "INITIAL"; - public static final String RENDER = "RENDER"; - public static final String UPDATE_STATE = "UPDATE_STATE"; public static final String READ = "READ"; public static final String DEPOSIT = "DEPOSIT"; public static final String BALANCE = "BALANCE"; - public static final String HELP = "HELP"; + public static final String START = "START"; public static final String INVALID_INPUT = "INVALID_INPUT"; public static final String QUIT = "QUIT"; @@ -42,32 +42,48 @@ public class MachineState { public void update() { if(state.equals(INITIAL)) { - state = HELP; - } else if(state.equals(HELP)) { + state = START; + } else if(state.equals(START)) { state = READ; } else if(state.equals(READ)) { state = inputValue; } else if(state.equals(INVALID_INPUT)) { - state = HELP; + state = START; } else if(state.equals(DEPOSIT)) { - state = HELP; + state = START; + } else if(state.equals(BALANCE)) { + state = START; } } public void processEvents() throws MalformedURLException, NotBoundException, RemoteException { if(state.equals(READ)) { - inputValue = new String(); inputValue = sc.nextLine().trim().toUpperCase(); - System.out.println(String.format(">>> input value: %s", inputValue)); - if(!inputValue.equals(DEPOSIT) && !inputValue.equals(DEPOSIT) && !inputValue.equals(BALANCE)){ + if(!inputValue.isEmpty() && + !inputValue.equals(QUIT) && + !inputValue.equals(DEPOSIT) && + !inputValue.equals(BALANCE)) { inputValue = INVALID_INPUT; } } else if(state.equals(DEPOSIT)) { - double v = sc.nextDouble(); - System.out.println(String.format(">>> input value: %.2f", v)); + String v = sc.nextLine(); Client client = new Client(1); Controller server = (Controller) Naming.lookup(HOST_DEPOSIT_SERVICE); - server.registerClient(client); + ServerResponse response = server.getResponse(client); + if(response.getStatus() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance()) + ); + } + } else if(state.equals(BALANCE)) { + Client client = new Client(1); + Controller server = (Controller) Naming.lookup(HOST_BALANCE_SERVICE); + ServerResponse response = server.getResponse(client); + if(response.getStatus() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance()) + ); + } } } @@ -76,7 +92,7 @@ public class MachineState { if(state.equals(INITIAL)) { System.out.println(">>> Initializing..."); Thread.sleep(1000); - } else if(state.equals(HELP)) { + } else if(state.equals(START)) { System.out.println("These are the avaliable operations"); System.out.println("---------------------------------"); System.out.println(" - deposit \t - balance"); diff --git a/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java index c379354..4bc802f 100644 --- a/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java +++ b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java @@ -2,5 +2,8 @@ package ufrn.imd.utils; public class NameSpace { public static final Integer PORT_DEPOSIT_SERVICE = 1907; + public static final Integer PORT_BALANCE_SERVICE = 1908; 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"); + } diff --git a/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java b/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java new file mode 100644 index 0000000..4c1115b --- /dev/null +++ b/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java @@ -0,0 +1,20 @@ +package ufrn.imd.utils; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class ServerResponse implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer status; + private String message; + private Object body; +} diff --git a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java index 7acd207..39928e1 100644 --- a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java +++ b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java @@ -13,9 +13,9 @@ import java.rmi.RemoteException; public class BankingServerApp { public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException { - - DepositServiceImpl depositService = new DepositServiceImpl(new ClientRepository()); - BalanceServiceImpl balanceService = new BalanceServiceImpl(new ClientRepository()); + ClientRepository clientRepository = new ClientRepository(); + DepositServiceImpl depositService = new DepositServiceImpl(clientRepository); + BalanceServiceImpl balanceService = new BalanceServiceImpl(clientRepository); Controller depositController = new DepositControllerImpl(depositService); Controller balanceController = new BalanceControllerImpl(balanceService); diff --git a/banking-server/src/main/java/ufrn/imd/controller/Controller.java b/banking-server/src/main/java/ufrn/imd/controller/Controller.java index 824205a..ab932a2 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/Controller.java +++ b/banking-server/src/main/java/ufrn/imd/controller/Controller.java @@ -1,6 +1,7 @@ package ufrn.imd.controller; import ufrn.imd.domain.Client; +import ufrn.imd.utils.ServerResponse; import java.rmi.Remote; import java.rmi.RemoteException; @@ -8,4 +9,5 @@ import java.rmi.RemoteException; public interface Controller extends Remote { public void registerClient(Client client) throws RemoteException; + public ServerResponse getResponse(Client client) throws RemoteException; } diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java index 0c51991..8ae4333 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java +++ b/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java @@ -3,6 +3,7 @@ package ufrn.imd.controller.impl; import ufrn.imd.controller.Controller; import ufrn.imd.domain.Client; import ufrn.imd.service.impl.BalanceServiceImpl; +import ufrn.imd.utils.ServerResponse; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; @@ -19,6 +20,7 @@ import static ufrn.imd.utils.NameSpace.PORT_BALANCE_SERVICE; public class BalanceControllerImpl extends UnicastRemoteObject implements Controller { private volatile Queue<Client> clients = new ArrayDeque<>(); + private final BalanceServiceImpl service; public BalanceControllerImpl(BalanceServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); @@ -26,8 +28,8 @@ public class BalanceControllerImpl extends UnicastRemoteObject implements Contro LocateRegistry.createRegistry(PORT_BALANCE_SERVICE); Naming.bind(HOST_BALANCE_SERVICE, this); log.info("Starting Deposit service!"); - - new Notify(service).start(); + this.service = service; +// new Notify(service).start(); log.info(String.format("Initializing server in %s", HOST_BALANCE_SERVICE)); } @@ -39,7 +41,10 @@ public class BalanceControllerImpl extends UnicastRemoteObject implements Contro log.info(String.format("total users: %d", clients.size())); } - + @Override + public ServerResponse getResponse(Client client) throws RemoteException { + return this.service.balance(Optional.of(client)); + } private class Notify extends Thread{ diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java index d9b3df5..179ed83 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java +++ b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java @@ -4,6 +4,7 @@ import lombok.extern.java.Log; import ufrn.imd.controller.Controller; import ufrn.imd.domain.Client; import ufrn.imd.service.impl.DepositServiceImpl; +import ufrn.imd.utils.ServerResponse; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; @@ -20,15 +21,18 @@ import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE; public class DepositControllerImpl extends UnicastRemoteObject implements Controller { private volatile Queue<Client> clients = new ArrayDeque<>(); + private final DepositServiceImpl service; + + private volatile Queue<ServerResponse> serverResponses = new ArrayDeque<>(); public DepositControllerImpl(DepositServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); log.info("Starting Deposit service!"); - new Notify(service).start(); +// new Notify(service).start(); log.info(String.format("Initializing server in %s", HOST_DEPOSIT_SERVICE)); + this.service = service; LocateRegistry.createRegistry(PORT_DEPOSIT_SERVICE); - Naming.bind(HOST_DEPOSIT_SERVICE, this); } @@ -39,7 +43,9 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro log.info(String.format("total users: %d", clients.size())); } - + public ServerResponse getResponse(Client client) throws RemoteException { + return this.service.deposit(200.00, Optional.of(client)); + } private class Notify extends Thread{ @@ -61,8 +67,8 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro clients.stream().forEach(client -> { try { log.info(String.format("Clients waiting %d", clients.size())); - this.service.deposit(200.00, Optional.of(client)); - clients.remove(); + ServerResponse deposit = this.service.deposit(200.00, Optional.of(client)); + serverResponses.add(deposit); log.info(String.format("Clients waiting %d", clients.size())); } catch (RemoteException e) { diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java index 469601d..95e9373 100644 --- a/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java +++ b/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java @@ -6,6 +6,7 @@ import ufrn.imd.domain.Account; import ufrn.imd.domain.Client; import ufrn.imd.repository.Repository; import ufrn.imd.service.Service; +import ufrn.imd.utils.ServerResponse; import java.rmi.RemoteException; import java.util.Optional; @@ -17,7 +18,7 @@ public class BalanceServiceImpl implements Service { private final Repository<Client> clientRepository; - public void balance(Optional<Client> clientOptional) throws RemoteException { + public ServerResponse balance(Optional<Client> clientOptional) throws RemoteException { Client user = clientOptional .orElseThrow(() -> new RuntimeException("NULL USER")); Client client = clientRepository.find(user.getId()) @@ -25,5 +26,10 @@ public class BalanceServiceImpl implements Service { Account account = client.getAccount(); log.info(String.format("Account Balance: R$ %f", account.getBalance())); + return ServerResponse.builder() + .status(200) + .message("Operation sucessed!") + .body(account) + .build(); } } diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java index e7a8653..83c894a 100644 --- a/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java +++ b/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java @@ -6,6 +6,7 @@ import ufrn.imd.domain.Account; import ufrn.imd.domain.Client; import ufrn.imd.repository.Repository; import ufrn.imd.service.Service; +import ufrn.imd.utils.ServerResponse; import java.rmi.RemoteException; import java.util.Optional; @@ -17,7 +18,7 @@ public class DepositServiceImpl implements Service { private final Repository<Client> repository; - public void deposit(Double value, Optional<Client> clientOptional) throws RemoteException, RuntimeException { + public ServerResponse deposit(Double value, Optional<Client> clientOptional) throws RemoteException, RuntimeException { Client user = clientOptional .orElseThrow(() -> new RuntimeException("Null User!")); Client client = repository.find(user.getId()) @@ -26,6 +27,11 @@ public class DepositServiceImpl implements Service { account.setBalance(account.getBalance() + value); log.info(String.format("Deposit concluded!")); log.info(String.format("Total: %.2f", account.getBalance())); + return ServerResponse.builder() + .status(200) + .message("Operaiton sucessed!") + .body(account) + .build(); } } diff --git a/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java b/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java new file mode 100644 index 0000000..4c1115b --- /dev/null +++ b/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java @@ -0,0 +1,20 @@ +package ufrn.imd.utils; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class ServerResponse implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer status; + private String message; + private Object body; +} diff --git a/banking-server/target/classes/ufrn/imd/BankingServerApp.class b/banking-server/target/classes/ufrn/imd/BankingServerApp.class index e7bc89caf443850f74b54ca56cfedf3e1bb21797..9426e1eeb07564495580cebd9a9fb3d4826bfbdf 100644 GIT binary patch delta 331 zcmXAlOHKko5Qe|$VQ6U70Ffy8ej+e{FGNVt3!n>kvokRyk{B_{#+7Fva{%=S#>GS@ z@c<q`7aqYY7-NCyq^iE||F5d_cRVny_utnypiaXu&W5I7P{Uj_L?~%oLv)zSh8Pu1 z)nM4vY-zR!t;bCA?4sMb?4NY5dN<vE@A}rF)b>-VF!=h^JDOch&4006KdFlTq00I{ zR@xb3f<2*AtL{IjnzjG@q0X(ldu$m7)ez+c*zJ&rR|;^BLZZV$ABV&|Hz3}Ogcz?J zkZ3wjVo{_d=0^6UY?_jj7M^643>Bt@;NZVKQ^JTUPgXRRXy=)sF)M9yBA*kq#h74$ ZMfrw`NS35>SRUDIR^)X}Zr6ns`9C6UF|7aq delta 291 zcmYL?O-=$q5QV?)nW2ZqpI}t{M-&;65d}dK6K<d`+|ACVx4<iy_5vQku;|22Jb-I2 z;MyCwFqXJ*Q&r!~d#}9xERWy5UtWO`Bg;H3LuNR%M6@iLw&BQ9`rRE%N^Ur|Sh|K2 z!|B8L$<@`n=^6TlGxw!(cca^`sq<ux1qSY3->RYe&_i`Ttwncg@<>b~5BmXK1fs$d zdy>mQ=^xEiAT2tc@^!!#xu<dwKTAqemAN`=sItfsJ1mp2LXR~e82q(U6Gj~Sth0fd h`8L_=N<~J6Z4n{~De7{??20)RrNN#=6is2x!4KT>C(Qr= diff --git a/banking-server/target/classes/ufrn/imd/controller/Controller.class b/banking-server/target/classes/ufrn/imd/controller/Controller.class index f430dd8e588b7787d3b1e57839844a0ca969b2ba..9f65cc4b43514c694d42fba6e72344725bc510de 100644 GIT binary patch delta 154 zcmeyvc!Np!)W2Q(7#JAL83foFc-R?u*%|mI3fp<}Gcs_er<Mez78m5_6{j*XSZer` zrWNJsXXd8pr{w1*X6ETT=VYell~`*cBuYy%bBgtYQ;W({i(p!<CkFNEGqEr-urRPP cFfy<KEn@-F>_8C?22NxVAe##)%f!G900_P!^8f$< delta 62 zcmcb?^oLRS)W2Q(7#JAL8Ti;4xY!xE*%^2y3fnRAPMp&#%gDmWz{0@Fz{tP`RKfzJ N*@2h?$Yx^T1OT8C2%`W1 diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class index 6f1fd296957eb44ef8553d3843aed5dde42adc51..05c9dcdc8d1772381efcdb551579129b88ee152d 100644 GIT binary patch delta 244 zcmW-Z+e!jq6otRBgZ%><-B{ga2T&^h$eL0+7<A6E^r8zv8+3vR8)Zg)h;D!AIf4j! zk?K*pZQIRWi?zPJUQ-{bx0$%Johd)LLst*_en(e&eZL#Honp2;cnkyWKezvjNY}h@ z=!I1;>UD$2E52vrKUTtFf*lmQB*~kEdP(my%^|atnCFNMZg99GPlW=v98fi%>RNp< z$r#W!Nqfz@HwAm|p-zK2NtYyFWJ>NaX--(@RDRE>b1B3*O)hA0#j+3!!Z#Ubl}%!! WJyytwj$Do{EVOt<?3af5wo8BSt}iwK delta 212 zcmWlT%Su9F6h@a?>VKfZiI<sLf#QLqo<rmXuchP#XF`JF$&n)EKzoR$KlmI%_$Fdc z5>DMt_WoF`z4`XxZFm<7L?fx*!u@uw&3eAH2CMb_>(gD9(!<|&;LmfD<C;7Qn_C>6 zQ9p@i?kEzWM2s?7-gu%%fsW8F75e(9`s#omA28FVVd{6IJRLD6D(qfplAz2g32K<s t<+{O$S23DQc;SN<4`Rf{pKwJ+I(RSNcqAqJl58A2Sdtaq6Jz~v)Xqg2BR2p5 diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class index 9f55bf8b7d1a386ab7716d59ba2a4476c94238ce..fabf3e6087f27cc0d99ba3f18efed1ab04119893 100644 GIT binary patch delta 1020 zcmaiy*-jKu5Qe|*nQ)rspfDif0w`_+ql}<}h$0}0C<=<WZv!?64vWKppeXKpVzlD} z_y&qg&_u7i;?l&I@F9$K29y{tyy$bP>iqTBUw`_0=v(gO%+F6>fGVE4ETdMj)5WGX zoqX!jsi(nZ7mY5v*<;csm%TKb*L@EAU0OI`l7kMdiZ+)+9L}JfBMu!7M@@Ll5FB?o z!AX}>oK~E1Im<cIdtN!j6rGB$=eJ+_(^i$g*m{-g?jGy%hLXL51H+073Qy7P2kefl zj2<s}*c%>_2hXB9?AO})MI|jG-HCx{Z~ukpNU}FR9Bua!qh8`S&hM~Wn!{|f$nA@b z#!{GQeIgMXZ}cvYc$#8XDS9*)=~eV;E)iGsYX%t93~^bJ&<vB*tYD@8!!FDi(Ts9M zvzB#!TcCWwm}Z=-ifft)uKUjdk!3fCYbLp=xTU$x9mQSEJ?>kS`PqT8OvMAuLmp`! z^W;Ua+0P18zHJK5SpIn0)Sl41($<s@vABgj*liIGx1`?Uv4NgwYiFO=m8>b5Et%z` zzu`3k^}kx-dJEMV6Lgmtwq>sQZ{+{{3#*Ch087pG@}o2uzpz*>vCSGn#s!IkQVUZe zwNlA^(j<ai{&y9gERDP;a|$=KAo!VuCjwJA?bBp^K)*?`MC2^Sk#ni=<gt+DETKRq z77Aw(8)R~WOkFRCyjfnUl}RQOQu8gM5<3LgNI4avWfPm{v?M0y#8i~NBN+Kew#_l4 zCL{vPoinS-ynZCtVwy$&$P0-uWYG)}lp|}F%bN3YD*ni+U<;Kp-pDbQY?SX@6<g=D z)X8mp(K0MEGELqG7QdF<#(0n>U}Ud(V*Q6$|3mCh%{J*M_0!V}qVxSZ;zCV|b2~fa QHZlstMQ~G5zPM`t0{i2$`2YX_ delta 768 zcmZXS$x{<i5Qo2+jG1A00Sy5IA|irDqKS!1K-@r3gSa9hC}_Z-L1YO5!7bv&vo+<# z8|A^XKp|-9+45qQRsK7cJwWNfIduQ}^-TBIJ@04Wmp}jg_ouHwf|oYiXfiowqtjGC zkmCiM;H1qdnr&J*?S`#3ZJcqlXD!azBxyG}Z{wrGH5V){nq0EE%#}i}(rIzcqRW-n z-9p_aH*9+7b-%o6a?4}V_xjZvr&F7EDz!wwZkriQkLNODqmw56Cbv!QIF{b!yw{V- zIuaUz;nZ|0I+e?eM4PkO)NE^dVk)iJNsUQLF~Fe7T}7H9lY5H$WE8_ZFd0!iWK^+( zYNydt<sDOuGvQ>623t`_RxwG!8Suo4a*8RYO&%#`n04ko;ljrZDW33DBjSu05ueF3 z#dGqC7tA>|Mso3;@lEseg*x1{*5veS5$~qSTq>J$GTtTUhdCS5sc@Uiwp(0WG<J#B zsl_9@j@_d7$jMv0qM+TGvqJgL_<HKYA1PX<cmdnL+4#bi9?t?+=L-I1)Q7bqA+a@B zVuKizQY_8N<&RcVNr);AN$aGv-79aDt(T{sutd^`ee4&6h-gb-q8uP5ah!wX*O{^# zO!4|9jPNQYI^8Z!Kmc4{x=!V0S1Hq2Ve5Z*egQ+~ER;!0WYU;`{lkg>#fb~-;SC(4 zS432(j>r|&*49%i-hGrmxJ>y96^q#J4m2r;V7ghqOwk}-r;(%L4LSA67QkLpLAIm+ E0oS~7-2eap diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class index b8477ef07534ba6cd062501ed1b04324a2d61879..1e65ef3171eb3e0c93d93fa451f58c6ac729a57c 100644 GIT binary patch delta 1030 zcmaiz%X1V}6vltIC&`^@ZZT6S2@heIfPrKjGe8JP0tpH75E26kf<{z&W;)4a!ptz; z3E*p#r#$3gE04dxa!Em1B@6xl_im`N+_81x!YUTX>7mLh7nZ%a_w?!SeCNC0J^e@9 zuS@H{Jb&~U*vh>aNd|3Jvonl_Vhk|6h+VuDM!TczvDwSMF!Oe+RE#a+AcvYIlBe%( zSU9eku!(ax%Db8)Hb;5S=6xnxb{1daY(C(a&4+ws^D)O`v<={dlsQe_W+jI;1&w?E z=5H#k3vRXI6@A6(k@=}wIa@qY$j<x4IWIfm))w5_xa(CbWzX#oO4jN6lwl2P4X@E{ zNYQSXW=2yq%u+JUaYC`AT=CCL70c5pf5uJa=ZbFG_u4gOLxrm0BsE21xKi;wzvfg& zU4N!h@Zv3a3H-QbK0&Wxfm52(hBJI(_>|8S$yq1JMUs)v=?>0C(mh`o>U^pB%5au* zn)BiN1<ggnCBD{NHf-UF;VLtRYkZ?v7F4Wd5B`h{s?2q6h|<oHS!cn?&N=1j>{xEr z&HMdbVri0_iWVoIcdKH|ksz)%Jh<NcNU6QSgzh}{KSn9y-oLE#6cMLT_>X>*np=i% z`QEUZ-rz^wtL_B9>nBZj6&=Cx=&ImJG_y7-R}U7gq3e)Hg!dqs2ud!aL)LXcS1h$- zz2sVHl65Q1yh)60ET)f6$+Ss5GCEykWDlc|%aYnR=x#7vj7`=<hILX0gMt`hDZ?z6 z>Dj=T_&F|o2ZisD%<DvhH6<GQq+?bPmLNOW$R=S!YF~Ehk@yus{VjSdO;VvW@n<w8 ztnkQTXF)urMKD593LJY=d^G(K^^g^rpLx~dsN~w~KM)<w{KTsJ4f-6e40D7~@EW4B z?v~^1p+|n9A@-4DL=gL#;($!&XhUpTg!YKkEn<%)Uqaa;N@`30*iw=s_DP3Ob`0w; uT+PZRfo|)UjKy|#H1+{rm%UXoNiicWd%$hJ6ASiB-U!11Q8yx;-+2LJO}7F7 delta 918 zcmX|<*-leY6o$WjTDsfQ9a{*BiXf;c6aht?zyT0v5OF}oiApOJu|;~s**eej(Ztsv zLL4r90PnpqYJ3ClG%-e92aWq;t+oICuj$WzU-Wfa?%l69Z-M1J3sJ%<n^IPL(V7rV ztPRslix;&9S!dJ6dJox9AQ|mpI@p#ck(|coUSg+ayG?|yAUiZWZFaHSrkg#1=G0%F z&0hA|^swLN00+b5H*-jH*ru2+O|K?C_Ux0gX12Te{^{;3>p<>^p`1B}xzreDQ)cKR zp-CE!(r*|brI?z|IA@Ng(*0%5K(efFD3we**>cUG;TS`P<D?bQ)=b99IwSGnj-)e? zNn|4dGEs&jniEkP3?pPUj^QMuhEtqYln%yS*H`L0LybG`i&dXBoa4Oag5e@L%_Z-C zS#!m3m1~;oh8x^8+~W3&DgGYiyTe`gvn~pB+al?`7q{}hsjyBYhcnrfqo{Ioy0W%g z5g17x&x|G&g_Tw9gYnUL-B3K;U)OnLFxlrcY3>^y@Yt|~2G<u{s$6$v@Pq%UqQbot zEOKi@^|=z!A1n$yjUXEJR1?I966xlNt&m%%Fnr=8vFZs_>?Kxg;RL=hfh^{WEx<2! zF?rMzl73TYV1Xdh<XzIJq*}Zed2K8yyO0{Os>1ye>dAQ}=1U^16iO3CtYQYMS;S_R z(Jtr~8rjMk`8!_OGMT1PTGmo0#b(Hii=?@dmzIC6>Lo4|)^Ao|X-cG(Ch`M+)bivI zuD90*0^VL0Dfg#c?tZlM!?AJHIR4knRPGNumYX#;S+`fdPqA>lN#_t0yH=EHmUUYs zYNeMA!e}GGdih%$|4*5ioO0=;45|Mzq-3k*QrDX@g!P?1O|f67D+I7)-Ns4ZM66PR d0)a|Il`8QMdBP*vc%$G(Dr}OOHj6r2{{V1Sjhp}g diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class index 47a33bc2bcf84a94279a49f43193a5456f898b72..ebfe39d9843762fa90cc9a12183aefdcd3f8aded 100644 GIT binary patch delta 1268 zcmai!U3XJO6o#KUNi*r`sV%3W*fvNJ#5B>yR&Bv577Q(D3reh5ze9UkgCQ;XsGwpL z6~D!DM3>7uFTB<wCFs)Sg;(DD3%pZ*gUdZ>Xh2=dbFpX7-m~{S^UkdEtNTS~<(I#{ z`w<xCGn*}>H2Z8UQq4peGiKbF{b3H+Jjg>~CNz`H9ORJA!#rY=hs`u?^C(j`k8#B2 zai&{%f+xc~73OK<K4a3)hDNipm3%hOk+C_-Opnbho@UNwp6AUTS<Nxc3!2>WnG1eZ z4R^E^y~2`LIP4V{7xG1~s2E)Sy(dyGWpl-3`nsI&s;?sUzLPWFVks+&HODo1&4M4W zrrKNPz0%b#id`{(w{_!|zKQZ&A)m}1pH2Q}$0=)KvY$~!<XC1YQ(KeVQz&FkrMwem z&tV6*I^1T=c5YF0rAwJYDVv|~O?it8#cZk9&}V17t(rxL6BPVJU|?s_p+s4;<nSUV z9pWS$PVtiFWrtTdt$Ed<!fTq>9nSEE=1qsUIP0GaB(}ZHX@_@sSM#13-`9NL@F5>* z&N+O{vZCMr)9P>4oOkf~#Nh&;o(~@I|FDMq@!;nd_c#5f#@lP>$z}5M$<#vmXwFk? zjHUV}{uv%oxQ(M9stKFPDXfJ#MJ(q3)YP@XD3`pNl7g83vx=n^dUj0&#dz%Bjn^XA z*Z$vi#B`|=m6xjMB}lgsT^`h4a}5%UiEq(|YXq&u<!097w@Za+LsHh<A=xhpi3bPc zmr?QWv8FE*xJ0nwHmwkH^(tXAHV1#eo(`;3Xh~ObBpOd#qIHEER%xr!eq@D~c$E#` z)F1}L?x0z0RJPqjo4|InnVSWCSnR!QV@&WT<p6`Ss&fs6JGo0{0#!SL;%@Q71Q?R4 zor1rM$~|@dLY;pw{w=}86<iBp2)P|~;K&-V$zEZjqDp5Syn*Nn9HLl@Y}X;04ai$= z;0&(g3^F3fHJnOK#vz&9$L>1Hm=GE%UD>QP!lo)+i7MTz^n5K*OWGo^N^J6)_U?Ln zx6!`dJ<R=#N`<+o?X^m9+~_KsN2=U(k&roqx~6eN5cWvSlGpHnjOMPlipb`7W4x${ GZv72$%=51R delta 815 zcmYk4*-{fh6o$XaOqgLZiUte`ZedeM5Cl{Za6?d8T@WxTDqzI8Ku99u8uiXgowBIH z3(E)aLeLPT^Z~r`#z*iqEYF0LIv3~seY&U5*MIk0-%oG)`|mH`fEHeuY^7bN!^A~< zA$|@y;jqCGlcOBd=`=Ao?u0IbZk-c_oaB^A5511+GwEl*WRTM)XE^KO976`@4Tc># z;!Ka~Tri1n(b@8n&Sh0+?A78M`-Ae{ZctiE%<lQgXgn30nNI3l(YdN~&7N=#+ltzw zR?}h+sDZk2DlB#qR0s^E#uKU7^i;4b8lOqVQo&?2F&CSRmg|gLOfYHx&{|E4YOY&E z<^Kh>vH6C@6gPEZ7Pq)<afiD)(-t$tb!IIRNb{7%J?3=oTg>y|wH7uW61RB7W4ljl z_B^q8O4{NX&+V65k8Qda)Uld=dr+%a+U+(aWY&%-xRVaw@;mo0#ZDTtX}@@^uuU8; za}FTJcOs{eTBT?gRj8t?*(G|nR2C@^1-+pal+YTk$O`Ibv?bi$f(-f^MkEwop)iB# z)I8c(tcbeAhM_DQWx*0f88&6vJSw$NI*a#Xu2GG|3b{$-iZy%`5ujAyDg~~U9fB2< zdo8C{R`}Kt2oaW%z);5?!K@c;2yg>?X_Rpj&3WuZ9=j>@2`#)zu?y+%_NGg6NN(?z zbxvn`6`w+u(me1#Jg<NuUU<ZfVsWF9n*VT`{^B&TkNtTZO>%=k9gqjD<Q%M$?0lBj opP?g=rED3u(?pT&5Kd>hSWeL@*~LNHBs<#};sTgC<!3vtKbzHi&j0`b diff --git a/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class b/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class index b4fa9209a9ee6e21b9c3435e2894b0809385ba08..57779ee31278c81ffb0caab53459b83b0f814be4 100644 GIT binary patch literal 3580 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 WabE@~7nu%HcMtYrU+^@Heg6Q;-|~0> delta 935 zcmZuvNmCP15dPlGWG1{kB*rixm=F*!EV3wQA}VTd0TFORaSsrY5ED#D+zq&UwB8BJ zgI>L;MJX;-7H7*Ue~Ml_Sf!RdBqbcoVS4-e>+bL6SNW`&{ru;{CjguA$VFxc$4=}r z5GsHhT^uTQJFo|PU0_yCMYmPxv17l1UXBCk<LJi#$3Yz8aNw|kBX%6+aAMGoV+M|M z4B>=TKWX3;gBnYWF_iU2!<le%dTRXfv!_alUry_8rEYL8$=aB9nxR#`P+HjF+)qVg z<!78YTcqQh6YT<F3>z2`7)6A^lnaXK6DUKuz<G=rxF9f&D4{0=Vz?+!iq*1DYx2eg z5|}h_Ng#=ofhmDBG6Jm#&^mHPEh}ay?2c!`vGGw~Iu%J)TE&diZ9&Infh)Kwa1GaG zk1bGf12-Am{<_>1v2c8>xqmns8JX(fq|Pn*-1b9tBP(b1-|~IIq;pze2KNLuSr@dS zT?To(=K+J>n@CKgCmBR{JRV7gV&POOl4AJcm*2QoKH)F5hYU6HJNL+_qcP|vg&9hq z(8Y8Zy_d_nopNi)SKxt-d@m~Kp?s8CfKC~pOMZ2PvaiWgQAuAf4Eh#R)kGojRS;V( z@ih`#h`6e#+Lr6YT2xa+9H=1-X+(dOb@0=)TH>iAPo=(6)T03!d4M2P4!@qfCh|41 z&Ds2tEfln30}=SBG(c7%%j@S+RNwFh+R~c(BGHP)b<7;<-#R>h_|iZt<Drh66dRq~ zQkr6GN);`cB@6x$&LP*zdAMFt#1_@ajVYxDdY@$tOZZj)!JDv?5`jFvnymE`F85m$ vzk@l40_%`v69OciiXbHwY{6Z!oXWRxA9qOl4vMWCw-RO>wxcue?L+5Zdue}! diff --git a/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class b/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class index cf644482cf2f5b0e07d532cd3dfeb33d543e52c6..7663a247d03d86603195f6987564d6775fa06d0b 100644 GIT binary patch delta 1710 zcmb7_`EyfM6vsa=N%PXz+l2sWn=Wawg;11e5rI~#wjvg*r3(s*OWMBHv}w|2DK2Ob za90$c8}7R(E@15<%rO4wIE+6y<Ino5e}F&ui{p7sD6Qi}eVMuE-t)fad%pLacW+Ks z9I4Ix@aLIxz!uJW#oS_WE8RM~3JK6-;H0;RKKi|A_B$uH8QjhugT35g4|m$jeKz<m z4|nU_V{k8Fg8>FT3>laV8;o$DL4;8cW44Xj!?-=f4C+gX>r8l<G^irsA*quxNHb-V z?AN*fSmuPb!wPD_Kv#M=5er4eheGL8B$^EMnTaVg(Q76r;<2RJI^Co7Xs!n|!h&9F zop)6KYs7C3msa&)84s1ZIZ#Hs;$a@q$tVu;sD{t_(cx=RG_qE4h{HNZ6p!(^pr24Y z$x}K{E1uz5o#zxsd0z1X#}qGODK4SG+T&^pzodAXS9D%gyvA{jqW*X)9Brv<+}J#< z^Sa^<-qv}?4t-bWJ;nQcps})h!c2rCsd%g|nI1HgNpq-P@gW~6KIRj}2|iV{v0cM& zO*;M7cP_89jpNqOu9l+D6esyy@daO6{(`N6uQ;W#D!9IDG&~g!MZ>X?Q1`&7IhblS zq;aRM$%5aV0luD&xW}|iP2M7F=mY6UbjVC-tX^LK_6vU18H<^Tj%Zj!CpET6;=G&< zOL;O$Ge^{_vEriO&REJEv9tPuol7^8^9y*>e^0WQL&Kd+g;Qyfxih#>o=mnr7ij;F z^hH(?qmN6=!Xu_eXO=fh+m}j2Vk512STpvgysRQiX<Y;HA^E_Uapqc?hcho_!9qVZ z>a%UC%5%W1pY%l8wBj4)6dm?yxt?~b-?O>oTPb8$JU*75&^RBoe(_XT=R7m6Ga8N7 zuby)2XkqiV0Htz?tigfbJ{xk`c<qBFzI8Hp5Tron>uHi(W&>!Axa9|jtv?DQnR!;O z;QM)2&9d6-o29(6V3vwmDo+W-$)z&3P$HvGg32kTLO$(Eq4u*;E|w0e>7_>QoLb`Y zW<PZtpq`8fIwZc!B(g1=PVgaFNn$SN3Xx>bGR<rfjm1oHC7UJTI`(mu%v=KBEw|@Z zQNK-~Di_c!avZdZ$1V11k&xZxHS)fVYsDvfWS3ZnSfgnUf76B;T&HD~-Hv;KsdPb_ zFO!8WYBO@ByO`4U1SKS!=DIS&ZjP+&G;4&?evGqJ?e$jAQDaw4Tc}z#O{L(aqyLDn z6@2FJ0p)nOf$h0~2C?>|yn$Kj=Bb~i*xt#~6eS|!M)5h=!CPXzGK<I`#G4c{!#vVU VZW6yw{GEc`$<1`-X1g79{RK}KhYA1y delta 986 zcmZva$xjnu7>A$fw4E~ZA*5<4uAqVlY84k0ck70tf+Fq<(4v*nA_aG?3yS+T?#4uK zCSEj%7)`uu{9inocrv~p81=wR=3Rg9K0Om&hqGUQef$hm@hm88jm=utS=8hZX1$Hc z28UWU1~IhHWV1~j^)_4Bs!4-Zw`p)=fbAALY<9BCW;c5R?6t{bpT+(F2W&>s6rkCn z#U@5vLs~5k-hJ`PnC8|PWkzG)9i!gx9x{lEUg|pLII*oUy+$^X&*3~jZTT!xBx$!u zDbjQpgt}WhQ;|e_ED}q%HziV$XfhE`btxt=QE`M$i;SX+ZV5lCIL2{{6N;0ZvN)|c z!&ya^bBgm^P>f@|L2y;PBb`Zf6}6;OEy?a!Jm!A!hKesLdbnh9S<%ZC1E(R~)s(C* zDw$c?s$_jj-6g(=S;ZAM?W=aKDz0%|af6%gJKqBH7PsB+zCtt19oO;y5PrAMwAu`} z*Y3!_r*L_sSggmZW|3<-^Tt0h@Ykl(ZQU}Zs!65dozY}dCKJyXd@FNbIAOQh>GwW0 zC~;pp1#YFPTo{&h8;r%n7(I%dGpP3<wjz-|6yp<l5|ibQQ^fKUzr1kReXbJOw<4L8 z2rVT?=xFhU$fZCsgqcbqGbL|S@^6vs3CUk7sHH<0#9t<w<YF4-QbkJ@OqZ&;>}7_; znu3WE5y>mxVrDU0`l%G8()jFPz#IvfD<;42dGgB?iR@v%0IFCZl5V?BxJS5MKETNG zihjKRTK5l@9x>QjXbAPUHT%yp{+2{riX}o<$$D6rZ|n7oL6?~%9qY&b#HgLY(F26u zh$j0MI#ebsc)8iI_<~{ZAp$IsjSc0WB3wTz7=BOThg!z;k*g>9zeKJyu}o|pmh(`! bE#CV)=7F4Jh3I<5m4b<~iq(IlO|1S6=4p+L -- GitLab