From 5771fec82e66c3d5862ed69f3918dec14ffaedf6 Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 24 Oct 2024 10:33:24 +0200 Subject: [PATCH 01/18] Started migrating the models from the original project. --- .idea/gradle.xml | 1 - model/build.gradle.kts | 15 +++ .../kotlin/net/dungeonhub/entity/Entity.kt | 3 + .../entity/EntityModelRelation.java | 10 ++ .../net/dungeonhub/entity/EntityService.java | 75 ++++++++++++ .../dungeonhub/entity/InitializingFactory.kt | 5 + .../dungeonhub/entity/model/CreationModel.kt | 3 + .../entity/model/InitializeModel.java | 14 +++ .../net/dungeonhub/entity/model/Model.kt | 3 + .../dungeonhub/entity/model/UpdateModel.kt | 5 + .../kotlin/net/dungeonhub/enums/QueueStep.kt | 7 ++ .../net/dungeonhub/enums/ScoreResetType.kt | 11 ++ .../kotlin/net/dungeonhub/enums/ScoreType.kt | 27 +++++ .../net/dungeonhub/enums/WarningAction.kt | 9 ++ .../net/dungeonhub/enums/WarningComparison.kt | 6 + .../net/dungeonhub/enums/WarningType.kt | 8 ++ .../net/dungeonhub/model/JwtTokenModel.java | 6 + .../dungeonhub/model/PurgeTypeRoleModel.java | 14 +++ .../net/dungeonhub/model/ScoreResetModel.java | 19 +++ .../net/dungeonhub/model/carry/CarryModel.kt | 44 +++++++ .../CarryDifficultyCreationModel.kt | 14 +++ .../carry_difficulty/CarryDifficultyModel.kt | 63 ++++++++++ .../CarryDifficultyUpdateModel.java | 61 ++++++++++ .../carry_queue/CarryQueueCreationModel.java | 62 ++++++++++ .../model/carry_queue/CarryQueueModel.java | 51 ++++++++ .../carry_queue/CarryQueueUpdateModel.java | 111 ++++++++++++++++++ .../carry_tier/CarryTierCreationModel.java | 29 +++++ .../model/carry_tier/CarryTierModel.java | 84 +++++++++++++ .../carry_tier/CarryTierUpdateModel.java | 75 ++++++++++++ .../carry_type/CarryTypeCreationModel.java | 54 +++++++++ .../model/carry_type/CarryTypeModel.java | 53 +++++++++ .../carry_type/CarryTypeUpdateModel.java | 42 +++++++ .../cnt_request/CntRequestCreationModel.java | 30 +++++ .../model/cnt_request/CntRequestModel.java | 32 +++++ .../cnt_request/CntRequestUpdateModel.java | 58 +++++++++ .../DiscordRoleCreationModel.java | 24 ++++ .../model/discord_role/DiscordRoleModel.java | 24 ++++ .../discord_role/DiscordRoleUpdateModel.java | 36 ++++++ .../DiscordRoleGroupCreationModel.java | 17 +++ .../DiscordRoleGroupModel.java | 16 +++ .../DiscordRoleGroupUpdateModel.java | 13 ++ .../DiscordUserCreationModel.java | 18 +++ .../model/discord_user/DiscordUserModel.java | 23 ++++ .../discord_user/DiscordUserUpdateModel.java | 44 +++++++ .../purge_type/PurgeTypeCreationModel.java | 31 +++++ .../model/purge_type/PurgeTypeModel.java | 22 ++++ .../purge_type/PurgeTypeUpdateModel.java | 27 +++++ .../model/score/LeaderboardModel.java | 48 ++++++++ .../model/score/LoggedCarryModel.java | 15 +++ .../dungeonhub/model/score/ScoreModel.java | 28 +++++ .../model/score/ScoreUpdateModel.java | 22 ++++ .../model/server/DiscordServerModel.java | 28 +++++ .../model/warning/AddedWarningModel.java | 20 ++++ .../model/warning/DetailedWarningModel.java | 38 ++++++ .../model/warning/WarningActionModel.java | 14 +++ .../model/warning/WarningCreationModel.java | 21 ++++ .../warning/WarningEvidenceCreationModel.java | 19 +++ .../model/warning/WarningEvidenceModel.java | 17 +++ .../model/warning/WarningModel.java | 36 ++++++ .../model/warning/WarningUpdateModel.java | 27 +++++ settings.gradle.kts | 3 +- 61 files changed, 1733 insertions(+), 2 deletions(-) create mode 100644 model/src/main/kotlin/net/dungeonhub/entity/Entity.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/entity/EntityModelRelation.java create mode 100644 model/src/main/kotlin/net/dungeonhub/entity/EntityService.java create mode 100644 model/src/main/kotlin/net/dungeonhub/entity/InitializingFactory.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/entity/model/CreationModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/entity/model/InitializeModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/entity/model/Model.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/entity/model/UpdateModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/enums/QueueStep.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/enums/ScoreResetType.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/enums/ScoreType.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/enums/WarningAction.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/enums/WarningComparison.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/enums/WarningType.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/model/JwtTokenModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/PurgeTypeRoleModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/ScoreResetModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry/CarryModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/server/DiscordServerModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 1feca0a..abe2587 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -8,7 +8,6 @@ diff --git a/model/build.gradle.kts b/model/build.gradle.kts index b768bd0..a66bae0 100644 --- a/model/build.gradle.kts +++ b/model/build.gradle.kts @@ -13,9 +13,24 @@ description = "The model classes that are used in the Dungeon Hub API." repositories { mavenCentral() + + maven { + url = uri("https://repo.kordex.dev/releases") + name = "KordEx (Releases)" + } + maven { + url = uri("https://repo.kordex.dev/snapshots") + name = "KordEx (Snapshots)" + } + maven { + url = uri("https://oss.sonatype.org/content/repositories/snapshots") + name = "Sonatype Snapshots (Legacy)" + } } dependencies { + api("dev.kordex:kord-extensions:2.2.1-SNAPSHOT") + testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation(kotlin("test")) diff --git a/model/src/main/kotlin/net/dungeonhub/entity/Entity.kt b/model/src/main/kotlin/net/dungeonhub/entity/Entity.kt new file mode 100644 index 0000000..ce01f0e --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/entity/Entity.kt @@ -0,0 +1,3 @@ +package net.dungeonhub.entity + +interface Entity \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/EntityModelRelation.java b/model/src/main/kotlin/net/dungeonhub/entity/EntityModelRelation.java new file mode 100644 index 0000000..2574295 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/entity/EntityModelRelation.java @@ -0,0 +1,10 @@ +package net.dungeonhub.entity; + +import me.taubsie.dungeonhub.common.entity.model.Model; +import org.jetbrains.annotations.NotNull; + +public interface EntityModelRelation extends Entity { + @NotNull Entity fromModel(@NotNull M model); + + @NotNull M toModel(); +} diff --git a/model/src/main/kotlin/net/dungeonhub/entity/EntityService.java b/model/src/main/kotlin/net/dungeonhub/entity/EntityService.java new file mode 100644 index 0000000..ec79fd1 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/entity/EntityService.java @@ -0,0 +1,75 @@ +package net.dungeonhub.entity; + +import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import me.taubsie.dungeonhub.common.entity.model.InitializeModel; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; +import me.taubsie.dungeonhub.common.exceptions.EntityUnknownException; +import org.springframework.http.HttpStatus; +import org.springframework.web.server.ResponseStatusException; + +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +public interface EntityService, M extends Model, C extends CreationModel, I extends InitializeModel, U extends UpdateModel> { + Optional loadEntityById(long id); + + Optional loadEntityByName(String name); + + List findAllEntities(); + + E createEntity(I initalizationModel); + + boolean delete(long id); + + E saveEntity(E entity); + + Function toEntity(); + + Function toModel(); + + default Optional loadById(long id) { + return loadEntityById(id).map(toModel()); + } + + default Optional loadByName(String name) { + return loadEntityByName(name).map(toModel()); + } + + default Set findAll() { + return findAllEntities().stream().map(toModel()).collect(Collectors.toSet()); + } + + default M create(I model) { + return toModel().apply(createEntity(model)); + } + + default M save(E entity) { + return toModel().apply(saveEntity(entity)); + } + + default E update(Long id, U updateModel) { + try { + //noinspection unchecked + return loadEntityById(id) + .map(e -> e.fromModel(updateModel.apply(e.toModel()))) + .map(entity -> saveEntity((E) entity)).orElseThrow(() -> new EntityUnknownException(id)); + } + catch (NumberFormatException | UnsupportedOperationException exception) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST); + } + } + + default E update(E entity, U updateModel) { + try { + //noinspection unchecked + return saveEntity((E) entity.fromModel(updateModel.apply(entity.toModel()))); + } + catch (NumberFormatException | UnsupportedOperationException exception) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST); + } + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/InitializingFactory.kt b/model/src/main/kotlin/net/dungeonhub/entity/InitializingFactory.kt new file mode 100644 index 0000000..0675118 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/entity/InitializingFactory.kt @@ -0,0 +1,5 @@ +package net.dungeonhub.entity + +interface InitializingFactory { + fun transform(entity: E): E +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/model/CreationModel.kt b/model/src/main/kotlin/net/dungeonhub/entity/model/CreationModel.kt new file mode 100644 index 0000000..5cccec5 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/entity/model/CreationModel.kt @@ -0,0 +1,3 @@ +package net.dungeonhub.entity.model + +interface CreationModel : Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/model/InitializeModel.java b/model/src/main/kotlin/net/dungeonhub/entity/model/InitializeModel.java new file mode 100644 index 0000000..871064c --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/entity/model/InitializeModel.java @@ -0,0 +1,14 @@ +package net.dungeonhub.entity.model; + +import me.taubsie.dungeonhub.common.entity.Entity; +import me.taubsie.dungeonhub.common.entity.InitializingFactory; + +public interface InitializeModel extends Model { + E toEntity(); + + InitializeModel fromCreationModel(C creationModel); + + default E toEntity(InitializingFactory factory) { + return factory.transform(toEntity()); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/model/Model.kt b/model/src/main/kotlin/net/dungeonhub/entity/model/Model.kt new file mode 100644 index 0000000..b9d4c41 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/entity/model/Model.kt @@ -0,0 +1,3 @@ +package net.dungeonhub.entity.model + +interface Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/model/UpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/entity/model/UpdateModel.kt new file mode 100644 index 0000000..7a9f98d --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/entity/model/UpdateModel.kt @@ -0,0 +1,5 @@ +package net.dungeonhub.entity.model + +interface UpdateModel { + fun apply(model: M): M +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/enums/QueueStep.kt b/model/src/main/kotlin/net/dungeonhub/enums/QueueStep.kt new file mode 100644 index 0000000..e87582c --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/enums/QueueStep.kt @@ -0,0 +1,7 @@ +package net.dungeonhub.enums + +enum class QueueStep { + Confirmation, + Transcript, + Approving +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/enums/ScoreResetType.kt b/model/src/main/kotlin/net/dungeonhub/enums/ScoreResetType.kt new file mode 100644 index 0000000..6f70b07 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/enums/ScoreResetType.kt @@ -0,0 +1,11 @@ +package net.dungeonhub.enums + +import dev.kordex.core.commands.application.slash.converters.ChoiceEnum + +enum class ScoreResetType : ChoiceEnum { + Default, + Event, + Both; + + override val readableName = name +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/enums/ScoreType.kt b/model/src/main/kotlin/net/dungeonhub/enums/ScoreType.kt new file mode 100644 index 0000000..09883cd --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/enums/ScoreType.kt @@ -0,0 +1,27 @@ +package net.dungeonhub.enums + +import dev.kordex.core.commands.application.slash.converters.ChoiceEnum + +enum class ScoreType : ChoiceEnum { + Default("current", "Current"), + Alltime("alltime", "Alltime", " (all-time)"), + Event("event", "Event", " (event)"); + + override val readableName: String + val displayName: String + val leaderboardSuffix: String? + + constructor(name: String, displayName: String) : this(name, displayName, null) + + constructor(name: String, displayName: String, leaderboardSuffix: String?) { + this.readableName = name + this.displayName = displayName + this.leaderboardSuffix = leaderboardSuffix + } + + companion object { + fun fromName(name: String): ScoreType? = entries.firstOrNull { currentType: ScoreType -> + currentType.readableName.equals(name, ignoreCase = true) + } + } +} diff --git a/model/src/main/kotlin/net/dungeonhub/enums/WarningAction.kt b/model/src/main/kotlin/net/dungeonhub/enums/WarningAction.kt new file mode 100644 index 0000000..ea0cf18 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/enums/WarningAction.kt @@ -0,0 +1,9 @@ +package net.dungeonhub.enums + +enum class WarningAction { + Timeout, + Ban, + RemoveRole, + RemoveRoleGroup, + AddRole; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/enums/WarningComparison.kt b/model/src/main/kotlin/net/dungeonhub/enums/WarningComparison.kt new file mode 100644 index 0000000..befe3d8 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/enums/WarningComparison.kt @@ -0,0 +1,6 @@ +package net.dungeonhub.enums + +enum class WarningComparison { + Equal, + GreaterOrEqual; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/enums/WarningType.kt b/model/src/main/kotlin/net/dungeonhub/enums/WarningType.kt new file mode 100644 index 0000000..db2cafd --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/enums/WarningType.kt @@ -0,0 +1,8 @@ +package net.dungeonhub.enums + +enum class WarningType { + Strike, + Minor, + Major, + Serious; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/JwtTokenModel.java b/model/src/main/kotlin/net/dungeonhub/model/JwtTokenModel.java new file mode 100644 index 0000000..489e354 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/JwtTokenModel.java @@ -0,0 +1,6 @@ +package net.dungeonhub.model; + +import java.time.Instant; + +public record JwtTokenModel(String token, Instant validUntil) { +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/PurgeTypeRoleModel.java b/model/src/main/kotlin/net/dungeonhub/model/PurgeTypeRoleModel.java new file mode 100644 index 0000000..f068484 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/PurgeTypeRoleModel.java @@ -0,0 +1,14 @@ +package net.dungeonhub.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.discord_role.DiscordRoleModel; +import me.taubsie.dungeonhub.common.model.purge_type.PurgeTypeModel; + +@Getter +@AllArgsConstructor +public class PurgeTypeRoleModel implements Model { + private PurgeTypeModel purgeTypeModel; + private DiscordRoleModel discordRoleModel; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/ScoreResetModel.java b/model/src/main/kotlin/net/dungeonhub/model/ScoreResetModel.java new file mode 100644 index 0000000..da38dc0 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/ScoreResetModel.java @@ -0,0 +1,19 @@ +package net.dungeonhub.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; + +@Getter +@AllArgsConstructor +public class ScoreResetModel implements Model { + private long defaultCount; + private long eventCount; + + public static ScoreResetModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, ScoreResetModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry/CarryModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry/CarryModel.kt new file mode 100644 index 0000000..b47bb98 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry/CarryModel.kt @@ -0,0 +1,44 @@ +package net.dungeonhub.model.carry + +import net.dungeonhub.entity.model.Model +import net.dungeonhub.model.carry_difficulty.CarryDifficultyModel +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.service.MoshiService +import java.time.Instant + +data class CarryModel( + val id: Long, + val amount: Long, + val carryDifficulty: CarryDifficultyModel, + val player: DiscordUserModel, + val carrier: DiscordUserModel, + val approver: Long?, + val attachmentLink: String?, + val time: Instant? +): Model { + val carryTier = carryDifficulty.carryTier + val carryType = carryDifficulty.carryType + + val scoreMultiplier = carryDifficulty.score + + fun calculatePrice(): Long { + val bulkPrice = carryDifficulty.bulkPrice + val bulkAmount = carryDifficulty.bulkAmount + + if (bulkPrice != null && bulkAmount != null && bulkAmount <= amount) { + return bulkPrice.toLong() + } + + return carryDifficulty.price.toLong() + } + + fun calculateScore(): Long { + return scoreMultiplier * amount + } + + companion object { + fun fromString(json: String): CarryModel { + return MoshiService.moshi.adapter(CarryModel::class.java).fromJson(json)!! + } + } +} diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt new file mode 100644 index 0000000..a993928 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt @@ -0,0 +1,14 @@ +package net.dungeonhub.model.carry_difficulty + +import net.dungeonhub.entity.model.CreationModel + +class CarryDifficultyCreationModel( + var identifier: String, + var displayName: String, + var thumbnailUrl: String?, + var bulkPrice: Int?, + var bulkAmount: Int?, + var priceName: String?, + var price: Int?, + var score: Int? +) : CreationModel \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt new file mode 100644 index 0000000..5567fe8 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt @@ -0,0 +1,63 @@ +package net.dungeonhub.model.carry_difficulty + +import net.dungeonhub.entity.model.Model +import net.dungeonhub.model.carry_tier.CarryTierModel +import net.dungeonhub.model.carry_type.CarryTypeModel +import net.dungeonhub.service.MoshiService +import kotlin.math.max + +class CarryDifficultyModel( + val id: Long, + val identifier: String, + val displayName: String, + val carryTier: CarryTierModel, + val price: Int, + bulkPrice: Int?, + bulkAmount: Int?, + score: Int, + thumbnailUrl: String?, + priceName: String? +) : Model { + val bulkPrice = bulkPrice + get() = if (field != null && field > 0) field else null + + val bulkAmount = bulkAmount + get() = if (field != null && field > 0) field else null + + val score = score + get() = max(field, 0) + + val thumbnailUrl: String? = thumbnailUrl + //TODO + get() = field //field ?: carryTier.thumbnailUrl + + val priceName = priceName + get() = (if(!field.isNullOrBlank()) field else null) ?: displayName + + val carryType: CarryTypeModel + //TODO + get() = CarryTypeModel() //carryTier.carryType + + fun toJson(): String { + return MoshiService.moshi.adapter(CarryDifficultyModel::class.java).toJson(this) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as CarryDifficultyModel + + return id == other.id + } + + override fun hashCode(): Int { + return id.hashCode() + } + + companion object { + fun fromJson(json: String): CarryDifficultyModel { + return MoshiService.moshi.adapter(CarryDifficultyModel::class.java).fromJson(json)!! + } + } +} diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.java new file mode 100644 index 0000000..7b8a9a5 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.java @@ -0,0 +1,61 @@ +package net.dungeonhub.model.carry_difficulty; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class CarryDifficultyUpdateModel implements UpdateModel { + private String displayName; + private String thumbnailUrl; + private Integer bulkPrice; + private Integer bulkAmount; + private String priceName; + private Integer price; + private Integer score; + + @Override + public CarryDifficultyModel apply(CarryDifficultyModel model) { + if (displayName != null) { + model.setDisplayName(displayName); + } + + if (thumbnailUrl != null) { + model.setThumbnailUrl(thumbnailUrl); + } + + if (bulkPrice != null) { + model.setBulkPrice(bulkPrice); + } + + if (bulkAmount != null) { + model.setBulkAmount(bulkAmount); + } + + if (priceName != null) { + model.setPriceName(priceName); + } + + if (price != null) { + model.setPrice(price); + } + + if (score != null) { + model.setScore(score); + } + + return model; + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.java new file mode 100644 index 0000000..bbf1bb4 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.java @@ -0,0 +1,62 @@ +package net.dungeonhub.model.carry_queue; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import me.taubsie.dungeonhub.common.enums.QueueStep; + +import java.time.Instant; + +@NoArgsConstructor +@Getter +public class CarryQueueCreationModel implements CreationModel { + private QueueStep queueStep; + private Long carrier; + private Long player; + private Long amount; + private Long relationId; + private String attachmentLink; + private Instant time; + + public CarryQueueCreationModel setQueueStep(QueueStep queueStep) { + this.queueStep = queueStep; + return this; + } + + public CarryQueueCreationModel setCarrier(Long carrier) { + this.carrier = carrier; + return this; + } + + public CarryQueueCreationModel setPlayer(Long player) { + this.player = player; + return this; + } + + public CarryQueueCreationModel setAmount(Long amount) { + this.amount = amount; + return this; + } + + public CarryQueueCreationModel setRelationId(Long relationId) { + this.relationId = relationId; + return this; + } + + public CarryQueueCreationModel setAttachmentLink(String attachmentLink) { + this.attachmentLink = attachmentLink; + return this; + } + + public CarryQueueCreationModel setTime(Instant time) { + this.time = time; + return this; + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.java new file mode 100644 index 0000000..5aa4b93 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.java @@ -0,0 +1,51 @@ +package net.dungeonhub.model.carry_queue; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.enums.QueueStep; +import me.taubsie.dungeonhub.common.model.carry_difficulty.CarryDifficultyModel; +import me.taubsie.dungeonhub.common.model.carry_tier.CarryTierModel; +import me.taubsie.dungeonhub.common.model.carry_type.CarryTypeModel; +import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; + +import java.time.Instant; + +@AllArgsConstructor +@Getter +@Setter +public class CarryQueueModel implements Model { + private final long id; + private QueueStep queueStep; + private DiscordUserModel carrier; + private DiscordUserModel player; + private Long amount; + private CarryDifficultyModel carryDifficulty; + private Long relationId; + private String attachmentLink; + private Instant time; + + public static CarryQueueModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, CarryQueueModel.class); + } + + public CarryTypeModel getCarryType() { + return getCarryTier().getCarryType(); + } + + public CarryTierModel getCarryTier() { + return getCarryDifficulty().getCarryTier(); + } + + public long calculateScore() { + return getScoreMultiplier() * getAmount(); + } + + private long getScoreMultiplier() { + return getCarryDifficulty().getScore(); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.java new file mode 100644 index 0000000..cc51dd4 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.java @@ -0,0 +1,111 @@ +package net.dungeonhub.model.carry_queue; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; +import me.taubsie.dungeonhub.common.enums.QueueStep; +import me.taubsie.dungeonhub.common.model.carry_difficulty.CarryDifficultyModel; +import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; + +import java.time.Instant; + +@NoArgsConstructor +public class CarryQueueUpdateModel implements UpdateModel { + private QueueStep queueStep; + private DiscordUserModel carrier; + private DiscordUserModel player; + private Long amount; + private CarryDifficultyModel carryDifficulty; + private Long relationId; + private String attachmentLink; + private Instant time; + @Getter + private Long approver; + + public CarryQueueUpdateModel setQueueStep(QueueStep queueStep) { + this.queueStep = queueStep; + return this; + } + + public CarryQueueUpdateModel setCarrier(DiscordUserModel carrier) { + this.carrier = carrier; + return this; + } + + public CarryQueueUpdateModel setPlayer(DiscordUserModel player) { + this.player = player; + return this; + } + + public CarryQueueUpdateModel setAmount(Long amount) { + this.amount = amount; + return this; + } + + public CarryQueueUpdateModel setCarryDifficulty(CarryDifficultyModel carryDifficulty) { + this.carryDifficulty = carryDifficulty; + return this; + } + + public CarryQueueUpdateModel setRelationId(Long relationId) { + this.relationId = relationId; + return this; + } + + public CarryQueueUpdateModel setAttachmentLink(String attachmentLink) { + this.attachmentLink = attachmentLink; + return this; + } + + public CarryQueueUpdateModel setTime(Instant time) { + this.time = time; + return this; + } + + public CarryQueueUpdateModel setApprover(Long approver) { + this.approver = approver; + return this; + } + + @Override + public CarryQueueModel apply(CarryQueueModel carryQueueModel) { + if (queueStep != null) { + carryQueueModel.setQueueStep(queueStep); + } + + if (carrier != null) { + carryQueueModel.setCarrier(carrier); + } + + if (player != null) { + carryQueueModel.setPlayer(player); + } + + if (amount != null) { + carryQueueModel.setAmount(amount); + } + + if (carryDifficulty != null) { + carryQueueModel.setCarryDifficulty(carryDifficulty); + } + + if (relationId != null) { + carryQueueModel.setRelationId(relationId); + } + + if (attachmentLink != null) { + carryQueueModel.setAttachmentLink(attachmentLink); + } + + if (time != null) { + carryQueueModel.setTime(time); + } + + return carryQueueModel; + } + + public String toJson() { + return DungeonHubService.getInstance().getGson().toJson(this); + } +} diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.java new file mode 100644 index 0000000..4d0dba2 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.java @@ -0,0 +1,29 @@ +package net.dungeonhub.model.carry_tier; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class CarryTierCreationModel implements CreationModel { + private String identifier; + private String displayName; + private Long category; + private Long priceChannel; + private String descriptiveName; + private String thumbnailUrl; + private String priceTitle; + private String priceDescription; + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.java new file mode 100644 index 0000000..a35cd65 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.java @@ -0,0 +1,84 @@ +package net.dungeonhub.model.carry_tier; + +import lombok.*; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.carry_type.CarryTypeModel; + +import java.util.Optional; + +@EqualsAndHashCode(onlyExplicitlyIncluded = true) +@AllArgsConstructor +@Getter +@Setter +public class CarryTierModel implements Model { + private Long category; + private Long priceChannel; + private String descriptiveName; + private String thumbnailUrl; + private String priceTitle; + private String priceDescription; + @EqualsAndHashCode.Include + @Setter(AccessLevel.NONE) + private long id; + @Setter(AccessLevel.NONE) + private String identifier; + private String displayName; + private CarryTypeModel carryType; + + public static CarryTierModel fromJson(String json) { + return DungeonHubService.getInstance().getGson().fromJson(json, CarryTierModel.class); + } + + public String getDescriptiveName() { + return getActualDescriptiveName().orElse(getDisplayName()); + } + + public Optional getActualDescriptiveName() { + return Optional.ofNullable(descriptiveName == null || descriptiveName.isBlank() ? null : descriptiveName); + } + + public Optional getCategory() { + return Optional.ofNullable(category > 0L ? category : null); + } + + public long getActualCategory() { + return category; + } + + public Optional getThumbnailUrl() { + return Optional.ofNullable(thumbnailUrl == null || thumbnailUrl.isBlank() ? null : thumbnailUrl); + } + + public String getActualThumbnailUrl() { + return thumbnailUrl; + } + + public String getPriceTitle() { + return getActualPriceTitle().orElse(getDescriptiveName()); + } + + public Optional getActualPriceTitle() { + return Optional.ofNullable(priceTitle == null || priceTitle.isBlank() ? null : priceTitle); + } + + public Optional getPriceDescription() { + return Optional.ofNullable(priceDescription == null || priceDescription.isBlank() ? null : priceDescription); + } + + public String getActualPriceDescription() { + return priceDescription; + } + + public Optional getPriceChannel() { + return Optional.ofNullable(priceChannel != null && priceChannel > 0L ? priceChannel : null); + } + + public Long getActualPriceChannel() { + return priceChannel; + } + + public String toJson() { + return DungeonHubService.getInstance().getGson().toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.java new file mode 100644 index 0000000..d8b4eaf --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.java @@ -0,0 +1,75 @@ +package net.dungeonhub.model.carry_tier; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class CarryTierUpdateModel implements UpdateModel { + private Long category; + private Long priceChannel; + private String descriptiveName; + private String thumbnailUrl; + private String priceTitle; + private String priceDescription; + private String displayName; + + public static CarryTierUpdateModel fromCarryTier(CarryTierModel carryTier) { + return new CarryTierUpdateModel(carryTier.getCategory().orElse(null), + carryTier.getPriceChannel().orElse(null), + carryTier.getActualDescriptiveName().orElse(null), + carryTier.getThumbnailUrl().orElse(null), carryTier.getActualPriceTitle().orElse(null), + carryTier.getPriceDescription().orElse(null), carryTier.getDisplayName()); + } + + public static CarryTierUpdateModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, CarryTierUpdateModel.class); + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } + + @Override + public CarryTierModel apply(CarryTierModel model) { + if (category != null) { + model.setCategory(category); + } + + if (priceChannel != null) { + model.setPriceChannel(priceChannel); + } + + if (descriptiveName != null) { + model.setDescriptiveName(descriptiveName); + } + + if (thumbnailUrl != null) { + model.setThumbnailUrl(thumbnailUrl); + } + + if (priceTitle != null) { + model.setPriceTitle(priceTitle); + } + + if (priceDescription != null) { + model.setPriceDescription(priceDescription); + } + + if (displayName != null) { + model.setDisplayName(displayName); + } + + return model; + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.java new file mode 100644 index 0000000..13a3860 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.java @@ -0,0 +1,54 @@ +package net.dungeonhub.model.carry_type; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class CarryTypeCreationModel implements CreationModel { + private String identifier; + private String displayName; + private Long logChannel; + private Long leaderboardChannel; + private Boolean eventActive; + + public CarryTypeCreationModel(String identifier, String displayName) { + this.identifier = identifier; + this.displayName = displayName; + } + + public CarryTypeCreationModel setIdentifier(String identifier) { + this.identifier = identifier; + return this; + } + + public CarryTypeCreationModel setDisplayName(String displayName) { + this.displayName = displayName; + return this; + } + + public CarryTypeCreationModel setLogChannel(Long logChannel) { + this.logChannel = logChannel; + return this; + } + + public CarryTypeCreationModel setLeaderboardChannel(Long leaderboardChannel) { + this.leaderboardChannel = leaderboardChannel; + return this; + } + + public CarryTypeCreationModel setEventActive(Boolean eventActive) { + this.eventActive = eventActive; + return this; + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.java new file mode 100644 index 0000000..84bc206 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.java @@ -0,0 +1,53 @@ +package net.dungeonhub.model.carry_type; + +import lombok.*; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; + +import java.util.Optional; + +@EqualsAndHashCode(onlyExplicitlyIncluded = true) +@AllArgsConstructor +@Getter +@Setter +public class CarryTypeModel implements Model { + @EqualsAndHashCode.Include + @Setter(AccessLevel.NONE) + private long id; + @Setter(AccessLevel.NONE) + private String identifier; + private String displayName; + private DiscordServerModel server; + private Long logChannel; + private Long leaderboardChannel; + private Boolean eventActive; + + public static CarryTypeModel fromJson(String json) { + return DungeonHubService.getInstance().getGson().fromJson(json, CarryTypeModel.class); + } + + public Long getActualLogChannel() { + return logChannel; + } + + public Long getActualLeaderboardChannel() { + return leaderboardChannel; + } + + public Optional getLogChannel() { + return Optional.ofNullable(logChannel != null && logChannel > 0 ? logChannel : null); + } + + public Optional getLeaderboardChannel() { + return Optional.ofNullable(leaderboardChannel != null && leaderboardChannel > 0 ? leaderboardChannel : null); + } + + public boolean isEventActive() { + return Boolean.TRUE.equals(eventActive); + } + + public String toJson() { + return DungeonHubService.getInstance().getGson().toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.java new file mode 100644 index 0000000..f735203 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.java @@ -0,0 +1,42 @@ +package net.dungeonhub.model.carry_type; + +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; + +@Getter +@Setter +public class CarryTypeUpdateModel implements UpdateModel { + private String displayName; + private Long logChannel; + private Long leaderboardChannel; + private Boolean eventActive; + + @Override + public CarryTypeModel apply(CarryTypeModel carryTypeModel) { + if(displayName != null) { + carryTypeModel.setDisplayName(displayName); + } + + if(logChannel != null) { + carryTypeModel.setLogChannel(logChannel); + } + + if(leaderboardChannel != null) { + carryTypeModel.setLeaderboardChannel(leaderboardChannel); + } + + if(eventActive != null) { + carryTypeModel.setEventActive(eventActive); + } + + return carryTypeModel; + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.java new file mode 100644 index 0000000..c5e26f5 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.java @@ -0,0 +1,30 @@ +package net.dungeonhub.model.cnt_request; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; + +import javax.annotation.Nullable; +import java.time.Instant; + +@Getter +@Setter +@AllArgsConstructor +public class CntRequestCreationModel implements CreationModel { + private long messageId; + private Long user; + @Nullable + private Long claimer; + private Instant time; + private String coinValue; + private String description; + private String requirement; + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.java b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.java new file mode 100644 index 0000000..6d82a94 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.java @@ -0,0 +1,32 @@ +package net.dungeonhub.model.cnt_request; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; +import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; + +import java.time.Instant; + +@Getter +@Setter +@AllArgsConstructor +public class CntRequestModel implements Model { + private long id; + private long messageId; + private DiscordServerModel discordServer; + private DiscordUserModel user; + private DiscordUserModel claimer; + private Instant time; + private String coinValue; + private String description; + private String requirement; + + public static CntRequestModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, CntRequestModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.java new file mode 100644 index 0000000..b41bcbe --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.java @@ -0,0 +1,58 @@ +package net.dungeonhub.model.cnt_request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; +import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; + +import javax.annotation.Nullable; + +@Getter +@Setter +@AllArgsConstructor +@Builder +public class CntRequestUpdateModel implements UpdateModel { + //TODO discuss -> needs to be changable? + //private long messageId; + @Nullable + private DiscordUserModel claimer; + private boolean removeClaimer; + @Nullable + private String coinValue; + @Nullable + private String description; + @Nullable + private String requirement; + + @Override + public CntRequestModel apply(CntRequestModel model) { + if(removeClaimer) { + model.setClaimer(null); + } + + if(claimer != null) { + model.setClaimer(claimer); + } + + if(coinValue != null) { + model.setCoinValue(coinValue); + } + + if(description != null) { + model.setDescription(description); + } + + if(requirement != null) { + model.setRequirement(requirement); + } + + return model; + } + + public String toJson() { + return DungeonHubService.getInstance().getGson().toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.java new file mode 100644 index 0000000..5e84ff3 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.java @@ -0,0 +1,24 @@ +package net.dungeonhub.model.discord_role; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class DiscordRoleCreationModel implements CreationModel { + private long id; + private String nameSchema; + private boolean verifiedRole; + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.java new file mode 100644 index 0000000..8e431ac --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.java @@ -0,0 +1,24 @@ +package net.dungeonhub.model.discord_role; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; + +@Getter +@Setter +@AllArgsConstructor +public class DiscordRoleModel implements Model { + private long id; + private String nameSchema; + private boolean verifiedRole; + private DiscordServerModel discordServerModel; + + public static DiscordRoleModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, DiscordRoleModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.java new file mode 100644 index 0000000..0d37c97 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.java @@ -0,0 +1,36 @@ +package net.dungeonhub.model.discord_role; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class DiscordRoleUpdateModel implements UpdateModel { + private String nameSchema; + private Boolean verifiedRole; + + @Override + public DiscordRoleModel apply(DiscordRoleModel model) { + if (nameSchema != null) { + model.setNameSchema(nameSchema); + } + + if (verifiedRole != null) { + model.setVerifiedRole(verifiedRole); + } + + return model; + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.java new file mode 100644 index 0000000..e1e42ab --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.java @@ -0,0 +1,17 @@ +package net.dungeonhub.model.discord_role_group; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import me.taubsie.dungeonhub.common.model.discord_role.DiscordRoleModel; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class DiscordRoleGroupCreationModel implements CreationModel { + private DiscordRoleModel discordRole; + private DiscordRoleModel roleGroup; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.java new file mode 100644 index 0000000..4f317dd --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.java @@ -0,0 +1,16 @@ +package net.dungeonhub.model.discord_role_group; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.discord_role.DiscordRoleModel; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class DiscordRoleGroupModel implements Model { + private long id; + private DiscordRoleModel discordRole; + private DiscordRoleModel roleGroup; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.java new file mode 100644 index 0000000..2af1cc7 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.java @@ -0,0 +1,13 @@ +package net.dungeonhub.model.discord_role_group; + +import lombok.NoArgsConstructor; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; + +@NoArgsConstructor +public class DiscordRoleGroupUpdateModel implements UpdateModel { + //this won't be updated, still needs to exist due to internal references + @Override + public DiscordRoleGroupModel apply(DiscordRoleGroupModel model) { + return model; + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.java new file mode 100644 index 0000000..fe80929 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.java @@ -0,0 +1,18 @@ +package net.dungeonhub.model.discord_user; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; + +import java.util.UUID; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class DiscordUserCreationModel implements CreationModel { + private long id; + private UUID minecraftId; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.java new file mode 100644 index 0000000..f3a6722 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.java @@ -0,0 +1,23 @@ +package net.dungeonhub.model.discord_user; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; + +import java.util.UUID; + +@Getter +@Setter +@AllArgsConstructor +public class DiscordUserModel implements Model { + private final long id; + private UUID minecraftId; + + public static DiscordUserModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, DiscordUserModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.java new file mode 100644 index 0000000..9aaf4e8 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.java @@ -0,0 +1,44 @@ +package net.dungeonhub.model.discord_user; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; + +import java.util.UUID; + +@Getter +@Setter +@NoArgsConstructor +public class DiscordUserUpdateModel implements UpdateModel { + private UUID minecraftId; + private boolean removeMinecraftId = false; + + public DiscordUserUpdateModel(UUID minecraftId) { + this.minecraftId = minecraftId; + } + + public DiscordUserUpdateModel(boolean removeMinecraftId) { + this.removeMinecraftId = removeMinecraftId; + } + + @Override + public DiscordUserModel apply(DiscordUserModel model) { + if (removeMinecraftId) { + model.setMinecraftId(null); + } + + if (minecraftId != null) { + model.setMinecraftId(minecraftId); + } + + return model; + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.java new file mode 100644 index 0000000..ee06357 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.java @@ -0,0 +1,31 @@ +package net.dungeonhub.model.purge_type; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class PurgeTypeCreationModel implements CreationModel { + private String identifier; + private String displayName; + + public PurgeTypeCreationModel setIdentifier(String identifier) { + this.identifier = identifier; + return this; + } + + public PurgeTypeCreationModel setDisplayName(String displayName) { + this.displayName = displayName; + return this; + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.java b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.java new file mode 100644 index 0000000..7be5f09 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.java @@ -0,0 +1,22 @@ +package net.dungeonhub.model.purge_type; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.PurgeTypeRoleModel; +import me.taubsie.dungeonhub.common.model.carry_type.CarryTypeModel; + +import java.util.List; + +@AllArgsConstructor +@Getter +public class PurgeTypeModel implements Model { + private long id; + private String identifier; + @Setter + private String displayName; + private CarryTypeModel carryType; + @Setter + private List purgeTypeRoleModels; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.java new file mode 100644 index 0000000..3d6dc5b --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.java @@ -0,0 +1,27 @@ +package net.dungeonhub.model.purge_type; + +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; + +@Getter +@Setter +public class PurgeTypeUpdateModel implements UpdateModel { + private String displayName; + + @Override + public PurgeTypeModel apply(PurgeTypeModel purgeTypeModel) { + if (displayName != null) { + purgeTypeModel.setDisplayName(displayName); + } + + return purgeTypeModel; + } + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.java b/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.java new file mode 100644 index 0000000..59a4760 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.java @@ -0,0 +1,48 @@ +package net.dungeonhub.model.score; + +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; + +import java.util.List; +import java.util.Optional; + +@Getter +public class LeaderboardModel { + private final int page; + private final int totalPages; + private final List scores; + + @Setter + private Integer playerPosition; + @Setter + private ScoreModel playerScore; + + public LeaderboardModel(int page, int totalPages, List scores) { + this.page = page; + this.totalPages = totalPages; + this.scores = scores; + } + + public static LeaderboardModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, LeaderboardModel.class); + } + + public Optional getPlayerPosition() { + return Optional.ofNullable(playerPosition); + } + + public Optional getPlayerScore() { + return Optional.ofNullable(playerScore); + } + + public boolean hasNextPage() { + return page < totalPages - 1; + } + + public boolean hasPrevPage() { + return page > 0; + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.java b/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.java new file mode 100644 index 0000000..593b4ed --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.java @@ -0,0 +1,15 @@ +package net.dungeonhub.model.score; + +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.carry.CarryModel; + +import java.util.List; + +public record LoggedCarryModel(CarryModel carryModel, List scoreModels) implements Model { + public static LoggedCarryModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, LoggedCarryModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.java b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.java new file mode 100644 index 0000000..5683382 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.java @@ -0,0 +1,28 @@ +package net.dungeonhub.model.score; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.enums.ScoreType; +import me.taubsie.dungeonhub.common.model.carry_type.CarryTypeModel; +import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; +import org.jetbrains.annotations.Nullable; + +@AllArgsConstructor +@Getter +@Setter +public class ScoreModel implements Model { + private DiscordUserModel carrier; + @Nullable + private CarryTypeModel carryType; + private ScoreType scoreType; + private Long scoreAmount; + + public static ScoreModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, ScoreModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.java new file mode 100644 index 0000000..5e8be7a --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.java @@ -0,0 +1,22 @@ +package net.dungeonhub.model.score; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +public class ScoreUpdateModel { + private long id; + private long amount; + + public String toJson() { + return DungeonHubService.getInstance() + .getGson() + .toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/server/DiscordServerModel.java b/model/src/main/kotlin/net/dungeonhub/model/server/DiscordServerModel.java new file mode 100644 index 0000000..ba7f9f1 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/server/DiscordServerModel.java @@ -0,0 +1,28 @@ +package net.dungeonhub.model.server; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; + +@AllArgsConstructor +@Getter +@Setter +public class DiscordServerModel implements Model, CreationModel, UpdateModel { + private long id; + + public static DiscordServerModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, DiscordServerModel.class); + } + + @Override + public DiscordServerModel apply(DiscordServerModel discordServerModel) { + discordServerModel.setId(id); + return discordServerModel; + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.java new file mode 100644 index 0000000..5251b8b --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.java @@ -0,0 +1,20 @@ +package net.dungeonhub.model.warning; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import me.taubsie.dungeonhub.common.DungeonHubService; + +import java.util.List; + +@AllArgsConstructor +@Getter +public class AddedWarningModel { + private WarningModel warningModel; + private List warningActionModel; + + public static AddedWarningModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, AddedWarningModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.java new file mode 100644 index 0000000..e1e3717 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.java @@ -0,0 +1,38 @@ +package net.dungeonhub.model.warning; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.enums.WarningType; +import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; +import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; + +import javax.annotation.Nullable; +import java.time.Instant; +import java.util.List; + +@AllArgsConstructor +@Getter +public class DetailedWarningModel implements Model { + private long id; + private DiscordServerModel server; + private DiscordUserModel user; + private DiscordUserModel striker; + @Setter + private WarningType warningType; + @Nullable + @Setter + private String reason; + @Setter + private boolean active; + private Instant time; + private List evidences; + + public static DetailedWarningModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, DetailedWarningModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.java new file mode 100644 index 0000000..a28c642 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.java @@ -0,0 +1,14 @@ +package net.dungeonhub.model.warning; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import me.taubsie.dungeonhub.common.enums.WarningAction; +import org.jetbrains.annotations.NotNull; + +@AllArgsConstructor +@Getter +public class WarningActionModel { + @NotNull + private WarningAction warningAction; + private String data; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.java new file mode 100644 index 0000000..7c40219 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.java @@ -0,0 +1,21 @@ +package net.dungeonhub.model.warning; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import me.taubsie.dungeonhub.common.enums.WarningType; + +@AllArgsConstructor +@Getter +public class WarningCreationModel implements CreationModel { + private long user; + private long striker; + private WarningType warningType; + private String reason; + private boolean active; + + public String toJson() { + return DungeonHubService.getInstance().getGson().toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.java new file mode 100644 index 0000000..5e3bb3b --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.java @@ -0,0 +1,19 @@ +package net.dungeonhub.model.warning; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.CreationModel; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class WarningEvidenceCreationModel implements CreationModel { + private String evidence; + private long submitter; + + public String toJson() { + return DungeonHubService.getInstance().getGson().toJson(this); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.java new file mode 100644 index 0000000..c87c154 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.java @@ -0,0 +1,17 @@ +package net.dungeonhub.model.warning; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class WarningEvidenceModel implements Model { + private long id; + private WarningModel warningModel; + private String evidence; + private DiscordUserModel submitter; +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.java new file mode 100644 index 0000000..eb8af7b --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.java @@ -0,0 +1,36 @@ +package net.dungeonhub.model.warning; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import me.taubsie.dungeonhub.common.DungeonHubService; +import me.taubsie.dungeonhub.common.entity.model.Model; +import me.taubsie.dungeonhub.common.enums.WarningType; +import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; +import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; + +import javax.annotation.Nullable; +import java.time.Instant; + +@AllArgsConstructor +@Getter +public class WarningModel implements Model { + private long id; + private DiscordServerModel server; + private DiscordUserModel user; + private DiscordUserModel striker; + @Setter + private WarningType warningType; + @Nullable + @Setter + private String reason; + @Setter + private boolean active; + private Instant time; + + public static WarningModel fromJson(String json) { + return DungeonHubService.getInstance() + .getGson() + .fromJson(json, WarningModel.class); + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.java new file mode 100644 index 0000000..345a1f2 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.java @@ -0,0 +1,27 @@ +package net.dungeonhub.model.warning; + +import me.taubsie.dungeonhub.common.entity.model.UpdateModel; +import me.taubsie.dungeonhub.common.enums.WarningType; + +public class WarningUpdateModel implements UpdateModel { + private WarningType warningType; + private String reason; + private Boolean active; + + @Override + public WarningModel apply(WarningModel model) { + if(warningType != null) { + model.setWarningType(warningType); + } + + if(reason != null) { + model.setReason(reason); + } + + if(active != null) { + model.setActive(active); + } + + return model; + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 5d6b38c..3bb4062 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,4 +4,5 @@ plugins { rootProject.name = "dungeon-hub-api" include(":model") -include(":client") +//TODO uncomment +//include(":client") From 7ae07057741706f33cde0f33464d693d8dc2e0ae Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 24 Oct 2024 12:09:02 +0200 Subject: [PATCH 02/18] Implemented a new json library. --- model/build.gradle.kts | 7 +- .../net/dungeonhub/service/MoshiService.kt | 65 ++++++++++++++ .../dungeonhub/service/MoshiServiceTest.kt | 87 +++++++++++++++++++ 3 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt create mode 100644 model/src/test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt diff --git a/model/build.gradle.kts b/model/build.gradle.kts index b768bd0..5b1ef88 100644 --- a/model/build.gradle.kts +++ b/model/build.gradle.kts @@ -3,7 +3,8 @@ import net.thebugmc.gradle.sonatypepublisher.PublishingType plugins { id("java-library") id("net.thebugmc.gradle.sonatype-central-portal-publisher").version("1.2.3") - kotlin("jvm") version "2.0.20" + kotlin("jvm") version "2.0.21" + id("com.google.devtools.ksp").version("2.0.21-1.0.26") } group = "net.dungeon-hub.api" @@ -16,6 +17,10 @@ repositories { } dependencies { + implementation("com.squareup.moshi:moshi-kotlin:1.15.1") + + ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.1") + testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation(kotlin("test")) diff --git a/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt b/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt new file mode 100644 index 0000000..eb302a0 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt @@ -0,0 +1,65 @@ +package net.dungeonhub.service + +import com.squareup.moshi.* +import java.awt.Color +import java.time.Instant + +object MoshiService { + //TODO add type adapter for kord embeds ? + val moshi: Moshi = Moshi.Builder() + .add(Instant::class.java, InstantAdapter()) + .add(Color::class.java, ColorAdapter()) + .build() + + class InstantAdapter : JsonAdapter() { + override fun toJson(writer: JsonWriter, instant: Instant?) { + if(instant == null) { + writer.nullValue() + return + } + + writer.value(instant.toEpochMilli()) + } + + override fun fromJson(reader: JsonReader): Instant? { + if(reader.peek() == JsonReader.Token.NULL) { + reader.nextNull() + return null + } + + return Instant.ofEpochMilli(reader.nextLong()) + } + } + + class ColorAdapter : JsonAdapter() { + override fun fromJson(reader: JsonReader): Color? { + if(reader.peek() == JsonReader.Token.NULL) { + reader.nextNull() + return null + } + + val hexString = reader.nextString() + + //If the String doesn't start with a # this wasn't encoded with this adapter + // --> This might have come from the old library and is just not hex encoded + if(!hexString.startsWith("#")) { + return Color.decode(hexString) + } + + val colorValue = Integer.parseUnsignedInt(hexString.substring(1), 16) + + return Color.decode(colorValue.toString()) + } + + override fun toJson(writer: JsonWriter, color: Color?) { + if(color == null) { + writer.nullValue() + return + } + + writer.value("#${Integer.toHexString( + color.red * 256 * 256 + color.green * 256 + color.blue + ).uppercase()}") + } + } +} \ No newline at end of file diff --git a/model/src/test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt b/model/src/test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt new file mode 100644 index 0000000..2a1df4f --- /dev/null +++ b/model/src/test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt @@ -0,0 +1,87 @@ +package net.dungeonhub.service + +import com.squareup.moshi.JsonClass +import com.squareup.moshi.JsonDataException +import com.squareup.moshi.JsonEncodingException +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows +import java.awt.Color +import java.time.Instant +import kotlin.test.assertEquals +import kotlin.test.assertNotEquals + +class MoshiServiceTest { + @Test + fun testColorAdapter() { + val whiteColor = Color(255, 255, 255) + val dungeonHubColor = Color(165, 23, 112) + + val whiteHex = "#FFFFFF" + val dungeonHubHex = "#A51770" + + val whiteInt = Integer.parseUnsignedInt(whiteHex.substring(1), 16) + val dungeonHubInt = Integer.parseUnsignedInt(dungeonHubHex.substring(1), 16) + + assertEquals(whiteHex, MoshiService.moshi.adapter(Color::class.java).toJsonValue(whiteColor)) + assertEquals(dungeonHubHex, MoshiService.moshi.adapter(Color::class.java).toJsonValue(dungeonHubColor)) + + assertEquals(whiteColor, MoshiService.moshi.adapter(Color::class.java).fromJsonValue(whiteHex)) + assertEquals(dungeonHubColor, MoshiService.moshi.adapter(Color::class.java).fromJsonValue(dungeonHubHex)) + + assertEquals(whiteColor, MoshiService.moshi.adapter(Color::class.java).fromJsonValue(whiteInt.toString())) + assertEquals( + dungeonHubColor, + MoshiService.moshi.adapter(Color::class.java).fromJsonValue(dungeonHubInt.toString()) + ) + } + + @Test + fun testInstantAdapter() { + val currentMillis = System.currentTimeMillis() + val currentInstant = Instant.ofEpochMilli(currentMillis) + + val epoch = 0L + val epochInstant = Instant.ofEpochMilli(epoch) + + assertEquals(currentMillis, MoshiService.moshi.adapter(Instant::class.java).toJsonValue(currentInstant)) + assertEquals(currentInstant, MoshiService.moshi.adapter(Instant::class.java).fromJsonValue(currentMillis)) + + assertEquals(epoch, MoshiService.moshi.adapter(Instant::class.java).toJsonValue(epochInstant)) + assertEquals(epochInstant, MoshiService.moshi.adapter(Instant::class.java).fromJsonValue(epoch)) + } + + @Test + fun testbasicTypes() { + val numberString = "-42" + val booleanString = "true" + val string = "Hello, World!" + + assertEquals(-42, MoshiService.moshi.adapter(Int::class.java).fromJson(numberString)) + assertEquals(true, MoshiService.moshi.adapter(Boolean::class.java).fromJson(booleanString)) + assertEquals(string, MoshiService.moshi.adapter(String::class.java).fromJsonValue(string)) + + assertThrows { + MoshiService.moshi.adapter(Int::class.java).fromJsonValue(string) + } + } + + @Test + fun testObjects() { + val firstJson = "{\"name\":\"Taubsie\"}" + val incorrectJson = "{name:\"SomeoneElse\"}" + + assertEquals(TestObject("Taubsie"), MoshiService.moshi.adapter(TestObject::class.java).fromJson(firstJson)) + assertNotEquals( + TestObject("SomeoneElse"), + MoshiService.moshi.adapter(TestObject::class.java).fromJson(firstJson) + ) + + assertThrows { + MoshiService.moshi.adapter(TestObject::class.java).fromJson(incorrectJson) + } + + } + + @JsonClass(generateAdapter = true) + data class TestObject(val name: String) +} \ No newline at end of file From 4235bcdf5a32074b80ab82c1d89efbc5070c520e Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 24 Oct 2024 15:49:47 +0200 Subject: [PATCH 03/18] Rename .java to .kt --- .../model/carry_tier/{CarryTierModel.java => CarryTierModel.kt} | 0 .../model/carry_type/{CarryTypeModel.java => CarryTypeModel.kt} | 0 .../discord_user/{DiscordUserModel.java => DiscordUserModel.kt} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename model/src/main/kotlin/net/dungeonhub/model/carry_tier/{CarryTierModel.java => CarryTierModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/carry_type/{CarryTypeModel.java => CarryTypeModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_user/{DiscordUserModel.java => DiscordUserModel.kt} (100%) diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt From ac6e94d04e2d160c97a657fcc7d77411a2a3f7c5 Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 24 Oct 2024 15:49:48 +0200 Subject: [PATCH 04/18] Added a test for the ScoreType and reworked some methods in the class, also implemented some more methods. --- .../kotlin/net/dungeonhub/enums/ScoreType.kt | 27 +++-- .../carry_difficulty/CarryDifficultyModel.kt | 6 +- .../model/carry_tier/CarryTierModel.kt | 110 +++++++----------- .../model/carry_type/CarryTypeModel.kt | 78 ++++++------- .../discord_server/DiscordServerModel.kt | 20 ++++ .../model/discord_user/DiscordUserModel.kt | 31 ++--- .../model/server/DiscordServerModel.java | 28 ----- .../net/dungeonhub/enums/ScoreTypeTest.kt | 27 +++++ 8 files changed, 157 insertions(+), 170 deletions(-) create mode 100644 model/src/main/kotlin/net/dungeonhub/model/discord_server/DiscordServerModel.kt delete mode 100644 model/src/main/kotlin/net/dungeonhub/model/server/DiscordServerModel.java create mode 100644 model/src/test/kotlin/net/dungeonhub/enums/ScoreTypeTest.kt diff --git a/model/src/main/kotlin/net/dungeonhub/enums/ScoreType.kt b/model/src/main/kotlin/net/dungeonhub/enums/ScoreType.kt index 09883cd..a9f60de 100644 --- a/model/src/main/kotlin/net/dungeonhub/enums/ScoreType.kt +++ b/model/src/main/kotlin/net/dungeonhub/enums/ScoreType.kt @@ -1,22 +1,27 @@ package net.dungeonhub.enums import dev.kordex.core.commands.application.slash.converters.ChoiceEnum +import net.dungeonhub.model.carry_type.CarryTypeModel -enum class ScoreType : ChoiceEnum { - Default("current", "Current"), - Alltime("alltime", "Alltime", " (all-time)"), - Event("event", "Event", " (event)"); - - override val readableName: String - val displayName: String +enum class ScoreType( + override val readableName: String, + val displayName: String, val leaderboardSuffix: String? +) : ChoiceEnum { + Default("current", "Current"), + Alltime("alltime", "Alltime", "(all-time)"), + Event("event", "Event", "(event)"); constructor(name: String, displayName: String) : this(name, displayName, null) - constructor(name: String, displayName: String, leaderboardSuffix: String?) { - this.readableName = name - this.displayName = displayName - this.leaderboardSuffix = leaderboardSuffix + fun getLeaderboardTitle(carryType: CarryTypeModel?): String { + val suffix = if (leaderboardSuffix.isNullOrBlank()) "" else " $leaderboardSuffix" + + if (carryType == null) { + return "Leaderboard | Total score$suffix" + } + + return "Leaderboard | ${carryType.displayName}-Carries$suffix" } companion object { diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt index 5567fe8..23339ba 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt @@ -28,15 +28,13 @@ class CarryDifficultyModel( get() = max(field, 0) val thumbnailUrl: String? = thumbnailUrl - //TODO - get() = field //field ?: carryTier.thumbnailUrl + get() = field ?: carryTier.thumbnailUrl val priceName = priceName get() = (if(!field.isNullOrBlank()) field else null) ?: displayName val carryType: CarryTypeModel - //TODO - get() = CarryTypeModel() //carryTier.carryType + get() = carryTier.carryType fun toJson(): String { return MoshiService.moshi.adapter(CarryDifficultyModel::class.java).toJson(this) diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt index a35cd65..0f0f3e0 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt @@ -1,84 +1,62 @@ -package net.dungeonhub.model.carry_tier; +package net.dungeonhub.model.carry_tier -import lombok.*; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.carry_type.CarryTypeModel; +import net.dungeonhub.entity.model.Model +import net.dungeonhub.model.carry_type.CarryTypeModel +import net.dungeonhub.service.MoshiService +import org.jetbrains.annotations.NotNull -import java.util.Optional; +class CarryTierModel( + val id: Long, + val identifier: String, + var displayName: String, + val carryType: CarryTypeModel, + category: Long?, + priceChannel: Long?, + descriptiveName: String?, + thumbnailUrl: String?, + priceTitle: String?, + priceDescription: String? +) : Model { + var descriptiveName = descriptiveName + @NotNull + get() = (if(!field.isNullOrBlank()) field else null) ?: displayName -@EqualsAndHashCode(onlyExplicitlyIncluded = true) -@AllArgsConstructor -@Getter -@Setter -public class CarryTierModel implements Model { - private Long category; - private Long priceChannel; - private String descriptiveName; - private String thumbnailUrl; - private String priceTitle; - private String priceDescription; - @EqualsAndHashCode.Include - @Setter(AccessLevel.NONE) - private long id; - @Setter(AccessLevel.NONE) - private String identifier; - private String displayName; - private CarryTypeModel carryType; + var category = category + get() = (if(field != null && field!! > 0L) field else null) - public static CarryTierModel fromJson(String json) { - return DungeonHubService.getInstance().getGson().fromJson(json, CarryTierModel.class); - } - - public String getDescriptiveName() { - return getActualDescriptiveName().orElse(getDisplayName()); - } - - public Optional getActualDescriptiveName() { - return Optional.ofNullable(descriptiveName == null || descriptiveName.isBlank() ? null : descriptiveName); - } - - public Optional getCategory() { - return Optional.ofNullable(category > 0L ? category : null); - } + val thumbnailUrl = thumbnailUrl + get() = if(!field.isNullOrBlank()) field else null - public long getActualCategory() { - return category; - } + var priceTitle = priceTitle + @NotNull + get() = (if(!field.isNullOrBlank()) field else null) ?: descriptiveName - public Optional getThumbnailUrl() { - return Optional.ofNullable(thumbnailUrl == null || thumbnailUrl.isBlank() ? null : thumbnailUrl); - } + var priceDescription = priceDescription + get() = if(!field.isNullOrBlank()) field else null - public String getActualThumbnailUrl() { - return thumbnailUrl; - } + var priceChannel = priceChannel + get() = if(field != null && field!! > 0L) field else null - public String getPriceTitle() { - return getActualPriceTitle().orElse(getDescriptiveName()); - } + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false - public Optional getActualPriceTitle() { - return Optional.ofNullable(priceTitle == null || priceTitle.isBlank() ? null : priceTitle); - } - - public Optional getPriceDescription() { - return Optional.ofNullable(priceDescription == null || priceDescription.isBlank() ? null : priceDescription); - } + other as CarryTierModel - public String getActualPriceDescription() { - return priceDescription; + return id == other.id } - public Optional getPriceChannel() { - return Optional.ofNullable(priceChannel != null && priceChannel > 0L ? priceChannel : null); + override fun hashCode(): Int { + return id.hashCode() } - public Long getActualPriceChannel() { - return priceChannel; + fun toJson(): String { + return MoshiService.moshi.adapter(CarryTierModel::class.java).toJson(this) } - public String toJson() { - return DungeonHubService.getInstance().getGson().toJson(this); + companion object { + fun fromJson(json: String): CarryTierModel { + return MoshiService.moshi.adapter(CarryTierModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt index 84bc206..c80b05b 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt @@ -1,53 +1,47 @@ -package net.dungeonhub.model.carry_type; - -import lombok.*; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; - -import java.util.Optional; - -@EqualsAndHashCode(onlyExplicitlyIncluded = true) -@AllArgsConstructor -@Getter -@Setter -public class CarryTypeModel implements Model { - @EqualsAndHashCode.Include - @Setter(AccessLevel.NONE) - private long id; - @Setter(AccessLevel.NONE) - private String identifier; - private String displayName; - private DiscordServerModel server; - private Long logChannel; - private Long leaderboardChannel; - private Boolean eventActive; - - public static CarryTypeModel fromJson(String json) { - return DungeonHubService.getInstance().getGson().fromJson(json, CarryTypeModel.class); - } +package net.dungeonhub.model.carry_type - public Long getActualLogChannel() { - return logChannel; - } +import net.dungeonhub.entity.model.Model +import net.dungeonhub.model.discord_server.DiscordServerModel +import net.dungeonhub.service.MoshiService - public Long getActualLeaderboardChannel() { - return leaderboardChannel; - } +class CarryTypeModel( + val id: Long, + val identifier: String, + var displayName: String, + var server: DiscordServerModel, + logChannel: Long?, + leaderboardChannel: Long?, + isEventActive: Boolean? +) : Model { + var isEventActive = isEventActive + get() = java.lang.Boolean.TRUE == field + + var logChannel = logChannel + get() = (if (field != null && field!! > 0L) field else null) + + var leaderboardChannel = leaderboardChannel + get() = (if (field != null && field!! > 0L) field else null) + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as CarryTypeModel - public Optional getLogChannel() { - return Optional.ofNullable(logChannel != null && logChannel > 0 ? logChannel : null); + return id == other.id } - public Optional getLeaderboardChannel() { - return Optional.ofNullable(leaderboardChannel != null && leaderboardChannel > 0 ? leaderboardChannel : null); + override fun hashCode(): Int { + return id.hashCode() } - public boolean isEventActive() { - return Boolean.TRUE.equals(eventActive); + fun toJson(): String { + return MoshiService.moshi.adapter(CarryTypeModel::class.java).toJson(this) } - public String toJson() { - return DungeonHubService.getInstance().getGson().toJson(this); + companion object { + fun fromJson(json: String): CarryTypeModel { + return MoshiService.moshi.adapter(CarryTypeModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_server/DiscordServerModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_server/DiscordServerModel.kt new file mode 100644 index 0000000..7df6de6 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_server/DiscordServerModel.kt @@ -0,0 +1,20 @@ +package net.dungeonhub.model.discord_server + +import net.dungeonhub.entity.model.CreationModel +import net.dungeonhub.entity.model.Model +import net.dungeonhub.entity.model.UpdateModel +import net.dungeonhub.service.MoshiService + +class DiscordServerModel( + val id: Long +) : Model, CreationModel, UpdateModel { + override fun apply(model: DiscordServerModel): DiscordServerModel { + return model + } + + companion object { + fun fromJson(json: String): DiscordServerModel { + return MoshiService.moshi.adapter(DiscordServerModel::class.java).fromJson(json)!! + } + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt index f3a6722..9c910da 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt @@ -1,23 +1,16 @@ -package net.dungeonhub.model.discord_user; +package net.dungeonhub.model.discord_user -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; +import net.dungeonhub.entity.model.Model +import net.dungeonhub.service.MoshiService +import java.util.* -import java.util.UUID; - -@Getter -@Setter -@AllArgsConstructor -public class DiscordUserModel implements Model { - private final long id; - private UUID minecraftId; - - public static DiscordUserModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, DiscordUserModel.class); +class DiscordUserModel( + val id: Long, + var minecraftId: UUID? +) : Model { + companion object { + fun fromJson(json: String): DiscordUserModel { + return MoshiService.moshi.adapter(DiscordUserModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/server/DiscordServerModel.java b/model/src/main/kotlin/net/dungeonhub/model/server/DiscordServerModel.java deleted file mode 100644 index ba7f9f1..0000000 --- a/model/src/main/kotlin/net/dungeonhub/model/server/DiscordServerModel.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.dungeonhub.model.server; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; - -@AllArgsConstructor -@Getter -@Setter -public class DiscordServerModel implements Model, CreationModel, UpdateModel { - private long id; - - public static DiscordServerModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, DiscordServerModel.class); - } - - @Override - public DiscordServerModel apply(DiscordServerModel discordServerModel) { - discordServerModel.setId(id); - return discordServerModel; - } -} \ No newline at end of file diff --git a/model/src/test/kotlin/net/dungeonhub/enums/ScoreTypeTest.kt b/model/src/test/kotlin/net/dungeonhub/enums/ScoreTypeTest.kt new file mode 100644 index 0000000..42a984c --- /dev/null +++ b/model/src/test/kotlin/net/dungeonhub/enums/ScoreTypeTest.kt @@ -0,0 +1,27 @@ +package net.dungeonhub.enums + +import net.dungeonhub.model.carry_type.CarryTypeModel +import net.dungeonhub.model.discord_server.DiscordServerModel +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals + +class ScoreTypeTest { + @Test + fun testLeaderboardTitle() { + for(scoreType in ScoreType.entries) { + val suffix = if (scoreType.leaderboardSuffix.isNullOrBlank()) "" else " ${scoreType.leaderboardSuffix}" + + assertEquals( + "Leaderboard | Total score$suffix", + scoreType.getLeaderboardTitle(null) + ) + + val carryType = CarryTypeModel(0, "identifier", "DisplayName", DiscordServerModel(0), null, null, false) + + assertEquals( + "Leaderboard | DisplayName-Carries$suffix", + scoreType.getLeaderboardTitle(carryType) + ) + } + } +} \ No newline at end of file From 7c31e7c4cd9e02c99bca11b25a815990e7e7990f Mon Sep 17 00:00:00 2001 From: traible Date: Sat, 26 Oct 2024 00:43:11 +0200 Subject: [PATCH 05/18] Slightly reordered the build.gradle file. --- model/build.gradle.kts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/model/build.gradle.kts b/model/build.gradle.kts index d8817bb..e8edc67 100644 --- a/model/build.gradle.kts +++ b/model/build.gradle.kts @@ -30,11 +30,13 @@ repositories { } dependencies { + //Moshi, the JSON library implementation("com.squareup.moshi:moshi-kotlin:1.15.1") - ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.1") + //Used frameworks for compatible classes api("dev.kordex:kord-extensions:2.2.1-SNAPSHOT") + api("org.springframework:spring-web:6.1.12") testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") @@ -87,6 +89,9 @@ tasks.test { kotlin { jvmToolchain(17) + compilerOptions { + freeCompilerArgs.add("-Xjvm-default=all") + } } java { From 7c4bf0c4c3336d18b903a33188b9df0efb664f88 Mon Sep 17 00:00:00 2001 From: traible Date: Sat, 26 Oct 2024 00:43:26 +0200 Subject: [PATCH 06/18] Updated Kotlin to 2.0.21. --- .idea/kotlinc.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index d4b7acc..c224ad5 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file From a4988655219573406a4fcc1f2343520066ba16bb Mon Sep 17 00:00:00 2001 From: traible Date: Sat, 26 Oct 2024 00:44:15 +0200 Subject: [PATCH 07/18] Added an automatic json adapter configuration for moshi. --- model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt | 2 ++ .../test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt b/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt index eb302a0..b7ca295 100644 --- a/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt +++ b/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt @@ -1,6 +1,7 @@ package net.dungeonhub.service import com.squareup.moshi.* +import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import java.awt.Color import java.time.Instant @@ -9,6 +10,7 @@ object MoshiService { val moshi: Moshi = Moshi.Builder() .add(Instant::class.java, InstantAdapter()) .add(Color::class.java, ColorAdapter()) + .addLast(KotlinJsonAdapterFactory()) .build() class InstantAdapter : JsonAdapter() { diff --git a/model/src/test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt b/model/src/test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt index 2a1df4f..3b5b1ea 100644 --- a/model/src/test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt +++ b/model/src/test/kotlin/net/dungeonhub/service/MoshiServiceTest.kt @@ -51,7 +51,7 @@ class MoshiServiceTest { } @Test - fun testbasicTypes() { + fun testBasicTypes() { val numberString = "-42" val booleanString = "true" val string = "Hello, World!" @@ -80,8 +80,11 @@ class MoshiServiceTest { MoshiService.moshi.adapter(TestObject::class.java).fromJson(incorrectJson) } + assertEquals(AnotherTestObject("Taubsie"), MoshiService.moshi.adapter(AnotherTestObject::class.java).fromJson(firstJson)) } @JsonClass(generateAdapter = true) data class TestObject(val name: String) + + data class AnotherTestObject(val name: String) } \ No newline at end of file From 48469ce539b3bc22eff5f5b207f85aba811cacd1 Mon Sep 17 00:00:00 2001 From: traible Date: Sat, 26 Oct 2024 00:46:18 +0200 Subject: [PATCH 08/18] Rename .java to .kt --- .../carry_queue/{CarryQueueModel.java => CarryQueueModel.kt} | 0 .../cnt_request/{CntRequestModel.java => CntRequestModel.kt} | 0 .../discord_role/{DiscordRoleModel.java => DiscordRoleModel.kt} | 0 .../{DiscordRoleGroupModel.java => DiscordRoleGroupModel.kt} | 0 .../model/purge_type/{PurgeTypeModel.java => PurgeTypeModel.kt} | 0 .../model/score/{LeaderboardModel.java => LeaderboardModel.kt} | 0 .../model/score/{LoggedCarryModel.java => LoggedCarryModel.kt} | 0 .../net/dungeonhub/model/score/{ScoreModel.java => ScoreModel.kt} | 0 .../warning/{AddedWarningModel.java => AddedWarningModel.kt} | 0 .../{DetailedWarningModel.java => DetailedWarningModel.kt} | 0 .../warning/{WarningActionModel.java => WarningActionModel.kt} | 0 .../{WarningEvidenceModel.java => WarningEvidenceModel.kt} | 0 .../model/warning/{WarningModel.java => WarningModel.kt} | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename model/src/main/kotlin/net/dungeonhub/model/carry_queue/{CarryQueueModel.java => CarryQueueModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/cnt_request/{CntRequestModel.java => CntRequestModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_role/{DiscordRoleModel.java => DiscordRoleModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_role_group/{DiscordRoleGroupModel.java => DiscordRoleGroupModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/purge_type/{PurgeTypeModel.java => PurgeTypeModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/score/{LeaderboardModel.java => LeaderboardModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/score/{LoggedCarryModel.java => LoggedCarryModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/score/{ScoreModel.java => ScoreModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/warning/{AddedWarningModel.java => AddedWarningModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/warning/{DetailedWarningModel.java => DetailedWarningModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/warning/{WarningActionModel.java => WarningActionModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/warning/{WarningEvidenceModel.java => WarningEvidenceModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/warning/{WarningModel.java => WarningModel.kt} (100%) diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.java b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.java rename to model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.java b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.java rename to model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.java b/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.java rename to model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.java b/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.java rename to model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.java b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.java rename to model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.java rename to model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.java rename to model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.java rename to model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.java rename to model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.java rename to model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.kt From 5de5cc10ad7e06fec0ed99608c57098841fb9d42 Mon Sep 17 00:00:00 2001 From: traible Date: Sat, 26 Oct 2024 00:46:19 +0200 Subject: [PATCH 09/18] Implemented more classes. --- .../kotlin/net/dungeonhub/entity/Entity.kt | 3 - .../entity/EntityModelRelation.java | 10 --- .../net/dungeonhub/entity/EntityService.java | 75 ------------------ .../dungeonhub/entity/InitializingFactory.kt | 5 -- .../dungeonhub/entity/model/CreationModel.kt | 3 - .../entity/model/InitializeModel.java | 14 ---- .../net/dungeonhub/entity/model/Model.kt | 3 - .../dungeonhub/entity/model/UpdateModel.kt | 5 -- .../expections/EntityUnknownException.kt | 5 ++ .../net/dungeonhub/model/JwtTokenModel.java | 6 -- .../dungeonhub/model/PurgeTypeRoleModel.java | 14 ---- .../net/dungeonhub/model/ScoreResetModel.java | 19 ----- .../dungeonhub/model/auth/JwtTokenModel.kt | 6 ++ .../net/dungeonhub/model/carry/CarryModel.kt | 2 +- .../CarryDifficultyCreationModel.kt | 2 +- .../carry_difficulty/CarryDifficultyModel.kt | 2 +- .../model/carry_queue/CarryQueueModel.kt | 77 ++++++++----------- .../model/carry_tier/CarryTierModel.kt | 18 ++--- .../model/carry_type/CarryTypeModel.kt | 16 ++-- .../model/cnt_request/CntRequestModel.kt | 49 +++++------- .../model/discord_role/DiscordRoleModel.kt | 34 ++++---- .../DiscordRoleGroupModel.kt | 22 ++---- .../discord_server/DiscordServerModel.kt | 10 +-- .../model/discord_user/DiscordUserModel.kt | 4 +- .../model/purge_type/PurgeTypeModel.kt | 30 +++----- .../model/purge_type/PurgeTypeRoleModel.kt | 9 +++ .../model/score/LeaderboardModel.kt | 62 +++++---------- .../model/score/LoggedCarryModel.kt | 20 +++-- .../net/dungeonhub/model/score/ScoreModel.kt | 40 ++++------ .../dungeonhub/model/score/ScoreResetModel.kt | 15 ++++ .../model/warning/AddedWarningModel.kt | 31 ++++---- .../model/warning/DetailedWarningModel.kt | 56 ++++++-------- .../model/warning/WarningActionModel.kt | 18 ++--- .../model/warning/WarningEvidenceModel.kt | 24 +++--- .../dungeonhub/model/warning/WarningModel.kt | 53 +++++-------- .../net/dungeonhub/structure/entity/Entity.kt | 7 ++ .../structure/entity/EntityService.kt | 71 +++++++++++++++++ .../structure/entity/InitializingFactory.kt | 7 ++ .../structure/entity/UpdateableEntity.kt | 8 ++ .../structure/model/CreationModel.kt | 3 + .../structure/model/InitializeModel.kt | 14 ++++ .../net/dungeonhub/structure/model/Model.kt | 3 + .../dungeonhub/structure/model/UpdateModel.kt | 3 + .../net/dungeonhub/enums/ScoreTypeTest.kt | 4 +- 44 files changed, 378 insertions(+), 504 deletions(-) delete mode 100644 model/src/main/kotlin/net/dungeonhub/entity/Entity.kt delete mode 100644 model/src/main/kotlin/net/dungeonhub/entity/EntityModelRelation.java delete mode 100644 model/src/main/kotlin/net/dungeonhub/entity/EntityService.java delete mode 100644 model/src/main/kotlin/net/dungeonhub/entity/InitializingFactory.kt delete mode 100644 model/src/main/kotlin/net/dungeonhub/entity/model/CreationModel.kt delete mode 100644 model/src/main/kotlin/net/dungeonhub/entity/model/InitializeModel.java delete mode 100644 model/src/main/kotlin/net/dungeonhub/entity/model/Model.kt delete mode 100644 model/src/main/kotlin/net/dungeonhub/entity/model/UpdateModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/expections/EntityUnknownException.kt delete mode 100644 model/src/main/kotlin/net/dungeonhub/model/JwtTokenModel.java delete mode 100644 model/src/main/kotlin/net/dungeonhub/model/PurgeTypeRoleModel.java delete mode 100644 model/src/main/kotlin/net/dungeonhub/model/ScoreResetModel.java create mode 100644 model/src/main/kotlin/net/dungeonhub/model/auth/JwtTokenModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeRoleModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/model/score/ScoreResetModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/entity/Entity.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/entity/InitializingFactory.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/entity/UpdateableEntity.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/model/CreationModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/model/InitializeModel.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/model/Model.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/model/UpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/entity/Entity.kt b/model/src/main/kotlin/net/dungeonhub/entity/Entity.kt deleted file mode 100644 index ce01f0e..0000000 --- a/model/src/main/kotlin/net/dungeonhub/entity/Entity.kt +++ /dev/null @@ -1,3 +0,0 @@ -package net.dungeonhub.entity - -interface Entity \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/EntityModelRelation.java b/model/src/main/kotlin/net/dungeonhub/entity/EntityModelRelation.java deleted file mode 100644 index 2574295..0000000 --- a/model/src/main/kotlin/net/dungeonhub/entity/EntityModelRelation.java +++ /dev/null @@ -1,10 +0,0 @@ -package net.dungeonhub.entity; - -import me.taubsie.dungeonhub.common.entity.model.Model; -import org.jetbrains.annotations.NotNull; - -public interface EntityModelRelation extends Entity { - @NotNull Entity fromModel(@NotNull M model); - - @NotNull M toModel(); -} diff --git a/model/src/main/kotlin/net/dungeonhub/entity/EntityService.java b/model/src/main/kotlin/net/dungeonhub/entity/EntityService.java deleted file mode 100644 index ec79fd1..0000000 --- a/model/src/main/kotlin/net/dungeonhub/entity/EntityService.java +++ /dev/null @@ -1,75 +0,0 @@ -package net.dungeonhub.entity; - -import me.taubsie.dungeonhub.common.entity.model.CreationModel; -import me.taubsie.dungeonhub.common.entity.model.InitializeModel; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; -import me.taubsie.dungeonhub.common.exceptions.EntityUnknownException; -import org.springframework.http.HttpStatus; -import org.springframework.web.server.ResponseStatusException; - -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; - -public interface EntityService, M extends Model, C extends CreationModel, I extends InitializeModel, U extends UpdateModel> { - Optional loadEntityById(long id); - - Optional loadEntityByName(String name); - - List findAllEntities(); - - E createEntity(I initalizationModel); - - boolean delete(long id); - - E saveEntity(E entity); - - Function toEntity(); - - Function toModel(); - - default Optional loadById(long id) { - return loadEntityById(id).map(toModel()); - } - - default Optional loadByName(String name) { - return loadEntityByName(name).map(toModel()); - } - - default Set findAll() { - return findAllEntities().stream().map(toModel()).collect(Collectors.toSet()); - } - - default M create(I model) { - return toModel().apply(createEntity(model)); - } - - default M save(E entity) { - return toModel().apply(saveEntity(entity)); - } - - default E update(Long id, U updateModel) { - try { - //noinspection unchecked - return loadEntityById(id) - .map(e -> e.fromModel(updateModel.apply(e.toModel()))) - .map(entity -> saveEntity((E) entity)).orElseThrow(() -> new EntityUnknownException(id)); - } - catch (NumberFormatException | UnsupportedOperationException exception) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST); - } - } - - default E update(E entity, U updateModel) { - try { - //noinspection unchecked - return saveEntity((E) entity.fromModel(updateModel.apply(entity.toModel()))); - } - catch (NumberFormatException | UnsupportedOperationException exception) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST); - } - } -} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/InitializingFactory.kt b/model/src/main/kotlin/net/dungeonhub/entity/InitializingFactory.kt deleted file mode 100644 index 0675118..0000000 --- a/model/src/main/kotlin/net/dungeonhub/entity/InitializingFactory.kt +++ /dev/null @@ -1,5 +0,0 @@ -package net.dungeonhub.entity - -interface InitializingFactory { - fun transform(entity: E): E -} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/model/CreationModel.kt b/model/src/main/kotlin/net/dungeonhub/entity/model/CreationModel.kt deleted file mode 100644 index 5cccec5..0000000 --- a/model/src/main/kotlin/net/dungeonhub/entity/model/CreationModel.kt +++ /dev/null @@ -1,3 +0,0 @@ -package net.dungeonhub.entity.model - -interface CreationModel : Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/model/InitializeModel.java b/model/src/main/kotlin/net/dungeonhub/entity/model/InitializeModel.java deleted file mode 100644 index 871064c..0000000 --- a/model/src/main/kotlin/net/dungeonhub/entity/model/InitializeModel.java +++ /dev/null @@ -1,14 +0,0 @@ -package net.dungeonhub.entity.model; - -import me.taubsie.dungeonhub.common.entity.Entity; -import me.taubsie.dungeonhub.common.entity.InitializingFactory; - -public interface InitializeModel extends Model { - E toEntity(); - - InitializeModel fromCreationModel(C creationModel); - - default E toEntity(InitializingFactory factory) { - return factory.transform(toEntity()); - } -} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/model/Model.kt b/model/src/main/kotlin/net/dungeonhub/entity/model/Model.kt deleted file mode 100644 index b9d4c41..0000000 --- a/model/src/main/kotlin/net/dungeonhub/entity/model/Model.kt +++ /dev/null @@ -1,3 +0,0 @@ -package net.dungeonhub.entity.model - -interface Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/entity/model/UpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/entity/model/UpdateModel.kt deleted file mode 100644 index 7a9f98d..0000000 --- a/model/src/main/kotlin/net/dungeonhub/entity/model/UpdateModel.kt +++ /dev/null @@ -1,5 +0,0 @@ -package net.dungeonhub.entity.model - -interface UpdateModel { - fun apply(model: M): M -} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/expections/EntityUnknownException.kt b/model/src/main/kotlin/net/dungeonhub/expections/EntityUnknownException.kt new file mode 100644 index 0000000..24d27df --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/expections/EntityUnknownException.kt @@ -0,0 +1,5 @@ +package net.dungeonhub.expections + +class EntityUnknownException( + val id: Long +) : IllegalStateException() \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/JwtTokenModel.java b/model/src/main/kotlin/net/dungeonhub/model/JwtTokenModel.java deleted file mode 100644 index 489e354..0000000 --- a/model/src/main/kotlin/net/dungeonhub/model/JwtTokenModel.java +++ /dev/null @@ -1,6 +0,0 @@ -package net.dungeonhub.model; - -import java.time.Instant; - -public record JwtTokenModel(String token, Instant validUntil) { -} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/PurgeTypeRoleModel.java b/model/src/main/kotlin/net/dungeonhub/model/PurgeTypeRoleModel.java deleted file mode 100644 index f068484..0000000 --- a/model/src/main/kotlin/net/dungeonhub/model/PurgeTypeRoleModel.java +++ /dev/null @@ -1,14 +0,0 @@ -package net.dungeonhub.model; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.discord_role.DiscordRoleModel; -import me.taubsie.dungeonhub.common.model.purge_type.PurgeTypeModel; - -@Getter -@AllArgsConstructor -public class PurgeTypeRoleModel implements Model { - private PurgeTypeModel purgeTypeModel; - private DiscordRoleModel discordRoleModel; -} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/ScoreResetModel.java b/model/src/main/kotlin/net/dungeonhub/model/ScoreResetModel.java deleted file mode 100644 index da38dc0..0000000 --- a/model/src/main/kotlin/net/dungeonhub/model/ScoreResetModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.dungeonhub.model; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; - -@Getter -@AllArgsConstructor -public class ScoreResetModel implements Model { - private long defaultCount; - private long eventCount; - - public static ScoreResetModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, ScoreResetModel.class); - } -} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/auth/JwtTokenModel.kt b/model/src/main/kotlin/net/dungeonhub/model/auth/JwtTokenModel.kt new file mode 100644 index 0000000..a593e50 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/auth/JwtTokenModel.kt @@ -0,0 +1,6 @@ +package net.dungeonhub.model.auth + +import java.time.Instant + +@JvmRecord +data class JwtTokenModel(val token: String, val validUntil: Instant) \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry/CarryModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry/CarryModel.kt index b47bb98..f21f74a 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry/CarryModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry/CarryModel.kt @@ -1,6 +1,6 @@ package net.dungeonhub.model.carry -import net.dungeonhub.entity.model.Model +import net.dungeonhub.structure.model.Model import net.dungeonhub.model.carry_difficulty.CarryDifficultyModel import net.dungeonhub.model.discord_user.DiscordUserModel import net.dungeonhub.service.MoshiService diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt index a993928..8b63323 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt @@ -1,6 +1,6 @@ package net.dungeonhub.model.carry_difficulty -import net.dungeonhub.entity.model.CreationModel +import net.dungeonhub.structure.model.CreationModel class CarryDifficultyCreationModel( var identifier: String, diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt index 23339ba..676657f 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt @@ -1,6 +1,6 @@ package net.dungeonhub.model.carry_difficulty -import net.dungeonhub.entity.model.Model +import net.dungeonhub.structure.model.Model import net.dungeonhub.model.carry_tier.CarryTierModel import net.dungeonhub.model.carry_type.CarryTypeModel import net.dungeonhub.service.MoshiService diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt index 5aa4b93..a31ca7a 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt @@ -1,51 +1,36 @@ -package net.dungeonhub.model.carry_queue; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.enums.QueueStep; -import me.taubsie.dungeonhub.common.model.carry_difficulty.CarryDifficultyModel; -import me.taubsie.dungeonhub.common.model.carry_tier.CarryTierModel; -import me.taubsie.dungeonhub.common.model.carry_type.CarryTypeModel; -import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; - -import java.time.Instant; - -@AllArgsConstructor -@Getter -@Setter -public class CarryQueueModel implements Model { - private final long id; - private QueueStep queueStep; - private DiscordUserModel carrier; - private DiscordUserModel player; - private Long amount; - private CarryDifficultyModel carryDifficulty; - private Long relationId; - private String attachmentLink; - private Instant time; - - public static CarryQueueModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, CarryQueueModel.class); +package net.dungeonhub.model.carry_queue + +import net.dungeonhub.structure.model.Model +import net.dungeonhub.enums.QueueStep +import net.dungeonhub.model.carry_difficulty.CarryDifficultyModel +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.service.MoshiService +import java.time.Instant + +class CarryQueueModel( + val id: Long, + val queueStep: QueueStep, + val carrier: DiscordUserModel, + val player: DiscordUserModel, + val amount: Long, + val carryDifficulty: CarryDifficultyModel, + val relationId: Long?, + val attachmentLink: String?, + val time: Instant? +) : Model { + val carryTier = carryDifficulty.carryTier + + val carryType = carryTier.carryType + + fun calculateScore(): Long { + return scoreMultiplier * amount } - public CarryTypeModel getCarryType() { - return getCarryTier().getCarryType(); - } - - public CarryTierModel getCarryTier() { - return getCarryDifficulty().getCarryTier(); - } - - public long calculateScore() { - return getScoreMultiplier() * getAmount(); - } + private val scoreMultiplier = carryDifficulty.score - private long getScoreMultiplier() { - return getCarryDifficulty().getScore(); + companion object { + fun fromJson(json: String): CarryQueueModel { + return MoshiService.moshi.adapter(CarryQueueModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt index 0f0f3e0..bbd2914 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt @@ -1,6 +1,6 @@ package net.dungeonhub.model.carry_tier -import net.dungeonhub.entity.model.Model +import net.dungeonhub.structure.model.Model import net.dungeonhub.model.carry_type.CarryTypeModel import net.dungeonhub.service.MoshiService import org.jetbrains.annotations.NotNull @@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull class CarryTierModel( val id: Long, val identifier: String, - var displayName: String, + val displayName: String, val carryType: CarryTypeModel, category: Long?, priceChannel: Long?, @@ -17,25 +17,25 @@ class CarryTierModel( priceTitle: String?, priceDescription: String? ) : Model { - var descriptiveName = descriptiveName + val descriptiveName = descriptiveName @NotNull get() = (if(!field.isNullOrBlank()) field else null) ?: displayName - var category = category - get() = (if(field != null && field!! > 0L) field else null) + val category = category + get() = (if(field != null && field > 0L) field else null) val thumbnailUrl = thumbnailUrl get() = if(!field.isNullOrBlank()) field else null - var priceTitle = priceTitle + val priceTitle = priceTitle @NotNull get() = (if(!field.isNullOrBlank()) field else null) ?: descriptiveName - var priceDescription = priceDescription + val priceDescription = priceDescription get() = if(!field.isNullOrBlank()) field else null - var priceChannel = priceChannel - get() = if(field != null && field!! > 0L) field else null + val priceChannel = priceChannel + get() = if(field != null && field > 0L) field else null override fun equals(other: Any?): Boolean { if (this === other) return true diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt index c80b05b..8f5ef0d 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt @@ -1,26 +1,26 @@ package net.dungeonhub.model.carry_type -import net.dungeonhub.entity.model.Model import net.dungeonhub.model.discord_server.DiscordServerModel import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.Model class CarryTypeModel( val id: Long, val identifier: String, - var displayName: String, - var server: DiscordServerModel, + val displayName: String, + val server: DiscordServerModel, logChannel: Long?, leaderboardChannel: Long?, isEventActive: Boolean? ) : Model { - var isEventActive = isEventActive + val isEventActive = isEventActive get() = java.lang.Boolean.TRUE == field - var logChannel = logChannel - get() = (if (field != null && field!! > 0L) field else null) + val logChannel = logChannel + get() = (if (field != null && field > 0L) field else null) - var leaderboardChannel = leaderboardChannel - get() = (if (field != null && field!! > 0L) field else null) + val leaderboardChannel = leaderboardChannel + get() = (if (field != null && field > 0L) field else null) override fun equals(other: Any?): Boolean { if (this === other) return true diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt index 6d82a94..fe46382 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt @@ -1,32 +1,25 @@ -package net.dungeonhub.model.cnt_request; +package net.dungeonhub.model.cnt_request -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; -import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; +import net.dungeonhub.structure.model.Model +import net.dungeonhub.model.discord_server.DiscordServerModel +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.service.MoshiService +import java.time.Instant -import java.time.Instant; - -@Getter -@Setter -@AllArgsConstructor -public class CntRequestModel implements Model { - private long id; - private long messageId; - private DiscordServerModel discordServer; - private DiscordUserModel user; - private DiscordUserModel claimer; - private Instant time; - private String coinValue; - private String description; - private String requirement; - - public static CntRequestModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, CntRequestModel.class); +class CntRequestModel( + val id: Long, + val messageId: Long, + val discordServer: DiscordServerModel, + val user: DiscordUserModel, + val claimer: DiscordUserModel?, + val time: Instant, + val coinValue: String, + val description: String, + val requirement: String +) : Model { + companion object { + fun fromJson(json: String): CntRequestModel { + return MoshiService.moshi.adapter(CntRequestModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.kt index 8e431ac..e4038b9 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleModel.kt @@ -1,24 +1,18 @@ -package net.dungeonhub.model.discord_role; +package net.dungeonhub.model.discord_role -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; +import net.dungeonhub.structure.model.Model +import net.dungeonhub.model.discord_server.DiscordServerModel +import net.dungeonhub.service.MoshiService -@Getter -@Setter -@AllArgsConstructor -public class DiscordRoleModel implements Model { - private long id; - private String nameSchema; - private boolean verifiedRole; - private DiscordServerModel discordServerModel; - - public static DiscordRoleModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, DiscordRoleModel.class); +class DiscordRoleModel( + val id: Long, + val nameSchema: String?, + val verifiedRole: Boolean, + val discordServerModel: DiscordServerModel +) : Model { + companion object { + fun fromJson(json: String): DiscordRoleModel { + return MoshiService.moshi.adapter(DiscordRoleModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.kt index 4f317dd..32dd533 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupModel.kt @@ -1,16 +1,10 @@ -package net.dungeonhub.model.discord_role_group; +package net.dungeonhub.model.discord_role_group -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.discord_role.DiscordRoleModel; +import net.dungeonhub.structure.model.Model +import net.dungeonhub.model.discord_role.DiscordRoleModel -@Getter -@AllArgsConstructor -@NoArgsConstructor -public class DiscordRoleGroupModel implements Model { - private long id; - private DiscordRoleModel discordRole; - private DiscordRoleModel roleGroup; -} \ No newline at end of file +class DiscordRoleGroupModel( + val id: Long, + val discordRole: DiscordRoleModel, + val roleGroup: DiscordRoleModel +) : Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_server/DiscordServerModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_server/DiscordServerModel.kt index 7df6de6..138f805 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_server/DiscordServerModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_server/DiscordServerModel.kt @@ -1,17 +1,13 @@ package net.dungeonhub.model.discord_server -import net.dungeonhub.entity.model.CreationModel -import net.dungeonhub.entity.model.Model -import net.dungeonhub.entity.model.UpdateModel +import net.dungeonhub.structure.model.CreationModel +import net.dungeonhub.structure.model.Model +import net.dungeonhub.structure.model.UpdateModel import net.dungeonhub.service.MoshiService class DiscordServerModel( val id: Long ) : Model, CreationModel, UpdateModel { - override fun apply(model: DiscordServerModel): DiscordServerModel { - return model - } - companion object { fun fromJson(json: String): DiscordServerModel { return MoshiService.moshi.adapter(DiscordServerModel::class.java).fromJson(json)!! diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt index 9c910da..339beb5 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt @@ -1,12 +1,12 @@ package net.dungeonhub.model.discord_user -import net.dungeonhub.entity.model.Model +import net.dungeonhub.structure.model.Model import net.dungeonhub.service.MoshiService import java.util.* class DiscordUserModel( val id: Long, - var minecraftId: UUID? + val minecraftId: UUID? ) : Model { companion object { fun fromJson(json: String): DiscordUserModel { diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.kt b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.kt index 7be5f09..e0a262a 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeModel.kt @@ -1,22 +1,12 @@ -package net.dungeonhub.model.purge_type; +package net.dungeonhub.model.purge_type -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.PurgeTypeRoleModel; -import me.taubsie.dungeonhub.common.model.carry_type.CarryTypeModel; +import net.dungeonhub.structure.model.Model +import net.dungeonhub.model.carry_type.CarryTypeModel -import java.util.List; - -@AllArgsConstructor -@Getter -public class PurgeTypeModel implements Model { - private long id; - private String identifier; - @Setter - private String displayName; - private CarryTypeModel carryType; - @Setter - private List purgeTypeRoleModels; -} \ No newline at end of file +class PurgeTypeModel( + val id: Long, + val identifier: String, + val displayName: String, + val carryType: CarryTypeModel, + val purgeTypeRoleModels: List +) : Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeRoleModel.kt b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeRoleModel.kt new file mode 100644 index 0000000..e9e54c6 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeRoleModel.kt @@ -0,0 +1,9 @@ +package net.dungeonhub.model.purge_type + +import net.dungeonhub.structure.model.Model +import net.dungeonhub.model.discord_role.DiscordRoleModel + +class PurgeTypeRoleModel( + val purgeTypeModel: PurgeTypeModel, + val discordRoleModel: DiscordRoleModel +) : Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.kt b/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.kt index 59a4760..7a582cb 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/score/LeaderboardModel.kt @@ -1,48 +1,26 @@ -package net.dungeonhub.model.score; - -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; - -import java.util.List; -import java.util.Optional; - -@Getter -public class LeaderboardModel { - private final int page; - private final int totalPages; - private final List scores; - - @Setter - private Integer playerPosition; - @Setter - private ScoreModel playerScore; - - public LeaderboardModel(int page, int totalPages, List scores) { - this.page = page; - this.totalPages = totalPages; - this.scores = scores; - } - - public static LeaderboardModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, LeaderboardModel.class); - } - - public Optional getPlayerPosition() { - return Optional.ofNullable(playerPosition); - } - - public Optional getPlayerScore() { - return Optional.ofNullable(playerScore); +package net.dungeonhub.model.score + +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.Model + +class LeaderboardModel( + val page: Int, + val totalPages: Int, + val scores: List, + val playerPosition: Int? = null, + val playerScore: ScoreModel? = null +) : Model { + fun hasNextPage(): Boolean { + return page < totalPages - 1 } - public boolean hasNextPage() { - return page < totalPages - 1; + fun hasPrevPage(): Boolean { + return page > 0 } - public boolean hasPrevPage() { - return page > 0; + companion object { + fun fromJson(json: String): LeaderboardModel { + return MoshiService.moshi.adapter(LeaderboardModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.kt b/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.kt index 593b4ed..ee14f62 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/score/LoggedCarryModel.kt @@ -1,15 +1,13 @@ -package net.dungeonhub.model.score; +package net.dungeonhub.model.score -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.carry.CarryModel; +import net.dungeonhub.model.carry.CarryModel +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.Model -import java.util.List; - -public record LoggedCarryModel(CarryModel carryModel, List scoreModels) implements Model { - public static LoggedCarryModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, LoggedCarryModel.class); +class LoggedCarryModel(val carryModel: CarryModel, val scoreModels: List) : Model { + companion object { + fun fromJson(json: String): LoggedCarryModel { + return MoshiService.moshi.adapter(LoggedCarryModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt index 5683382..1bc877e 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt @@ -1,28 +1,20 @@ -package net.dungeonhub.model.score; +package net.dungeonhub.model.score -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.enums.ScoreType; -import me.taubsie.dungeonhub.common.model.carry_type.CarryTypeModel; -import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; -import org.jetbrains.annotations.Nullable; +import net.dungeonhub.enums.ScoreType +import net.dungeonhub.model.carry_type.CarryTypeModel +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.Model -@AllArgsConstructor -@Getter -@Setter -public class ScoreModel implements Model { - private DiscordUserModel carrier; - @Nullable - private CarryTypeModel carryType; - private ScoreType scoreType; - private Long scoreAmount; - - public static ScoreModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, ScoreModel.class); +class ScoreModel( + val carrier: DiscordUserModel, + val carryType: CarryTypeModel, + val scoreType: ScoreType, + val scoreAmount: Long? +) : Model { + companion object { + fun fromJson(json: String): ScoreModel { + return MoshiService.moshi.adapter(ScoreModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreResetModel.kt b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreResetModel.kt new file mode 100644 index 0000000..816e0f8 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreResetModel.kt @@ -0,0 +1,15 @@ +package net.dungeonhub.model.score + +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.Model + +class ScoreResetModel( + val defaultCount: Long, + val eventCount: Long +) : Model { + companion object { + fun fromJson(json: String): ScoreResetModel { + return MoshiService.moshi.adapter(ScoreResetModel::class.java).fromJson(json)!! + } + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.kt index 5251b8b..4519569 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/AddedWarningModel.kt @@ -1,20 +1,15 @@ -package net.dungeonhub.model.warning; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import me.taubsie.dungeonhub.common.DungeonHubService; - -import java.util.List; - -@AllArgsConstructor -@Getter -public class AddedWarningModel { - private WarningModel warningModel; - private List warningActionModel; - - public static AddedWarningModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, AddedWarningModel.class); +package net.dungeonhub.model.warning + +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.Model + +class AddedWarningModel( + val warningModel: WarningModel, + val warningActionModel: List +) : Model { + companion object { + fun fromJson(json: String): AddedWarningModel { + return MoshiService.moshi.adapter(AddedWarningModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt index e1e3717..f2b1374 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt @@ -1,38 +1,26 @@ -package net.dungeonhub.model.warning; +package net.dungeonhub.model.warning -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.enums.WarningType; -import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; -import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; +import net.dungeonhub.enums.WarningType +import net.dungeonhub.model.discord_server.DiscordServerModel +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.Model +import java.time.Instant -import javax.annotation.Nullable; -import java.time.Instant; -import java.util.List; - -@AllArgsConstructor -@Getter -public class DetailedWarningModel implements Model { - private long id; - private DiscordServerModel server; - private DiscordUserModel user; - private DiscordUserModel striker; - @Setter - private WarningType warningType; - @Nullable - @Setter - private String reason; - @Setter - private boolean active; - private Instant time; - private List evidences; - - public static DetailedWarningModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, DetailedWarningModel.class); +class DetailedWarningModel( + private val id: Long, + private val server: DiscordServerModel, + private val user: DiscordUserModel, + private val striker: DiscordUserModel, + private val warningType: WarningType, + private val reason: String?, + private val active: Boolean, + private val time: Instant, + private val evidences: List +) : Model { + companion object { + fun fromJson(json: String): DetailedWarningModel { + return MoshiService.moshi.adapter(DetailedWarningModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.kt index a28c642..275f4ac 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningActionModel.kt @@ -1,14 +1,8 @@ -package net.dungeonhub.model.warning; +package net.dungeonhub.model.warning -import lombok.AllArgsConstructor; -import lombok.Getter; -import me.taubsie.dungeonhub.common.enums.WarningAction; -import org.jetbrains.annotations.NotNull; +import net.dungeonhub.enums.WarningAction -@AllArgsConstructor -@Getter -public class WarningActionModel { - @NotNull - private WarningAction warningAction; - private String data; -} \ No newline at end of file +class WarningActionModel( + val warningAction: WarningAction, + val data: String? +) \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.kt index c87c154..167e134 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceModel.kt @@ -1,17 +1,11 @@ -package net.dungeonhub.model.warning; +package net.dungeonhub.model.warning -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.structure.model.Model -@AllArgsConstructor -@NoArgsConstructor -@Getter -public class WarningEvidenceModel implements Model { - private long id; - private WarningModel warningModel; - private String evidence; - private DiscordUserModel submitter; -} \ No newline at end of file +class WarningEvidenceModel( + val id: Long, + val warningModel: WarningModel, + val evidence: String, + val submitter: DiscordUserModel +) : Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.kt index eb8af7b..787e859 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningModel.kt @@ -1,36 +1,25 @@ -package net.dungeonhub.model.warning; +package net.dungeonhub.model.warning -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.Model; -import me.taubsie.dungeonhub.common.enums.WarningType; -import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; -import me.taubsie.dungeonhub.common.model.server.DiscordServerModel; +import net.dungeonhub.structure.model.Model +import net.dungeonhub.enums.WarningType +import net.dungeonhub.model.discord_server.DiscordServerModel +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.service.MoshiService +import java.time.Instant -import javax.annotation.Nullable; -import java.time.Instant; - -@AllArgsConstructor -@Getter -public class WarningModel implements Model { - private long id; - private DiscordServerModel server; - private DiscordUserModel user; - private DiscordUserModel striker; - @Setter - private WarningType warningType; - @Nullable - @Setter - private String reason; - @Setter - private boolean active; - private Instant time; - - public static WarningModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, WarningModel.class); +class WarningModel( + val id: Long, + val server: DiscordServerModel, + val user: DiscordUserModel, + val striker: DiscordUserModel, + val warningType: WarningType, + val reason: String?, + val active: Boolean, + val time: Instant +) : Model { + companion object { + fun fromJson(json: String): WarningModel { + return MoshiService.moshi.adapter(WarningModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/entity/Entity.kt b/model/src/main/kotlin/net/dungeonhub/structure/entity/Entity.kt new file mode 100644 index 0000000..87b8c0d --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/entity/Entity.kt @@ -0,0 +1,7 @@ +package net.dungeonhub.structure.entity + +import net.dungeonhub.structure.model.Model + +interface Entity { + fun toModel(): M +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt b/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt new file mode 100644 index 0000000..9ab62b8 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt @@ -0,0 +1,71 @@ +package net.dungeonhub.structure.entity + +import net.dungeonhub.structure.model.CreationModel +import net.dungeonhub.structure.model.Model +import net.dungeonhub.structure.model.UpdateModel +import net.dungeonhub.expections.EntityUnknownException +import net.dungeonhub.structure.model.InitializeModel +import org.springframework.http.HttpStatus +import org.springframework.web.server.ResponseStatusException +import java.util.* +import java.util.function.Function +import java.util.stream.Collectors + +interface EntityService, M : Model, C : CreationModel, I : InitializeModel, U : UpdateModel> { + fun loadEntityById(id: Long): Optional + + fun findAllEntities(): List + + fun createEntity(initalizationModel: I): E + + fun delete(id: Long): Boolean + + fun saveEntity(entity: E): E + + fun toEntity(): Function? + + fun toModel(): Function + + fun loadById(id: Long): Optional { + return loadEntityById(id).map(toModel()) + } + + fun findAll(): Set { + return findAllEntities().stream().map(toModel()).collect(Collectors.toSet()) + } + + fun create(model: I): M { + return toModel().apply(createEntity(model)) + } + + fun save(entity: E): M { + return toModel().apply(saveEntity(entity)) + } + + fun update(id: Long, updateModel: U): E { + try { + return loadEntityById(id) + .map { entity: E -> entity.update(updateModel) } + .map { entity: Entity -> + @Suppress("UNCHECKED_CAST") + saveEntity(entity as E) + } + .orElseThrow { EntityUnknownException(id) } + } catch (exception: NumberFormatException) { + throw ResponseStatusException(HttpStatus.BAD_REQUEST) + } catch (exception: UnsupportedOperationException) { + throw ResponseStatusException(HttpStatus.BAD_REQUEST) + } + } + + fun update(entity: E, updateModel: U): E { + try { + @Suppress("UNCHECKED_CAST") + return saveEntity(entity.update(updateModel) as E) + } catch (exception: NumberFormatException) { + throw ResponseStatusException(HttpStatus.BAD_REQUEST) + } catch (exception: UnsupportedOperationException) { + throw ResponseStatusException(HttpStatus.BAD_REQUEST) + } + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/entity/InitializingFactory.kt b/model/src/main/kotlin/net/dungeonhub/structure/entity/InitializingFactory.kt new file mode 100644 index 0000000..c6733dc --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/entity/InitializingFactory.kt @@ -0,0 +1,7 @@ +package net.dungeonhub.structure.entity + +import net.dungeonhub.structure.model.Model + +interface InitializingFactory, M : Model> { + fun transform(entity: E): E +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/entity/UpdateableEntity.kt b/model/src/main/kotlin/net/dungeonhub/structure/entity/UpdateableEntity.kt new file mode 100644 index 0000000..d20439b --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/entity/UpdateableEntity.kt @@ -0,0 +1,8 @@ +package net.dungeonhub.structure.entity + +import net.dungeonhub.structure.model.Model +import net.dungeonhub.structure.model.UpdateModel + +interface UpdateableEntity> : Entity { + fun update(updateModel: U): Entity +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/model/CreationModel.kt b/model/src/main/kotlin/net/dungeonhub/structure/model/CreationModel.kt new file mode 100644 index 0000000..53b93b8 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/model/CreationModel.kt @@ -0,0 +1,3 @@ +package net.dungeonhub.structure.model + +interface CreationModel : Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/model/InitializeModel.kt b/model/src/main/kotlin/net/dungeonhub/structure/model/InitializeModel.kt new file mode 100644 index 0000000..86ca2ef --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/model/InitializeModel.kt @@ -0,0 +1,14 @@ +package net.dungeonhub.structure.model + +import net.dungeonhub.structure.entity.Entity +import net.dungeonhub.structure.entity.InitializingFactory + +interface InitializeModel, M : Model, C : CreationModel?> : Model { + fun toEntity(): E + + fun fromCreationModel(creationModel: C): InitializeModel + + fun toEntity(factory: InitializingFactory): E { + return factory.transform(toEntity()) + } +} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/model/Model.kt b/model/src/main/kotlin/net/dungeonhub/structure/model/Model.kt new file mode 100644 index 0000000..2f2b915 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/model/Model.kt @@ -0,0 +1,3 @@ +package net.dungeonhub.structure.model + +interface Model \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/model/UpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/structure/model/UpdateModel.kt new file mode 100644 index 0000000..ea141ff --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/model/UpdateModel.kt @@ -0,0 +1,3 @@ +package net.dungeonhub.structure.model + +interface UpdateModel \ No newline at end of file diff --git a/model/src/test/kotlin/net/dungeonhub/enums/ScoreTypeTest.kt b/model/src/test/kotlin/net/dungeonhub/enums/ScoreTypeTest.kt index 42a984c..fdf923d 100644 --- a/model/src/test/kotlin/net/dungeonhub/enums/ScoreTypeTest.kt +++ b/model/src/test/kotlin/net/dungeonhub/enums/ScoreTypeTest.kt @@ -11,13 +11,13 @@ class ScoreTypeTest { for(scoreType in ScoreType.entries) { val suffix = if (scoreType.leaderboardSuffix.isNullOrBlank()) "" else " ${scoreType.leaderboardSuffix}" + val carryType = CarryTypeModel(0, "identifier", "DisplayName", DiscordServerModel(0), null, null, false) + assertEquals( "Leaderboard | Total score$suffix", scoreType.getLeaderboardTitle(null) ) - val carryType = CarryTypeModel(0, "identifier", "DisplayName", DiscordServerModel(0), null, null, false) - assertEquals( "Leaderboard | DisplayName-Carries$suffix", scoreType.getLeaderboardTitle(carryType) From ac127779c70db7c38f1ee854e0779dd37799e21d Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 31 Oct 2024 12:36:22 +0100 Subject: [PATCH 10/18] Fixed dependencies not being available in other projects. --- model/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/model/build.gradle.kts b/model/build.gradle.kts index e8edc67..6db0383 100644 --- a/model/build.gradle.kts +++ b/model/build.gradle.kts @@ -31,12 +31,12 @@ repositories { dependencies { //Moshi, the JSON library - implementation("com.squareup.moshi:moshi-kotlin:1.15.1") + api("com.squareup.moshi:moshi-kotlin:1.15.1") ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.1") //Used frameworks for compatible classes - api("dev.kordex:kord-extensions:2.2.1-SNAPSHOT") - api("org.springframework:spring-web:6.1.12") + implementation("dev.kordex:kord-extensions:2.2.1-SNAPSHOT") + implementation("org.springframework:spring-web:6.1.12") testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") From 659dec57923f374d9561fd7e650d7a22654f7cd2 Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 31 Oct 2024 12:37:21 +0100 Subject: [PATCH 11/18] Changed the interface structure --- .../dungeonhub/structure/entity/EntityService.kt | 14 ++++++-------- .../structure/entity/UpdateableEntity.kt | 8 -------- .../dungeonhub/structure/model/UpdateableModel.kt | 5 +++++ 3 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 model/src/main/kotlin/net/dungeonhub/structure/entity/UpdateableEntity.kt create mode 100644 model/src/main/kotlin/net/dungeonhub/structure/model/UpdateableModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt b/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt index 9ab62b8..9983981 100644 --- a/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt +++ b/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt @@ -11,7 +11,7 @@ import java.util.* import java.util.function.Function import java.util.stream.Collectors -interface EntityService, M : Model, C : CreationModel, I : InitializeModel, U : UpdateModel> { +interface EntityService, M : Model, C : CreationModel, I : InitializeModel, U : UpdateModel> { fun loadEntityById(id: Long): Optional fun findAllEntities(): List @@ -45,11 +45,8 @@ interface EntityService, M : Model, C : CreationModel fun update(id: Long, updateModel: U): E { try { return loadEntityById(id) - .map { entity: E -> entity.update(updateModel) } - .map { entity: Entity -> - @Suppress("UNCHECKED_CAST") - saveEntity(entity as E) - } + .map { entity -> updateEntity(entity, updateModel) } + .map { saveEntity(it) } .orElseThrow { EntityUnknownException(id) } } catch (exception: NumberFormatException) { throw ResponseStatusException(HttpStatus.BAD_REQUEST) @@ -60,12 +57,13 @@ interface EntityService, M : Model, C : CreationModel fun update(entity: E, updateModel: U): E { try { - @Suppress("UNCHECKED_CAST") - return saveEntity(entity.update(updateModel) as E) + return saveEntity(updateEntity(entity, updateModel)) } catch (exception: NumberFormatException) { throw ResponseStatusException(HttpStatus.BAD_REQUEST) } catch (exception: UnsupportedOperationException) { throw ResponseStatusException(HttpStatus.BAD_REQUEST) } } + + fun updateEntity(entity: E, updateModel: U): E } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/entity/UpdateableEntity.kt b/model/src/main/kotlin/net/dungeonhub/structure/entity/UpdateableEntity.kt deleted file mode 100644 index d20439b..0000000 --- a/model/src/main/kotlin/net/dungeonhub/structure/entity/UpdateableEntity.kt +++ /dev/null @@ -1,8 +0,0 @@ -package net.dungeonhub.structure.entity - -import net.dungeonhub.structure.model.Model -import net.dungeonhub.structure.model.UpdateModel - -interface UpdateableEntity> : Entity { - fun update(updateModel: U): Entity -} \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/structure/model/UpdateableModel.kt b/model/src/main/kotlin/net/dungeonhub/structure/model/UpdateableModel.kt new file mode 100644 index 0000000..9d768e9 --- /dev/null +++ b/model/src/main/kotlin/net/dungeonhub/structure/model/UpdateableModel.kt @@ -0,0 +1,5 @@ +package net.dungeonhub.structure.model + +interface UpdateableModel, M : Model> : Model { + fun getUpdateModel(): U +} \ No newline at end of file From ef54d11ce9974ea518e5c235f91274d3e9ce749b Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 31 Oct 2024 12:38:21 +0100 Subject: [PATCH 12/18] Added a uuid adapter to moshi and added some more utility. --- .../net/dungeonhub/service/MoshiService.kt | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt b/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt index b7ca295..95c97d5 100644 --- a/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt +++ b/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt @@ -2,17 +2,27 @@ package net.dungeonhub.service import com.squareup.moshi.* import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory +import net.dungeonhub.model.carry_difficulty.CarryDifficultyModel +import net.dungeonhub.model.carry_tier.CarryTierModel +import net.dungeonhub.model.carry_type.CarryTypeModel import java.awt.Color import java.time.Instant +import java.util.* +@OptIn(ExperimentalStdlibApi::class) object MoshiService { //TODO add type adapter for kord embeds ? val moshi: Moshi = Moshi.Builder() .add(Instant::class.java, InstantAdapter()) .add(Color::class.java, ColorAdapter()) + .add(UUID::class.java, UUIDAdapter()) .addLast(KotlinJsonAdapterFactory()) .build() + val carryTypeListMoshi = moshi.adapter>() + val carryTierListMoshi = moshi.adapter>() + val carryDifficultyListMoshi = moshi.adapter>() + class InstantAdapter : JsonAdapter() { override fun toJson(writer: JsonWriter, instant: Instant?) { if(instant == null) { @@ -34,6 +44,17 @@ object MoshiService { } class ColorAdapter : JsonAdapter() { + override fun toJson(writer: JsonWriter, color: Color?) { + if(color == null) { + writer.nullValue() + return + } + + writer.value("#${Integer.toHexString( + color.red * 256 * 256 + color.green * 256 + color.blue + ).uppercase()}") + } + override fun fromJson(reader: JsonReader): Color? { if(reader.peek() == JsonReader.Token.NULL) { reader.nextNull() @@ -52,16 +73,25 @@ object MoshiService { return Color.decode(colorValue.toString()) } + } - override fun toJson(writer: JsonWriter, color: Color?) { - if(color == null) { + class UUIDAdapter : JsonAdapter() { + override fun toJson(writer: JsonWriter, uuid: UUID?) { + if(uuid == null) { writer.nullValue() return } - writer.value("#${Integer.toHexString( - color.red * 256 * 256 + color.green * 256 + color.blue - ).uppercase()}") + writer.value(uuid.toString()) + } + + override fun fromJson(reader: JsonReader): UUID? { + if(reader.peek() == JsonReader.Token.NULL) { + reader.nextNull() + return null + } + + return UUID.fromString(reader.nextString()) } } } \ No newline at end of file From f1e02f41d995d0b2a7f50e5916d740b20b6b24ee Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 31 Oct 2024 12:38:56 +0100 Subject: [PATCH 13/18] Rename .java to .kt --- ...ryDifficultyUpdateModel.java => CarryDifficultyUpdateModel.kt} | 0 .../{CarryQueueCreationModel.java => CarryQueueCreationModel.kt} | 0 .../{CarryQueueUpdateModel.java => CarryQueueUpdateModel.kt} | 0 .../{CarryTierCreationModel.java => CarryTierCreationModel.kt} | 0 .../{CarryTierUpdateModel.java => CarryTierUpdateModel.kt} | 0 .../{CarryTypeCreationModel.java => CarryTypeCreationModel.kt} | 0 .../{CarryTypeUpdateModel.java => CarryTypeUpdateModel.kt} | 0 .../{CntRequestCreationModel.java => CntRequestCreationModel.kt} | 0 .../{CntRequestUpdateModel.java => CntRequestUpdateModel.kt} | 0 ...{DiscordRoleCreationModel.java => DiscordRoleCreationModel.kt} | 0 .../{DiscordRoleUpdateModel.java => DiscordRoleUpdateModel.kt} | 0 ...leGroupCreationModel.java => DiscordRoleGroupCreationModel.kt} | 0 ...rdRoleGroupUpdateModel.java => DiscordRoleGroupUpdateModel.kt} | 0 ...{DiscordUserCreationModel.java => DiscordUserCreationModel.kt} | 0 .../{DiscordUserUpdateModel.java => DiscordUserUpdateModel.kt} | 0 .../{PurgeTypeCreationModel.java => PurgeTypeCreationModel.kt} | 0 .../{PurgeTypeUpdateModel.java => PurgeTypeUpdateModel.kt} | 0 .../model/score/{ScoreUpdateModel.java => ScoreUpdateModel.kt} | 0 .../{WarningCreationModel.java => WarningCreationModel.kt} | 0 ...EvidenceCreationModel.java => WarningEvidenceCreationModel.kt} | 0 .../warning/{WarningUpdateModel.java => WarningUpdateModel.kt} | 0 21 files changed, 0 insertions(+), 0 deletions(-) rename model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/{CarryDifficultyUpdateModel.java => CarryDifficultyUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/carry_queue/{CarryQueueCreationModel.java => CarryQueueCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/carry_queue/{CarryQueueUpdateModel.java => CarryQueueUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/carry_tier/{CarryTierCreationModel.java => CarryTierCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/carry_tier/{CarryTierUpdateModel.java => CarryTierUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/carry_type/{CarryTypeCreationModel.java => CarryTypeCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/carry_type/{CarryTypeUpdateModel.java => CarryTypeUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/cnt_request/{CntRequestCreationModel.java => CntRequestCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/cnt_request/{CntRequestUpdateModel.java => CntRequestUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_role/{DiscordRoleCreationModel.java => DiscordRoleCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_role/{DiscordRoleUpdateModel.java => DiscordRoleUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_role_group/{DiscordRoleGroupCreationModel.java => DiscordRoleGroupCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_role_group/{DiscordRoleGroupUpdateModel.java => DiscordRoleGroupUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_user/{DiscordUserCreationModel.java => DiscordUserCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/discord_user/{DiscordUserUpdateModel.java => DiscordUserUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/purge_type/{PurgeTypeCreationModel.java => PurgeTypeCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/purge_type/{PurgeTypeUpdateModel.java => PurgeTypeUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/score/{ScoreUpdateModel.java => ScoreUpdateModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/warning/{WarningCreationModel.java => WarningCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/warning/{WarningEvidenceCreationModel.java => WarningEvidenceCreationModel.kt} (100%) rename model/src/main/kotlin/net/dungeonhub/model/warning/{WarningUpdateModel.java => WarningUpdateModel.kt} (100%) diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.java rename to model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.java b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.kt similarity index 100% rename from model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.java rename to model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.kt From 5e4e5fab06704befa809092b87123aa5f3d062ec Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 31 Oct 2024 12:38:58 +0100 Subject: [PATCH 14/18] Implemented all model classes. --- .../CarryDifficultyCreationModel.kt | 12 +- .../carry_difficulty/CarryDifficultyModel.kt | 18 ++- .../CarryDifficultyUpdateModel.kt | 100 ++++++++----- .../carry_queue/CarryQueueCreationModel.kt | 78 +++------- .../carry_queue/CarryQueueUpdateModel.kt | 134 +++++++----------- .../carry_tier/CarryTierCreationModel.kt | 40 ++---- .../model/carry_tier/CarryTierUpdateModel.kt | 128 ++++++++++------- .../carry_type/CarryTypeCreationModel.kt | 66 ++------- .../model/carry_type/CarryTypeUpdateModel.kt | 80 +++++++---- .../cnt_request/CntRequestCreationModel.kt | 41 ++---- .../cnt_request/CntRequestUpdateModel.kt | 80 +++++------ .../discord_role/DiscordRoleCreationModel.kt | 30 ++-- .../discord_role/DiscordRoleUpdateModel.kt | 46 +++--- .../DiscordRoleGroupCreationModel.kt | 22 +-- .../DiscordRoleGroupUpdateModel.kt | 15 +- .../discord_user/DiscordUserCreationModel.kt | 26 ++-- .../discord_user/DiscordUserUpdateModel.kt | 56 +++----- .../purge_type/PurgeTypeCreationModel.kt | 36 ++--- .../model/purge_type/PurgeTypeUpdateModel.kt | 31 ++-- .../net/dungeonhub/model/score/ScoreModel.kt | 2 +- .../model/score/ScoreUpdateModel.kt | 27 ++-- .../model/warning/WarningCreationModel.kt | 30 ++-- .../warning/WarningEvidenceCreationModel.kt | 24 ++-- .../model/warning/WarningUpdateModel.kt | 42 +++--- .../model/CarryDifficultyUpdateModelTest.kt | 87 ++++++++++++ .../model/DiscordUserCreationModelTest.kt | 20 +++ 26 files changed, 626 insertions(+), 645 deletions(-) create mode 100644 model/src/test/kotlin/net/dungeonhub/model/CarryDifficultyUpdateModelTest.kt create mode 100644 model/src/test/kotlin/net/dungeonhub/model/DiscordUserCreationModelTest.kt diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt index 8b63323..f77156a 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyCreationModel.kt @@ -5,10 +5,10 @@ import net.dungeonhub.structure.model.CreationModel class CarryDifficultyCreationModel( var identifier: String, var displayName: String, - var thumbnailUrl: String?, - var bulkPrice: Int?, - var bulkAmount: Int?, - var priceName: String?, - var price: Int?, - var score: Int? + var thumbnailUrl: String? = null, + var bulkPrice: Int? = null, + var bulkAmount: Int? = null, + var priceName: String? = null, + var price: Int, + var score: Int ) : CreationModel \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt index 676657f..a52574c 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt @@ -1,9 +1,9 @@ package net.dungeonhub.model.carry_difficulty -import net.dungeonhub.structure.model.Model import net.dungeonhub.model.carry_tier.CarryTierModel import net.dungeonhub.model.carry_type.CarryTypeModel import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateableModel import kotlin.math.max class CarryDifficultyModel( @@ -17,7 +17,7 @@ class CarryDifficultyModel( score: Int, thumbnailUrl: String?, priceName: String? -) : Model { +) : UpdateableModel { val bulkPrice = bulkPrice get() = if (field != null && field > 0) field else null @@ -31,7 +31,7 @@ class CarryDifficultyModel( get() = field ?: carryTier.thumbnailUrl val priceName = priceName - get() = (if(!field.isNullOrBlank()) field else null) ?: displayName + get() = (if (!field.isNullOrBlank()) field else null) ?: displayName val carryType: CarryTypeModel get() = carryTier.carryType @@ -40,6 +40,18 @@ class CarryDifficultyModel( return MoshiService.moshi.adapter(CarryDifficultyModel::class.java).toJson(this) } + override fun getUpdateModel(): CarryDifficultyUpdateModel { + return CarryDifficultyUpdateModel( + displayName = displayName, + thumbnailUrl = thumbnailUrl, + bulkPrice = bulkPrice, + bulkAmount = bulkAmount, + priceName = priceName, + price = price, + score = score + ) + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.kt index 7b8a9a5..9444a30 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyUpdateModel.kt @@ -1,61 +1,89 @@ -package net.dungeonhub.model.carry_difficulty; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; - -@AllArgsConstructor -@NoArgsConstructor -@Getter -@Setter -public class CarryDifficultyUpdateModel implements UpdateModel { - private String displayName; - private String thumbnailUrl; - private Integer bulkPrice; - private Integer bulkAmount; - private String priceName; - private Integer price; - private Integer score; - - @Override - public CarryDifficultyModel apply(CarryDifficultyModel model) { +package net.dungeonhub.model.carry_difficulty + +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel + +class CarryDifficultyUpdateModel( + var displayName: String?, + thumbnailUrl: String?, + bulkPrice: Int?, + bulkAmount: Int?, + priceName: String?, + var price: Int?, + var score: Int? +) : UpdateModel { + var thumbnailUrl = thumbnailUrl + set(value) { + field = value + resetThumbnailUrl = value == null + } + + var bulkPrice = bulkPrice + set(value) { + field = value + resetBulkPrice = value == null + } + + var bulkAmount = bulkAmount + set(value) { + field = value + resetBulkAmount = value == null + } + + var priceName = priceName + set(value) { + field = value + resetPriceName = value == null + } + + var resetThumbnailUrl = false + private set + var resetBulkPrice = false + private set + var resetBulkAmount = false + private set + var resetPriceName = false + private set + + /*override fun apply(model: CarryDifficultyModel): CarryDifficultyModel { if (displayName != null) { - model.setDisplayName(displayName); + model.setDisplayName(displayName) } if (thumbnailUrl != null) { - model.setThumbnailUrl(thumbnailUrl); + model.setThumbnailUrl(thumbnailUrl) } if (bulkPrice != null) { - model.setBulkPrice(bulkPrice); + model.setBulkPrice(bulkPrice) } if (bulkAmount != null) { - model.setBulkAmount(bulkAmount); + model.setBulkAmount(bulkAmount) } if (priceName != null) { - model.setPriceName(priceName); + model.setPriceName(priceName) } if (price != null) { - model.setPrice(price); + model.setPrice(price) } if (score != null) { - model.setScore(score); + model.setScore(score) } - return model; + return model + }*/ + + fun toJson(): String { + return MoshiService.moshi.adapter(CarryDifficultyUpdateModel::class.java).toJson(this) } - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); + companion object { + fun fromJson(json: String): CarryDifficultyUpdateModel { + return MoshiService.moshi.adapter(CarryDifficultyUpdateModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.kt index bbf1bb4..50da893 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueCreationModel.kt @@ -1,62 +1,20 @@ -package net.dungeonhub.model.carry_queue; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; -import me.taubsie.dungeonhub.common.enums.QueueStep; - -import java.time.Instant; - -@NoArgsConstructor -@Getter -public class CarryQueueCreationModel implements CreationModel { - private QueueStep queueStep; - private Long carrier; - private Long player; - private Long amount; - private Long relationId; - private String attachmentLink; - private Instant time; - - public CarryQueueCreationModel setQueueStep(QueueStep queueStep) { - this.queueStep = queueStep; - return this; - } - - public CarryQueueCreationModel setCarrier(Long carrier) { - this.carrier = carrier; - return this; - } - - public CarryQueueCreationModel setPlayer(Long player) { - this.player = player; - return this; - } - - public CarryQueueCreationModel setAmount(Long amount) { - this.amount = amount; - return this; - } - - public CarryQueueCreationModel setRelationId(Long relationId) { - this.relationId = relationId; - return this; - } - - public CarryQueueCreationModel setAttachmentLink(String attachmentLink) { - this.attachmentLink = attachmentLink; - return this; - } - - public CarryQueueCreationModel setTime(Instant time) { - this.time = time; - return this; - } - - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); +package net.dungeonhub.model.carry_queue + +import net.dungeonhub.enums.QueueStep +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel +import java.time.Instant + +class CarryQueueCreationModel( + var queueStep: QueueStep, + var carrier: Long, + var player: Long, + var amount: Long, + var relationId: Long? = null, + var attachmentLink: String? = null, + var time: Instant? = null, +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(CarryQueueCreationModel::class.java).toJson(this) } } diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.kt index cc51dd4..a50f971 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueUpdateModel.kt @@ -1,111 +1,85 @@ -package net.dungeonhub.model.carry_queue; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; -import me.taubsie.dungeonhub.common.enums.QueueStep; -import me.taubsie.dungeonhub.common.model.carry_difficulty.CarryDifficultyModel; -import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; - -import java.time.Instant; - -@NoArgsConstructor -public class CarryQueueUpdateModel implements UpdateModel { - private QueueStep queueStep; - private DiscordUserModel carrier; - private DiscordUserModel player; - private Long amount; - private CarryDifficultyModel carryDifficulty; - private Long relationId; - private String attachmentLink; - private Instant time; - @Getter - private Long approver; - - public CarryQueueUpdateModel setQueueStep(QueueStep queueStep) { - this.queueStep = queueStep; - return this; - } - - public CarryQueueUpdateModel setCarrier(DiscordUserModel carrier) { - this.carrier = carrier; - return this; - } - - public CarryQueueUpdateModel setPlayer(DiscordUserModel player) { - this.player = player; - return this; - } - - public CarryQueueUpdateModel setAmount(Long amount) { - this.amount = amount; - return this; - } - - public CarryQueueUpdateModel setCarryDifficulty(CarryDifficultyModel carryDifficulty) { - this.carryDifficulty = carryDifficulty; - return this; - } - - public CarryQueueUpdateModel setRelationId(Long relationId) { - this.relationId = relationId; - return this; - } +package net.dungeonhub.model.carry_queue + +import net.dungeonhub.enums.QueueStep +import net.dungeonhub.model.carry_difficulty.CarryDifficultyModel +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel +import java.time.Instant + +class CarryQueueUpdateModel( + var queueStep: QueueStep?, + var carrier: DiscordUserModel?, + var player: DiscordUserModel?, + var amount: Long?, + var carryDifficulty: CarryDifficultyModel?, + relationId: Long?, + attachmentLink: String?, + time: Instant?, + var approver: Long? +) : UpdateModel { + var relationId = relationId + set(value) { + field = value + resetRelationId = value == null + } - public CarryQueueUpdateModel setAttachmentLink(String attachmentLink) { - this.attachmentLink = attachmentLink; - return this; - } + var attachmentLink = attachmentLink + set(value) { + field = value + resetAttachmentLink = value == null + } - public CarryQueueUpdateModel setTime(Instant time) { - this.time = time; - return this; - } + var time = time + set(value) { + field = value + resetTime = value == null + } - public CarryQueueUpdateModel setApprover(Long approver) { - this.approver = approver; - return this; - } + var resetRelationId = false + private set + var resetAttachmentLink = false + private set + var resetTime = false + private set - @Override - public CarryQueueModel apply(CarryQueueModel carryQueueModel) { + /*override fun apply(carryQueueModel: CarryQueueModel): CarryQueueModel { if (queueStep != null) { - carryQueueModel.setQueueStep(queueStep); + carryQueueModel.setQueueStep(queueStep) } if (carrier != null) { - carryQueueModel.setCarrier(carrier); + carryQueueModel.setCarrier(carrier) } if (player != null) { - carryQueueModel.setPlayer(player); + carryQueueModel.setPlayer(player) } if (amount != null) { - carryQueueModel.setAmount(amount); + carryQueueModel.setAmount(amount) } if (carryDifficulty != null) { - carryQueueModel.setCarryDifficulty(carryDifficulty); + carryQueueModel.setCarryDifficulty(carryDifficulty) } if (relationId != null) { - carryQueueModel.setRelationId(relationId); + carryQueueModel.setRelationId(relationId) } if (attachmentLink != null) { - carryQueueModel.setAttachmentLink(attachmentLink); + carryQueueModel.setAttachmentLink(attachmentLink) } if (time != null) { - carryQueueModel.setTime(time); + carryQueueModel.setTime(time) } - return carryQueueModel; - } + return carryQueueModel + }*/ - public String toJson() { - return DungeonHubService.getInstance().getGson().toJson(this); + fun toJson(): String { + return MoshiService.moshi.adapter(CarryQueueUpdateModel::class.java).toJson(this) } } diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.kt index 4d0dba2..f86831e 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierCreationModel.kt @@ -1,29 +1,19 @@ -package net.dungeonhub.model.carry_tier; +package net.dungeonhub.model.carry_tier -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel -@AllArgsConstructor -@NoArgsConstructor -@Getter -@Setter -public class CarryTierCreationModel implements CreationModel { - private String identifier; - private String displayName; - private Long category; - private Long priceChannel; - private String descriptiveName; - private String thumbnailUrl; - private String priceTitle; - private String priceDescription; - - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); +class CarryTierCreationModel( + var identifier: String, + var displayName: String, + var category: Long? = null, + var priceChannel: Long? = null, + var descriptiveName: String? = null, + var thumbnailUrl: String? = null, + var priceTitle: String? = null, + var priceDescription: String? = null, +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(CarryTierCreationModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.kt index d8b4eaf..ca99f17 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierUpdateModel.kt @@ -1,75 +1,105 @@ -package net.dungeonhub.model.carry_tier; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; - -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor -public class CarryTierUpdateModel implements UpdateModel { - private Long category; - private Long priceChannel; - private String descriptiveName; - private String thumbnailUrl; - private String priceTitle; - private String priceDescription; - private String displayName; - - public static CarryTierUpdateModel fromCarryTier(CarryTierModel carryTier) { - return new CarryTierUpdateModel(carryTier.getCategory().orElse(null), - carryTier.getPriceChannel().orElse(null), - carryTier.getActualDescriptiveName().orElse(null), - carryTier.getThumbnailUrl().orElse(null), carryTier.getActualPriceTitle().orElse(null), - carryTier.getPriceDescription().orElse(null), carryTier.getDisplayName()); - } +package net.dungeonhub.model.carry_tier - public static CarryTierUpdateModel fromJson(String json) { - return DungeonHubService.getInstance() - .getGson() - .fromJson(json, CarryTierUpdateModel.class); - } +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); - } +class CarryTierUpdateModel( + var displayName: String?, + category: Long?, + priceChannel: Long?, + descriptiveName: String?, + thumbnailUrl: String?, + priceTitle: String?, + priceDescription: String? +) : UpdateModel { + var category = category + set(value) { + field = value + resetCategory = value == null + } + + var priceChannel = priceChannel + set(value) { + field = value + resetPriceChannel = value == null + } + + var descriptiveName = descriptiveName + set(value) { + field = value + resetDescriptiveName = value == null + } + + var thumbnailUrl = thumbnailUrl + set(value) { + field = value + resetThumbnailUrl = value == null + } - @Override - public CarryTierModel apply(CarryTierModel model) { + var priceTitle = priceTitle + set(value) { + field = value + resetPriceTitle = value == null + } + + var priceDescription = priceDescription + set(value) { + field = value + resetPriceDescription = value == null + } + + var resetCategory = false + private set + var resetPriceChannel = false + private set + var resetDescriptiveName = false + private set + var resetThumbnailUrl = false + private set + var resetPriceTitle = false + private set + var resetPriceDescription = false + private set + + /*override fun apply(model: CarryTierModel): CarryTierModel { if (category != null) { - model.setCategory(category); + model.setCategory(category) } if (priceChannel != null) { - model.setPriceChannel(priceChannel); + model.setPriceChannel(priceChannel) } if (descriptiveName != null) { - model.setDescriptiveName(descriptiveName); + model.setDescriptiveName(descriptiveName) } if (thumbnailUrl != null) { - model.setThumbnailUrl(thumbnailUrl); + model.setThumbnailUrl(thumbnailUrl) } if (priceTitle != null) { - model.setPriceTitle(priceTitle); + model.setPriceTitle(priceTitle) } if (priceDescription != null) { - model.setPriceDescription(priceDescription); + model.setPriceDescription(priceDescription) } if (displayName != null) { - model.setDisplayName(displayName); + model.setDisplayName(displayName) } - return model; + return model + }*/ + + fun toJson(): String { + return MoshiService.moshi.adapter(CarryTierUpdateModel::class.java).toJson(this) + } + + companion object { + fun fromJson(json: String): CarryTierUpdateModel { + return MoshiService.moshi.adapter(CarryTierUpdateModel::class.java).fromJson(json)!! + } } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.kt index 13a3860..cad3195 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeCreationModel.kt @@ -1,54 +1,16 @@ -package net.dungeonhub.model.carry_type; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; - -@AllArgsConstructor -@NoArgsConstructor -@Getter -public class CarryTypeCreationModel implements CreationModel { - private String identifier; - private String displayName; - private Long logChannel; - private Long leaderboardChannel; - private Boolean eventActive; - - public CarryTypeCreationModel(String identifier, String displayName) { - this.identifier = identifier; - this.displayName = displayName; - } - - public CarryTypeCreationModel setIdentifier(String identifier) { - this.identifier = identifier; - return this; - } - - public CarryTypeCreationModel setDisplayName(String displayName) { - this.displayName = displayName; - return this; - } - - public CarryTypeCreationModel setLogChannel(Long logChannel) { - this.logChannel = logChannel; - return this; - } - - public CarryTypeCreationModel setLeaderboardChannel(Long leaderboardChannel) { - this.leaderboardChannel = leaderboardChannel; - return this; - } - - public CarryTypeCreationModel setEventActive(Boolean eventActive) { - this.eventActive = eventActive; - return this; - } - - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); +package net.dungeonhub.model.carry_type + +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel + +class CarryTypeCreationModel( + var identifier: String, + var displayName: String, + var logChannel: Long? = null, + var leaderboardChannel: Long? = null, + var eventActive: Boolean? = null +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(CarryTypeCreationModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.kt index f735203..aa16ea2 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeUpdateModel.kt @@ -1,42 +1,60 @@ -package net.dungeonhub.model.carry_type; - -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; - -@Getter -@Setter -public class CarryTypeUpdateModel implements UpdateModel { - private String displayName; - private Long logChannel; - private Long leaderboardChannel; - private Boolean eventActive; - - @Override - public CarryTypeModel apply(CarryTypeModel carryTypeModel) { - if(displayName != null) { - carryTypeModel.setDisplayName(displayName); +package net.dungeonhub.model.carry_type + +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel + +class CarryTypeUpdateModel( + var displayName: String?, + logChannel: Long?, + leaderboardChannel: Long?, + eventActive: Boolean? +) : UpdateModel { + var logChannel = logChannel + set(value) { + field = value + resetLogChannel = value == null } - if(logChannel != null) { - carryTypeModel.setLogChannel(logChannel); + var leaderboardChannel = leaderboardChannel + set(value) { + field = value + resetLeaderboardChannel = value == null } - if(leaderboardChannel != null) { - carryTypeModel.setLeaderboardChannel(leaderboardChannel); + var eventActive = eventActive + set(value) { + field = value + resetEventActive = value == null } - if(eventActive != null) { - carryTypeModel.setEventActive(eventActive); + var resetLogChannel = false + private set + var resetLeaderboardChannel = false + private set + var resetEventActive = false + private set + + /*override fun apply(carryTypeModel: CarryTypeModel): CarryTypeModel { + if (displayName != null) { + carryTypeModel.setDisplayName(displayName) } - return carryTypeModel; - } + if (logChannel != null) { + carryTypeModel.setLogChannel(logChannel) + } + + if (leaderboardChannel != null) { + carryTypeModel.setLeaderboardChannel(leaderboardChannel) + } + + if (eventActive != null) { + carryTypeModel.setEventActive(eventActive) + } + + return carryTypeModel + }*/ - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); + fun toJson(): String { + return MoshiService.moshi.adapter(CarryTypeUpdateModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.kt index c5e26f5..e77f3f6 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestCreationModel.kt @@ -1,30 +1,19 @@ -package net.dungeonhub.model.cnt_request; +package net.dungeonhub.model.cnt_request -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel +import java.time.Instant -import javax.annotation.Nullable; -import java.time.Instant; - -@Getter -@Setter -@AllArgsConstructor -public class CntRequestCreationModel implements CreationModel { - private long messageId; - private Long user; - @Nullable - private Long claimer; - private Instant time; - private String coinValue; - private String description; - private String requirement; - - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); +class CntRequestCreationModel( + var messageId: Long, + var user: Long, + var claimer: Long? = null, + var time: Instant, + var coinValue: String, + var description: String, + var requirement: String +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(CntRequestCreationModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.kt index b41bcbe..e965ef7 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestUpdateModel.kt @@ -1,58 +1,48 @@ -package net.dungeonhub.model.cnt_request; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; -import me.taubsie.dungeonhub.common.model.discord_user.DiscordUserModel; - -import javax.annotation.Nullable; - -@Getter -@Setter -@AllArgsConstructor -@Builder -public class CntRequestUpdateModel implements UpdateModel { - //TODO discuss -> needs to be changable? - //private long messageId; - @Nullable - private DiscordUserModel claimer; - private boolean removeClaimer; - @Nullable - private String coinValue; - @Nullable - private String description; - @Nullable - private String requirement; - - @Override - public CntRequestModel apply(CntRequestModel model) { - if(removeClaimer) { - model.setClaimer(null); +package net.dungeonhub.model.cnt_request + +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel + +class CntRequestUpdateModel( + claimer: DiscordUserModel?, + var coinValue: String?, + var description: String?, + var requirement: String? +) : UpdateModel { + var claimer = claimer + set(value) { + resetClaimer = value == null + field = value } - if(claimer != null) { - model.setClaimer(claimer); + var resetClaimer = false + private set + /*override fun apply(model: CntRequestModel): CntRequestModel { + if (removeClaimer) { + model.setClaimer(null) } - if(coinValue != null) { - model.setCoinValue(coinValue); + if (claimer != null) { + model.setClaimer(claimer) } - if(description != null) { - model.setDescription(description); + if (coinValue != null) { + model.setCoinValue(coinValue) } - if(requirement != null) { - model.setRequirement(requirement); + if (description != null) { + model.setDescription(description) } - return model; - } + if (requirement != null) { + model.setRequirement(requirement) + } + + return model + }*/ - public String toJson() { - return DungeonHubService.getInstance().getGson().toJson(this); + fun toJson(): String { + return MoshiService.moshi.adapter(CntRequestUpdateModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt index 5e84ff3..9346c12 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt @@ -1,24 +1,14 @@ -package net.dungeonhub.model.discord_role; +package net.dungeonhub.model.discord_role -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor -public class DiscordRoleCreationModel implements CreationModel { - private long id; - private String nameSchema; - private boolean verifiedRole; - - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); +class DiscordRoleCreationModel( + var id: Long, + var nameSchema: String? = null, + var verifiedRole: Boolean? = null +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(DiscordRoleCreationModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.kt index 0d37c97..e48c6e3 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleUpdateModel.kt @@ -1,36 +1,34 @@ -package net.dungeonhub.model.discord_role; +package net.dungeonhub.model.discord_role -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor -public class DiscordRoleUpdateModel implements UpdateModel { - private String nameSchema; - private Boolean verifiedRole; +class DiscordRoleUpdateModel( + nameSchema: String?, + var verifiedRole: Boolean? +) : UpdateModel { + var nameSchema = nameSchema + set(value) { + resetNameSchema = value == null + field = value + } + + var resetNameSchema = false + private set - @Override - public DiscordRoleModel apply(DiscordRoleModel model) { + /*override fun apply(model: DiscordRoleModel): DiscordRoleModel { if (nameSchema != null) { - model.setNameSchema(nameSchema); + model.setNameSchema(nameSchema) } if (verifiedRole != null) { - model.setVerifiedRole(verifiedRole); + model.setVerifiedRole(verifiedRole) } - return model; - } + return model + }*/ - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); + fun toJson(): String { + return MoshiService.moshi.adapter(DiscordRoleUpdateModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.kt index e1e42ab..2673c92 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupCreationModel.kt @@ -1,17 +1,9 @@ -package net.dungeonhub.model.discord_role_group; +package net.dungeonhub.model.discord_role_group -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; -import me.taubsie.dungeonhub.common.model.discord_role.DiscordRoleModel; +import net.dungeonhub.model.discord_role.DiscordRoleModel +import net.dungeonhub.structure.model.CreationModel -@AllArgsConstructor -@NoArgsConstructor -@Getter -@Setter -public class DiscordRoleGroupCreationModel implements CreationModel { - private DiscordRoleModel discordRole; - private DiscordRoleModel roleGroup; -} \ No newline at end of file +class DiscordRoleGroupCreationModel( + var discordRole: DiscordRoleModel, + var roleGroup: DiscordRoleModel +) : CreationModel \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.kt index 2af1cc7..b517e88 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role_group/DiscordRoleGroupUpdateModel.kt @@ -1,13 +1,6 @@ -package net.dungeonhub.model.discord_role_group; +package net.dungeonhub.model.discord_role_group -import lombok.NoArgsConstructor; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; +import net.dungeonhub.structure.model.UpdateModel -@NoArgsConstructor -public class DiscordRoleGroupUpdateModel implements UpdateModel { - //this won't be updated, still needs to exist due to internal references - @Override - public DiscordRoleGroupModel apply(DiscordRoleGroupModel model) { - return model; - } -} \ No newline at end of file +//this won't be updated, still needs to exist due to internal references +class DiscordRoleGroupUpdateModel : UpdateModel \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.kt index fe80929..50a1088 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserCreationModel.kt @@ -1,18 +1,14 @@ -package net.dungeonhub.model.discord_user; +package net.dungeonhub.model.discord_user -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel +import java.util.* -import java.util.UUID; - -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor -public class DiscordUserCreationModel implements CreationModel { - private long id; - private UUID minecraftId; +class DiscordUserCreationModel( + var id: Long, + var minecraftId: UUID? = null +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(DiscordUserCreationModel::class.java).toJson(this) + } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.kt index 9aaf4e8..30664ee 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserUpdateModel.kt @@ -1,44 +1,34 @@ -package net.dungeonhub.model.discord_user; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; - -import java.util.UUID; - -@Getter -@Setter -@NoArgsConstructor -public class DiscordUserUpdateModel implements UpdateModel { - private UUID minecraftId; - private boolean removeMinecraftId = false; - - public DiscordUserUpdateModel(UUID minecraftId) { - this.minecraftId = minecraftId; - } +package net.dungeonhub.model.discord_user + +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel +import java.util.* + +class DiscordUserUpdateModel( + minecraftId: UUID? +) : UpdateModel { + var minecraftId = minecraftId + set(value) { + field = value + removeMinecraftId = value == null + } - public DiscordUserUpdateModel(boolean removeMinecraftId) { - this.removeMinecraftId = removeMinecraftId; - } + var removeMinecraftId = false + private set - @Override - public DiscordUserModel apply(DiscordUserModel model) { + /*override fun apply(model: DiscordUserModel): DiscordUserModel { if (removeMinecraftId) { - model.setMinecraftId(null); + model.setMinecraftId(null) } if (minecraftId != null) { - model.setMinecraftId(minecraftId); + model.setMinecraftId(minecraftId) } - return model; - } + return model + }*/ - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); + fun toJson(): String { + return MoshiService.moshi.adapter(DiscordUserUpdateModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.kt index ee06357..52e9167 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeCreationModel.kt @@ -1,31 +1,13 @@ -package net.dungeonhub.model.purge_type; +package net.dungeonhub.model.purge_type -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel -@AllArgsConstructor -@NoArgsConstructor -@Getter -public class PurgeTypeCreationModel implements CreationModel { - private String identifier; - private String displayName; - - public PurgeTypeCreationModel setIdentifier(String identifier) { - this.identifier = identifier; - return this; - } - - public PurgeTypeCreationModel setDisplayName(String displayName) { - this.displayName = displayName; - return this; - } - - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); +class PurgeTypeCreationModel( + var identifier: String, + var displayName: String +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(PurgeTypeCreationModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.kt index 3d6dc5b..898abf7 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/purge_type/PurgeTypeUpdateModel.kt @@ -1,27 +1,20 @@ -package net.dungeonhub.model.purge_type; +package net.dungeonhub.model.purge_type -import lombok.Getter; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel -@Getter -@Setter -public class PurgeTypeUpdateModel implements UpdateModel { - private String displayName; - - @Override - public PurgeTypeModel apply(PurgeTypeModel purgeTypeModel) { +class PurgeTypeUpdateModel( + var displayName: String? +) : UpdateModel { + /*override fun apply(purgeTypeModel: PurgeTypeModel): PurgeTypeModel { if (displayName != null) { - purgeTypeModel.setDisplayName(displayName); + purgeTypeModel.setDisplayName(displayName) } - return purgeTypeModel; - } + return purgeTypeModel + }*/ - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); + fun toJson(): String { + return MoshiService.moshi.adapter(PurgeTypeUpdateModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt index 1bc877e..d945689 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreModel.kt @@ -8,7 +8,7 @@ import net.dungeonhub.structure.model.Model class ScoreModel( val carrier: DiscordUserModel, - val carryType: CarryTypeModel, + val carryType: CarryTypeModel?, val scoreType: ScoreType, val scoreAmount: Long? ) : Model { diff --git a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.kt index 5e8be7a..c4c646a 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/score/ScoreUpdateModel.kt @@ -1,22 +1,13 @@ -package net.dungeonhub.model.score; +package net.dungeonhub.model.score -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import me.taubsie.dungeonhub.common.DungeonHubService; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateModel -@AllArgsConstructor -@NoArgsConstructor -@Getter -@Setter -public class ScoreUpdateModel { - private long id; - private long amount; - - public String toJson() { - return DungeonHubService.getInstance() - .getGson() - .toJson(this); +class ScoreUpdateModel( + val id: Long, + var amount: Long +) : UpdateModel { + fun toJson(): String { + return MoshiService.moshi.adapter(ScoreUpdateModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.kt index 7c40219..2be2605 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningCreationModel.kt @@ -1,21 +1,17 @@ -package net.dungeonhub.model.warning; +package net.dungeonhub.model.warning -import lombok.AllArgsConstructor; -import lombok.Getter; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; -import me.taubsie.dungeonhub.common.enums.WarningType; +import net.dungeonhub.enums.WarningType +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel -@AllArgsConstructor -@Getter -public class WarningCreationModel implements CreationModel { - private long user; - private long striker; - private WarningType warningType; - private String reason; - private boolean active; - - public String toJson() { - return DungeonHubService.getInstance().getGson().toJson(this); +class WarningCreationModel( + var user: Long, + var striker: Long, + var warningType: WarningType, + var reason: String? = null, + var active: Boolean = true +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(WarningCreationModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.kt index 5e3bb3b..84eaab4 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningEvidenceCreationModel.kt @@ -1,19 +1,13 @@ -package net.dungeonhub.model.warning; +package net.dungeonhub.model.warning -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import me.taubsie.dungeonhub.common.DungeonHubService; -import me.taubsie.dungeonhub.common.entity.model.CreationModel; +import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.CreationModel -@Getter -@AllArgsConstructor -@NoArgsConstructor -public class WarningEvidenceCreationModel implements CreationModel { - private String evidence; - private long submitter; - - public String toJson() { - return DungeonHubService.getInstance().getGson().toJson(this); +class WarningEvidenceCreationModel( + var evidence: String, + var submitter: Long +) : CreationModel { + fun toJson(): String { + return MoshiService.moshi.adapter(WarningEvidenceCreationModel::class.java).toJson(this) } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.kt index 345a1f2..303a50b 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/WarningUpdateModel.kt @@ -1,27 +1,35 @@ -package net.dungeonhub.model.warning; +package net.dungeonhub.model.warning -import me.taubsie.dungeonhub.common.entity.model.UpdateModel; -import me.taubsie.dungeonhub.common.enums.WarningType; +import net.dungeonhub.enums.WarningType +import net.dungeonhub.structure.model.UpdateModel -public class WarningUpdateModel implements UpdateModel { - private WarningType warningType; - private String reason; - private Boolean active; +class WarningUpdateModel( + var warningType: WarningType?, + reason: String?, + var active: Boolean? +) : UpdateModel { + var reason = reason + set(value) { + field = value + resetReason = value == null + } + + var resetReason = false + private set - @Override - public WarningModel apply(WarningModel model) { - if(warningType != null) { - model.setWarningType(warningType); + /*override fun apply(model: WarningModel): WarningModel { + if (warningType != null) { + model.setWarningType(warningType) } - if(reason != null) { - model.setReason(reason); + if (reason != null) { + model.setReason(reason) } - if(active != null) { - model.setActive(active); + if (active != null) { + model.setActive(active) } - return model; - } + return model + }*/ } \ No newline at end of file diff --git a/model/src/test/kotlin/net/dungeonhub/model/CarryDifficultyUpdateModelTest.kt b/model/src/test/kotlin/net/dungeonhub/model/CarryDifficultyUpdateModelTest.kt new file mode 100644 index 0000000..de8973b --- /dev/null +++ b/model/src/test/kotlin/net/dungeonhub/model/CarryDifficultyUpdateModelTest.kt @@ -0,0 +1,87 @@ +package net.dungeonhub.model + +import net.dungeonhub.model.carry_difficulty.CarryDifficultyModel +import net.dungeonhub.model.carry_difficulty.CarryDifficultyUpdateModel +import net.dungeonhub.model.carry_tier.CarryTierModel +import net.dungeonhub.model.carry_type.CarryTypeModel +import net.dungeonhub.model.discord_server.DiscordServerModel +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals + +class CarryDifficultyUpdateModelTest { + @Test + fun testCorrectSettingOfNullValues() { + val carryDifficultyUpdateModel = CarryDifficultyUpdateModel( + "displayName", + "thumbnailUrl", + 1, + 1, + "priceName", + 1, + 1 + ) + + val resetThumbnailUrl = carryDifficultyUpdateModel.javaClass.getDeclaredField("resetThumbnailUrl") + resetThumbnailUrl.trySetAccessible() + + assertEquals("thumbnailUrl", carryDifficultyUpdateModel.thumbnailUrl) + assertEquals(false, resetThumbnailUrl.getBoolean(carryDifficultyUpdateModel)) + + carryDifficultyUpdateModel.thumbnailUrl = null + + assertEquals(null, carryDifficultyUpdateModel.thumbnailUrl) + assertEquals(true, resetThumbnailUrl.getBoolean(carryDifficultyUpdateModel)) + + val json = carryDifficultyUpdateModel.toJson() + + val newObject = CarryDifficultyUpdateModel.fromJson(json) + + assertEquals(null, newObject.thumbnailUrl) + assertEquals(true, resetThumbnailUrl.getBoolean(newObject)) + } + + @Test + fun testCorrectCreationOfUpdateModel() { + val carryDifficultyModel = CarryDifficultyModel( + 0, + "identifier", + "displayName", + CarryTierModel( + 0, + "identifier", + "displayName", + CarryTypeModel( + 0, + "identifier", + "displayName", + DiscordServerModel(0), + 0, + 0, + false + ), + 0, + 0, + "descriptiveName", + "thumbnailUrl", + "priceTitle", + "priceDescription" + ), + 0, + 0, + 0, + 0, + "thumbnailUrl", + "priceName" + ) + + val updateModel = carryDifficultyModel.getUpdateModel() + + assertEquals(carryDifficultyModel.displayName, updateModel.displayName) + assertEquals(carryDifficultyModel.thumbnailUrl, updateModel.thumbnailUrl) + assertEquals(carryDifficultyModel.bulkPrice, updateModel.bulkPrice) + assertEquals(carryDifficultyModel.bulkAmount, updateModel.bulkAmount) + assertEquals(carryDifficultyModel.priceName, updateModel.priceName) + assertEquals(carryDifficultyModel.price, updateModel.price) + assertEquals(carryDifficultyModel.score, updateModel.score) + } +} \ No newline at end of file diff --git a/model/src/test/kotlin/net/dungeonhub/model/DiscordUserCreationModelTest.kt b/model/src/test/kotlin/net/dungeonhub/model/DiscordUserCreationModelTest.kt new file mode 100644 index 0000000..4592b68 --- /dev/null +++ b/model/src/test/kotlin/net/dungeonhub/model/DiscordUserCreationModelTest.kt @@ -0,0 +1,20 @@ +package net.dungeonhub.model + +import net.dungeonhub.model.discord_user.DiscordUserCreationModel +import org.junit.jupiter.api.Test +import java.util.UUID +import kotlin.test.assertEquals + +class DiscordUserCreationModelTest { + @Test + fun testCorrectSerializationOfUuid() { + val discordUserCreationModel = DiscordUserCreationModel( + 0, + UUID.fromString("39642ffc-a7fb-4d24-a1d4-916f4cad1d98") + ) + + val json = discordUserCreationModel.toJson() + + assertEquals("{\"id\":0,\"minecraftId\":\"39642ffc-a7fb-4d24-a1d4-916f4cad1d98\"}", json.replace("\\s".toRegex(), "")) + } +} \ No newline at end of file From b967c9ecea9ed9f00a04143ff1c024f6b86b023c Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 31 Oct 2024 12:57:29 +0100 Subject: [PATCH 15/18] Added some documentation. --- .../structure/entity/EntityService.kt | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt b/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt index 9983981..27b7519 100644 --- a/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt +++ b/model/src/main/kotlin/net/dungeonhub/structure/entity/EntityService.kt @@ -1,10 +1,10 @@ package net.dungeonhub.structure.entity +import net.dungeonhub.expections.EntityUnknownException import net.dungeonhub.structure.model.CreationModel +import net.dungeonhub.structure.model.InitializeModel import net.dungeonhub.structure.model.Model import net.dungeonhub.structure.model.UpdateModel -import net.dungeonhub.expections.EntityUnknownException -import net.dungeonhub.structure.model.InitializeModel import org.springframework.http.HttpStatus import org.springframework.web.server.ResponseStatusException import java.util.* @@ -42,19 +42,6 @@ interface EntityService, M : Model, C : CreationModel, I : Initial return toModel().apply(saveEntity(entity)) } - fun update(id: Long, updateModel: U): E { - try { - return loadEntityById(id) - .map { entity -> updateEntity(entity, updateModel) } - .map { saveEntity(it) } - .orElseThrow { EntityUnknownException(id) } - } catch (exception: NumberFormatException) { - throw ResponseStatusException(HttpStatus.BAD_REQUEST) - } catch (exception: UnsupportedOperationException) { - throw ResponseStatusException(HttpStatus.BAD_REQUEST) - } - } - fun update(entity: E, updateModel: U): E { try { return saveEntity(updateEntity(entity, updateModel)) @@ -65,5 +52,18 @@ interface EntityService, M : Model, C : CreationModel, I : Initial } } + fun update(id: Long, updateModel: U): E { + return loadEntityById(id) + .map { entity -> update(entity, updateModel) } + .orElseThrow { EntityUnknownException(id) } + } + + /** + * This function should be implemented by the respective service to update the entity with the values given in the update model. + * If you want to update the entity, please use [update] instead, as that function filters some common exceptions already. + * + * @param entity The entity to be updated + * @param updateModel The model containing the values to be updated + */ fun updateEntity(entity: E, updateModel: U): E } \ No newline at end of file From de8bdd5e1adce68b1d4c3ae9a09c2a9b9d19c762 Mon Sep 17 00:00:00 2001 From: traible Date: Thu, 31 Oct 2024 12:58:03 +0100 Subject: [PATCH 16/18] Made the verified role field non-nullable when creating a role. --- .../dungeonhub/model/discord_role/DiscordRoleCreationModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt index 9346c12..b07d782 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_role/DiscordRoleCreationModel.kt @@ -6,7 +6,7 @@ import net.dungeonhub.structure.model.CreationModel class DiscordRoleCreationModel( var id: Long, var nameSchema: String? = null, - var verifiedRole: Boolean? = null + var verifiedRole: Boolean = false ) : CreationModel { fun toJson(): String { return MoshiService.moshi.adapter(DiscordRoleCreationModel::class.java).toJson(this) From 9644d7e9f79f6f84e6d9a1d7d6aa15570c0ef97a Mon Sep 17 00:00:00 2001 From: traible Date: Sat, 2 Nov 2024 03:07:47 +0100 Subject: [PATCH 17/18] Improved the update model methods. --- .../carry_difficulty/CarryDifficultyModel.kt | 10 +--------- .../model/carry_queue/CarryQueueModel.kt | 8 ++++++-- .../model/carry_tier/CarryTierModel.kt | 20 +++++++++++-------- .../model/carry_type/CarryTypeModel.kt | 8 ++++++-- .../model/cnt_request/CntRequestModel.kt | 8 ++++++-- .../model/discord_user/DiscordUserModel.kt | 8 ++++++-- .../model/warning/DetailedWarningModel.kt | 18 ++++++++--------- 7 files changed, 46 insertions(+), 34 deletions(-) diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt index a52574c..c302b18 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_difficulty/CarryDifficultyModel.kt @@ -41,15 +41,7 @@ class CarryDifficultyModel( } override fun getUpdateModel(): CarryDifficultyUpdateModel { - return CarryDifficultyUpdateModel( - displayName = displayName, - thumbnailUrl = thumbnailUrl, - bulkPrice = bulkPrice, - bulkAmount = bulkAmount, - priceName = priceName, - price = price, - score = score - ) + return CarryDifficultyUpdateModel(null, null, null, null, null, null, null) } override fun equals(other: Any?): Boolean { diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt index a31ca7a..6286219 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_queue/CarryQueueModel.kt @@ -1,10 +1,10 @@ package net.dungeonhub.model.carry_queue -import net.dungeonhub.structure.model.Model import net.dungeonhub.enums.QueueStep import net.dungeonhub.model.carry_difficulty.CarryDifficultyModel import net.dungeonhub.model.discord_user.DiscordUserModel import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateableModel import java.time.Instant class CarryQueueModel( @@ -17,7 +17,7 @@ class CarryQueueModel( val relationId: Long?, val attachmentLink: String?, val time: Instant? -) : Model { +) : UpdateableModel { val carryTier = carryDifficulty.carryTier val carryType = carryTier.carryType @@ -33,4 +33,8 @@ class CarryQueueModel( return MoshiService.moshi.adapter(CarryQueueModel::class.java).fromJson(json)!! } } + + override fun getUpdateModel(): CarryQueueUpdateModel { + return CarryQueueUpdateModel(null, null, null, null, null, null, null, null, null) + } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt index bbd2914..a6f4984 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_tier/CarryTierModel.kt @@ -1,8 +1,8 @@ package net.dungeonhub.model.carry_tier -import net.dungeonhub.structure.model.Model import net.dungeonhub.model.carry_type.CarryTypeModel import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateableModel import org.jetbrains.annotations.NotNull class CarryTierModel( @@ -16,26 +16,30 @@ class CarryTierModel( thumbnailUrl: String?, priceTitle: String?, priceDescription: String? -) : Model { +) : UpdateableModel { val descriptiveName = descriptiveName @NotNull - get() = (if(!field.isNullOrBlank()) field else null) ?: displayName + get() = (if (!field.isNullOrBlank()) field else null) ?: displayName val category = category - get() = (if(field != null && field > 0L) field else null) + get() = (if (field != null && field > 0L) field else null) val thumbnailUrl = thumbnailUrl - get() = if(!field.isNullOrBlank()) field else null + get() = if (!field.isNullOrBlank()) field else null val priceTitle = priceTitle @NotNull - get() = (if(!field.isNullOrBlank()) field else null) ?: descriptiveName + get() = (if (!field.isNullOrBlank()) field else null) ?: descriptiveName val priceDescription = priceDescription - get() = if(!field.isNullOrBlank()) field else null + get() = if (!field.isNullOrBlank()) field else null val priceChannel = priceChannel - get() = if(field != null && field > 0L) field else null + get() = if (field != null && field > 0L) field else null + + override fun getUpdateModel(): CarryTierUpdateModel { + return CarryTierUpdateModel(null, null, null, null, null, null, null) + } override fun equals(other: Any?): Boolean { if (this === other) return true diff --git a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt index 8f5ef0d..47b0344 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/carry_type/CarryTypeModel.kt @@ -2,7 +2,7 @@ package net.dungeonhub.model.carry_type import net.dungeonhub.model.discord_server.DiscordServerModel import net.dungeonhub.service.MoshiService -import net.dungeonhub.structure.model.Model +import net.dungeonhub.structure.model.UpdateableModel class CarryTypeModel( val id: Long, @@ -12,7 +12,7 @@ class CarryTypeModel( logChannel: Long?, leaderboardChannel: Long?, isEventActive: Boolean? -) : Model { +) : UpdateableModel { val isEventActive = isEventActive get() = java.lang.Boolean.TRUE == field @@ -22,6 +22,10 @@ class CarryTypeModel( val leaderboardChannel = leaderboardChannel get() = (if (field != null && field > 0L) field else null) + override fun getUpdateModel(): CarryTypeUpdateModel { + return CarryTypeUpdateModel(null, null, null, null) + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false diff --git a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt index fe46382..deaa488 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/cnt_request/CntRequestModel.kt @@ -1,9 +1,9 @@ package net.dungeonhub.model.cnt_request -import net.dungeonhub.structure.model.Model import net.dungeonhub.model.discord_server.DiscordServerModel import net.dungeonhub.model.discord_user.DiscordUserModel import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateableModel import java.time.Instant class CntRequestModel( @@ -16,10 +16,14 @@ class CntRequestModel( val coinValue: String, val description: String, val requirement: String -) : Model { +) : UpdateableModel { companion object { fun fromJson(json: String): CntRequestModel { return MoshiService.moshi.adapter(CntRequestModel::class.java).fromJson(json)!! } } + + override fun getUpdateModel(): CntRequestUpdateModel { + return CntRequestUpdateModel(null, null, null, null) + } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt index 339beb5..66d89ad 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/discord_user/DiscordUserModel.kt @@ -1,16 +1,20 @@ package net.dungeonhub.model.discord_user -import net.dungeonhub.structure.model.Model import net.dungeonhub.service.MoshiService +import net.dungeonhub.structure.model.UpdateableModel import java.util.* class DiscordUserModel( val id: Long, val minecraftId: UUID? -) : Model { +) : UpdateableModel { companion object { fun fromJson(json: String): DiscordUserModel { return MoshiService.moshi.adapter(DiscordUserModel::class.java).fromJson(json)!! } } + + override fun getUpdateModel(): DiscordUserUpdateModel { + return DiscordUserUpdateModel(null) + } } \ No newline at end of file diff --git a/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt b/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt index f2b1374..7ca055f 100644 --- a/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt +++ b/model/src/main/kotlin/net/dungeonhub/model/warning/DetailedWarningModel.kt @@ -8,15 +8,15 @@ import net.dungeonhub.structure.model.Model import java.time.Instant class DetailedWarningModel( - private val id: Long, - private val server: DiscordServerModel, - private val user: DiscordUserModel, - private val striker: DiscordUserModel, - private val warningType: WarningType, - private val reason: String?, - private val active: Boolean, - private val time: Instant, - private val evidences: List + val id: Long, + val server: DiscordServerModel, + val user: DiscordUserModel, + val striker: DiscordUserModel, + val warningType: WarningType, + val reason: String?, + val active: Boolean, + val time: Instant, + val evidences: List ) : Model { companion object { fun fromJson(json: String): DetailedWarningModel { From 8dd79876cbfae1f155926a40439286318834460b Mon Sep 17 00:00:00 2001 From: traible Date: Sat, 2 Nov 2024 03:08:32 +0100 Subject: [PATCH 18/18] Added more default json adapters. --- .../net/dungeonhub/service/MoshiService.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt b/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt index 95c97d5..b0d1825 100644 --- a/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt +++ b/model/src/main/kotlin/net/dungeonhub/service/MoshiService.kt @@ -3,8 +3,16 @@ package net.dungeonhub.service import com.squareup.moshi.* import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import net.dungeonhub.model.carry_difficulty.CarryDifficultyModel +import net.dungeonhub.model.carry_queue.CarryQueueModel import net.dungeonhub.model.carry_tier.CarryTierModel import net.dungeonhub.model.carry_type.CarryTypeModel +import net.dungeonhub.model.discord_role.DiscordRoleModel +import net.dungeonhub.model.discord_role_group.DiscordRoleGroupModel +import net.dungeonhub.model.discord_server.DiscordServerModel +import net.dungeonhub.model.discord_user.DiscordUserModel +import net.dungeonhub.model.purge_type.PurgeTypeModel +import net.dungeonhub.model.score.ScoreModel +import net.dungeonhub.model.warning.DetailedWarningModel import java.awt.Color import java.time.Instant import java.util.* @@ -22,6 +30,14 @@ object MoshiService { val carryTypeListMoshi = moshi.adapter>() val carryTierListMoshi = moshi.adapter>() val carryDifficultyListMoshi = moshi.adapter>() + val carryQueueSetMoshi = moshi.adapter>() + val detailedWarningListMoshi = moshi.adapter>() + val discordRoleListMoshi = moshi.adapter>() + val discordRoleGroupListMoshi = moshi.adapter>() + val discordServerListMoshi = moshi.adapter>() + val discordUserListMoshi = moshi.adapter>() + val purgeTypeListMoshi = moshi.adapter>() + val scoreListMoshi = moshi.adapter>() class InstantAdapter : JsonAdapter() { override fun toJson(writer: JsonWriter, instant: Instant?) {