Skip to content

Commit 60aa444

Browse files
committed
BC/Modularyzacja 9 - Wprowadzenie serwisów aplikacyjnych DemandService, StartTransitService i CompleteTransitService. Dalsze odchudzanie RideService
1 parent 20f067c commit 60aa444

File tree

11 files changed

+212
-129
lines changed

11 files changed

+212
-129
lines changed

src/main/java/io/legacyfighter/cabs/assignment/DriverAssignment.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
@Entity
1414
class DriverAssignment extends BaseEntity {
1515

16-
private UUID requestId;
16+
private UUID requestUUID;
1717

1818
private Instant publishedAt;
1919

@@ -30,8 +30,8 @@ class DriverAssignment extends BaseEntity {
3030
public DriverAssignment() {
3131
}
3232

33-
DriverAssignment(UUID requestId, Instant publishedAt) {
34-
this.requestId = requestId;
33+
DriverAssignment(UUID requestUUID, Instant publishedAt) {
34+
this.requestUUID = requestUUID;
3535
this.publishedAt = publishedAt;
3636
}
3737

@@ -121,8 +121,8 @@ Integer getAwaitingDriversResponses() {
121121
return awaitingDriversResponses;
122122
}
123123

124-
UUID getRequestId() {
125-
return requestId;
124+
UUID getRequestUUID() {
125+
return requestUUID;
126126
}
127127

128128
@Override

src/main/java/io/legacyfighter/cabs/assignment/DriverAssignmentFacade.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.legacyfighter.cabs.carfleet.CarClass;
44
import io.legacyfighter.cabs.carfleet.CarTypeService;
5-
import io.legacyfighter.cabs.driverfleet.Driver;
65
import io.legacyfighter.cabs.geolocation.Distance;
76
import io.legacyfighter.cabs.geolocation.address.AddressDTO;
87
import io.legacyfighter.cabs.notification.DriverNotificationService;
@@ -40,7 +39,7 @@ public DriverAssignmentFacade(DriverAssignmentRepository driverAssignmentReposit
4039
}
4140

4241
@Transactional
43-
public InvolvedDriversSummary createAssignment(UUID transitRequestUUID, AddressDTO from, CarClass carClass, Instant when) {
42+
public InvolvedDriversSummary startAssigningDrivers(UUID transitRequestUUID, AddressDTO from, CarClass carClass, Instant when) {
4443
driverAssignmentRepository.save(new DriverAssignment(transitRequestUUID, when));
4544
return searchForPossibleDrivers(transitRequestUUID, from, carClass);
4645
}
@@ -115,10 +114,9 @@ private List<CarClass> choosePossibleCarClasses(CarClass carClass) {
115114
}
116115

117116
@Transactional
118-
public InvolvedDriversSummary acceptTransit(UUID transitRequestUUID, Driver driver) {
117+
public InvolvedDriversSummary acceptTransit(UUID transitRequestUUID, Long driverId) {
119118
DriverAssignment driverAssignment = find(transitRequestUUID);
120-
driverAssignment.acceptBy(driver.getId());
121-
driver.setOccupied(true);
119+
driverAssignment.acceptBy(driverId);
122120
return loadInvolvedDrivers(driverAssignment);
123121
}
124122

@@ -133,7 +131,7 @@ public InvolvedDriversSummary rejectTransit(UUID transitRequestUUID, Long driver
133131
}
134132

135133
public boolean isDriverAssigned(UUID transitRequestUUID) {
136-
return driverAssignmentRepository.findByRequestIdAndStatus(transitRequestUUID, AssignmentStatus.ON_THE_WAY) != null;
134+
return driverAssignmentRepository.findByRequestUUIDAndStatus(transitRequestUUID, AssignmentStatus.ON_THE_WAY) != null;
137135
}
138136

139137
private InvolvedDriversSummary loadInvolvedDrivers(DriverAssignment driverAssignment) {
@@ -158,7 +156,7 @@ public void cancel(UUID transitRequestUUID) {
158156
}
159157

160158
private DriverAssignment find(UUID transitRequestUUID) {
161-
return driverAssignmentRepository.findByRequestId(transitRequestUUID);
159+
return driverAssignmentRepository.findByRequestUUID(transitRequestUUID);
162160
}
163161

164162
public void notifyAssignedDriverAboutChangedDestination(UUID transitRequestUUID) {

src/main/java/io/legacyfighter/cabs/assignment/DriverAssignmentRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
interface DriverAssignmentRepository extends JpaRepository<DriverAssignment, Long> {
88

9-
DriverAssignment findByRequestId(UUID requestId);
9+
DriverAssignment findByRequestUUID(UUID transitRequestUUID);
1010

11-
DriverAssignment findByRequestIdAndStatus(UUID transitId, AssignmentStatus status);
11+
DriverAssignment findByRequestUUIDAndStatus(UUID transitRequestUUID, AssignmentStatus status);
1212

1313
}

src/main/java/io/legacyfighter/cabs/driverfleet/DriverService.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,20 +137,39 @@ public DriverDTO loadDriver(Long driverId) {
137137
return new DriverDTO(driver);
138138
}
139139

140+
public Set<DriverDTO> loadDrivers(Collection<Long> ids) {
141+
return driverRepository.findAllById(ids)
142+
.stream()
143+
.map(DriverDTO::new)
144+
.collect(Collectors.toSet());
145+
}
146+
140147
public void addAttribute(Long driverId, DriverAttributeName attr, String value) {
141148
Driver driver = driverRepository.getOne(driverId);
142149
if (driver == null) {
143150
throw new IllegalArgumentException("Driver does not exists, id = " + driverId);
144151
}
152+
if (driver == null) {
153+
throw new IllegalArgumentException("Driver does not exists, id = " + driverId);
154+
}
145155
driverAttributeRepository.save(new DriverAttribute(driver, attr, value));
146156

147157
}
148158

149159

150-
public Set<DriverDTO> loadDrivers(Collection<Long> ids) {
151-
return driverRepository.findAllById(ids)
152-
.stream()
153-
.map(DriverDTO::new)
154-
.collect(Collectors.toSet());
160+
public boolean exists(Long driverId) {
161+
return driverRepository.findById(driverId).isPresent();
162+
}
163+
164+
@Transactional
165+
public void markOccupied(Long driverId) {
166+
Driver driver = driverRepository.getOne(driverId);
167+
driver.setOccupied(true);
168+
}
169+
170+
@Transactional
171+
public void markNotOccupied(Long driverId) {
172+
Driver driver = driverRepository.getOne(driverId);
173+
driver.setOccupied(false);
155174
}
156175
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.legacyfighter.cabs.ride;
2+
3+
import io.legacyfighter.cabs.geolocation.Distance;
4+
import io.legacyfighter.cabs.geolocation.DistanceCalculator;
5+
import io.legacyfighter.cabs.geolocation.GeocodingService;
6+
import io.legacyfighter.cabs.geolocation.address.Address;
7+
import io.legacyfighter.cabs.money.Money;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.stereotype.Service;
10+
import org.springframework.transaction.annotation.Transactional;
11+
12+
import java.util.UUID;
13+
14+
@Service
15+
class CompleteTransitService {
16+
17+
@Autowired
18+
private TransitRepository transitRepository;
19+
20+
@Autowired
21+
private DistanceCalculator distanceCalculator;
22+
23+
@Autowired
24+
private GeocodingService geocodingService;
25+
26+
@Transactional
27+
public Money completeTransit(Long driverId, UUID requestUUID, Address from, Address destinationAddress) {
28+
Transit transit = transitRepository.findByTransitRequestUUID(requestUUID);
29+
30+
if (transit == null) {
31+
throw new IllegalArgumentException("Transit does not exist, id = " + requestUUID);
32+
}
33+
34+
// FIXME later: add some exceptions handling
35+
double[] geoFrom = geocodingService.geocodeAddress(from);
36+
double[] geoTo = geocodingService.geocodeAddress(destinationAddress);
37+
Distance distance = Distance.ofKm((float) distanceCalculator.calculateByMap(geoFrom[0], geoFrom[1], geoTo[0], geoTo[1]));
38+
Money finalPrice = transit.completeAt(distance);
39+
transitRepository.save(transit);
40+
return finalPrice;
41+
}
42+
43+
44+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.legacyfighter.cabs.ride;
2+
3+
import org.springframework.stereotype.Service;
4+
import org.springframework.transaction.annotation.Transactional;
5+
6+
import java.util.UUID;
7+
8+
@Service
9+
public class DemandService {
10+
11+
private final TransitDemandRepository transitDemandRepository;
12+
13+
public DemandService(TransitDemandRepository transitDemandRepository) {
14+
this.transitDemandRepository = transitDemandRepository;
15+
}
16+
17+
@Transactional
18+
public void publishDemand(UUID requestUUID) {
19+
transitDemandRepository.save(new TransitDemand(requestUUID));
20+
}
21+
22+
@Transactional
23+
public void cancelDemand(UUID requestUUID) {
24+
TransitDemand transitDemand = transitDemandRepository.findByTransitRequestUUID(requestUUID);
25+
if (transitDemand != null) {
26+
transitDemand.cancel();
27+
}
28+
}
29+
30+
@Transactional
31+
public void acceptDemand(UUID requestUUID) {
32+
TransitDemand transitDemand = transitDemandRepository.findByTransitRequestUUID(requestUUID);
33+
if (transitDemand != null) {
34+
transitDemand.accept();
35+
}
36+
}
37+
38+
public boolean existsFor(UUID requestUUID) {
39+
return transitDemandRepository.findByTransitRequestUUID(requestUUID) != null;
40+
}
41+
}

src/main/java/io/legacyfighter/cabs/ride/RequestTransitService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.time.Clock;
1313
import java.time.Instant;
14+
import java.util.UUID;
1415

1516
@Service
1617
public class RequestTransitService {
@@ -46,4 +47,11 @@ private Tariff chooseTariff(Instant when) {
4647
}
4748

4849

50+
public UUID findCalculationUUID(Long requestId) {
51+
return requestForTransitRepository.getOne(requestId).getRequestUUID();
52+
}
53+
54+
public Tariff findTariff(UUID requestUUID) {
55+
return requestForTransitRepository.findByRequestUUID(requestUUID).getTariff();
56+
}
4957
}

0 commit comments

Comments
 (0)