Added base providers for users, permission and roles

This commit is contained in:
CodingPhoenixx
2026-02-15 13:01:43 +01:00
parent 34d387138b
commit 2a2bd5d7b0
7 changed files with 227 additions and 8 deletions
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="db-tree-configuration">
<option name="data" value="----------------------------------------&#10;1:0:e0f49905-9df6-459a-a57c-731edb2c1607&#10;2:0:74720f71-b717-4c46-a783-e93fc40a8785&#10;3:0:c2ae7de6-543e-4eed-8b31-a13cb00693a8&#10;" />
</component>
</project>
@@ -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();
@@ -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);
}
@@ -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<String, Provider> 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 extends Provider> T provider(String key){
return (T) providers.get(key);
}
}
@@ -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;
}
}
@@ -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);
}
}
@@ -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);
}
}