From 5136a67fba2e7fd0454075de61bd0e54ed87b7d6 Mon Sep 17 00:00:00 2001 From: Jose Date: Sun, 21 Dec 2025 06:03:45 +0100 Subject: [PATCH] bump: backlib and all microservices to v2.0, add: decoupled auth from identity using new Credential Entity model, still ongoing changes... --- backlib/pom.xml | 6 +- .../net/miarma/api/backlib/Constants.java | 469 ------------------ .../backlib/{ => config}/ConfigManager.java | 20 +- .../api/backlib/{ => config}/OSType.java | 2 +- .../api/backlib/core/entities/FileEntity.java | 83 ---- .../api/backlib/core/entities/UserEntity.java | 63 --- .../backlib/core/services/UserService.java | 209 -------- .../core/validators/FileValidator.java | 84 ---- .../core/validators/UserValidator.java | 44 -- .../miarma/api/backlib/db/AbstractEntity.java | 23 +- .../api/backlib/db/DatabaseManager.java | 19 +- .../api/backlib/db/DatabaseProvider.java | 2 +- .../miarma/api/backlib/db/QueryBuilder.java | 37 +- .../miarma/api/backlib/gson/GsonProvider.java | 27 + .../gson/ValuableEnumDeserializer.java | 11 +- .../backlib/gson/ValuableEnumTypeAdapter.java | 7 +- .../miarma/api/backlib/interfaces/IUser.java | 21 - .../api/backlib/interfaces/IUserRole.java | 4 +- .../IValuableEnum.java} | 4 +- .../api/backlib/{ => log}/LogAccumulator.java | 2 +- .../api/backlib/{ => log}/LogEntry.java | 2 +- .../api/backlib/log/LoggerProvider.java | 11 + .../middlewares/AbstractAuthGuard.java | 5 +- .../api/backlib/security/JWTManager.java | 191 +++---- .../api/backlib/security/SecretManager.java | 4 +- .../net/miarma/api/backlib/util/JsonUtil.java | 4 +- .../miarma/api/backlib/util/RouterUtil.java | 9 +- bootstrap/pom.xml | 6 +- .../java/net/miarma/api/AppInitializer.java | 24 +- .../java/net/miarma/api/MasterVerticle.java | 14 +- .../src/main/resources/default.properties | 26 +- microservices/core/pom.xml | 4 +- .../microservices/core/dao/CredentialDAO.java | 172 +++++++ .../api/microservices}/core/dao/FileDAO.java | 23 +- .../api/microservices}/core/dao/UserDAO.java | 47 +- .../core/entities/CredentialEntity.java | 110 ++++ .../core/entities/FileEntity.java | 99 ++++ .../core/entities/UserEntity.java | 53 ++ .../core/enums/CoreFileContext.java | 37 ++ .../core/enums/CoreUserGlobalRole.java | 26 + .../core/enums/CoreUserGlobalStatus.java | 26 + .../core/handlers/FileDataHandler.java | 44 +- .../core/handlers/FileLogicHandler.java | 24 +- .../core/handlers/ScreenshotHandler.java | 2 +- .../core/handlers/UserDataHandler.java | 14 +- .../core/handlers/UserLogicHandler.java | 4 +- .../core/routing/CoreDataRouter.java | 6 +- .../core/routing/CoreLogicRouter.java | 8 +- .../routing/middlewares/CoreAuthGuard.java | 4 +- .../core/services/AuthService.java | 91 ++++ .../core/services/FileService.java | 68 +-- .../core/services/UserService.java | 55 ++ .../core/validators/FileValidator.java | 63 +++ .../core/validators/UserValidator.java | 45 ++ .../core/verticles/CoreDataVerticle.java | 8 +- .../core/verticles/CoreLogicVerticle.java | 2 +- .../core/verticles/CoreMainVerticle.java | 4 +- microservices/huertos/pom.xml | 4 +- .../enums/HuertosAnnouncementPriority.java | 27 + .../enums/HuertosPaymentFrequency.java | 26 + .../huertos/enums/HuertosPaymentType.java | 26 + .../huertos/enums/HuertosRequestStatus.java | 27 + .../huertos/enums/HuertosRequestType.java | 30 ++ .../huertos/enums/HuertosUserRole.java | 27 + .../huertos/enums/HuertosUserType.java | 30 ++ .../huertos/handlers/MailHandler.java | 2 +- .../huertos/mail/ImapReader.java | 2 +- .../huertos/mail/MailManager.java | 5 +- .../verticles/HuertosDataVerticle.java | 2 +- .../verticles/HuertosLogicVerticle.java | 2 +- .../verticles/HuertosMainVerticle.java | 4 +- microservices/huertosdecine/pom.xml | 4 +- .../huertosdecine/enums/CineUserRole.java | 26 + .../handlers/MovieDataHandler.java | 2 +- .../verticles/CineDataVerticle.java | 2 +- .../verticles/CineLogicVerticle.java | 2 +- .../verticles/CineMainVerticle.java | 4 +- microservices/miarmacraft/pom.xml | 6 +- .../miarmacraft/handlers/ModLogicHandler.java | 5 - .../dao/ModDAO.java | 4 +- .../dao/PlayerDAO.java | 4 +- .../dao/UserMetadataDAO.java | 4 +- .../entities/ModEntity.java | 2 +- .../entities/PlayerEntity.java | 2 +- .../entities/UserMetadataEntity.java | 2 +- .../minecraft/enums/MinecraftModStatus.java | 26 + .../minecraft/enums/MinecraftUserRole.java | 27 + .../handlers/ModDataHandler.java | 8 +- .../minecraft/handlers/ModLogicHandler.java | 5 + .../handlers/PlayerDataHandler.java | 6 +- .../handlers/PlayerLogicHandler.java | 2 +- .../routing/MMCDataRouter.java | 10 +- .../routing/MMCEndpoints.java | 2 +- .../routing/MMCLogicRouter.java | 8 +- .../routing/middlewares/MMCAuthGuard.java | 6 +- .../services/ModService.java | 8 +- .../services/PlayerService.java | 10 +- .../verticles/MMCDataVerticle.java | 8 +- .../verticles/MMCLogicVerticle.java | 6 +- .../verticles/MMCMainVerticle.java | 6 +- microservices/mpaste/pom.xml | 4 +- .../mpaste/verticles/MPasteDataVerticle.java | 2 +- .../mpaste/verticles/MPasteLogicVerticle.java | 2 +- .../mpaste/verticles/MPasteMainVerticle.java | 4 +- pom.xml | 6 +- 105 files changed, 1506 insertions(+), 1405 deletions(-) delete mode 100644 backlib/src/main/java/net/miarma/api/backlib/Constants.java rename backlib/src/main/java/net/miarma/api/backlib/{ => config}/ConfigManager.java (85%) rename backlib/src/main/java/net/miarma/api/backlib/{ => config}/OSType.java (78%) delete mode 100644 backlib/src/main/java/net/miarma/api/backlib/core/entities/FileEntity.java delete mode 100644 backlib/src/main/java/net/miarma/api/backlib/core/entities/UserEntity.java delete mode 100644 backlib/src/main/java/net/miarma/api/backlib/core/services/UserService.java delete mode 100644 backlib/src/main/java/net/miarma/api/backlib/core/validators/FileValidator.java delete mode 100644 backlib/src/main/java/net/miarma/api/backlib/core/validators/UserValidator.java create mode 100644 backlib/src/main/java/net/miarma/api/backlib/gson/GsonProvider.java delete mode 100644 backlib/src/main/java/net/miarma/api/backlib/interfaces/IUser.java rename backlib/src/main/java/net/miarma/api/backlib/{ValuableEnum.java => interfaces/IValuableEnum.java} (62%) rename backlib/src/main/java/net/miarma/api/backlib/{ => log}/LogAccumulator.java (95%) rename backlib/src/main/java/net/miarma/api/backlib/{ => log}/LogEntry.java (82%) create mode 100644 backlib/src/main/java/net/miarma/api/backlib/log/LoggerProvider.java create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/dao/CredentialDAO.java rename {backlib/src/main/java/net/miarma/api/backlib => microservices/core/src/main/java/net/miarma/api/microservices}/core/dao/FileDAO.java (90%) rename {backlib/src/main/java/net/miarma/api/backlib => microservices/core/src/main/java/net/miarma/api/microservices}/core/dao/UserDAO.java (74%) create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/entities/CredentialEntity.java create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/entities/FileEntity.java create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/entities/UserEntity.java create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreFileContext.java create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreUserGlobalRole.java create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreUserGlobalStatus.java rename {backlib/src/main/java/net/miarma/api/backlib => microservices/core/src/main/java/net/miarma/api/microservices}/core/handlers/FileDataHandler.java (76%) rename {backlib/src/main/java/net/miarma/api/backlib => microservices/core/src/main/java/net/miarma/api/microservices}/core/handlers/FileLogicHandler.java (72%) rename {backlib/src/main/java/net/miarma/api/backlib => microservices/core/src/main/java/net/miarma/api/microservices}/core/handlers/ScreenshotHandler.java (95%) rename {backlib/src/main/java/net/miarma/api/backlib => microservices/core/src/main/java/net/miarma/api/microservices}/core/handlers/UserDataHandler.java (83%) rename {backlib/src/main/java/net/miarma/api/backlib => microservices/core/src/main/java/net/miarma/api/microservices}/core/handlers/UserLogicHandler.java (98%) create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/services/AuthService.java rename {backlib/src/main/java/net/miarma/api/backlib => microservices/core/src/main/java/net/miarma/api/microservices}/core/services/FileService.java (63%) create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/services/UserService.java create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/validators/FileValidator.java create mode 100644 microservices/core/src/main/java/net/miarma/api/microservices/core/validators/UserValidator.java create mode 100644 microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosAnnouncementPriority.java create mode 100644 microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosPaymentFrequency.java create mode 100644 microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosPaymentType.java create mode 100644 microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosRequestStatus.java create mode 100644 microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosRequestType.java create mode 100644 microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosUserRole.java create mode 100644 microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosUserType.java create mode 100644 microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/enums/CineUserRole.java delete mode 100644 microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/ModLogicHandler.java rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/dao/ModDAO.java (96%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/dao/PlayerDAO.java (96%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/dao/UserMetadataDAO.java (96%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/entities/ModEntity.java (95%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/entities/PlayerEntity.java (98%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/entities/UserMetadataEntity.java (95%) create mode 100644 microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/enums/MinecraftModStatus.java create mode 100644 microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/enums/MinecraftUserRole.java rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/handlers/ModDataHandler.java (94%) create mode 100644 microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/ModLogicHandler.java rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/handlers/PlayerDataHandler.java (90%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/handlers/PlayerLogicHandler.java (98%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/routing/MMCDataRouter.java (81%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/routing/MMCEndpoints.java (95%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/routing/MMCLogicRouter.java (82%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/routing/middlewares/MMCAuthGuard.java (82%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/services/ModService.java (91%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/services/PlayerService.java (94%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/verticles/MMCDataVerticle.java (94%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/verticles/MMCLogicVerticle.java (83%) rename microservices/miarmacraft/src/main/java/net/miarma/api/microservices/{miarmacraft => minecraft}/verticles/MMCMainVerticle.java (90%) diff --git a/backlib/pom.xml b/backlib/pom.xml index 7a6f0f6..58079a7 100644 --- a/backlib/pom.xml +++ b/backlib/pom.xml @@ -4,7 +4,7 @@ 4.0.0 net.miarma.api backlib - 1.2.1 + 2.0.0 23 @@ -24,11 +24,11 @@ - gitea + MiarmaGit https://git.miarma.net/api/packages/Gallardo7761/maven - gitea + MiarmaGit https://git.miarma.net/api/packages/Gallardo7761/maven diff --git a/backlib/src/main/java/net/miarma/api/backlib/Constants.java b/backlib/src/main/java/net/miarma/api/backlib/Constants.java deleted file mode 100644 index 94ccf06..0000000 --- a/backlib/src/main/java/net/miarma/api/backlib/Constants.java +++ /dev/null @@ -1,469 +0,0 @@ -package net.miarma.api.backlib; - -import java.time.LocalDateTime; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -import io.vertx.core.json.JsonObject; -import net.miarma.api.backlib.gson.APIDontReturnExclusionStrategy; -import net.miarma.api.backlib.gson.JsonObjectTypeAdapter; -import net.miarma.api.backlib.gson.LocalDateTimeAdapter; -import net.miarma.api.backlib.gson.ValuableEnumDeserializer; -import net.miarma.api.backlib.gson.ValuableEnumTypeAdapter; -import net.miarma.api.backlib.interfaces.IUserRole; - -/** - * Clase que contiene constantes y enumeraciones utilizadas en la API de MiarmaCore. - * @author José Manuel Amador Gallardo - */ -public class Constants { - public static final String APP_NAME = "MiarmaCoreAPI"; - public static final String BASE_PREFIX = "/api"; - public static final String CORE_PREFIX = BASE_PREFIX + "/core/v1"; // tabla de usuarios central - public static final String AUTH_PREFIX = "/auth/v1"; - public static final String HUERTOS_PREFIX = BASE_PREFIX + "/huertos/v1"; - public static final String MMC_PREFIX = BASE_PREFIX + "/mmc/v1"; - public static final String CINE_PREFIX = BASE_PREFIX + "/cine/v1"; - public static final String MPASTE_PREFIX = BASE_PREFIX + "/mpaste/v1"; - - public static final String AUTH_EVENT_BUS = "auth.eventbus"; - public static final String CORE_EVENT_BUS = "core.eventbus"; - public static final String HUERTOS_EVENT_BUS = "huertos.eventbus"; - public static final String MMC_EVENT_BUS = "mmc.eventbus"; - public static final String CINE_EVENT_BUS = "cine.eventbus"; - public static final String MPASTE_EVENT_BUS = "mpaste.eventbus"; - - public static final List HUERTOS_ALLOWED_FOLDERS = - List.of("INBOX", "Drafts", "Sent", "Spam", "Trash"); - - public static final Logger LOGGER = LoggerFactory.getLogger(Constants.APP_NAME); - - public static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter()) - .registerTypeAdapter(JsonObject.class, new JsonObjectTypeAdapter()) - .registerTypeHierarchyAdapter(ValuableEnum.class, new ValuableEnumTypeAdapter()) - .registerTypeAdapter(CoreUserGlobalStatus.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(CoreUserRole.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(HuertosUserType.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(HuertosUserStatus.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(HuertosUserRole.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(HuertosRequestStatus.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(HuertosRequestType.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(HuertosPaymentType.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(HuertosPaymentFrequency.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(HuertosAnnouncePriority.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(MMCUserStatus.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(MMCUserRole.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(CoreFileContext.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(MMCModStatus.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(CineUserRole.class, new ValuableEnumDeserializer()) - .registerTypeAdapter(CineUserStatus.class, new ValuableEnumDeserializer()) - .addSerializationExclusionStrategy(new APIDontReturnExclusionStrategy()) - .create(); - - public enum CoreUserRole implements IUserRole { - USER(0), - ADMIN(1); - - private final int value; - - CoreUserRole(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static CoreUserRole fromInt(int i) { - for (CoreUserRole role : values()) { - if (role.value == i) return role; - } - throw new IllegalArgumentException("Invalid CoreUserRole value: " + i); - } - } - - - public enum CoreUserGlobalStatus implements ValuableEnum { - INACTIVE(0), - ACTIVE(1); - - private final int value; - - CoreUserGlobalStatus(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static CoreUserGlobalStatus fromInt(int i) { - for (CoreUserGlobalStatus status : values()) { - if (status.value == i) return status; - } - throw new IllegalArgumentException("Invalid CoreUserGlobalStatus value: " + i); - } - } - - public enum CoreFileContext implements ValuableEnum { - CORE(0), - HUERTOS(1), - MMC(2), - CINE(3); - - private final int value; - - CoreFileContext(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public String toCtxString() { - return switch(this) { - case CORE -> "core"; - case HUERTOS -> "huertos"; - case MMC -> "miarmacraft"; - case CINE -> "cine"; - }; - } - - public static CoreFileContext fromInt(int i) { - for (CoreFileContext context : values()) { - if (context.value == i) return context; - } - throw new IllegalArgumentException("Invalid CoreFileContext value: " + i); - } - } - - - public enum HuertosUserRole implements IUserRole { - USER(0), - ADMIN(1), - DEV(2); - - private final int value; - - HuertosUserRole(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static HuertosUserRole fromInt(int i) { - for (HuertosUserRole role : values()) { - if (role.value == i) return role; - } - throw new IllegalArgumentException("Invalid HuertosUserRole value: " + i); - } - } - - public enum HuertosUserType implements ValuableEnum { - WAIT_LIST(0), - MEMBER(1), - WITH_GREENHOUSE(2), - COLLABORATOR(3), - DEVELOPER(5), - SUBSIDY(4); - - private final int value; - - HuertosUserType(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static HuertosUserType fromInt(int i) { - for (HuertosUserType type : values()) { - if (type.value == i) return type; - } - throw new IllegalArgumentException("Invalid HuertosUserType value: " + i); - } - } - - - public enum HuertosUserStatus implements ValuableEnum { - INACTIVE(0), - ACTIVE(1); - - private final int value; - - HuertosUserStatus(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static HuertosUserStatus fromInt(int i) { - for (HuertosUserStatus status : values()) { - if (status.value == i) return status; - } - throw new IllegalArgumentException("Invalid HuertosUserStatus value: " + i); - } - } - - - public enum HuertosRequestStatus implements ValuableEnum { - PENDING(0), - APPROVED(1), - REJECTED(2); - - private final int value; - - HuertosRequestStatus(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static HuertosRequestStatus fromInt(int i) { - for (HuertosRequestStatus status : values()) { - if (status.value == i) return status; - } - throw new IllegalArgumentException("Invalid HuertoRequestStatus value: " + i); - } - } - - public enum HuertosPaymentType implements ValuableEnum { - BANK(0), - CASH(1); - - private final int value; - - HuertosPaymentType(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static HuertosPaymentType fromInt(int i) { - for (HuertosPaymentType type : values()) { - if (type.value == i) return type; - } - throw new IllegalArgumentException("Invalid HuertoPaymentType value: " + i); - } - } - - public enum HuertosRequestType implements ValuableEnum { - REGISTER(0), - UNREGISTER(1), - ADD_COLLABORATOR(2), - REMOVE_COLLABORATOR(3), - ADD_GREENHOUSE(4), - REMOVE_GREENHOUSE(5); - - private final int value; - - HuertosRequestType(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static HuertosRequestType fromInt(int i) { - for (HuertosRequestType type : values()) { - if (type.value == i) return type; - } - throw new IllegalArgumentException("Invalid HuertoRequestType value: " + i); - } - } - - public enum HuertosAnnouncePriority implements ValuableEnum { - LOW(0), - MEDIUM(1), - HIGH(2); - - private final int value; - - HuertosAnnouncePriority(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static HuertosAnnouncePriority fromInt(int i) { - for (HuertosAnnouncePriority priority : values()) { - if (priority.value == i) return priority; - } - throw new IllegalArgumentException("Invalid HuertoAnnouncePriority value: " + i); - } - } - - public enum HuertosPaymentFrequency implements ValuableEnum { - BIYEARLY(0), - YEARLY(1); - - private final int value; - - HuertosPaymentFrequency(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static HuertosPaymentFrequency fromInt(int i) { - for (HuertosPaymentFrequency frequency : values()) { - if (frequency.value == i) return frequency; - } - throw new IllegalArgumentException("Invalid HuertoPaymentFrequency value: " + i); - } - } - - - public enum MMCUserRole implements IUserRole { - PLAYER(0), - ADMIN(1); - - private final int value; - - MMCUserRole(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static MMCUserRole fromInt(int i) { - for (MMCUserRole role : values()) { - if (role.value == i) return role; - } - throw new IllegalArgumentException("Invalid MMCUserRole value: " + i); - } - } - - - public enum MMCUserStatus implements ValuableEnum { - INACTIVE(0), - ACTIVE(1); - - private final int value; - - MMCUserStatus(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static MMCUserStatus fromInt(int i) { - for (MMCUserStatus status : values()) { - if (status.value == i) return status; - } - throw new IllegalArgumentException("Invalid MMCUserStatus value: " + i); - } - } - - public enum MMCModStatus implements ValuableEnum { - ACTIVE(0), - INACTIVE(1); - - private final int value; - - MMCModStatus(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static MMCModStatus fromInt(int i) { - for (MMCModStatus status : values()) { - if (status.value == i) return status; - } - throw new IllegalArgumentException("Invalid MiarmacraftModStatus value: " + i); - } - } - - public enum CineUserStatus implements ValuableEnum { - ACTIVE(1), - INACTIVE(0); - - private final int value; - - CineUserStatus(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static CineUserStatus fromInt(int i) { - for (CineUserStatus status : values()) { - if (status.value == i) return status; - } - throw new IllegalArgumentException("Invalid CineUserStatus value: " + i); - } - } - - public enum CineUserRole implements IUserRole { - USER(0), - ADMIN(1); - - private final int value; - - CineUserRole(int value) { - this.value = value; - } - - @Override - public int getValue() { - return value; - } - - public static CineUserRole fromInt(int i) { - for (CineUserRole role : values()) { - if (role.value == i) return role; - } - throw new IllegalArgumentException("Invalid CineUserRole value: " + i); - } - } - - // Private constructor to prevent instantiation - private Constants() { - throw new AssertionError("Utility class cannot be instantiated."); - } -} diff --git a/backlib/src/main/java/net/miarma/api/backlib/ConfigManager.java b/backlib/src/main/java/net/miarma/api/backlib/config/ConfigManager.java similarity index 85% rename from backlib/src/main/java/net/miarma/api/backlib/ConfigManager.java rename to backlib/src/main/java/net/miarma/api/backlib/config/ConfigManager.java index 3aab338..0f36fd9 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/ConfigManager.java +++ b/backlib/src/main/java/net/miarma/api/backlib/config/ConfigManager.java @@ -1,4 +1,4 @@ -package net.miarma.api.backlib; +package net.miarma.api.backlib.config; import java.io.File; import java.io.FileInputStream; @@ -8,6 +8,10 @@ import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Properties; +import org.slf4j.Logger; + +import net.miarma.api.backlib.log.LoggerProvider; + /** * Gestión de toda la configuración de la aplicación. * Se encarga de cargar, guardar y proporcionar acceso a las propiedades de configuración. @@ -19,14 +23,16 @@ import java.util.Properties; */ public class ConfigManager { private static ConfigManager instance; + private final String appName; private final File configFile; private final Properties config; private static final String CONFIG_FILE_NAME = "config.properties"; - + private final Logger LOGGER = LoggerProvider.getLogger(); + private ConfigManager() { - String path = getBaseDir() + CONFIG_FILE_NAME; - this.configFile = new File(path); + this.appName = System.getenv().getOrDefault("APP_NAME", "miarma-backend"); this.config = new Properties(); + this.configFile = new File(getBaseDir() + CONFIG_FILE_NAME); } public static synchronized ConfigManager getInstance() { @@ -41,7 +47,7 @@ public class ConfigManager { InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8)) { config.load(isr); } catch (IOException e) { - Constants.LOGGER.error("Error loading configuration file: ", e); + LOGGER.error("Error loading configuration file: ", e); } } public File getConfigFile() { @@ -138,9 +144,9 @@ public class ConfigManager { private void saveConfig() { try (FileOutputStream fos = new FileOutputStream(configFile)) { - config.store(fos, "Configuration for: " + Constants.APP_NAME); + config.store(fos, "Configuration for: " + this.appName); } catch (IOException e) { - Constants.LOGGER.error("Error saving configuration file: ", e); + LOGGER.error("Error saving configuration file: ", e); } } } \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/api/backlib/OSType.java b/backlib/src/main/java/net/miarma/api/backlib/config/OSType.java similarity index 78% rename from backlib/src/main/java/net/miarma/api/backlib/OSType.java rename to backlib/src/main/java/net/miarma/api/backlib/config/OSType.java index ded6952..2c3143a 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/OSType.java +++ b/backlib/src/main/java/net/miarma/api/backlib/config/OSType.java @@ -1,4 +1,4 @@ -package net.miarma.api.backlib; +package net.miarma.api.backlib.config; /** * Enum que representa los diferentes tipos de sistemas operativos soportados diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/entities/FileEntity.java b/backlib/src/main/java/net/miarma/api/backlib/core/entities/FileEntity.java deleted file mode 100644 index d2abe45..0000000 --- a/backlib/src/main/java/net/miarma/api/backlib/core/entities/FileEntity.java +++ /dev/null @@ -1,83 +0,0 @@ -package net.miarma.api.backlib.core.entities; - -import io.vertx.sqlclient.Row; -import net.miarma.api.backlib.Constants.CoreFileContext; -import net.miarma.api.backlib.annotations.Table; -import net.miarma.api.backlib.db.AbstractEntity; - -import java.time.LocalDateTime; - -@Table("files") -public class FileEntity extends AbstractEntity { - private Integer file_id; - private String file_name; - private String file_path; - private String mime_type; - private Integer uploaded_by; - private CoreFileContext context; - private LocalDateTime uploaded_at; - - public FileEntity() { - super(); - } - - public FileEntity(Row row) { - super(row); - } - - public Integer getFile_id() { - return file_id; - } - - public void setFile_id(Integer file_id) { - this.file_id = file_id; - } - - public String getFile_name() { - return file_name; - } - - public void setFile_name(String file_name) { - this.file_name = file_name; - } - - public String getFile_path() { - return file_path; - } - - public void setFile_path(String file_path) { - this.file_path = file_path; - } - - public String getMime_type() { - return mime_type; - } - - public void setMime_type(String mime_type) { - this.mime_type = mime_type; - } - - public Integer getUploaded_by() { - return uploaded_by; - } - - public void setUploaded_by(Integer uploaded_by) { - this.uploaded_by = uploaded_by; - } - - public CoreFileContext getContext() { - return context; - } - - public void setContext(CoreFileContext context) { - this.context = context; - } - - public LocalDateTime getUploaded_at() { - return uploaded_at; - } - - public void setUploaded_at(LocalDateTime uploaded_at) { - this.uploaded_at = uploaded_at; - } -} diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/entities/UserEntity.java b/backlib/src/main/java/net/miarma/api/backlib/core/entities/UserEntity.java deleted file mode 100644 index 33a7e0e..0000000 --- a/backlib/src/main/java/net/miarma/api/backlib/core/entities/UserEntity.java +++ /dev/null @@ -1,63 +0,0 @@ -package net.miarma.api.backlib.core.entities; - -import java.time.LocalDateTime; - -import io.vertx.sqlclient.Row; -import net.miarma.api.backlib.Constants.CoreUserGlobalStatus; -import net.miarma.api.backlib.Constants.CoreUserRole; -import net.miarma.api.backlib.annotations.APIDontReturn; -import net.miarma.api.backlib.annotations.Table; -import net.miarma.api.backlib.db.AbstractEntity; -import net.miarma.api.backlib.interfaces.IUser; - -@Table("users") -public class UserEntity extends AbstractEntity implements IUser { - private Integer user_id; - private String user_name; - private String email; - private String display_name; - @APIDontReturn - private String password; - private String avatar; - private CoreUserGlobalStatus global_status; - private CoreUserRole role; - private LocalDateTime created_at; - private LocalDateTime updated_at; - - public UserEntity() { } - public UserEntity(Row row) { super(row); } - - public Integer getUser_id() { return user_id; } - public void setUser_id(Integer user_id) { this.user_id = user_id; } - public String getUser_name() { return user_name; } - public void setUser_name(String user_name) { this.user_name = user_name; } - public String getEmail() { return email; } - public void setEmail(String email) { this.email = email; } - public String getDisplay_name() { return display_name; } - public void setDisplay_name(String display_name) { this.display_name = display_name; } - public String getPassword() { return password; } - public void setPassword(String password) { this.password = password; } - public String getAvatar() { return avatar; } - public void setAvatar(String avatar) { this.avatar = avatar; } - public CoreUserGlobalStatus getGlobal_status() { return global_status; } - public void setGlobal_status(CoreUserGlobalStatus global_status) { this.global_status = global_status; } - public CoreUserRole getGlobal_role() { return role; } - public void setGlobal_role(CoreUserRole role) { this.role = role; } - public LocalDateTime getCreated_at() { return created_at; } - public void setCreated_at(LocalDateTime created_at) { this.created_at = created_at; } - public LocalDateTime getUpdated_at() { return updated_at; } - public void setUpdated_at(LocalDateTime updated_at) { this.updated_at = updated_at; } - - public static UserEntity from(IUser user) { - UserEntity entity = new UserEntity(); - entity.setUser_id(user.getUser_id()); - entity.setUser_name(user.getUser_name()); - entity.setDisplay_name(user.getDisplay_name()); - entity.setEmail(user.getEmail()); - entity.setPassword(user.getPassword()); - entity.setAvatar(user.getAvatar()); - entity.setGlobal_status(user.getGlobal_status()); - entity.setGlobal_role(user.getGlobal_role()); - return entity; - } -} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/services/UserService.java b/backlib/src/main/java/net/miarma/api/backlib/core/services/UserService.java deleted file mode 100644 index ab1407c..0000000 --- a/backlib/src/main/java/net/miarma/api/backlib/core/services/UserService.java +++ /dev/null @@ -1,209 +0,0 @@ -package net.miarma.api.backlib.core.services; - -import java.util.List; - -import io.vertx.core.Future; -import io.vertx.core.json.JsonObject; -import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.Constants.CoreUserGlobalStatus; -import net.miarma.api.backlib.Constants.CoreUserRole; -import net.miarma.api.backlib.exceptions.AlreadyExistsException; -import net.miarma.api.backlib.exceptions.BadRequestException; -import net.miarma.api.backlib.exceptions.ForbiddenException; -import net.miarma.api.backlib.exceptions.NotFoundException; -import net.miarma.api.backlib.exceptions.UnauthorizedException; -import net.miarma.api.backlib.exceptions.ValidationException; -import net.miarma.api.backlib.http.QueryParams; -import net.miarma.api.backlib.security.JWTManager; -import net.miarma.api.backlib.security.PasswordHasher; -import net.miarma.api.backlib.core.dao.UserDAO; -import net.miarma.api.backlib.core.entities.UserEntity; -import net.miarma.api.backlib.core.validators.UserValidator; - -public class UserService { - - private final UserDAO userDAO; - private final UserValidator userValidator; - - public UserService(Pool pool) { - this.userDAO = new UserDAO(pool); - this.userValidator = new UserValidator(); - } - - /* AUTHENTICATION */ - - public Future login(String emailOrUsername, String plainPassword, boolean keepLoggedIn) { - return getByEmail(emailOrUsername).compose(user -> { - if (user == null) { - return getByUserName(emailOrUsername).compose(user2 -> { - if (user2 == null) { - return Future.succeededFuture(null); - } - return Future.succeededFuture(user2); - }); - } - return Future.succeededFuture(user); - }).compose(user -> { - - if (user == null) { - return Future.failedFuture(new BadRequestException("Invalid credentials")); - } - - if (user.getGlobal_status() != Constants.CoreUserGlobalStatus.ACTIVE) { - return Future.failedFuture(new ForbiddenException("User is not active")); - } - - if (!PasswordHasher.verify(plainPassword, user.getPassword())) { - return Future.failedFuture(new BadRequestException("Invalid credentials")); - } - - JWTManager jwtManager = JWTManager.getInstance(); - String token = jwtManager.generateToken(user.getUser_name(), user.getUser_id(), user.getGlobal_role(), keepLoggedIn); - - JsonObject response = new JsonObject() - .put("token", token) - .put("loggedUser", new JsonObject(user.encode())); - - return Future.succeededFuture(response); - }); - } - - public Future loginValidate(Integer userId, String password) { - return getById(userId).compose(user -> { - if (user == null) { - return Future.failedFuture(new NotFoundException("User not found")); - } - if (!PasswordHasher.verify(password, user.getPassword())) { - return Future.failedFuture(new BadRequestException("Invalid credentials")); - } - JsonObject response = new JsonObject() - .put("valid", true); - return Future.succeededFuture(response); - }); - } - - public Future register(UserEntity user) { - return getByEmail(user.getEmail()).compose(existing -> { - if (existing != null) { - return Future.failedFuture(new AlreadyExistsException("Email already exists")); - } - - user.setPassword(PasswordHasher.hash(user.getPassword())); - user.setGlobal_role(CoreUserRole.USER); - user.setGlobal_status(CoreUserGlobalStatus.ACTIVE); - - return userValidator.validate(user).compose(validation -> { - if (!validation.isValid()) { - return Future.failedFuture(new ValidationException(Constants.GSON.toJson(validation.getErrors()))); - } - return userDAO.insert(user); - }); - }); - } - - public Future changePassword(int userId, String newPassword) { - return getById(userId).compose(user -> { - if (user == null) { - return Future.failedFuture(new NotFoundException("User not found")); - } - - user.setPassword(PasswordHasher.hash(newPassword)); - return userDAO.update(user); - }); - } - - public Future validateToken(String token) { - JWTManager jwtManager = JWTManager.getInstance(); - return jwtManager.isValid(token) ? - Future.succeededFuture(true) : - Future.failedFuture(new UnauthorizedException("Invalid token")); - } - - /* USERS OPERATIONS */ - - public Future> getAll(QueryParams params) { - return userDAO.getAll(params); - } - - public Future getById(Integer id) { - return userDAO.getById(id).compose(user -> { - if (user == null) { - return Future.failedFuture(new NotFoundException("User not found in the database")); - } - return Future.succeededFuture(user); - }); - } - - public Future getByEmail(String email) { - return userDAO.getByEmail(email); - } - - public Future getByUserName(String userName) { - return userDAO.getByUserName(userName); - } - - public Future updateRole(Integer userId, CoreUserRole role) { - return getById(userId).compose(user -> { - if (user == null) { - return Future.failedFuture(new NotFoundException("User not found in the database")); - } - user.setGlobal_role(role); - return userDAO.update(user); - }); - } - - public Future updateStatus(Integer userId, CoreUserGlobalStatus status) { - return getById(userId).compose(user -> { - if (user == null) { - return Future.failedFuture(new NotFoundException("User not found in the database")); - } - user.setGlobal_status(status); - return userDAO.update(user); - }); - } - - /* CRUD OPERATIONS */ - - public Future create(UserEntity user) { - return userValidator.validate(user).compose(validation -> { - if (!validation.isValid()) { - return Future.failedFuture(new ValidationException(Constants.GSON.toJson(validation.getErrors()))); - } - return userDAO.insert(user); - }); - } - - public Future update(UserEntity user) { - return userValidator.validate(user).compose(validation -> { - if (!validation.isValid()) { - return Future.failedFuture(new ValidationException(Constants.GSON.toJson(validation.getErrors()))); - } - if (user.getPassword() == null || user.getPassword().isEmpty()) { - user.setPassword(null); - } - return userDAO.update(user); - }); - } - - public Future upsert(UserEntity user) { - return userValidator.validate(user).compose(validation -> { - if (!validation.isValid()) { - return Future.failedFuture(new ValidationException(Constants.GSON.toJson(validation.getErrors()))); - } - if (user.getPassword() != null && !user.getPassword().isEmpty()) { - user.setPassword(PasswordHasher.hash(user.getPassword())); - } - return userDAO.upsert(user, "user_id", "email", "user_name"); - }); - } - - public Future delete(Integer id) { - return getById(id).compose(user -> { - if (user == null) { - return Future.failedFuture(new NotFoundException("User not found in the database")); - } - return userDAO.delete(id); - }); - } -} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/validators/FileValidator.java b/backlib/src/main/java/net/miarma/api/backlib/core/validators/FileValidator.java deleted file mode 100644 index 3190f95..0000000 --- a/backlib/src/main/java/net/miarma/api/backlib/core/validators/FileValidator.java +++ /dev/null @@ -1,84 +0,0 @@ -package net.miarma.api.backlib.core.validators; - -import io.vertx.core.Future; -import net.miarma.api.backlib.validation.ValidationResult; -import net.miarma.api.backlib.core.entities.FileEntity; - -public class FileValidator { - - public Future validate(FileEntity file, int size) { - ValidationResult result = new ValidationResult(); - - if (file == null) { - return Future.succeededFuture(result.addError("file", "El archivo no puede ser nulo")); - } - - if (file.getFile_name() == null || file.getFile_name().isBlank()) { - result.addError("file_name", "El nombre del archivo es obligatorio"); - } - - if (file.getMime_type() == null || file.getMime_type().isBlank()) { - result.addError("mime_type", "El tipo MIME es obligatorio"); - } - - if (file.getContext() == null) { - result.addError("context", "El contexto del archivo es obligatorio"); - } - - if (file.getUploaded_by() == null || file.getUploaded_by() <= 0) { - result.addError("uploaded_by", "El ID del usuario que subió el archivo es obligatorio y debe ser válido"); - } - - if (size <= 0) { - result.addError("size", "El archivo debe pesar más de 0 bytes"); - } - - if (file.getFile_name() != null && file.getFile_name().length() > 255) { - result.addError("file_name", "El nombre del archivo es demasiado largo"); - } - - if (size > 10485760) { // 10 MB limit - result.addError("size", "El archivo no puede pesar más de 10 MB"); - } - - return Future.succeededFuture(result); - } - - public Future validate(FileEntity file) { - ValidationResult result = new ValidationResult(); - - if (file == null) { - return Future.succeededFuture(result.addError("file", "File cannot be null")); - } - - if (file.getFile_name() == null || file.getFile_name().isBlank()) { - result.addError("file_name", "File name is required"); - } - - if (file.getFile_path() == null || file.getFile_path().isBlank()) { - result.addError("file_path", "File path is required"); - } - - if (file.getMime_type() == null || file.getMime_type().isBlank()) { - result.addError("mime_type", "MIME type is required"); - } - - if (file.getContext() == null) { - result.addError("context", "File context is required"); - } - - if (file.getUploaded_by() == null || file.getUploaded_by() <= 0) { - result.addError("uploaded_by", "Uploader user ID is required and must be valid"); - } - - if (file.getFile_name() != null && file.getFile_name().length() > 255) { - result.addError("file_name", "File name is too long"); - } - - if (file.getFile_path() != null && file.getFile_path().length() > 255) { - result.addError("file_path", "File path is too long"); - } - - return Future.succeededFuture(result); - } -} diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/validators/UserValidator.java b/backlib/src/main/java/net/miarma/api/backlib/core/validators/UserValidator.java deleted file mode 100644 index ff42903..0000000 --- a/backlib/src/main/java/net/miarma/api/backlib/core/validators/UserValidator.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.miarma.api.backlib.core.validators; - -import io.vertx.core.Future; -import net.miarma.api.backlib.validation.ValidationResult; -import net.miarma.api.backlib.core.entities.UserEntity; - -public class UserValidator { - - public Future validate(UserEntity user) { - ValidationResult result = new ValidationResult(); - - if (user == null) { - return Future.succeededFuture(result.addError("user", "El usuario no puede ser nulo")); - } - - if (user.getUser_name() == null || user.getUser_name().isBlank()) { - result.addError("user_name", "El nombre de usuario es obligatorio"); - } - - if (user.getDisplay_name() == null || user.getDisplay_name().isBlank()) { - result.addError("display_name", "El nombre para mostrar es obligatorio"); - } - - if (user.getEmail() != null && !user.getEmail().isBlank()) { - if (!user.getEmail().matches("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$")) { - result.addError("email", "El correo electrónico no es válido"); - } - } - - if (user.getPassword() == null || user.getPassword().isBlank()) { - result.addError("password", "La contraseña es obligatoria"); - } - - if (user.getGlobal_status() == null) { - result.addError("global_status", "El estado global del usuario es obligatorio"); - } - - if (user.getGlobal_role() == null) { - result.addError("role", "El rol del usuario es obligatorio"); - } - - return Future.succeededFuture(result); - } -} diff --git a/backlib/src/main/java/net/miarma/api/backlib/db/AbstractEntity.java b/backlib/src/main/java/net/miarma/api/backlib/db/AbstractEntity.java index b5bb1b3..4db8b79 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/db/AbstractEntity.java +++ b/backlib/src/main/java/net/miarma/api/backlib/db/AbstractEntity.java @@ -1,12 +1,14 @@ package net.miarma.api.backlib.db; +import java.lang.reflect.Field; + +import org.slf4j.Logger; + import io.vertx.core.json.JsonObject; import io.vertx.sqlclient.Row; -import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.ValuableEnum; import net.miarma.api.backlib.annotations.APIDontReturn; - -import java.lang.reflect.Field; +import net.miarma.api.backlib.interfaces.IValuableEnum; +import net.miarma.api.backlib.log.LoggerProvider; /** * Clase base para todas las entidades persistentes del sistema. @@ -24,6 +26,7 @@ import java.lang.reflect.Field; * @author José Manuel Amador Gallardo */ public abstract class AbstractEntity { + private final Logger LOGGER = LoggerProvider.getLogger(); /** * Constructor por defecto. Requerido para instanciación sin datos. @@ -86,7 +89,7 @@ public abstract class AbstractEntity { } } default -> { - Constants.LOGGER.error("Type not supported yet: {} for field {}", type.getName(), name); + LOGGER.error("Type not supported yet: {} for field {}", type.getName(), name); yield null; } }; @@ -95,7 +98,7 @@ public abstract class AbstractEntity { field.set(this, value); } catch (Exception e) { - Constants.LOGGER.error("Error populating field {}: {}", field.getName(), e.getMessage()); + LOGGER.error("Error populating field {}: {}", field.getName(), e.getMessage()); } } } @@ -103,7 +106,7 @@ public abstract class AbstractEntity { /** * Codifica esta entidad como un objeto JSON, omitiendo los campos anotados con {@link APIDontReturn}. * - *

Si un campo implementa {@link ValuableEnum}, se usará su valor en lugar del nombre del enum.

+ *

Si un campo implementa {@link IValuableEnum}, se usará su valor en lugar del nombre del enum.

* * @return Representación JSON de esta entidad. */ @@ -119,13 +122,13 @@ public abstract class AbstractEntity { try { Object value = field.get(this); - if (value instanceof ValuableEnum ve) { + if (value instanceof IValuableEnum ve) { json.put(field.getName(), ve.getValue()); } else { json.put(field.getName(), value); } } catch (IllegalAccessException e) { - Constants.LOGGER.error("Error accessing field {}: {}", field.getName(), e.getMessage()); + LOGGER.error("Error accessing field {}: {}", field.getName(), e.getMessage()); } } clazz = clazz.getSuperclass(); @@ -150,7 +153,7 @@ public abstract class AbstractEntity { try { sb.append(field.getName()).append("= ").append(field.get(this)).append(", "); } catch (IllegalAccessException e) { - Constants.LOGGER.error("Error stringing field {}: {}", field.getName(), e.getMessage()); + LOGGER.error("Error stringing field {}: {}", field.getName(), e.getMessage()); } } sb.append("]"); diff --git a/backlib/src/main/java/net/miarma/api/backlib/db/DatabaseManager.java b/backlib/src/main/java/net/miarma/api/backlib/db/DatabaseManager.java index 400a48f..5585e6f 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/db/DatabaseManager.java +++ b/backlib/src/main/java/net/miarma/api/backlib/db/DatabaseManager.java @@ -1,16 +1,18 @@ package net.miarma.api.backlib.db; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; + import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.Row; import io.vertx.sqlclient.RowSet; -import net.miarma.api.backlib.Constants; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; +import net.miarma.api.backlib.log.LoggerProvider; /** * Gestor centralizado de acceso a la base de datos utilizando Vert.x SQL Client. @@ -23,6 +25,7 @@ import java.util.List; */ public class DatabaseManager { + private final Logger LOGGER = LoggerProvider.getLogger(); private static DatabaseManager instance; private final Pool pool; @@ -86,7 +89,7 @@ public class DatabaseManager { results.add(constructor.newInstance(row)); } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) { - Constants.LOGGER.error("Error instantiating class: {}", e.getMessage()); + LOGGER.error("Error instantiating class: {}", e.getMessage()); } } return results; @@ -116,7 +119,7 @@ public class DatabaseManager { Constructor constructor = clazz.getConstructor(Row.class); return constructor.newInstance(row); } catch (Exception e) { - Constants.LOGGER.error("Error instantiating class: {}", e.getMessage()); + LOGGER.error("Error instantiating class: {}", e.getMessage()); } } return null; // Si no hay filas diff --git a/backlib/src/main/java/net/miarma/api/backlib/db/DatabaseProvider.java b/backlib/src/main/java/net/miarma/api/backlib/db/DatabaseProvider.java index d1dc777..d153329 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/db/DatabaseProvider.java +++ b/backlib/src/main/java/net/miarma/api/backlib/db/DatabaseProvider.java @@ -4,7 +4,7 @@ import io.vertx.core.Vertx; import io.vertx.mysqlclient.MySQLConnectOptions; import io.vertx.sqlclient.Pool; import io.vertx.sqlclient.PoolOptions; -import net.miarma.api.backlib.ConfigManager; +import net.miarma.api.backlib.config.ConfigManager; /** * Factoría de {@link Pool} para conexiones MySQL usando Vert.x. diff --git a/backlib/src/main/java/net/miarma/api/backlib/db/QueryBuilder.java b/backlib/src/main/java/net/miarma/api/backlib/db/QueryBuilder.java index 4409868..2dce697 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/db/QueryBuilder.java +++ b/backlib/src/main/java/net/miarma/api/backlib/db/QueryBuilder.java @@ -1,14 +1,24 @@ package net.miarma.api.backlib.db; -import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.annotations.Table; - import java.lang.reflect.Field; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.StringJoiner; import java.util.stream.Collectors; +import org.slf4j.Logger; + +import net.miarma.api.backlib.annotations.Table; +import net.miarma.api.backlib.log.LoggerProvider; + /** * Clase utilitaria para construir queries SQL dinámicamente mediante reflexión, * usando entidades anotadas con {@link Table}. @@ -21,6 +31,7 @@ import java.util.stream.Collectors; * @author José Manuel Amador Gallardo */ public class QueryBuilder { + private final static Logger LOGGER = LoggerProvider.getLogger(); private final StringBuilder query; private String sort; private String order; @@ -141,7 +152,7 @@ public class QueryBuilder { String value = entry.getValue(); if (!validFields.contains(key)) { - Constants.LOGGER.warn("[QueryBuilder] Ignorando campo invalido en WHERE: {}", key); + LOGGER.warn("[QueryBuilder] Ignorando campo invalido en WHERE: {}", key); continue; } @@ -186,7 +197,7 @@ public class QueryBuilder { if (fieldValue != null) { String key = field.getName(); if (!validFields.contains(key)) { - Constants.LOGGER.warn("[QueryBuilder] Ignorando campo invalido en WHERE: {}", key); + LOGGER.warn("[QueryBuilder] Ignorando campo invalido en WHERE: {}", key); continue; } Object value = extractValue(fieldValue); @@ -197,7 +208,7 @@ public class QueryBuilder { } } } catch (IllegalArgumentException | IllegalAccessException e) { - Constants.LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); + LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); } } this.query.append(joiner).append(" "); @@ -239,7 +250,7 @@ public class QueryBuilder { values.add("NULL"); } } catch (IllegalArgumentException | IllegalAccessException e) { - Constants.LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); + LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); } } qb.query.append(columns).append(") "); @@ -289,7 +300,7 @@ public class QueryBuilder { setJoiner.add(fieldName + " = " + (value instanceof String || value instanceof LocalDateTime ? "'" + value + "'" : value)); } catch (Exception e) { - Constants.LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); + LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); } } @@ -343,7 +354,7 @@ public class QueryBuilder { setJoiner.add(fieldName + " = " + (value instanceof String || value instanceof LocalDateTime ? "'" + value + "'" : value)); } } catch (Exception e) { - Constants.LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); + LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); } } @@ -394,7 +405,7 @@ public class QueryBuilder { } } catch (Exception e) { - Constants.LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); + LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); } } @@ -436,7 +447,7 @@ public class QueryBuilder { || value instanceof LocalDateTime ? "'" + value + "'" : value.toString())); } } catch (Exception e) { - Constants.LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); + LOGGER.error("(REFLECTION) Error reading field: {}", e.getMessage()); } } @@ -460,7 +471,7 @@ public class QueryBuilder { .anyMatch(f -> f.equals(c)); if (!isValid) { - Constants.LOGGER.warn("[QueryBuilder] Ignorando campo invalido en ORDER BY: {}", c); + LOGGER.warn("[QueryBuilder] Ignorando campo invalido en ORDER BY: {}", c); return; } } diff --git a/backlib/src/main/java/net/miarma/api/backlib/gson/GsonProvider.java b/backlib/src/main/java/net/miarma/api/backlib/gson/GsonProvider.java new file mode 100644 index 0000000..fc17e3d --- /dev/null +++ b/backlib/src/main/java/net/miarma/api/backlib/gson/GsonProvider.java @@ -0,0 +1,27 @@ +package net.miarma.api.backlib.gson; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import io.vertx.core.json.JsonObject; +import net.miarma.api.backlib.interfaces.IValuableEnum; + +import java.time.LocalDateTime; + +public class GsonProvider { + private static final Gson INSTANCE = createGson(); + private static Gson createGson() { + return new GsonBuilder() + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter()) + .registerTypeAdapter(JsonObject.class, new JsonObjectTypeAdapter()) + .registerTypeHierarchyAdapter(IValuableEnum.class, new ValuableEnumDeserializer()) + .registerTypeHierarchyAdapter(IValuableEnum.class, new ValuableEnumTypeAdapter()) + .addSerializationExclusionStrategy(new APIDontReturnExclusionStrategy()) + .create(); + } + + public static Gson get() { + return INSTANCE; + } + + private GsonProvider() {} +} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/api/backlib/gson/ValuableEnumDeserializer.java b/backlib/src/main/java/net/miarma/api/backlib/gson/ValuableEnumDeserializer.java index fde87b7..8bddfda 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/gson/ValuableEnumDeserializer.java +++ b/backlib/src/main/java/net/miarma/api/backlib/gson/ValuableEnumDeserializer.java @@ -4,7 +4,8 @@ import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; -import net.miarma.api.backlib.ValuableEnum; + +import net.miarma.api.backlib.interfaces.IValuableEnum; import java.lang.reflect.Type; import java.util.Arrays; @@ -15,15 +16,15 @@ import java.util.Arrays; * * @author José Manuel Amador Gallardo */ -public class ValuableEnumDeserializer implements JsonDeserializer { +public class ValuableEnumDeserializer implements JsonDeserializer { @Override - public ValuableEnum deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + public IValuableEnum deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { Class enumClass = (Class) typeOfT; int value = json.getAsInt(); - return (ValuableEnum) Arrays.stream(enumClass.getEnumConstants()) - .filter(e -> ((ValuableEnum) e).getValue() == value) + return (IValuableEnum) Arrays.stream(enumClass.getEnumConstants()) + .filter(e -> ((IValuableEnum) e).getValue() == value) .findFirst() .orElseThrow(() -> new JsonParseException("Invalid enum value: " + value)); } diff --git a/backlib/src/main/java/net/miarma/api/backlib/gson/ValuableEnumTypeAdapter.java b/backlib/src/main/java/net/miarma/api/backlib/gson/ValuableEnumTypeAdapter.java index 89e92b0..58c9c65 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/gson/ValuableEnumTypeAdapter.java +++ b/backlib/src/main/java/net/miarma/api/backlib/gson/ValuableEnumTypeAdapter.java @@ -4,7 +4,8 @@ import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; -import net.miarma.api.backlib.ValuableEnum; + +import net.miarma.api.backlib.interfaces.IValuableEnum; import java.lang.reflect.Type; @@ -14,10 +15,10 @@ import java.lang.reflect.Type; * * @author José Manuel Amador Gallardo */ -public class ValuableEnumTypeAdapter implements JsonSerializer { +public class ValuableEnumTypeAdapter implements JsonSerializer { @Override - public JsonElement serialize(ValuableEnum src, Type typeOfSrc, JsonSerializationContext context) { + public JsonElement serialize(IValuableEnum src, Type typeOfSrc, JsonSerializationContext context) { return new JsonPrimitive(src.getValue()); } } diff --git a/backlib/src/main/java/net/miarma/api/backlib/interfaces/IUser.java b/backlib/src/main/java/net/miarma/api/backlib/interfaces/IUser.java deleted file mode 100644 index d21fcfd..0000000 --- a/backlib/src/main/java/net/miarma/api/backlib/interfaces/IUser.java +++ /dev/null @@ -1,21 +0,0 @@ -package net.miarma.api.backlib.interfaces; - -import java.time.LocalDateTime; - -import net.miarma.api.backlib.Constants.CoreUserGlobalStatus; -import net.miarma.api.backlib.Constants.CoreUserRole; - -public interface IUser { - Integer getUser_id(); - String getUser_name(); - String getEmail(); - String getDisplay_name(); - String getPassword(); - String getAvatar(); - CoreUserGlobalStatus getGlobal_status(); - CoreUserRole getGlobal_role(); - LocalDateTime getCreated_at(); - default LocalDateTime getUpdated_at() { - return null; - } -} diff --git a/backlib/src/main/java/net/miarma/api/backlib/interfaces/IUserRole.java b/backlib/src/main/java/net/miarma/api/backlib/interfaces/IUserRole.java index d46ad4f..18e6b16 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/interfaces/IUserRole.java +++ b/backlib/src/main/java/net/miarma/api/backlib/interfaces/IUserRole.java @@ -1,7 +1,5 @@ package net.miarma.api.backlib.interfaces; -import net.miarma.api.backlib.ValuableEnum; - -public interface IUserRole extends ValuableEnum { +public interface IUserRole extends IValuableEnum { String name(); } diff --git a/backlib/src/main/java/net/miarma/api/backlib/ValuableEnum.java b/backlib/src/main/java/net/miarma/api/backlib/interfaces/IValuableEnum.java similarity index 62% rename from backlib/src/main/java/net/miarma/api/backlib/ValuableEnum.java rename to backlib/src/main/java/net/miarma/api/backlib/interfaces/IValuableEnum.java index 4b1acdb..eadebb9 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/ValuableEnum.java +++ b/backlib/src/main/java/net/miarma/api/backlib/interfaces/IValuableEnum.java @@ -1,9 +1,9 @@ -package net.miarma.api.backlib; +package net.miarma.api.backlib.interfaces; /** * Interfaz que define un enum con un valor entero asociado * @author José Manuel Amador Gallardo */ -public interface ValuableEnum { +public interface IValuableEnum { int getValue(); } diff --git a/backlib/src/main/java/net/miarma/api/backlib/LogAccumulator.java b/backlib/src/main/java/net/miarma/api/backlib/log/LogAccumulator.java similarity index 95% rename from backlib/src/main/java/net/miarma/api/backlib/LogAccumulator.java rename to backlib/src/main/java/net/miarma/api/backlib/log/LogAccumulator.java index a9eb4f6..5559f42 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/LogAccumulator.java +++ b/backlib/src/main/java/net/miarma/api/backlib/log/LogAccumulator.java @@ -1,4 +1,4 @@ -package net.miarma.api.backlib; +package net.miarma.api.backlib.log; import org.slf4j.Logger; diff --git a/backlib/src/main/java/net/miarma/api/backlib/LogEntry.java b/backlib/src/main/java/net/miarma/api/backlib/log/LogEntry.java similarity index 82% rename from backlib/src/main/java/net/miarma/api/backlib/LogEntry.java rename to backlib/src/main/java/net/miarma/api/backlib/log/LogEntry.java index a3fe2e3..918dd5a 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/LogEntry.java +++ b/backlib/src/main/java/net/miarma/api/backlib/log/LogEntry.java @@ -1,4 +1,4 @@ -package net.miarma.api.backlib; +package net.miarma.api.backlib.log; public record LogEntry(int order, String message) { public static LogEntry of(int order, String message) { diff --git a/backlib/src/main/java/net/miarma/api/backlib/log/LoggerProvider.java b/backlib/src/main/java/net/miarma/api/backlib/log/LoggerProvider.java new file mode 100644 index 0000000..1cde585 --- /dev/null +++ b/backlib/src/main/java/net/miarma/api/backlib/log/LoggerProvider.java @@ -0,0 +1,11 @@ +package net.miarma.api.backlib.log; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class LoggerProvider { + public static Logger getLogger() { + String className = Thread.currentThread().getStackTrace()[2].getClassName(); + return LoggerFactory.getLogger(className); + } +} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/api/backlib/middlewares/AbstractAuthGuard.java b/backlib/src/main/java/net/miarma/api/backlib/middlewares/AbstractAuthGuard.java index 3db07e7..9cd8a15 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/middlewares/AbstractAuthGuard.java +++ b/backlib/src/main/java/net/miarma/api/backlib/middlewares/AbstractAuthGuard.java @@ -1,5 +1,6 @@ package net.miarma.api.backlib.middlewares; +import java.util.UUID; import java.util.function.Consumer; import io.vertx.core.Handler; @@ -18,7 +19,7 @@ import net.miarma.api.backlib.util.JsonUtil; public abstract class AbstractAuthGuard & IUserRole> { protected abstract R parseRole(String roleStr); - protected abstract void getUserEntity(int userId, RoutingContext ctx, Consumer callback); + protected abstract void getUserEntity(UUID userId, RoutingContext ctx, Consumer callback); protected abstract boolean hasPermission(U user, R role); public Handler check(R... allowedRoles) { @@ -29,7 +30,7 @@ public abstract class AbstractAuthGuard & IUserRole> { return; } - int userId = JWTManager.getInstance().extractUserId(token); + UUID userId = JWTManager.getInstance().extractUserId(token); String roleStr = JWTManager.getInstance().extractRole(token); R role; diff --git a/backlib/src/main/java/net/miarma/api/backlib/security/JWTManager.java b/backlib/src/main/java/net/miarma/api/backlib/security/JWTManager.java index 8d90128..c86f85b 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/security/JWTManager.java +++ b/backlib/src/main/java/net/miarma/api/backlib/security/JWTManager.java @@ -1,83 +1,87 @@ package net.miarma.api.backlib.security; import java.util.Date; - +import java.util.UUID; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.JWTVerifier; - -import net.miarma.api.backlib.ConfigManager; -import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.interfaces.IUserRole; -/** - * Clase de gestión de JSON Web Tokens (JWT). - * Proporciona métodos para generar, verificar y decodificar tokens JWT. - *

- * Esta clase sigue el patron Singleton para asegurar una sola instancia. - * - * @author José Manuel Amador Gallardo - */ public class JWTManager { - private final ConfigManager config = ConfigManager.getInstance(); + private final ConfigManager config = ConfigManager.getInstance(); private final Algorithm algorithm; private final JWTVerifier verifier; private static JWTManager instance; private JWTManager() { - this.algorithm = Algorithm.HMAC256(config.getStringProperty("jwt.secret")); - this.verifier = JWT.require(algorithm).build(); - } + this.algorithm = Algorithm.HMAC256(config.getStringProperty("jwt.secret")); + this.verifier = JWT.require(algorithm).build(); + } - /** - * Obtiene la instancia única de JWTManager. - * - * @return La instancia única de JWTManager. - */ public static synchronized JWTManager getInstance() { - if (instance == null) { - instance = new JWTManager(); - } - return instance; - } - - /** - * Genera un token JWT para un usuario. - * - * @param user El usuario para el cual se generará el token. - * @param keepLoggedIn Indica si el token debe tener una duración prolongada. - * @return El token JWT generado. - */ - public String generateToken(String user_name, Integer user_id, IUserRole role, boolean keepLoggedIn) { - final long EXPIRATION_TIME_MS = 1000L * (keepLoggedIn ? config.getIntProperty("jwt.expiration") : config.getIntProperty("jwt.expiration.short")); - return JWT.create() - .withSubject(user_name) - .withClaim("userId", user_id) - .withClaim("role", role.name()) - .withClaim("isAdmin", role == Constants.CoreUserRole.ADMIN) - .withIssuedAt(new Date()) - .withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_TIME_MS)) - .sign(algorithm); + if (instance == null) { + instance = new JWTManager(); + } + return instance; } /** - * Decodifica un token JWT sin verificar su firma. - * - * @param token El token JWT a decodificar. - * @return Un objeto DecodedJWT que contiene la información del token. + * Genera un token JWT usando UUID para el usuario. */ - public DecodedJWT decodeWithoutVerification(String token) { - return JWT.decode(token); + public String generateToken( + String userName, + UUID userId, + IUserRole role, + Integer serviceId, + boolean keepLoggedIn + ) { + final long expiration = 1000L * ( + keepLoggedIn + ? config.getIntProperty("jwt.expiration") + : config.getIntProperty("jwt.expiration.short") + ); + + return JWT.create() + .withSubject(userName) + .withClaim("userId", userId.toString()) + .withClaim("serviceId", serviceId) + .withClaim("role", role.name()) + .withIssuedAt(new Date()) + .withExpiresAt(new Date(System.currentTimeMillis() + expiration)) + .sign(algorithm); + } + + public UUID extractUserId(String token) { + try { + DecodedJWT jwt = verifier.verify(token); + String uuidStr = jwt.getClaim("userId").asString(); + return UUID.fromString(uuidStr); + } catch (Exception e) { + return null; + } + } + + public Integer extractServiceId(String token) { + try { + DecodedJWT jwt = verifier.verify(token); + return jwt.getClaim("serviceId").asInt(); + } catch (Exception e) { + return -1; + } + } + + public String extractRole(String token) { + try { + DecodedJWT jwt = verifier.verify(token); + return jwt.getClaim("role").asString(); + } catch (Exception e) { + return null; + } } - /** - * Verifica la validez de un token JWT. - * - * @param token El token JWT a verificar. - * @return true si el token es válido, false en caso contrario. - */ public boolean isValid(String token) { try { verifier.verify(token); @@ -86,77 +90,4 @@ public class JWTManager { return false; } } - - /** - * Verifica si un token JWT pertenece a un usuario administrador. - * - * @param token El token JWT a verificar. - * @return true si el token pertenece a un administrador, false en caso contrario. - */ - public boolean isAdmin(String token) { - try { - DecodedJWT jwt = verifier.verify(token); - return jwt.getClaim("isAdmin").asBoolean(); - } catch (Exception e) { - return false; - } - } - - /** - * Obtiene el ID de usuario a partir de un token JWT. - * - * @param token El token JWT del cual se extraerá el ID de usuario. - * @return El ID de usuario si el token es válido, -1 en caso contrario. - */ - public int getUserId(String token) { - try { - DecodedJWT jwt = verifier.verify(token); - return jwt.getClaim("userId").asInt(); - } catch (Exception e) { - return -1; - } - } - - /** - * Obtiene el sub especificado en un token JWT, que generalmente es el nombre de usuario. - * - * @param token El token JWT del cual se extraerá el nombre de usuario. - * @return El nombre de usuario si el token es válido, null en caso contrario. - */ - public String getSubject(String token) { - try { - DecodedJWT jwt = verifier.verify(token); - return jwt.getSubject(); - } catch (Exception e) { - return null; - } - } - - /** - * Extrae el ID de usuario de un token JWT. - * @param token El token JWT del cual se extraerá el ID de usuario. - * @return El ID de usuario si el token es válido, -1 en caso contrario. - */ - public int extractUserId(String token) { - try { - DecodedJWT jwt = verifier.verify(token); - return jwt.getClaim("userId").asInt(); - } catch (Exception e) { - return -1; - } - } - - /** - * Extrae el rol de usuario de un token JWT. - * @param token El token JWT del cual se extraerá el ID de usuario. - * @return El rol de usuario si el token es válido, null en caso contrario. - */ - public String extractRole(String token) { - try { - DecodedJWT jwt = verifier.verify(token); - return jwt.getClaim("role").asString(); - } catch (Exception e) { - return null; - } - } -} +} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/api/backlib/security/SecretManager.java b/backlib/src/main/java/net/miarma/api/backlib/security/SecretManager.java index 9cd38af..3631201 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/security/SecretManager.java +++ b/backlib/src/main/java/net/miarma/api/backlib/security/SecretManager.java @@ -1,7 +1,5 @@ package net.miarma.api.backlib.security; -import net.miarma.api.backlib.ConfigManager; - import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -10,6 +8,8 @@ import java.security.SecureRandom; import java.util.List; import java.util.Properties; +import net.miarma.api.backlib.config.ConfigManager; + /** * Clase encargada de generar los secrets necesarios para la autenticación JWT. * Si el secret ya existe en el archivo de configuración, lo devuelve. diff --git a/backlib/src/main/java/net/miarma/api/backlib/util/JsonUtil.java b/backlib/src/main/java/net/miarma/api/backlib/util/JsonUtil.java index 985259f..870ddcf 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/util/JsonUtil.java +++ b/backlib/src/main/java/net/miarma/api/backlib/util/JsonUtil.java @@ -3,7 +3,7 @@ package net.miarma.api.backlib.util; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; -import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.gson.GsonProvider; import net.miarma.api.backlib.http.ApiResponse; import net.miarma.api.backlib.http.ApiStatus; @@ -26,7 +26,7 @@ public class JsonUtil { .put("data", data); ctx.response().end(response.encode()); } else { - ctx.response().end(Constants.GSON.toJson(new ApiResponse<>(status, message, data))); + ctx.response().end(GsonProvider.get().toJson(new ApiResponse<>(status, message, data))); } } diff --git a/backlib/src/main/java/net/miarma/api/backlib/util/RouterUtil.java b/backlib/src/main/java/net/miarma/api/backlib/util/RouterUtil.java index 3867e4e..1ff6d39 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/util/RouterUtil.java +++ b/backlib/src/main/java/net/miarma/api/backlib/util/RouterUtil.java @@ -1,14 +1,17 @@ package net.miarma.api.backlib.util; +import org.slf4j.Logger; + import io.vertx.ext.web.Router; -import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.log.LoggerProvider; /** * Clase de utilidad para adjuntar un logger a un router de Vert.x. * @author José Manuel Amador Gallardo */ public class RouterUtil { - + private final static Logger LOGGER = LoggerProvider.getLogger(); + public static void attachLogger(Router router) { router.route().handler(ctx -> { long startTime = System.currentTimeMillis(); @@ -46,7 +49,7 @@ public class RouterUtil { duration ); - Constants.LOGGER.info(log); + LOGGER.info(log); }); ctx.next(); diff --git a/bootstrap/pom.xml b/bootstrap/pom.xml index ed796cc..0a33e7f 100644 --- a/bootstrap/pom.xml +++ b/bootstrap/pom.xml @@ -5,8 +5,8 @@ net.miarma.api - miarma-ecosystem - 1.2.1 + miarma-backend + 2.0.0 bootstrap @@ -51,7 +51,7 @@ net.miarma.api - miarmacraft + minecraft ${project.version} diff --git a/bootstrap/src/main/java/net/miarma/api/AppInitializer.java b/bootstrap/src/main/java/net/miarma/api/AppInitializer.java index befd14e..139ca1c 100644 --- a/bootstrap/src/main/java/net/miarma/api/AppInitializer.java +++ b/bootstrap/src/main/java/net/miarma/api/AppInitializer.java @@ -1,18 +1,19 @@ package net.miarma.api; -import net.miarma.api.backlib.ConfigManager; -import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.security.SecretManager; -import net.miarma.api.backlib.vertx.VertxJacksonConfig; -import net.miarma.api.backlib.util.MessageUtil; - import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.StandardCopyOption; +import org.slf4j.Logger; + import io.vertx.core.Launcher; +import net.miarma.api.backlib.config.ConfigManager; +import net.miarma.api.backlib.log.LoggerProvider; +import net.miarma.api.backlib.security.SecretManager; +import net.miarma.api.backlib.util.MessageUtil; +import net.miarma.api.backlib.vertx.VertxJacksonConfig; /** * Punto de entrada para inicializar la aplicación. @@ -24,12 +25,13 @@ import io.vertx.core.Launcher; * - Desplegar el Verticle Master */ public class AppInitializer { + private final static Logger LOGGER = LoggerProvider.getLogger(); public static void main(String[] args) { AppInitializer initializer = new AppInitializer(); initializer.init(); initializer.deployMaster(); - Constants.LOGGER.info("✅ App initialized successfully!"); + LOGGER.info("✅ App initialized successfully!"); } private final ConfigManager configManager; @@ -49,7 +51,7 @@ public class AppInitializer { private void initializeDirectories() { File baseDir = new File(configManager.getBaseDir()); if (!baseDir.exists() && baseDir.mkdirs()) { - Constants.LOGGER.info("Created base directory: " + baseDir.getAbsolutePath()); + LOGGER.info("Created base directory: " + baseDir.getAbsolutePath()); } } @@ -59,12 +61,12 @@ public class AppInitializer { try (InputStream in = getClass().getClassLoader().getResourceAsStream("default.properties")) { if (in != null) { Files.copy(in, configFile.toPath(), StandardCopyOption.REPLACE_EXISTING); - Constants.LOGGER.info("Copied default.properties to: " + configFile.getAbsolutePath()); + LOGGER.info("Copied default.properties to: " + configFile.getAbsolutePath()); } else { - Constants.LOGGER.error(MessageUtil.notFound("Default config", "resources")); + LOGGER.error(MessageUtil.notFound("Default config", "resources")); } } catch (IOException e) { - Constants.LOGGER.error(MessageUtil.failedTo("copy", "default config", e)); + LOGGER.error(MessageUtil.failedTo("copy", "default config", e)); } } } diff --git a/bootstrap/src/main/java/net/miarma/api/MasterVerticle.java b/bootstrap/src/main/java/net/miarma/api/MasterVerticle.java index 8a02d5d..c782e0f 100644 --- a/bootstrap/src/main/java/net/miarma/api/MasterVerticle.java +++ b/bootstrap/src/main/java/net/miarma/api/MasterVerticle.java @@ -1,32 +1,36 @@ package net.miarma.api; -import java.util.Set; +import org.slf4j.Logger; import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; import io.vertx.core.Promise; -import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.LogAccumulator; +import net.miarma.api.backlib.log.LogAccumulator; +import net.miarma.api.backlib.log.LoggerProvider; import net.miarma.api.backlib.util.DeploymentUtil; import net.miarma.api.microservices.core.verticles.CoreMainVerticle; import net.miarma.api.microservices.huertos.verticles.HuertosMainVerticle; import net.miarma.api.microservices.huertosdecine.verticles.CineMainVerticle; -import net.miarma.api.microservices.miarmacraft.verticles.MMCMainVerticle; +import net.miarma.api.microservices.minecraft.verticles.MMCMainVerticle; import net.miarma.api.microservices.mpaste.verticles.MPasteMainVerticle; +@SuppressWarnings("unused") public class MasterVerticle extends AbstractVerticle { + private final Logger LOGGER = LoggerProvider.getLogger(); + @Override public void start(Promise startPromise) { deploy() .onSuccess(v -> { vertx.setTimer(300, id -> { - LogAccumulator.flushToLogger(Constants.LOGGER); + LogAccumulator.flushToLogger(LOGGER); startPromise.complete(); }); }) .onFailure(startPromise::fail); } + @SuppressWarnings("unused") private Future deploy() { Promise promise = Promise.promise(); diff --git a/bootstrap/src/main/resources/default.properties b/bootstrap/src/main/resources/default.properties index e75ab2e..4037d3c 100644 --- a/bootstrap/src/main/resources/default.properties +++ b/bootstrap/src/main/resources/default.properties @@ -1,3 +1,25 @@ +# App Configuration +app.name=miarma-backend +app.version=v2 + +# API Configuration +api.base=/api + +api.core.prefix=/core/${app.version} +api.auth.prefix=/auth/${app.version} +api.huertos.prefix=/huertos/${app.version} +api.minecraft.prefix=/minecraft/${app.version} +api.cine.prefix=/cine/${app.version} +api.mpaste.prefix=/mpaste/${app.version} + +# EventBus Configuration +eventbus.auth.address=auth.eventbus +eventbus.core.address=core.eventbus +eventbus.huertos.address=huertos.eventbus +eventbus.minecraft.address=minecraft.eventbus +eventbus.cine.address=cine.eventbus +eventbus.mpaste.address=mpaste.eventbus + # DB Configuration db.protocol=jdbc:mariadb db.host=localhost @@ -11,8 +33,8 @@ dp.poolSize=5 inet.host=localhost sso.logic.port=8080 sso.data.port=8081 -mmc.logic.port=8100 -mmc.data.port=8101 +minecraft.logic.port=8100 +minecraft.data.port=8101 huertos.logic.port=8120 huertos.data.port=8121 cine.data.port = 8140 diff --git a/microservices/core/pom.xml b/microservices/core/pom.xml index f366763..d7515d3 100644 --- a/microservices/core/pom.xml +++ b/microservices/core/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.miarma.api core - 1.2.1 + 2.0.0 23 @@ -20,7 +20,7 @@ net.miarma.api backlib - 1.2.1 + 2.0.0 diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/dao/CredentialDAO.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/dao/CredentialDAO.java new file mode 100644 index 0000000..b2abfad --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/dao/CredentialDAO.java @@ -0,0 +1,172 @@ +package net.miarma.api.microservices.core.dao; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import io.vertx.core.Future; +import io.vertx.core.Promise; +import io.vertx.sqlclient.Pool; +import net.miarma.api.microservices.core.entities.CredentialEntity; +import net.miarma.api.backlib.db.DataAccessObject; +import net.miarma.api.backlib.db.DatabaseManager; +import net.miarma.api.backlib.db.QueryBuilder; +import net.miarma.api.backlib.http.QueryFilters; +import net.miarma.api.backlib.http.QueryParams; + +public class CredentialDAO implements DataAccessObject { + + private final DatabaseManager db; + + public CredentialDAO(Pool pool) { + this.db = DatabaseManager.getInstance(pool); + } + + @Override + public Future> getAll() { + return getAll(new QueryParams(Map.of(), new QueryFilters())); + } + + @Override + public Future getById(UUID id) { + Promise promise = Promise.promise(); + String query = QueryBuilder + .select(CredentialEntity.class) + .where(Map.of("credential_id", id.toString())) + .build(); + + db.executeOne(query, CredentialEntity.class, + promise::complete, + promise::fail + ); + + return promise.future(); + } + + public Future> getAll(QueryParams params) { + Promise> promise = Promise.promise(); + String query = QueryBuilder + .select(CredentialEntity.class) + .where(params.getFilters()) + .orderBy(params.getQueryFilters().getSort(), params.getQueryFilters().getOrder()) + .limit(params.getQueryFilters().getLimit()) + .offset(params.getQueryFilters().getOffset()) + .build(); + + db.execute(query, CredentialEntity.class, + list -> promise.complete(list.isEmpty() ? List.of() : list), + promise::fail + ); + + return promise.future(); + } + + /** + * Útil para el login: busca la credencial por servicio y usuario + */ + public Future getByServiceAndUsername(int serviceId, String username) { + Promise promise = Promise.promise(); + String query = QueryBuilder + .select(CredentialEntity.class) + .where(Map.of("service_id", String.valueOf(serviceId), "username", username)) + .build(); + + db.executeOne(query, CredentialEntity.class, + promise::complete, + promise::fail + ); + + return promise.future(); + } + + public Future> getByUserId(UUID userId) { + Promise> promise = Promise.promise(); + String query = QueryBuilder + .select(CredentialEntity.class) + .where(Map.of("user_id", userId.toString())) + .build(); + + db.execute(query, CredentialEntity.class, + promise::complete, + promise::fail + ); + + return promise.future(); + } + + @Override + public Future insert(CredentialEntity credential) { + Promise promise = Promise.promise(); + // Si no tiene ID, se lo generamos antes de insertar + if (credential.getCredentialId() == null) { + credential.setCredentialId(UUID.randomUUID()); + } + + String query = QueryBuilder.insert(credential).build(); + + db.executeOne(query, CredentialEntity.class, + promise::complete, + promise::fail + ); + + return promise.future(); + } + + @Override + public Future upsert(CredentialEntity credential, String... conflictKeys) { + Promise promise = Promise.promise(); + String query = QueryBuilder.upsert(credential, conflictKeys).build(); + + db.executeOne(query, CredentialEntity.class, + promise::complete, + promise::fail + ); + + return promise.future(); + } + + @Override + public Future update(CredentialEntity credential) { + Promise promise = Promise.promise(); + String query = QueryBuilder.update(credential).build(); + + db.executeOne(query, CredentialEntity.class, + _ -> promise.complete(credential), + promise::fail + ); + + return promise.future(); + } + + @Override + public Future delete(UUID id) { + Promise promise = Promise.promise(); + CredentialEntity cred = new CredentialEntity(); + cred.setCredentialId(id); + + String query = QueryBuilder.delete(cred).build(); + + db.executeOne(query, CredentialEntity.class, + result -> promise.complete(result != null), + promise::fail + ); + + return promise.future(); + } + + @Override + public Future exists(UUID id) { + Promise promise = Promise.promise(); + String query = QueryBuilder + .select(CredentialEntity.class) + .where(Map.of("credential_id", id.toString())) + .build(); + + db.executeOne(query, CredentialEntity.class, + result -> promise.complete(result != null), + promise::fail + ); + + return promise.future(); + } +} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/dao/FileDAO.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/dao/FileDAO.java similarity index 90% rename from backlib/src/main/java/net/miarma/api/backlib/core/dao/FileDAO.java rename to microservices/core/src/main/java/net/miarma/api/microservices/core/dao/FileDAO.java index 739a232..dae38d0 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/core/dao/FileDAO.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/dao/FileDAO.java @@ -1,4 +1,8 @@ -package net.miarma.api.backlib.core.dao; +package net.miarma.api.microservices.core.dao; + +import java.util.List; +import java.util.Map; +import java.util.UUID; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -8,12 +12,9 @@ import net.miarma.api.backlib.db.DatabaseManager; import net.miarma.api.backlib.db.QueryBuilder; import net.miarma.api.backlib.http.QueryFilters; import net.miarma.api.backlib.http.QueryParams; -import net.miarma.api.backlib.core.entities.FileEntity; +import net.miarma.api.microservices.core.entities.FileEntity; -import java.util.List; -import java.util.Map; - -public class FileDAO implements DataAccessObject { +public class FileDAO implements DataAccessObject { private final DatabaseManager db; @@ -27,7 +28,7 @@ public class FileDAO implements DataAccessObject { } @Override - public Future getById(Integer id) { + public Future getById(UUID id) { Promise promise = Promise.promise(); String query = QueryBuilder .select(FileEntity.class) @@ -60,7 +61,7 @@ public class FileDAO implements DataAccessObject { return promise.future(); } - public Future> getUserFiles(Integer userId) { + public Future> getUserFiles(UUID userId) { Promise> promise = Promise.promise(); String query = QueryBuilder .select(FileEntity.class) @@ -115,7 +116,7 @@ public class FileDAO implements DataAccessObject { } @Override - public Future exists(Integer id) { + public Future exists(UUID id) { Promise promise = Promise.promise(); String query = QueryBuilder .select(FileEntity.class) @@ -131,10 +132,10 @@ public class FileDAO implements DataAccessObject { } @Override - public Future delete(Integer id) { + public Future delete(UUID id) { Promise promise = Promise.promise(); FileEntity file = new FileEntity(); - file.setFile_id(id); + file.setFileId(id); String query = QueryBuilder.delete(file).build(); diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/dao/UserDAO.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/dao/UserDAO.java similarity index 74% rename from backlib/src/main/java/net/miarma/api/backlib/core/dao/UserDAO.java rename to microservices/core/src/main/java/net/miarma/api/microservices/core/dao/UserDAO.java index be6b6ea..22d90bb 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/core/dao/UserDAO.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/dao/UserDAO.java @@ -1,19 +1,20 @@ -package net.miarma.api.backlib.core.dao; +package net.miarma.api.microservices.core.dao; import java.util.List; import java.util.Map; +import java.util.UUID; import io.vertx.core.Future; import io.vertx.core.Promise; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.core.entities.UserEntity; +import net.miarma.api.microservices.core.entities.UserEntity; import net.miarma.api.backlib.db.DataAccessObject; import net.miarma.api.backlib.db.DatabaseManager; import net.miarma.api.backlib.db.QueryBuilder; import net.miarma.api.backlib.http.QueryFilters; import net.miarma.api.backlib.http.QueryParams; -public class UserDAO implements DataAccessObject { +public class UserDAO implements DataAccessObject { private final DatabaseManager db; @@ -27,7 +28,7 @@ public class UserDAO implements DataAccessObject { } @Override - public Future getById(Integer id) { + public Future getById(UUID id) { Promise promise = Promise.promise(); String query = QueryBuilder .select(UserEntity.class) @@ -60,36 +61,6 @@ public class UserDAO implements DataAccessObject { return promise.future(); } - public Future getByEmail(String email) { - Promise promise = Promise.promise(); - String query = QueryBuilder - .select(UserEntity.class) - .where(Map.of("email", email)) - .build(); - - db.executeOne(query, UserEntity.class, - promise::complete, - promise::fail - ); - - return promise.future(); - } - - public Future getByUserName(String userName) { - Promise promise = Promise.promise(); - String query = QueryBuilder - .select(UserEntity.class) - .where(Map.of("user_name", userName)) - .build(); - - db.executeOne(query, UserEntity.class, - promise::complete, - promise::fail - ); - - return promise.future(); - } - @Override public Future insert(UserEntity user) { Promise promise = Promise.promise(); @@ -130,10 +101,10 @@ public class UserDAO implements DataAccessObject { } @Override - public Future delete(Integer id) { + public Future delete(UUID id) { Promise promise = Promise.promise(); UserEntity user = new UserEntity(); - user.setUser_id(id); + user.setUserId(id); String query = QueryBuilder.delete(user).build(); @@ -146,7 +117,7 @@ public class UserDAO implements DataAccessObject { } @Override - public Future exists(Integer id) { + public Future exists(UUID id) { Promise promise = Promise.promise(); String query = QueryBuilder .select(UserEntity.class) @@ -160,4 +131,4 @@ public class UserDAO implements DataAccessObject { return promise.future(); } -} +} \ No newline at end of file diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/CredentialEntity.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/CredentialEntity.java new file mode 100644 index 0000000..8ee297c --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/CredentialEntity.java @@ -0,0 +1,110 @@ +package net.miarma.api.microservices.core.entities; + +import com.google.gson.annotations.SerializedName; + +import net.miarma.api.backlib.annotations.APIDontReturn; +import net.miarma.api.backlib.annotations.Table; +import java.util.UUID; +import java.time.LocalDateTime; + +@Table("credentials") +public class CredentialEntity { + + @SerializedName("credential_id") + private UUID credentialId; + + @SerializedName("user_id") + private UUID userId; + + @SerializedName("service_id") + private int serviceId; + + private String username; + + private String email; + + @APIDontReturn + private String password; + + private int status; + + @SerializedName("created_at") + private LocalDateTime createdAt; + + @SerializedName("updated_at") + private LocalDateTime updatedAt; + + public CredentialEntity() {} + + public UUID getCredentialId() { + return credentialId; + } + + public void setCredentialId(UUID credentialId) { + this.credentialId = credentialId; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public int getServiceId() { + return serviceId; + } + + public void setServiceId(int serviceId) { + this.serviceId = serviceId; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public LocalDateTime getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(LocalDateTime createdAt) { + this.createdAt = createdAt; + } + + public LocalDateTime getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(LocalDateTime updatedAt) { + this.updatedAt = updatedAt; + } +} \ No newline at end of file diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/FileEntity.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/FileEntity.java new file mode 100644 index 0000000..b9bdd73 --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/FileEntity.java @@ -0,0 +1,99 @@ +package net.miarma.api.microservices.core.entities; + +import java.time.LocalDateTime; +import java.util.UUID; + +import com.google.gson.annotations.SerializedName; + +import io.vertx.sqlclient.Row; +import net.miarma.api.backlib.annotations.Table; +import net.miarma.api.backlib.db.AbstractEntity; +import net.miarma.api.microservices.core.enums.CoreFileContext; + +@Table("files") +public class FileEntity extends AbstractEntity { + + @SerializedName("file_id") + private UUID fileId; + + @SerializedName("file_name") + private String fileName; + + @SerializedName("file_path") + private String filePath; + + @SerializedName("mime_type") + private String mimeType; + + @SerializedName("uploaded_by") + private UUID uploadedBy; + + private CoreFileContext context; + + @SerializedName("uploaded_at") + private LocalDateTime uploadedAt; + + public FileEntity() { + super(); + } + + public FileEntity(Row row) { + super(row); + } + + public UUID getFileId() { + return fileId; + } + + public void setFileId(UUID fileId) { + this.fileId = fileId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public String getMimeType() { + return mimeType; + } + + public void setMimeType(String mimeType) { + this.mimeType = mimeType; + } + + public UUID getUploadedBy() { + return uploadedBy; + } + + public void setUploadedBy(UUID uploadedBy) { + this.uploadedBy = uploadedBy; + } + + public CoreFileContext getContext() { + return context; + } + + public void setContext(CoreFileContext context) { + this.context = context; + } + + public LocalDateTime getUploadedAt() { + return uploadedAt; + } + + public void setUploadedAt(LocalDateTime uploadedAt) { + this.uploadedAt = uploadedAt; + } +} diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/UserEntity.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/UserEntity.java new file mode 100644 index 0000000..b4ea1fd --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/entities/UserEntity.java @@ -0,0 +1,53 @@ +package net.miarma.api.microservices.core.entities; + +import java.time.LocalDateTime; +import java.util.UUID; + +import io.vertx.sqlclient.Row; +import net.miarma.api.backlib.annotations.Table; +import net.miarma.api.backlib.db.AbstractEntity; +import net.miarma.api.microservices.core.enums.CoreUserGlobalRole; +import net.miarma.api.microservices.core.enums.CoreUserGlobalStatus; + +@Table("users") +public class UserEntity extends AbstractEntity { + private UUID userId; + private String userName; + private String email; + private String displayName; + private String avatar; + private CoreUserGlobalStatus globalStatus; + private CoreUserGlobalRole globalRole; + private LocalDateTime createdAt; + private LocalDateTime updatedAt; + + public UserEntity() { } + public UserEntity(Row row) { super(row); } + + public UUID getUserId() { return userId; } + public void setUserId(UUID userId) { this.userId = userId; } + + public String getUserName() { return userName; } + public void setUserName(String userName) { this.userName = userName; } + + public String getEmail() { return email; } + public void setEmail(String email) { this.email = email; } + + public String getDisplayName() { return displayName; } + public void setDisplayName(String displayName) { this.displayName = displayName; } + + public String getAvatar() { return avatar; } + public void setAvatar(String avatar) { this.avatar = avatar; } + + public CoreUserGlobalStatus getGlobalStatus() { return globalStatus; } + public void setGlobalStatus(CoreUserGlobalStatus globalStatus) { this.globalStatus = globalStatus; } + + public CoreUserGlobalRole getGlobalRole() { return globalRole; } + public void setGlobalRole(CoreUserGlobalRole role) { this.globalRole = role; } + + public LocalDateTime getCreatedAt() { return createdAt; } + public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; } + + public LocalDateTime getUpdatedAt() { return updatedAt; } + public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; } +} \ No newline at end of file diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreFileContext.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreFileContext.java new file mode 100644 index 0000000..9bf4b45 --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreFileContext.java @@ -0,0 +1,37 @@ +package net.miarma.api.microservices.core.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum CoreFileContext implements IValuableEnum { + CORE(0), + HUERTOS(1), + MMC(2), + CINE(3); + + private final int value; + + CoreFileContext(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public String toCtxString() { + return switch(this) { + case CORE -> "core"; + case HUERTOS -> "huertos"; + case MMC -> "miarmacraft"; + case CINE -> "cine"; + }; + } + + public static CoreFileContext fromInt(int i) { + for (CoreFileContext context : values()) { + if (context.value == i) return context; + } + throw new IllegalArgumentException("Invalid CoreFileContext value: " + i); + } +} \ No newline at end of file diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreUserGlobalRole.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreUserGlobalRole.java new file mode 100644 index 0000000..3e563ec --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreUserGlobalRole.java @@ -0,0 +1,26 @@ +package net.miarma.api.microservices.core.enums; + +import net.miarma.api.backlib.interfaces.IUserRole; + +public enum CoreUserGlobalRole implements IUserRole { + USER(0), + ADMIN(1); + + private final int value; + + CoreUserGlobalRole(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static CoreUserGlobalRole fromInt(int i) { + for (CoreUserGlobalRole role : values()) { + if (role.value == i) return role; + } + throw new IllegalArgumentException("Invalid CoreUserGlobalRole value: " + i); + } +} \ No newline at end of file diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreUserGlobalStatus.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreUserGlobalStatus.java new file mode 100644 index 0000000..181a9eb --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/enums/CoreUserGlobalStatus.java @@ -0,0 +1,26 @@ +package net.miarma.api.microservices.core.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum CoreUserGlobalStatus implements IValuableEnum { + INACTIVE(0), + ACTIVE(1); + + private final int value; + + CoreUserGlobalStatus(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static CoreUserGlobalStatus fromInt(int i) { + for (CoreUserGlobalStatus status : values()) { + if (status.value == i) return status; + } + throw new IllegalArgumentException("Invalid CoreUserGlobalStatus value: " + i); + } +} diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/FileDataHandler.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/FileDataHandler.java similarity index 76% rename from backlib/src/main/java/net/miarma/api/backlib/core/handlers/FileDataHandler.java rename to microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/FileDataHandler.java index 332ff39..0cd172c 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/FileDataHandler.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/FileDataHandler.java @@ -1,25 +1,33 @@ -package net.miarma.api.backlib.core.handlers; +package net.miarma.api.microservices.core.handlers; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.UUID; + +import org.slf4j.Logger; + +import com.google.gson.Gson; import io.vertx.core.buffer.Buffer; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.FileUpload; import io.vertx.ext.web.RoutingContext; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.Constants.CoreFileContext; +import net.miarma.api.backlib.gson.GsonProvider; import net.miarma.api.backlib.http.ApiStatus; import net.miarma.api.backlib.http.QueryParams; -import net.miarma.api.backlib.core.entities.FileEntity; -import net.miarma.api.backlib.core.services.FileService; +import net.miarma.api.backlib.log.LoggerProvider; import net.miarma.api.backlib.util.JsonUtil; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; +import net.miarma.api.microservices.core.entities.FileEntity; +import net.miarma.api.microservices.core.enums.CoreFileContext; +import net.miarma.api.microservices.core.services.FileService; @SuppressWarnings("unused") public class FileDataHandler { + private final Logger LOGGER = LoggerProvider.getLogger(); + private final Gson GSON = GsonProvider.get(); private final FileService fileService; public FileDataHandler(Pool pool) { @@ -35,7 +43,7 @@ public class FileDataHandler { } public void getById(RoutingContext ctx) { - Integer fileId = Integer.parseInt(ctx.pathParam("file_id")); + UUID fileId = UUID.fromString(ctx.pathParam("file_id")); fileService.getById(fileId) .onSuccess(file -> JsonUtil.sendJson(ctx, ApiStatus.OK, file)) @@ -46,7 +54,7 @@ public class FileDataHandler { try { String fileName = ctx.request().getFormAttribute("file_name"); String mimeType = ctx.request().getFormAttribute("mime_type"); - int uploadedBy = Integer.parseInt(ctx.request().getFormAttribute("uploaded_by")); + UUID uploadedBy = UUID.fromString(ctx.request().getFormAttribute("uploaded_by")); int contextValue = Integer.parseInt(ctx.request().getFormAttribute("context")); FileUpload upload = ctx.fileUploads().stream() @@ -58,23 +66,23 @@ public class FileDataHandler { byte[] fileBinary = buffer.getBytes(); FileEntity file = new FileEntity(); - file.setFile_name(fileName); - file.setMime_type(mimeType); - file.setUploaded_by(uploadedBy); + file.setFileName(fileName); + file.setMimeType(mimeType); + file.setUploadedBy(uploadedBy); file.setContext(CoreFileContext.fromInt(contextValue)); fileService.create(file, fileBinary) .onSuccess(result -> JsonUtil.sendJson(ctx, ApiStatus.CREATED, result)) .onFailure(err -> JsonUtil.sendJson(ctx, ApiStatus.fromException(err), null, err.getMessage())); } catch (Exception e) { - Constants.LOGGER.error(e.getMessage(), e); + LOGGER.error(e.getMessage(), e); JsonUtil.sendJson(ctx, ApiStatus.INTERNAL_SERVER_ERROR, null, e.getMessage()); } } public void update(RoutingContext ctx) { - FileEntity file = Constants.GSON.fromJson(ctx.body().asString(), FileEntity.class); + FileEntity file = GSON.fromJson(ctx.body().asString(), FileEntity.class); fileService.update(file) .onSuccess(result -> JsonUtil.sendJson(ctx, ApiStatus.OK, result)) @@ -82,14 +90,14 @@ public class FileDataHandler { } public void delete(RoutingContext ctx) { - Integer fileId = Integer.parseInt(ctx.pathParam("file_id")); + UUID fileId = UUID.fromString(ctx.pathParam("file_id")); JsonObject body = ctx.body().asJsonObject(); String filePath = body.getString("file_path"); try { Files.deleteIfExists(Paths.get(filePath)); } catch (IOException e) { - Constants.LOGGER.error(e.getMessage(), e); + LOGGER.error(e.getMessage(), e); JsonUtil.sendJson(ctx, ApiStatus.INTERNAL_SERVER_ERROR, null, e.getMessage()); return; } diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/FileLogicHandler.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/FileLogicHandler.java similarity index 72% rename from backlib/src/main/java/net/miarma/api/backlib/core/handlers/FileLogicHandler.java rename to microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/FileLogicHandler.java index ab10c87..5c29156 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/FileLogicHandler.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/FileLogicHandler.java @@ -1,9 +1,11 @@ -package net.miarma.api.backlib.core.handlers; +package net.miarma.api.microservices.core.handlers; + +import java.util.UUID; import io.vertx.core.Vertx; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; -import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.http.ApiStatus; import net.miarma.api.backlib.security.JWTManager; import net.miarma.api.backlib.util.JsonUtil; @@ -11,6 +13,8 @@ import net.miarma.api.backlib.util.JsonUtil; public class FileLogicHandler { private final Vertx vertx; + private final String CORE_EVENT_BUS = ConfigManager.getInstance() + .getStringProperty("eventbus.core.address"); public FileLogicHandler(Vertx vertx) { this.vertx = vertx; @@ -25,14 +29,14 @@ public class FileLogicHandler { } String token = authHeader.substring(7); - int userId = JWTManager.getInstance().getUserId(token); + UUID userId = JWTManager.getInstance().extractUserId(token); - if (userId <= 0) { - JsonUtil.sendJson(ctx, ApiStatus.UNAUTHORIZED, null, "Invalid token"); + if (userId == null) { + JsonUtil.sendJson(ctx, ApiStatus.UNAUTHORIZED, null, "Invalid or expired token"); return false; } - request.put("userId", userId); + request.put("userId", userId.toString()); return true; } @@ -40,7 +44,7 @@ public class FileLogicHandler { JsonObject request = new JsonObject().put("action", "getUserFiles"); if (!validateAuth(ctx, request)) return; - vertx.eventBus().request(Constants.CORE_EVENT_BUS, request, ar -> { + vertx.eventBus().request(CORE_EVENT_BUS, request, ar -> { if (ar.succeeded()) { JsonUtil.sendJson(ctx, ApiStatus.OK, ar.result().body()); } else { @@ -50,13 +54,15 @@ public class FileLogicHandler { } public void downloadFile(RoutingContext ctx) { + UUID fileId = UUID.fromString(ctx.pathParam("file_id")); + JsonObject request = new JsonObject() .put("action", "downloadFile") - .put("fileId", Integer.parseInt(ctx.pathParam("file_id"))); + .put("fileId", fileId.toString()); if (!validateAuth(ctx, request)) return; - vertx.eventBus().request(Constants.CORE_EVENT_BUS, request, ar -> { + vertx.eventBus().request(CORE_EVENT_BUS, request, ar -> { if (ar.succeeded()) { JsonUtil.sendJson(ctx, ApiStatus.OK, ar.result().body()); } else { diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/ScreenshotHandler.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/ScreenshotHandler.java similarity index 95% rename from backlib/src/main/java/net/miarma/api/backlib/core/handlers/ScreenshotHandler.java rename to microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/ScreenshotHandler.java index b238252..bf2383b 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/ScreenshotHandler.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/ScreenshotHandler.java @@ -1,4 +1,4 @@ -package net.miarma.api.backlib.core.handlers; +package net.miarma.api.microservices.core.handlers; import io.vertx.core.Vertx; import io.vertx.ext.web.RoutingContext; diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/UserDataHandler.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/UserDataHandler.java similarity index 83% rename from backlib/src/main/java/net/miarma/api/backlib/core/handlers/UserDataHandler.java rename to microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/UserDataHandler.java index c99512f..34b6c59 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/UserDataHandler.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/UserDataHandler.java @@ -1,17 +1,21 @@ -package net.miarma.api.backlib.core.handlers; +package net.miarma.api.microservices.core.handlers; + +import com.google.gson.Gson; import io.vertx.ext.web.RoutingContext; import io.vertx.sqlclient.Pool; import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.gson.GsonProvider; import net.miarma.api.backlib.http.ApiStatus; import net.miarma.api.backlib.http.QueryParams; import net.miarma.api.backlib.util.JsonUtil; -import net.miarma.api.backlib.core.entities.UserEntity; -import net.miarma.api.backlib.core.services.UserService; +import net.miarma.api.microservices.core.entities.UserEntity; +import net.miarma.api.microservices.core.services.UserService; @SuppressWarnings("unused") public class UserDataHandler { + private final Gson GSON = GsonProvider.get(); private final UserService userService; public UserDataHandler(Pool pool) { @@ -39,7 +43,7 @@ public class UserDataHandler { } public void create(RoutingContext ctx) { - UserEntity user = Constants.GSON.fromJson(ctx.body().asString(), UserEntity.class); + UserEntity user = GSON.fromJson(ctx.body().asString(), UserEntity.class); userService.register(user) .onSuccess(result -> JsonUtil.sendJson(ctx, ApiStatus.CREATED, result)).onFailure(err -> { @@ -49,7 +53,7 @@ public class UserDataHandler { } public void update(RoutingContext ctx) { - UserEntity user = Constants.GSON.fromJson(ctx.body().asString(), UserEntity.class); + UserEntity user = GSON.fromJson(ctx.body().asString(), UserEntity.class); userService.update(user) .onSuccess(result -> JsonUtil.sendJson(ctx, ApiStatus.NO_CONTENT, result)).onFailure(err -> { diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/UserLogicHandler.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/UserLogicHandler.java similarity index 98% rename from backlib/src/main/java/net/miarma/api/backlib/core/handlers/UserLogicHandler.java rename to microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/UserLogicHandler.java index 90e96f2..b2b7887 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/core/handlers/UserLogicHandler.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/handlers/UserLogicHandler.java @@ -1,4 +1,4 @@ -package net.miarma.api.backlib.core.handlers; +package net.miarma.api.microservices.core.handlers; import com.auth0.jwt.interfaces.DecodedJWT; @@ -10,7 +10,7 @@ import net.miarma.api.backlib.http.ApiStatus; import net.miarma.api.backlib.security.JWTManager; import net.miarma.api.backlib.util.EventBusUtil; import net.miarma.api.backlib.util.JsonUtil; -import net.miarma.api.backlib.core.entities.UserEntity; +import net.miarma.api.microservices.core.entities.UserEntity; public class UserLogicHandler { diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/CoreDataRouter.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/CoreDataRouter.java index 114ca94..6dc361a 100644 --- a/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/CoreDataRouter.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/CoreDataRouter.java @@ -5,9 +5,9 @@ import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; import net.miarma.api.backlib.Constants.CoreUserRole; -import net.miarma.api.backlib.core.handlers.FileDataHandler; -import net.miarma.api.backlib.core.handlers.UserDataHandler; -import net.miarma.api.backlib.core.services.UserService; +import net.miarma.api.microservices.core.handlers.FileDataHandler; +import net.miarma.api.microservices.core.handlers.UserDataHandler; +import net.miarma.api.microservices.core.services.UserService; import net.miarma.api.microservices.core.routing.middlewares.CoreAuthGuard; public class CoreDataRouter { diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/CoreLogicRouter.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/CoreLogicRouter.java index c62a53a..27c3658 100644 --- a/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/CoreLogicRouter.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/CoreLogicRouter.java @@ -5,10 +5,10 @@ import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; import net.miarma.api.backlib.Constants.CoreUserRole; -import net.miarma.api.backlib.core.handlers.FileLogicHandler; -import net.miarma.api.backlib.core.handlers.ScreenshotHandler; -import net.miarma.api.backlib.core.handlers.UserLogicHandler; -import net.miarma.api.backlib.core.services.UserService; +import net.miarma.api.microservices.core.handlers.FileLogicHandler; +import net.miarma.api.microservices.core.handlers.ScreenshotHandler; +import net.miarma.api.microservices.core.handlers.UserLogicHandler; +import net.miarma.api.microservices.core.services.UserService; import net.miarma.api.microservices.core.routing.middlewares.CoreAuthGuard; public class CoreLogicRouter { diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/middlewares/CoreAuthGuard.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/middlewares/CoreAuthGuard.java index 503da6b..5cef285 100644 --- a/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/middlewares/CoreAuthGuard.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/routing/middlewares/CoreAuthGuard.java @@ -5,8 +5,8 @@ import java.util.function.Consumer; import io.vertx.ext.web.RoutingContext; import net.miarma.api.backlib.Constants.CoreUserRole; import net.miarma.api.backlib.middlewares.AbstractAuthGuard; -import net.miarma.api.backlib.core.entities.UserEntity; -import net.miarma.api.backlib.core.services.UserService; +import net.miarma.api.microservices.core.entities.UserEntity; +import net.miarma.api.microservices.core.services.UserService; public class CoreAuthGuard extends AbstractAuthGuard { private final UserService userService; diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/services/AuthService.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/services/AuthService.java new file mode 100644 index 0000000..bbc217a --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/services/AuthService.java @@ -0,0 +1,91 @@ +package net.miarma.api.microservices.core.services; + +import java.util.UUID; + +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; +import io.vertx.sqlclient.Pool; +import net.miarma.api.backlib.exceptions.BadRequestException; +import net.miarma.api.backlib.exceptions.ForbiddenException; +import net.miarma.api.backlib.exceptions.NotFoundException; +import net.miarma.api.backlib.security.JWTManager; +import net.miarma.api.backlib.security.PasswordHasher; +import net.miarma.api.microservices.core.dao.CredentialDAO; +import net.miarma.api.microservices.core.dao.UserDAO; +import net.miarma.api.microservices.core.entities.CredentialEntity; +import net.miarma.api.microservices.core.entities.UserEntity; +import net.miarma.api.microservices.core.enums.CoreUserGlobalRole; +import net.miarma.api.microservices.core.enums.CoreUserGlobalStatus; + +public class AuthService { + + private final UserDAO userDAO; + private final CredentialDAO credentialDAO; + private final int serviceId; + + public AuthService(Pool pool, int serviceId) { + this.userDAO = new UserDAO(pool); + this.credentialDAO = new CredentialDAO(pool); + this.serviceId = serviceId; + } + + /** + * Login: Comprueba credenciales y devuelve el token + datos del usuario + */ + public Future login(String login, String plainPassword, boolean keepLoggedIn) { + return credentialDAO.getByServiceAndUsername(this.serviceId, login).compose(cred -> { + if (cred == null) { + return Future.failedFuture(new BadRequestException("Invalid credentials")); + } + + if (!PasswordHasher.verify(plainPassword, cred.getPassword())) { + return Future.failedFuture(new BadRequestException("Invalid credentials")); + } + + return userDAO.getById(cred.getUserId()).compose(user -> { + if (user == null) { + return Future.failedFuture(new NotFoundException("User not found")); + } + + if (user.getGlobalStatus() != CoreUserGlobalStatus.ACTIVE) { + return Future.failedFuture(new ForbiddenException("User is inactive")); + } + + String token = JWTManager.getInstance().generateToken( + cred.getUsername(), + user.getUserId(), + user.getGlobalRole(), + this.serviceId, + keepLoggedIn + ); + + JsonObject response = new JsonObject() + .put("token", token) + .put("user", JsonObject.mapFrom(user)); + + return Future.succeededFuture(response); + }); + }); + } + + /** + * Register: Crea el perfil global y la credencial de servicio + */ + public Future register(UserEntity profile, String username, String email, String password) { + profile.setUserId(UUID.randomUUID()); + profile.setGlobalRole(CoreUserGlobalRole.USER); + profile.setGlobalStatus(CoreUserGlobalStatus.ACTIVE); + + return userDAO.insert(profile).compose(savedUser -> { + CredentialEntity cred = new CredentialEntity(); + cred.setCredentialId(UUID.randomUUID()); + cred.setUserId(savedUser.getUserId()); + cred.setServiceId(this.serviceId); + cred.setUsername(username); + cred.setEmail(email); + cred.setPassword(PasswordHasher.hash(password)); + cred.setStatus(1); + return credentialDAO.insert(cred).map(savedUser); + }); + } +} \ No newline at end of file diff --git a/backlib/src/main/java/net/miarma/api/backlib/core/services/FileService.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/services/FileService.java similarity index 63% rename from backlib/src/main/java/net/miarma/api/backlib/core/services/FileService.java rename to microservices/core/src/main/java/net/miarma/api/microservices/core/services/FileService.java index 1b2dde1..7b01af2 100644 --- a/backlib/src/main/java/net/miarma/api/backlib/core/services/FileService.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/services/FileService.java @@ -1,27 +1,35 @@ -package net.miarma.api.backlib.core.services; - -import io.vertx.core.Future; -import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; -import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.OSType; -import net.miarma.api.backlib.exceptions.NotFoundException; -import net.miarma.api.backlib.exceptions.ValidationException; -import net.miarma.api.backlib.http.QueryParams; -import net.miarma.api.backlib.core.dao.FileDAO; -import net.miarma.api.backlib.core.entities.FileEntity; -import net.miarma.api.backlib.core.validators.FileValidator; +package net.miarma.api.microservices.core.services; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; + +import com.google.gson.Gson; + +import io.vertx.core.Future; +import io.vertx.sqlclient.Pool; +import net.miarma.api.backlib.config.ConfigManager; +import net.miarma.api.backlib.config.OSType; +import net.miarma.api.backlib.exceptions.NotFoundException; +import net.miarma.api.backlib.exceptions.ValidationException; +import net.miarma.api.backlib.gson.GsonProvider; +import net.miarma.api.backlib.http.QueryParams; +import net.miarma.api.backlib.log.LoggerProvider; +import net.miarma.api.microservices.core.dao.FileDAO; +import net.miarma.api.microservices.core.entities.FileEntity; +import net.miarma.api.microservices.core.validators.FileValidator; public class FileService { private final FileDAO fileDAO; private final FileValidator fileValidator; + private final Gson GSON = GsonProvider.get(); + private final Logger LOGGER = LoggerProvider.getLogger(); public FileService(Pool pool) { this.fileDAO = new FileDAO(pool); @@ -32,7 +40,7 @@ public class FileService { return fileDAO.getAll(params); } - public Future getById(Integer id) { + public Future getById(UUID id) { return fileDAO.getById(id).compose(file -> { if (file == null) { return Future.failedFuture(new NotFoundException("File not found with id: " + id)); @@ -41,28 +49,28 @@ public class FileService { }); } - public Future> getUserFiles(Integer userId) { + public Future> getUserFiles(UUID userId) { return fileDAO.getUserFiles(userId); } public Future create(FileEntity file, byte[] fileBinary) { - return fileValidator.validate(file, fileBinary.length).compose(validation -> { + return fileValidator.validateAsync(file, fileBinary.length).compose(validation -> { if (!validation.isValid()) { - return Future.failedFuture(new ValidationException(Constants.GSON.toJson(validation.getErrors()))); + return Future.failedFuture(new ValidationException(GSON.toJson(validation.getErrors()))); } String dir = ConfigManager.getInstance() .getFilesDir(file.getContext().toCtxString()); - String pathString = dir + file.getFile_name(); - Path filePath = Paths.get(dir + file.getFile_name()); - file.setFile_path(ConfigManager.getOS() == OSType.WINDOWS ? + String pathString = dir + file.getFileName(); + Path filePath = Paths.get(dir + file.getFileName()); + file.setFilePath(ConfigManager.getOS() == OSType.WINDOWS ? pathString.replace("\\", "\\\\") : pathString); try { Files.write(filePath, fileBinary); } catch (IOException e) { - Constants.LOGGER.error("Error writing file to disk: ", e); + LOGGER.error("Error writing file to disk: ", e); return Future.failedFuture(e); } @@ -70,14 +78,14 @@ public class FileService { }); } - public Future downloadFile(Integer fileId) { + public Future downloadFile(UUID fileId) { return getById(fileId); } public Future update(FileEntity file) { - return fileValidator.validate(file).compose(validation -> { + return fileValidator.validateAsync(file).compose(validation -> { if (!validation.isValid()) { - return Future.failedFuture(new ValidationException(Constants.GSON.toJson(validation.getErrors()))); + return Future.failedFuture(new ValidationException(GSON.toJson(validation.getErrors()))); } return fileDAO.update(file); @@ -85,27 +93,27 @@ public class FileService { } public Future upsert(FileEntity file) { - return fileValidator.validate(file).compose(validation -> { + return fileValidator.validateAsync(file).compose(validation -> { if (!validation.isValid()) { - return Future.failedFuture(new ValidationException(Constants.GSON.toJson(validation.getErrors()))); + return Future.failedFuture(new ValidationException(GSON.toJson(validation.getErrors()))); } return fileDAO.upsert(file, "file_id"); }); } - public Future delete(Integer fileId) { + public Future delete(UUID fileId) { return getById(fileId).compose(file -> { String dir = ConfigManager.getInstance() .getFilesDir(file.getContext().toCtxString()); - String filePath = dir + file.getFile_name(); + String filePath = dir + file.getFileName(); Path path = Paths.get(filePath); try { Files.deleteIfExists(path); } catch (IOException e) { - Constants.LOGGER.error("Error deleting file from disk: ", e); + LOGGER.error("Error deleting file from disk: ", e); return Future.failedFuture(e); } @@ -118,7 +126,7 @@ public class FileService { }); } - public Future exists(Integer fileId) { + public Future exists(UUID fileId) { return fileDAO.exists(fileId); } } \ No newline at end of file diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/services/UserService.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/services/UserService.java new file mode 100644 index 0000000..0861c25 --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/services/UserService.java @@ -0,0 +1,55 @@ +package net.miarma.api.microservices.core.services; + +import java.util.List; +import java.util.UUID; + +import io.vertx.core.Future; +import io.vertx.sqlclient.Pool; +import net.miarma.api.backlib.exceptions.NotFoundException; +import net.miarma.api.backlib.http.QueryParams; +import net.miarma.api.microservices.core.dao.UserDAO; +import net.miarma.api.microservices.core.entities.UserEntity; +import net.miarma.api.microservices.core.enums.CoreUserGlobalRole; +import net.miarma.api.microservices.core.enums.CoreUserGlobalStatus; + +public class UserService { + + private final UserDAO userDAO; + + public UserService(Pool pool) { + this.userDAO = new UserDAO(pool); + } + + public Future> getAll(QueryParams params) { + return userDAO.getAll(params); + } + + public Future getById(UUID id) { + return userDAO.getById(id).compose(user -> { + if (user == null) return Future.failedFuture(new NotFoundException("User not found")); + return Future.succeededFuture(user); + }); + } + + public Future updateProfile(UserEntity user) { + return userDAO.update(user); + } + + public Future changeRole(UUID userId, CoreUserGlobalRole newRole) { + return getById(userId).compose(user -> { + user.setGlobalRole(newRole); + return userDAO.update(user); + }); + } + + public Future changeStatus(UUID userId, CoreUserGlobalStatus newStatus) { + return getById(userId).compose(user -> { + user.setGlobalStatus(newStatus); + return userDAO.update(user); + }); + } + + public Future deleteUser(UUID id) { + return userDAO.delete(id); + } +} \ No newline at end of file diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/validators/FileValidator.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/validators/FileValidator.java new file mode 100644 index 0000000..6b5c397 --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/validators/FileValidator.java @@ -0,0 +1,63 @@ +package net.miarma.api.microservices.core.validators; + +import io.vertx.core.Future; +import net.miarma.api.backlib.validation.ValidationResult; +import net.miarma.api.microservices.core.entities.FileEntity; + +public class FileValidator { + + private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB + + public Future validateAsync(FileEntity file, long size) { + ValidationResult result = validate(file); + + if (size <= 0) { + result.addError("size", "File size must be greater than 0 bytes"); + } + + if (size > MAX_FILE_SIZE) { + result.addError("size", "File size exceeds the 10 MB limit"); + } + + return Future.succeededFuture(result); + } + + public Future validateAsync(FileEntity file) { + ValidationResult result = validate(file); + return Future.succeededFuture(result); + } + + private ValidationResult validate(FileEntity file) { + ValidationResult result = new ValidationResult(); + + if (file == null) { + return result.addError("file", "File object cannot be null"); + } + + if (file.getFileName() == null || file.getFileName().isBlank()) { + result.addError("file_name", "File name is required"); + } else if (file.getFileName().length() > 255) { + result.addError("file_name", "File name is too long (max 255 characters)"); + } + + if (file.getFilePath() == null || file.getFilePath().isBlank()) { + result.addError("file_path", "File path is required"); + } else if (file.getFilePath().length() > 255) { + result.addError("file_path", "File path is too long (max 255 characters)"); + } + + if (file.getMimeType() == null || file.getMimeType().isBlank()) { + result.addError("mime_type", "MIME type is required"); + } + + if (file.getContext() == null) { + result.addError("context", "File context is required"); + } + + if (file.getUploadedBy() == null) { + result.addError("uploaded_by", "Uploader User ID is required"); + } + + return result; + } +} diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/validators/UserValidator.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/validators/UserValidator.java new file mode 100644 index 0000000..5effa70 --- /dev/null +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/validators/UserValidator.java @@ -0,0 +1,45 @@ +package net.miarma.api.microservices.core.validators; + +import io.vertx.core.Future; +import net.miarma.api.backlib.validation.ValidationResult; +import net.miarma.api.microservices.core.entities.CredentialEntity; +import net.miarma.api.microservices.core.entities.UserEntity; + +public class UserValidator { + + public Future validateAsync(UserEntity user, CredentialEntity creds) { + ValidationResult result = new ValidationResult(); + + if (user == null) { + return Future.succeededFuture(result.addError("user", "User profile cannot be null")); + } + + if (user.getDisplayName() == null || user.getDisplayName().isBlank()) { + result.addError("display_name", "Display name is required"); + } + + if (creds == null) { + return Future.succeededFuture(result.addError("credentials", "Credentials are required")); + } + + if (creds.getUsername() == null || creds.getUsername().isBlank()) { + result.addError("username", "Username is required"); + } + + if (creds.getEmail() != null && !creds.getEmail().isBlank()) { + if (!creds.getEmail().matches("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$")) { + result.addError("email", "Invalid email format"); + } + } else { + result.addError("email", "Email is required"); + } + + if (creds.getPassword() == null || creds.getPassword().isBlank()) { + result.addError("password", "Password is required"); + } else if (creds.getPassword().length() < 6) { + result.addError("password", "Password must be at least 6 characters long"); + } + + return Future.succeededFuture(result); + } +} diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreDataVerticle.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreDataVerticle.java index f5041e0..810a6ca 100644 --- a/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreDataVerticle.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreDataVerticle.java @@ -9,13 +9,13 @@ import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; import net.miarma.api.backlib.Constants.CoreUserGlobalStatus; import net.miarma.api.backlib.Constants.CoreUserRole; -import net.miarma.api.backlib.core.entities.UserEntity; -import net.miarma.api.backlib.core.services.FileService; -import net.miarma.api.backlib.core.services.UserService; +import net.miarma.api.backlib.config.ConfigManager; +import net.miarma.api.microservices.core.entities.UserEntity; +import net.miarma.api.microservices.core.services.FileService; +import net.miarma.api.microservices.core.services.UserService; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.backlib.util.EventBusUtil; import net.miarma.api.backlib.util.RouterUtil; diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreLogicVerticle.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreLogicVerticle.java index e6a1603..2e2da70 100644 --- a/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreLogicVerticle.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreLogicVerticle.java @@ -5,7 +5,7 @@ import io.vertx.core.Promise; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.backlib.util.RouterUtil; import net.miarma.api.microservices.core.routing.CoreLogicRouter; diff --git a/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreMainVerticle.java b/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreMainVerticle.java index a4a13f8..b7dd9bf 100644 --- a/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreMainVerticle.java +++ b/microservices/core/src/main/java/net/miarma/api/microservices/core/verticles/CoreMainVerticle.java @@ -4,9 +4,9 @@ import io.vertx.core.AbstractVerticle; import io.vertx.core.DeploymentOptions; import io.vertx.core.Promise; import io.vertx.core.ThreadingModel; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.LogAccumulator; +import net.miarma.api.backlib.config.ConfigManager; +import net.miarma.api.backlib.log.LogAccumulator; import net.miarma.api.backlib.util.DeploymentUtil; public class CoreMainVerticle extends AbstractVerticle { diff --git a/microservices/huertos/pom.xml b/microservices/huertos/pom.xml index 98efc1c..3ba4224 100644 --- a/microservices/huertos/pom.xml +++ b/microservices/huertos/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.miarma.api huertos - 1.2.1 + 2.0.0 23 @@ -20,7 +20,7 @@ net.miarma.api backlib - 1.2.1 + 2.0.0 diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosAnnouncementPriority.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosAnnouncementPriority.java new file mode 100644 index 0000000..a512c87 --- /dev/null +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosAnnouncementPriority.java @@ -0,0 +1,27 @@ +package net.miarma.api.microservices.huertos.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum HuertosAnnouncementPriority implements IValuableEnum { + LOW(0), + MEDIUM(1), + HIGH(2); + + private final int value; + + HuertosAnnouncementPriority(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static HuertosAnnouncementPriority fromInt(int i) { + for (HuertosAnnouncementPriority priority : values()) { + if (priority.value == i) return priority; + } + throw new IllegalArgumentException("Invalid HuertosAnnouncementPriority value: " + i); + } +} \ No newline at end of file diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosPaymentFrequency.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosPaymentFrequency.java new file mode 100644 index 0000000..ce87842 --- /dev/null +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosPaymentFrequency.java @@ -0,0 +1,26 @@ +package net.miarma.api.microservices.huertos.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum HuertosPaymentFrequency implements IValuableEnum { + BIYEARLY(0), + YEARLY(1); + + private final int value; + + HuertosPaymentFrequency(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static HuertosPaymentFrequency fromInt(int i) { + for (HuertosPaymentFrequency frequency : values()) { + if (frequency.value == i) return frequency; + } + throw new IllegalArgumentException("Invalid HuertoPaymentFrequency value: " + i); + } +} \ No newline at end of file diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosPaymentType.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosPaymentType.java new file mode 100644 index 0000000..c5893db --- /dev/null +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosPaymentType.java @@ -0,0 +1,26 @@ +package net.miarma.api.microservices.huertos.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum HuertosPaymentType implements IValuableEnum { + BANK(0), + CASH(1); + + private final int value; + + HuertosPaymentType(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static HuertosPaymentType fromInt(int i) { + for (HuertosPaymentType type : values()) { + if (type.value == i) return type; + } + throw new IllegalArgumentException("Invalid HuertoPaymentType value: " + i); + } +} \ No newline at end of file diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosRequestStatus.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosRequestStatus.java new file mode 100644 index 0000000..9977acb --- /dev/null +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosRequestStatus.java @@ -0,0 +1,27 @@ +package net.miarma.api.microservices.huertos.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum HuertosRequestStatus implements IValuableEnum { + PENDING(0), + APPROVED(1), + REJECTED(2); + + private final int value; + + HuertosRequestStatus(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static HuertosRequestStatus fromInt(int i) { + for (HuertosRequestStatus status : values()) { + if (status.value == i) return status; + } + throw new IllegalArgumentException("Invalid HuertoRequestStatus value: " + i); + } +} \ No newline at end of file diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosRequestType.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosRequestType.java new file mode 100644 index 0000000..e83ce13 --- /dev/null +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosRequestType.java @@ -0,0 +1,30 @@ +package net.miarma.api.microservices.huertos.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum HuertosRequestType implements IValuableEnum { + REGISTER(0), + UNREGISTER(1), + ADD_COLLABORATOR(2), + REMOVE_COLLABORATOR(3), + ADD_GREENHOUSE(4), + REMOVE_GREENHOUSE(5); + + private final int value; + + HuertosRequestType(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static HuertosRequestType fromInt(int i) { + for (HuertosRequestType type : values()) { + if (type.value == i) return type; + } + throw new IllegalArgumentException("Invalid HuertoRequestType value: " + i); + } +} \ No newline at end of file diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosUserRole.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosUserRole.java new file mode 100644 index 0000000..f7b7ce7 --- /dev/null +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosUserRole.java @@ -0,0 +1,27 @@ +package net.miarma.api.microservices.huertos.enums; + +import net.miarma.api.backlib.interfaces.IUserRole; + +public enum HuertosUserRole implements IUserRole { + USER(0), + ADMIN(1), + DEV(2); + + private final int value; + + HuertosUserRole(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static HuertosUserRole fromInt(int i) { + for (HuertosUserRole role : values()) { + if (role.value == i) return role; + } + throw new IllegalArgumentException("Invalid HuertosUserRole value: " + i); + } +} diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosUserType.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosUserType.java new file mode 100644 index 0000000..ded83df --- /dev/null +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/enums/HuertosUserType.java @@ -0,0 +1,30 @@ +package net.miarma.api.microservices.huertos.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum HuertosUserType implements IValuableEnum { + WAIT_LIST(0), + MEMBER(1), + WITH_GREENHOUSE(2), + COLLABORATOR(3), + DEVELOPER(5), + SUBSIDY(4); + + private final int value; + + HuertosUserType(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static HuertosUserType fromInt(int i) { + for (HuertosUserType type : values()) { + if (type.value == i) return type; + } + throw new IllegalArgumentException("Invalid HuertosUserType value: " + i); + } +} diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/handlers/MailHandler.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/handlers/MailHandler.java index e9b80fc..32f37a5 100644 --- a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/handlers/MailHandler.java +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/handlers/MailHandler.java @@ -10,8 +10,8 @@ import io.vertx.core.WorkerExecutor; import io.vertx.core.json.Json; import io.vertx.ext.web.RoutingContext; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.http.ApiStatus; import net.miarma.api.backlib.security.JWTManager; import net.miarma.api.microservices.huertos.entities.MemberEntity; diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/mail/ImapReader.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/mail/ImapReader.java index e25e3c4..156d9c7 100644 --- a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/mail/ImapReader.java +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/mail/ImapReader.java @@ -14,7 +14,7 @@ import jakarta.mail.Session; import jakarta.mail.Store; import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeUtility; -import net.miarma.api.backlib.ConfigManager; +import net.miarma.api.backlib.config.ConfigManager; public class ImapReader { diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/mail/MailManager.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/mail/MailManager.java index 7945ae2..30e44bc 100644 --- a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/mail/MailManager.java +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/mail/MailManager.java @@ -23,7 +23,7 @@ import jakarta.mail.Session; import jakarta.mail.Store; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMessage; -import net.miarma.api.backlib.ConfigManager; +import net.miarma.api.backlib.config.ConfigManager; public class MailManager { private final Vertx vertx; @@ -31,6 +31,9 @@ public class MailManager { private final int smtpPort; private final Map clientCache = new ConcurrentHashMap<>(); + public static final List HUERTOS_ALLOWED_MAIL_FOLDERS = + List.of("INBOX", "Drafts", "Sent", "Spam", "Trash"); + public MailManager(Vertx vertx) { this.vertx = vertx; this.smtpHost = ConfigManager.getInstance().getStringProperty("smtp.server"); diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosDataVerticle.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosDataVerticle.java index 5ebd6e0..582faad 100644 --- a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosDataVerticle.java +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosDataVerticle.java @@ -9,10 +9,10 @@ import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; import net.miarma.api.backlib.Constants.HuertosUserStatus; import net.miarma.api.backlib.Constants.HuertosUserType; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.backlib.util.EventBusUtil; import net.miarma.api.backlib.util.NameCensorer; diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosLogicVerticle.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosLogicVerticle.java index 80dfc58..dd58d83 100644 --- a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosLogicVerticle.java +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosLogicVerticle.java @@ -5,7 +5,7 @@ import io.vertx.core.Promise; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.backlib.util.RouterUtil; import net.miarma.api.microservices.huertos.routing.HuertosLogicRouter; diff --git a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosMainVerticle.java b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosMainVerticle.java index 0ce67f2..08fab03 100644 --- a/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosMainVerticle.java +++ b/microservices/huertos/src/main/java/net/miarma/api/microservices/huertos/verticles/HuertosMainVerticle.java @@ -2,9 +2,9 @@ package net.miarma.api.microservices.huertos.verticles; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.LogAccumulator; +import net.miarma.api.backlib.config.ConfigManager; +import net.miarma.api.backlib.log.LogAccumulator; import net.miarma.api.backlib.util.DeploymentUtil; public class HuertosMainVerticle extends AbstractVerticle { diff --git a/microservices/huertosdecine/pom.xml b/microservices/huertosdecine/pom.xml index dbe228f..4dfe502 100644 --- a/microservices/huertosdecine/pom.xml +++ b/microservices/huertosdecine/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.miarma.api huertosdecine - 1.2.1 + 2.0.0 23 @@ -20,7 +20,7 @@ net.miarma.api backlib - 1.2.1 + 2.0.0 diff --git a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/enums/CineUserRole.java b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/enums/CineUserRole.java new file mode 100644 index 0000000..45112fa --- /dev/null +++ b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/enums/CineUserRole.java @@ -0,0 +1,26 @@ +package net.miarma.api.microservices.huertosdecine.enums; + +import net.miarma.api.backlib.interfaces.IUserRole; + +public enum CineUserRole implements IUserRole { + USER(0), + ADMIN(1); + + private final int value; + + CineUserRole(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static CineUserRole fromInt(int i) { + for (CineUserRole role : values()) { + if (role.value == i) return role; + } + throw new IllegalArgumentException("Invalid CineUserRole value: " + i); + } +} diff --git a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/handlers/MovieDataHandler.java b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/handlers/MovieDataHandler.java index b6e5125..cdc0bfa 100644 --- a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/handlers/MovieDataHandler.java +++ b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/handlers/MovieDataHandler.java @@ -2,8 +2,8 @@ package net.miarma.api.microservices.huertosdecine.handlers; import io.vertx.ext.web.RoutingContext; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.http.ApiStatus; import net.miarma.api.backlib.http.QueryParams; import net.miarma.api.microservices.huertosdecine.entities.MovieEntity; diff --git a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineDataVerticle.java b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineDataVerticle.java index f33dfa6..6b9de03 100644 --- a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineDataVerticle.java +++ b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineDataVerticle.java @@ -9,8 +9,8 @@ import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.backlib.util.EventBusUtil; import net.miarma.api.backlib.util.RouterUtil; diff --git a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineLogicVerticle.java b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineLogicVerticle.java index e6a3c6c..4adc597 100644 --- a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineLogicVerticle.java +++ b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineLogicVerticle.java @@ -5,7 +5,7 @@ import io.vertx.core.Promise; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.backlib.util.RouterUtil; import net.miarma.api.microservices.huertosdecine.routing.CineLogicRouter; diff --git a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineMainVerticle.java b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineMainVerticle.java index ec6bfaa..b28a22f 100644 --- a/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineMainVerticle.java +++ b/microservices/huertosdecine/src/main/java/net/miarma/api/microservices/huertosdecine/verticles/CineMainVerticle.java @@ -2,9 +2,9 @@ package net.miarma.api.microservices.huertosdecine.verticles; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.LogAccumulator; +import net.miarma.api.backlib.config.ConfigManager; +import net.miarma.api.backlib.log.LogAccumulator; import net.miarma.api.backlib.util.DeploymentUtil; public class CineMainVerticle extends AbstractVerticle { diff --git a/microservices/miarmacraft/pom.xml b/microservices/miarmacraft/pom.xml index 8123021..fe2d487 100644 --- a/microservices/miarmacraft/pom.xml +++ b/microservices/miarmacraft/pom.xml @@ -1,8 +1,8 @@ 4.0.0 net.miarma.api - miarmacraft - 1.2.1 + minecraft + 2.0.0 23 @@ -20,7 +20,7 @@ net.miarma.api backlib - 1.2.1 + 2.0.0 diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/ModLogicHandler.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/ModLogicHandler.java deleted file mode 100644 index 3d398c8..0000000 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/ModLogicHandler.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.miarma.api.microservices.miarmacraft.handlers; - -public class ModLogicHandler { - -} diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/ModDAO.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/ModDAO.java similarity index 96% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/ModDAO.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/ModDAO.java index d5828d7..07522eb 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/ModDAO.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/ModDAO.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.dao; +package net.miarma.api.microservices.minecraft.dao; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -8,7 +8,7 @@ import net.miarma.api.backlib.db.DatabaseManager; import net.miarma.api.backlib.db.QueryBuilder; import net.miarma.api.backlib.http.QueryFilters; import net.miarma.api.backlib.http.QueryParams; -import net.miarma.api.microservices.miarmacraft.entities.ModEntity; +import net.miarma.api.microservices.minecraft.entities.ModEntity; import java.util.List; import java.util.Map; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/PlayerDAO.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/PlayerDAO.java similarity index 96% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/PlayerDAO.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/PlayerDAO.java index d6d15f8..f14567c 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/PlayerDAO.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/PlayerDAO.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.dao; +package net.miarma.api.microservices.minecraft.dao; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -8,7 +8,7 @@ import net.miarma.api.backlib.db.DatabaseManager; import net.miarma.api.backlib.db.QueryBuilder; import net.miarma.api.backlib.http.QueryFilters; import net.miarma.api.backlib.http.QueryParams; -import net.miarma.api.microservices.miarmacraft.entities.PlayerEntity; +import net.miarma.api.microservices.minecraft.entities.PlayerEntity; import java.util.List; import java.util.Map; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/UserMetadataDAO.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/UserMetadataDAO.java similarity index 96% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/UserMetadataDAO.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/UserMetadataDAO.java index 8455a3b..f51c592 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/dao/UserMetadataDAO.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/dao/UserMetadataDAO.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.dao; +package net.miarma.api.microservices.minecraft.dao; import io.vertx.core.Future; import io.vertx.core.Promise; @@ -8,7 +8,7 @@ import net.miarma.api.backlib.db.DatabaseManager; import net.miarma.api.backlib.db.QueryBuilder; import net.miarma.api.backlib.http.QueryFilters; import net.miarma.api.backlib.http.QueryParams; -import net.miarma.api.microservices.miarmacraft.entities.UserMetadataEntity; +import net.miarma.api.microservices.minecraft.entities.UserMetadataEntity; import java.util.List; import java.util.Map; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/ModEntity.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/ModEntity.java similarity index 95% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/ModEntity.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/ModEntity.java index 8aa1f76..cb5e096 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/ModEntity.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/ModEntity.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.entities; +package net.miarma.api.microservices.minecraft.entities; import io.vertx.sqlclient.Row; import net.miarma.api.backlib.Constants.MMCModStatus; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/PlayerEntity.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/PlayerEntity.java similarity index 98% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/PlayerEntity.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/PlayerEntity.java index da75733..118e149 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/PlayerEntity.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/PlayerEntity.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.entities; +package net.miarma.api.microservices.minecraft.entities; import java.time.LocalDateTime; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/UserMetadataEntity.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/UserMetadataEntity.java similarity index 95% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/UserMetadataEntity.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/UserMetadataEntity.java index 174e6fa..f67a244 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/entities/UserMetadataEntity.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/entities/UserMetadataEntity.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.entities; +package net.miarma.api.microservices.minecraft.entities; import io.vertx.sqlclient.Row; import net.miarma.api.backlib.Constants.MMCUserRole; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/enums/MinecraftModStatus.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/enums/MinecraftModStatus.java new file mode 100644 index 0000000..09176da --- /dev/null +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/enums/MinecraftModStatus.java @@ -0,0 +1,26 @@ +package net.miarma.api.microservices.minecraft.enums; + +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum MinecraftModStatus implements IValuableEnum { + ACTIVE(0), + INACTIVE(1); + + private final int value; + + MinecraftModStatus(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static MinecraftModStatus fromInt(int i) { + for (MinecraftModStatus status : values()) { + if (status.value == i) return status; + } + throw new IllegalArgumentException("Invalid MinecraftModStatus value: " + i); + } +} diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/enums/MinecraftUserRole.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/enums/MinecraftUserRole.java new file mode 100644 index 0000000..8f518c7 --- /dev/null +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/enums/MinecraftUserRole.java @@ -0,0 +1,27 @@ +package net.miarma.api.microservices.minecraft.enums; + +import net.miarma.api.backlib.interfaces.IUserRole; +import net.miarma.api.backlib.interfaces.IValuableEnum; + +public enum MinecraftUserRole implements IUserRole, IValuableEnum { + PLAYER(0), + ADMIN(1); + + private final int value; + + MinecraftUserRole(int value) { + this.value = value; + } + + @Override + public int getValue() { + return value; + } + + public static MinecraftUserRole fromInt(int i) { + for (MinecraftUserRole role : values()) { + if (role.value == i) return role; + } + throw new IllegalArgumentException("Invalid MinecraftUserRole value: " + i); + } +} \ No newline at end of file diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/ModDataHandler.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/ModDataHandler.java similarity index 94% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/ModDataHandler.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/ModDataHandler.java index 59ec031..61dc49b 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/ModDataHandler.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/ModDataHandler.java @@ -1,13 +1,13 @@ -package net.miarma.api.microservices.miarmacraft.handlers; +package net.miarma.api.microservices.minecraft.handlers; import io.vertx.ext.web.RoutingContext; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.http.ApiStatus; -import net.miarma.api.microservices.miarmacraft.entities.ModEntity; -import net.miarma.api.microservices.miarmacraft.services.ModService; import net.miarma.api.backlib.util.JsonUtil; +import net.miarma.api.microservices.minecraft.entities.ModEntity; +import net.miarma.api.microservices.minecraft.services.ModService; import java.nio.file.Files; import java.nio.file.Path; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/ModLogicHandler.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/ModLogicHandler.java new file mode 100644 index 0000000..44a4890 --- /dev/null +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/ModLogicHandler.java @@ -0,0 +1,5 @@ +package net.miarma.api.microservices.minecraft.handlers; + +public class ModLogicHandler { + +} diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/PlayerDataHandler.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/PlayerDataHandler.java similarity index 90% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/PlayerDataHandler.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/PlayerDataHandler.java index 6754c7e..7b6bf8e 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/PlayerDataHandler.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/PlayerDataHandler.java @@ -1,12 +1,12 @@ -package net.miarma.api.microservices.miarmacraft.handlers; +package net.miarma.api.microservices.minecraft.handlers; import io.vertx.ext.web.RoutingContext; import io.vertx.sqlclient.Pool; import net.miarma.api.backlib.Constants; import net.miarma.api.backlib.http.ApiStatus; -import net.miarma.api.microservices.miarmacraft.entities.PlayerEntity; -import net.miarma.api.microservices.miarmacraft.services.PlayerService; import net.miarma.api.backlib.util.JsonUtil; +import net.miarma.api.microservices.minecraft.entities.PlayerEntity; +import net.miarma.api.microservices.minecraft.services.PlayerService; public class PlayerDataHandler { private final PlayerService playerService; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/PlayerLogicHandler.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/PlayerLogicHandler.java similarity index 98% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/PlayerLogicHandler.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/PlayerLogicHandler.java index 50d66f3..09e8d34 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/handlers/PlayerLogicHandler.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/handlers/PlayerLogicHandler.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.handlers; +package net.miarma.api.microservices.minecraft.handlers; import io.vertx.core.Vertx; import io.vertx.core.json.JsonObject; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCDataRouter.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCDataRouter.java similarity index 81% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCDataRouter.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCDataRouter.java index 23ac07c..6f61e93 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCDataRouter.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCDataRouter.java @@ -1,14 +1,14 @@ -package net.miarma.api.microservices.miarmacraft.routing; +package net.miarma.api.microservices.minecraft.routing; import io.vertx.core.Vertx; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; import net.miarma.api.backlib.Constants.MMCUserRole; -import net.miarma.api.microservices.miarmacraft.handlers.ModDataHandler; -import net.miarma.api.microservices.miarmacraft.handlers.PlayerDataHandler; -import net.miarma.api.microservices.miarmacraft.routing.middlewares.MMCAuthGuard; -import net.miarma.api.microservices.miarmacraft.services.PlayerService; +import net.miarma.api.microservices.minecraft.handlers.ModDataHandler; +import net.miarma.api.microservices.minecraft.handlers.PlayerDataHandler; +import net.miarma.api.microservices.minecraft.routing.middlewares.MMCAuthGuard; +import net.miarma.api.microservices.minecraft.services.PlayerService; public class MMCDataRouter { public static void mount(Router router, Vertx vertx, Pool pool) { diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCEndpoints.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCEndpoints.java similarity index 95% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCEndpoints.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCEndpoints.java index 7cd93ac..22ec9fa 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCEndpoints.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCEndpoints.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.routing; +package net.miarma.api.microservices.minecraft.routing; import net.miarma.api.backlib.Constants; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCLogicRouter.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCLogicRouter.java similarity index 82% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCLogicRouter.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCLogicRouter.java index edda36a..d48acfd 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/MMCLogicRouter.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/MMCLogicRouter.java @@ -1,12 +1,12 @@ -package net.miarma.api.microservices.miarmacraft.routing; +package net.miarma.api.microservices.minecraft.routing; import io.vertx.core.Vertx; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.microservices.miarmacraft.handlers.PlayerLogicHandler; -import net.miarma.api.microservices.miarmacraft.routing.middlewares.MMCAuthGuard; -import net.miarma.api.microservices.miarmacraft.services.PlayerService; +import net.miarma.api.microservices.minecraft.handlers.PlayerLogicHandler; +import net.miarma.api.microservices.minecraft.routing.middlewares.MMCAuthGuard; +import net.miarma.api.microservices.minecraft.services.PlayerService; public class MMCLogicRouter { public static void mount(Router router, Vertx vertx, Pool pool) { diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/middlewares/MMCAuthGuard.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/middlewares/MMCAuthGuard.java similarity index 82% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/middlewares/MMCAuthGuard.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/middlewares/MMCAuthGuard.java index dac2e70..528c3ec 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/routing/middlewares/MMCAuthGuard.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/routing/middlewares/MMCAuthGuard.java @@ -1,12 +1,12 @@ -package net.miarma.api.microservices.miarmacraft.routing.middlewares; +package net.miarma.api.microservices.minecraft.routing.middlewares; import java.util.function.Consumer; import io.vertx.ext.web.RoutingContext; import net.miarma.api.backlib.Constants.MMCUserRole; import net.miarma.api.backlib.middlewares.AbstractAuthGuard; -import net.miarma.api.microservices.miarmacraft.entities.PlayerEntity; -import net.miarma.api.microservices.miarmacraft.services.PlayerService; +import net.miarma.api.microservices.minecraft.entities.PlayerEntity; +import net.miarma.api.microservices.minecraft.services.PlayerService; public class MMCAuthGuard extends AbstractAuthGuard { private final PlayerService playerService; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/services/ModService.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/services/ModService.java similarity index 91% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/services/ModService.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/services/ModService.java index a1e7436..f6ff955 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/services/ModService.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/services/ModService.java @@ -1,16 +1,16 @@ -package net.miarma.api.microservices.miarmacraft.services; +package net.miarma.api.microservices.minecraft.services; import com.eduardomcb.discord.webhook.WebhookClient; import com.eduardomcb.discord.webhook.WebhookManager; import com.eduardomcb.discord.webhook.models.Message; import io.vertx.core.Future; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.exceptions.NotFoundException; import net.miarma.api.backlib.http.QueryParams; -import net.miarma.api.microservices.miarmacraft.dao.ModDAO; -import net.miarma.api.microservices.miarmacraft.entities.ModEntity; +import net.miarma.api.microservices.minecraft.dao.ModDAO; +import net.miarma.api.microservices.minecraft.entities.ModEntity; import java.util.List; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/services/PlayerService.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/services/PlayerService.java similarity index 94% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/services/PlayerService.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/services/PlayerService.java index 2d1a008..eedd364 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/services/PlayerService.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/services/PlayerService.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.services; +package net.miarma.api.microservices.minecraft.services; import io.vertx.core.Future; import io.vertx.core.json.JsonObject; @@ -13,13 +13,13 @@ import net.miarma.api.backlib.exceptions.NotFoundException; import net.miarma.api.backlib.http.QueryParams; import net.miarma.api.backlib.security.JWTManager; import net.miarma.api.backlib.security.PasswordHasher; +import net.miarma.api.microservices.minecraft.dao.PlayerDAO; +import net.miarma.api.microservices.minecraft.dao.UserMetadataDAO; +import net.miarma.api.microservices.minecraft.entities.PlayerEntity; +import net.miarma.api.microservices.minecraft.entities.UserMetadataEntity; import net.miarma.api.backlib.core.dao.UserDAO; import net.miarma.api.backlib.core.entities.UserEntity; import net.miarma.api.backlib.core.services.UserService; -import net.miarma.api.microservices.miarmacraft.dao.PlayerDAO; -import net.miarma.api.microservices.miarmacraft.dao.UserMetadataDAO; -import net.miarma.api.microservices.miarmacraft.entities.PlayerEntity; -import net.miarma.api.microservices.miarmacraft.entities.UserMetadataEntity; import java.util.List; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCDataVerticle.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCDataVerticle.java similarity index 94% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCDataVerticle.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCDataVerticle.java index a496573..79566f3 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCDataVerticle.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCDataVerticle.java @@ -1,4 +1,4 @@ -package net.miarma.api.microservices.miarmacraft.verticles; +package net.miarma.api.microservices.minecraft.verticles; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; @@ -6,15 +6,15 @@ import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; import net.miarma.api.backlib.Constants.MMCUserRole; import net.miarma.api.backlib.Constants.MMCUserStatus; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.backlib.util.EventBusUtil; import net.miarma.api.backlib.util.RouterUtil; -import net.miarma.api.microservices.miarmacraft.routing.MMCDataRouter; -import net.miarma.api.microservices.miarmacraft.services.PlayerService; +import net.miarma.api.microservices.minecraft.routing.MMCDataRouter; +import net.miarma.api.microservices.minecraft.services.PlayerService; public class MMCDataVerticle extends AbstractVerticle { private ConfigManager configManager; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCLogicVerticle.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCLogicVerticle.java similarity index 83% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCLogicVerticle.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCLogicVerticle.java index 081597b..047522f 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCLogicVerticle.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCLogicVerticle.java @@ -1,14 +1,14 @@ -package net.miarma.api.microservices.miarmacraft.verticles; +package net.miarma.api.microservices.minecraft.verticles; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.backlib.util.RouterUtil; -import net.miarma.api.microservices.miarmacraft.routing.MMCLogicRouter; +import net.miarma.api.microservices.minecraft.routing.MMCLogicRouter; public class MMCLogicVerticle extends AbstractVerticle { private ConfigManager configManager; diff --git a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCMainVerticle.java b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCMainVerticle.java similarity index 90% rename from microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCMainVerticle.java rename to microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCMainVerticle.java index 3ba3b8c..4b4e1c9 100644 --- a/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/miarmacraft/verticles/MMCMainVerticle.java +++ b/microservices/miarmacraft/src/main/java/net/miarma/api/microservices/minecraft/verticles/MMCMainVerticle.java @@ -1,10 +1,10 @@ -package net.miarma.api.microservices.miarmacraft.verticles; +package net.miarma.api.microservices.minecraft.verticles; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.LogAccumulator; +import net.miarma.api.backlib.config.ConfigManager; +import net.miarma.api.backlib.log.LogAccumulator; import net.miarma.api.backlib.util.DeploymentUtil; public class MMCMainVerticle extends AbstractVerticle { diff --git a/microservices/mpaste/pom.xml b/microservices/mpaste/pom.xml index e344b2e..abc2e9d 100644 --- a/microservices/mpaste/pom.xml +++ b/microservices/mpaste/pom.xml @@ -2,7 +2,7 @@ 4.0.0 net.miarma.api mpaste - 1.2.1 + 2.0.0 23 @@ -20,7 +20,7 @@ net.miarma.api backlib - 1.2.1 + 2.0.0 diff --git a/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteDataVerticle.java b/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteDataVerticle.java index 1790dc8..141a53b 100644 --- a/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteDataVerticle.java +++ b/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteDataVerticle.java @@ -5,8 +5,8 @@ import io.vertx.core.Promise; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.microservices.mpaste.routing.MPasteDataRouter; import net.miarma.api.microservices.mpaste.services.PasteService; diff --git a/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteLogicVerticle.java b/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteLogicVerticle.java index d6f7e23..fd1ca5b 100644 --- a/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteLogicVerticle.java +++ b/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteLogicVerticle.java @@ -4,7 +4,7 @@ import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; import io.vertx.ext.web.Router; import io.vertx.sqlclient.Pool; -import net.miarma.api.backlib.ConfigManager; +import net.miarma.api.backlib.config.ConfigManager; import net.miarma.api.backlib.db.DatabaseProvider; import net.miarma.api.microservices.mpaste.routing.MPasteLogicRouter; import net.miarma.api.backlib.util.RouterUtil; diff --git a/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteMainVerticle.java b/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteMainVerticle.java index b5314ac..9c638e0 100644 --- a/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteMainVerticle.java +++ b/microservices/mpaste/src/main/java/net/miarma/api/microservices/mpaste/verticles/MPasteMainVerticle.java @@ -2,9 +2,9 @@ package net.miarma.api.microservices.mpaste.verticles; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; -import net.miarma.api.backlib.ConfigManager; import net.miarma.api.backlib.Constants; -import net.miarma.api.backlib.LogAccumulator; +import net.miarma.api.backlib.config.ConfigManager; +import net.miarma.api.backlib.log.LogAccumulator; import net.miarma.api.backlib.util.DeploymentUtil; public class MPasteMainVerticle extends AbstractVerticle { diff --git a/pom.xml b/pom.xml index a237905..60af061 100644 --- a/pom.xml +++ b/pom.xml @@ -4,8 +4,8 @@ 4.0.0 net.miarma.api - miarma-ecosystem - 1.2.1 + miarma-backend + 2.0.0 pom @@ -13,7 +13,7 @@ bootstrap microservices/huertos microservices/huertosdecine - microservices/miarmacraft + microservices/minecraft microservices/mpaste microservices/core