[AB-215] adding create alias and delete alias commands to create service specific aliases for commands

renaming package in commands package
defaulting to latest in docker compose build for deployment container
fixing jacoco configuration
changing that if there are no parameters required, parameters are accepted
This commit is contained in:
Sheldan
2021-03-27 13:17:27 +01:00
parent a494d4d2f2
commit 9541f907b8
135 changed files with 1904 additions and 376 deletions

View File

@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.core.command.condition;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.condition.detail.CommandDisabledDetail;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.service.ChannelGroupCommandService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -3,8 +3,8 @@ package dev.sheldan.abstracto.core.command.condition;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.condition.detail.InsufficientPermissionConditionDetail;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.models.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.service.management.CommandInServerManagementService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.models.database.ARole;

View File

@@ -3,8 +3,8 @@ package dev.sheldan.abstracto.core.command.condition;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.condition.detail.ImmuneUserConditionDetail;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.models.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.service.management.CommandInServerManagementService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.models.database.ARole;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.condition.detail;
import dev.sheldan.abstracto.core.command.condition.ConditionDetail;
import dev.sheldan.abstracto.core.command.models.condition.FeatureDisabledConditionDetailModel;
import dev.sheldan.abstracto.core.command.model.condition.FeatureDisabledConditionDetailModel;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import lombok.Getter;
import lombok.Setter;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.condition.detail;
import dev.sheldan.abstracto.core.command.condition.ConditionDetail;
import dev.sheldan.abstracto.core.command.models.condition.ImmuneUserConditionDetailModel;
import dev.sheldan.abstracto.core.command.model.condition.ImmuneUserConditionDetailModel;
import net.dv8tion.jda.api.entities.Role;
public class ImmuneUserConditionDetail implements ConditionDetail {

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.condition.detail;
import dev.sheldan.abstracto.core.command.condition.ConditionDetail;
import dev.sheldan.abstracto.core.command.models.condition.InsufficientPermissionCondtionDetailModel;
import dev.sheldan.abstracto.core.command.model.condition.InsufficientPermissionCondtionDetailModel;
import net.dv8tion.jda.api.entities.Role;
import java.util.List;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.models.exception.ChannelAlreadyInChannelGroupExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.ChannelAlreadyInChannelGroupExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.models.exception.ChannelGroupExistsExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.ChannelGroupExistsExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.models.exception.ChannelGroupIncorrectTypeExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.ChannelGroupIncorrectTypeExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.models.exception.ChannelGroupNotFoundExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.ChannelGroupNotFoundExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.models.exception.ChannelNotInChannelGroupExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.ChannelNotInChannelGroupExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;

View File

@@ -0,0 +1,27 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.model.exception.CommandAliasAlreadyExistsModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class CommandAliasAlreadyExistsException extends AbstractoRunTimeException implements Templatable {
private final CommandAliasAlreadyExistsModel model;
public CommandAliasAlreadyExistsException(String existingCommand) {
this.model = CommandAliasAlreadyExistsModel
.builder()
.existingCommand(existingCommand)
.build();
}
@Override
public String getTemplateName() {
return "command_in_server_alias_already_exists_exception";
}
@Override
public Object getTemplateModel() {
return model;
}
}

View File

@@ -0,0 +1,19 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class CommandAliasDoesNotExistsException extends AbstractoRunTimeException implements Templatable {
@Override
public String getTemplateName() {
return "command_in_server_alias_not_exists_exists_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,27 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.model.exception.CommandAliasHidesCommandModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class CommandAliasHidesCommandException extends AbstractoRunTimeException implements Templatable {
private final CommandAliasHidesCommandModel model;
public CommandAliasHidesCommandException(String existingCommand) {
this.model = CommandAliasHidesCommandModel
.builder()
.existingCommand(existingCommand)
.build();
}
@Override
public String getTemplateName() {
return "command_in_server_alias_hides_command_exception";
}
@Override
public Object getTemplateModel() {
return model;
}
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.models.exception.CommandParameterKeyValueWrongTypeExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.CommandParameterKeyValueWrongTypeExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;

View File

@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.validator.ValidatorParam;
import dev.sheldan.abstracto.core.command.models.exception.CommandParameterValidationExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.CommandParameterValidationExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
import lombok.Getter;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.models.exception.IncorrectParameterExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.IncorrectParameterExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.models.exception.InsufficientParametersExceptionModel;
import dev.sheldan.abstracto.core.command.model.exception.InsufficientParametersExceptionModel;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models;
package dev.sheldan.abstracto.core.command.model;
public enum TableLocks {
CHANNELS, USER_IN_SERVER, USER

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.condition;
package dev.sheldan.abstracto.core.command.model.condition;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.condition;
package dev.sheldan.abstracto.core.command.model.condition;
import dev.sheldan.abstracto.core.command.condition.ConditionDetail;
import dev.sheldan.abstracto.core.models.GuildChannelMember;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.condition;
package dev.sheldan.abstracto.core.command.model.condition;
import lombok.Builder;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.database;
package dev.sheldan.abstracto.core.command.model.database;
import dev.sheldan.abstracto.core.models.database.AChannelGroupCommand;
import dev.sheldan.abstracto.core.models.database.AFeature;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.database;
package dev.sheldan.abstracto.core.command.model.database;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AServer;
@@ -47,6 +47,9 @@ public class ACommandInAServer implements Serializable {
@Getter
private List<ARole> immuneRoles;
@OneToMany(mappedBy = "commandInAServer", fetch = FetchType.LAZY)
private List<ACommandInServerAlias> aliases;
@Getter
@Setter
@Column(name = "restricted")

View File

@@ -0,0 +1,29 @@
package dev.sheldan.abstracto.core.command.model.database;
import lombok.*;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
@Entity(name = "command_in_server_alias")
@Getter
@Builder
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class ACommandInServerAlias implements Serializable {
@EmbeddedId
private CommandInServerAliasId aliasId;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@MapsId("commandInServerId")
@JoinColumn(name = "command_in_server_id", referencedColumnName = "command_in_server_id", nullable = false)
private ACommandInAServer commandInAServer;
@Column(name = "created")
private Instant created;
}

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.database;
package dev.sheldan.abstracto.core.command.model.database;
import lombok.*;

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.core.command.model.database;
import lombok.*;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;
@Embeddable
@Getter
@Setter
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class CommandInServerAliasId implements Serializable {
@Column(name = "command_in_server_id")
private Long commandInServerId;
@Column(name = "name")
private String name;
}

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import lombok.Builder;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import lombok.Builder;
import lombok.Getter;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.core.command.model.exception;
import lombok.Builder;
import lombok.Getter;
import java.io.Serializable;
@Getter
@Builder
public class CommandAliasAlreadyExistsModel implements Serializable {
private final String existingCommand;
}

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.core.command.model.exception;
import lombok.Builder;
import lombok.Getter;
import java.io.Serializable;
@Getter
@Builder
public class CommandAliasHidesCommandModel implements Serializable {
private final String existingCommand;
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.command.model.exception;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
@Getter
@Setter
@Builder
public class CommandParameterKeyValueWrongTypeExceptionModel implements Serializable {
private List<String> expectedValues;
}

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.config.validator.ValidatorParam;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import dev.sheldan.abstracto.core.models.FullUser;
import dev.sheldan.abstracto.core.models.FullUserInServer;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.config.FeatureConfig;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import dev.sheldan.abstracto.core.command.Command;
import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import dev.sheldan.abstracto.core.command.Command;
import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.exception;
package dev.sheldan.abstracto.core.command.model.exception;
import lombok.Builder;
import lombok.Getter;

View File

@@ -1,14 +0,0 @@
package dev.sheldan.abstracto.core.command.models.exception;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
public class CommandParameterKeyValueWrongTypeExceptionModel {
private List<String> expectedValues;
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.models.database.AChannel;
public interface ChannelGroupCommandService {

View File

@@ -0,0 +1,13 @@
package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.command.model.database.ACommandInServerAlias;
import java.util.List;
import java.util.Optional;
public interface CommandInServerAliasService {
ACommandInServerAlias createAliasForCommandInServer(Long serverId, String commandName, String alias);
Optional<ACommandInServerAlias> getCommandInServerAlias(Long serverId, String text);
void deleteCommandInServerAlias(Long serverId, String name);
List<String> getAliasesForCommand(Long serverId, String commandName);
}

View File

@@ -0,0 +1,9 @@
package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
import dev.sheldan.abstracto.core.models.database.AServer;
public interface CommandInServerService {
ACommandInAServer getCommandInAServer(Long serverId, String name);
ACommandInAServer getCommandInAServer(AServer server, String name);
}

View File

@@ -7,14 +7,16 @@ import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
import net.dv8tion.jda.api.entities.Message;
import java.util.List;
import java.util.Optional;
public interface CommandRegistry {
Command findCommandByParameters(String name, UnParsedCommandParameter context);
Command findCommand(String message);
Command findCommandByParameters(String name, UnParsedCommandParameter context, Long serverId);
Command findCommandViaName(String message);
List<Command> getAllCommands();
List<Command> getAllCommandsFromModule(ModuleDefinition module);
boolean isCommand(Message message);
boolean commandExists(String name);
Command getCommandByName(String name);
boolean commandExists(String name, boolean searchAliases, Long serverId);
Command getCommandByName(String name, boolean searchAliases, Long serverId);
Optional<Command> getCommandByNameOptional(String name, boolean searchAliases, Long serverId);
String getCommandName(String input, Long serverId);
}

View File

@@ -5,7 +5,7 @@ import dev.sheldan.abstracto.core.command.condition.ConditionResult;
import dev.sheldan.abstracto.core.command.config.Parameters;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AServer;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
import dev.sheldan.abstracto.core.models.database.AChannelGroupCommand;

View File

@@ -0,0 +1,18 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.model.database.ACommandInServerAlias;
import dev.sheldan.abstracto.core.models.database.AServer;
import java.util.List;
import java.util.Optional;
public interface CommandInServerAliasManagementService {
List<ACommandInServerAlias> getAliasesInServer(AServer server);
boolean doesCommandInServerAliasExist(AServer server, String alias);
Optional<ACommandInServerAlias> getCommandInServerAlias(AServer server, String alias);
ACommandInServerAlias createAliasForCommand(ACommandInAServer commandInAServer, String alias);
void deleteCommandInServerAlias(ACommandInServerAlias alias);
List<ACommandInServerAlias> getAliasesForCommandInServer(AServer server, String commandName);
}

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.models.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommandInAServer;
import dev.sheldan.abstracto.core.models.database.AServer;
public interface CommandInServerManagementService {
ACommandInAServer crateCommandInServer(ACommand command, AServer server);
ACommandInAServer createCommandInServer(ACommand command, AServer server);
boolean doesCommandExistInServer(ACommand command, AServer server);
ACommandInAServer getCommandForServer(ACommand command, AServer server);
ACommandInAServer getCommandForServer(ACommand command, Long serverId);

View File

@@ -1,9 +1,10 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.models.database.AModule;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.AModule;
import dev.sheldan.abstracto.core.models.database.AFeature;
import java.util.List;
import java.util.Optional;
public interface CommandManagementService {
@@ -12,4 +13,5 @@ public interface CommandManagementService {
Optional<ACommand> findCommandByNameOptional(String name);
ACommand findCommandByName(String name);
boolean doesCommandExist(String name);
List<ACommand> getAllCommands();
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.models.database.AModule;
import dev.sheldan.abstracto.core.command.model.database.AModule;
public interface ModuleManagementService {
AModule createModule(String name);

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import lombok.*;
import javax.persistence.*;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.model.database.ACommand;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;

View File

@@ -14,6 +14,7 @@ import java.util.List;
@SuperBuilder
public class HelpCommandDetailsModel extends UserInitiatedServerContext {
private CommandConfiguration command;
private List<String> serverSpecificAliases;
private String usage;
private List<Role> allowedRoles;
private List<Role> immuneRoles;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.command.models.TableLocks;
import dev.sheldan.abstracto.core.command.model.TableLocks;
public interface LockService {
void lockTable(TableLocks toLock);