-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclass.iuml
350 lines (296 loc) · 7.41 KB
/
class.iuml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
@startuml ClassOverview
skinparam class {
BackgroundColor<<Repository>> SkyBlue
BorderColor<<Repository>> Navy
BackgroundColor<<Access>> Snow
BorderColor<<Access>> Plum
BackgroundColor<<Integration>> SandyBrown
BorderColor<<Integration>> Tomato
BackgroundColor<<Domain>> Gold
BorderColor<<Domain>> Red
}
interface IUsersRepo <<Access>> {
+ IUser[] getAll()
+ IUser getById(id)
+ bool add(User)
}
interface IUser <<Access>> {
+ void logIn(String, String)
+ void logOut()
+ int getId()
+ Role getRole()
}
interface ICustomersRepo <<Domain>> {
+ ICustomer[] getAll()
+ ICustomer getById(id)
+ bool add(Customer)
}
interface ICustomer <<Domain>> {
+ IAccount[] getAccounts()
+ IAccount getPrimaryAccount()
+ String getPhoneNumber()
}
interface IAccountsRepo <<Domain>> {
+ IAccount[] getAll()
+ bool add(Account)
}
interface IAccount <<Domain>> {
+ ITransaction[] getTransactions()
+ ICustomer getCustomer()
+ String getIBAN()
+ Date getOpenDate()
+ BigDecimal getBalance()
+ AccountType getAccountType()
+ changeBalance(BigDecimal)
}
interface ITransactionsRepo <<Domain>> {
+ ITransaction[] getAll()
+ ITransaction[] getByAccount(IAccount)
+ ITransaction getById(int)
+ bool add(ITransaction)
+ bool update(ITransaction)
}
interface ITransaction <<Domain>> {
+ int getId()
+ int getDebitAccountID()
+ int getCreditAccountID()
+ BigDecimal getAmount()
+ TransactionStatus getStatus()
+ LocalDateTime getDateTime()
+ bool setDateTime()
+ bool setDebitAccountID(int)
+ bool setCreditAccountID(int)
+ bool setAmount(BigDecimal)
}
interface ITransactionLog <<Domain>> {
+ int getLogId()
+ bool setLogId()
}
interface ITransfer <<Domain>> {
+ ITransaction getTransaction()
+ String getReceiverFullName()
+ String getAccountIBAN()
+ String getDescription()
+ BigDecimal getAmount()
+ void setTransaction()
+ void setReceiver(String)
+ void setIBAN(String)
+ void setDescription(String)
+ void setAmount(BigDecimal)
}
interface IAccessContext <<Access>> {
+ IUser getCurrentUser()
}
interface IRepositoryContext <<Repository>> {
+ void setSomeDB()
}
interface ITransactionsLogRepo <<Domain>> {
+ bool add(ITransaction)
}
enum Role <<Access>> {
USER
ADMIN
}
enum ServiceName <<Access>> {
LOGIN
LOGOUT
ADMIN_LOGIN
ADMIN_LOGOUT
}
enum AccountType <<Domain>> {
PRIMARY
SECONDARY
}
enum TransactionStatus <<Domain>> {
OK
CORECTION
STORNED
STORNO
}
enum Direction <<Domain>> {
CREDIT
DEBIT
}
class Customer <<Domain>> {
- int id
- int userId
- String email
- String password
- String fullName
- Role role
- String phoneNumber
- IAccount[] accounts
- ICustomersRepo customersRepo
- IUsersRepo usersRepo
}
class CustomersRepo <<Repository>> {
- ICustomer[] customers
}
class UsersRepo <<Repository>> {
- IUser[] user
}
class Administrator <<Domain>> {
- int id
- String email
- String password
- Role role
- IUsersRepo usersRepo
}
class Service <<Access>> {
- ServiceName serviceName
- String serviceAttribute
+ void Service(ServiceName serviceName)
+ Service addAtribute(String serviceAttribute)
}
class PermissionCheck <<Access>> {
+ static bool canAccess(Service service)
}
class AccountsRepo <<Repository>> {
- IAccount[] accounts
}
class Account <<Domain>> {
- int id
- String IBAN
- AccountType accountType
- Date openDate
- BigDecimal balance
- ICustomer customer
- ITransaction[] transactions
- IAccountsRepo accountsRepo
}
class TransactionsRepo <<Repository>> {
- ITransaction[] transactions
}
class TransactionsLogRepo <<Repository>> {
}
class Transaction <<Domain>> {
# int id
# IUser sessionUser
# TransactionStatus status
# String description
# LocalDateTime dateTime
# TransactionRecord[] transactionRecords
# ITransactionsRepo transactionsRepo
}
class TransactionLog <<Domain>> {
- int logId
}
class TransactionRecord <<Domain>> {
- int id
- Account account
- Direction direction
- BigDecimal amount
- ITransaction transaction
}
class Transfer <<Domain>> {
- ITransaction transaction
- String description
- String receiversFullName
- String accountIBAN
- BigDecimal amount
}
class UserController <<Integration>> {
...
}
class CustomerController <<Integration>> {
...
}
class AccountController <<Integration>> {
...
}
class TransferController <<Integration>> {
...
}
class TransactionController <<Integration>> {
...
}
class Context <<Integration>> {
- static IUser currentUser
}
class TransferManager <<Domain>> {
+ IAccount account
+ ITransfer[] getTransfers()
+ void makeTransfer(ITransfer)
+ void requestForTransfer(ITransfer)
}
class TransactionManager <<Domain>> {
+ ITransaction[] getAllTransactions()
+ ITransaction[] getAccountTransactions(int)
+ ITransaction getTransaction(int)
+ void createTransaction(ITransaction)
+ void editTransaction(ITransaction)
+ void stornoTransaction(ITransaction)
}
class AccountManager <<Domain>> {
+ IAccount[] getAllAccounts()
+ IAccount[] getCustomerAccounts(int)
+ IAccount getAccount(int)
+ void createAccount(IAccount)
+ void deleteAccount(IAccount)
}
class CustomerManager <<Domain>> {
+ ICustomer[] getAllCustomers()
+ ICustomer getCustomer(int)
+ ICustomer getCustomerByUserId(int)
+ IUser getUser(int)
+ void createCustomer(ICustomer)
}
class UserManager <<Domain>> {
+ void login(String, String)
+ void logout(int)
+ IUser getUser(int)
}
IUser --> Role
IUsersRepo "n" o--> "1" IUser
ICustomer "n" o--> "1" IAccount
ICustomersRepo "n" o--> "1" ICustomer
IAccountsRepo "n" o--> "1" IAccount
ITransactionsRepo "n" o--> "1" ITransaction
ITransactionsRepo -> IAccount
ITransaction -left-> TransactionStatus
ITransfer -> ITransaction
ITransaction <|- ITransactionLog
ITransactionsLogRepo "n" o--> "1" ITransactionLog
PermissionCheck -> ServiceName
Role <- PermissionCheck
IAccessContext <-- PermissionCheck
PermissionCheck -> Service
Service -> ServiceName
IUser <- IAccessContext
IUser <|.. Customer
ICustomer <|.. Customer
IUser <|.. Administrator
IUsersRepo <|. UsersRepo
ICustomersRepo <|. CustomersRepo
IAccount <|.. Account
AccountsRepo .|> IAccountsRepo
ITransaction <|.. Transaction
TransactionsRepo .|>ITransactionsRepo
ITransactionsLogRepo <|. TransactionsLogRepo
ITransfer <|.. Transfer
Transaction o-- TransactionRecord
TransactionRecord -> Direction
Account -> AccountType
ITransactionLog <|.. TransactionLog
Transaction <|- TransactionLog
Context ----> IAccessContext
Context ---> IRepositoryContext
TransferController --> TransferManager
TransferManager ----> ITransactionsRepo
TransferManager ---> IAccountsRepo
TransferManager --> ICustomersRepo
TransferManager -----> ITransfer
TransactionController --> TransactionManager
TransactionManager ----> ITransactionsRepo
TransactionManager ----> ITransactionsLogRepo
TransactionManager ---> IAccountsRepo
TransactionManager --> ICustomersRepo
AccountController --> AccountManager
AccountManager ---> IAccountsRepo
AccountManager --> ICustomersRepo
CustomerController --> CustomerManager
CustomerManager --> ICustomersRepo
CustomerManager --> IUsersRepo
UserController --> UserManager
UserManager --> IUsersRepo
@enduml