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-17 21:48:23 +02:00
parent e8767429bf
commit 9374dfb912
965 changed files with 15775 additions and 2935 deletions
@@ -7,6 +7,9 @@ public class CommandNotFoundException extends AbstractoRunTimeException implemen
public CommandNotFoundException() {
super("");
}
public CommandNotFoundException(String text) {
super(text);
}
@Override
public String getTemplateName() {
@@ -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;
@@ -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
@@ -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;
@@ -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);
}
@@ -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;
}
@@ -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;
@@ -7,7 +7,7 @@ import java.io.Serializable;
import java.time.Instant;
@Entity
@Table(name="default_configs")
@Table(name="default_config")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@@ -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;
@@ -8,7 +8,7 @@ import java.io.Serializable;
import java.time.Instant;
@Entity
@Table(name="feature_modes")
@Table(name="feature_mode")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@@ -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);
}
}
@@ -10,7 +10,7 @@ import java.util.List;
import java.util.Objects;
@Entity
@Table(name="users")
@Table(name="auser")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@@ -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);
}
}
@@ -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);
}
}
@@ -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();
}
}
@@ -4,5 +4,4 @@ import dev.sheldan.abstracto.core.command.models.TableLocks;
public interface LockService {
void lockTable(TableLocks toLock);
void setupLocks();
}
@@ -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();
}
@@ -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();
}
@@ -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();
}