added liquibase for setup of databases and initial values

fixed some table names to be singular
migrated templates to separate repository
added seed data to initial version in liquibase migrations instead of property files (post targets, emotes etc) and created some default tables containing those default values
added separate artifacts to be used containing only the liquibase config
added shell script as a wrapper for ansible deployment, to handle an environment variable defining whether or not the deployment should be executed
added logback scan period
added licenses for ansible, liquibase, docker and docker-compose
This commit is contained in:
Sheldan
2020-07-01 20:44:21 +02:00
parent e8767429bf
commit 9374dfb912
965 changed files with 15775 additions and 2935 deletions

View File

@@ -7,6 +7,9 @@ public class CommandNotFoundException extends AbstractoRunTimeException implemen
public CommandNotFoundException() {
super("");
}
public CommandNotFoundException(String text) {
super(text);
}
@Override
public String getTemplateName() {

View File

@@ -6,6 +6,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
import java.util.Objects;
@Entity
@@ -36,6 +37,22 @@ public class ACommand implements Serializable {
@JoinColumn(name = "feature_id", nullable = false)
private AFeature feature;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

View File

@@ -10,7 +10,7 @@ import java.io.Serializable;
import java.util.List;
import java.util.Objects;
@Entity
@Entity(name = "command_in_server")
@Getter
@Builder
@Setter

View File

@@ -8,6 +8,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -37,6 +38,22 @@ public class AModule implements Serializable {
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<ACommand> commands = new ArrayList<>();
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

View File

@@ -4,9 +4,12 @@ import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.models.database.AModule;
import dev.sheldan.abstracto.core.models.database.AFeature;
import java.util.Optional;
public interface CommandManagementService {
ACommand createCommand(String name, String moduleName, String featureName);
ACommand createCommand(String name, AModule moduleName, AFeature feature);
Optional<ACommand> findCommandByNameOptional(String name);
ACommand findCommandByName(String name);
boolean doesCommandExist(String name);
}

View File

@@ -1,13 +0,0 @@
package dev.sheldan.abstracto.core.models.config;
import lombok.*;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FeaturePropertiesConfig {
private Boolean enabled;
private String defaultMode;
}

View File

@@ -47,13 +47,11 @@ public class AChannel implements SnowFlake, Serializable {
this.created = Instant.now();
}
@Getter
@Setter
@Column
private Boolean deleted;
@Override
public boolean equals(Object o) {
if (this == o) return true;

View File

@@ -7,7 +7,7 @@ import java.io.Serializable;
import java.time.Instant;
@Entity
@Table(name="default_configs")
@Table(name="default_config")
@Builder
@AllArgsConstructor
@NoArgsConstructor

View File

@@ -7,6 +7,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
import java.util.List;
import java.util.Objects;
@@ -35,6 +36,22 @@ public class AFeature implements SnowFlake, Serializable {
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<ACommand> commands;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

View File

@@ -8,7 +8,7 @@ import java.io.Serializable;
import java.time.Instant;
@Entity
@Table(name="feature_modes")
@Table(name="feature_mode")
@Builder
@NoArgsConstructor
@AllArgsConstructor

View File

@@ -25,8 +25,6 @@ public class AServer implements SnowFlake, Serializable {
@Column(name = "id")
private Long id;
private String name;
@Column(name = "created")
private Instant created;
@@ -93,12 +91,11 @@ public class AServer implements SnowFlake, Serializable {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AServer aServer = (AServer) o;
return Objects.equals(id, aServer.id) &&
Objects.equals(name, aServer.name);
return Objects.equals(id, aServer.id);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
return Objects.hash(id);
}
}

View File

@@ -10,7 +10,7 @@ import java.util.List;
import java.util.Objects;
@Entity
@Table(name="users")
@Table(name="auser")
@Builder
@AllArgsConstructor
@NoArgsConstructor

View File

@@ -0,0 +1,64 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
import java.util.Objects;
@Entity
@Table(name = "default_emote")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class DefaultEmote implements Serializable {
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private String name;
@Column
@Setter
private String emoteKey;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DefaultEmote that = (DefaultEmote) o;
return Objects.equals(id, that.id) &&
Objects.equals(name, that.name) &&
Objects.equals(emoteKey, that.emoteKey) &&
Objects.equals(created, that.created) &&
Objects.equals(updated, that.updated);
}
@Override
public int hashCode() {
return Objects.hash(id, name, emoteKey, created, updated);
}
}

View File

@@ -0,0 +1,73 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
import java.util.Objects;
@Entity
@Table(name="default_feature_flag")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class DefaultFeatureFlag implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter
@Column(name = "id")
public Long id;
@Getter
@Setter
@OneToOne
@JoinColumn(name = "feature_id", nullable = false)
private AFeature feature;
@Getter
@Setter
private boolean enabled;
@Getter
@Setter
private String mode;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updateTimestamp;
@PreUpdate
private void onUpdate() {
this.updateTimestamp = Instant.now();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DefaultFeatureFlag that = (DefaultFeatureFlag) o;
return enabled == that.enabled &&
Objects.equals(id, that.id) &&
Objects.equals(feature, that.feature) &&
Objects.equals(mode, that.mode) &&
Objects.equals(created, that.created) &&
Objects.equals(updateTimestamp, that.updateTimestamp);
}
@Override
public int hashCode() {
return Objects.hash(id, feature, enabled, mode, created, updateTimestamp);
}
}

View File

@@ -0,0 +1,45 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
import java.util.Objects;
@Entity
@Table(name="default_posttarget")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class DefaultPostTarget implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter
private Long id;
@Getter
private String name;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
}

View File

@@ -4,5 +4,4 @@ import dev.sheldan.abstracto.core.command.models.TableLocks;
public interface LockService {
void lockTable(TableLocks toLock);
void setupLocks();
}

View File

@@ -0,0 +1,11 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.DefaultEmote;
import java.util.List;
public interface DefaultEmoteManagementService {
DefaultEmote getDefaultEmote(String key);
List<DefaultEmote> getAllDefaultEmotes();
List<String> getDefaultEmoteNames();
}

View File

@@ -0,0 +1,10 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.DefaultFeatureFlag;
import java.util.List;
public interface DefaultFeatureFlagManagementService {
List<String> getDefaultFeatureKeys();
List<DefaultFeatureFlag> getAllDefaultFeatureFlags();
}

View File

@@ -0,0 +1,10 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.DefaultPostTarget;
import java.util.List;
public interface DefaultPostTargetManagementService {
List<DefaultPostTarget> getAllDefaultPostTargets();
List<String> getDefaultPostTargetKeys();
}