Skip to content

Commit e08245d

Browse files
refactoring
1 parent 6941917 commit e08245d

13 files changed

+249
-71
lines changed

backend/src/main/java/org/eventplanner/events/adapter/EventJpaRepository.java

-26
This file was deleted.

backend/src/main/java/org/eventplanner/events/adapter/jpa/EventJpaEntity.java

+38-17
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Collections;
77
import java.util.List;
88

9+
import jakarta.persistence.*;
910
import org.eventplanner.events.entities.Event;
1011
import org.eventplanner.events.entities.Registration;
1112
import org.eventplanner.events.entities.Slot;
@@ -15,10 +16,6 @@
1516

1617
import com.fasterxml.jackson.core.type.TypeReference;
1718
import com.fasterxml.jackson.databind.ObjectMapper;
18-
import jakarta.persistence.Column;
19-
import jakarta.persistence.Entity;
20-
import jakarta.persistence.Id;
21-
import jakarta.persistence.Table;
2219
import lombok.EqualsAndHashCode;
2320
import lombok.Getter;
2421
import lombok.NoArgsConstructor;
@@ -68,6 +65,15 @@ public class EventJpaEntity {
6865
@Column(name = "registrations")
6966
private String registrationsRaw;
7067

68+
@Transient
69+
private List<Location> locations;
70+
71+
@Transient
72+
private List<Slot> slots;
73+
74+
@Transient
75+
private List<Registration> registrations;
76+
7177
public static @NonNull EventJpaEntity fromDomain(@NonNull Event domain) {
7278
var eventJpaEntity = new EventJpaEntity();
7379
eventJpaEntity.setKey(domain.getKey().value());
@@ -77,59 +83,74 @@ public class EventJpaEntity {
7783
eventJpaEntity.setNote(domain.getNote());
7884
eventJpaEntity.setDescription(domain.getDescription());
7985
eventJpaEntity.setStart(domain.getStart().format(DateTimeFormatter.ISO_DATE_TIME));
80-
eventJpaEntity.setEnd(domain.getStart().format(DateTimeFormatter.ISO_DATE_TIME));
86+
eventJpaEntity.setEnd(domain.getEnd().format(DateTimeFormatter.ISO_DATE_TIME));
8187
eventJpaEntity.setLocations(domain.getLocations());
8288
eventJpaEntity.setSlots(domain.getSlots());
8389
eventJpaEntity.setRegistrations(domain.getRegistrations());
8490
return eventJpaEntity;
8591
}
8692

8793
public List<Location> getLocations() {
94+
if (locations != null) {
95+
return locations;
96+
}
8897
try {
89-
return objectMapper.readValue(locationsRaw, new TypeReference<>() {
90-
});
98+
var entities = objectMapper.readValue(locationsRaw, new TypeReference<List<LocationJsonEntity>>() {});
99+
locations = entities.stream().map(LocationJsonEntity::toDomain).toList();
91100
} catch (IOException e) {
92-
return Collections.emptyList();
101+
locations = Collections.emptyList();
93102
}
103+
return locations;
94104
}
95105

96106
public void setLocations(List<Location> locations) {
97107
try {
98-
this.locationsRaw = objectMapper.writeValueAsString(locations);
108+
var entities = locations.stream().map(LocationJsonEntity::fromDomain).toList();
109+
this.locationsRaw = objectMapper.writeValueAsString(entities);
99110
} catch (IOException e) {
100111
this.locationsRaw = "[]";
101112
}
102113
}
103114

104115
public List<Slot> getSlots() {
116+
if (slots != null) {
117+
return slots;
118+
}
105119
try {
106-
return objectMapper.readValue(slotsRaw, new TypeReference<>() {
107-
});
120+
var entities = objectMapper.readValue(slotsRaw, new TypeReference<List<SlotJsonEntity>>() {});
121+
slots = entities.stream().map(SlotJsonEntity::toDomain).toList();
108122
} catch (IOException e) {
109-
return Collections.emptyList();
123+
slots = Collections.emptyList();
110124
}
125+
return slots;
111126
}
112127

113128
public void setSlots(List<Slot> slots) {
114129
try {
115-
this.slotsRaw = objectMapper.writeValueAsString(slots);
130+
var entities = slots.stream().map(SlotJsonEntity::fromDomain).toList();
131+
this.slotsRaw = objectMapper.writeValueAsString(entities);
116132
} catch (IOException e) {
117133
this.slotsRaw = "[]";
118134
}
119135
}
120136

121137
public List<Registration> getRegistrations() {
138+
if (registrations != null) {
139+
return registrations;
140+
}
122141
try {
123-
return objectMapper.readValue(registrationsRaw, new TypeReference<>() {
124-
});
142+
var entities = objectMapper.readValue(registrationsRaw, new TypeReference<List<RegistrationJsonEntity>>() {});
143+
registrations = entities.stream().map(RegistrationJsonEntity::toDomain).toList();
125144
} catch (IOException e) {
126-
return Collections.emptyList();
145+
registrations = Collections.emptyList();
127146
}
147+
return registrations;
128148
}
129149

130150
public void setRegistrations(List<Registration> registrations) {
131151
try {
132-
this.registrationsRaw = objectMapper.writeValueAsString(registrations);
152+
var entities = registrations.stream().map(RegistrationJsonEntity::fromDomain).toList();
153+
this.registrationsRaw = objectMapper.writeValueAsString(entities);
133154
} catch (IOException e) {
134155
this.registrationsRaw = "[]";
135156
}

backend/src/main/java/org/eventplanner/events/adapter/jpa/EventJpaRepository.java

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.eventplanner.events.adapter.jpa;
22

3-
import org.eventplanner.events.entities.Event;
43
import org.springframework.data.jpa.repository.JpaRepository;
54
import org.springframework.stereotype.Repository;
65

backend/src/main/java/org/eventplanner/events/adapter/jpa/EventJpaRepositoryAdapter.java

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.springframework.stereotype.Component;
77
import org.springframework.transaction.annotation.Transactional;
88

9-
import java.beans.Transient;
109
import java.util.List;
1110
import java.util.Optional;
1211

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.eventplanner.events.adapter.jpa;
2+
3+
import org.eventplanner.events.values.Location;
4+
import org.springframework.lang.NonNull;
5+
import org.springframework.lang.Nullable;
6+
7+
import java.io.Serializable;
8+
9+
public record LocationJsonEntity(
10+
@Nullable String name,
11+
@Nullable String icon,
12+
@Nullable String address,
13+
@Nullable String country
14+
) implements Serializable {
15+
16+
public static @NonNull LocationJsonEntity fromDomain(@NonNull Location domain) {
17+
return new LocationJsonEntity(
18+
domain.name(),
19+
domain.icon(),
20+
domain.address(),
21+
domain.country()
22+
);
23+
}
24+
25+
public Location toDomain() {
26+
return new Location(
27+
name != null ? name : "",
28+
icon != null ? icon : "",
29+
address,
30+
country
31+
);
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.eventplanner.events.adapter.jpa;
2+
3+
import org.eventplanner.events.entities.Registration;
4+
import org.eventplanner.events.values.RegistrationKey;
5+
import org.eventplanner.positions.values.PositionKey;
6+
import org.eventplanner.users.values.UserKey;
7+
import org.springframework.lang.NonNull;
8+
import org.springframework.lang.Nullable;
9+
10+
import java.io.Serializable;
11+
12+
import static org.eventplanner.utils.ObjectUtils.mapNullable;
13+
14+
public record RegistrationJsonEntity(
15+
@NonNull String key,
16+
@NonNull String positionKey,
17+
@Nullable String userKey,
18+
@Nullable String name,
19+
@Nullable String note
20+
) implements Serializable {
21+
22+
public static @NonNull RegistrationJsonEntity fromDomain(@NonNull Registration domain) {
23+
return new RegistrationJsonEntity(
24+
domain.getKey().value(),
25+
domain.getPosition().value(),
26+
mapNullable(domain.getUser(), UserKey::value),
27+
domain.getName(),
28+
domain.getNote()
29+
);
30+
}
31+
32+
public @NonNull Registration toDomain() {
33+
return new Registration(
34+
new RegistrationKey(key),
35+
new PositionKey(positionKey),
36+
mapNullable(userKey, UserKey::new),
37+
name,
38+
note
39+
);
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.eventplanner.events.adapter.jpa;
2+
3+
import org.eventplanner.events.entities.Slot;
4+
import org.eventplanner.events.values.RegistrationKey;
5+
import org.eventplanner.events.values.SlotKey;
6+
import org.eventplanner.positions.values.PositionKey;
7+
import org.springframework.lang.NonNull;
8+
import org.springframework.lang.Nullable;
9+
10+
import java.util.Collections;
11+
import java.util.List;
12+
13+
import static org.eventplanner.utils.ObjectUtils.mapNullable;
14+
15+
public record SlotJsonEntity(
16+
@NonNull String key,
17+
int order,
18+
int criticality,
19+
@Nullable List<String> positions,
20+
@Nullable String name,
21+
@Nullable String assignedRegistration
22+
) {
23+
24+
public static @NonNull SlotJsonEntity fromDomain(@NonNull Slot domain) {
25+
return new SlotJsonEntity(
26+
domain.getKey().value(),
27+
domain.getOrder(),
28+
domain.getCriticality(),
29+
domain.getPositions().stream().map(PositionKey::value).toList(),
30+
domain.getName(),
31+
mapNullable(domain.getAssignedRegistration(), RegistrationKey::value)
32+
);
33+
}
34+
35+
public @NonNull Slot toDomain() {
36+
return new Slot(
37+
new SlotKey(key),
38+
order,
39+
criticality,
40+
mapNullable(positions, PositionKey::new, Collections.emptyList()),
41+
name,
42+
mapNullable(assignedRegistration, RegistrationKey::new)
43+
);
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.eventplanner.users.adapter.jpa;
2+
3+
import org.eventplanner.events.adapter.jpa.LocationJsonEntity;
4+
import org.eventplanner.events.values.Location;
5+
import org.eventplanner.users.values.EncryptedAddress;
6+
import org.eventplanner.users.values.EncryptedString;
7+
import org.springframework.lang.NonNull;
8+
import org.springframework.lang.Nullable;
9+
10+
import java.io.Serializable;
11+
12+
import static org.eventplanner.utils.ObjectUtils.mapNullable;
13+
14+
public record EncryptedAddressJsonEntity(
15+
@NonNull String addressLine1,
16+
@Nullable String addressLine2,
17+
@NonNull String town,
18+
@NonNull String zipCode
19+
) implements Serializable {
20+
public static @NonNull EncryptedAddressJsonEntity fromDomain(@NonNull EncryptedAddress domain) {
21+
return new EncryptedAddressJsonEntity(
22+
domain.addressLine1().value(),
23+
mapNullable(domain.addressLine2(), EncryptedString::value),
24+
domain.town().value(),
25+
domain.zipCode().value()
26+
);
27+
}
28+
29+
public EncryptedAddress toDomain() {
30+
return new EncryptedAddress(
31+
new EncryptedString(addressLine1),
32+
mapNullable(addressLine2, EncryptedString::new),
33+
new EncryptedString(town),
34+
new EncryptedString(zipCode)
35+
);
36+
}
37+
}

0 commit comments

Comments
 (0)