[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">
<constraints nullable="false"/>
</column>
<column name="assignable_role_place_post_id" type="BIGINT">
<column name="place_post_id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="description" type="VARCHAR(255)"/>
<column name="required_level" type="INTEGER"/>
<column name="position" type="INTEGER"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="position" type="INTEGER">
<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>
</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"/>
</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"/>
</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"/>
</changeSet>
<changeSet author="Sheldan" id="assignable_role-fk_assignable_role_post">
<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"/>
<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>
DROP TRIGGER IF EXISTS assignable_role_update_trigger ON assignable_role;
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>
</databaseChangeLog>

View File

@@ -17,23 +17,41 @@
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</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="active" type="BOOLEAN"/>
<column name="inline" type="BOOLEAN"/>
<column name="unique_roles" type="BOOLEAN"/>
<column name="auto_remove" type="BOOLEAN"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="active" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="inline" type="BOOLEAN">
<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"/>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="assignable_role_place-fk_assignable_role_place_channel">
<createIndex indexName="idx_assignable_role_place" tableName="assignable_role_place">
<column name="server_id"/>
<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"/>
</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"/>
<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>
</databaseChangeLog>

View File

@@ -17,17 +17,21 @@
<column name="channel_id" type="BIGINT">
<constraints nullable="false"/>
</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>
</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"/>
</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"/>
<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>
</databaseChangeLog>

View File

@@ -11,8 +11,20 @@
<column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="assigned_role_user_pkey"/>
</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>
<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 author="Sheldan" id="assigned_role_in_user-table">
<createTable tableName="assigned_role_in_user">
@@ -23,16 +35,8 @@
<constraints nullable="false"/>
</column>
</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"/>
</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"/>
</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>

View File

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

View File

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

View File

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

View File

@@ -50,8 +50,8 @@ public interface UserExperienceRepository extends JpaRepository<AUserExperience
*/
@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 ) " +
" 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" +
" 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_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\" " +
"FROM user_experience_ranked rank " +

View File

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

View File

@@ -6,19 +6,25 @@
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="disabled_experience_roles-table">
<createTable tableName="disabled_experience_roles">
<changeSet author="Sheldan" id="disabled_experience_role-table">
<createTable tableName="disabled_experience_role">
<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 name="role_id" type="BIGINT">
<constraints nullable="false"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="disabled_experience_roles-fk_disabled_experience_role_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"/>
<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>
DROP TRIGGER IF EXISTS disabled_experience_role_update_trigger ON disabled_experience_role;
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>
</databaseChangeLog>

View File

@@ -11,9 +11,22 @@
<column name="level" type="INTEGER">
<constraints nullable="false" primaryKey="true" primaryKeyName="experience_level_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="experience_needed" type="BIGINT"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="experience_needed" type="BIGINT">
<constraints nullable="true"/>
</column>
</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>
</databaseChangeLog>

View File

@@ -8,30 +8,30 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="experience_role-table">
<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"/>
</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="level_id" type="INTEGER">
<constraints nullable="false"/>
</column>
<column name="role_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</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"/>
</changeSet>
<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="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"/>
<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>
</databaseChangeLog>

View File

@@ -11,22 +11,34 @@
<column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="user_experience_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="experience" type="BIGINT"/>
<column name="experience_gain_disabled" type="BOOLEAN"/>
<column name="message_count" type="BIGINT"/>
<column name="experience" type="BIGINT">
<constraints nullable="true"/>
</column>
<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="experience_role_id" type="BIGINT"/>
<column name="role_id" type="BIGINT"/>
<column name="level_id" type="INTEGER">
<constraints nullable="false"/>
</column>
</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 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>

View File

@@ -6,6 +6,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
/**
* A role for which the experience gain in a particular server has been disabled.
@@ -14,21 +15,28 @@ import java.io.Serializable;
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "disabled_experience_roles")
@Table(name = "disabled_experience_role")
@Getter
@Setter
@EqualsAndHashCode
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class ADisabledExpRole implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "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.
*/
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id", nullable = false)
private ARole role;
@Column(name = "created")
private Instant created;
@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.
*/
@Id
@Column(name = "level")
private Integer level;
/**
* The total amount of experience needed for this level.
*/
@Column(name = "experience_needed")
private Long experienceNeeded;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
}

View File

@@ -31,9 +31,13 @@ public class AExperienceRole implements Serializable {
* The abstracto unique id of this experience role.
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "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.
*/
@@ -50,29 +54,12 @@ public class AExperienceRole implements Serializable {
@JoinColumn(name = "server_id", nullable = false)
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")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
/**
* 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.
*/
@Id
@Column(name = "id")
private Long id;
@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
*/
@Column(name = "experience")
private Long experience;
/**
* The total amount of messages the user has written in the guild resulting in the experience.
*/
@Column(name = "message_count")
private Long messageCount;
/**
* Whether or not the experience gain has been disabled for this user
*/
@Column(name = "experience_gain_disabled")
private Boolean experienceGainDisabled;
/**
@@ -61,25 +65,15 @@ public class AUserExperience implements Serializable {
* The {@link AExperienceRole} the user currently has. Can be null.
*/
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name = "experience_role_id")
@JoinColumn(name = "role_id")
private AExperienceRole currentExperienceRole;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
public Integer getLevelOrDefault() {
return currentLevel != null ? currentLevel.getLevel() : 0;
}

View File

@@ -1,5 +1,6 @@
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.moderation.models.database.Mute;
import org.jetbrains.annotations.NotNull;
@@ -12,7 +13,7 @@ import java.util.List;
import java.util.Optional;
@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"))
boolean existsByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);

View File

@@ -12,7 +12,10 @@
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="allowed_invite_link_pkey"/>
</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)">
<constraints nullable="false"/>
</column>
@@ -20,11 +23,19 @@
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="allowed_invite_link-fk_allowed_invite_link_server">
<createIndex indexName="idx_allowed_invite_code_server" tableName="allowed_invite_link">
<column name="code"/>
<column name="server_id"/>
</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"/>
<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>
</databaseChangeLog>

View File

@@ -12,7 +12,9 @@
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="filtered_invite_link_pkey"/>
</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="uses" type="BIGINT">
<constraints nullable="false"/>
@@ -24,11 +26,22 @@
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="filtered_invite_link-fk_filtered_invite_link_server">
<createIndex indexName="idx_filtered_invite_link_server" tableName="filtered_invite_link">
<column name="server_id"/>
</createIndex>
<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"/>
<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>
</databaseChangeLog>

View File

@@ -9,16 +9,24 @@
<changeSet author="Sheldan" id="mute-table">
<createTable tableName="mute">
<column name="id" type="BIGINT" />
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="reason" type="VARCHAR(255)"/>
<column name="trigger_key" type="VARCHAR(255)"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</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="mute_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="mute_target_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="muted_user" type="BIGINT">
<column name="mute_date" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</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"/>
</column>
<column name="muting_channel" type="BIGINT">
<column name="channel_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
@@ -26,25 +34,23 @@
</column>
<column name="mute_ended" type="BOOLEAN"/>
<column name="message_id" type="BIGINT"/>
<column name="muting_user" type="BIGINT">
<column name="muting_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
<addPrimaryKey columnNames="server_id, id" tableName="mute" constraintName="pk_mute" validate="true"/>
</changeSet>
<changeSet author="Sheldan" id="mute-fk_mute_channel">
<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="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"/>
<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="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>
</databaseChangeLog>

View File

@@ -12,7 +12,9 @@
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="mute_role_pkey"/>
</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="role_id" type="BIGINT">
<constraints nullable="false"/>
@@ -21,15 +23,19 @@
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="1593469295954-78">
<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"/>
</changeSet>
<changeSet author="Sheldan" id="1593469295954-126">
<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"/>
<createIndex indexName="idx_mute_role_server" tableName="mute_role">
<column name="server_id"/>
</createIndex>
<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="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"/>
<sql>
DROP TRIGGER IF EXISTS mute_role_update_trigger ON mute_role;
CREATE TRIGGER mute_role_update_trigger BEFORE UPDATE ON mute_role FOR EACH ROW EXECUTE PROCEDURE update_trigger_procedure();
</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>
</databaseChangeLog>

View File

@@ -8,24 +8,35 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="user_note-table">
<createTable tableName="user_note">
<column autoIncrement="true" name="id" type="BIGINT" />
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column autoIncrement="true" name="id" 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="note" type="VARCHAR(2000)"/>
<column name="note_user" type="BIGINT">
<column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</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"/>
</changeSet>
<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="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"/>
<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>
</databaseChangeLog>

View File

@@ -8,34 +8,46 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="warning-table">
<createTable tableName="warning">
<column autoIncrement="true" name="id" type="BIGINT" />
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="id" 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="decay_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="decayed" type="BOOLEAN"/>
<column name="reason" type="VARCHAR(255)"/>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="warn_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="warned_user_id" type="BIGINT">
<column name="reason" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<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"/>
</column>
<column name="warning_user_id" type="BIGINT">
<column name="warning_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</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"/>
</changeSet>
<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="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"/>
<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>
</databaseChangeLog>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -6,26 +6,42 @@
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="modmail_message-table">
<createTable tableName="modmail_message">
<column name="message_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_message_pkey"/>
<changeSet author="Sheldan" id="mod_mail_message-table">
<createTable tableName="mod_mail_message">
<column name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="mod_mail_message_pkey"/>
</column>
<column name="anonymous" type="BOOLEAN"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="dm_channel" type="BOOLEAN"/>
<column name="modmail_message_author" type="BIGINT">
<column name="created_message_in_dm" type="BIGINT" />
<column name="created_message_in_channel" type="BIGINT" />
<column name="anonymous" 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="dm_channel" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="author_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="thread_reference" type="BIGINT">
<column name="thread_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="modmail_message-fk_modmail_message_thread">
<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"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_message-fk_modmail_message_author">
<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"/>
<createIndex indexName="idx_mod_mail_message_thread" tableName="mod_mail_message">
<column name="thread_id"/>
</createIndex>
<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"/>
<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"/>
<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>
</databaseChangeLog>

View File

@@ -6,25 +6,32 @@
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="modmail_role-table">
<createTable tableName="modmail_role">
<column autoIncrement="true" name="mod_mail_role_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_role_pkey"/>
<changeSet author="Sheldan" id="mod_mail_role-table">
<createTable tableName="mod_mail_role">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="mod_mail_role_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="created" 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"/>
</column>
<column name="modmail_role_server" type="BIGINT">
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</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 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>

View File

@@ -6,26 +6,32 @@
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="modmail_subscriber-table">
<createTable tableName="modmail_subscriber">
<column autoIncrement="true" name="subscriber_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="modmail_subscriber_pkey"/>
<changeSet author="Sheldan" id="mod_mail_subscriber-table">
<createTable tableName="mod_mail_subscriber">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="mod_mail_subscriber_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="modmail_thread_subscriber" type="BIGINT">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="mod_mail_thread" type="BIGINT">
<column name="mod_mail_thread_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="modmail_subscriber-fk_modmail_thread_subscriber_user">
<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"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_subscriber-fk_modmail_thread_thread">
<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"/>
<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"/>
<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"/>
<sql>
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();
</sql>
<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>
</databaseChangeLog>

View File

@@ -6,33 +6,51 @@
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="modmail_thread-table">
<createTable tableName="modmail_thread">
<changeSet author="Sheldan" id="mod_mail_thread-table">
<createTable tableName="mod_mail_thread">
<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 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="modmail_thread_channel" type="BIGINT">
<column name="state" type="VARCHAR(255)">
<constraints nullable="true"/>
</column>
<column name="channel_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="modmail_thread_server" type="BIGINT">
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="modmail_user" type="BIGINT">
<column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_channel">
<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"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_user">
<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"/>
</changeSet>
<changeSet author="Sheldan" id="modmail_thread-fk_modmail_thread_server">
<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"/>
<createIndex indexName="idx_mod_mail_thread_user" tableName="mod_mail_thread">
<column name="user_in_server_id"/>
</createIndex>
<createIndex indexName="idx_mod_mail_thread_channel" tableName="mod_mail_thread">
<column name="channel_id"/>
</createIndex>
<createIndex indexName="idx_mod_mail_thread_user_state" tableName="mod_mail_thread">
<column name="user_in_server_id"/>
<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>
</databaseChangeLog>

View File

@@ -17,7 +17,7 @@ import java.time.Instant;
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "modmail_message")
@Table(name = "mod_mail_message")
@Getter
@Setter
@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
*/
@Id
@Column(name = "id")
private Long messageId;
/**
@@ -38,41 +39,39 @@ public class ModMailMessage implements Serializable {
*/
@Column(name = "created_message_in_dm")
private Long createdMessageInDM;
@Column
@Column(name = "created_message_in_channel")
private Long createdMessageInChannel;
/**
* The {@link AUserInAServer} which authored this message
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_message_author", nullable = false)
@JoinColumn(name = "author_user_in_server_id", nullable = false)
private AUserInAServer author;
/**
* 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})
@JoinColumn(name = "threadReference", nullable = false)
@JoinColumn(name = "thread_id", nullable = false)
private ModMailThread threadReference;
/**
* 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
*/
@Column
@Column(name = "dm_channel")
private Boolean dmChannel;
/**
* Staff only: Whether or not this message meant to be sent anonymous
*/
@Column
@Column(name = "anonymous")
private Boolean anonymous;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
}

View File

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

View File

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

View File

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

View File

@@ -8,22 +8,45 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="tracked_emote-table">
<createTable tableName="tracked_emote">
<column name="id" type="BIGINT" />
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="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="name" type="VARCHAR(32)"/>
<column name="animated" type="BOOLEAN"/>
<column name="tracking_enabled" type="BOOLEAN"/>
<column name="deleted" type="BOOLEAN"/>
<column name="external" type="BOOLEAN"/>
<column name="name" type="VARCHAR(32)">
<constraints nullable="true"/>
</column>
<column name="animated" 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="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</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"/>
</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"/>
<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>
</databaseChangeLog>

View File

@@ -8,17 +8,39 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="used_emote-table">
<createTable tableName="used_emote">
<column name="emote_id" type="BIGINT" />
<column name="server_id" type="BIGINT" />
<column name="use_date" type="DATE" />
<column name="amount" type="BIGINT"/>
<column name="emote_id" type="BIGINT" >
<constraints nullable="true"/>
</column>
<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>
<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"/>
</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"/>
</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"/>
<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>
</databaseChangeLog>

View File

@@ -78,19 +78,9 @@ public class TrackedEmote implements Serializable, Fakeable {
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
@PreUpdate
private void onUpdate() {
this.updated = Instant.now();
}
/**
* 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}.

View File

@@ -5,6 +5,7 @@ import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.time.Instant;
/**
* 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")
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"))
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" +
"INNER JOIN starboard_post p ON p.id = r.post_id\n" +
"INNER JOIN channel c ON c.id = p.channel_id\n" +
"WHERE c.server_id = :serverId\n" +
"GROUP BY r.reactor_id \n" +
"WHERE p.server_id = :serverId\n" +
"GROUP BY r.reactor_user_in_server_id \n" +
"ORDER BY starCount DESC \n" +
"LIMIT :count", nativeQuery = true)
List<StarStatsUserResult> findTopStarGiverInServer(Long serverId, Integer count);
@@ -31,17 +30,15 @@ public interface StarboardPostReactionRepository extends JpaRepository<Starboard
@Query(value = "SELECT COUNT(*) \n" +
"FROM starboard_post_reaction r \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 c.server_id = :serverId\n"
"WHERE p.server_id = :serverId\n"
, nativeQuery = true)
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" +
"INNER JOIN starboard_post p ON p.id = r.post_id\n" +
"INNER JOIN channel c ON c.id = p.channel_id\n" +
"WHERE c.server_id = :serverId\n" +
"GROUP BY p.poster \n" +
"WHERE p.server_id = :serverId\n" +
"GROUP BY p.author_user_in_server_id \n" +
"ORDER BY starCount DESC \n" +
"LIMIT :count", nativeQuery = true)
List<StarStatsUserResult> retrieveTopStarReceiverInServer(Long serverId, Integer count);

View File

@@ -21,6 +21,6 @@ public interface StarboardPostRepository extends JpaRepository<StarboardPost, Lo
boolean existsByStarboardMessageId(Long messageId);
@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;
import dev.sheldan.abstracto.core.models.ServerSpecificId;
import dev.sheldan.abstracto.utility.models.database.Suggestion;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.jpa.repository.JpaRepository;
@@ -11,9 +12,9 @@ import javax.persistence.QueryHint;
import java.util.Optional;
@Repository
public interface SuggestionRepository extends JpaRepository<Suggestion, Long> {
public interface SuggestionRepository extends JpaRepository<Suggestion, ServerSpecificId> {
@NotNull
@Override
@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
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);
log.info("Accepting suggestion {} in server {}.", suggestionId, suggestion.getServer().getId());
return updateSuggestion(text, suggestionLog, suggestion);
@@ -155,7 +155,7 @@ public class SuggestionServiceBean implements SuggestionService {
@Override
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);
log.info("Rejecting suggestion {} in server {}.", suggestionId, suggestion.getServer().getId());
return updateSuggestion(text, suggestionLog, suggestion);

View File

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

View File

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

View File

@@ -11,15 +11,20 @@
<column name="embedding_message_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="embedded_message_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="embedded_message_id" type="BIGINT"/>
<column name="original_channel" type="BIGINT">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</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"/>
</column>
<column name="original_server" type="BIGINT">
<column name="embedded_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="embedded_user" type="BIGINT">
<column name="embedded_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="embedding_channel" type="BIGINT">
@@ -28,27 +33,24 @@
<column name="embedding_server" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="embedding_user" type="BIGINT">
<column name="embedding_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</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"/>
</changeSet>
<changeSet author="Sheldan" id="embedded_message-fk_original_channel">
<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"/>
</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="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"/>
<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="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"/>
<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 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>

View File

@@ -8,9 +8,13 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="posted_image-table">
<createTable tableName="posted_image">
<column name="message_id" type="BIGINT" />
<column name="position" type="INTEGER" />
<column name="posting_user_id" type="BIGINT">
<column name="message_id" type="BIGINT" >
<constraints nullable="true"/>
</column>
<column name="position" type="INTEGER" >
<constraints nullable="true"/>
</column>
<column name="author_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="posted_channel_id" type="BIGINT">
@@ -22,25 +26,33 @@
<column name="image_hash" type="VARCHAR(512)">
<constraints nullable="false"/>
</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>
<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"/>
</changeSet>
<changeSet author="Sheldan" id="posted_image-fk_posted_image_user">
<addForeignKeyConstraint baseColumnNames="posting_user_id" baseTableName="posted_image" constraintName="fk_posted_image_user"
<addForeignKeyConstraint baseColumnNames="author_user_in_server_id" baseTableName="posted_image" constraintName="fk_posted_image_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="posted_image-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"
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"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id"
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>
</databaseChangeLog>

View File

@@ -12,32 +12,46 @@
<constraints nullable="false" primaryKey="true" primaryKeyName="reminder_pkey"/>
</column>
<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">
<constraints nullable="false"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="target_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="text" 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="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">
<constraints nullable="false"/>
</column>
<column name="reminded_user" type="BIGINT">
<column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="reminder-fk_reminder_channel">
<createIndex indexName="idx_reminder_user_reminded" tableName="reminder">
<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"/>
</changeSet>
<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="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"/>
<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>
</databaseChangeLog>

View File

@@ -8,8 +8,12 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="repost-table">
<createTable tableName="repost">
<column name="message_id" type="BIGINT" />
<column name="position" type="INTEGER" />
<column name="message_id" type="BIGINT" >
<constraints nullable="true"/>
</column>
<column name="position" type="INTEGER" >
<constraints nullable="true"/>
</column>
<column name="user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
@@ -19,26 +23,29 @@
<column name="count" type="INTEGER">
<constraints nullable="false"/>
</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>
<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"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION"
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"
deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="message_id, position"
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"
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 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>
</databaseChangeLog>

View File

@@ -8,16 +8,28 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="repost_check_channel_group-table">
<createTable tableName="repost_check_channel_group">
<column name="id" type="BIGINT" />
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="id" 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="enabled" type="BOOLEAN"/>
<column name="enabled" type="BOOLEAN">
<constraints nullable="true"/>
</column>
</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"
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>
</databaseChangeLog>

View File

@@ -11,13 +11,23 @@
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="starboard_post_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="ignored" type="BOOLEAN"/>
<column name="post_message_id" type="BIGINT"/>
<column name="starboard_message_id" type="BIGINT"/>
<column name="starred_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="ignored" type="BOOLEAN">
<constraints nullable="true"/>
</column>
<column name="post_message_id" type="BIGINT">
<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="poster" type="BIGINT">
<column name="author_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="source_channel_id" type="BIGINT">
@@ -26,17 +36,34 @@
<column name="channel_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet author="Sheldan" id="starboard-fk_starboard_post_poster">
<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"/>
</changeSet>
<changeSet author="Sheldan" id="starboard-fk_starboard_post_channel">
<createIndex indexName="idx_starboard_post_message" tableName="starboard_post">
<column name="post_message_id"/>
</createIndex>
<createIndex indexName="idx_starboard_starboard_message" tableName="starboard_post">
<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"/>
</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"/>
</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>

View File

@@ -11,18 +11,28 @@
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true" primaryKeyName="starboard_post_reaction_pkey"/>
</column>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="reactor_id" type="BIGINT">
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE">
<constraints nullable="true"/>
</column>
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="reactor_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
<column name="post_id" type="BIGINT"/>
<column name="post_id" type="BIGINT">
<constraints nullable="true"/>
</column>
</createTable>
</changeSet>
<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="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"/>
<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>
</databaseChangeLog>

View File

@@ -8,27 +8,46 @@
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
<changeSet author="Sheldan" id="suggestion-table">
<createTable tableName="suggestion">
<column autoIncrement="true" name="id" type="BIGINT"/>
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="message_id" type="BIGINT"/>
<column name="state" type="VARCHAR(255)"/>
<column name="suggestion_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="message_id" type="BIGINT">
<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="channel_id" type="BIGINT"/>
<column name="server_id" type="BIGINT"/>
<column name="suggester_id" type="BIGINT">
<column name="channel_id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="server_id" type="BIGINT">
<constraints nullable="true"/>
</column>
<column name="suggester_user_in_server_id" type="BIGINT">
<constraints nullable="false"/>
</column>
</createTable>
<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"/>
</changeSet>
<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="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"/>
<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>
</databaseChangeLog>

View File

@@ -139,8 +139,11 @@ public class SuggestionServiceBeanTest {
@Test(expected = SuggestionNotFoundException.class)
public void testAcceptNotExistingSuggestion() {
when(suggestionManagementService.getSuggestion(SUGGESTION_ID)).thenReturn(Optional.empty());
testUnit.acceptSuggestion(SUGGESTION_ID, CLOSING_TEXT, SuggestionLog.builder().build());
when(suggestionManagementService.getSuggestion(SUGGESTION_ID, SERVER_ID)).thenReturn(Optional.empty());
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
@@ -151,7 +154,10 @@ public class SuggestionServiceBeanTest {
@Test(expected = ChannelNotInGuildException.class)
public void testAcceptSuggestionInNoTextChannel() {
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() {
@@ -167,7 +173,7 @@ public class SuggestionServiceBeanTest {
when(server.getId()).thenReturn(SERVER_ID);
when(channel.getId()).thenReturn(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)
@@ -200,8 +206,11 @@ public class SuggestionServiceBeanTest {
@Test(expected = SuggestionNotFoundException.class)
public void testRejectNotExistingSuggestion() {
when(suggestionManagementService.getSuggestion(SUGGESTION_ID)).thenReturn(Optional.empty());
testUnit.rejectSuggestion(SUGGESTION_ID, CLOSING_TEXT, SuggestionLog.builder().build());
when(suggestionManagementService.getSuggestion(SUGGESTION_ID, SERVER_ID)).thenReturn(Optional.empty());
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
@@ -212,28 +221,35 @@ public class SuggestionServiceBeanTest {
@Test(expected = ChannelNotInGuildException.class)
public void testRejectSuggestionInNoTextChannel() {
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) {
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);
Message suggestionMessage = Mockito.mock(Message.class);
when(channelService.retrieveMessageInChannel(textChannel, messageId)).thenReturn(CompletableFuture.completedFuture(suggestionMessage));
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);
}
private void executeRejectWithMember(Member actualMember) {
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);
Message suggestionMessage = Mockito.mock(Message.class);
when(channelService.retrieveMessageInChannel(textChannel, messageId)).thenReturn(CompletableFuture.completedFuture(suggestionMessage));
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);
}
@@ -250,7 +266,7 @@ public class SuggestionServiceBeanTest {
when(channel.getId()).thenReturn(CHANNEL_ID);
when(suggester.getUserReference()).thenReturn(suggesterUser);
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);
return suggestionToAccept;
}

View File

@@ -88,7 +88,7 @@ public class StarboardPostManagementServiceBeanTest {
StarboardPost starboardPost2 = StarboardPost.builder().reactions(Arrays.asList(reaction)).build();
StarboardPost starboardPost3 = StarboardPost.builder().reactions(new ArrayList<>()).build();
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);
Assert.assertEquals(count.intValue(), topPosts.size());
StarboardPost topMostPost = topPosts.get(0);
@@ -107,7 +107,7 @@ public class StarboardPostManagementServiceBeanTest {
StarboardPost starboardPost2 = StarboardPost.builder().reactions(Arrays.asList(reaction)).build();
StarboardPost starboardPost3 = StarboardPost.builder().reactions(new ArrayList<>()).build();
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);
StarboardPost topMostPost = topPosts.get(0);
StarboardPost secondTop = topPosts.get(1);
@@ -190,7 +190,7 @@ public class StarboardPostManagementServiceBeanTest {
StarboardPost starboardPost1 = StarboardPost.builder().build();
StarboardPost starboardPost2 = StarboardPost.builder().build();
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());
Assert.assertEquals(posts.size(), retrievedPostCount.intValue());
}

View File

@@ -29,7 +29,6 @@ import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class SuggestionManagementServiceBeanTest {
public static final long CHANNEL_ID = 6L;
@InjectMocks
private SuggestionManagementServiceBean testUnit;
@@ -45,6 +44,10 @@ public class SuggestionManagementServiceBeanTest {
@Mock
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
public void testCreateSuggestionViaUser() {
AServer server = MockUtils.getServer();
@@ -89,28 +92,36 @@ public class SuggestionManagementServiceBeanTest {
@Test
public void testGetSuggestion() {
Long suggestionId = 5L;
Suggestion foundSuggestion = Suggestion.builder().suggestionId(new ServerSpecificId(0L, suggestionId)).build();
when(suggestionRepository.findById(suggestionId)).thenReturn(Optional.of(foundSuggestion));
Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(suggestionId);
Suggestion foundSuggestion = buildSuggestion();
when(suggestionRepository.findById(new ServerSpecificId(SERVER_ID, SUGGESTION_ID))).thenReturn(Optional.of(foundSuggestion));
Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(SUGGESTION_ID, SERVER_ID);
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
public void testGetSuggestionNotFound() {
Long suggestionId = 5L;
when(suggestionRepository.findById(suggestionId)).thenReturn(Optional.empty());
Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(suggestionId);
when(suggestionRepository.findById(new ServerSpecificId(SERVER_ID, SUGGESTION_ID))).thenReturn(Optional.empty());
Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(SUGGESTION_ID, SERVER_ID);
Assert.assertFalse(suggestionOptional.isPresent());
}
@Test
public void setSuggestionState() {
Suggestion suggestion = Suggestion.builder().suggestionId(new ServerSpecificId(0L, 4L)).build();
Suggestion suggestion = buildSuggestion();
testUnit.setSuggestionState(suggestion, SuggestionState.ACCEPTED);
Assert.assertEquals(suggestion.getState(), SuggestionState.ACCEPTED);
verify(suggestion, times(1)).setState(SuggestionState.ACCEPTED);
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
@ManyToOne
@JoinColumn(name = "embeddedUser", nullable = false)
@JoinColumn(name = "embedded_user_in_server_id", nullable = false)
private AUserInAServer embeddedUser;
@Getter
@ManyToOne
@JoinColumn(name = "embeddingUser", nullable = false)
@JoinColumn(name = "embedding_user_in_server_id", nullable = false)
private AUserInAServer embeddingUser;
@Getter
@ManyToOne
@JoinColumn(name = "originalServer", nullable = false)
@JoinColumn(name = "embedded_server_id", nullable = false)
private AServer embeddedServer;
@Getter
@ManyToOne
@JoinColumn(name = "originalChannel", nullable = false)
@JoinColumn(name = "embedded_channel_id", nullable = false)
private AChannel embeddedChannel;
@Column
@Column(name = "embedded_message_id")
private Long embeddedMessageId;
@Getter
@ManyToOne
@JoinColumn(name = "embeddingServer", nullable = false)
@JoinColumn(name = "embedding_server_id", nullable = false)
private AServer embeddingServer;
@Getter
@@ -55,15 +55,14 @@ public class EmbeddedMessage implements Serializable {
@JoinColumn(name = "embeddingChannel", nullable = false)
private AChannel embeddingChannel;
@Column
@Column(name = "embedding_message_id")
@Id
private Long embeddingMessageId;
@Column(name = "created")
private Instant created;
@PrePersist
private void onInsert() {
this.created = Instant.now();
}
@Column(name = "updated")
private Instant updated;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -11,6 +11,6 @@ import java.util.Optional;
public interface SuggestionManagementService {
Suggestion createSuggestion(Member 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);
}