[AB-65] adding ability to join a reminder via button

This commit is contained in:
Sheldan
2022-08-28 23:13:40 +02:00
parent a43725df39
commit 30655dbfef
18 changed files with 444 additions and 15 deletions

View File

@@ -0,0 +1,44 @@
package dev.sheldan.abstracto.remind.model.database;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.remind.model.database.embed.ReminderUserId;
import lombok.*;
import javax.persistence.*;
import java.time.Instant;
@Entity
@Table(name="reminder_participant")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
public class ReminderParticipant {
@EmbeddedId
private ReminderUserId reminderParticipantId;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@MapsId("reminderId")
@JoinColumn(name = "reminder_id", nullable = false)
private Reminder reminder;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@MapsId("participantUserInServerId")
@JoinColumn(name = "reminder_participant_user_in_server_id", nullable = false)
private AUserInAServer participator;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "server_id", nullable = false)
private AServer server;
@Column(name = "created", nullable = false, insertable = false, updatable = false)
private Instant created;
@Column(name = "updated", insertable = false, updatable = false)
private Instant updated;
}

View File

@@ -0,0 +1,36 @@
package dev.sheldan.abstracto.remind.model.database.embed;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;
import java.util.Objects;
@Embeddable
public class ReminderUserId implements Serializable {
@Column(name = "reminder_id")
private Long reminderId;
@Column(name = "reminder_participant_user_in_server_id")
private Long participantUserInServerId;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ReminderUserId counterId = (ReminderUserId) o;
return Objects.equals(reminderId, counterId.reminderId) &&
Objects.equals(participantUserInServerId, counterId.participantUserInServerId);
}
@Override
public int hashCode() {
return Objects.hash(reminderId, participantUserInServerId);
}
public ReminderUserId(Long reminderId, Long participantUserInServerId) {
this.reminderId = reminderId;
this.participantUserInServerId = participantUserInServerId;
}
public ReminderUserId() {
}
}

View File

@@ -1,21 +1,24 @@
package dev.sheldan.abstracto.remind.model.template.commands;
import dev.sheldan.abstracto.core.models.context.ServerContext;
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
import dev.sheldan.abstracto.core.models.template.display.MemberNameDisplay;
import dev.sheldan.abstracto.core.utils.MessageUtils;
import dev.sheldan.abstracto.remind.model.database.Reminder;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Member;
import java.time.Duration;
import java.util.List;
@Getter
@Setter
@SuperBuilder
public class ExecutedReminderModel extends ServerContext {
private Reminder reminder;
private Member member;
private MemberNameDisplay memberNameDisplay;
private List<MemberDisplay> reminderParticipants;
private Duration duration;
public String getMessageUrl() {

View File

@@ -1,16 +1,20 @@
package dev.sheldan.abstracto.remind.model.template.commands;
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.core.models.template.display.MemberNameDisplay;
import dev.sheldan.abstracto.remind.model.database.Reminder;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.entities.Member;
@Getter
@Setter
@Builder
public class ReminderModel {
private String remindText;
private Member member;
private MemberNameDisplay memberDisplay;
private Reminder reminder;
private ServerChannelMessage message;
private String joinButtonId;
}

View File

@@ -0,0 +1,17 @@
package dev.sheldan.abstracto.remind.model.template.listener;
import lombok.*;
import java.time.Instant;
@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ReminderJoiningModel {
private Instant reminderDate;
private boolean failedToJoin;
private boolean selfJoin;
private boolean joined;
}

View File

@@ -0,0 +1,18 @@
package dev.sheldan.abstracto.remind.service.management;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.remind.model.database.Reminder;
import dev.sheldan.abstracto.remind.model.database.ReminderParticipant;
import java.util.List;
import java.util.Optional;
public interface ReminderParticipantManagementService {
ReminderParticipant addMemberToReminder(Reminder reminder, AUserInAServer aUserInAServer);
void removeMemberFromReminder(Reminder reminder, AUserInAServer aUserInAServer);
void removeMemberFromReminder(ReminderParticipant reminderParticipant);
Optional<ReminderParticipant> getReminderParticipant(Reminder reminder, AUserInAServer aUserInAServer);
boolean isReminderParticipator(Reminder reminder, AUserInAServer aUserInAServer);
List<ReminderParticipant> getReminderParticipants(Reminder reminder);
}