From 8d37a242acf4026c097f44c2383a7c746cff6393 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sun, 12 Oct 2025 00:55:11 -0400 Subject: fix club serialization and saving of some options --- data/personaldb.json | 92 ++++++++-------------- .../controller/userinput/menus/ManageClubs.java | 5 ++ .../controller/userinput/menus/ManageCourses.java | 8 ++ src/main/java/design/model/Club.java | 8 ++ src/main/java/design/model/Golfer.java | 2 + src/main/java/design/model/Swing.java | 4 + .../design/persistence/JSONPersonalDatabase.java | 1 + 7 files changed, 62 insertions(+), 58 deletions(-) diff --git a/data/personaldb.json b/data/personaldb.json index d03005f..3fe73c9 100644 --- a/data/personaldb.json +++ b/data/personaldb.json @@ -1,5 +1,26 @@ [ { + "clubs": [ + { + "id": 1, + "manufacture": "Bobby", + "nickname": "swen 261", + "clubType": "DRIVER" + }, + { + "id": 2, + "manufacture": "Bobby", + "nickname": "swen 262", + "clubType": "PUTTER" + }, + { + "id": 3, + "manufacture": "sowclub", + "nickname": "man", + "clubType": "WOOD" + } + ], + "nextClubId": 4, "username": "john_doe", "passwordHash": 46792755, "fullName": "John Doe", @@ -29,30 +50,15 @@ "swings": [ { "distance": 100, - "clubUsed": { - "id": 1, - "manufacture": "Bobby", - "nickname": "swen 261", - "clubType": "DRIVER" - } + "clubUsed": 1 }, { "distance": 5, - "clubUsed": { - "id": 2, - "manufacture": "Bobby", - "nickname": "swen 262", - "clubType": "PUTTER" - } + "clubUsed": 2 }, { "distance": 1, - "clubUsed": { - "id": 2, - "manufacture": "Bobby", - "nickname": "swen 262", - "clubType": "PUTTER" - } + "clubUsed": 2 } ], "swingCount": 3, @@ -63,21 +69,11 @@ "swings": [ { "distance": 1000, - "clubUsed": { - "id": 1, - "manufacture": "Bobby", - "nickname": "swen 261", - "clubType": "DRIVER" - } + "clubUsed": 1 }, { "distance": 2, - "clubUsed": { - "id": 1, - "manufacture": "Bobby", - "nickname": "swen 261", - "clubType": "DRIVER" - } + "clubUsed": 1 } ], "swingCount": 2, @@ -85,12 +81,12 @@ } ], "currentHoleIndex": 2, + "totalSwings": 5, + "totalDistance": 1108.0, "currentHole": { "number": 3, "par": 4 - }, - "totalSwings": 5, - "totalDistance": 1108.0 + } }, { "course": 1, @@ -113,12 +109,7 @@ "swings": [ { "distance": 204, - "clubUsed": { - "id": 1, - "manufacture": "Bobby", - "nickname": "swen 261", - "clubType": "DRIVER" - } + "clubUsed": 1 } ], "swingCount": 1, @@ -126,28 +117,13 @@ } ], "currentHoleIndex": 9, + "totalSwings": 1, + "totalDistance": 204.0, "currentHole": { "number": 10, "par": 3 - }, - "totalSwings": 1, - "totalDistance": 204.0 - } - ], - "clubs": [ - { - "id": 1, - "manufacture": "Bobby", - "nickname": "swen 261", - "clubType": "DRIVER" - }, - { - "id": 2, - "manufacture": "Bobby", - "nickname": "swen 262", - "clubType": "PUTTER" + } } - ], - "nextClubId": 3 + ] } ] \ No newline at end of file diff --git a/src/main/java/design/controller/userinput/menus/ManageClubs.java b/src/main/java/design/controller/userinput/menus/ManageClubs.java index f05fcee..6290444 100644 --- a/src/main/java/design/controller/userinput/menus/ManageClubs.java +++ b/src/main/java/design/controller/userinput/menus/ManageClubs.java @@ -37,6 +37,11 @@ public class ManageClubs extends Menu { var selector = new SelectClub(); selector.present(); golfer.removeClub(selector.getResult()); + try { + personalDB.updateGolfer(golfer); + } catch (IOException ex) { + System.out.println("Failed to update golfer."); + } this.present(); })); diff --git a/src/main/java/design/controller/userinput/menus/ManageCourses.java b/src/main/java/design/controller/userinput/menus/ManageCourses.java index a0d7b61..4306560 100644 --- a/src/main/java/design/controller/userinput/menus/ManageCourses.java +++ b/src/main/java/design/controller/userinput/menus/ManageCourses.java @@ -4,12 +4,15 @@ import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; import design.model.Course; import design.model.Golfer; +import design.persistence.PersonalDatabase; import design.runtime.Session; +import java.io.IOException; import java.util.List; public class ManageCourses extends Menu { private final Golfer golfer = Session.getCurrentGolfer(); + private final PersonalDatabase personalDB = PersonalDatabase.INSTANCE; @Override public String getTitle() { @@ -32,6 +35,11 @@ public class ManageCourses extends Menu { var selector = new SelectCourse(); selector.present(); golfer.removeCourse(selector.getResult()); + try { + personalDB.updateGolfer(golfer); + } catch (IOException ex) { + System.out.println("Failed to update golfer."); + } this.present(); })); diff --git a/src/main/java/design/model/Club.java b/src/main/java/design/model/Club.java index 9fa3c87..b12fd99 100644 --- a/src/main/java/design/model/Club.java +++ b/src/main/java/design/model/Club.java @@ -1,5 +1,13 @@ package design.model; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; + +@JsonIdentityInfo( + generator = ObjectIdGenerators.PropertyGenerator.class, + property = "id", + scope = Club.class +) public class Club { public enum ClubType { diff --git a/src/main/java/design/model/Golfer.java b/src/main/java/design/model/Golfer.java index 774bb78..48daae8 100644 --- a/src/main/java/design/model/Golfer.java +++ b/src/main/java/design/model/Golfer.java @@ -1,10 +1,12 @@ package design.model; import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import java.util.ArrayList; import java.util.List; +@JsonPropertyOrder({ "clubs", "nextClubId" }) public class Golfer { private String username; private int passwordHash; diff --git a/src/main/java/design/model/Swing.java b/src/main/java/design/model/Swing.java index a93b66f..43c20f0 100644 --- a/src/main/java/design/model/Swing.java +++ b/src/main/java/design/model/Swing.java @@ -1,7 +1,11 @@ package design.model; +import com.fasterxml.jackson.annotation.JsonIdentityReference; + public class Swing { private final int distance; + + @JsonIdentityReference(alwaysAsId = true) private final Club clubUsed; public Swing(int distance, Club clubUsed) { diff --git a/src/main/java/design/persistence/JSONPersonalDatabase.java b/src/main/java/design/persistence/JSONPersonalDatabase.java index 3975d14..db613d9 100644 --- a/src/main/java/design/persistence/JSONPersonalDatabase.java +++ b/src/main/java/design/persistence/JSONPersonalDatabase.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; +import design.model.Club; import design.model.Course; import design.model.Golfer; -- cgit v1.2.3