-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMovieApp_model
262 lines (204 loc) · 7.3 KB
/
MovieApp_model
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
Application Movies {
basePackage=com.jurajlazovy
Module web {
Resource FrontResource {
String front return="front/overview";
}
Resource DirectorResource {
scaffold
}
Resource ActorResource {
scaffold
}
Resource MovieResource {
scaffold
}
Resource MovieRevenueResource {
scaffold
}
Resource MovieActorResource {
scaffold
}
}
Module movies {
Entity Director {
scaffold
String firstName;
String lastName;
Date dateOfBirth;
String nationality;
Repository DirectorRepository {
findByCondition;
}
}
Entity Actor {
scaffold
String firstName;
String lastName;
-@Gender gender nullable;
Date dateOfBirth;
Repository ActorRepository {
findByCondition;
}
}
enum Gender {
M, F;
}
Entity Movie {
scaffold
String movieName;
int movieLength;
String movieLang;
Date releaseDate;
String ageCertificate;
//- @Director director;
Repository MovieRepository {
findByCondition;
}
}
Entity MovieRevenue {
scaffold
//- @Movie movie;
int domesticTakings;
int internationalTakings;
Repository MovieRevenueRepository {
findByCondition;
}
}
Entity MovieActor {
scaffold
//- @Movie movie;
//- @Actor actor;
Repository MovieActorRepository {
findByCondition;
}
}
Service DirectorService {
List<@Director> findDirectorsByCondition();
findByCondition => DirectorRepository.findByCondition;
}
Service ActorService {
List<@Actor> findActorsByCondition();
findByCondition => ActorRepository.findByCondition;
}
Service MovieService {
List<@Movie> findMoviesByCondition();
findByCondition => MovieRepository.findByCondition;
}
Service MovieRevenueService {
List<@MovieRevenue> findMovieRevenuesByCondition();
findByCondition => MovieRevenueRepository.findByCondition;
}
Service MovieActorService {
List<@MovieActor> findMoviesActorsByCondition();
findByCondition => MovieActorRepository.findByCondition;
}
}
}
Application BusApp {
basePackage=com.jurajlazovy
Module web {
Resource FrontResource {
String front return="front/overview";
}
Resource DriverResource {
scaffold
}
Resource BusResource {
scaffold
}
Resource SeatResource {
scaffold
}
Resource BusConnectionResource {
scaffold
}
}
Module bus {
Entity Driver {
scaffold
String name
int age
-List<@BusConnection> connections <-> driver inverse;
Repository DriverRepository {
findByCondition;
}
}
Entity Bus {
scaffold
int busNum; // verzia bez key
String busSpz;
int numberOfSeats;
Repository BusRepository {
findByCondition;
}
}
Entity Seat {
scaffold
int seatNo;
-@SeatStatus seatStatus nullable;
Timestamp reservationDate;
String reservationKey;
-@BusConnection direction <-> seats cascade="persist,merge";
Repository SeatRepository {
findByCondition;
}
}
enum SeatStatus {
Free, Reserved, Paid;
}
Entity BusConnection {
scaffold
String destination;
int minSeats;
int startHours;
int startMinutes;
int durationMinutes;
- @Driver driver <-> connections cascade="persist,merge";
- @Bus bus;
- List<@Seat> seats <-> direction inverse;
Repository BusConnectionRepository {
findByCondition;
}
}
Service BusConnectionService {
// Najdi volny autobus a najdi volneho vodica tak ze
// - Autobus nemoze byt na inej linke
// - Vodic moze robit max 12 hodin potom musi 12 hodin oddychovat
// - Vodic musi mat oddych od predchadzajuceho spoja minimalne 10 minut
// - Treba vyrobit aj Seats v pocte Bus.numberOfSeats
@BusConnection makeConnection(String destination, int minSeats, int startHours,
int startMinutes, int durationMinutes) throws NoneFreeBusOrDriver;
// Prescanuje vsetky sedadla vsetkych autobusov a ak je rezervacia starsia ako 10 minut tak ju zrusi
freeReservedSeats();
// Najdi BusConnections podla zadanych kriterii (alternativa SELECT)
List<@BusConnection> findBusConnectionsByCondition();
List<@BusConnection> findBusConnectionsJoinByCondition(); // SELECT join prikaz
findByCondition => BusConnectionRepository.findByCondition; // toto tam musi byt kvoli tejto service
}
Service SeatService {
// Rezervuj sedadlo, ak je obsadene (Paid) alebo bolo rezervovane pred menej ako 10 minutami vyhod exception SeatAlreadyReserved
// To znamena ak je sice rezervovane ale dlhsie ako 10 minut vygeneruj novy kluc a urob novu rezervaciu
// Ak je mozne rezervovat sedadlo vygeneruj 8 miestne cislo ktore nemoze zacinat 0 a vrat ako navratovu hodnotu - key
String reserveSeat(@BusConnection direction, int seatNum) throws SeatAlreadyReserved;
// Potvrd rezervaciu po zaplateni
// Ak je sedadlo Free tak rezervuj rovno bez kontroly kluca
// Ak je rezervovane skontroluj kluc, ak sedi kluc daj do stavu Paid inac vrat chybu WrongKey
String confirmSeat(@BusConnection direction, int seatNum, String reservationKey) throws WrongKey;
// Najdi Seats podla zadanych kriterii (alternativa SELECT)
List<@Seat> findSeatsByCondition(int seatNo, String reservationKey);
List<@Seat> findSeatsByConditionTwo(); // Alternativny select
List<@Seat> findSeatsJoinByCondition(int seatNo); // SELECT join prikaz
findByCondition => SeatRepository.findByCondition; // toto tam musi byt kvoli tejto service
}
Service DriverService {
List<@Driver> findDriversByCondition(); // Najdi driverov podla zadanych kriterii (alternativa SELECT)
List<@Driver> findDriversByConditionTwo(int age); // Alternativny select
findByCondition => DriverRepository.findByCondition; // toto tam musi byt kvoli tejto service
}
Service BusService {
List<@Bus> findBusesByCondition(int numberOfSeats); // Najdi Buses podla zadanych kriterii (alternativa SELECT)
findByCondition => BusRepository.findByCondition; // toto tam musi byt kvoli tejto service
}
}
}