diff --git a/api/build.gradle.kts b/api/build.gradle.kts deleted file mode 100644 index ab0ef39..0000000 --- a/api/build.gradle.kts +++ /dev/null @@ -1,16 +0,0 @@ -group = "net.onelitefeather.blackhole.api" - -plugins { - alias(libs.plugins.shadow) -} - -dependencies { - implementation(platform(mn.micronaut.core.bom)) - implementation(libs.jetbrains.annotations) - implementation(project(":phoca")) - - testImplementation(project(":phoca")) - testImplementation(mn.junit.jupiter.api) - testRuntimeOnly("org.junit.platform:junit-platform-launcher") - testRuntimeOnly(mn.junit.jupiter.engine) -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfile.java b/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfile.java deleted file mode 100644 index 15265a7..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfile.java +++ /dev/null @@ -1,137 +0,0 @@ -package net.onelitefeather.blackhole.api.profile; - -import net.onelitefeather.blackhole.api.punish.PunishEntry; -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.UnmodifiableView; - -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -/** - * The interface defines the basic structure to describe a profile in the punishment system. - * - * @author theEvilReaper - * @version 1.0.0 - * @since 1.0.0 - */ -public sealed interface PunishProfile extends Metadata permits PunishProfileDTO { - - Comparator DEFAULT_COMPARATOR = Comparator.comparingLong(PunishEntry::creationDate); - - @Contract(pure = true) - static @NotNull Builder builder() { - return new PunishProfileBuilder(); - } - - @Contract(value = "_ -> new", pure = true) - static @NotNull Builder builder(@NotNull PunishProfile profile) { - return new PunishProfileBuilder(profile); - } - - /** - * Returns the owner of the profile. - * The owner is stored in an SHA-512 hash. - * - * @return the profile owner - */ - @NotNull String owner(); - - /** - * Returns the active chat ban wrapped in an @{link Optional}. - * - * @return the active chat ban - */ - @ApiStatus.Experimental - @NotNull Optional<@Nullable PunishEntry> activeChatBan(); - - /** - * Returns the active ban wrapped in an @{link Optional}. - * - * @return the active ban - */ - @NotNull Optional<@Nullable PunishEntry> activeBan(); - - /** - * Returns the active mute wrapped in an @{link Optional}. - * - * @return the active mute - */ - default @NotNull List historyByType(@NotNull PunishType type) { - return this.historyByType(type, DEFAULT_COMPARATOR); - } - - /** - * Returns the punishment history of the profile by the given type. - * - * @param type the type of the punishment - * @param comparator the comparator to sort the list - * @return the given history - */ - @NotNull List historyByType(@NotNull PunishType type, @NotNull Comparator comparator); - - /** - * Returns the punishment history of the profile. - * - * @return the given history - */ - default List history() { - return this.history(DEFAULT_COMPARATOR); - } - - /** - * Returns the punishment history of the profile. - * - * @return the given history - */ - @NotNull - @UnmodifiableView - List history(@NotNull Comparator comparator); - - sealed interface Builder permits PunishProfileBuilder { - - /** - * Sets the owner of the profile. - * - * @param owner the owner of the profile - * @return the builder instance - */ - @NotNull Builder owner(@NotNull String owner); - - /** - * Sets the active chat ban of the profile. - * - * @param activeChatBan the active chat ban - * @return the builder instance - */ - @NotNull Builder activeChatBan(@Nullable PunishEntry activeChatBan); - - /** - * Sets the active ban of the profile. - * - * @param activeBan the active ban - * @return the builder instance - */ - @NotNull Builder activeBan(@Nullable PunishEntry activeBan); - /** - * Sets the metadata of the profile. - * - * @param metaData the metadata of the profile - * @return the builder instance - */ - @NotNull Builder metaData(@NotNull Map metaData); - - /** - * Builds a new instance of the {@link PunishProfile}. - * - * @return the created instance - */ - @NotNull PunishProfile build(); - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfileBuilder.java b/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfileBuilder.java deleted file mode 100644 index 53d65b7..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfileBuilder.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.onelitefeather.blackhole.api.profile; - -import net.onelitefeather.blackhole.api.punish.PunishEntry; -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; - -/** - * The interface defines the basic structure to describe a profile in the punishment system. - * - * @author theEvilReaper - * @version 1.0.0 - * @see PunishProfileBuilder - * @since 1.0.0 - */ -public final class PunishProfileBuilder implements PunishProfile.Builder { - - private String owner; - private PunishEntry activeChatBan; - private PunishEntry activeBan; - private List history = new ArrayList<>(); - private final Map metaData = new HashMap<>(); - - /** - * Creates a new instance of the {@link PunishProfileBuilder}. - */ - public PunishProfileBuilder() { - } - - /** - * Creates a new instance of the {@link PunishProfileBuilder} with the given profile. - * - * @param profile the profile to set - */ - public PunishProfileBuilder(@NotNull PunishProfile profile) { - this.owner = profile.owner(); - this.activeChatBan = profile.activeChatBan().orElse(null); - this.activeBan = profile.activeBan().orElse(null); - this.history = new ArrayList<>(profile.history()); - this.metaData.putAll(profile.metaData()); - } - - - @Override - public PunishProfile.@NotNull Builder owner(@NotNull String owner) { - this.owner = owner; - return this; - } - - @Override - public PunishProfile.@NotNull Builder activeChatBan(@Nullable PunishEntry activeChatBan) { - this.activeChatBan = activeChatBan; - return this; - } - - @Override - public PunishProfile.@NotNull Builder activeBan(@Nullable PunishEntry activeBan) { - if (activeBan != null && activeBan.type() == PunishType.CHAT) { - throw new IllegalArgumentException("The active ban can't be a chat ban"); - } - this.activeBan = activeBan; - return this; - } - - @Override - public PunishProfile.@NotNull Builder metaData(@NotNull Map metaData) { - this.metaData.putAll(metaData); - return this; - } - - @Override - public @NotNull PunishProfile build() { - this.metaData.computeIfAbsent(Metadata.META_DATA_KEY_CREATION_DATE, key -> System.currentTimeMillis()); - this.metaData.put(Metadata.META_DATA_KEY_UPDATE_DATE, System.currentTimeMillis()); - - return new PunishProfileDTO( - this.owner, - Optional.ofNullable(this.activeChatBan), - Optional.ofNullable(this.activeBan), - this.history, - this.metaData - ); - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfileDTO.java b/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfileDTO.java deleted file mode 100644 index c88385e..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/profile/PunishProfileDTO.java +++ /dev/null @@ -1,81 +0,0 @@ -package net.onelitefeather.blackhole.api.profile; - -import net.onelitefeather.blackhole.api.punish.PunishEntry; -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.UnmodifiableView; - -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Collections; - -record PunishProfileDTO( - @NotNull String owner, - @NotNull Optional activeChatBan, - @NotNull Optional activeBan, - @NotNull List history, - @NotNull Map metaData -) implements PunishProfile { - - @Override - public void addMetaData(@NotNull String key, @NotNull Object value) { - this.metaData.put(key, value); - } - - @Override - public void removeMetaData(@NotNull String key) { - this.metaData.remove(key); - } - - @Override - public boolean hasMetaData(@NotNull String key) { - return this.metaData.containsKey(key); - } - - @Override - public @NotNull Optional<@Nullable Object> getMetaData(@NotNull String key) { - return Optional.ofNullable(this.metaData.get(key)); - } - - @Override - public @NotNull Optional<@Nullable PunishEntry> activeChatBan() { - return this.activeChatBan; - } - - @Override - public @NotNull Optional<@Nullable PunishEntry> activeBan() { - return this.activeBan; - } - - @Override - public @NotNull List historyByType(@NotNull PunishType type, @NotNull Comparator comparator) { - return this.history.stream() - .filter(entry -> entry.type().ordinal() == type.ordinal()) - .sorted(comparator) - .toList(); - } - - @Override - public @NotNull @UnmodifiableView List history(@NotNull Comparator comparator) { - return this.history.stream().sorted(comparator).toList(); - } - - @Override - public @NotNull @UnmodifiableView Map metaData() { - return Collections.unmodifiableMap(this.metaData); - } - - @Override - public long creationDate() { - return Optional.ofNullable(this.metaData.get(Metadata.META_DATA_KEY_CREATION_DATE)).map(Long.class::cast).orElseThrow(); - } - - @Override - public long updateDate() { - return Optional.ofNullable(this.metaData.get(Metadata.META_DATA_KEY_UPDATE_DATE)).map(Long.class::cast).orElseThrow(); - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntry.java b/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntry.java deleted file mode 100644 index 3643d14..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntry.java +++ /dev/null @@ -1,100 +0,0 @@ -package net.onelitefeather.blackhole.api.punish; - -import net.onelitefeather.blackhole.api.template.PunishTemplate; -import net.onelitefeather.phoca.metadata.Expirable; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.util.UUID; - -/** - * The interface defines the basic structure to describe an entry in the punishment system. - * The entry contains the type of the punishment and the creation date. - */ -public sealed interface PunishEntry extends Metadata, Expirable permits PunishEntryDTO { - - /** - * Creates a new {@link PunishEntry.Builder}. - * - * @return a new builder - */ - @Contract(pure = true) - static @NotNull Builder builder() { - return new PunishEntryBuilder(); - } - - /** - * Creates a new {@link PunishEntry.Builder} with the given {@link PunishEntry}. - * - * @param punishEntry the entry to set - * @return a new builder - */ - @Contract(pure = true) - static @NotNull Builder builder(@NotNull PunishEntry punishEntry) { - return new PunishEntryBuilder(punishEntry); - } - - /** - * The identifier of the ban. - * - * @return the identifier - */ - @NotNull String identifier(); - - /** - * The type of the ban. - * - * @return the type of the ban - */ - @NotNull PunishType type(); - - /** - * The source of the ban. - * - * @return the source of the ban - */ - @NotNull UUID source(); - - /** - * The template of the ban. - * - * @return the template of the ban - */ - @NotNull PunishTemplate template(); - - - sealed interface Builder permits PunishEntryBuilder { - - /** - * Sets the type of the ban. - * - * @param type the type of the ban - * @return the builder instance - */ - @NotNull Builder type(@NotNull PunishType type); - - /** - * Sets the source of the ban. - * - * @param source the source of the ban - * @return the builder instance - */ - @NotNull Builder source(@NotNull UUID source); - - /** - * Sets the template of the ban. - * - * @param template the template of the ban - * @return the builder instance - */ - @NotNull Builder template(@NotNull PunishTemplate template); - - /** - * Builds the {@link PunishEntry}. - * - * @return the created entry - */ - @NotNull PunishEntry build(); - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntryBuilder.java b/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntryBuilder.java deleted file mode 100644 index 228d1d3..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntryBuilder.java +++ /dev/null @@ -1,69 +0,0 @@ -package net.onelitefeather.blackhole.api.punish; - -import net.onelitefeather.blackhole.api.template.PunishTemplate; -import net.onelitefeather.blackhole.api.utils.IdGenerator; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public final class PunishEntryBuilder implements PunishEntry.Builder { - - private final String identifier; - private PunishType type; - private UUID source; - private PunishTemplate template; - private final Map metaData = new HashMap<>(); - - public PunishEntryBuilder() { - this.identifier = IdGenerator.generateId(); - // Empty constructor - } - - public PunishEntryBuilder(@NotNull PunishEntry punishEntry) { - this.identifier = punishEntry.identifier(); - this.type = punishEntry.type(); - this.source = punishEntry.source(); - this.metaData.putAll(punishEntry.metaData()); - this.template = punishEntry.template(); - } - - @Override - public PunishEntry.@NotNull Builder type(@NotNull PunishType type) { - this.type = type; - return this; - } - - @Override - public PunishEntry.@NotNull Builder source(@NotNull UUID source) { - this.source = source; - return this; - } - - @Override - public PunishEntry.@NotNull Builder template(@NotNull PunishTemplate template) { - this.template = template; - return this; - } - - @Override - public @NotNull PunishEntry build() { - if (this.type == null) { - throw new IllegalStateException("The ban type must be set"); - } - - if (this.source == null) { - throw new IllegalStateException("The source must be set"); - } - if (this.template == null) { - throw new IllegalStateException("The template must be set"); - } - - this.metaData.computeIfAbsent(Metadata.META_DATA_KEY_CREATION_DATE, key -> System.currentTimeMillis()); - this.metaData.put(Metadata.META_DATA_KEY_UPDATE_DATE, System.currentTimeMillis()); - - return new PunishEntryDTO(this.identifier, this.type, this.source, this.template, this.metaData); - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntryDTO.java b/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntryDTO.java deleted file mode 100644 index 8804056..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishEntryDTO.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.onelitefeather.blackhole.api.punish; - -import net.onelitefeather.blackhole.api.template.PunishTemplate; -import net.onelitefeather.phoca.metadata.Expirable; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.Optional; -import java.util.UUID; - -/** - * Represents a punish entry which can be used to store the punishment in the database. - * - * @param identifier the identifier of the punishment - * @param type the type of the punishment - * @param source the source of the punishment - * @param template the template of the punishment - * @param metaData the metadata of the punishment - * @author theEvilReaper - * @version 1.0.0 - * @since 1.0.0 - */ -record PunishEntryDTO( - @NotNull String identifier, - @NotNull PunishType type, - @NotNull UUID source, - @NotNull PunishTemplate template, - @NotNull Map metaData -) implements PunishEntry { - - @Override - public void addMetaData(@NotNull String key, @NotNull Object value) { - this.metaData.put(key, value); - } - - @Override - public void removeMetaData(@NotNull String key) { - this.metaData.remove(key); - } - - @Override - public boolean hasMetaData(@NotNull String key) { - return this.metaData.containsKey(key); - } - - @Override - public @NotNull Optional<@Nullable Object> getMetaData(@NotNull String key) { - return Optional.ofNullable(this.metaData.get(key)); - } - - @Override - public long creationDate() { - return Optional.ofNullable(this.metaData.get(Metadata.META_DATA_KEY_CREATION_DATE)).map(Long.class::cast).orElseThrow(); - } - - @Override - public long updateDate() { - return Optional.ofNullable(this.metaData.get(Metadata.META_DATA_KEY_UPDATE_DATE)).map(Long.class::cast).orElseThrow(); - } - - @Override - public long expirationDate() { - return Optional.ofNullable(this.metaData.get(Expirable.META_DATA_KEY_EXPIRATION_DATE)).map(Long.class::cast).orElseThrow(); - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplate.java b/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplate.java deleted file mode 100644 index 608afe3..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplate.java +++ /dev/null @@ -1,130 +0,0 @@ -package net.onelitefeather.blackhole.api.template; - -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.phoca.metadata.Commandable; -import net.onelitefeather.phoca.metadata.Durationable; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import java.time.Duration; -import java.util.Map; -import java.util.UUID; - -/** - * The interface defines the basic structure to describe a template in the punishment system. - * The template contains the type of the punishment and the creation date. - * - * @since 1.0.0 - * @version 1.0.0 - * @see PunishType - * @see Metadata - * @author TheMeinerLP - */ -public sealed interface PunishTemplate extends Metadata, Durationable, Commandable permits PunishTemplateDTO { - - String META_DATA_KEY_TRANSLATABLE = "translatable"; - - /** - * The builder to create a new {@link PunishTemplate}. - * - * @return a new builder - */ - @Contract(pure = true) - static @NotNull Builder builder() { - return new PunishTemplateBuilder(); - } - - @Contract(value = "_ -> new", pure = true) - static @NotNull Builder builder(@NotNull PunishTemplate punishTemplate) { - return new PunishTemplateBuilder(punishTemplate); - } - - @Contract(value = "_ -> new", pure = true) - static @NotNull Builder builder( @NotNull Map metaData) { - return new PunishTemplateBuilder(metaData); - } - - /** - * The type of the punishment. - * - * @return the type of the punishment - */ - @NotNull PunishType type(); - - /** - * The identifier of the punishment. - * - * @return the identifier - */ - @NotNull UUID identifier(); - - /** - * If the reason is a key for a translation in the language file. - * - * @return {@code true} if the reason is translatable - */ - boolean translatable(); - - /** - * The reason of the punishment or the key for the translation. - * - * @return the reason of the punishment or the key for the translation - */ - @NotNull String reason(); - - /** - * The builder to create a new {@link PunishTemplate}. - * - */ - sealed interface Builder permits PunishTemplateBuilder { - - - /** - * Sets the type of the punishment. - * - * @param type the type of the punishment - * @return the builder - */ - Builder type(@NotNull PunishType type); - - /** - * Sets if the reason is translatable. - * - * @return the builder - */ - Builder translatable(); - - /** - * Sets the identifier of the punishment. - * - * @param command the identifier of the punishment - * @return the builder - */ - Builder command(@NotNull String command); - - /** - * Sets the duration of the punishment. - * - * @param duration the duration of the punishment - * @return the builder - */ - Builder duration(Duration duration); - - /** - * Sets the reason of the punishment. - * - * @param reason the reason of the punishment - * @return the builder - */ - Builder reason(@NotNull String reason); - - /** - * Builds the punishment template. - * - * @return the punishment template - */ - PunishTemplate build(); - - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplateBuilder.java b/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplateBuilder.java deleted file mode 100644 index a39a351..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplateBuilder.java +++ /dev/null @@ -1,78 +0,0 @@ -package net.onelitefeather.blackhole.api.template; - -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.phoca.metadata.Commandable; -import net.onelitefeather.phoca.metadata.Durationable; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.NotNull; - -import java.time.Duration; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -final class PunishTemplateBuilder implements PunishTemplate.Builder { - - private PunishType type; - private UUID identifier; - private String reason; - private final Map metaData = new HashMap<>(); - - public PunishTemplateBuilder(@NotNull PunishTemplate punishTemplate) { - this.type = punishTemplate.type(); - this.identifier = punishTemplate.identifier(); - this.reason = punishTemplate.reason(); - this.metaData.putAll(punishTemplate.metaData()); - } - - public PunishTemplateBuilder(@NotNull Map metaData) { - this.metaData.putAll(metaData); - } - - public PunishTemplateBuilder() { - // Empty constructor - } - - @Override - public PunishTemplate.Builder type(@NotNull PunishType type) { - this.type = type; - return this; - } - - @Override - public PunishTemplate.Builder translatable() { - this.metaData.put(PunishTemplate.META_DATA_KEY_TRANSLATABLE, true); - return this; - } - - @Override - public PunishTemplate.Builder command(@NotNull String command) { - this.metaData.put(Commandable.META_DATA_KEY_COMMAND, command); - return this; - } - - @Override - public PunishTemplate.Builder duration(Duration duration) { - this.metaData.put(Durationable.META_DATA_KEY_DURATION, duration); - return this; - } - - @Override - public PunishTemplate.Builder reason(@NotNull String reason) { - this.reason = reason; - return this; - } - - @Override - public PunishTemplate build() { - if (this.type == null) { - throw new IllegalStateException("The type must be set"); - } - if (this.reason == null) { - throw new IllegalStateException("The reason must be set"); - } - this.metaData.computeIfAbsent(Metadata.META_DATA_KEY_CREATION_DATE, key -> System.currentTimeMillis()); - this.metaData.put(Metadata.META_DATA_KEY_UPDATE_DATE, System.currentTimeMillis()); - return new PunishTemplateDTO(this.metaData, this.reason, this.type, this.identifier); - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplateDTO.java b/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplateDTO.java deleted file mode 100644 index 3d77930..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/template/PunishTemplateDTO.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.onelitefeather.blackhole.api.template; - -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.phoca.metadata.Metadata; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.time.Duration; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; - -record PunishTemplateDTO( - @NotNull Map metaData, - @NotNull String reason, - @NotNull PunishType type, - @NotNull UUID identifier -) implements PunishTemplate { - - @Override - public void addMetaData(@NotNull String key, @NotNull Object value) { - this.metaData.put(key, value); - } - - @Override - public void removeMetaData(@NotNull String key) { - this.metaData.remove(key); - } - - @Override - public boolean hasMetaData(@NotNull String key) { - return this.metaData.containsKey(key); - } - - @Override - public @NotNull Optional<@Nullable Object> getMetaData(@NotNull String key) { - return Optional.ofNullable(this.metaData.get(key)); - } - - @Override - public boolean translatable() { - return hasMetaData(META_DATA_KEY_TRANSLATABLE); - } - - @Override - public long creationDate() { - return Optional.ofNullable(this.metaData.get(Metadata.META_DATA_KEY_CREATION_DATE)).map(Long.class::cast).orElseThrow(); - } - - @Override - public long updateDate() { - return Optional.ofNullable(this.metaData.get(Metadata.META_DATA_KEY_UPDATE_DATE)).map(Long.class::cast).orElseThrow(); - } - - @Override - public Duration duration() { - return Optional.ofNullable(this.metaData.get(META_DATA_KEY_DURATION)).map(Duration.class::cast).orElseThrow(); - } - - @Override - public String command() { - return Optional.ofNullable(this.metaData.get(META_DATA_KEY_COMMAND)).map(String.class::cast).orElseThrow(); - } -} diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/utils/UUIDConverter.java b/api/src/main/java/net/onelitefeather/blackhole/api/utils/UUIDConverter.java deleted file mode 100644 index 0b48aaf..0000000 --- a/api/src/main/java/net/onelitefeather/blackhole/api/utils/UUIDConverter.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.onelitefeather.blackhole.api.utils; - -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; - -import java.math.BigInteger; -import java.security.MessageDigest; -import java.util.UUID; - -/** - * A utility class to convert UUIDs to SHA-512 hashes. - * - * @author theEvilReaper - * @version 1.0.0 - * @since 1.0.0 - */ -@ApiStatus.Internal -public final class UUIDConverter { - - /** - * Convert a UUID to a SHA-512 hash. - * - * @param uuid the UUID to convert - * @return the SHA-512 hash - */ - public static @NotNull String convertToSHA(@NotNull UUID uuid) { - String uuidString = uuid.toString(); - - try { - MessageDigest digest = MessageDigest.getInstance("SHA-512"); - // Update the digest with the UUID string - digest.update(uuidString.getBytes()); - - // Get the digest bytes - byte[] digestBytes = digest.digest(); - return String.format("%0128x", new BigInteger(1, digestBytes)); - } catch (Exception e) { - throw new RuntimeException("Failed to convert UUID to SHA-512", e); - } - } - - private UUIDConverter() { - throw new UnsupportedOperationException("This class cannot be instantiated"); - } -} diff --git a/api/src/test/java/net/onelitefeather/blackhole/api/profile/PunishProfileTest.java b/api/src/test/java/net/onelitefeather/blackhole/api/profile/PunishProfileTest.java deleted file mode 100644 index 8c10435..0000000 --- a/api/src/test/java/net/onelitefeather/blackhole/api/profile/PunishProfileTest.java +++ /dev/null @@ -1,82 +0,0 @@ -package net.onelitefeather.blackhole.api.profile; - -import net.onelitefeather.blackhole.api.punish.PunishEntry; -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.blackhole.api.template.PunishTemplate; -import org.junit.jupiter.api.Test; - -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.*; - -class PunishProfileTest { - - @Test - void testInitialProfileCreation() { - PunishProfile profile = PunishProfile.builder() - .owner("TestOwner") - .activeBan(null) - .activeChatBan(null) - .metaData(new HashMap<>()) - .build(); - - assertEquals("TestOwner", profile.owner()); - assertFalse(profile.activeBan().isPresent()); - assertFalse(profile.activeChatBan().isPresent()); - assertTrue(profile.history().isEmpty()); - assertFalse(profile.metaData().isEmpty()); - } - - @Test - void testMetaDataFlow() { - PunishProfile profile = PunishProfile.builder() - .owner("TestOwner") - .activeBan(null) - .activeChatBan(null) - .metaData(new HashMap<>()) - .build(); - - assertFalse(profile.metaData().isEmpty()); - profile.addMetaData("test", "test"); - assertTrue(profile.hasMetaData("test")); - assertEquals("test", profile.getMetaData("test").get()); - - profile.removeMetaData("test"); - assertFalse(profile.hasMetaData("test")); - } - - @Test - void testPunishUpdate() { - PunishProfile profile = PunishProfile.builder() - .owner("TestOwner") - .activeBan(null) - .activeChatBan(null) - .metaData(new HashMap<>()) - .build(); - - assertFalse(profile.activeBan().isPresent()); - assertFalse(profile.activeChatBan().isPresent()); - assertEquals(0, profile.history().size()); - - UUID source = UUID.randomUUID(); - - PunishTemplate template = PunishTemplate.builder() - .reason("Test") - .type(PunishType.NETWORK) - .build(); - - PunishEntry entry = PunishEntry.builder() - .type(PunishType.NETWORK) - .source(source) - .template(template) - .build(); - - PunishProfile updatedProfile = PunishProfile.builder(profile) - .activeBan(entry) - .build(); - - assertTrue(updatedProfile.activeBan().isPresent()); - } -} diff --git a/api/src/test/java/net/onelitefeather/blackhole/api/punish/PunishEntryTest.java b/api/src/test/java/net/onelitefeather/blackhole/api/punish/PunishEntryTest.java deleted file mode 100644 index c58ed5f..0000000 --- a/api/src/test/java/net/onelitefeather/blackhole/api/punish/PunishEntryTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package net.onelitefeather.blackhole.api.punish; - -import net.onelitefeather.blackhole.api.template.PunishTemplate; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrowsExactly; - -class PunishEntryTest { - - @Test - @Disabled("Check timestamp difference") - void testObjectCreation() { - PunishTemplate template = PunishTemplate.builder() - .reason("Test") - .type(PunishType.NETWORK) - .build(); - long current = System.currentTimeMillis(); - PunishEntry entry = PunishEntry.builder() - .type(PunishType.SERVER) - .source(UUID.randomUUID()) - .template(template) - .build(); - assertNotNull(entry); - assertEquals(PunishType.SERVER, entry.type()); - assertEquals(current, entry.creationDate()); - } - - @Test - void testObjectManipulation() { - PunishTemplate template = PunishTemplate.builder() - .reason("Test") - .type(PunishType.NETWORK) - .build(); - - PunishEntry entry = PunishEntry.builder() - .type(PunishType.SERVER) - .source(UUID.randomUUID()) - .template(template) - .build(); - assertNotNull(entry); - - PunishEntry updated = PunishEntry.builder(entry) - .type(PunishType.CHAT) - .build(); - assertNotNull(updated); - - assertEquals(PunishType.CHAT, updated.type()); - assertNotEquals(entry, updated); - assertNotEquals(entry.type(), updated.type()); - } - - @Test - void testMissingTypeUsage() { - assertThrowsExactly( - IllegalStateException.class, - () -> PunishEntry.builder().build(), - "The ban type must be set" - ); - } -} diff --git a/api/src/test/java/net/onelitefeather/blackhole/api/template/PunishTemplateTest.java b/api/src/test/java/net/onelitefeather/blackhole/api/template/PunishTemplateTest.java deleted file mode 100644 index 56e575a..0000000 --- a/api/src/test/java/net/onelitefeather/blackhole/api/template/PunishTemplateTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.onelitefeather.blackhole.api.template; - -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.phoca.metadata.Metadata; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -class PunishTemplateTest { - - @Test - void testObjectCreation() { - PunishTemplate entry = PunishTemplate.builder() - .type(PunishType.SERVER) - .reason("Test") - .build(); - assertNotNull(entry); - assertEquals(PunishType.SERVER, entry.type()); - assertEquals("Test", entry.reason()); - assertNotNull(entry.metaData().get(Metadata.META_DATA_KEY_CREATION_DATE)); - } - - @Test - void testObjectCreationWithTranslation() { - PunishTemplate entry = PunishTemplate.builder() - .type(PunishType.SERVER) - .reason("Test") - .translatable() - .build(); - assertNotNull(entry); - assertEquals(PunishType.SERVER, entry.type()); - assertEquals("Test", entry.reason()); - assertNotNull(entry.metaData().get(Metadata.META_DATA_KEY_CREATION_DATE)); - assertNotNull(entry.metaData().get(PunishTemplate.META_DATA_KEY_TRANSLATABLE)); - } - - @Test - void testObjectManipulation() { - PunishTemplate entry = PunishTemplate.builder() - .type(PunishType.SERVER) - .reason("Test") - .build(); - assertNotNull(entry); - - PunishTemplate updated = PunishTemplate.builder(entry) - .type(PunishType.CHAT) - .build(); - - assertNotNull(updated); - assertEquals(PunishType.CHAT, updated.type()); - assertNotEquals(entry, updated); - assertNotEquals(entry.type(), updated.type()); - assertEquals("Test", updated.reason()); - } - -} diff --git a/api/src/test/java/net/onelitefeather/blackhole/api/utils/IdGeneratorTest.java b/api/src/test/java/net/onelitefeather/blackhole/api/utils/IdGeneratorTest.java deleted file mode 100644 index 07accce..0000000 --- a/api/src/test/java/net/onelitefeather/blackhole/api/utils/IdGeneratorTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.onelitefeather.blackhole.api.utils; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.util.UUID; - -class IdGeneratorTest { - - - @Test - @DisplayName("Test generateId with random UUID") - void testGenerateId() { - var id = IdGenerator.generateId(); - - Assertions.assertEquals(22, id.length()); - } - - @Test - @DisplayName("Test generateId with given UUID") - void testGenerateIdByGivenUUID() { - var id = IdGenerator.generateId(new UUID(0,0)); - - Assertions.assertEquals(22, id.length()); - Assertions.assertEquals("AAAAAAAAAAAAAAAAAAAAAA", id); - } -} diff --git a/api/src/test/java/net/onelitefeather/blackhole/api/utils/UUIDConverterTest.java b/api/src/test/java/net/onelitefeather/blackhole/api/utils/UUIDConverterTest.java deleted file mode 100644 index cd23cfd..0000000 --- a/api/src/test/java/net/onelitefeather/blackhole/api/utils/UUIDConverterTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.onelitefeather.blackhole.api.utils; - -import org.junit.jupiter.api.Test; - -import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.*; - -class UUIDConverterTest { - - @Test - void testUUIDConversation() { - UUID randomUUID = UUID.randomUUID(); - String uuidHash = UUIDConverter.convertToSHA(randomUUID); - assertNotNull(uuidHash); - assertNotEquals(String.valueOf(randomUUID.hashCode()), uuidHash); - } - - @Test - void testHashEquality() { - UUID randomUUID = UUID.randomUUID(); - String uuidHash = UUIDConverter.convertToSHA(randomUUID); - assertNotNull(uuidHash); - assertEquals(uuidHash, UUIDConverter.convertToSHA(randomUUID)); - } - - @Test - void testUniqueGeneration() { - UUID randomUUID = UUID.randomUUID(); - String uuidHash = UUIDConverter.convertToSHA(randomUUID); - assertNotNull(uuidHash); - assertNotEquals(uuidHash, UUIDConverter.convertToSHA(UUID.randomUUID())); - } -} \ No newline at end of file diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 849ed1b..ef8ec9c 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -14,7 +14,6 @@ dependencies { compileOnly(mn.micronaut.openapi.annotations) implementation(mn.micronaut.http.validation) implementation(project(":phoca")) - implementation(project(":api")) implementation(mn.micronaut.runtime) implementation(mn.validation) diff --git a/backend/src/main/java/net/onelitefeather/blackhole/backend/controller/PunishmentEntityController.java b/backend/src/main/java/net/onelitefeather/blackhole/backend/controller/PunishmentEntityController.java index ac34ff1..86cc83f 100644 --- a/backend/src/main/java/net/onelitefeather/blackhole/backend/controller/PunishmentEntityController.java +++ b/backend/src/main/java/net/onelitefeather/blackhole/backend/controller/PunishmentEntityController.java @@ -15,7 +15,6 @@ import jakarta.inject.Inject; import jakarta.validation.Valid; import jakarta.validation.constraints.Pattern; -import net.onelitefeather.blackhole.api.utils.IdGenerator; import net.onelitefeather.blackhole.backend.database.entities.PunishmentEntity; import net.onelitefeather.blackhole.backend.database.entities.PunishmentProfileEntity; import net.onelitefeather.blackhole.backend.database.entities.PunishmentTemplateEntity; @@ -24,6 +23,7 @@ import net.onelitefeather.blackhole.backend.database.repository.PunishmentTemplateRepository; import net.onelitefeather.blackhole.backend.dto.PunishEntryDTO; import net.onelitefeather.blackhole.backend.response.PunishProfileResponse; +import net.onelitefeather.blackhole.backend.utils.IdGenerator; import net.onelitefeather.phoca.metadata.Durationable; import net.onelitefeather.phoca.metadata.Expirable; import net.onelitefeather.phoca.metadata.Metadata; diff --git a/backend/src/main/java/net/onelitefeather/blackhole/backend/controller/PunishmentTemplateHandler.java b/backend/src/main/java/net/onelitefeather/blackhole/backend/controller/PunishmentTemplateHandler.java index be27f7b..b2b7439 100644 --- a/backend/src/main/java/net/onelitefeather/blackhole/backend/controller/PunishmentTemplateHandler.java +++ b/backend/src/main/java/net/onelitefeather/blackhole/backend/controller/PunishmentTemplateHandler.java @@ -16,7 +16,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.inject.Inject; import jakarta.validation.Valid; -import net.onelitefeather.blackhole.api.template.PunishTemplate; import net.onelitefeather.blackhole.backend.database.entities.PunishmentTemplateEntity; import net.onelitefeather.blackhole.backend.database.repository.PunishmentTemplateRepository; import net.onelitefeather.blackhole.backend.dto.PunishTemplateDTO; @@ -29,7 +28,6 @@ * * @author theEvilReaper * @version 1.0.0 - * @see PunishTemplate * @since 1.0.0 */ @Controller(value = "/template") diff --git a/backend/src/main/java/net/onelitefeather/blackhole/backend/database/entities/PunishmentTemplateEntity.java b/backend/src/main/java/net/onelitefeather/blackhole/backend/database/entities/PunishmentTemplateEntity.java index b7aee67..e465151 100644 --- a/backend/src/main/java/net/onelitefeather/blackhole/backend/database/entities/PunishmentTemplateEntity.java +++ b/backend/src/main/java/net/onelitefeather/blackhole/backend/database/entities/PunishmentTemplateEntity.java @@ -8,7 +8,7 @@ import jakarta.persistence.Id; import jakarta.persistence.Index; import jakarta.persistence.Table; -import net.onelitefeather.blackhole.api.punish.PunishType; +import net.onelitefeather.blackhole.backend.dto.PunishType; import net.onelitefeather.blackhole.backend.database.converter.MapStringObjectConverter; import net.onelitefeather.blackhole.backend.dto.PunishTemplateDTO; import org.hibernate.annotations.JdbcTypeCode; diff --git a/backend/src/main/java/net/onelitefeather/blackhole/backend/dto/PunishTemplateDTO.java b/backend/src/main/java/net/onelitefeather/blackhole/backend/dto/PunishTemplateDTO.java index 768bcc1..0335b07 100644 --- a/backend/src/main/java/net/onelitefeather/blackhole/backend/dto/PunishTemplateDTO.java +++ b/backend/src/main/java/net/onelitefeather/blackhole/backend/dto/PunishTemplateDTO.java @@ -5,8 +5,6 @@ import io.micronaut.core.annotation.ReflectiveAccess; import io.micronaut.serde.annotation.Serdeable; import jakarta.validation.constraints.NotBlank; -import net.onelitefeather.blackhole.api.punish.PunishType; -import net.onelitefeather.blackhole.api.template.PunishTemplate; import net.onelitefeather.phoca.metadata.Durationable; import net.onelitefeather.phoca.metadata.Metadata; @@ -24,6 +22,8 @@ public record PunishTemplateDTO( @Nullable UUID identifier ) implements Metadata, Durationable { + public static final String META_DATA_KEY_TRANSLATABLE = "translatable"; + @Override public void addMetaData(String key, Object value) { this.metaData.put(key, value); @@ -45,7 +45,7 @@ public Optional getMetaData(String key) { } public boolean translatable() { - return hasMetaData(PunishTemplate.META_DATA_KEY_TRANSLATABLE); + return hasMetaData(PunishTemplateDTO.META_DATA_KEY_TRANSLATABLE); } @Override diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishType.java b/backend/src/main/java/net/onelitefeather/blackhole/backend/dto/PunishType.java similarity index 90% rename from api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishType.java rename to backend/src/main/java/net/onelitefeather/blackhole/backend/dto/PunishType.java index 6ce6855..ff83bab 100644 --- a/api/src/main/java/net/onelitefeather/blackhole/api/punish/PunishType.java +++ b/backend/src/main/java/net/onelitefeather/blackhole/backend/dto/PunishType.java @@ -1,4 +1,4 @@ -package net.onelitefeather.blackhole.api.punish; +package net.onelitefeather.blackhole.backend.dto; /** * This enumeration defines each type of ban which is supported by the application. diff --git a/api/src/main/java/net/onelitefeather/blackhole/api/utils/IdGenerator.java b/backend/src/main/java/net/onelitefeather/blackhole/backend/utils/IdGenerator.java similarity index 91% rename from api/src/main/java/net/onelitefeather/blackhole/api/utils/IdGenerator.java rename to backend/src/main/java/net/onelitefeather/blackhole/backend/utils/IdGenerator.java index fb555ad..4dff76b 100644 --- a/api/src/main/java/net/onelitefeather/blackhole/api/utils/IdGenerator.java +++ b/backend/src/main/java/net/onelitefeather/blackhole/backend/utils/IdGenerator.java @@ -1,6 +1,6 @@ -package net.onelitefeather.blackhole.api.utils; +package net.onelitefeather.blackhole.backend.utils; -import org.jetbrains.annotations.NotNull; +import jakarta.validation.constraints.NotNull; import java.nio.ByteBuffer; import java.util.Base64; diff --git a/settings.gradle.kts b/settings.gradle.kts index 80ebed3..52d36dd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -60,7 +60,6 @@ dependencyResolutionManagement { } } include("backend") -include("api") include("client") include("velocity")