From 2a2bd5d7b01df6caf303725b64e06ad51b1f671e Mon Sep 17 00:00:00 2001 From: CodingPhoenixx Date: Sun, 15 Feb 2026 13:01:43 +0100 Subject: [PATCH] Added base providers for users, permission and roles --- .idea/db-forest-config.xml | 6 ++ .../dev/coph/flightscore/backend/Backend.java | 42 +++++++++++++- .../backend/provider/Provider.java | 10 ++++ .../backend/provider/ProviderManager.java | 30 ++++++++++ .../backend/user/UserProvider.java | 58 +++++++++++++++++-- .../user/permission/PermissionProvider.java | 40 +++++++++++++ .../backend/user/role/RoleProvider.java | 49 ++++++++++++++++ 7 files changed, 227 insertions(+), 8 deletions(-) create mode 100644 .idea/db-forest-config.xml create mode 100644 src/main/java/dev/coph/flightscore/backend/provider/Provider.java create mode 100644 src/main/java/dev/coph/flightscore/backend/provider/ProviderManager.java create mode 100644 src/main/java/dev/coph/flightscore/backend/user/permission/PermissionProvider.java create mode 100644 src/main/java/dev/coph/flightscore/backend/user/role/RoleProvider.java diff --git a/.idea/db-forest-config.xml b/.idea/db-forest-config.xml new file mode 100644 index 0000000..fd9c831 --- /dev/null +++ b/.idea/db-forest-config.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/dev/coph/flightscore/backend/Backend.java b/src/main/java/dev/coph/flightscore/backend/Backend.java index 4e7b0ea..1d2ef08 100644 --- a/src/main/java/dev/coph/flightscore/backend/Backend.java +++ b/src/main/java/dev/coph/flightscore/backend/Backend.java @@ -1,6 +1,10 @@ package dev.coph.flightscore.backend; import dev.coph.flightscore.backend.config.Config; +import dev.coph.flightscore.backend.provider.ProviderManager; +import dev.coph.flightscore.backend.user.UserProvider; +import dev.coph.flightscore.backend.user.permission.PermissionProvider; +import dev.coph.flightscore.backend.user.role.RoleProvider; import dev.coph.simplelogger.Logger; import dev.coph.simplerequest.server.WebServer; import dev.coph.simplesql.adapter.DatabaseAdapter; @@ -18,6 +22,12 @@ public class Backend { private final DatabaseAdapter databaseAdapter; private final WebServer webServer; + private final ProviderManager providerManager; + + private PermissionProvider permissionProvider; + private RoleProvider roleProvider; + private UserProvider userProvider; + public Backend() { logger.info("Loading configuration..."); @@ -37,16 +47,42 @@ public class Backend { logger.info("Preparing web server..."); this.webServer = new WebServer(configuration.server_port()); logger.success("Web server ready!"); + + logger.info("Preparing providers..."); + providerManager = new ProviderManager(this); + + logger.info("Creating and Registering PermissionProvider..."); + permissionProvider = new PermissionProvider(this); + providerManager.registerProvider(permissionProvider); + logger.success("PermissionProvider created and registered!"); + + logger.info("Creating and Registering RoleProvider..."); + roleProvider = new RoleProvider(this); + providerManager.registerProvider(roleProvider); + logger.success("RoleProvider created and registered!"); + + logger.info("Creating and Registering UserProvider..."); + userProvider = new UserProvider(this); + providerManager.registerProvider(userProvider); + logger.success("UserProvider created and registered!"); + + + logger.success("Providers ready!"); } public void onEnable() { + logger.info("Starting database..."); + databaseAdapter.connect(); + logger.success("Database started!"); + logger.info("Loading routes..."); logger.success("Routes loaded!"); - logger.info("Starting database..."); - databaseAdapter.connect(); - logger.success("Database started!"); + logger.info("Creating database tables..."); + providerManager.createAllDatabaseTables(); + logger.success("Database tables created!"); + logger.info("Starting web server..."); webServer.start(); diff --git a/src/main/java/dev/coph/flightscore/backend/provider/Provider.java b/src/main/java/dev/coph/flightscore/backend/provider/Provider.java new file mode 100644 index 0000000..be5261f --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/provider/Provider.java @@ -0,0 +1,10 @@ +package dev.coph.flightscore.backend.provider; + +import dev.coph.simplesql.query.Query; + +public interface Provider { + int priority(); + String key(); + public void createDatabaseTables(Query query); + +} diff --git a/src/main/java/dev/coph/flightscore/backend/provider/ProviderManager.java b/src/main/java/dev/coph/flightscore/backend/provider/ProviderManager.java new file mode 100644 index 0000000..f28cd4e --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/provider/ProviderManager.java @@ -0,0 +1,30 @@ +package dev.coph.flightscore.backend.provider; + +import dev.coph.flightscore.backend.Backend; +import dev.coph.simplesql.query.Query; + +import java.util.HashMap; + +public class ProviderManager { + private final Backend backend; + private final HashMap providers = new HashMap<>(); + + public ProviderManager(Backend backend) { + this.backend = backend; + } + + public void createAllDatabaseTables(){ + Query query = new Query(backend.databaseAdapter()); + providers.values().stream().sorted((a, b) -> Integer.compare(b.priority(), a.priority())).forEach(provider -> provider.createDatabaseTables(query)); + query.execute(); + } + + public void registerProvider(Provider provider){ + providers.put(provider.key(), provider); + } + + public T provider(String key){ + return (T) providers.get(key); + } + +} diff --git a/src/main/java/dev/coph/flightscore/backend/user/UserProvider.java b/src/main/java/dev/coph/flightscore/backend/user/UserProvider.java index ace357f..f501e66 100644 --- a/src/main/java/dev/coph/flightscore/backend/user/UserProvider.java +++ b/src/main/java/dev/coph/flightscore/backend/user/UserProvider.java @@ -2,19 +2,67 @@ package dev.coph.flightscore.backend.user; import dev.coph.flightscore.backend.Backend; import dev.coph.flightscore.backend.action.result.LoginActionResult; -import lombok.RequiredArgsConstructor; +import dev.coph.flightscore.backend.provider.Provider; +import dev.coph.simplelogger.Logger; +import dev.coph.simplesql.database.Column; +import dev.coph.simplesql.database.attributes.ColumnType; +import dev.coph.simplesql.database.attributes.CreateMethod; +import dev.coph.simplesql.database.attributes.DataType; +import dev.coph.simplesql.query.Query; +import org.checkerframework.checker.units.qual.C; -@RequiredArgsConstructor -public class UserProvider { +import java.util.List; + +public class UserProvider implements Provider { + private Logger logger = Logger.of("UserProvider"); private final Backend backend; + public UserProvider(Backend backend) { + this.backend = backend; + } + @Override + public int priority() { + return 50; + } + @Override + public String key() { + return "user-provider"; + } + + @Override + public void createDatabaseTables(Query query) { + var tableCreate = Query.tableCreate() + .createMethod(CreateMethod.IF_NOT_EXISTS) + .table("users") + .column("id", DataType.BINARY, 26, true) + .column("fistname", DataType.VARCHAR, 255) + .column("lastname", DataType.VARCHAR, 255) + .column("email", DataType.VARCHAR, 255, true) + .column("phoneNumber", DataType.VARCHAR, 255) + .column("password", DataType.VARCHAR, 255, true) + .column("role", DataType.BINARY, 26) + .primaryKey(List.of("id")) + .index(List.of("email")) + .index(List.of("email", "password")) + .foreignKey(List.of("role"), "roles", List.of("id"));; + query.query(tableCreate); + tableCreate = Query.tableCreate() + .createMethod(CreateMethod.IF_NOT_EXISTS) + .table("refresh_tokens") + .column("user_id", DataType.BINARY, 26, true) + .column("token_hash", DataType.VARCHAR, 255, true) + .column("expires_at", DataType.TIMESTAMP, true) + .column(new Column("revoked", DataType.BOOLEAN, true).defaultValue(false)) + .primaryKey(List.of("token_hash")) + .index(List.of("user_id")) + .foreignKey(List.of("user_id"), "users", List.of("id"));; + query.query(tableCreate); + } public LoginActionResult login(String email, String password) { return null; } - - } diff --git a/src/main/java/dev/coph/flightscore/backend/user/permission/PermissionProvider.java b/src/main/java/dev/coph/flightscore/backend/user/permission/PermissionProvider.java new file mode 100644 index 0000000..ada07a2 --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/user/permission/PermissionProvider.java @@ -0,0 +1,40 @@ +package dev.coph.flightscore.backend.user.permission; + +import dev.coph.flightscore.backend.Backend; +import dev.coph.flightscore.backend.provider.Provider; +import dev.coph.simplesql.database.attributes.CreateMethod; +import dev.coph.simplesql.database.attributes.DataType; +import dev.coph.simplesql.query.Query; + +import java.util.List; + +public class PermissionProvider implements Provider { + private final Backend backend; + + public PermissionProvider(Backend backend) { + this.backend = backend; + } + + @Override + public int priority() { + return 150; + } + + @Override + public String key() { + return "permission-provider"; + } + + @Override + public void createDatabaseTables(Query query) { + var tableCreate = Query.tableCreate() + .createMethod(CreateMethod.IF_NOT_EXISTS) + .table("permissions") + .column("id", DataType.BINARY, 26, true) + .column("name", DataType.VARCHAR, 255) + .primaryKey(List.of("id")); + ; + query.query(tableCreate); + } +} + diff --git a/src/main/java/dev/coph/flightscore/backend/user/role/RoleProvider.java b/src/main/java/dev/coph/flightscore/backend/user/role/RoleProvider.java new file mode 100644 index 0000000..23ec12a --- /dev/null +++ b/src/main/java/dev/coph/flightscore/backend/user/role/RoleProvider.java @@ -0,0 +1,49 @@ +package dev.coph.flightscore.backend.user.role; + +import dev.coph.flightscore.backend.Backend; +import dev.coph.flightscore.backend.provider.Provider; +import dev.coph.simplesql.database.attributes.CreateMethod; +import dev.coph.simplesql.database.attributes.DataType; +import dev.coph.simplesql.query.Query; + +import java.util.List; + +public class RoleProvider implements Provider { + private final Backend backend; + + public RoleProvider(Backend backend) { + this.backend = backend; + } + + + @Override + public int priority() { + return 100; + } + + @Override + public String key() { + return "role-provider"; + } + + @Override + public void createDatabaseTables(Query query) { + var tableCreate = Query.tableCreate() + .createMethod(CreateMethod.IF_NOT_EXISTS) + .table("roles") + .column("id", DataType.BINARY, 26, true) + .column("name", DataType.VARCHAR, 255) + .primaryKey(List.of("id")); + query.query(tableCreate); + tableCreate = Query.tableCreate() + .createMethod(CreateMethod.IF_NOT_EXISTS) + .table("role_permissions") + .column("roleId", DataType.BINARY, 26, true) + .column("permissionId", DataType.BINARY, 26, true) + .primaryKey(List.of("roleId", "permissionId")) + .foreignKey(List.of("roleId"), "roles", List.of("id")) + .foreignKey(List.of("permissionId"), "permissions", List.of("id")); + query.query(tableCreate); + } +} +