Added base providers for users, permission and roles
This commit is contained in:
Generated
+6
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="db-tree-configuration">
|
||||
<option name="data" value="---------------------------------------- 1:0:e0f49905-9df6-459a-a57c-731edb2c1607 2:0:74720f71-b717-4c46-a783-e93fc40a8785 3:0:c2ae7de6-543e-4eed-8b31-a13cb00693a8 " />
|
||||
</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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user