Skip to content

Commit 0487ab3

Browse files
committed
[issues/1] Ping Model was no following DDD
👀 It was moved to PingMapper class
1 parent 07c8287 commit 0487ab3

File tree

12 files changed

+413
-241
lines changed

12 files changed

+413
-241
lines changed

src/main/java/dev/luismachadoreis/flighttracker/server/flightdata/infrastructure/pubsub/FlightDataSubscriber.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import dev.luismachadoreis.blueprint.cqs.SpringCommanderMediator;
44
import dev.luismachadoreis.flighttracker.server.ping.application.CreatePingCommand;
55
import dev.luismachadoreis.flighttracker.server.ping.application.dto.FlightDataDTO;
6-
import dev.luismachadoreis.flighttracker.server.ping.application.dto.PingDTOMapper;
6+
import dev.luismachadoreis.flighttracker.server.ping.application.dto.PingMapper;
77
import lombok.RequiredArgsConstructor;
88
import lombok.extern.slf4j.Slf4j;
99
import org.springframework.kafka.annotation.KafkaListener;
@@ -15,11 +15,12 @@
1515
public class FlightDataSubscriber {
1616

1717
private final SpringCommanderMediator mediator;
18+
private final PingMapper pingMapper;
1819

1920
@KafkaListener(topics = "${spring.kafka.topic.flight-positions}", groupId = "${spring.kafka.consumer.group-id}")
2021
public void consumeFlightData(FlightDataDTO data) {
2122
log.debug("Received flight data: {}", data);
22-
mediator.send(new CreatePingCommand(PingDTOMapper.fromFlightData(data)));
23+
mediator.send(new CreatePingCommand(pingMapper.fromFlightData(data)));
2324
}
2425

2526
}

src/main/java/dev/luismachadoreis/flighttracker/server/ping/application/CreatePingCommandHandler.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dev.luismachadoreis.blueprint.cqs.command.CommandHandler;
44
import dev.luismachadoreis.flighttracker.server.ping.domain.Ping;
55
import dev.luismachadoreis.flighttracker.server.ping.domain.PingRepository;
6+
import dev.luismachadoreis.flighttracker.server.ping.application.dto.PingMapper;
67
import org.springframework.stereotype.Component;
78
import org.springframework.transaction.annotation.Transactional;
89

@@ -16,12 +17,14 @@
1617
public class CreatePingCommandHandler implements CommandHandler<CreatePingCommand, UUID> {
1718

1819
private final PingRepository pingRepository;
20+
private final PingMapper pingMapper;
1921

2022
/*
2123
* This constructor injects the ping repository into the command handler.
2224
*/
23-
public CreatePingCommandHandler(PingRepository pingRepository) {
25+
public CreatePingCommandHandler(PingRepository pingRepository, PingMapper pingMapper) {
2426
this.pingRepository = pingRepository;
27+
this.pingMapper = pingMapper;
2528
}
2629

2730
/*
@@ -32,7 +35,7 @@ public CreatePingCommandHandler(PingRepository pingRepository) {
3235
public UUID handle(CreatePingCommand command) {
3336
Objects.requireNonNull(command, "Command cannot be null");
3437

35-
var ping = Ping.fromDTO(command.pingDTO());
38+
var ping = pingMapper.toDomain(command.pingDTO());
3639
ping.registerPingCreated();
3740
pingRepository.save(ping);
3841

src/main/java/dev/luismachadoreis/flighttracker/server/ping/application/GetRecentPingsQueryHandler.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import dev.luismachadoreis.blueprint.cqs.query.QueryHandler;
44
import dev.luismachadoreis.flighttracker.server.ping.application.dto.PingDTO;
55
import dev.luismachadoreis.flighttracker.server.ping.domain.PingRepository;
6+
import dev.luismachadoreis.flighttracker.server.ping.application.dto.PingMapper;
67
import org.springframework.stereotype.Component;
78
import org.springframework.transaction.annotation.Transactional;
89

@@ -14,12 +15,14 @@
1415
@Component
1516
public class GetRecentPingsQueryHandler implements QueryHandler<GetRecentPingsQuery, List<PingDTO>> {
1617
private final PingRepository pingRepository;
18+
private final PingMapper pingMapper;
1719

1820
/*
1921
* This constructor injects the ping repository into the query handler.
2022
*/
21-
public GetRecentPingsQueryHandler(PingRepository pingRepository) {
23+
public GetRecentPingsQueryHandler(PingRepository pingRepository, PingMapper pingMapper) {
2224
this.pingRepository = pingRepository;
25+
this.pingMapper = pingMapper;
2326
}
2427

2528
/*
@@ -32,7 +35,7 @@ public List<PingDTO> handle(GetRecentPingsQuery query) {
3235

3336
return pingRepository.findTopNPings(query.limit())
3437
.stream()
35-
.map(ping -> ping.toDTO())
38+
.map(pingMapper::toDTO)
3639
.toList();
3740
}
3841
}

src/main/java/dev/luismachadoreis/flighttracker/server/ping/application/dto/PingDTOMapper.java

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package dev.luismachadoreis.flighttracker.server.ping.application.dto;
2+
3+
import dev.luismachadoreis.flighttracker.server.ping.domain.Ping;
4+
import org.springframework.stereotype.Component;
5+
import java.time.Instant;
6+
import java.util.UUID;
7+
8+
@Component
9+
public class PingMapper {
10+
11+
/**
12+
* Map a Ping to a PingDTO.
13+
* @param ping The Ping to map.
14+
* @return The PingDTO.
15+
*/
16+
public PingDTO toDTO(Ping ping) {
17+
return new PingDTO(
18+
ping.getId(),
19+
new PingDTO.Aircraft(
20+
ping.getAircraft().icao24(),
21+
ping.getAircraft().callsign(),
22+
ping.getAircraft().originCountry(),
23+
ping.getAircraft().lastContact(),
24+
ping.getAircraft().squawk(),
25+
ping.getAircraft().spi(),
26+
ping.getAircraft().sensors()
27+
),
28+
new PingDTO.Vector(
29+
ping.getVector().velocity(),
30+
ping.getVector().trueTrack(),
31+
ping.getVector().verticalRate()
32+
),
33+
new PingDTO.Position(
34+
ping.getPosition().longitude(),
35+
ping.getPosition().latitude(),
36+
ping.getPosition().geoAltitude(),
37+
ping.getPosition().baroAltitude(),
38+
ping.getPosition().onGround(),
39+
ping.getPosition().source(),
40+
ping.getPosition().time()
41+
),
42+
ping.getLastUpdate()
43+
);
44+
}
45+
46+
/**
47+
* Map a PingDTO to a Ping.
48+
* @param dto The PingDTO to map.
49+
* @return The Ping.
50+
*/
51+
public Ping toDomain(PingDTO dto) {
52+
return new Ping(
53+
new Ping.Aircraft(
54+
dto.aircraft().icao24(),
55+
dto.aircraft().callsign(),
56+
dto.aircraft().originCountry(),
57+
dto.aircraft().lastContact(),
58+
dto.aircraft().squawk(),
59+
dto.aircraft().spi(),
60+
dto.aircraft().sensors()
61+
),
62+
new Ping.Vector(
63+
dto.vector().velocity(),
64+
dto.vector().trueTrack(),
65+
dto.vector().verticalRate()
66+
),
67+
new Ping.Position(
68+
dto.position().longitude(),
69+
dto.position().latitude(),
70+
dto.position().geoAltitude(),
71+
dto.position().baroAltitude(),
72+
dto.position().onGround(),
73+
dto.position().source(),
74+
dto.position().time()
75+
)
76+
);
77+
}
78+
79+
/**
80+
* Map a FlightDataDTO to a PingDTO.
81+
* @param flightData The FlightDataDTO to map.
82+
* @return The PingDTO.
83+
*/
84+
public PingDTO fromFlightData(FlightDataDTO flightData) {
85+
return new PingDTO(
86+
UUID.randomUUID(),
87+
new PingDTO.Aircraft(
88+
flightData.icao24(),
89+
flightData.callsign(),
90+
flightData.originCountry(),
91+
flightData.lastContact() != null ? Instant.ofEpochSecond(flightData.lastContact()) : null,
92+
flightData.squawk(),
93+
flightData.spi(),
94+
flightData.sensors()
95+
),
96+
new PingDTO.Vector(
97+
flightData.velocity(),
98+
flightData.trueTrack(),
99+
flightData.verticalRate()
100+
),
101+
new PingDTO.Position(
102+
flightData.longitude(),
103+
flightData.latitude(),
104+
flightData.geoAltitude(),
105+
flightData.baroAltitude(),
106+
flightData.onGround(),
107+
flightData.positionSource(),
108+
flightData.timePosition() != null ? Instant.ofEpochSecond(flightData.timePosition()) : null
109+
),
110+
Instant.now()
111+
);
112+
}
113+
}

src/main/java/dev/luismachadoreis/flighttracker/server/ping/domain/Ping.java

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package dev.luismachadoreis.flighttracker.server.ping.domain;
22

33
import dev.luismachadoreis.flighttracker.server.ping.domain.event.PingCreated;
4-
import dev.luismachadoreis.flighttracker.server.ping.application.dto.PingDTO;
54
import jakarta.persistence.*;
65
import lombok.Getter;
76
import lombok.NoArgsConstructor;
@@ -38,64 +37,6 @@ public Ping(final Aircraft aircraft, final Vector vector, final Position positio
3837
this.lastUpdate = Instant.now();
3938
}
4039

41-
public PingDTO toDTO() {
42-
return new PingDTO(
43-
this.id,
44-
new PingDTO.Aircraft(
45-
this.aircraft.icao24(),
46-
this.aircraft.callsign(),
47-
this.aircraft.originCountry(),
48-
this.aircraft.lastContact(),
49-
this.aircraft.squawk(),
50-
this.aircraft.spi(),
51-
this.aircraft.sensors()
52-
),
53-
new PingDTO.Vector(
54-
this.vector.velocity(),
55-
this.vector.trueTrack(),
56-
this.vector.verticalRate()
57-
),
58-
new PingDTO.Position(
59-
this.position.longitude(),
60-
this.position.latitude(),
61-
this.position.geoAltitude(),
62-
this.position.baroAltitude(),
63-
this.position.onGround(),
64-
this.position.source(),
65-
this.position.time()
66-
),
67-
this.lastUpdate
68-
);
69-
}
70-
71-
public static Ping fromDTO(PingDTO dto) {
72-
return new Ping(
73-
new Aircraft(
74-
dto.aircraft().icao24(),
75-
dto.aircraft().callsign(),
76-
dto.aircraft().originCountry(),
77-
dto.aircraft().lastContact(),
78-
dto.aircraft().squawk(),
79-
dto.aircraft().spi(),
80-
dto.aircraft().sensors()
81-
),
82-
new Vector(
83-
dto.vector().velocity(),
84-
dto.vector().trueTrack(),
85-
dto.vector().verticalRate()
86-
),
87-
new Position(
88-
dto.position().longitude(),
89-
dto.position().latitude(),
90-
dto.position().geoAltitude(),
91-
dto.position().baroAltitude(),
92-
dto.position().onGround(),
93-
dto.position().source(),
94-
dto.position().time()
95-
)
96-
);
97-
}
98-
9940
@Embeddable
10041
public record Aircraft(
10142
@Column(name = "icao24")
@@ -205,5 +146,4 @@ public void registerPingCreated() {
205146
this.lastUpdate
206147
));
207148
}
208-
209149
}

0 commit comments

Comments
 (0)