[AB-72] adding joined reminders to list of reminders

refactored reminder display to not use entities
This commit is contained in:
Sheldan
2022-10-06 00:01:48 +02:00
parent 8c101793a3
commit e2a7d3b9e8
7 changed files with 63 additions and 17 deletions

View File

@@ -19,9 +19,11 @@ import dev.sheldan.abstracto.core.utils.FutureUtils;
import dev.sheldan.abstracto.remind.config.RemindFeatureDefinition;
import dev.sheldan.abstracto.remind.config.RemindSlashCommandNames;
import dev.sheldan.abstracto.remind.model.database.Reminder;
import dev.sheldan.abstracto.remind.model.database.ReminderParticipant;
import dev.sheldan.abstracto.remind.model.template.commands.ReminderDisplay;
import dev.sheldan.abstracto.remind.model.template.commands.RemindersModel;
import dev.sheldan.abstracto.remind.service.management.ReminderManagementService;
import dev.sheldan.abstracto.remind.service.management.ReminderParticipantManagementService;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
@@ -52,6 +54,9 @@ public class Reminders extends AbstractConditionableCommand {
@Autowired
private InteractionService interactionService;
@Autowired
private ReminderParticipantManagementService reminderParticipantManagementService;
@Override
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
Long serverId = commandContext.getGuild().getIdLong();
@@ -64,19 +69,19 @@ public class Reminders extends AbstractConditionableCommand {
private MessageToSend getMessageToSend(Long serverId, Member member) {
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(member);
List<Reminder> activeReminders = reminderManagementService.getActiveRemindersForUser(aUserInAServer);
List<ReminderDisplay> reminders = activeReminders.stream().map(reminder -> {
ServerChannelMessage originMessage = ServerChannelMessage
.builder()
.messageId(reminder.getMessageId())
.channelId(reminder.getChannel().getId())
.serverId(serverId)
.build();
return ReminderDisplay
.builder()
.reminder(reminder)
.message(originMessage)
.build();
}).collect(Collectors.toList());
List<Reminder> joinedReminders = reminderParticipantManagementService.getActiveReminders(aUserInAServer)
.stream()
.map(ReminderParticipant::getReminder)
.collect(Collectors.toList());
List<ReminderDisplay> reminders = activeReminders
.stream()
.map(ReminderDisplay::fromReminder)
.collect(Collectors.toList());
reminders.addAll(joinedReminders
.stream()
.map(ReminderDisplay::fromReminder)
.peek(reminderDisplay -> reminderDisplay.setJoined(true))
.collect(Collectors.toList()));
RemindersModel model = RemindersModel
.builder()
.reminders(reminders)

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.remind.repository;
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 dev.sheldan.abstracto.remind.model.database.embed.ReminderUserId;
@@ -11,4 +12,6 @@ import java.util.List;
@Repository
public interface ReminderParticipantRepository extends JpaRepository<ReminderParticipant, ReminderUserId> {
List<ReminderParticipant> findAllByReminder(Reminder reminder);
List<ReminderParticipant> findAllByParticipant(AUserInAServer aUserInAServer);
List<ReminderParticipant> findAllByParticipantAndReminder_RemindedFalse(AUserInAServer aUserInAServer);
}

View File

@@ -171,7 +171,7 @@ public class RemindServiceBean implements ReminderService {
List<ReminderParticipant> participants = reminderParticipantManagementService.getReminderParticipants(reminder);
List<MemberDisplay> participantsDisplays = participants
.stream()
.map(reminderParticipant -> MemberDisplay.fromAUserInAServer(reminderParticipant.getParticipator()))
.map(reminderParticipant -> MemberDisplay.fromAUserInAServer(reminderParticipant.getParticipant()))
.collect(Collectors.toList());
ExecutedReminderModel build = ExecutedReminderModel
.builder()

View File

@@ -24,7 +24,7 @@ public class ReminderParticipantManagementServiceBean implements ReminderPartici
ReminderParticipant reminderParticipant = ReminderParticipant
.builder()
.reminder(reminder)
.participator(aUserInAServer)
.participant(aUserInAServer)
.server(aUserInAServer.getServerReference())
.reminderParticipantId(id)
.build();
@@ -58,4 +58,14 @@ public class ReminderParticipantManagementServiceBean implements ReminderPartici
public List<ReminderParticipant> getReminderParticipants(Reminder reminder) {
return reminderParticipantRepository.findAllByReminder(reminder);
}
@Override
public List<ReminderParticipant> getReminders(AUserInAServer participant) {
return reminderParticipantRepository.findAllByParticipant(participant);
}
@Override
public List<ReminderParticipant> getActiveReminders(AUserInAServer participant) {
return reminderParticipantRepository.findAllByParticipantAndReminder_RemindedFalse(participant);
}
}

View File

@@ -29,7 +29,7 @@ public class ReminderParticipant {
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@MapsId("participantUserInServerId")
@JoinColumn(name = "reminder_participant_user_in_server_id", nullable = false)
private AUserInAServer participator;
private AUserInAServer participant;
@ManyToOne(fetch = FetchType.LAZY)

View File

@@ -6,10 +6,36 @@ import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.time.Instant;
@Getter
@Setter
@Builder
public class ReminderDisplay {
private Reminder reminder;
private Long id;
private Boolean reminded;
private String text;
private Instant targetDate;
private Instant creationDate;
@Builder.Default
private Boolean joined = false;
private ServerChannelMessage message;
public static ReminderDisplay fromReminder(Reminder reminder) {
ServerChannelMessage message = ServerChannelMessage
.builder()
.messageId(reminder.getMessageId())
.channelId(reminder.getChannel().getId())
.serverId(reminder.getServer().getId())
.build();
return ReminderDisplay
.builder()
.creationDate(reminder.getReminderDate())
.targetDate(reminder.getTargetDate())
.id(reminder.getId())
.reminded(reminder.isReminded())
.message(message)
.text(reminder.getText())
.build();
}
}

View File

@@ -15,4 +15,6 @@ public interface ReminderParticipantManagementService {
Optional<ReminderParticipant> getReminderParticipant(Reminder reminder, AUserInAServer aUserInAServer);
boolean isReminderParticipator(Reminder reminder, AUserInAServer aUserInAServer);
List<ReminderParticipant> getReminderParticipants(Reminder reminder);
List<ReminderParticipant> getReminders(AUserInAServer participant);
List<ReminderParticipant> getActiveReminders(AUserInAServer participant);
}