[AB-103] adding triggers to update created and updating attributes on tables

fixing error handling in installer
merging change sets to larger operations
adding check constraints
fixing suggestion id handling
applying naming conventions to various columns
adding indices to tables
adding user in server and user locking
This commit is contained in:
Sheldan
2021-02-07 03:06:48 +01:00
parent dac3b0887f
commit 038d5c3832
126 changed files with 1416 additions and 986 deletions

View File

@@ -20,31 +20,31 @@
<column name="assignable_place_id" type="BIGINT"> <column name="assignable_place_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="assignable_role_place_post_id" type="BIGINT"> <column name="place_post_id" type="BIGINT">
<constraints nullable="true"/> <constraints nullable="true"/>
</column> </column>
<column name="description" type="VARCHAR(255)"/> <column name="description" type="VARCHAR(255)"/>
<column name="required_level" type="INTEGER"/> <column name="required_level" type="INTEGER"/>
<column name="position" type="INTEGER"/> <column name="position" type="INTEGER">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="assignable_role-fk_assignable_role_emote">
<addForeignKeyConstraint baseColumnNames="emote_id" baseTableName="assignable_role" constraintName="fk_assignable_role_emote" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="emote" validate="true"/> <addForeignKeyConstraint baseColumnNames="emote_id" baseTableName="assignable_role" constraintName="fk_assignable_role_emote" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="emote" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="assignable_role-fk_assignable_role_role">
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="assignable_role" constraintName="fk_assignable_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/> <addForeignKeyConstraint baseColumnNames="role_id" baseTableName="assignable_role" constraintName="fk_assignable_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="assignable_role-fk_assignable_role_place">
<addForeignKeyConstraint baseColumnNames="assignable_place_id" baseTableName="assignable_role" constraintName="fk_assignable_role_place" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assignable_role_place" validate="true"/> <addForeignKeyConstraint baseColumnNames="assignable_place_id" baseTableName="assignable_role" constraintName="fk_assignable_role_place" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assignable_role_place" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="place_post_id" baseTableName="assignable_role" constraintName="fk_assignable_role_post" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assignable_role_place_post" validate="true"/>
<sql>
<changeSet author="Sheldan" id="assignable_role-fk_assignable_role_post"> DROP TRIGGER IF EXISTS assignable_role_update_trigger ON assignable_role;
<addForeignKeyConstraint baseColumnNames="assignable_role_place_post_id" baseTableName="assignable_role" constraintName="fk_assignable_role_post" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assignable_role_place_post" validate="true"/> CREATE TRIGGER assignable_role_update_trigger BEFORE UPDATE ON assignable_role FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS assignable_role_insert_trigger ON assignable_role;
CREATE TRIGGER assignable_role_insert_trigger BEFORE INSERT ON assignable_role FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -17,23 +17,41 @@
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="key" type="VARCHAR(255)"/> <column name="key" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="text" type="VARCHAR(255)"/> <column name="text" type="VARCHAR(255)"/>
<column name="active" type="BOOLEAN"/> <column name="active" type="BOOLEAN">
<column name="inline" type="BOOLEAN"/> <constraints nullable="true"/>
<column name="unique_roles" type="BOOLEAN"/> </column>
<column name="auto_remove" type="BOOLEAN"/> <column name="inline" type="BOOLEAN">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="unique_roles" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="auto_remove" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_assignable_role_place" tableName="assignable_role_place">
<column name="server_id"/>
<changeSet author="Sheldan" id="assignable_role_place-fk_assignable_role_place_channel"> <column name="key"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="assignable_role_place" constraintName="fk_assignable_role_place_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="assignable_role_place" constraintName="fk_assignable_role_place_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="assignable_role_place-fk_assignable_role_place_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="assignable_role_place" constraintName="fk_assignable_role_place_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="assignable_role_place" constraintName="fk_assignable_role_place_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS assignable_role_place_update_trigger ON assignable_role_place;
CREATE TRIGGER assignable_role_place_update_trigger BEFORE UPDATE ON assignable_role_place FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS assignable_role_place_insert_trigger ON assignable_role_place;
CREATE TRIGGER assignable_role_place_insert_trigger BEFORE INSERT ON assignable_role_place FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -17,17 +17,21 @@
<column name="channel_id" type="BIGINT"> <column name="channel_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="assignable_role_place_post-fk_assignable_role_place_post_place_id">
<addForeignKeyConstraint baseColumnNames="assignable_place_id" baseTableName="assignable_role_place_post" constraintName="fk_assignable_role_place_post_place_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assignable_role_place" validate="true"/> <addForeignKeyConstraint baseColumnNames="assignable_place_id" baseTableName="assignable_role_place_post" constraintName="fk_assignable_role_place_post_place_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assignable_role_place" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="assignable_role_place_post-fk_assignable_role_place_post_channel">
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="assignable_role_place_post" constraintName="fk_assignable_role_place_post_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="assignable_role_place_post" constraintName="fk_assignable_role_place_post_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS assignable_role_place_post_update_trigger ON assignable_role_place_post;
CREATE TRIGGER assignable_role_place_post_update_trigger BEFORE UPDATE ON assignable_role_place_post FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS assignable_role_place_post_insert_trigger ON assignable_role_place_post;
CREATE TRIGGER assignable_role_place_post_insert_trigger BEFORE INSERT ON assignable_role_place_post FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,8 +11,20 @@
<column name="id" type="BIGINT"> <column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="assigned_role_user_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="assigned_role_user_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<addForeignKeyConstraint baseColumnNames="id" baseTableName="assigned_role_user" constraintName="fk_assigned_role_user_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS assigned_role_user_update_trigger ON assigned_role_user;
CREATE TRIGGER assigned_role_user_update_trigger BEFORE UPDATE ON assigned_role_user FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS assigned_role_user_insert_trigger ON assigned_role_user;
CREATE TRIGGER assigned_role_user_insert_trigger BEFORE INSERT ON assigned_role_user FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="assigned_role_in_user-table"> <changeSet author="Sheldan" id="assigned_role_in_user-table">
<createTable tableName="assigned_role_in_user"> <createTable tableName="assigned_role_in_user">
@@ -23,16 +35,8 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="assigned_role_in_user-fk_assigned_role_in_user_assignable_role">
<addForeignKeyConstraint baseColumnNames="assigned_role_id" baseTableName="assigned_role_in_user" constraintName="fk_assigned_role_in_user_assignable_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assignable_role" validate="true"/> <addForeignKeyConstraint baseColumnNames="assigned_role_id" baseTableName="assigned_role_in_user" constraintName="fk_assigned_role_in_user_assignable_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assignable_role" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="assigned_role_in_user-fk_assigned_role_in_user_assigned_user">
<addForeignKeyConstraint baseColumnNames="user_id" baseTableName="assigned_role_in_user" constraintName="fk_assigned_role_in_user_assigned_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assigned_role_user" validate="true"/> <addForeignKeyConstraint baseColumnNames="user_id" baseTableName="assigned_role_in_user" constraintName="fk_assigned_role_in_user_assigned_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="assigned_role_user" validate="true"/>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="assigned_role_user-fk_assigned_role_user_user">
<addForeignKeyConstraint baseColumnNames="id" baseTableName="assigned_role_user" constraintName="fk_assigned_role_user_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -44,7 +44,7 @@ public class AssignableRole implements Serializable {
@Getter @Getter
@Setter @Setter
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "assignable_role_place_post_id") @JoinColumn(name = "place_post_id")
private AssignableRolePlacePost assignableRolePlacePost; private AssignableRolePlacePost assignableRolePlacePost;
@Getter @Getter
@@ -54,24 +54,18 @@ public class AssignableRole implements Serializable {
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AssignedRoleUser> assignedUsers = new ArrayList<>(); private List<AssignedRoleUser> assignedUsers = new ArrayList<>();
@Column(name = "description")
private String description; private String description;
@Column(name = "required_level")
private Integer requiredLevel; private Integer requiredLevel;
@Column(name = "position")
private Integer position; private Integer position;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -28,6 +28,7 @@ public class AssignableRolePlace implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id; private Long id;
@OneToOne @OneToOne
@@ -38,9 +39,9 @@ public class AssignableRolePlace implements Serializable {
@JoinColumn(name="server_id") @JoinColumn(name="server_id")
private AServer server; private AServer server;
@Column(name = "key")
private String key; private String key;
@OneToMany( @OneToMany(
fetch = FetchType.LAZY, fetch = FetchType.LAZY,
cascade = {CascadeType.PERSIST, CascadeType.MERGE}, cascade = {CascadeType.PERSIST, CascadeType.MERGE},
@@ -61,34 +62,29 @@ public class AssignableRolePlace implements Serializable {
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AssignableRole> assignableRoles = new ArrayList<>(); private List<AssignableRole> assignableRoles = new ArrayList<>();
@Column(name = "text")
private String text; private String text;
@Builder.Default @Builder.Default
@Column(name = "active")
private Boolean active = true; private Boolean active = true;
@Builder.Default @Builder.Default
@Column(name = "inline")
private Boolean inline = false; private Boolean inline = false;
@Builder.Default @Builder.Default
@Column(name = "unique_roles")
private Boolean uniqueRoles = false; private Boolean uniqueRoles = false;
@Builder.Default @Builder.Default
@Column(name = "auto_remove")
private Boolean autoRemove = false; private Boolean autoRemove = false;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -23,6 +23,7 @@ import java.util.List;
public class AssignableRolePlacePost implements Serializable { public class AssignableRolePlacePost implements Serializable {
@Id @Id
@Column(name = "id")
private Long id; private Long id;
@ManyToOne @ManyToOne
@@ -32,6 +33,9 @@ public class AssignableRolePlacePost implements Serializable {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@Column(name = "updated")
private Instant updated;
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@Getter @Getter
@Setter @Setter
@@ -46,9 +50,4 @@ public class AssignableRolePlacePost implements Serializable {
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AssignableRole> assignableRoles = new ArrayList<>(); private List<AssignableRole> assignableRoles = new ArrayList<>();
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
} }

View File

@@ -23,6 +23,7 @@ import java.util.List;
public class AssignedRoleUser implements Serializable { public class AssignedRoleUser implements Serializable {
@Id @Id
@Column(name = "id")
private Long id; private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@@ -38,12 +39,10 @@ public class AssignedRoleUser implements Serializable {
@Builder.Default @Builder.Default
private List<AssignableRole> roles = new ArrayList<>(); private List<AssignableRole> roles = new ArrayList<>();
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist @Column(name = "updated")
private void onInsert() { private Instant updated;
this.created = Instant.now();
}
} }

View File

@@ -50,8 +50,8 @@ public interface UserExperienceRepository extends JpaRepository<AUserExperience
*/ */
@Query(value = "WITH user_experience_ranked AS" + @Query(value = "WITH user_experience_ranked AS" +
"( " + "( " +
" SELECT us.id, us.experience, us.experience_role_id, us.level_id, us.message_count, ROW_NUMBER() OVER ( ORDER BY experience DESC ) " + " SELECT us.id, us.experience, us.role_id, us.level_id, us.message_count, ROW_NUMBER() OVER ( ORDER BY experience DESC ) " +
" FROM user_experience us INNER JOIN user_in_server uis ON us.id = uis.user_in_server_id INNER JOIN server s ON s.id = uis.server_reference WHERE s.id = :serverId" + " FROM user_experience us INNER JOIN user_in_server uis ON us.id = uis.user_in_server_id INNER JOIN server s ON s.id = uis.server_id WHERE s.id = :serverId" +
") " + ") " +
"SELECT rank.id as \"id\", rank.experience as \"experience\", rank.message_count as \"messageCount\", rank.level_id as \"level\", rank.row_number as \"rank\" " + "SELECT rank.id as \"id\", rank.experience as \"experience\", rank.message_count as \"messageCount\", rank.level_id as \"level\", rank.row_number as \"rank\" " +
"FROM user_experience_ranked rank " + "FROM user_experience_ranked rank " +

View File

@@ -91,6 +91,7 @@ public class ExperienceRoleManagementServiceBean implements ExperienceRoleManage
} else { } else {
experienceRole = AExperienceRole experienceRole = AExperienceRole
.builder() .builder()
.id(role.getId())
.level(level) .level(level)
.roleServer(role.getServer()) .roleServer(role.getServer())
.role(role) .role(role)

View File

@@ -6,19 +6,25 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="disabled_experience_roles-table"> <changeSet author="Sheldan" id="disabled_experience_role-table">
<createTable tableName="disabled_experience_roles"> <createTable tableName="disabled_experience_role">
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="disabled_experience_roles_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="disabled_experience_role_pkey"/>
</column> </column>
<column name="role_id" type="BIGINT"> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="false"/> <constraints nullable="true"/>
</column> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
</changeSet> <addForeignKeyConstraint baseColumnNames="id" baseTableName="disabled_experience_role" constraintName="fk_disabled_experience_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
<sql>
<changeSet author="Sheldan" id="disabled_experience_roles-fk_disabled_experience_role_role"> DROP TRIGGER IF EXISTS disabled_experience_role_update_trigger ON disabled_experience_role;
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="disabled_experience_roles" constraintName="fk_disabled_experience_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/> CREATE TRIGGER disabled_experience_role_update_trigger BEFORE UPDATE ON disabled_experience_role FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS disabled_experience_role_insert_trigger ON disabled_experience_role;
CREATE TRIGGER disabled_experience_role_insert_trigger BEFORE INSERT ON disabled_experience_role FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,9 +11,22 @@
<column name="level" type="INTEGER"> <column name="level" type="INTEGER">
<constraints nullable="false" primaryKey="true" primaryKeyName="experience_level_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="experience_level_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="experience_needed" type="BIGINT"/> <constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="experience_needed" type="BIGINT">
<constraints nullable="true"/>
</column>
</createTable> </createTable>
<sql>
DROP TRIGGER IF EXISTS experience_level_update_trigger ON experience_level;
CREATE TRIGGER experience_level_update_trigger BEFORE UPDATE ON experience_level FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS experience_level_insert_trigger ON experience_level;
CREATE TRIGGER experience_level_insert_trigger BEFORE INSERT ON experience_level FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -8,30 +8,30 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="experience_role-table"> <changeSet author="Sheldan" id="experience_role-table">
<createTable tableName="experience_role"> <createTable tableName="experience_role">
<column autoIncrement="true" name="id" type="BIGINT"> <column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="experience_role_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="experience_role_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="level_id" type="INTEGER"> <column name="level_id" type="INTEGER">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="role_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="experience_role-fk_experience_role_level">
<addForeignKeyConstraint baseColumnNames="level_id" baseTableName="experience_role" constraintName="fk_experience_role_level" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="level" referencedTableName="experience_level" validate="true"/> <addForeignKeyConstraint baseColumnNames="level_id" baseTableName="experience_role" constraintName="fk_experience_role_level" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="level" referencedTableName="experience_level" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="id" baseTableName="experience_role" constraintName="fk_experience_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
<changeSet author="Sheldan" id="experience_role-fk_experience_role_role">
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="experience_role" constraintName="fk_experience_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="experience_role-fk_experience_role_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="experience_role" constraintName="fk_experience_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="experience_role" constraintName="fk_experience_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS experience_role_update_trigger ON experience_role;
CREATE TRIGGER experience_role_update_trigger BEFORE UPDATE ON experience_role FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS experience_role_insert_trigger ON experience_role;
CREATE TRIGGER experience_role_insert_trigger BEFORE INSERT ON experience_role FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,22 +11,34 @@
<column name="id" type="BIGINT"> <column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="user_experience_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="user_experience_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="experience" type="BIGINT">
<column name="experience" type="BIGINT"/> <constraints nullable="true"/>
<column name="experience_gain_disabled" type="BOOLEAN"/> </column>
<column name="message_count" type="BIGINT"/> <column name="experience_gain_disabled" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="message_count" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="experience_role_id" type="BIGINT"/> <column name="role_id" type="BIGINT"/>
<column name="level_id" type="INTEGER"> <column name="level_id" type="INTEGER">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<addForeignKeyConstraint baseColumnNames="level_id" baseTableName="user_experience" constraintName="fk_user_experience_level" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="level" referencedTableName="experience_level" validate="true"/>
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="user_experience" constraintName="fk_user_experience_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="experience_role" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS user_experience_update_trigger ON user_experience;
CREATE TRIGGER user_experience_update_trigger BEFORE UPDATE ON user_experience FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS user_experience_insert_trigger ON user_experience;
CREATE TRIGGER user_experience_insert_trigger BEFORE INSERT ON user_experience FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="user_experience-fk_user_experience_level">
<addForeignKeyConstraint baseColumnNames="level_id" baseTableName="user_experience" constraintName="fk_user_experience_level" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="level" referencedTableName="experience_level" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="user_experience-fk_user_experience_role">
<addForeignKeyConstraint baseColumnNames="experience_role_id" baseTableName="user_experience" constraintName="fk_user_experience_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="experience_role" validate="true"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -6,6 +6,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.time.Instant;
/** /**
* A role for which the experience gain in a particular server has been disabled. * A role for which the experience gain in a particular server has been disabled.
@@ -14,21 +15,28 @@ import java.io.Serializable;
@Entity @Entity
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table(name = "disabled_experience_roles") @Table(name = "disabled_experience_role")
@Getter @Getter
@Setter @Setter
@EqualsAndHashCode @EqualsAndHashCode
@Cacheable @Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class ADisabledExpRole implements Serializable { public class ADisabledExpRole implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id")
private Long id; private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@PrimaryKeyJoinColumn
private ARole role;
/** /**
* Reference to the actual {@link ARole} being marked as disabled for experience gain. * Reference to the actual {@link ARole} being marked as disabled for experience gain.
*/ */
@OneToOne(fetch = FetchType.LAZY) @Column(name = "created")
@JoinColumn(name = "role_id", nullable = false) private Instant created;
private ARole role;
@Column(name = "updated")
private Instant updated;
} }

View File

@@ -25,26 +25,18 @@ public class AExperienceLevel implements Serializable {
* The unique level from 0 to as defined in the configuration. Will be created on startup. * The unique level from 0 to as defined in the configuration. Will be created on startup.
*/ */
@Id @Id
@Column(name = "level")
private Integer level; private Integer level;
/** /**
* The total amount of experience needed for this level. * The total amount of experience needed for this level.
*/ */
@Column(name = "experience_needed")
private Long experienceNeeded; private Long experienceNeeded;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -31,9 +31,13 @@ public class AExperienceRole implements Serializable {
* The abstracto unique id of this experience role. * The abstracto unique id of this experience role.
*/ */
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id")
private Long id; private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@PrimaryKeyJoinColumn
private ARole role;
/** /**
* Reference to the {@link AExperienceLevel} at which this role is awarded. * Reference to the {@link AExperienceLevel} at which this role is awarded.
*/ */
@@ -50,29 +54,12 @@ public class AExperienceRole implements Serializable {
@JoinColumn(name = "server_id", nullable = false) @JoinColumn(name = "server_id", nullable = false)
private AServer roleServer; private AServer roleServer;
/**
* Reference to the actual {@link ARole} being awarded.
*/
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id", nullable = false)
private ARole role;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
/** /**
* Current list of {@link dev.sheldan.abstracto.core.models.database.AUserInAServer} which were given this role. * Current list of {@link dev.sheldan.abstracto.core.models.database.AUserInAServer} which were given this role.
*/ */

View File

@@ -29,6 +29,7 @@ public class AUserExperience implements Serializable {
* The {@link AUserInAServer} id which is unique for each user in a server. * The {@link AUserInAServer} id which is unique for each user in a server.
*/ */
@Id @Id
@Column(name = "id")
private Long id; private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@@ -38,16 +39,19 @@ public class AUserExperience implements Serializable {
/** /**
* The total amount of experience the user has in the guild * The total amount of experience the user has in the guild
*/ */
@Column(name = "experience")
private Long experience; private Long experience;
/** /**
* The total amount of messages the user has written in the guild resulting in the experience. * The total amount of messages the user has written in the guild resulting in the experience.
*/ */
@Column(name = "message_count")
private Long messageCount; private Long messageCount;
/** /**
* Whether or not the experience gain has been disabled for this user * Whether or not the experience gain has been disabled for this user
*/ */
@Column(name = "experience_gain_disabled")
private Boolean experienceGainDisabled; private Boolean experienceGainDisabled;
/** /**
@@ -61,25 +65,15 @@ public class AUserExperience implements Serializable {
* The {@link AExperienceRole} the user currently has. Can be null. * The {@link AExperienceRole} the user currently has. Can be null.
*/ */
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name = "experience_role_id") @JoinColumn(name = "role_id")
private AExperienceRole currentExperienceRole; private AExperienceRole currentExperienceRole;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
public Integer getLevelOrDefault() { public Integer getLevelOrDefault() {
return currentLevel != null ? currentLevel.getLevel() : 0; return currentLevel != null ? currentLevel.getLevel() : 0;
} }

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.moderation.repository; package dev.sheldan.abstracto.moderation.repository;
import dev.sheldan.abstracto.core.models.ServerSpecificId;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.moderation.models.database.Mute; import dev.sheldan.abstracto.moderation.models.database.Mute;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -12,7 +13,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
@Repository @Repository
public interface MuteRepository extends JpaRepository<Mute, Long> { public interface MuteRepository extends JpaRepository<Mute, ServerSpecificId> {
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
boolean existsByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer); boolean existsByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);

View File

@@ -12,7 +12,10 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="allowed_invite_link_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="allowed_invite_link_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="code" type="VARCHAR(32)"> <column name="code" type="VARCHAR(32)">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
@@ -20,11 +23,19 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_allowed_invite_code_server" tableName="allowed_invite_link">
<column name="code"/>
<column name="server_id"/>
<changeSet author="Sheldan" id="allowed_invite_link-fk_allowed_invite_link_server"> </createIndex>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="allowed_invite_link" constraintName="fk_allowed_invite_link_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="allowed_invite_link" constraintName="fk_allowed_invite_link_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS allowed_invite_link_update_trigger ON allowed_invite_link;
CREATE TRIGGER allowed_invite_link_update_trigger BEFORE UPDATE ON allowed_invite_link FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS allowed_invite_link_insert_trigger ON allowed_invite_link;
CREATE TRIGGER allowed_invite_link_insert_trigger BEFORE INSERT ON allowed_invite_link FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -12,7 +12,9 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="filtered_invite_link_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="filtered_invite_link_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="uses" type="BIGINT"> <column name="uses" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
@@ -24,11 +26,22 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_filtered_invite_link_server" tableName="filtered_invite_link">
<column name="server_id"/>
</createIndex>
<changeSet author="Sheldan" id="filtered_invite_link-fk_filtered_invite_link_server"> <createIndex indexName="idx_filtered_invite_link_code_server" tableName="filtered_invite_link">
<column name="code"/>
<column name="server_id"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="filtered_invite_link" constraintName="fk_filtered_invite_link_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="filtered_invite_link" constraintName="fk_filtered_invite_link_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS filtered_invite_link_update_trigger ON filtered_invite_link;
CREATE TRIGGER filtered_invite_link_update_trigger BEFORE UPDATE ON filtered_invite_link FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS filtered_invite_link_insert_trigger ON filtered_invite_link;
CREATE TRIGGER filtered_invite_link_insert_trigger BEFORE INSERT ON filtered_invite_link FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -9,16 +9,24 @@
<changeSet author="Sheldan" id="mute-table"> <changeSet author="Sheldan" id="mute-table">
<createTable tableName="mute"> <createTable tableName="mute">
<column name="id" type="BIGINT" /> <column name="id" type="BIGINT" />
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="reason" type="VARCHAR(255)"/> <constraints nullable="true"/>
<column name="trigger_key" type="VARCHAR(255)"/> </column>
<column name="reason" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="trigger_key" type="VARCHAR(255)" />
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="mute_date" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="mute_date" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="mute_target_date" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
<column name="muted_user" type="BIGINT"> </column>
<column name="target_date" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="muted_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="muting_channel" type="BIGINT"> <column name="channel_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
@@ -26,25 +34,23 @@
</column> </column>
<column name="mute_ended" type="BOOLEAN"/> <column name="mute_ended" type="BOOLEAN"/>
<column name="message_id" type="BIGINT"/> <column name="message_id" type="BIGINT"/>
<column name="muting_user" type="BIGINT"> <column name="muting_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<addPrimaryKey columnNames="server_id, id" tableName="mute" constraintName="pk_mute" validate="true"/> <addPrimaryKey columnNames="server_id, id" tableName="mute" constraintName="pk_mute" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="mute" constraintName="fk_mute_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
<addForeignKeyConstraint baseColumnNames="muting_user_in_server_id" baseTableName="mute" constraintName="fk_mute_muting_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<changeSet author="Sheldan" id="mute-fk_mute_channel"> <addForeignKeyConstraint baseColumnNames="muted_user_in_server_id" baseTableName="mute" constraintName="fk_mute_muted_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="muting_channel" baseTableName="mute" constraintName="fk_mute_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="mute-fk_mute_muting_user">
<addForeignKeyConstraint baseColumnNames="muting_user" baseTableName="mute" constraintName="fk_mute_muting_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="mute-fk_mute_muted_user">
<addForeignKeyConstraint baseColumnNames="muted_user" baseTableName="mute" constraintName="fk_mute_muted_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="mute-fk_mute_server_id">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="mute" constraintName="fk_mute_server_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="mute" constraintName="fk_mute_server_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS mute_update_trigger ON mute;
CREATE TRIGGER mute_update_trigger BEFORE UPDATE ON mute FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS mute_insert_trigger ON mute;
CREATE TRIGGER mute_insert_trigger BEFORE INSERT ON mute FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -12,7 +12,9 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="mute_role_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="mute_role_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="role_id" type="BIGINT"> <column name="role_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
@@ -21,15 +23,19 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_mute_role_server" tableName="mute_role">
<column name="server_id"/>
</createIndex>
<changeSet author="Sheldan" id="1593469295954-78"> <addForeignKeyConstraint baseColumnNames="role_id" baseTableName="mute_role" constraintName="fk_mute_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="mute_role" constraintName="fk3m21mnle06e53wb4r1x5bfyxc" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="mute_role" constraintName="fk_mute_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet> <sql>
DROP TRIGGER IF EXISTS mute_role_update_trigger ON mute_role;
<changeSet author="Sheldan" id="1593469295954-126"> CREATE TRIGGER mute_role_update_trigger BEFORE UPDATE ON mute_role FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="mute_role" constraintName="fk8bveij4p6lnc2fkoascaeb28k" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> </sql>
<sql>
DROP TRIGGER IF EXISTS mute_role_insert_trigger ON mute_role;
CREATE TRIGGER mute_role_insert_trigger BEFORE INSERT ON mute_role FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -8,24 +8,35 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="user_note-table"> <changeSet author="Sheldan" id="user_note-table">
<createTable tableName="user_note"> <createTable tableName="user_note">
<column autoIncrement="true" name="id" type="BIGINT" /> <column autoIncrement="true" name="id" type="BIGINT" >
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="note" type="VARCHAR(2000)"/> <column name="note" type="VARCHAR(2000)"/>
<column name="note_user" type="BIGINT"> <column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<createIndex indexName="idx_user_note_user" tableName="user_note">
<column name="user_in_server_id"/>
</createIndex>
<addPrimaryKey columnNames="server_id, id" tableName="user_note" constraintName="pk_user_note" validate="true"/> <addPrimaryKey columnNames="server_id, id" tableName="user_note" constraintName="pk_user_note" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="user_in_server_id" baseTableName="user_note" constraintName="fk_user_note_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<changeSet author="Sheldan" id="user_note-fk_user_note_user">
<addForeignKeyConstraint baseColumnNames="note_user" baseTableName="user_note" constraintName="fk_user_note_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="user_note-fk_user_note_server_id">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="user_note" constraintName="fk_user_note_server_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="user_note" constraintName="fk_user_note_server_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS user_note_update_trigger ON user_note;
CREATE TRIGGER user_note_update_trigger BEFORE UPDATE ON user_note FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS user_note_insert_trigger ON user_note;
CREATE TRIGGER user_note_insert_trigger BEFORE INSERT ON user_note FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -8,34 +8,46 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="warning-table"> <changeSet author="Sheldan" id="warning-table">
<createTable tableName="warning"> <createTable tableName="warning">
<column autoIncrement="true" name="id" type="BIGINT" /> <column name="id" type="BIGINT">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="decay_date" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="decay_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="decayed" type="BOOLEAN"/> <column name="decayed" type="BOOLEAN"/>
<column name="reason" type="VARCHAR(255)"/> <column name="reason" type="VARCHAR(255)">
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
<column name="warn_date" type="TIMESTAMP WITHOUT TIME ZONE"/> </column>
<column name="warned_user_id" type="BIGINT"> <column name="warn_date" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="warned_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="warning_user_id" type="BIGINT"> <column name="warning_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<createIndex indexName="idx_warning_user" tableName="warning">
<column name="warned_user_in_server_id"/>
</createIndex>
<addPrimaryKey columnNames="server_id, id" tableName="warning" constraintName="pk_warning" validate="true"/> <addPrimaryKey columnNames="server_id, id" tableName="warning" constraintName="pk_warning" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="warned_user_in_server_id" baseTableName="warning" constraintName="fk_warning_warned_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="warning_user_in_server_id" baseTableName="warning" constraintName="fk_warning_warning_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<changeSet author="Sheldan" id="warning-fk_warning_warned_user">
<addForeignKeyConstraint baseColumnNames="warned_user_id" baseTableName="warning" constraintName="fk_warning_warned_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="warning-fk_warning_warning_user">
<addForeignKeyConstraint baseColumnNames="warning_user_id" baseTableName="warning" constraintName="fk_warning_warning_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="warning-fk_warning_server_id">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="warning" constraintName="fk_warning_server_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="warning" constraintName="fk_warning_server_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS warning_update_trigger ON warning;
CREATE TRIGGER warning_update_trigger BEFORE UPDATE ON warning FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS warning_insert_trigger ON warning;
CREATE TRIGGER warning_insert_trigger BEFORE INSERT ON warning FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -21,6 +21,7 @@ public class AllowedInviteLink {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id; private Long id;
@Column(name = "code") @Column(name = "code")
@@ -30,12 +31,10 @@ public class AllowedInviteLink {
@JoinColumn(name = "server_id", nullable = false) @JoinColumn(name = "server_id", nullable = false)
private AServer server; private AServer server;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist @Column(name = "updated")
private void onInsert() { private Instant updated;
this.created = Instant.now();
}
} }

View File

@@ -21,6 +21,7 @@ public class FilteredInviteLink {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id; private Long id;
@Column(name = "code") @Column(name = "code")
@@ -39,16 +40,7 @@ public class FilteredInviteLink {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -41,40 +41,44 @@ public class Mute implements Serializable {
* The {@link AUserInAServer} which was muted * The {@link AUserInAServer} which was muted
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "mutedUser", nullable = false) @JoinColumn(name = "muted_user_in_server_id", nullable = false)
private AUserInAServer mutedUser; private AUserInAServer mutedUser;
/** /**
* The {@link AUserInAServer} which casted the mute * The {@link AUserInAServer} which casted the mute
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "mutingUser", nullable = false) @JoinColumn(name = "muting_user_in_server_id", nullable = false)
private AUserInAServer mutingUser; private AUserInAServer mutingUser;
/** /**
* The reason of the mute which is stored * The reason of the mute which is stored
*/ */
@Column(name = "reason")
private String reason; private String reason;
/** /**
* The date when the mute was cast, and the start date * The date when the mute was cast, and the start date
*/ */
@Column(name = "mute_date")
private Instant muteDate; private Instant muteDate;
/** /**
* The date at which this mute should be removed in the future * The date at which this mute should be removed in the future
*/ */
@Column(name = "target_date")
private Instant muteTargetDate; private Instant muteTargetDate;
/** /**
* Whether or not the mute already ended, be it manually or when the time passed * Whether or not the mute already ended, be it manually or when the time passed
*/ */
@Column(name = "mute_ended")
private Boolean muteEnded; private Boolean muteEnded;
/** /**
* The message which contained the command which caused this mute * The message which contained the command which caused this mute
*/ */
@Column @Column(name = "message_id")
private Long messageId; private Long messageId;
/** /**
@@ -87,6 +91,7 @@ public class Mute implements Serializable {
/** /**
* When the mute is scheduled to be un-done with quartz, this stores the quartz trigger in order to cancel it, if need be. * When the mute is scheduled to be un-done with quartz, this stores the quartz trigger in order to cancel it, if need be.
*/ */
@Column(name = "trigger_key")
private String triggerKey; private String triggerKey;
@Column(name = "created") @Column(name = "created")
@@ -94,16 +99,10 @@ public class Mute implements Serializable {
@PrePersist @PrePersist
private void onInsert() { private void onInsert() {
this.created = Instant.now();
this.muteDate = Instant.now(); this.muteDate = Instant.now();
} }
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -29,6 +29,7 @@ public class MuteRole implements Serializable {
*/ */
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id; private Long id;
/** /**
@@ -50,17 +51,7 @@ public class MuteRole implements Serializable {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -31,17 +31,16 @@ public class UserNote implements Serializable {
private AServer server; private AServer server;
@ManyToOne @ManyToOne
@JoinColumn(name = "noteUser", nullable = false) @JoinColumn(name = "user_in_server_id", nullable = false)
private AUserInAServer user; private AUserInAServer user;
@Column(length = 2000) @Column(length = 2000, name = "note")
private String note; private String note;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist @Column(name = "updated")
private void onInsert() { private Instant updated;
this.created = Instant.now();
}
} }

View File

@@ -42,7 +42,7 @@ public class Warning implements Serializable {
@Getter @Getter
@Setter @Setter
@ManyToOne @ManyToOne
@JoinColumn(name = "warnedUserId", nullable = false) @JoinColumn(name = "warned_user_in_server_id", nullable = false)
private AUserInAServer warnedUser; private AUserInAServer warnedUser;
/** /**
@@ -51,7 +51,7 @@ public class Warning implements Serializable {
@Getter @Getter
@Setter @Setter
@ManyToOne @ManyToOne
@JoinColumn(name = "warningUserId", nullable = false) @JoinColumn(name = "warning_user_in_server_id", nullable = false)
private AUserInAServer warningUser; private AUserInAServer warningUser;
/** /**
@@ -59,6 +59,7 @@ public class Warning implements Serializable {
*/ */
@Getter @Getter
@Setter @Setter
@Column(name = "reason")
private String reason; private String reason;
/** /**
@@ -66,6 +67,7 @@ public class Warning implements Serializable {
*/ */
@Getter @Getter
@Setter @Setter
@Column(name = "warn_date")
private Instant warnDate; private Instant warnDate;
/** /**
@@ -73,6 +75,7 @@ public class Warning implements Serializable {
*/ */
@Getter @Getter
@Setter @Setter
@Column(name = "decayed")
private Boolean decayed; private Boolean decayed;
/** /**
@@ -80,22 +83,13 @@ public class Warning implements Serializable {
*/ */
@Getter @Getter
@Setter @Setter
@Column(name = "decay_date")
private Instant decayDate; private Instant decayDate;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -6,26 +6,42 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="modmail_message-table"> <changeSet author="Sheldan" id="mod_mail_message-table">
<createTable tableName="modmail_message"> <createTable tableName="mod_mail_message">
<column name="message_id" type="BIGINT"> <column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_message_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="mod_mail_message_pkey"/>
</column> </column>
<column name="anonymous" type="BOOLEAN"/> <column name="created_message_in_dm" type="BIGINT" />
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created_message_in_channel" type="BIGINT" />
<column name="dm_channel" type="BOOLEAN"/> <column name="anonymous" type="BOOLEAN">
<column name="modmail_message_author" type="BIGINT"> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="dm_channel" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="author_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="thread_reference" type="BIGINT"> <column name="thread_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_mod_mail_message_thread" tableName="mod_mail_message">
<changeSet author="Sheldan" id="modmail_message-fk_modmail_message_thread"> <column name="thread_id"/>
<addForeignKeyConstraint baseColumnNames="thread_reference" baseTableName="modmail_message" constraintName="fk_modmail_message_thread" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="modmail_thread" validate="true"/> </createIndex>
</changeSet> <addForeignKeyConstraint baseColumnNames="thread_id" baseTableName="mod_mail_message" constraintName="fk_mod_mail_message_thread" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="mod_mail_thread" validate="true"/>
<changeSet author="Sheldan" id="modmail_message-fk_modmail_message_author"> <addForeignKeyConstraint baseColumnNames="author_user_in_server_id" baseTableName="mod_mail_message" constraintName="fk_mod_mail_message_author" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="modmail_message_author" baseTableName="modmail_message" constraintName="fk_modmail_message_author" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/> <sql>
DROP TRIGGER IF EXISTS mod_mail_message_update_trigger ON mod_mail_message;
CREATE TRIGGER mod_mail_message_update_trigger BEFORE UPDATE ON mod_mail_message FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS mod_mail_message_insert_trigger ON mod_mail_message;
CREATE TRIGGER mod_mail_message_insert_trigger BEFORE INSERT ON mod_mail_message FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -6,25 +6,32 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="modmail_role-table"> <changeSet author="Sheldan" id="mod_mail_role-table">
<createTable tableName="modmail_role"> <createTable tableName="mod_mail_role">
<column autoIncrement="true" name="mod_mail_role_id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_role_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="mod_mail_role_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="modmail_role" type="BIGINT"> <column name="role_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="modmail_role_server" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<addForeignKeyConstraint baseColumnNames="role_id" baseTableName="mod_mail_role" constraintName="fk_mod_mail_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="mod_mail_role" constraintName="fk_mod_mail_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS mod_mail_role_update_trigger ON mod_mail_role;
CREATE TRIGGER mod_mail_role_update_trigger BEFORE UPDATE ON mod_mail_role FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS mod_mail_role_insert_trigger ON mod_mail_role;
CREATE TRIGGER mod_mail_role_insert_trigger BEFORE INSERT ON mod_mail_role FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="modmail_role-fk_modmail_role_role">
<addForeignKeyConstraint baseColumnNames="modmail_role" baseTableName="modmail_role" constraintName="fk_modmail_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_role-fk_modmail_role_server">
<addForeignKeyConstraint baseColumnNames="modmail_role_server" baseTableName="modmail_role" constraintName="fk_modmail_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -6,26 +6,32 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="modmail_subscriber-table"> <changeSet author="Sheldan" id="mod_mail_subscriber-table">
<createTable tableName="modmail_subscriber"> <createTable tableName="mod_mail_subscriber">
<column autoIncrement="true" name="subscriber_id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_subscriber_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="mod_mail_subscriber_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="modmail_thread_subscriber" type="BIGINT"> <constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="mod_mail_thread" type="BIGINT"> <column name="mod_mail_thread_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <addForeignKeyConstraint baseColumnNames="user_in_server_id" baseTableName="mod_mail_subscriber" constraintName="fk_mod_mail_thread_subscriber_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<changeSet author="Sheldan" id="modmail_subscriber-fk_modmail_thread_subscriber_user"> <addForeignKeyConstraint baseColumnNames="mod_mail_thread_id" baseTableName="mod_mail_subscriber" constraintName="fk_mod_mail_thread_thread" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="mod_mail_thread" validate="true"/>
<addForeignKeyConstraint baseColumnNames="modmail_thread_subscriber" baseTableName="modmail_subscriber" constraintName="fk_modmail_thread_subscriber_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/> <sql>
</changeSet> DROP TRIGGER IF EXISTS mod_mail_subscriber_update_trigger ON mod_mail_subscriber;
CREATE TRIGGER mod_mail_subscriber_update_trigger BEFORE UPDATE ON mod_mail_subscriber FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
<changeSet author="Sheldan" id="modmail_subscriber-fk_modmail_thread_thread"> </sql>
<addForeignKeyConstraint baseColumnNames="mod_mail_thread" baseTableName="modmail_subscriber" constraintName="fk_modmail_thread_thread" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="modmail_thread" validate="true"/> <sql>
DROP TRIGGER IF EXISTS mod_mail_subscriber_insert_trigger ON mod_mail_subscriber;
CREATE TRIGGER mod_mail_subscriber_insert_trigger BEFORE INSERT ON mod_mail_subscriber FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -6,33 +6,51 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="modmail_thread-table"> <changeSet author="Sheldan" id="mod_mail_thread-table">
<createTable tableName="modmail_thread"> <createTable tableName="mod_mail_thread">
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_thread_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="mod_mail_thread_pkey"/>
</column>
<column name="closed" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column> </column>
<column name="closed" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="state" type="VARCHAR(255)"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="modmail_thread_channel" type="BIGINT"> <column name="state" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="channel_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="modmail_thread_server" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="modmail_user" type="BIGINT"> <column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_mod_mail_thread_user" tableName="mod_mail_thread">
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_channel"> <column name="user_in_server_id"/>
<addForeignKeyConstraint baseColumnNames="modmail_thread_channel" baseTableName="modmail_thread" constraintName="fk_modmail_thread_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> </createIndex>
</changeSet> <createIndex indexName="idx_mod_mail_thread_channel" tableName="mod_mail_thread">
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_user"> <column name="channel_id"/>
<addForeignKeyConstraint baseColumnNames="modmail_user" baseTableName="modmail_thread" constraintName="fk_modmail_thread_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/> </createIndex>
</changeSet> <createIndex indexName="idx_mod_mail_thread_user_state" tableName="mod_mail_thread">
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_server"> <column name="user_in_server_id"/>
<addForeignKeyConstraint baseColumnNames="modmail_thread_server" baseTableName="modmail_thread" constraintName="fk_modmail_thread_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <column name="state"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="mod_mail_thread" constraintName="fk_mod_mail_thread_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
<addForeignKeyConstraint baseColumnNames="user_in_server_id" baseTableName="mod_mail_thread" constraintName="fk_mod_mail_thread_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="mod_mail_thread" constraintName="fk_mod_mail_thread_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS mod_mail_thread_update_trigger ON mod_mail_thread;
CREATE TRIGGER mod_mail_thread_update_trigger BEFORE UPDATE ON mod_mail_thread FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS mod_mail_thread_insert_trigger ON mod_mail_thread;
CREATE TRIGGER mod_mail_thread_insert_trigger BEFORE INSERT ON mod_mail_thread FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -17,7 +17,7 @@ import java.time.Instant;
@Entity @Entity
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table(name = "modmail_message") @Table(name = "mod_mail_message")
@Getter @Getter
@Setter @Setter
@EqualsAndHashCode @EqualsAndHashCode
@@ -29,6 +29,7 @@ public class ModMailMessage implements Serializable {
* The ID of the message which caused this message to be created, either the message containing the command or the message received from the user * The ID of the message which caused this message to be created, either the message containing the command or the message received from the user
*/ */
@Id @Id
@Column(name = "id")
private Long messageId; private Long messageId;
/** /**
@@ -38,41 +39,39 @@ public class ModMailMessage implements Serializable {
*/ */
@Column(name = "created_message_in_dm") @Column(name = "created_message_in_dm")
private Long createdMessageInDM; private Long createdMessageInDM;
@Column @Column(name = "created_message_in_channel")
private Long createdMessageInChannel; private Long createdMessageInChannel;
/** /**
* The {@link AUserInAServer} which authored this message * The {@link AUserInAServer} which authored this message
*/ */
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_message_author", nullable = false) @JoinColumn(name = "author_user_in_server_id", nullable = false)
private AUserInAServer author; private AUserInAServer author;
/** /**
* The {@link ModMailThread} in whose context this message was sent and this message is related to * The {@link ModMailThread} in whose context this message was sent and this message is related to
*/ */
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "threadReference", nullable = false) @JoinColumn(name = "thread_id", nullable = false)
private ModMailThread threadReference; private ModMailThread threadReference;
/** /**
* true: message was send via command, false: message was send from the user * true: message was send via command, false: message was send from the user
* This is used to decide where to get the message from in case of logging, because the user might delete the message and we do not want to re-parse the command message * This is used to decide where to get the message from in case of logging, because the user might delete the message and we do not want to re-parse the command message
*/ */
@Column @Column(name = "dm_channel")
private Boolean dmChannel; private Boolean dmChannel;
/** /**
* Staff only: Whether or not this message meant to be sent anonymous * Staff only: Whether or not this message meant to be sent anonymous
*/ */
@Column @Column(name = "anonymous")
private Boolean anonymous; private Boolean anonymous;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist @Column(name = "updated")
private void onInsert() { private Instant updated;
this.created = Instant.now();
}
} }

View File

@@ -17,7 +17,7 @@ import java.time.Instant;
@Entity @Entity
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table(name = "modmail_role") @Table(name = "mod_mail_role")
@Getter @Getter
@Setter @Setter
@EqualsAndHashCode @EqualsAndHashCode
@@ -29,6 +29,7 @@ public class ModMailRole implements Serializable {
* Unique ID of the mod mail role * Unique ID of the mod mail role
*/ */
@Id @Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long modMailRoleId; private Long modMailRoleId;
@@ -36,29 +37,20 @@ public class ModMailRole implements Serializable {
* Which {@link AServer} this role is associated with, for convenience * Which {@link AServer} this role is associated with, for convenience
*/ */
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_role_server", nullable = false) @JoinColumn(name = "server_id", nullable = false)
private AServer server; private AServer server;
/** /**
* The actual {@link ARole} which this mod mail role references * The actual {@link ARole} which this mod mail role references
*/ */
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_role", nullable = false) @JoinColumn(name = "role_id", nullable = false)
private ARole role; private ARole role;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -20,7 +20,7 @@ import java.util.List;
@Entity @Entity
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table(name = "modmail_thread") @Table(name = "mod_mail_thread")
@Getter @Getter
@Setter @Setter
@EqualsAndHashCode @EqualsAndHashCode
@@ -30,46 +30,37 @@ public class ModMailThread implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id; private Long id;
/** /**
* The member who opened the thread or who got contacted * The member who opened the thread or who got contacted
*/ */
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_user", nullable = false) @JoinColumn(name = "user_in_server_id", nullable = false)
private AUserInAServer user; private AUserInAServer user;
/** /**
* The text channel in which this thread is dealt with * The text channel in which this thread is dealt with
*/ */
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_thread_channel", nullable = false) @JoinColumn(name = "channel_id", nullable = false)
private AChannel channel; private AChannel channel;
/** /**
* The server on which this mod mail thread is, for convenience * The server on which this mod mail thread is, for convenience
*/ */
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_thread_server", nullable = false) @JoinColumn(name = "server_id", nullable = false)
private AServer server; private AServer server;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate @Column(name = "closed")
private void onUpdate() {
this.updated = Instant.now();
}
@Column
private Instant closed; private Instant closed;
/** /**
@@ -101,7 +92,7 @@ public class ModMailThread implements Serializable {
* The current state of the mod mail thread. Whether or not the last post was by staff or user. * The current state of the mod mail thread. Whether or not the last post was by staff or user.
*/ */
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
@Column @Column(name = "state")
private ModMailThreadState state; private ModMailThreadState state;
} }

View File

@@ -15,7 +15,7 @@ import java.time.Instant;
@Entity @Entity
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table(name = "modmail_subscriber") @Table(name = "mod_mail_subscriber")
@Getter @Getter
@Setter @Setter
@EqualsAndHashCode @EqualsAndHashCode
@@ -25,28 +25,27 @@ public class ModMailThreadSubscriber {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long subscriberId; private Long subscriberId;
/** /**
* The staff member which is subscribed * The staff member which is subscribed
*/ */
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_thread_subscriber", nullable = false) @JoinColumn(name = "user_in_server_id", nullable = false)
private AUserInAServer subscriber; private AUserInAServer subscriber;
/** /**
* The thread for which the member is subscribed to * The thread for which the member is subscribed to
*/ */
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "modMailThread", nullable = false) @JoinColumn(name = "mod_mail_thread_id", nullable = false)
private ModMailThread threadReference; private ModMailThread threadReference;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist @Column(name = "updated")
private void onInsert() { private Instant updated;
this.created = Instant.now();
}
} }

View File

@@ -8,22 +8,45 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="tracked_emote-table"> <changeSet author="Sheldan" id="tracked_emote-table">
<createTable tableName="tracked_emote"> <createTable tableName="tracked_emote">
<column name="id" type="BIGINT" /> <column name="id" type="BIGINT" >
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="name" type="VARCHAR(32)"/> <column name="name" type="VARCHAR(32)">
<column name="animated" type="BOOLEAN"/> <constraints nullable="true"/>
<column name="tracking_enabled" type="BOOLEAN"/> </column>
<column name="deleted" type="BOOLEAN"/> <column name="animated" type="BOOLEAN">
<column name="external" type="BOOLEAN"/> <constraints nullable="true"/>
</column>
<column name="tracking_enabled" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="deleted" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="external" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="external_url" type="VARCHAR(255)"/> <column name="external_url" type="VARCHAR(255)"/>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<createIndex indexName="idx_tracked_emote_server_id" tableName="tracked_emote">
<column name="server_id"/>
</createIndex>
<addPrimaryKey columnNames="server_id, id" tableName="tracked_emote" constraintName="pk_tracked_emote" validate="true"/> <addPrimaryKey columnNames="server_id, id" tableName="tracked_emote" constraintName="pk_tracked_emote" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="tracked_emote-fk_tracked_emote_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="tracked_emote" constraintName="fk_tracked_emote_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="tracked_emote" constraintName="fk_tracked_emote_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS tracked_emote_update_trigger ON tracked_emote;
CREATE TRIGGER tracked_emote_update_trigger BEFORE UPDATE ON tracked_emote FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS tracked_emote_insert_trigger ON tracked_emote;
CREATE TRIGGER tracked_emote_insert_trigger BEFORE INSERT ON tracked_emote FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -8,17 +8,39 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="used_emote-table"> <changeSet author="Sheldan" id="used_emote-table">
<createTable tableName="used_emote"> <createTable tableName="used_emote">
<column name="emote_id" type="BIGINT" /> <column name="emote_id" type="BIGINT" >
<column name="server_id" type="BIGINT" /> <constraints nullable="true"/>
<column name="use_date" type="DATE" /> </column>
<column name="amount" type="BIGINT"/> <column name="server_id" type="BIGINT" >
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="use_date" type="DATE" >
<constraints nullable="true"/>
</column>
<column name="amount" type="BIGINT">
<constraints nullable="true"/>
</column>
</createTable> </createTable>
<createIndex indexName="idx_used_emote" tableName="used_emote">
<column name="emote_id"/>
<column name="server_id"/>
<column name="use_date"/>
</createIndex>
<addPrimaryKey columnNames="server_id, emote_id, use_date" tableName="used_emote" constraintName="pk_used_emote" validate="true"/> <addPrimaryKey columnNames="server_id, emote_id, use_date" tableName="used_emote" constraintName="pk_used_emote" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="used_emote-fk_used_emote_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="used_emote" constraintName="fk_used_emote_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="used_emote" constraintName="fk_used_emote_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="used_emote-fk_used_emote_tracked_emote">
<addForeignKeyConstraint baseColumnNames="emote_id, server_id" baseTableName="used_emote" constraintName="fk_used_emote_tracked_emote" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id, server_id" referencedTableName="tracked_emote" validate="true"/> <addForeignKeyConstraint baseColumnNames="emote_id, server_id" baseTableName="used_emote" constraintName="fk_used_emote_tracked_emote" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id, server_id" referencedTableName="tracked_emote" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS used_emote_update_trigger ON used_emote;
CREATE TRIGGER used_emote_update_trigger BEFORE UPDATE ON used_emote FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS used_emote_insert_trigger ON used_emote;
CREATE TRIGGER used_emote_insert_trigger BEFORE INSERT ON used_emote FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -78,19 +78,9 @@ public class TrackedEmote implements Serializable, Fakeable {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
/** /**
* Some emotes are build on demand, and do not necessarily be persisted. This happens when the emote is being used as a * Some emotes are build on demand, and do not necessarily be persisted. This happens when the emote is being used as a
* {@link dev.sheldan.abstracto.core.command.config.Parameter}. * {@link dev.sheldan.abstracto.core.command.config.Parameter}.

View File

@@ -5,6 +5,7 @@ import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*; import javax.persistence.*;
import java.time.Instant;
/** /**
* An actual instance which has been used on a certain date with a certain amount. * An actual instance which has been used on a certain date with a certain amount.
@@ -43,4 +44,10 @@ public class UsedEmote {
*/ */
@Column(name = "amount") @Column(name = "amount")
private Long amount; private Long amount;
@Column(name = "created")
private Instant created;
@Column(name = "updated")
private Instant updated;
} }

View File

@@ -18,12 +18,11 @@ public interface StarboardPostReactionRepository extends JpaRepository<Starboard
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
void deleteByStarboardPost(StarboardPost post); void deleteByStarboardPost(StarboardPost post);
@Query(value = "SELECT r.reactor_id as userId, COUNT(*) AS starCount \n" + @Query(value = "SELECT r.reactor_user_in_server_id as userId, COUNT(*) AS starCount \n" +
"FROM starboard_post_reaction r \n" + "FROM starboard_post_reaction r \n" +
"INNER JOIN starboard_post p ON p.id = r.post_id\n" + "INNER JOIN starboard_post p ON p.id = r.post_id\n" +
"INNER JOIN channel c ON c.id = p.channel_id\n" + "WHERE p.server_id = :serverId\n" +
"WHERE c.server_id = :serverId\n" + "GROUP BY r.reactor_user_in_server_id \n" +
"GROUP BY r.reactor_id \n" +
"ORDER BY starCount DESC \n" + "ORDER BY starCount DESC \n" +
"LIMIT :count", nativeQuery = true) "LIMIT :count", nativeQuery = true)
List<StarStatsUserResult> findTopStarGiverInServer(Long serverId, Integer count); List<StarStatsUserResult> findTopStarGiverInServer(Long serverId, Integer count);
@@ -31,17 +30,15 @@ public interface StarboardPostReactionRepository extends JpaRepository<Starboard
@Query(value = "SELECT COUNT(*) \n" + @Query(value = "SELECT COUNT(*) \n" +
"FROM starboard_post_reaction r \n" + "FROM starboard_post_reaction r \n" +
"INNER JOIN starboard_post p ON p.id = r.post_id\n" + "INNER JOIN starboard_post p ON p.id = r.post_id\n" +
"INNER JOIN channel c ON c.id = p.channel_id\n" + "WHERE p.server_id = :serverId\n"
"WHERE c.server_id = :serverId\n"
, nativeQuery = true) , nativeQuery = true)
Integer getReactionCountByServer(Long serverId); Integer getReactionCountByServer(Long serverId);
@Query(value = "SELECT p.poster as userId, COUNT(*) AS starCount \n" + @Query(value = "SELECT p.author_user_in_server_id as userId, COUNT(*) AS starCount \n" +
"FROM starboard_post_reaction r \n" + "FROM starboard_post_reaction r \n" +
"INNER JOIN starboard_post p ON p.id = r.post_id\n" + "INNER JOIN starboard_post p ON p.id = r.post_id\n" +
"INNER JOIN channel c ON c.id = p.channel_id\n" + "WHERE p.server_id = :serverId\n" +
"WHERE c.server_id = :serverId\n" + "GROUP BY p.author_user_in_server_id \n" +
"GROUP BY p.poster \n" +
"ORDER BY starCount DESC \n" + "ORDER BY starCount DESC \n" +
"LIMIT :count", nativeQuery = true) "LIMIT :count", nativeQuery = true)
List<StarStatsUserResult> retrieveTopStarReceiverInServer(Long serverId, Integer count); List<StarStatsUserResult> retrieveTopStarReceiverInServer(Long serverId, Integer count);

View File

@@ -21,6 +21,6 @@ public interface StarboardPostRepository extends JpaRepository<StarboardPost, Lo
boolean existsByStarboardMessageId(Long messageId); boolean existsByStarboardMessageId(Long messageId);
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
List<StarboardPost> findByStarboardChannelServerId(Long serverId); List<StarboardPost> findByServer(Long serverId);
} }

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.utility.repository; package dev.sheldan.abstracto.utility.repository;
import dev.sheldan.abstracto.core.models.ServerSpecificId;
import dev.sheldan.abstracto.utility.models.database.Suggestion; import dev.sheldan.abstracto.utility.models.database.Suggestion;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
@@ -11,9 +12,9 @@ import javax.persistence.QueryHint;
import java.util.Optional; import java.util.Optional;
@Repository @Repository
public interface SuggestionRepository extends JpaRepository<Suggestion, Long> { public interface SuggestionRepository extends JpaRepository<Suggestion, ServerSpecificId> {
@NotNull @NotNull
@Override @Override
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
Optional<Suggestion> findById(@NonNull Long aLong); Optional<Suggestion> findById(@NonNull ServerSpecificId aLong);
} }

View File

@@ -101,7 +101,7 @@ public class SuggestionServiceBean implements SuggestionService {
@Override @Override
public CompletableFuture<Void> acceptSuggestion(Long suggestionId, String text, SuggestionLog suggestionLog) { public CompletableFuture<Void> acceptSuggestion(Long suggestionId, String text, SuggestionLog suggestionLog) {
Suggestion suggestion = suggestionManagementService.getSuggestion(suggestionId).orElseThrow(() -> new SuggestionNotFoundException(suggestionId)); Suggestion suggestion = suggestionManagementService.getSuggestion(suggestionId, suggestionLog.getGuild().getIdLong()).orElseThrow(() -> new SuggestionNotFoundException(suggestionId));
suggestionManagementService.setSuggestionState(suggestion, SuggestionState.ACCEPTED); suggestionManagementService.setSuggestionState(suggestion, SuggestionState.ACCEPTED);
log.info("Accepting suggestion {} in server {}.", suggestionId, suggestion.getServer().getId()); log.info("Accepting suggestion {} in server {}.", suggestionId, suggestion.getServer().getId());
return updateSuggestion(text, suggestionLog, suggestion); return updateSuggestion(text, suggestionLog, suggestion);
@@ -155,7 +155,7 @@ public class SuggestionServiceBean implements SuggestionService {
@Override @Override
public CompletableFuture<Void> rejectSuggestion(Long suggestionId, String text, SuggestionLog suggestionLog) { public CompletableFuture<Void> rejectSuggestion(Long suggestionId, String text, SuggestionLog suggestionLog) {
Suggestion suggestion = suggestionManagementService.getSuggestion(suggestionId).orElseThrow(() -> new SuggestionNotFoundException(suggestionId)); Suggestion suggestion = suggestionManagementService.getSuggestion(suggestionId, suggestionLog.getGuild().getIdLong()).orElseThrow(() -> new SuggestionNotFoundException(suggestionId));
suggestionManagementService.setSuggestionState(suggestion, SuggestionState.REJECTED); suggestionManagementService.setSuggestionState(suggestion, SuggestionState.REJECTED);
log.info("Rejecting suggestion {} in server {}.", suggestionId, suggestion.getServer().getId()); log.info("Rejecting suggestion {} in server {}.", suggestionId, suggestion.getServer().getId());
return updateSuggestion(text, suggestionLog, suggestion); return updateSuggestion(text, suggestionLog, suggestion);

View File

@@ -36,6 +36,7 @@ public class StarboardPostManagementServiceBean implements StarboardPostManageme
.postMessageId(starredMessage.getMessageId()) .postMessageId(starredMessage.getMessageId())
.sourceChanel(build) .sourceChanel(build)
.ignored(false) .ignored(false)
.server(starboardPost.getServer())
.starboardMessageId(starboardPost.getMessageId()) .starboardMessageId(starboardPost.getMessageId())
.starboardChannel(starboardPost.getChannel()) .starboardChannel(starboardPost.getChannel())
.starredDate(Instant.now()) .starredDate(Instant.now())
@@ -64,7 +65,7 @@ public class StarboardPostManagementServiceBean implements StarboardPostManageme
@Override @Override
public List<StarboardPost> retrieveAllPosts(Long serverId) { public List<StarboardPost> retrieveAllPosts(Long serverId) {
return repository.findByStarboardChannelServerId(serverId); return repository.findByServer(serverId);
} }
@Override @Override
@@ -100,5 +101,4 @@ public class StarboardPostManagementServiceBean implements StarboardPostManageme
repository.delete(starboardPost); repository.delete(starboardPost);
} }
} }

View File

@@ -61,8 +61,8 @@ public class SuggestionManagementServiceBean implements SuggestionManagementServ
} }
@Override @Override
public Optional<Suggestion> getSuggestion(Long suggestionId) { public Optional<Suggestion> getSuggestion(Long suggestionId, Long serverId) {
return suggestionRepository.findById(suggestionId); return suggestionRepository.findById(new ServerSpecificId(serverId, suggestionId));
} }

View File

@@ -11,15 +11,20 @@
<column name="embedding_message_id" type="BIGINT"> <column name="embedding_message_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="embedded_message_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="embedded_message_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="embedded_message_id" type="BIGINT"/> <constraints nullable="true"/>
<column name="original_channel" type="BIGINT"> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="embedded_message_id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="embedded_channel_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="original_server" type="BIGINT"> <column name="embedded_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="embedded_user" type="BIGINT"> <column name="embedded_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="embedding_channel" type="BIGINT"> <column name="embedding_channel" type="BIGINT">
@@ -28,27 +33,24 @@
<column name="embedding_server" type="BIGINT"> <column name="embedding_server" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="embedding_user" type="BIGINT"> <column name="embedding_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="embedded_message-fk_embed_channel">
<addForeignKeyConstraint baseColumnNames="embedding_channel" baseTableName="embedded_message" constraintName="fk_embed_channel_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="embedding_channel" baseTableName="embedded_message" constraintName="fk_embed_channel_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="embedded_channel_id" baseTableName="embedded_message" constraintName="fk_embed_embedded_channel_id_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
<changeSet author="Sheldan" id="embedded_message-fk_original_channel"> <addForeignKeyConstraint baseColumnNames="embedding_user_in_server_id" baseTableName="embedded_message" constraintName="fk_embedded_user_in_server_id_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="original_channel" baseTableName="embedded_message" constraintName="fk_embed_original_channel_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="embedded_user_in_server_id" baseTableName="embedded_message" constraintName="fk_embedding_user_in_server_id_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="embedded_message-fk_embedded_user">
<addForeignKeyConstraint baseColumnNames="embedding_user" baseTableName="embedded_message" constraintName="fk_embedded_user_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="embedded_message-fk_embedding_user">
<addForeignKeyConstraint baseColumnNames="embedded_user" baseTableName="embedded_message" constraintName="fk_embedding_user_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="embedded_message-fk_embedding_server">
<addForeignKeyConstraint baseColumnNames="embedding_server" baseTableName="embedded_message" constraintName="fk_embedding_server_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="embedding_server" baseTableName="embedded_message" constraintName="fk_embedding_server_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="embedded_server_id" baseTableName="embedded_message" constraintName="fk_embed_embedded_server_id_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS embedded_message_update_trigger ON embedded_message;
CREATE TRIGGER embedded_message_update_trigger BEFORE UPDATE ON embedded_message FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS embedded_message_insert_trigger ON embedded_message;
CREATE TRIGGER embedded_message_insert_trigger BEFORE INSERT ON embedded_message FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="embedded_message-fk_original_server">
<addForeignKeyConstraint baseColumnNames="original_server" baseTableName="embedded_message" constraintName="fk_embed_original_server_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -8,9 +8,13 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="posted_image-table"> <changeSet author="Sheldan" id="posted_image-table">
<createTable tableName="posted_image"> <createTable tableName="posted_image">
<column name="message_id" type="BIGINT" /> <column name="message_id" type="BIGINT" >
<column name="position" type="INTEGER" /> <constraints nullable="true"/>
<column name="posting_user_id" type="BIGINT"> </column>
<column name="position" type="INTEGER" >
<constraints nullable="true"/>
</column>
<column name="author_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="posted_channel_id" type="BIGINT"> <column name="posted_channel_id" type="BIGINT">
@@ -22,25 +26,33 @@
<column name="image_hash" type="VARCHAR(512)"> <column name="image_hash" type="VARCHAR(512)">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<createIndex indexName="idx_posted_image_hash_server" tableName="posted_image">
<column name="image_hash"/>
<column name="server_id"/>
</createIndex>
<addPrimaryKey columnNames="message_id, position" tableName="posted_image" constraintName="pk_posted_image" validate="true"/> <addPrimaryKey columnNames="message_id, position" tableName="posted_image" constraintName="pk_posted_image" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="author_user_in_server_id" baseTableName="posted_image" constraintName="fk_posted_image_user"
<changeSet author="Sheldan" id="posted_image-fk_posted_image_user">
<addForeignKeyConstraint baseColumnNames="posting_user_id" baseTableName="posted_image" constraintName="fk_posted_image_user"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/> referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="posted_image-fk_posted_image_channel">
<addForeignKeyConstraint baseColumnNames="posted_channel_id" baseTableName="posted_image" constraintName="fk_posted_image_channel" <addForeignKeyConstraint baseColumnNames="posted_channel_id" baseTableName="posted_image" constraintName="fk_posted_image_channel"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
referencedTableName="channel" validate="true"/> referencedTableName="channel" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="posted_image-fk_posted_image_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="posted_image" constraintName="fk_posted_image_server" <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="posted_image" constraintName="fk_posted_image_server"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
referencedTableName="server" validate="true"/> referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS posted_image_update_trigger ON posted_image;
CREATE TRIGGER posted_image_update_trigger BEFORE UPDATE ON posted_image FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS posted_image_insert_trigger ON posted_image;
CREATE TRIGGER posted_image_insert_trigger BEFORE INSERT ON posted_image FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -12,32 +12,46 @@
<constraints nullable="false" primaryKey="true" primaryKeyName="reminder_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="reminder_pkey"/>
</column> </column>
<column name="job_trigger_key" type="VARCHAR(255)"/> <column name="job_trigger_key" type="VARCHAR(255)"/>
<column name="message_id" type="BIGINT"/> <column name="message_id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="reminded" type="BOOLEAN"> <column name="reminded" type="BOOLEAN">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="target_date" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
<column name="text" type="VARCHAR(255)"/> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="target_date" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="text" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="channel_id" type="BIGINT"> <column name="channel_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="reminded_user" type="BIGINT"> <column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_reminder_user_reminded" tableName="reminder">
<changeSet author="Sheldan" id="reminder-fk_reminder_channel"> <column name="user_in_server_id"/>
<column name="reminded"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="reminder" constraintName="fk_reminder_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="reminder" constraintName="fk_reminder_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="user_in_server_id" baseTableName="reminder" constraintName="fk_reminder_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<changeSet author="Sheldan" id="reminder-fk_reminded_user">
<addForeignKeyConstraint baseColumnNames="reminded_user" baseTableName="reminder" constraintName="fk_reminder_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="reminder-fk_reminder_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="reminder" constraintName="fk_reminder_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="reminder" constraintName="fk_reminder_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS reminder_update_trigger ON reminder;
CREATE TRIGGER reminder_update_trigger BEFORE UPDATE ON reminder FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS reminder_insert_trigger ON reminder;
CREATE TRIGGER reminder_insert_trigger BEFORE INSERT ON reminder FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -8,8 +8,12 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="repost-table"> <changeSet author="Sheldan" id="repost-table">
<createTable tableName="repost"> <createTable tableName="repost">
<column name="message_id" type="BIGINT" /> <column name="message_id" type="BIGINT" >
<column name="position" type="INTEGER" /> <constraints nullable="true"/>
</column>
<column name="position" type="INTEGER" >
<constraints nullable="true"/>
</column>
<column name="user_in_server_id" type="BIGINT"> <column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
@@ -19,26 +23,29 @@
<column name="count" type="INTEGER"> <column name="count" type="INTEGER">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<addPrimaryKey columnNames="message_id, position, user_in_server_id" tableName="repost" constraintName="pk_repost" validate="true"/> <addPrimaryKey columnNames="message_id, position, user_in_server_id" tableName="repost" constraintName="pk_repost" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="repost-fk_repost_server">
<addForeignKeyConstraint baseColumnNames="user_in_server_id" baseTableName="repost" constraintName="fk_repost_server" <addForeignKeyConstraint baseColumnNames="user_in_server_id" baseTableName="repost" constraintName="fk_repost_server"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
referencedColumnNames="id" referencedTableName="server" validate="true"/> referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="repost-fk_repost_posted_image">
<addForeignKeyConstraint baseColumnNames="message_id, position" baseTableName="repost" constraintName="fk_repost_posted_image" <addForeignKeyConstraint baseColumnNames="message_id, position" baseTableName="repost" constraintName="fk_repost_posted_image"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="message_id, position" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="message_id, position"
referencedTableName="posted_image" validate="true"/> referencedTableName="posted_image" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="repost-fk_repost_user_in_server">
<addForeignKeyConstraint baseColumnNames="user_in_server_id" baseTableName="repost" constraintName="fk_repost_user_in_server" <addForeignKeyConstraint baseColumnNames="user_in_server_id" baseTableName="repost" constraintName="fk_repost_user_in_server"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id"
referencedTableName="user_in_server" validate="true"/> referencedTableName="user_in_server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS repost_update_trigger ON repost;
CREATE TRIGGER repost_update_trigger BEFORE UPDATE ON repost FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS repost_insert_trigger ON repost;
CREATE TRIGGER repost_insert_trigger BEFORE INSERT ON repost FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -8,16 +8,28 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="repost_check_channel_group-table"> <changeSet author="Sheldan" id="repost_check_channel_group-table">
<createTable tableName="repost_check_channel_group"> <createTable tableName="repost_check_channel_group">
<column name="id" type="BIGINT" /> <column name="id" type="BIGINT">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="enabled" type="BOOLEAN"/> <column name="enabled" type="BOOLEAN">
<constraints nullable="true"/>
</column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="repost_check_channel_group-fk_repost_check_channel_group_group">
<addForeignKeyConstraint baseColumnNames="id" baseTableName="repost_check_channel_group" constraintName="fk_repost_check_channel_group_group" <addForeignKeyConstraint baseColumnNames="id" baseTableName="repost_check_channel_group" constraintName="fk_repost_check_channel_group_group"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel_group" validate="true"/> deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel_group" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS repost_check_channel_group_update_trigger ON repost_check_channel_group;
CREATE TRIGGER repost_check_channel_group_update_trigger BEFORE UPDATE ON repost_check_channel_group FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS repost_check_channel_group_insert_trigger ON repost_check_channel_group;
CREATE TRIGGER repost_check_channel_group_insert_trigger BEFORE INSERT ON repost_check_channel_group FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,13 +11,23 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="starboard_post_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="starboard_post_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="ignored" type="BOOLEAN">
<column name="ignored" type="BOOLEAN"/> <constraints nullable="true"/>
<column name="post_message_id" type="BIGINT"/> </column>
<column name="starboard_message_id" type="BIGINT"/> <column name="post_message_id" type="BIGINT">
<column name="starred_date" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="starboard_message_id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="starred_date" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="poster" type="BIGINT"> <column name="author_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="source_channel_id" type="BIGINT"> <column name="source_channel_id" type="BIGINT">
@@ -26,17 +36,34 @@
<column name="channel_id" type="BIGINT"> <column name="channel_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_starboard_post_message" tableName="starboard_post">
<changeSet author="Sheldan" id="starboard-fk_starboard_post_poster"> <column name="post_message_id"/>
<addForeignKeyConstraint baseColumnNames="poster" baseTableName="starboard_post" constraintName="fk_starboard_post_poster" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/> </createIndex>
</changeSet> <createIndex indexName="idx_starboard_starboard_message" tableName="starboard_post">
<changeSet author="Sheldan" id="starboard-fk_starboard_post_channel"> <column name="starboard_message_id"/>
</createIndex>
<createIndex indexName="idx_starboard_server" tableName="starboard_post">
<column name="server_id"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="author_user_in_server_id" baseTableName="starboard_post" constraintName="fk_starboard_post_author_user_in_server_id" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="starboard_post" constraintName="fk_starboard_post_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="starboard_post" constraintName="fk_starboard_post_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="starboard-fk_starboard_post_source_channel">
<addForeignKeyConstraint baseColumnNames="source_channel_id" baseTableName="starboard_post" constraintName="fk_starboard_post_source_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="source_channel_id" baseTableName="starboard_post" constraintName="fk_starboard_post_source_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="starboard_post" constraintName="fk_starboard_post_server"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS starboard_post_update_trigger ON starboard_post;
CREATE TRIGGER starboard_post_update_trigger BEFORE UPDATE ON starboard_post FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS starboard_insert_trigger ON starboard_post;
CREATE TRIGGER starboard_post_insert_trigger BEFORE INSERT ON starboard_post FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,18 +11,28 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="starboard_post_reaction_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="starboard_post_reaction_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="reactor_id" type="BIGINT"> <constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="reactor_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="post_id" type="BIGINT"/> <column name="post_id" type="BIGINT">
<constraints nullable="true"/>
</column>
</createTable> </createTable>
</changeSet> <addForeignKeyConstraint baseColumnNames="reactor_user_in_server_id" baseTableName="starboard_post_reaction" constraintName="fk_starboard_post_reaction_reactor" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<changeSet author="Sheldan" id="starboard_post_reaction-fk_starboard_post_reaction_reactor">
<addForeignKeyConstraint baseColumnNames="reactor_id" baseTableName="starboard_post_reaction" constraintName="fk_starboard_post_reaction_reactor" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="starboard_post_reaction-fk_starboard_post_reaction_post">
<addForeignKeyConstraint baseColumnNames="post_id" baseTableName="starboard_post_reaction" constraintName="fk_starboard_post_reaction_post" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="starboard_post" validate="true"/> <addForeignKeyConstraint baseColumnNames="post_id" baseTableName="starboard_post_reaction" constraintName="fk_starboard_post_reaction_post" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="starboard_post" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS starboard_post_reaction_update_trigger ON starboard_post_reaction;
CREATE TRIGGER starboard_post_reaction_update_trigger BEFORE UPDATE ON starboard_post_reaction FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS starboard_post_reaction_insert_trigger ON starboard_post_reaction;
CREATE TRIGGER starboard_post_reaction_insert_trigger BEFORE INSERT ON starboard_post_reaction FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -8,27 +8,46 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="suggestion-table"> <changeSet author="Sheldan" id="suggestion-table">
<createTable tableName="suggestion"> <createTable tableName="suggestion">
<column autoIncrement="true" name="id" type="BIGINT"/> <column name="id" type="BIGINT">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
<column name="message_id" type="BIGINT"/> </column>
<column name="state" type="VARCHAR(255)"/> <column name="message_id" type="BIGINT">
<column name="suggestion_date" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="state" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="suggestion_date" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="channel_id" type="BIGINT"/> <column name="channel_id" type="BIGINT">
<column name="server_id" type="BIGINT"/> <constraints nullable="true"/>
<column name="suggester_id" type="BIGINT"> </column>
<column name="server_id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="suggester_user_in_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<addPrimaryKey columnNames="server_id, id" tableName="suggestion" constraintName="pk_suggestion" validate="true"/> <addPrimaryKey columnNames="server_id, id" tableName="suggestion" constraintName="pk_suggestion" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="suggestion-fk_suggestion_channel">
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="suggestion" constraintName="fk_suggestion_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="suggestion" constraintName="fk_suggestion_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet> <addForeignKeyConstraint baseColumnNames="suggester_user_in_server_id" baseTableName="suggestion" constraintName="fk_suggestion_suggester" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
<changeSet author="Sheldan" id="suggestion-fk_suggestion_suggester">
<addForeignKeyConstraint baseColumnNames="suggester_id" baseTableName="suggestion" constraintName="fk_suggestion_suggester" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="user_in_server_id" referencedTableName="user_in_server" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="suggestion-fk_suggestion_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="suggestion" constraintName="fk_suggestion_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="suggestion" constraintName="fk_suggestion_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS suggestion_update_trigger ON suggestion;
CREATE TRIGGER suggestion_update_trigger BEFORE UPDATE ON suggestion FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS suggestion_insert_trigger ON suggestion;
CREATE TRIGGER suggestion_insert_trigger BEFORE INSERT ON suggestion FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
<sql>
ALTER TABLE suggestion ADD CONSTRAINT check_suggestion_state CHECK (state IN ('NEW','ACCEPTED', 'REJECTED'));
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -139,8 +139,11 @@ public class SuggestionServiceBeanTest {
@Test(expected = SuggestionNotFoundException.class) @Test(expected = SuggestionNotFoundException.class)
public void testAcceptNotExistingSuggestion() { public void testAcceptNotExistingSuggestion() {
when(suggestionManagementService.getSuggestion(SUGGESTION_ID)).thenReturn(Optional.empty()); when(suggestionManagementService.getSuggestion(SUGGESTION_ID, SERVER_ID)).thenReturn(Optional.empty());
testUnit.acceptSuggestion(SUGGESTION_ID, CLOSING_TEXT, SuggestionLog.builder().build()); SuggestionLog log = Mockito.mock(SuggestionLog.class);
when(log.getGuild()).thenReturn(guild);
when(guild.getIdLong()).thenReturn(SERVER_ID);
testUnit.acceptSuggestion(SUGGESTION_ID, CLOSING_TEXT, log);
} }
@Test @Test
@@ -151,7 +154,10 @@ public class SuggestionServiceBeanTest {
@Test(expected = ChannelNotInGuildException.class) @Test(expected = ChannelNotInGuildException.class)
public void testAcceptSuggestionInNoTextChannel() { public void testAcceptSuggestionInNoTextChannel() {
setupForNoTextChannel(); setupForNoTextChannel();
testUnit.acceptSuggestion(SUGGESTION_ID, CLOSING_TEXT, SuggestionLog.builder().build()); SuggestionLog log = Mockito.mock(SuggestionLog.class);
when(log.getGuild()).thenReturn(guild);
when(guild.getIdLong()).thenReturn(SERVER_ID);
testUnit.acceptSuggestion(SUGGESTION_ID, CLOSING_TEXT, log);
} }
private void setupForNoTextChannel() { private void setupForNoTextChannel() {
@@ -167,7 +173,7 @@ public class SuggestionServiceBeanTest {
when(server.getId()).thenReturn(SERVER_ID); when(server.getId()).thenReturn(SERVER_ID);
when(channel.getId()).thenReturn(CHANNEL_ID); when(channel.getId()).thenReturn(CHANNEL_ID);
when(channelService.getTextChannelFromServer(SERVER_ID, CHANNEL_ID)).thenThrow(new ChannelNotInGuildException(CHANNEL_ID)); when(channelService.getTextChannelFromServer(SERVER_ID, CHANNEL_ID)).thenThrow(new ChannelNotInGuildException(CHANNEL_ID));
when(suggestionManagementService.getSuggestion(SUGGESTION_ID)).thenReturn(Optional.of(suggestionToAccept)); when(suggestionManagementService.getSuggestion(SUGGESTION_ID, SERVER_ID)).thenReturn(Optional.of(suggestionToAccept));
} }
@Test(expected = SuggestionUpdateException.class) @Test(expected = SuggestionUpdateException.class)
@@ -200,8 +206,11 @@ public class SuggestionServiceBeanTest {
@Test(expected = SuggestionNotFoundException.class) @Test(expected = SuggestionNotFoundException.class)
public void testRejectNotExistingSuggestion() { public void testRejectNotExistingSuggestion() {
when(suggestionManagementService.getSuggestion(SUGGESTION_ID)).thenReturn(Optional.empty()); when(suggestionManagementService.getSuggestion(SUGGESTION_ID, SERVER_ID)).thenReturn(Optional.empty());
testUnit.rejectSuggestion(SUGGESTION_ID, CLOSING_TEXT, SuggestionLog.builder().build()); SuggestionLog log = Mockito.mock(SuggestionLog.class);
when(log.getGuild()).thenReturn(guild);
when(guild.getIdLong()).thenReturn(SERVER_ID);
testUnit.rejectSuggestion(SUGGESTION_ID, CLOSING_TEXT, log);
} }
@Test @Test
@@ -212,28 +221,35 @@ public class SuggestionServiceBeanTest {
@Test(expected = ChannelNotInGuildException.class) @Test(expected = ChannelNotInGuildException.class)
public void testRejectSuggestionInNoTextChannel() { public void testRejectSuggestionInNoTextChannel() {
setupForNoTextChannel(); setupForNoTextChannel();
testUnit.rejectSuggestion(SUGGESTION_ID, CLOSING_TEXT, SuggestionLog.builder().build()); SuggestionLog log = Mockito.mock(SuggestionLog.class);
when(log.getGuild()).thenReturn(guild);
when(guild.getIdLong()).thenReturn(SERVER_ID);
testUnit.rejectSuggestion(SUGGESTION_ID, CLOSING_TEXT, log);
} }
private void executeAcceptWithMember(Member actualMember) { private void executeAcceptWithMember(Member actualMember) {
Long messageId = 7L; Long messageId = 7L;
SuggestionLog logParameter = SuggestionLog.builder().build(); SuggestionLog log = Mockito.mock(SuggestionLog.class);
when(log.getGuild()).thenReturn(guild);
when(guild.getIdLong()).thenReturn(SERVER_ID);
Suggestion suggestionToAccept = setupClosing(messageId); Suggestion suggestionToAccept = setupClosing(messageId);
Message suggestionMessage = Mockito.mock(Message.class); Message suggestionMessage = Mockito.mock(Message.class);
when(channelService.retrieveMessageInChannel(textChannel, messageId)).thenReturn(CompletableFuture.completedFuture(suggestionMessage)); when(channelService.retrieveMessageInChannel(textChannel, messageId)).thenReturn(CompletableFuture.completedFuture(suggestionMessage));
when(memberService.getMemberInServerAsync(SERVER_ID, SUGGESTER_ID)).thenReturn(CompletableFuture.completedFuture(actualMember)); when(memberService.getMemberInServerAsync(SERVER_ID, SUGGESTER_ID)).thenReturn(CompletableFuture.completedFuture(actualMember));
testUnit.acceptSuggestion(SUGGESTION_ID, CLOSING_TEXT, logParameter); testUnit.acceptSuggestion(SUGGESTION_ID, CLOSING_TEXT, log);
verify(suggestionManagementService, times(1)).setSuggestionState(suggestionToAccept, SuggestionState.ACCEPTED); verify(suggestionManagementService, times(1)).setSuggestionState(suggestionToAccept, SuggestionState.ACCEPTED);
} }
private void executeRejectWithMember(Member actualMember) { private void executeRejectWithMember(Member actualMember) {
Long messageId = 7L; Long messageId = 7L;
SuggestionLog logParameter = SuggestionLog.builder().build(); SuggestionLog log = Mockito.mock(SuggestionLog.class);
when(log.getGuild()).thenReturn(guild);
when(guild.getIdLong()).thenReturn(SERVER_ID);
Suggestion suggestionToAccept = setupClosing(messageId); Suggestion suggestionToAccept = setupClosing(messageId);
Message suggestionMessage = Mockito.mock(Message.class); Message suggestionMessage = Mockito.mock(Message.class);
when(channelService.retrieveMessageInChannel(textChannel, messageId)).thenReturn(CompletableFuture.completedFuture(suggestionMessage)); when(channelService.retrieveMessageInChannel(textChannel, messageId)).thenReturn(CompletableFuture.completedFuture(suggestionMessage));
when(memberService.getMemberInServerAsync(SERVER_ID, SUGGESTER_ID)).thenReturn(CompletableFuture.completedFuture(actualMember)); when(memberService.getMemberInServerAsync(SERVER_ID, SUGGESTER_ID)).thenReturn(CompletableFuture.completedFuture(actualMember));
testUnit.rejectSuggestion(SUGGESTION_ID, CLOSING_TEXT, logParameter); testUnit.rejectSuggestion(SUGGESTION_ID, CLOSING_TEXT, log);
verify(suggestionManagementService, times(1)).setSuggestionState(suggestionToAccept, SuggestionState.REJECTED); verify(suggestionManagementService, times(1)).setSuggestionState(suggestionToAccept, SuggestionState.REJECTED);
} }
@@ -250,7 +266,7 @@ public class SuggestionServiceBeanTest {
when(channel.getId()).thenReturn(CHANNEL_ID); when(channel.getId()).thenReturn(CHANNEL_ID);
when(suggester.getUserReference()).thenReturn(suggesterUser); when(suggester.getUserReference()).thenReturn(suggesterUser);
when(suggesterUser.getId()).thenReturn(SUGGESTER_ID); when(suggesterUser.getId()).thenReturn(SUGGESTER_ID);
when(suggestionManagementService.getSuggestion(SUGGESTION_ID)).thenReturn(Optional.of(suggestionToAccept)); when(suggestionManagementService.getSuggestion(SUGGESTION_ID, SERVER_ID)).thenReturn(Optional.of(suggestionToAccept));
when(channelService.getTextChannelFromServer(SERVER_ID, CHANNEL_ID)).thenReturn(textChannel); when(channelService.getTextChannelFromServer(SERVER_ID, CHANNEL_ID)).thenReturn(textChannel);
return suggestionToAccept; return suggestionToAccept;
} }

View File

@@ -88,7 +88,7 @@ public class StarboardPostManagementServiceBeanTest {
StarboardPost starboardPost2 = StarboardPost.builder().reactions(Arrays.asList(reaction)).build(); StarboardPost starboardPost2 = StarboardPost.builder().reactions(Arrays.asList(reaction)).build();
StarboardPost starboardPost3 = StarboardPost.builder().reactions(new ArrayList<>()).build(); StarboardPost starboardPost3 = StarboardPost.builder().reactions(new ArrayList<>()).build();
List<StarboardPost> posts = Arrays.asList(starboardPost1, starboardPost2, starboardPost3); List<StarboardPost> posts = Arrays.asList(starboardPost1, starboardPost2, starboardPost3);
when(repository.findByStarboardChannelServerId(server.getId())).thenReturn(posts); when(repository.findByServer(server.getId())).thenReturn(posts);
List<StarboardPost> topPosts = testUnit.retrieveTopPosts(server.getId(), count); List<StarboardPost> topPosts = testUnit.retrieveTopPosts(server.getId(), count);
Assert.assertEquals(count.intValue(), topPosts.size()); Assert.assertEquals(count.intValue(), topPosts.size());
StarboardPost topMostPost = topPosts.get(0); StarboardPost topMostPost = topPosts.get(0);
@@ -107,7 +107,7 @@ public class StarboardPostManagementServiceBeanTest {
StarboardPost starboardPost2 = StarboardPost.builder().reactions(Arrays.asList(reaction)).build(); StarboardPost starboardPost2 = StarboardPost.builder().reactions(Arrays.asList(reaction)).build();
StarboardPost starboardPost3 = StarboardPost.builder().reactions(new ArrayList<>()).build(); StarboardPost starboardPost3 = StarboardPost.builder().reactions(new ArrayList<>()).build();
List<StarboardPost> posts = Arrays.asList(starboardPost1, starboardPost2, starboardPost3); List<StarboardPost> posts = Arrays.asList(starboardPost1, starboardPost2, starboardPost3);
when(repository.findByStarboardChannelServerId(server.getId())).thenReturn(posts); when(repository.findByServer(server.getId())).thenReturn(posts);
List<StarboardPost> topPosts = testUnit.retrieveTopPosts(server.getId(), count); List<StarboardPost> topPosts = testUnit.retrieveTopPosts(server.getId(), count);
StarboardPost topMostPost = topPosts.get(0); StarboardPost topMostPost = topPosts.get(0);
StarboardPost secondTop = topPosts.get(1); StarboardPost secondTop = topPosts.get(1);
@@ -190,7 +190,7 @@ public class StarboardPostManagementServiceBeanTest {
StarboardPost starboardPost1 = StarboardPost.builder().build(); StarboardPost starboardPost1 = StarboardPost.builder().build();
StarboardPost starboardPost2 = StarboardPost.builder().build(); StarboardPost starboardPost2 = StarboardPost.builder().build();
List<StarboardPost> posts = Arrays.asList(starboardPost1, starboardPost2); List<StarboardPost> posts = Arrays.asList(starboardPost1, starboardPost2);
when(repository.findByStarboardChannelServerId(server.getId())).thenReturn(posts); when(repository.findByServer(server.getId())).thenReturn(posts);
Integer retrievedPostCount = testUnit.getPostCount(server.getId()); Integer retrievedPostCount = testUnit.getPostCount(server.getId());
Assert.assertEquals(posts.size(), retrievedPostCount.intValue()); Assert.assertEquals(posts.size(), retrievedPostCount.intValue());
} }

View File

@@ -29,7 +29,6 @@ import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class) @RunWith(MockitoJUnitRunner.class)
public class SuggestionManagementServiceBeanTest { public class SuggestionManagementServiceBeanTest {
public static final long CHANNEL_ID = 6L;
@InjectMocks @InjectMocks
private SuggestionManagementServiceBean testUnit; private SuggestionManagementServiceBean testUnit;
@@ -45,6 +44,10 @@ public class SuggestionManagementServiceBeanTest {
@Mock @Mock
private ServerManagementService serverManagementService; private ServerManagementService serverManagementService;
public static final long CHANNEL_ID = 6L;
public static final long SERVER_ID = 6L;
public static final long SUGGESTION_ID = 6L;
@Test @Test
public void testCreateSuggestionViaUser() { public void testCreateSuggestionViaUser() {
AServer server = MockUtils.getServer(); AServer server = MockUtils.getServer();
@@ -89,28 +92,36 @@ public class SuggestionManagementServiceBeanTest {
@Test @Test
public void testGetSuggestion() { public void testGetSuggestion() {
Long suggestionId = 5L; Suggestion foundSuggestion = buildSuggestion();
Suggestion foundSuggestion = Suggestion.builder().suggestionId(new ServerSpecificId(0L, suggestionId)).build(); when(suggestionRepository.findById(new ServerSpecificId(SERVER_ID, SUGGESTION_ID))).thenReturn(Optional.of(foundSuggestion));
when(suggestionRepository.findById(suggestionId)).thenReturn(Optional.of(foundSuggestion)); Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(SUGGESTION_ID, SERVER_ID);
Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(suggestionId);
Assert.assertTrue(suggestionOptional.isPresent()); Assert.assertTrue(suggestionOptional.isPresent());
suggestionOptional.ifPresent(suggestion -> Assert.assertEquals(suggestionId, suggestion.getSuggestionId().getId())); suggestionOptional.ifPresent(suggestion -> Assert.assertEquals(SUGGESTION_ID, suggestion.getSuggestionId().getId().longValue()));
} }
@Test @Test
public void testGetSuggestionNotFound() { public void testGetSuggestionNotFound() {
Long suggestionId = 5L; when(suggestionRepository.findById(new ServerSpecificId(SERVER_ID, SUGGESTION_ID))).thenReturn(Optional.empty());
when(suggestionRepository.findById(suggestionId)).thenReturn(Optional.empty()); Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(SUGGESTION_ID, SERVER_ID);
Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(suggestionId);
Assert.assertFalse(suggestionOptional.isPresent()); Assert.assertFalse(suggestionOptional.isPresent());
} }
@Test @Test
public void setSuggestionState() { public void setSuggestionState() {
Suggestion suggestion = Suggestion.builder().suggestionId(new ServerSpecificId(0L, 4L)).build(); Suggestion suggestion = buildSuggestion();
testUnit.setSuggestionState(suggestion, SuggestionState.ACCEPTED); testUnit.setSuggestionState(suggestion, SuggestionState.ACCEPTED);
Assert.assertEquals(suggestion.getState(), SuggestionState.ACCEPTED); verify(suggestion, times(1)).setState(SuggestionState.ACCEPTED);
verify(suggestionRepository, times(1)).save(suggestion); verify(suggestionRepository, times(1)).save(suggestion);
} }
private Suggestion buildSuggestion() {
Suggestion foundSuggestion = Mockito.mock(Suggestion.class);
ServerSpecificId suggestionId = Mockito.mock(ServerSpecificId.class);
when(suggestionId.getId()).thenReturn(SUGGESTION_ID);
when(suggestionId.getServerId()).thenReturn(SERVER_ID);
when(foundSuggestion.getSuggestionId()).thenReturn(suggestionId);
return foundSuggestion;
}
} }

View File

@@ -24,30 +24,30 @@ public class EmbeddedMessage implements Serializable {
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "embeddedUser", nullable = false) @JoinColumn(name = "embedded_user_in_server_id", nullable = false)
private AUserInAServer embeddedUser; private AUserInAServer embeddedUser;
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "embeddingUser", nullable = false) @JoinColumn(name = "embedding_user_in_server_id", nullable = false)
private AUserInAServer embeddingUser; private AUserInAServer embeddingUser;
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "originalServer", nullable = false) @JoinColumn(name = "embedded_server_id", nullable = false)
private AServer embeddedServer; private AServer embeddedServer;
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "originalChannel", nullable = false) @JoinColumn(name = "embedded_channel_id", nullable = false)
private AChannel embeddedChannel; private AChannel embeddedChannel;
@Column @Column(name = "embedded_message_id")
private Long embeddedMessageId; private Long embeddedMessageId;
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "embeddingServer", nullable = false) @JoinColumn(name = "embedding_server_id", nullable = false)
private AServer embeddingServer; private AServer embeddingServer;
@Getter @Getter
@@ -55,15 +55,14 @@ public class EmbeddedMessage implements Serializable {
@JoinColumn(name = "embeddingChannel", nullable = false) @JoinColumn(name = "embeddingChannel", nullable = false)
private AChannel embeddingChannel; private AChannel embeddingChannel;
@Column @Column(name = "embedding_message_id")
@Id @Id
private Long embeddingMessageId; private Long embeddingMessageId;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist @Column(name = "updated")
private void onInsert() { private Instant updated;
this.created = Instant.now();
}
} }

View File

@@ -25,7 +25,7 @@ public class PostedImage {
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "posting_user_id", nullable = false) @JoinColumn(name = "author_user_in_server_id", nullable = false)
private AUserInAServer poster; private AUserInAServer poster;
@Getter @Getter
@@ -49,6 +49,9 @@ public class PostedImage {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@Column(name = "updated")
private Instant updated;
@Getter @Getter
@OneToMany(fetch = FetchType.LAZY, @OneToMany(fetch = FetchType.LAZY,
orphanRemoval = true, orphanRemoval = true,
@@ -57,8 +60,4 @@ public class PostedImage {
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<Repost> reposts; private List<Repost> reposts;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
} }

View File

@@ -25,53 +25,49 @@ public class Reminder implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter @Getter
@Column(name = "id")
private Long id; private Long id;
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "remindedUser", nullable = false) @JoinColumn(name = "user_in_server_id", nullable = false)
private AUserInAServer remindedUser; private AUserInAServer remindedUser;
@Getter @Getter
@Column(name = "message_id")
private Long messageId; private Long messageId;
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "channelId", nullable = false) @JoinColumn(name = "channel_id", nullable = false)
private AChannel channel; private AChannel channel;
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "serverId", nullable = false) @JoinColumn(name = "server_id", nullable = false)
private AServer server; private AServer server;
@Column(name = "created") @Column(name = "created")
private Instant reminderDate; private Instant reminderDate;
@PrePersist
private void onInsert() {
this.reminderDate = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
@Getter @Getter
@Column(name = "target_date")
private Instant targetDate; private Instant targetDate;
@Getter @Getter
@Column(name = "text")
private String text; private String text;
@Getter @Getter
@Column(name = "reminded")
private boolean reminded; private boolean reminded;
@Getter @Getter
@Setter @Setter
@Column(name = "job_trigger_key")
private String jobTriggerKey; private String jobTriggerKey;
} }

View File

@@ -51,17 +51,7 @@ public class Repost {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -20,6 +20,7 @@ import java.time.Instant;
public class RepostCheckChannelGroup { public class RepostCheckChannelGroup {
@Id @Id
@Column(name = "id")
private Long id; private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@@ -32,16 +33,7 @@ public class RepostCheckChannelGroup {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.utility.models.database; package dev.sheldan.abstracto.utility.models.database;
import dev.sheldan.abstracto.core.models.database.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import lombok.*; import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.CacheConcurrencyStrategy;
@@ -24,24 +25,30 @@ public class StarboardPost implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id; private Long id;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "poster", nullable = false) @JoinColumn(name = "author_user_in_server_id", nullable = false)
private AUserInAServer author; private AUserInAServer author;
@Column @Column(name = "starboard_message_id")
private Long starboardMessageId; private Long starboardMessageId;
@Column @Column(name = "post_message_id")
private Long postMessageId; private Long postMessageId;
@ManyToOne @ManyToOne
@JoinColumn(name = "channelId", nullable = false) @JoinColumn(name = "channel_id", nullable = false)
private AChannel starboardChannel; private AChannel starboardChannel;
@Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "sourceChannelId", nullable = false) @JoinColumn(name = "server_id", nullable = false)
private AServer server;
@ManyToOne
@JoinColumn(name = "source_channel_id", nullable = false)
private AChannel sourceChanel; private AChannel sourceChanel;
@Transient @Transient
@@ -50,19 +57,9 @@ public class StarboardPost implements Serializable {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
@PostLoad @PostLoad
private void onLoad() { private void onLoad() {
this.reactionCount = this.reactions.size(); this.reactionCount = this.reactions.size();
@@ -76,10 +73,10 @@ public class StarboardPost implements Serializable {
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<StarboardPostReaction> reactions; private List<StarboardPostReaction> reactions;
@Column @Column(name = "starred_date")
private Instant starredDate; private Instant starredDate;
@Column @Column(name = "ignored")
private boolean ignored; private boolean ignored;
public int getReactionCount() { public int getReactionCount() {

View File

@@ -22,10 +22,11 @@ public class StarboardPostReaction implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id; private Long id;
@ManyToOne @ManyToOne
@JoinColumn(name = "reactorId", nullable = false) @JoinColumn(name = "reactor_user_in_server_id", nullable = false)
private AUserInAServer reactor; private AUserInAServer reactor;
@OneToOne @OneToOne
@@ -36,9 +37,7 @@ public class StarboardPostReaction implements Serializable {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist @Column(name = "updated")
private void onInsert() { private Instant updated;
this.created = Instant.now();
}
} }

View File

@@ -31,16 +31,16 @@ public class Suggestion implements Serializable {
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "suggesterId", @JoinColumn(name = "suggester_user_in_server_id")
nullable = false)
private AUserInAServer suggester; private AUserInAServer suggester;
@Getter @Getter
@Column(name = "message_id")
private Long messageId; private Long messageId;
@Getter @Getter
@ManyToOne @ManyToOne
@JoinColumn(name = "channelId") @JoinColumn(name = "channel_id")
private AChannel channel; private AChannel channel;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@@ -49,26 +49,18 @@ public class Suggestion implements Serializable {
private AServer server; private AServer server;
@Getter @Getter
@Column(name = "suggestion_date")
private Instant suggestionDate; private Instant suggestionDate;
@Getter @Getter
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
@Column(name = "state")
private SuggestionState state; private SuggestionState state;
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -11,6 +11,6 @@ import java.util.Optional;
public interface SuggestionManagementService { public interface SuggestionManagementService {
Suggestion createSuggestion(Member suggester, String text, Message message, Long suggestionId); Suggestion createSuggestion(Member suggester, String text, Message message, Long suggestionId);
Suggestion createSuggestion(AUserInAServer suggester, String text, Message message, Long suggestionId); Suggestion createSuggestion(AUserInAServer suggester, String text, Message message, Long suggestionId);
Optional<Suggestion> getSuggestion(Long suggestionId); Optional<Suggestion> getSuggestion(Long suggestionId, Long serverId);
void setSuggestionState(Suggestion suggestion, SuggestionState newState); void setSuggestionState(Suggestion suggestion, SuggestionState newState);
} }

View File

@@ -1,11 +1,13 @@
package dev.sheldan.abstracto.core.service.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.command.models.TableLocks;
import dev.sheldan.abstracto.core.exception.UserInServerNotFoundException; import dev.sheldan.abstracto.core.exception.UserInServerNotFoundException;
import dev.sheldan.abstracto.core.models.ServerUser; import dev.sheldan.abstracto.core.models.ServerUser;
import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUser; import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.repository.UserInServerRepository; import dev.sheldan.abstracto.core.repository.UserInServerRepository;
import dev.sheldan.abstracto.core.service.LockService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +32,9 @@ public class UserInServerManagementServiceBean implements UserInServerManagement
@Autowired @Autowired
private UserManagementService userManagementService; private UserManagementService userManagementService;
@Autowired
private LockService lockService;
@Autowired @Autowired
private UserInServerManagementServiceBean self; private UserInServerManagementServiceBean self;
@@ -91,7 +96,6 @@ public class UserInServerManagementServiceBean implements UserInServerManagement
log.info("Creating user {} in server {}.", userId, serverId); log.info("Creating user {} in server {}.", userId, serverId);
AUserInAServer aUserInAServer; AUserInAServer aUserInAServer;
try { try {
// TODO there seems to be an issue, of trying to create the user a second time
aUserInAServer = self.tryToCreateAUserInAServer(serverId, userId); aUserInAServer = self.tryToCreateAUserInAServer(serverId, userId);
} catch (DataIntegrityViolationException ex) { } catch (DataIntegrityViolationException ex) {
log.info("Concurrency exception creating user - retrieving."); log.info("Concurrency exception creating user - retrieving.");
@@ -102,6 +106,7 @@ public class UserInServerManagementServiceBean implements UserInServerManagement
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
public AUserInAServer tryToCreateAUserInAServer(Long guildId, Long userId) { public AUserInAServer tryToCreateAUserInAServer(Long guildId, Long userId) {
lockService.lockTable(TableLocks.USER_IN_SERVER);
AUserInAServer aUserInAServer = serverManagementService.addUserToServer(guildId, userId); AUserInAServer aUserInAServer = serverManagementService.addUserToServer(guildId, userId);
userInServerRepository.save(aUserInAServer); userInServerRepository.save(aUserInAServer);
return aUserInAServer; return aUserInAServer;

View File

@@ -1,7 +1,9 @@
package dev.sheldan.abstracto.core.service.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.command.models.TableLocks;
import dev.sheldan.abstracto.core.models.database.AUser; import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.repository.UserRepository; import dev.sheldan.abstracto.core.repository.UserRepository;
import dev.sheldan.abstracto.core.service.LockService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +24,9 @@ public class UserManagementServiceBean implements UserManagementService {
@Autowired @Autowired
private UserManagementServiceBean self; private UserManagementServiceBean self;
@Autowired
private LockService lockService;
@Override @Override
public AUser createUser(Member member) { public AUser createUser(Member member) {
return createUser(member.getIdLong()); return createUser(member.getIdLong());
@@ -46,6 +51,7 @@ public class UserManagementServiceBean implements UserManagementService {
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
public AUser tryCreateUser(Long userId) { public AUser tryCreateUser(Long userId) {
lockService.lockTable(TableLocks.USER);
AUser aUser = AUser.builder().id(userId).build(); AUser aUser = AUser.builder().id(userId).build();
userRepository.save(aUser); userRepository.save(aUser);
return aUser; return aUser;

View File

@@ -9,6 +9,8 @@
<changeSet author="Sheldan" id="lock-insertion"> <changeSet author="Sheldan" id="lock-insertion">
<insert tableName="lock"> <insert tableName="lock">
<column name="id" value="0"/> <column name="id" value="0"/>
<column name="id" value="1"/>
<column name="id" value="2"/>
</insert> </insert>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,16 +11,30 @@
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="allowed_mention_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="allowed_mention_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="everyone_mention" type="BOOLEAN"/> <column name="everyone_mention" type="BOOLEAN">
<column name="user_mention" type="BOOLEAN"/> <constraints nullable="true"/>
<column name="role_mention" type="BOOLEAN"/> </column>
<column name="user_mention" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="role_mention" type="BOOLEAN">
<constraints nullable="true"/>
</column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="allowed_mention-fk_allowed_mention_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="allowed_mention" constraintName="fk_allowed_mention_server" <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="allowed_mention" constraintName="fk_allowed_mention_server"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS allowed_mention_update_trigger ON allowed_mention;
CREATE TRIGGER allowed_mention_update_trigger BEFORE UPDATE ON allowed_mention FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS allowed_mention_insert_trigger ON allowed_mention;
CREATE TRIGGER allowed_mention_insert_trigger BEFORE INSERT ON allowed_mention FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,30 +11,54 @@
<column name="id" type="BIGINT"> <column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="users_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="users_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<sql>
DROP TRIGGER IF EXISTS auser_update_trigger ON auser;
CREATE TRIGGER auser_update_trigger BEFORE UPDATE ON auser FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS auser_insert_trigger ON auser;
CREATE TRIGGER auser_insert_trigger BEFORE INSERT ON auser FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="user_in_server-table"> <changeSet author="Sheldan" id="user_in_server-table">
<createTable tableName="user_in_server"> <createTable tableName="user_in_server">
<column autoIncrement="true" name="user_in_server_id" type="BIGINT"> <column autoIncrement="true" name="user_in_server_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="user_in_server_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="user_in_server_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="server_reference" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="user_reference" type="BIGINT"> <column name="user_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <addUniqueConstraint columnNames="user_id, server_id"
<changeSet author="Sheldan" id="user_in_server-fk_auser_user"> constraintName="uc_user_in_server"
<addForeignKeyConstraint baseColumnNames="user_reference" baseTableName="user_in_server" constraintName="fk_auser_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="auser" validate="true"/> disabled="false"
tableName="user_in_server"/>
<addForeignKeyConstraint baseColumnNames="user_id" baseTableName="user_in_server" constraintName="fk_auser_user" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="auser" validate="true"/>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="user_in_server" constraintName="fk_user_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<createIndex indexName="idx_user_in_server" tableName="user_in_server">
<column name="server_id"/>
<column name="user_id"/>
</createIndex>
<sql>
DROP TRIGGER IF EXISTS user_in_server_update_trigger ON user_in_server;
CREATE TRIGGER user_in_server_update_trigger BEFORE UPDATE ON user_in_server FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS user_in_server_insert_trigger ON user_in_server;
CREATE TRIGGER user_in_server_insert_trigger BEFORE INSERT ON user_in_server FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="user_in_server-fk_user_server">
<addForeignKeyConstraint baseColumnNames="server_reference" baseTableName="user_in_server" constraintName="fk_user_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,15 +11,31 @@
<column name="id" type="BIGINT"> <column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="channel_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="channel_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="deleted" type="BOOLEAN"/> <constraints nullable="true"/>
<column name="type" type="VARCHAR(255)"/> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="deleted" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="type" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="channel-fk_channel_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="channel" constraintName="fk_channel_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="channel" constraintName="fk_channel_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS channel_update_trigger ON channel;
CREATE TRIGGER channel_update_trigger BEFORE UPDATE ON channel FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS channel_insert_trigger ON channel;
CREATE TRIGGER channel_insert_trigger BEFORE INSERT ON channel FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
<sql>
ALTER TABLE channel ADD CONSTRAINT check_channel_type CHECK (type IN ('TEXT', 'DM', 'VOICE', 'NEWS', 'CATEGORY', 'UNKNOWN'));
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,20 +11,37 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="channel_group_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="channel_group_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="group_name" type="VARCHAR(255)"/> <constraints nullable="true"/>
<column name="group_type_id" type="BIGINT"/> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="group_name" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="group_type_id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_channel_group_name_server" tableName="channel_group">
<changeSet author="Sheldan" id="channel_group-fk_channel_group_channel_group_type"> <column name="group_name"/>
<column name="server_id"/>
</createIndex>
<createIndex indexName="idx_channel_group_server" tableName="channel_group">
<column name="server_id"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="group_type_id" baseTableName="channel_group" constraintName="fk_channel_group_channel_group_type" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel_group_type" validate="true"/> <addForeignKeyConstraint baseColumnNames="group_type_id" baseTableName="channel_group" constraintName="fk_channel_group_channel_group_type" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel_group_type" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="channel_group-fk_channel_group_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="channel_group" constraintName="fk_channel_group_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="channel_group" constraintName="fk_channel_group_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS channel_group_update_trigger ON channel_group;
CREATE TRIGGER channel_group_update_trigger BEFORE UPDATE ON channel_group FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS channel_group_insert_trigger ON channel_group;
CREATE TRIGGER channel_group_insert_trigger BEFORE INSERT ON channel_group FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="channel_in_group-table"> <changeSet author="Sheldan" id="channel_in_group-table">
<createTable tableName="channel_in_group"> <createTable tableName="channel_in_group">
@@ -35,6 +52,8 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="channel_in_group" constraintName="fk_channel_in_group_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
<addForeignKeyConstraint baseColumnNames="group_id" baseTableName="channel_in_group" constraintName="fk_channel_in_group_group" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel_group" validate="true"/>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="channel_group_command-table"> <changeSet author="Sheldan" id="channel_group_command-table">
<createTable tableName="channel_group_command"> <createTable tableName="channel_group_command">
@@ -42,6 +61,8 @@
<constraints nullable="false" primaryKey="true" primaryKeyName="channel_group_command_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="channel_group_command_pkey"/>
</column> </column>
<column name="enabled" type="BOOLEAN"/> <column name="enabled" type="BOOLEAN"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="command_id" type="BIGINT"> <column name="command_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
@@ -49,17 +70,15 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="channel_in_group-fk_channel_in_group_channel">
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="channel_in_group" constraintName="fk_channel_in_group_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="channel_group_command-fk_channel_group_command_channel_group">
<addForeignKeyConstraint baseColumnNames="group_id" baseTableName="channel_group_command" constraintName="fk_channel_group_command_channel_group" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel_group" validate="true"/> <addForeignKeyConstraint baseColumnNames="group_id" baseTableName="channel_group_command" constraintName="fk_channel_group_command_channel_group" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel_group" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="channel_in_group-fk_channel_in_group_group">
<addForeignKeyConstraint baseColumnNames="group_id" baseTableName="channel_in_group" constraintName="fk_channel_in_group_group" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel_group" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="channel_group_command-fk_channel_group_command_command">
<addForeignKeyConstraint baseColumnNames="command_id" baseTableName="channel_group_command" constraintName="fk_channel_group_command_command" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="command" validate="true"/> <addForeignKeyConstraint baseColumnNames="command_id" baseTableName="channel_group_command" constraintName="fk_channel_group_command_command" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="command" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS channel_group_command_update_trigger ON channel_group_command;
CREATE TRIGGER channel_group_command_update_trigger BEFORE UPDATE ON channel_group_command FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS channel_group_command_insert_trigger ON channel_group_command;
CREATE TRIGGER channel_group_command_insert_trigger BEFORE INSERT ON channel_group_command FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,7 +11,22 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="channel_group_type_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="channel_group_type_pkey"/>
</column> </column>
<column name="group_type_key" type="VARCHAR(255)"/> <column name="group_type_key" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<sql>
DROP TRIGGER IF EXISTS channel_group_type_update_trigger ON channel_group_type;
CREATE TRIGGER channel_group_type_update_trigger BEFORE UPDATE ON channel_group_type FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS channel_group_type_insert_trigger ON channel_group_type;
CREATE TRIGGER channel_group_type_insert_trigger BEFORE INSERT ON channel_group_type FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,8 +11,12 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="command_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="command_pkey"/>
</column> </column>
<column name="name" type="VARCHAR(255)"/> <column name="name" type="VARCHAR(255)">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="feature_id" type="BIGINT"> <column name="feature_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
@@ -21,6 +25,16 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<addForeignKeyConstraint baseColumnNames="feature_id" baseTableName="command" constraintName="fk_command_feature" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature" validate="true"/>
<addForeignKeyConstraint baseColumnNames="module_id" baseTableName="command" constraintName="fk_command_module" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="module" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS command_update_trigger ON command;
CREATE TRIGGER command_update_trigger BEFORE UPDATE ON command FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS command_insert_trigger ON command;
CREATE TRIGGER command_insert_trigger BEFORE INSERT ON command FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="command_in_server-table"> <changeSet author="Sheldan" id="command_in_server-table">
<createTable tableName="command_in_server"> <createTable tableName="command_in_server">
@@ -28,13 +42,29 @@
<constraints nullable="false" primaryKey="true" primaryKeyName="command_in_server_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="command_in_server_pkey"/>
</column> </column>
<column name="restricted" type="BOOLEAN"/> <column name="restricted" type="BOOLEAN"/>
<column name="command_reference" type="BIGINT"> <column name="command_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="server_reference" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<createIndex indexName="idx_command_in_server" tableName="command_in_server">
<column name="server_id"/>
<column name="command_id"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="command_id" baseTableName="command_in_server" constraintName="fk_command_command" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="command" validate="true"/>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="command_in_server" constraintName="fk_command_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS command_in_server_update_trigger ON command_in_server;
CREATE TRIGGER command_in_server_update_trigger BEFORE UPDATE ON command_in_server FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS command_in_server_insert_trigger ON command_in_server;
CREATE TRIGGER command_in_server_insert_trigger BEFORE INSERT ON command_in_server FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="command_in_server_immune_roles-table"> <changeSet author="Sheldan" id="command_in_server_immune_roles-table">
<createTable tableName="command_in_server_immune_roles"> <createTable tableName="command_in_server_immune_roles">
@@ -45,6 +75,9 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<addForeignKeyConstraint baseColumnNames="command_in_server_command_in_server_id" baseTableName="command_in_server_immune_roles" constraintName="fk_command_immune_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="command_in_server_id" referencedTableName="command_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="immune_roles_id" baseTableName="command_in_server_immune_roles" constraintName="fk_immune_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="command_in_server_allowed_roles-table"> <changeSet author="Sheldan" id="command_in_server_allowed_roles-table">
<createTable tableName="command_in_server_allowed_roles"> <createTable tableName="command_in_server_allowed_roles">
@@ -55,29 +88,32 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
<addForeignKeyConstraint baseColumnNames="command_in_server_command_in_server_id" baseTableName="command_in_server_allowed_roles" constraintName="fk_command_allowed_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="command_in_server_id" referencedTableName="command_in_server" validate="true"/>
<addForeignKeyConstraint baseColumnNames="allowed_roles_id" baseTableName="command_in_server_allowed_roles" constraintName="fk_role_allowed_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/>
</changeSet> </changeSet>
<changeSet author="Sheldan" id="command-fk_command_feature"> <changeSet author="Sheldan" id="command-fk_command_feature">
<addForeignKeyConstraint baseColumnNames="feature_id" baseTableName="command" constraintName="fk_command_feature" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature" validate="true"/> </changeSet>
</changeSet>
<changeSet author="Sheldan" id="command_in_server-command_in_server_immune_roles"> <changeSet author="Sheldan" id="command_in_server-command_in_server_immune_roles">
<addForeignKeyConstraint baseColumnNames="command_in_server_command_in_server_id" baseTableName="command_in_server_immune_roles" constraintName="fk_command_immune_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="command_in_server_id" referencedTableName="command_in_server" validate="true"/> </changeSet>
</changeSet>
<changeSet author="Sheldan" id="command_in_server-command_in_server_allowed_roles"> <changeSet author="Sheldan" id="command_in_server-command_in_server_allowed_roles">
<addForeignKeyConstraint baseColumnNames="command_in_server_command_in_server_id" baseTableName="command_in_server_allowed_roles" constraintName="fk_command_allowed_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="command_in_server_id" referencedTableName="command_in_server" validate="true"/> </changeSet>
</changeSet>
<changeSet author="Sheldan" id="command_in_server_immune_roles-command_in_server_allowed_roles"> <changeSet author="Sheldan" id="command_in_server_immune_roles-command_in_server_allowed_roles">
<addForeignKeyConstraint baseColumnNames="allowed_roles_id" baseTableName="command_in_server_allowed_roles" constraintName="fk_role_allowed_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/> </changeSet>
</changeSet>
<changeSet author="Sheldan" id="command-fk_command_module"> <changeSet author="Sheldan" id="command-fk_command_module">
<addForeignKeyConstraint baseColumnNames="module_id" baseTableName="command" constraintName="fk_command_module" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="module" validate="true"/> </changeSet>
</changeSet>
<changeSet author="Sheldan" id="command_in_server-fk_command_command"> <changeSet author="Sheldan" id="command_in_server-fk_command_command">
<addForeignKeyConstraint baseColumnNames="command_reference" baseTableName="command_in_server" constraintName="fk_command_command" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="command" validate="true"/> </changeSet>
</changeSet>
<changeSet author="Sheldan" id="command_in_server_allowed_roles-fk_immune_role_role"> <changeSet author="Sheldan" id="command_in_server_allowed_roles-fk_immune_role_role">
<addForeignKeyConstraint baseColumnNames="immune_roles_id" baseTableName="command_in_server_immune_roles" constraintName="fk_immune_role_role" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="role" validate="true"/> </changeSet>
</changeSet>
<changeSet author="Sheldan" id="command_in_server-fk_command_server"> <changeSet author="Sheldan" id="command_in_server-fk_command_server">
<addForeignKeyConstraint baseColumnNames="server_reference" baseTableName="command_in_server" constraintName="fk_command_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> </changeSet>
<changeSet author="Sheldan" id="command_triggers">
</changeSet>
<changeSet author="Sheldan" id="command_in_server_triggers">
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -22,8 +22,7 @@
columnNames="counter_key, server_id" columnNames="counter_key, server_id"
constraintName="pk_counter" constraintName="pk_counter"
tableName="counter"/> tableName="counter"/>
</changeSet>
<changeSet author="Sheldan" id="counter-counter_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="counter" constraintName="fk_counter_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="counter" constraintName="fk_counter_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,12 +11,25 @@
<column autoIncrement="true" name="id" type="INTEGER"> <column autoIncrement="true" name="id" type="INTEGER">
<constraints nullable="false" primaryKey="true" primaryKeyName="default_config_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="default_config_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="double_value" type="FLOAT8"/> <column name="double_value" type="FLOAT8"/>
<column name="long_value" type="BIGINT"/> <column name="long_value" type="BIGINT"/>
<column name="name" type="VARCHAR(255)"/> <column name="name" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="string_value" type="VARCHAR(255)"/> <column name="string_value" type="VARCHAR(255)"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<sql>
DROP TRIGGER IF EXISTS default_config_update_trigger ON default_config;
CREATE TRIGGER default_config_update_trigger BEFORE UPDATE ON default_config FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS default_config_insert_trigger ON default_config;
CREATE TRIGGER default_config_insert_trigger BEFORE INSERT ON default_config FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,10 +11,20 @@
<column autoIncrement="true" name="id" type="INTEGER"> <column autoIncrement="true" name="id" type="INTEGER">
<constraints nullable="false" primaryKey="true" primaryKeyName="default_emote_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="default_emote_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="emote_key" type="VARCHAR(255)"/> <column name="emote_key" type="VARCHAR(255)"/>
<column name="name" type="VARCHAR(255)"/> <column name="name" type="VARCHAR(255)"/>
</createTable> </createTable>
<sql>
DROP TRIGGER IF EXISTS default_emote_update_trigger ON default_emote;
CREATE TRIGGER default_emote_update_trigger BEFORE UPDATE ON default_emote FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS default_emote_insert_trigger ON default_emote;
CREATE TRIGGER default_emote_insert_trigger BEFORE INSERT ON default_emote FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,17 +11,25 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="default_feature_flag_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="default_feature_flag_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="enabled" type="BOOLEAN"> <column name="enabled" type="BOOLEAN">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="feature_id" type="BIGINT"> <column name="feature_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="default_feature_flag-fk_default_feature_flag_feature">
<addForeignKeyConstraint baseColumnNames="feature_id" baseTableName="default_feature_flag" constraintName="fk_default_feature_flag_feature" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature" validate="true"/> <addForeignKeyConstraint baseColumnNames="feature_id" baseTableName="default_feature_flag" constraintName="fk_default_feature_flag_feature" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS default_feature_flag_update_trigger ON default_feature_flag;
CREATE TRIGGER default_feature_flag_update_trigger BEFORE UPDATE ON default_feature_flag FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS default_feature_flag_insert_trigger ON default_feature_flag;
CREATE TRIGGER default_feature_flag_insert_trigger BEFORE INSERT ON default_feature_flag FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,18 +11,29 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="default_feature_mode_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="default_feature_mode_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="mode" type="VARCHAR(255)"/> <constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="mode" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="enabled" type="BOOLEAN"> <column name="enabled" type="BOOLEAN">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="feature_id" type="BIGINT"> <column name="feature_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="default_feature_flag-fk_default_feature_mode_feature">
<addForeignKeyConstraint baseColumnNames="feature_id" baseTableName="default_feature_mode" constraintName="fk_default_feature_mode_feature" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature" validate="true"/> <addForeignKeyConstraint baseColumnNames="feature_id" baseTableName="default_feature_mode" constraintName="fk_default_feature_mode_feature" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS default_feature_mode_update_trigger ON default_feature_mode;
CREATE TRIGGER default_feature_mode_update_trigger BEFORE UPDATE ON default_feature_mode FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS default_feature_mode_insert_trigger ON default_feature_mode;
CREATE TRIGGER default_feature_mode_insert_trigger BEFORE INSERT ON default_feature_mode FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,9 +11,22 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="default_posttarget_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="default_posttarget_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="name" type="VARCHAR(255)">
<column name="name" type="VARCHAR(255)"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<sql>
DROP TRIGGER IF EXISTS default_posttarget_update_trigger ON default_posttarget;
CREATE TRIGGER default_posttarget_update_trigger BEFORE UPDATE ON default_posttarget FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS default_posttarget_insert_trigger ON default_posttarget;
CREATE TRIGGER default_posttarget_insert_trigger BEFORE INSERT ON default_posttarget FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -12,19 +12,38 @@
<constraints nullable="false" primaryKey="true" primaryKeyName="emote_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="emote_pkey"/>
</column> </column>
<column name="animated" type="BOOLEAN"/> <column name="animated" type="BOOLEAN"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="custom" type="BOOLEAN"/> <constraints nullable="true"/>
<column name="changeable" type="BOOLEAN"/> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="custom" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="changeable" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="emote_id" type="BIGINT"/> <column name="emote_id" type="BIGINT"/>
<column name="emote_key" type="VARCHAR(255)"/> <column name="emote_key" type="VARCHAR(255)"/>
<column name="name" type="VARCHAR(255)"/> <column name="name" type="VARCHAR(255)"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="server_id" type="BIGINT">
<column name="emote_server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_emote_name_server_id" tableName="emote">
<changeSet author="Sheldan" id="emote-fk_emote_server"> <column name="name"/>
<addForeignKeyConstraint baseColumnNames="emote_server_id" baseTableName="emote" constraintName="fk_emote_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <column name="server_id"/>
</createIndex>
<createIndex indexName="idx_emote_emote_id" tableName="emote">
<column name="emote_id"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="emote" constraintName="fk_emote_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS emote_update_trigger ON emote;
CREATE TRIGGER emote_update_trigger BEFORE UPDATE ON emote FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS emote_insert_trigger ON emote;
CREATE TRIGGER emote_insert_trigger BEFORE INSERT ON emote FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,9 +11,24 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="feature_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="feature_pkey"/>
</column> </column>
<column name="key" type="VARCHAR(255)"/> <column name="key" type="VARCHAR(255)">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<createIndex indexName="idx_feature_key" tableName="feature">
<column name="key"/>
</createIndex>
<sql>
DROP TRIGGER IF EXISTS feature_update_trigger ON feature;
CREATE TRIGGER feature_update_trigger BEFORE UPDATE ON feature FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS feature_insert_trigger ON feature;
CREATE TRIGGER feature_insert_trigger BEFORE INSERT ON feature FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,7 +11,9 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="feature_flag_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="feature_flag_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="enabled" type="BOOLEAN"> <column name="enabled" type="BOOLEAN">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
@@ -23,11 +25,15 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet>
<changeSet author="Sheldan" id="feature_flag-fk_feature_flag_feature">
<addForeignKeyConstraint baseColumnNames="feature_id" baseTableName="feature_flag" constraintName="fk_feature_flag_feature" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature" validate="true"/> <addForeignKeyConstraint baseColumnNames="feature_id" baseTableName="feature_flag" constraintName="fk_feature_flag_feature" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="feature_flag-fk_feature_flag_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="feature_flag" constraintName="fk_feature_flag_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="feature_flag" constraintName="fk_feature_flag_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS feature_flag_update_trigger ON feature_flag;
CREATE TRIGGER feature_flag_update_trigger BEFORE UPDATE ON feature_flag FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS feature_flag_insert_trigger ON feature_flag;
CREATE TRIGGER feature_flag_insert_trigger BEFORE INSERT ON feature_flag FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,11 +11,13 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="feature_mode_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="feature_mode_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="enabled" type="BOOLEAN"> <column name="enabled" type="BOOLEAN">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="feature_mode_id" type="BIGINT"> <column name="feature_mode_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
@@ -26,14 +28,24 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_feature_mode_server" tableName="feature_mode">
<changeSet author="Sheldan" id="feature_mode-fk_feature_mode_flag"> <column name="server_id"/>
</createIndex>
<createIndex indexName="idx_feature_mode_flag_server_mode" tableName="feature_mode">
<column name="server_id"/>
<column name="feature_flag_id"/>
<column name="feature_mode_id"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="feature_flag_id" baseTableName="feature_mode" constraintName="fk_feature_mode_flag" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature_flag" validate="true"/> <addForeignKeyConstraint baseColumnNames="feature_flag_id" baseTableName="feature_mode" constraintName="fk_feature_mode_flag" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="feature_flag" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="feature_mode-fk_feature_mode_mode">
<addForeignKeyConstraint baseColumnNames="feature_mode_id" baseTableName="feature_mode" constraintName="fk_feature_mode_mode" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="default_feature_mode" validate="true"/> <addForeignKeyConstraint baseColumnNames="feature_mode_id" baseTableName="feature_mode" constraintName="fk_feature_mode_mode" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="default_feature_mode" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="feature_mode-fk_feature_mode_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="feature_mode" constraintName="fk_feature_mode_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="feature_mode" constraintName="fk_feature_mode_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS feature_mode_update_trigger ON feature_mode;
CREATE TRIGGER feature_mode_update_trigger BEFORE UPDATE ON feature_mode FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS feature_mode_insert_trigger ON feature_mode;
CREATE TRIGGER feature_mode_insert_trigger BEFORE INSERT ON feature_mode FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,9 +11,21 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="module_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="module_pkey"/>
</column> </column>
<column name="name" type="VARCHAR(255)"/> <column name="name" type="VARCHAR(255)">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<sql>
DROP TRIGGER IF EXISTS module_update_trigger ON module;
CREATE TRIGGER module_update_trigger BEFORE UPDATE ON module FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS module_insert_trigger ON module;
CREATE TRIGGER module_insert_trigger BEFORE INSERT ON module FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,9 +11,13 @@
<column autoIncrement="true" name="id" type="BIGINT"> <column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="posttarget_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="posttarget_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<column name="name" type="VARCHAR(255)"/> <constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="name" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="channel_id" type="BIGINT"> <column name="channel_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
@@ -21,11 +25,20 @@
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_posttarget_name_server" tableName="posttarget">
<changeSet author="Sheldan" id="posttarget-fk_posttarget_channel"> <column name="name"/>
<column name="server_id"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="posttarget" constraintName="fk_posttarget_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/> <addForeignKeyConstraint baseColumnNames="channel_id" baseTableName="posttarget" constraintName="fk_posttarget_channel" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="channel" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="posttarget-fk_posttarget_server">
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="posttarget" constraintName="fk_posttarget_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="posttarget" constraintName="fk_posttarget_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS posttarget_update_trigger ON posttarget;
CREATE TRIGGER posttarget_update_trigger BEFORE UPDATE ON posttarget FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS posttarget_insert_trigger ON posttarget;
CREATE TRIGGER posttarget_insert_trigger BEFORE INSERT ON posttarget FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,15 +11,25 @@
<column name="id" type="BIGINT"> <column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="role_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="role_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="deleted" type="BOOLEAN">
<column name="deleted" type="BOOLEAN"/> <constraints nullable="true"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="role_server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="role" constraintName="fk_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<changeSet author="Sheldan" id="role-fk_role_server"> <sql>
<addForeignKeyConstraint baseColumnNames="role_server_id" baseTableName="role" constraintName="fk_role_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> DROP TRIGGER IF EXISTS role_update_trigger ON role;
CREATE TRIGGER role_update_trigger BEFORE UPDATE ON role FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS role_insert_trigger ON role;
CREATE TRIGGER role_insert_trigger BEFORE INSERT ON role FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -11,8 +11,19 @@
<column name="id" type="BIGINT"> <column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="server_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="server_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable> </createTable>
<sql>
DROP TRIGGER IF EXISTS server_update_trigger ON server;
CREATE TRIGGER server_update_trigger BEFORE UPDATE ON server FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS server_insert_trigger ON server;
CREATE TRIGGER server_insert_trigger BEFORE INSERT ON server FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -0,0 +1,8 @@
CREATE OR REPLACE FUNCTION insert_trigger_procedure() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.created := CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$;

View File

@@ -0,0 +1,8 @@
CREATE OR REPLACE FUNCTION update_trigger_procedure() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated := CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$;

View File

@@ -11,18 +11,32 @@
<column autoIncrement="true" name="id" type="INTEGER"> <column autoIncrement="true" name="id" type="INTEGER">
<constraints nullable="false" primaryKey="true" primaryKeyName="system_config_pkey"/> <constraints nullable="false" primaryKey="true" primaryKeyName="system_config_pkey"/>
</column> </column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/> <column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="double_value" type="FLOAT8"/> <column name="double_value" type="FLOAT8"/>
<column name="long_value" type="BIGINT"/> <column name="long_value" type="BIGINT"/>
<column name="name" type="VARCHAR(255)"/> <column name="name" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="string_value" type="VARCHAR(255)"/> <column name="string_value" type="VARCHAR(255)"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="server_id" type="BIGINT"> <column name="server_id" type="BIGINT">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
</createTable> </createTable>
</changeSet> <createIndex indexName="idx_system_config_name_server" tableName="system_config">
<changeSet author="Sheldan" id="system_config-fk_config_server"> <column name="name"/>
<column name="server_id"/>
</createIndex>
<addForeignKeyConstraint baseColumnNames="server_id" baseTableName="system_config" constraintName="fk_config_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/> <addForeignKeyConstraint baseColumnNames="server_id" baseTableName="system_config" constraintName="fk_config_server" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="server" validate="true"/>
<sql>
DROP TRIGGER IF EXISTS system_config_update_trigger ON system_config;
CREATE TRIGGER system_config_update_trigger BEFORE UPDATE ON system_config FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</sql>
<sql>
DROP TRIGGER IF EXISTS system_config_insert_trigger ON system_config;
CREATE TRIGGER system_config_insert_trigger BEFORE INSERT ON system_config FOR EACH ROW EXECUTE PROCEDURE insert_trigger_procedure();
</sql>
</changeSet> </changeSet>
</databaseChangeLog> </databaseChangeLog>

View File

@@ -6,6 +6,7 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" > http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<include file="trigger_functions.xml" relativeToChangelogFile="true"/>
<include file="server.xml" relativeToChangelogFile="true"/> <include file="server.xml" relativeToChangelogFile="true"/>
<include file="channel.xml" relativeToChangelogFile="true"/> <include file="channel.xml" relativeToChangelogFile="true"/>
<include file="default_post_target.xml" relativeToChangelogFile="true"/> <include file="default_post_target.xml" relativeToChangelogFile="true"/>

View File

@@ -0,0 +1,19 @@
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext ../../dbchangelog-3.8.xsd
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="insert_trigger" dbms="postgresql">
<sqlFile encoding="utf8" path="sql/insert_trigger.sql"
relativeToChangelogFile="true"
splitStatements="false"/>
</changeSet>
<changeSet author="Sheldan" id="update_trigger" dbms="postgresql">
<sqlFile encoding="utf8" path="sql/update_trigger.sql"
relativeToChangelogFile="true"
splitStatements="false"/>
</changeSet>
</databaseChangeLog>

View File

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

View File

@@ -40,17 +40,7 @@ public class ACommand implements Serializable {
@Column(name = "created") @Column(name = "created")
private Instant created; private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated") @Column(name = "updated")
private Instant updated; private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
} }

View File

@@ -7,6 +7,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
import java.time.Instant;
import java.util.List; import java.util.List;
@Entity(name = "command_in_server") @Entity(name = "command_in_server")
@@ -22,14 +23,15 @@ public class ACommandInAServer implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "command_in_server_id")
private Long commandInServerId; private Long commandInServerId;
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "commandReference", nullable = false) @JoinColumn(name = "command_id", nullable = false)
private ACommand commandReference; private ACommand commandReference;
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "serverReference", nullable = false) @JoinColumn(name = "server_id", nullable = false)
private AServer serverReference; private AServer serverReference;
@ManyToMany(fetch = FetchType.LAZY) @ManyToMany(fetch = FetchType.LAZY)
@@ -46,9 +48,16 @@ public class ACommandInAServer implements Serializable {
@Getter @Getter
@Setter @Setter
@Column @Column(name = "restricted")
private Boolean restricted; private Boolean restricted;
@Column(name = "created")
private Instant created;
@Column(name = "updated")
private Instant updated;
} }

Some files were not shown because too many files have changed in this diff Show More