added unremind command

This commit is contained in:
Sheldan
2020-05-01 23:24:05 +02:00
parent 70365ca556
commit cf713cc561
10 changed files with 98 additions and 1 deletions

View File

@@ -0,0 +1,53 @@
package dev.sheldan.abstracto.utility.commands.remind;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
import dev.sheldan.abstracto.utility.service.ReminderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Component
public class UnRemind extends AbstractConditionableCommand {
@Autowired
private ReminderService reminderService;
@Override
public CommandResult execute(CommandContext commandContext) {
Long reminderId = (Long) commandContext.getParameters().getParameters().get(0);
reminderService.unRemind(reminderId, commandContext.getUserInitiatedContext().getAUserInAServer());
return CommandResult.fromSuccess();
}
@Override
public CommandConfiguration getConfiguration() {
List<Parameter> parameters = new ArrayList<>();
parameters.add(Parameter.builder().name("reminderId").type(Long.class).build());
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder()
.name("unRemind")
.module(UtilityModuleInterface.UTILITY)
.templated(true)
.causesReaction(true)
.parameters(parameters)
.help(helpInfo)
.build();
}
@Override
public FeatureEnum getFeature() {
return UtilityFeature.REMIND;
}
}

View File

@@ -14,4 +14,7 @@ public interface ReminderRepository extends JpaRepository<Reminder, Long> {
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true")) @QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
List<Reminder> getByRemindedUserAndRemindedFalse(AUserInAServer aUserInAServer); List<Reminder> getByRemindedUserAndRemindedFalse(AUserInAServer aUserInAServer);
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
Reminder getByIdAndRemindedUserAndRemindedFalse(Long reminderId, AUserInAServer aUserInAServer);
} }

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.utility.service; package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.service.ChannelService; import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService; import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.models.AServerAChannelAUser; import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
@@ -88,7 +89,9 @@ public class RemindServiceBean implements ReminderService {
log.trace("Starting scheduled job to execute reminder."); log.trace("Starting scheduled job to execute reminder.");
JobDataMap parameters = new JobDataMap(); JobDataMap parameters = new JobDataMap();
parameters.putAsString("reminderId", reminder.getId()); parameters.putAsString("reminderId", reminder.getId());
schedulerService.executeJobWithParametersOnce("reminderJob", "utility", parameters, Date.from(reminder.getTargetDate())); String triggerKey = schedulerService.executeJobWithParametersOnce("reminderJob", "utility", parameters, Date.from(reminder.getTargetDate()));
reminder.setJobTriggerKey(triggerKey);
reminderManagementService.saveReminder(reminder);
} }
} }
@@ -96,6 +99,9 @@ public class RemindServiceBean implements ReminderService {
@Transactional @Transactional
public void executeReminder(Long reminderId) { public void executeReminder(Long reminderId) {
Reminder reminderToRemindFor = reminderManagementService.loadReminder(reminderId); Reminder reminderToRemindFor = reminderManagementService.loadReminder(reminderId);
if(reminderToRemindFor.isReminded()) {
return;
}
AServer server = reminderToRemindFor.getServer(); AServer server = reminderToRemindFor.getServer();
AChannel channel = reminderToRemindFor.getChannel(); AChannel channel = reminderToRemindFor.getChannel();
log.info("Executing reminder {}.", reminderId); log.info("Executing reminder {}.", reminderId);
@@ -123,4 +129,18 @@ public class RemindServiceBean implements ReminderService {
} }
reminderManagementService.setReminded(reminderToRemindFor); reminderManagementService.setReminded(reminderToRemindFor);
} }
@Override
public void unRemind(Long reminderId, AUserInAServer aUserInAServer) {
Reminder reminder = reminderManagementService.getReminderByAndByUserNotReminded(aUserInAServer, reminderId);
if(reminder != null) {
reminder.setReminded(true);
if(reminder.getJobTriggerKey() != null) {
schedulerService.stopTrigger(reminder.getJobTriggerKey());
}
reminderManagementService.saveReminder(reminder);
} else {
throw new AbstractoRunTimeException("Reminder does not exist, was already reminded or does not belong to you.");
}
}
} }

View File

@@ -44,9 +44,20 @@ public class ReminderManagementServiceBean implements ReminderManagementService
reminderRepository.save(reminder); reminderRepository.save(reminder);
} }
@Override
public Reminder saveReminder(Reminder reminder) {
return reminderRepository.save(reminder);
}
@Override @Override
public List<Reminder> getActiveRemindersForUser(AUserInAServer aUserInAServer) { public List<Reminder> getActiveRemindersForUser(AUserInAServer aUserInAServer) {
return reminderRepository.getByRemindedUserAndRemindedFalse(aUserInAServer); return reminderRepository.getByRemindedUserAndRemindedFalse(aUserInAServer);
} }
@Override
public Reminder getReminderByAndByUserNotReminded(AUserInAServer aUserInAServer, Long reminderId) {
return reminderRepository.getByIdAndRemindedUserAndRemindedFalse(reminderId, aUserInAServer);
}
} }

View File

@@ -56,6 +56,10 @@ public class Reminder {
@Getter @Getter
private boolean reminded; private boolean reminded;
@Getter
@Setter
private String jobTriggerKey;
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;

View File

@@ -8,4 +8,5 @@ import java.time.Duration;
public interface ReminderService { public interface ReminderService {
void createReminderInForUser(AUserInAServer user, String remindText, Duration remindIn, ReminderModel reminderModel); void createReminderInForUser(AUserInAServer user, String remindText, Duration remindIn, ReminderModel reminderModel);
void executeReminder(Long reminderId); void executeReminder(Long reminderId);
void unRemind(Long reminderId, AUserInAServer userInAServer);
} }

View File

@@ -11,5 +11,7 @@ public interface ReminderManagementService {
Reminder createReminder(AServerAChannelAUser userToBeReminded, String text, Instant timeToBeRemindedAt, Long messageId); Reminder createReminder(AServerAChannelAUser userToBeReminded, String text, Instant timeToBeRemindedAt, Long messageId);
Reminder loadReminder(Long reminderId); Reminder loadReminder(Long reminderId);
void setReminded(Reminder reminder); void setReminded(Reminder reminder);
Reminder saveReminder(Reminder reminder);
List<Reminder> getActiveRemindersForUser(AUserInAServer aUserInAServer); List<Reminder> getActiveRemindersForUser(AUserInAServer aUserInAServer);
Reminder getReminderByAndByUserNotReminded(AUserInAServer aUserInAServer, Long reminderId);
} }

View File

@@ -0,0 +1 @@
Cancels the given reminder to not be executed anymore.