mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-12 01:54:30 +00:00
[AB-161] fixed composite foreign keys for multiple tables
This commit is contained in:
@@ -8,9 +8,7 @@
|
||||
http://www.liquibase.org/xml/ns/pro ../../dbchangelog-3.8.xsd" >
|
||||
<changeSet author="Sheldan" id="mute-table">
|
||||
<createTable tableName="mute">
|
||||
<column autoIncrement="true" name="id" type="BIGINT">
|
||||
<constraints nullable="false" primaryKey="true" primaryKeyName="mute_pkey"/>
|
||||
</column>
|
||||
<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)"/>
|
||||
@@ -32,6 +30,7 @@
|
||||
<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">
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
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">
|
||||
<constraints nullable="false" primaryKey="true" primaryKeyName="user_note_pkey"/>
|
||||
</column>
|
||||
<column autoIncrement="true" name="id" type="BIGINT" />
|
||||
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
|
||||
<column name="note" type="VARCHAR(2000)"/>
|
||||
<column name="note_user" type="BIGINT">
|
||||
@@ -20,6 +18,7 @@
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
</createTable>
|
||||
<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">
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
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">
|
||||
<constraints nullable="false" primaryKey="true" primaryKeyName="warning_pkey"/>
|
||||
</column>
|
||||
<column autoIncrement="true" name="id" type="BIGINT" />
|
||||
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
|
||||
<column name="decay_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
|
||||
<column name="decayed" type="BOOLEAN"/>
|
||||
@@ -27,9 +25,9 @@
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
</createTable>
|
||||
<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>
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
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">
|
||||
<constraints nullable="false" primaryKey="true" primaryKeyName="tracked_emote_pkey"/>
|
||||
</column>
|
||||
<column name="id" type="BIGINT" />
|
||||
<column name="updated" type="TIMESTAMP WITHOUT TIME ZONE"/>
|
||||
<column name="created" type="TIMESTAMP WITHOUT TIME ZONE"/>
|
||||
<column name="name" type="VARCHAR(32)"/>
|
||||
@@ -23,6 +21,7 @@
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
</createTable>
|
||||
<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"/>
|
||||
|
||||
@@ -8,22 +8,17 @@
|
||||
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">
|
||||
<constraints nullable="false" primaryKey="true" primaryKeyName="used_emote_pkey"/>
|
||||
</column>
|
||||
<column name="server_id" type="BIGINT">
|
||||
<constraints nullable="false" primaryKey="true" primaryKeyName="used_emote_pkey"/>
|
||||
</column>
|
||||
<column name="use_date" type="DATE">
|
||||
<constraints nullable="false" primaryKey="true" primaryKeyName="used_emote_pkey"/>
|
||||
</column>
|
||||
<column name="emote_id" type="BIGINT" />
|
||||
<column name="server_id" type="BIGINT" />
|
||||
<column name="use_date" type="DATE" />
|
||||
<column name="amount" type="BIGINT"/>
|
||||
</createTable>
|
||||
<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" baseTableName="used_emote" constraintName="fk_used_emote_tracked_emote" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id" referencedTableName="tracked_emote" validate="true"/>
|
||||
<addForeignKeyConstraint baseColumnNames="emote_id, server_id" baseTableName="used_emote" constraintName="fk_used_emote_tracked_emote" deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" referencedColumnNames="id, server_id" referencedTableName="tracked_emote" validate="true"/>
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
@@ -103,7 +103,7 @@ public class SuggestionServiceBean implements SuggestionService {
|
||||
Long channelId = suggestion.getChannel().getId();
|
||||
Long originalMessageId = suggestion.getMessageId();
|
||||
Long serverId = suggestion.getServer().getId();
|
||||
log.info("Updated posted suggestion {} in server {}.", suggestion.getId(), suggestion.getServer().getId());
|
||||
log.info("Updated posted suggestion {} in server {}.", suggestion.getSuggestionId().getId(), suggestion.getServer().getId());
|
||||
|
||||
suggestionLog.setOriginalChannelId(channelId);
|
||||
suggestionLog.setOriginalMessageId(originalMessageId);
|
||||
@@ -112,7 +112,7 @@ public class SuggestionServiceBean implements SuggestionService {
|
||||
TextChannel textChannelById = botService.getTextChannelFromServer(serverId, channelId);
|
||||
CompletableFuture<Member> memberById = botService.getMemberInServerAsync(serverId, suggester.getUserReference().getId());
|
||||
suggestionLog.setState(suggestion.getState());
|
||||
suggestionLog.setSuggestionId(suggestion.getId());
|
||||
suggestionLog.setSuggestionId(suggestion.getSuggestionId().getId());
|
||||
CompletableFuture<Void> finalFuture = new CompletableFuture<>();
|
||||
memberById.whenComplete((member, throwable) -> {
|
||||
if(throwable == null) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.utility.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
@@ -47,7 +48,7 @@ public class SuggestionManagementServiceBean implements SuggestionManagementServ
|
||||
.builder()
|
||||
.state(SuggestionState.NEW)
|
||||
.suggester(suggester)
|
||||
.id(suggestionId)
|
||||
.suggestionId(new ServerSpecificId(suggester.getServerReference().getId(), suggestionId))
|
||||
.server(suggester.getServerReference())
|
||||
.suggestionDate(Instant.now())
|
||||
.channel(channel)
|
||||
@@ -68,7 +69,7 @@ public class SuggestionManagementServiceBean implements SuggestionManagementServ
|
||||
@Override
|
||||
public void setSuggestionState(Suggestion suggestion, SuggestionState newState) {
|
||||
suggestion.setState(newState);
|
||||
log.info("Setting suggestion {} to state {}.", suggestion.getId(), newState);
|
||||
log.info("Setting suggestion {} in server {} to state {}.", suggestion.getSuggestionId().getId(), suggestion.getSuggestionId().getServerId(), newState);
|
||||
suggestionRepository.save(suggestion);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,9 +8,7 @@
|
||||
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">
|
||||
<constraints nullable="false" primaryKey="true" primaryKeyName="suggestion_pkey"/>
|
||||
</column>
|
||||
<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)"/>
|
||||
@@ -22,6 +20,7 @@
|
||||
<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"/>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.sheldan.abstracto.utility.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.ChannelNotFoundException;
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||
@@ -150,7 +151,7 @@ public class SuggestionServiceBeanTest {
|
||||
.builder()
|
||||
.channel(channel)
|
||||
.server(server)
|
||||
.id(SUGGESTION_ID)
|
||||
.suggestionId(new ServerSpecificId(server.getId(), SUGGESTION_ID))
|
||||
.suggester(suggester)
|
||||
.messageId(messageId)
|
||||
.build();
|
||||
@@ -235,7 +236,7 @@ public class SuggestionServiceBeanTest {
|
||||
.builder()
|
||||
.channel(channel)
|
||||
.server(server)
|
||||
.id(SUGGESTION_ID)
|
||||
.suggestionId(new ServerSpecificId(server.getId(), SUGGESTION_ID))
|
||||
.suggester(suggester)
|
||||
.messageId(messageId)
|
||||
.build();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.utility.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||
@@ -89,11 +90,11 @@ public class SuggestionManagementServiceBeanTest {
|
||||
@Test
|
||||
public void testGetSuggestion() {
|
||||
Long suggestionId = 5L;
|
||||
Suggestion foundSuggestion = Suggestion.builder().id(suggestionId).build();
|
||||
Suggestion foundSuggestion = Suggestion.builder().suggestionId(new ServerSpecificId(0L, suggestionId)).build();
|
||||
when(suggestionRepository.findById(suggestionId)).thenReturn(Optional.of(foundSuggestion));
|
||||
Optional<Suggestion> suggestionOptional = testUnit.getSuggestion(suggestionId);
|
||||
Assert.assertTrue(suggestionOptional.isPresent());
|
||||
suggestionOptional.ifPresent(suggestion -> Assert.assertEquals(suggestionId, suggestion.getId()));
|
||||
suggestionOptional.ifPresent(suggestion -> Assert.assertEquals(suggestionId, suggestion.getSuggestionId().getId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -107,7 +108,7 @@ public class SuggestionManagementServiceBeanTest {
|
||||
|
||||
@Test
|
||||
public void setSuggestionState() {
|
||||
Suggestion suggestion = Suggestion.builder().build();
|
||||
Suggestion suggestion = Suggestion.builder().suggestionId(new ServerSpecificId(0L, 4L)).build();
|
||||
testUnit.setSuggestionState(suggestion, SuggestionState.ACCEPTED);
|
||||
Assert.assertEquals(suggestion.getState(), SuggestionState.ACCEPTED);
|
||||
verify(suggestionRepository, times(1)).save(suggestion);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.utility.models.database;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
@@ -10,7 +11,6 @@ import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.time.Instant;
|
||||
import java.util.Objects;
|
||||
|
||||
@Entity
|
||||
@Table(name="suggestion")
|
||||
@@ -25,9 +25,9 @@ import java.util.Objects;
|
||||
public class Suggestion implements Serializable {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Getter
|
||||
private Long id;
|
||||
@EmbeddedId
|
||||
private ServerSpecificId suggestionId;
|
||||
|
||||
@Getter
|
||||
@ManyToOne
|
||||
@@ -43,9 +43,9 @@ public class Suggestion implements Serializable {
|
||||
@JoinColumn(name = "channelId")
|
||||
private AChannel channel;
|
||||
|
||||
@Getter
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "serverId")
|
||||
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||
@MapsId("serverId")
|
||||
@JoinColumn(name = "server_id", referencedColumnName = "id", nullable = false)
|
||||
private AServer server;
|
||||
|
||||
@Getter
|
||||
@@ -71,22 +71,4 @@ public class Suggestion implements Serializable {
|
||||
this.updated = Instant.now();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Suggestion that = (Suggestion) o;
|
||||
return Objects.equals(id, that.id) &&
|
||||
Objects.equals(suggester, that.suggester) &&
|
||||
Objects.equals(messageId, that.messageId) &&
|
||||
Objects.equals(channel, that.channel) &&
|
||||
Objects.equals(server, that.server) &&
|
||||
Objects.equals(suggestionDate, that.suggestionDate) &&
|
||||
state == that.state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(id, suggester, messageId, channel, server, suggestionDate, state);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -18,7 +19,8 @@ public class MessageToSend {
|
||||
/**
|
||||
* The collections of embeds to be send. The first embed is in the same message as the string message.
|
||||
*/
|
||||
private List<MessageEmbed> embeds;
|
||||
@Builder.Default
|
||||
private List<MessageEmbed> embeds = new ArrayList<>();
|
||||
/**
|
||||
* The string content to be used in the first message.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user