Skip to content

Commit 02f7771

Browse files
authored
Merge pull request #15 from APSfurizon/fix_string_primary_key
Fix Primary Keys Representation + Some Additional Improvement
2 parents 90d3573 + 1ef717c commit 02f7771

File tree

18 files changed

+122
-90
lines changed

18 files changed

+122
-90
lines changed

application/src/main/java/net/furizon/backend/feature/pretix/event/Event.java

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.furizon.backend.feature.pretix.event;
22

3+
import com.google.common.hash.Hashing;
34
import lombok.AllArgsConstructor;
45
import lombok.Builder;
56
import lombok.Data;
@@ -8,6 +9,7 @@
89
import org.jetbrains.annotations.NotNull;
910
import org.jetbrains.annotations.Nullable;
1011

12+
import java.nio.charset.StandardCharsets;
1113
import java.time.OffsetDateTime;
1214
import java.util.Map;
1315

@@ -33,11 +35,16 @@ public class Event {
3335
@Nullable
3436
private Map<String, String> eventNames;
3537

38+
public int getId() {
39+
return Hashing.sha512().hashString(slug, StandardCharsets.UTF_8).asInt();
40+
}
41+
3642
public static class EventBuilder {
3743
public EventBuilder slug(String fullSlug) {
3844
this.slug = fullSlug;
3945
return this;
4046
}
47+
4148
public EventBuilder slug(String eventSlug, String organizerSlug) {
4249
this.slug = PretixGenericUtils.buildOrgEventSlug(eventSlug, organizerSlug);
4350
return this;

application/src/main/java/net/furizon/backend/feature/pretix/event/action/insert/JooqInsertNewEventAction.java

+6-11
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.jooq.util.postgres.PostgresDSL;
99
import org.springframework.stereotype.Component;
1010

11-
import java.time.OffsetDateTime;
1211
import java.util.Optional;
1312

1413
import static net.furizon.jooq.generated.Tables.EVENTS;
@@ -26,28 +25,24 @@ public void invoke(@NotNull Event event) {
2625
PostgresDSL
2726
.insertInto(
2827
EVENTS,
28+
EVENTS.ID,
2929
EVENTS.EVENT_SLUG,
3030
EVENTS.EVENT_DATE_TO,
3131
EVENTS.EVENT_DATE_FROM,
3232
EVENTS.EVENT_IS_CURRENT,
3333
EVENTS.EVENT_PUBLIC_URL,
34-
EVENTS.EVENT_NAMES
34+
EVENTS.EVENT_NAMES_JSON
3535
)
3636
.values(
37+
event.getId(),
3738
event.getSlug(),
38-
Optional
39-
.ofNullable(event.getDateTo())
40-
.map(OffsetDateTime::toString)
41-
.orElse(null),
42-
Optional
43-
.ofNullable(event.getDateFrom())
44-
.map(OffsetDateTime::toString)
45-
.orElse(null),
39+
event.getDateTo(),
40+
event.getDateFrom(),
4641
event.isCurrent(),
4742
event.getPublicUrl(),
4843
Optional
4944
.ofNullable(event.getEventNames())
50-
.map(jsonSerializer::serializeAsString)
45+
.map(jsonSerializer::serializeAsJson)
5146
.orElse(null)
5247
)
5348
);

application/src/main/java/net/furizon/backend/feature/pretix/event/action/update/JooqUpdateEventAction.java

+5-12
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.jooq.util.postgres.PostgresDSL;
99
import org.springframework.stereotype.Component;
1010

11-
import java.time.OffsetDateTime;
1211
import java.util.Optional;
1312

1413
import static net.furizon.jooq.generated.Tables.EVENTS;
@@ -25,21 +24,15 @@ public void invoke(@NotNull final Event event) {
2524
command.execute(
2625
PostgresDSL
2726
.update(EVENTS)
28-
.set(EVENTS.EVENT_DATE_FROM, Optional
29-
.ofNullable(event.getDateFrom())
30-
.map(OffsetDateTime::toString)
31-
.orElse(null))
27+
.set(EVENTS.EVENT_DATE_FROM, event.getDateFrom())
3228
.set(EVENTS.EVENT_IS_CURRENT, event.isCurrent())
3329
.set(EVENTS.EVENT_PUBLIC_URL, event.getPublicUrl())
34-
.set(EVENTS.EVENT_NAMES, Optional
30+
.set(EVENTS.EVENT_NAMES_JSON, Optional
3531
.ofNullable(event.getEventNames())
36-
.map(jsonSerializer::serializeAsString)
37-
.orElse(null))
38-
.set(EVENTS.EVENT_DATE_TO, Optional
39-
.ofNullable(event.getDateTo())
40-
.map(OffsetDateTime::toString)
32+
.map(jsonSerializer::serializeAsJson)
4133
.orElse(null))
42-
.where(EVENTS.EVENT_SLUG.eq(event.getSlug()))
34+
.set(EVENTS.EVENT_DATE_TO, event.getDateTo())
35+
.where(EVENTS.ID.eq(event.getId()))
4336
);
4437
}
4538
}

application/src/main/java/net/furizon/backend/feature/pretix/event/finder/JooqEventFinder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class JooqEventFinder implements EventFinder {
2828
EVENTS.EVENT_DATE_FROM,
2929
EVENTS.EVENT_IS_CURRENT,
3030
EVENTS.EVENT_PUBLIC_URL,
31-
EVENTS.EVENT_NAMES
31+
EVENTS.EVENT_NAMES_JSON
3232
)
3333
.from(EVENTS)
3434
.where(EVENTS.EVENT_SLUG.eq(slug))

application/src/main/java/net/furizon/backend/feature/pretix/event/mapper/JooqEventMapper.java

+4-13
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.jooq.Record;
1111
import org.springframework.stereotype.Component;
1212

13-
import java.time.OffsetDateTime;
1413
import java.util.HashMap;
1514
import java.util.Optional;
1615

@@ -28,23 +27,15 @@ public class JooqEventMapper {
2827
public Event map(Record record) {
2928
return Event.builder()
3029
.slug(record.get(EVENTS.EVENT_SLUG))
31-
.dateTo(
32-
Optional.ofNullable(record.get(EVENTS.EVENT_DATE_TO))
33-
.map(OffsetDateTime::parse)
34-
.orElse(null)
35-
)
36-
.dateFrom(
37-
Optional.ofNullable(record.get(EVENTS.EVENT_DATE_FROM))
38-
.map(OffsetDateTime::parse)
39-
.orElse(null)
40-
)
30+
.dateTo(record.get(EVENTS.EVENT_DATE_TO))
31+
.dateFrom(record.get(EVENTS.EVENT_DATE_FROM))
4132
.isCurrent(record.get(EVENTS.EVENT_IS_CURRENT))
4233
.publicUrl(record.get(EVENTS.EVENT_PUBLIC_URL))
4334
.eventNames(
44-
Optional.ofNullable(record.get(EVENTS.EVENT_NAMES))
35+
Optional.ofNullable(record.get(EVENTS.EVENT_NAMES_JSON))
4536
.map(it -> {
4637
try {
47-
return objectMapper.readValue(it, typeRef);
38+
return objectMapper.readValue(it.data(), typeRef);
4839
} catch (JsonProcessingException e) {
4940
log.error("Could not parse event names", e);
5041
throw new RuntimeException(e);

application/src/main/java/net/furizon/backend/feature/pretix/order/Order.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.furizon.backend.feature.pretix.order;
22

3+
import com.google.common.hash.Hashing;
34
import lombok.AccessLevel;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
@@ -19,6 +20,7 @@
1920
import org.jetbrains.annotations.NotNull;
2021
import org.jetbrains.annotations.Nullable;
2122

23+
import java.nio.charset.StandardCharsets;
2224
import java.time.LocalDate;
2325
import java.time.LocalTime;
2426
import java.time.ZonedDateTime;
@@ -73,15 +75,19 @@ public class Order {
7375
private int answersMainPositionId = -1;
7476

7577
@Nullable
76-
private User orderOwner; //TODO load from db! (lazy load?)
78+
private User orderOwner;
7779

7880
@NotNull
79-
private Event orderEvent; //TODO load from db! (lazy load?)
81+
private Event orderEvent;
8082

8183
@NotNull
8284
@Setter(AccessLevel.NONE)
8385
private Map<String, Object> answers;
8486

87+
public int getId() {
88+
return Hashing.sha512().hashString(code, StandardCharsets.UTF_8).asInt();
89+
}
90+
8591
public boolean isDaily() {
8692
return !dailyDays.isEmpty();
8793
}

application/src/main/java/net/furizon/backend/feature/pretix/order/action/insertNewOrder/JooqInsertNewOrderAction.java

+12-4
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
import lombok.RequiredArgsConstructor;
44
import net.furizon.backend.feature.pretix.order.Order;
5+
import net.furizon.backend.feature.user.User;
56
import net.furizon.backend.infrastructure.jackson.JsonSerializer;
67
import net.furizon.backend.infrastructure.pretix.service.PretixInformation;
78
import net.furizon.jooq.infrastructure.command.SqlCommand;
89
import org.jetbrains.annotations.NotNull;
910
import org.jooq.util.postgres.PostgresDSL;
1011
import org.springframework.stereotype.Component;
1112

13+
import java.util.Optional;
14+
1215
import static net.furizon.jooq.generated.Tables.ORDERS;
1316

1417
@Component
@@ -23,10 +26,14 @@ public void invoke(
2326
@NotNull final Order order,
2427
@NotNull final PretixInformation pretixInformation
2528
) {
29+
final var userId = Optional.ofNullable(order.getOrderOwner()).map(User::getId).orElse(null);
30+
final var eventId = order.getOrderEvent().getId();
31+
2632
command.execute(
2733
PostgresDSL
2834
.insertInto(
2935
ORDERS,
36+
ORDERS.ID,
3037
ORDERS.ORDER_CODE,
3138
ORDERS.ORDER_STATUS,
3239
ORDERS.ORDER_SPONSORSHIP_TYPE,
@@ -37,11 +44,12 @@ public void invoke(
3744
ORDERS.ORDER_SECRET,
3845
ORDERS.HAS_MEMBERSHIP,
3946
ORDERS.ORDER_ANSWERS_MAIN_POSITION_ID,
40-
//ORDERS.USER_ID, TODO
41-
//ORDERS.EVENT_ID,
47+
ORDERS.USER_ID,
48+
ORDERS.EVENT_ID,
4249
ORDERS.ORDER_ANSWERS_JSON
4350
)
4451
.values(
52+
order.getId(),
4553
order.getCode(),
4654
(short) order.getOrderStatus().ordinal(),
4755
(short) order.getSponsorship().ordinal(),
@@ -52,8 +60,8 @@ public void invoke(
5260
order.getPretixOrderSecret(),
5361
order.hasMembership(),
5462
order.getAnswersMainPositionId(),
55-
//order.getOrderOwner(),
56-
//order.getOrderEvent(),
63+
userId,
64+
eventId,
5765
jsonSerializer.serializeAsJson(order.getAllAnswers(pretixInformation))
5866
)
5967
);

application/src/main/java/net/furizon/backend/feature/pretix/order/action/updateOrder/JooqUpdateOrderAction.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
import lombok.RequiredArgsConstructor;
44
import net.furizon.backend.feature.pretix.order.Order;
5+
import net.furizon.backend.feature.user.User;
56
import net.furizon.backend.infrastructure.jackson.JsonSerializer;
67
import net.furizon.backend.infrastructure.pretix.service.PretixInformation;
78
import net.furizon.jooq.infrastructure.command.SqlCommand;
89
import org.jetbrains.annotations.NotNull;
910
import org.jooq.util.postgres.PostgresDSL;
1011
import org.springframework.stereotype.Component;
1112

13+
import java.util.Optional;
14+
1215
import static net.furizon.jooq.generated.Tables.ORDERS;
1316

1417
@Component
@@ -23,6 +26,8 @@ public void invoke(
2326
@NotNull final Order order,
2427
@NotNull final PretixInformation pretixInformation
2528
) {
29+
final var userId = Optional.ofNullable(order.getOrderOwner()).map(User::getId).orElse(null);
30+
2631
command.execute(
2732
PostgresDSL
2833
.update(ORDERS)
@@ -35,10 +40,10 @@ public void invoke(
3540
.set(ORDERS.ORDER_SECRET, order.getPretixOrderSecret())
3641
.set(ORDERS.HAS_MEMBERSHIP, order.hasMembership())
3742
.set(ORDERS.ORDER_ANSWERS_MAIN_POSITION_ID, order.getAnswersMainPositionId())
38-
//.set(ORDERS.USER_ID, order.getOrderOwner())
39-
//.set(ORDERS.EVENT_ID, order.getOrderEvent())
43+
.set(ORDERS.USER_ID, userId)
44+
.set(ORDERS.EVENT_ID, order.getOrderEvent().getId())
4045
.set(ORDERS.ORDER_ANSWERS_JSON, serializer.serializeAsJson(order.getAllAnswers(pretixInformation)))
41-
.where(ORDERS.ORDER_CODE.eq(order.getCode()))
46+
.where(ORDERS.ID.eq(order.getId()))
4247
);
4348
}
4449
}

application/src/main/java/net/furizon/backend/feature/pretix/order/action/upsertOrder/JooqUpsertOrderAction.java

+12-7
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
import lombok.RequiredArgsConstructor;
44
import net.furizon.backend.feature.pretix.order.Order;
5+
import net.furizon.backend.feature.user.User;
56
import net.furizon.backend.infrastructure.jackson.JsonSerializer;
67
import net.furizon.backend.infrastructure.pretix.service.PretixInformation;
78
import net.furizon.jooq.infrastructure.command.SqlCommand;
89
import org.jetbrains.annotations.NotNull;
910
import org.jooq.util.postgres.PostgresDSL;
1011
import org.springframework.stereotype.Component;
1112

13+
import java.util.Optional;
14+
1215
import static net.furizon.jooq.generated.Tables.ORDERS;
1316

1417
@Component
@@ -33,14 +36,15 @@ public void invoke(
3336
String orderSecret = order.getPretixOrderSecret();
3437
boolean membership = order.hasMembership();
3538
int answersMainPositionId = order.getAnswersMainPositionId();
36-
//User user = order.getOrderOwner();
37-
//Event event = order.getOrderEvent();
39+
final var userId = Optional.ofNullable(order.getOrderOwner()).map(User::getId).orElse(null);
40+
final var eventId = order.getOrderEvent().getId();
3841
final var answers = jsonSerializer.serializeAsJson(order.getAllAnswers(pretixInformation));
3942

4043
command.execute(
4144
PostgresDSL
4245
.insertInto(
4346
ORDERS,
47+
ORDERS.ID,
4448
ORDERS.ORDER_CODE,
4549
ORDERS.ORDER_STATUS,
4650
ORDERS.ORDER_SPONSORSHIP_TYPE,
@@ -51,11 +55,12 @@ public void invoke(
5155
ORDERS.ORDER_SECRET,
5256
ORDERS.HAS_MEMBERSHIP,
5357
ORDERS.ORDER_ANSWERS_MAIN_POSITION_ID,
54-
//ORDERS.USER_ID, TODO
55-
//ORDERS.EVENT_ID,
58+
ORDERS.USER_ID,
59+
ORDERS.EVENT_ID,
5660
ORDERS.ORDER_ANSWERS_JSON
5761
)
5862
.values(
63+
order.getId(),
5964
code,
6065
orderStatus,
6166
sponsorship,
@@ -66,11 +71,11 @@ public void invoke(
6671
orderSecret,
6772
membership,
6873
answersMainPositionId,
69-
//user,
70-
//event,
74+
userId,
75+
eventId,
7176
answers
7277
)
73-
.onConflict(ORDERS.ORDER_CODE)
78+
.onConflict(ORDERS.ID)
7479
.doUpdate()
7580
.set(ORDERS.ORDER_STATUS, orderStatus)
7681
.set(ORDERS.ORDER_SPONSORSHIP_TYPE, sponsorship)

application/src/main/java/net/furizon/backend/feature/pretix/order/finder/JooqOrderFinder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ public class JooqOrderFinder implements OrderFinder {
4141
EVENTS.EVENT_DATE_FROM,
4242
EVENTS.EVENT_IS_CURRENT,
4343
EVENTS.EVENT_PUBLIC_URL,
44-
EVENTS.EVENT_NAMES
44+
EVENTS.EVENT_NAMES_JSON
4545
)
4646
.from(ORDERS)
4747
.leftOuterJoin(USERS)
4848
.on(USERS.USER_ID.eq(ORDERS.USER_ID))
4949
.leftOuterJoin(EVENTS)
50-
.on(EVENTS.EVENT_SLUG.eq(ORDERS.EVENT_ID))
50+
.on(EVENTS.ID.eq(ORDERS.EVENT_ID))
5151
.where(ORDERS.ORDER_CODE.eq(code))
5252
).mapOrNull(orderMapper::map);
5353
}

application/src/main/java/net/furizon/backend/feature/pretix/order/usecase/ReloadOrdersUseCase.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ public class ReloadOrdersUseCase implements UseCase<ReloadOrdersUseCase.Input, B
2727
@NotNull
2828
private final PretixOrderFinder pretixOrderFinder;
2929

30+
// TODO -> Do we need InsertNewOrderAction if we have UpsertOrderAction?
3031
@NotNull
31-
private final UpsertOrderAction insertOrUpdateOrderAction;
32+
private final UpsertOrderAction upsertOrderAction;
3233

3334
@NotNull
3435
private final DeleteOrderAction deleteOrderAction;
@@ -49,7 +50,7 @@ public Boolean executor(@NotNull Input input) {
4950
Order order = orderOpt.get();
5051
OrderStatus os = order.getOrderStatus();
5152
if (os == OrderStatus.PENDING || os == OrderStatus.PAID) {
52-
insertOrUpdateOrderAction.invoke(order, input.pretixInformation);
53+
upsertOrderAction.invoke(order, input.pretixInformation);
5354
shouldDelete = false;
5455
}
5556
}

db/migrations/000001_model.down.sql

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
DROP INDEX IF EXISTS event_slug_idx;
2+
13
DROP TABLE IF EXISTS events;
24
DROP TABLE IF EXISTS "groups";
35
DROP TABLE IF EXISTS users;

0 commit comments

Comments
 (0)