-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDataInitializer.java
More file actions
333 lines (294 loc) · 14.1 KB
/
Copy pathDataInitializer.java
File metadata and controls
333 lines (294 loc) · 14.1 KB
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
package ch.fhnw.timerecordingbackend.util;
import ch.fhnw.timerecordingbackend.model.*;
import ch.fhnw.timerecordingbackend.model.enums.AbsenceStatus;
import ch.fhnw.timerecordingbackend.model.enums.AbsenceType;
import ch.fhnw.timerecordingbackend.model.enums.UserStatus;
import ch.fhnw.timerecordingbackend.repository.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Set;
/**
* DataInitializer für Initialdaten beim Start der Anwendung
* Erstellt Standard-Rollen, Admin-Benutzer und Beispieldaten
* @author PD
* @version 1.1
*/
@Component
public class DataInitializer implements CommandLineRunner {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private ProjectRepository projectRepository;
@Autowired
private AbsenceRepository absenceRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public void run(String... args) throws Exception {
if (userRepository.count() == 0) {
System.out.println("🚀 DataInitializer gestartet - Erstelle Initialdaten...");
createRoles();
createUsers();
createProjects();
initializeExampleAbsences();
System.out.println("✅ Initialdaten erfolgreich erstellt!");
}
}
/**
* Erstellt Standard-Rollen
*/
private void createRoles() {
System.out.println("📋 Erstelle Standard-Rollen...");
// Admin-Rolle
if (!roleRepository.existsByName("ADMIN")) {
Role adminRole = new Role();
adminRole.setName("ADMIN");
adminRole.setDescription("System Administrator");
roleRepository.save(adminRole);
System.out.println(" ✓ Rolle erstellt: ADMIN");
}
// Manager-Rolle
if (!roleRepository.existsByName("MANAGER")) {
Role managerRole = new Role();
managerRole.setName("MANAGER");
managerRole.setDescription("Project Manager");
roleRepository.save(managerRole);
System.out.println(" ✓ Rolle erstellt: MANAGER");
}
// Employee-Rolle
if (!roleRepository.existsByName("EMPLOYEE")) {
Role employeeRole = new Role();
employeeRole.setName("EMPLOYEE");
employeeRole.setDescription("Employee");
roleRepository.save(employeeRole);
System.out.println(" ✓ Rolle erstellt: EMPLOYEE");
}
}
/**
* Erstellt Standard-Benutzer
*/
private void createUsers() {
System.out.println("👤 Erstelle Admin-Benutzer...");
Role adminRole = roleRepository.findByName("ADMIN")
.orElseThrow(() -> new RuntimeException("Admin role not found"));
Role managerRole = roleRepository.findByName("MANAGER")
.orElseThrow(() -> new RuntimeException("Manager role not found"));
Role employeeRole = roleRepository.findByName("EMPLOYEE")
.orElseThrow(() -> new RuntimeException("Employee role not found"));
User adminUser = null;
if (!userRepository.existsByEmail("admin@timerecording.ch")) {
adminUser = new User();
adminUser.setFirstName("System");
adminUser.setLastName("Administrator");
adminUser.setEmail("admin@timerecording.ch");
adminUser.setPassword(passwordEncoder.encode("admin123"));
adminUser.setActive(true);
adminUser.setStatus(UserStatus.ACTIVE);
adminUser.setPlannedHoursPerDay(8.0);
adminUser.setRoles(Set.of(adminRole));
// Admin hat keinen direkten Manager (manager Feld bleibt null)
userRepository.save(adminUser);
System.out.println(" ✓ Admin-Benutzer erstellt: admin@timerecording.ch (Passwort: admin123)");
} else {
adminUser = userRepository.findByEmail("admin@timerecording.ch").orElse(null);
}
System.out.println("👥 Erstelle Beispiel-Benutzer...");
User managerMax = null;
if (!userRepository.existsByEmail("manager@timerecording.ch")) {
managerMax = new User();
managerMax.setFirstName("Max");
managerMax.setLastName("Manager");
managerMax.setEmail("manager@timerecording.ch");
managerMax.setPassword(passwordEncoder.encode("manager123"));
managerMax.setActive(true);
managerMax.setStatus(UserStatus.ACTIVE);
managerMax.setPlannedHoursPerDay(8.0);
managerMax.setRoles(Set.of(managerRole));
if (adminUser != null) { // Annahme: Admin ist der Manager von Max Manager
managerMax.setManager(adminUser);
}
userRepository.save(managerMax);
System.out.println(" ✓ Manager erstellt: manager@timerecording.ch (Passwort: manager123)");
} else {
managerMax = userRepository.findByEmail("manager@timerecording.ch").orElse(null);
}
if (!userRepository.existsByEmail("anna.schmidt@timerecording.ch")) {
User employeeAnna = new User();
employeeAnna.setFirstName("Anna");
employeeAnna.setLastName("Schmidt");
employeeAnna.setEmail("anna.schmidt@timerecording.ch");
employeeAnna.setPassword(passwordEncoder.encode("employee123"));
employeeAnna.setActive(true);
employeeAnna.setStatus(UserStatus.ACTIVE);
employeeAnna.setPlannedHoursPerDay(8.0);
employeeAnna.setRoles(Set.of(employeeRole));
if (managerMax != null) { // Anna Schmidt berichtet an Max Manager
employeeAnna.setManager(managerMax);
}
userRepository.save(employeeAnna);
System.out.println(" ✓ Mitarbeiter erstellt: anna.schmidt@timerecording.ch (Passwort: employee123, Manager: Max Manager)");
}
createMoreUsers(managerMax); // managerMax an createMoreUsers übergeben
}
/**
* Erstellt Beispiel-Mitarbeiter
*/
private void createMoreUsers(User directManager) { // Parameter für direkten Manager
Role employeeRole = roleRepository.findByName("EMPLOYEE")
.orElseThrow(() -> new RuntimeException("Employee role not found"));
if (!userRepository.existsByEmail("peter.mueller@timerecording.ch")) {
User peter = new User();
peter.setFirstName("Peter");
peter.setLastName("Müller");
peter.setEmail("peter.mueller@timerecording.ch");
peter.setPassword(passwordEncoder.encode("employee123"));
peter.setActive(true);
peter.setStatus(UserStatus.ACTIVE);
peter.setPlannedHoursPerDay(8.0);
peter.setRoles(Set.of(employeeRole));
if (directManager != null) { peter.setManager(directManager); }
userRepository.save(peter);
System.out.println(" ✓ Mitarbeiter erstellt: peter.mueller@timerecording.ch (Manager: " + (directManager != null ? directManager.getFullName() : "N/A") + ")");
}
// Laura Weber
if (!userRepository.existsByEmail("laura.weber@timerecording.ch")) {
User laura = new User();
laura.setFirstName("Laura");
laura.setLastName("Weber");
laura.setEmail("laura.weber@timerecording.ch");
laura.setPassword(passwordEncoder.encode("employee123"));
laura.setActive(true);
laura.setStatus(UserStatus.ACTIVE);
laura.setPlannedHoursPerDay(8.0);
laura.setRoles(Set.of(employeeRole));
if (directManager != null) { laura.setManager(directManager); }
userRepository.save(laura);
System.out.println(" ✓ Mitarbeiter erstellt: laura.weber@timerecording.ch (Passwort: employee123)");
}
// Thomas Fischer
if (!userRepository.existsByEmail("thomas.fischer@timerecording.ch")) {
User thomas = new User();
thomas.setFirstName("Thomas");
thomas.setLastName("Fischer");
thomas.setEmail("thomas.fischer@timerecording.ch");
thomas.setPassword(passwordEncoder.encode("employee123"));
thomas.setActive(true);
thomas.setStatus(UserStatus.ACTIVE);
thomas.setPlannedHoursPerDay(8.0);
thomas.setRoles(Set.of(employeeRole));
if (directManager != null) { thomas.setManager(directManager); }
userRepository.save(thomas);
System.out.println(" ✓ Mitarbeiter erstellt: thomas.fischer@timerecording.ch (Passwort: employee123)");
}
}
/**
* Erstellt Beispiel-Projekte
*/
private void createProjects() {
System.out.println("📁 Erstelle Beispiel-Projekte...");
User manager = userRepository.findByEmail("manager@timerecording.ch")
.orElseThrow(() -> new RuntimeException("Manager not found"));
// Website Redesign
if (!projectRepository.existsByName("Website Redesign")) {
Project project1 = new Project();
project1.setName("Website Redesign");
project1.setDescription("Komplette Überarbeitung der Unternehmenswebsite");
project1.setActive(true);
project1.setManager(manager);
projectRepository.save(project1);
System.out.println(" ✓ Projekt erstellt: Website Redesign");
}
// Mobile App Development
if (!projectRepository.existsByName("Mobile App Development")) {
Project project2 = new Project();
project2.setName("Mobile App Development");
project2.setDescription("Entwicklung einer mobilen App für iOS und Android");
project2.setActive(true);
project2.setManager(manager);
projectRepository.save(project2);
System.out.println(" ✓ Projekt erstellt: Mobile App Development");
}
// Database Migration
if (!projectRepository.existsByName("Database Migration")) {
Project project3 = new Project();
project3.setName("Database Migration");
project3.setDescription("Migration der Legacy-Datenbank zu einer modernen Lösung");
project3.setActive(true);
project3.setManager(manager);
projectRepository.save(project3);
System.out.println(" ✓ Projekt erstellt: Database Migration");
}
}
/**
* Erstellt Beispiel-Abwesenheiten
*/
private void initializeExampleAbsences() {
System.out.println("🏖️ Erstelle Beispiel-Abwesenheiten...");
User laura = userRepository.findByEmail("laura.weber@timerecording.ch").orElse(null);
User thomas = userRepository.findByEmail("thomas.fischer@timerecording.ch").orElse(null);
User admin = userRepository.findByEmail("admin@timerecording.ch").orElse(null);
if (laura != null) {
// Genehmigter Urlaub für Laura (nächste Woche)
Absence vacation = new Absence();
vacation.setUser(laura);
vacation.setStartDate(LocalDate.now().plusDays(7));
vacation.setEndDate(LocalDate.now().plusDays(11));
vacation.setType(AbsenceType.VACATION);
vacation.setStatus(AbsenceStatus.APPROVED);
vacation.setApprover(admin);
vacation.setCreatedAt(LocalDateTime.now());
vacation.setUpdatedAt(LocalDateTime.now());
absenceRepository.save(vacation);
System.out.println(" ✓ Urlaub für Laura Weber erstellt (genehmigt)");
}
if (thomas != null) {
// Ausstehende Fortbildung für Thomas
Absence training = new Absence();
training.setUser(thomas);
training.setStartDate(LocalDate.now().plusDays(14));
training.setEndDate(LocalDate.now().plusDays(16));
training.setType(AbsenceType.TRAINING);
training.setStatus(AbsenceStatus.PENDING);
training.setCreatedAt(LocalDateTime.now());
training.setUpdatedAt(LocalDateTime.now());
absenceRepository.save(training);
System.out.println(" ✓ Fortbildung für Thomas Fischer erstellt (ausstehend)");
}
// Zusätzliche Beispiel-Abwesenheiten für mehr Testdaten
User anna = userRepository.findByEmail("anna.schmidt@timerecording.ch").orElse(null);
if (anna != null) {
// Home Office für Anna (diese Woche)
Absence homeOffice = new Absence();
homeOffice.setUser(anna);
homeOffice.setStartDate(LocalDate.now().plusDays(2));
homeOffice.setEndDate(LocalDate.now().plusDays(4));
homeOffice.setType(AbsenceType.HOME_OFFICE);
homeOffice.setStatus(AbsenceStatus.APPROVED);
homeOffice.setApprover(admin);
homeOffice.setCreatedAt(LocalDateTime.now());
homeOffice.setUpdatedAt(LocalDateTime.now());
absenceRepository.save(homeOffice);
System.out.println(" ✓ Home Office für Anna Schmidt erstellt (genehmigt)");
}
User peter = userRepository.findByEmail("peter.mueller@timerecording.ch").orElse(null);
if (peter != null) {
// Ausstehender Sonderurlaub für Peter
Absence specialLeave = new Absence();
specialLeave.setUser(peter);
specialLeave.setStartDate(LocalDate.now().plusDays(21));
specialLeave.setEndDate(LocalDate.now().plusDays(21)); // Nur ein Tag
specialLeave.setType(AbsenceType.SPECIAL_LEAVE);
specialLeave.setStatus(AbsenceStatus.PENDING);
specialLeave.setCreatedAt(LocalDateTime.now());
specialLeave.setUpdatedAt(LocalDateTime.now());
absenceRepository.save(specialLeave);
System.out.println(" ✓ Sonderurlaub für Peter Müller erstellt (ausstehend)");
}
}
}