-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDataInitializer.java
More file actions
118 lines (102 loc) · 4.11 KB
/
Copy pathDataInitializer.java
File metadata and controls
118 lines (102 loc) · 4.11 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
package com.spms.config;
import com.spms.enums.VehicleType;
import com.spms.model.Administrator;
import com.spms.model.Guard;
import com.spms.model.ParkingLot;
import com.spms.model.Supervisor;
import com.spms.model.Tariff;
import com.spms.repository.ParkingLotRepository;
import com.spms.repository.TariffRepository;
import com.spms.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.List;
@Component
@RequiredArgsConstructor
@ConditionalOnProperty(name = "app.seed.enabled", havingValue = "true")
public class DataInitializer implements CommandLineRunner {
private final ParkingLotRepository parkingLotRepository;
private final TariffRepository tariffRepository;
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
@Override
@Transactional
public void run(String... args) {
seedLots();
seedTariffs();
seedUsers();
}
private void seedLots() {
if (parkingLotRepository.count() > 0) {
return;
}
parkingLotRepository.saveAll(List.of(
new ParkingLot(null, "Lot A - North", "North Block, Gate 1", 3, 3, 28.6139, 77.2090),
new ParkingLot(null, "Lot B - South", "South Block, Gate 2", 50, 50, 28.6100, 77.2085),
new ParkingLot(null, "Lot C - East", "East Wing, Gate 3", 75, 75, 28.6145, 77.2130),
new ParkingLot(null, "Lot D - West", "West Wing, Gate 4", 60, 60, 28.6135, 77.2045)
));
}
private void seedTariffs() {
if (tariffRepository.count() > 0) {
return;
}
tariffRepository.saveAll(List.of(
new Tariff(null, VehicleType.CAR, 2.0),
new Tariff(null, VehicleType.MOTORCYCLE, 1.0),
new Tariff(null, VehicleType.TRUCK, 4.0),
new Tariff(null, VehicleType.VAN, 3.0)
));
}
private void seedUsers() {
List<ParkingLot> lots = parkingLotRepository.findAll();
seedAdmin();
seedLotUsers(lots);
}
private void seedAdmin() {
if (userRepository.findByUsername("admin").isPresent()) {
return;
}
Administrator admin = new Administrator();
admin.setName("System Admin");
admin.setUsername("admin");
admin.setPassword(passwordEncoder.encode("changeme"));
userRepository.save(admin);
}
private void seedLotUsers(List<ParkingLot> lots) {
for (int i = 0; i < lots.size(); i++) {
ParkingLot lot = lots.get(i);
int lotNumber = i + 1;
seedSupervisorForLot(lot, lotNumber);
seedGuardForLot(lot, lotNumber);
}
}
private void seedSupervisorForLot(ParkingLot assignedLot, int lotNumber) {
String username = "sup_lot" + lotNumber;
Supervisor supervisor = (Supervisor) userRepository.findByUsername(username).orElse(null);
if (supervisor == null) {
supervisor = new Supervisor();
supervisor.setName("Supervisor Lot " + lotNumber);
supervisor.setUsername(username);
supervisor.setPassword(passwordEncoder.encode("sup" + lotNumber + "pass"));
}
supervisor.setAssignedLot(assignedLot);
userRepository.save(supervisor);
}
private void seedGuardForLot(ParkingLot assignedLot, int lotNumber) {
String username = "guard_lot" + lotNumber;
Guard guard = (Guard) userRepository.findByUsername(username).orElse(null);
if (guard == null) {
guard = new Guard();
guard.setName("Guard Lot " + lotNumber);
guard.setUsername(username);
guard.setPassword(passwordEncoder.encode("guard" + lotNumber + "pass"));
}
guard.setAssignedLot(assignedLot);
userRepository.save(guard);
}
}