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

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.remind.repository; 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.Reminder;
import dev.sheldan.abstracto.remind.model.database.ReminderParticipant; import dev.sheldan.abstracto.remind.model.database.ReminderParticipant;
import dev.sheldan.abstracto.remind.model.database.embed.ReminderUserId; import dev.sheldan.abstracto.remind.model.database.embed.ReminderUserId;
@@ -11,4 +12,6 @@ import java.util.List;
@Repository @Repository
public interface ReminderParticipantRepository extends JpaRepository<ReminderParticipant, ReminderUserId> { public interface ReminderParticipantRepository extends JpaRepository<ReminderParticipant, ReminderUserId> {
List<ReminderParticipant> findAllByReminder(Reminder reminder); 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<ReminderParticipant> participants = reminderParticipantManagementService.getReminderParticipants(reminder);
List<MemberDisplay> participantsDisplays = participants List<MemberDisplay> participantsDisplays = participants
.stream() .stream()
.map(reminderParticipant -> MemberDisplay.fromAUserInAServer(reminderParticipant.getParticipator())) .map(reminderParticipant -> MemberDisplay.fromAUserInAServer(reminderParticipant.getParticipant()))
.collect(Collectors.toList()); .collect(Collectors.toList());
ExecutedReminderModel build = ExecutedReminderModel ExecutedReminderModel build = ExecutedReminderModel
.builder() .builder()

View File

@@ -24,7 +24,7 @@ public class ReminderParticipantManagementServiceBean implements ReminderPartici
ReminderParticipant reminderParticipant = ReminderParticipant ReminderParticipant reminderParticipant = ReminderParticipant
.builder() .builder()
.reminder(reminder) .reminder(reminder)
.participator(aUserInAServer) .participant(aUserInAServer)
.server(aUserInAServer.getServerReference()) .server(aUserInAServer.getServerReference())
.reminderParticipantId(id) .reminderParticipantId(id)
.build(); .build();
@@ -58,4 +58,14 @@ public class ReminderParticipantManagementServiceBean implements ReminderPartici
public List<ReminderParticipant> getReminderParticipants(Reminder reminder) { public List<ReminderParticipant> getReminderParticipants(Reminder reminder) {
return reminderParticipantRepository.findAllByReminder(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}) @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@MapsId("participantUserInServerId") @MapsId("participantUserInServerId")
@JoinColumn(name = "reminder_participant_user_in_server_id", nullable = false) @JoinColumn(name = "reminder_participant_user_in_server_id", nullable = false)
private AUserInAServer participator; private AUserInAServer participant;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)

View File

@@ -6,10 +6,36 @@ import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.time.Instant;
@Getter @Getter
@Setter @Setter
@Builder @Builder
public class ReminderDisplay { 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; 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); Optional<ReminderParticipant> getReminderParticipant(Reminder reminder, AUserInAServer aUserInAServer);
boolean isReminderParticipator(Reminder reminder, AUserInAServer aUserInAServer); boolean isReminderParticipator(Reminder reminder, AUserInAServer aUserInAServer);
List<ReminderParticipant> getReminderParticipants(Reminder reminder); List<ReminderParticipant> getReminderParticipants(Reminder reminder);
List<ReminderParticipant> getReminders(AUserInAServer participant);
List<ReminderParticipant> getActiveReminders(AUserInAServer participant);
} }