mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-30 15:11:38 +00:00
added unremind command
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
Cancels the given reminder.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Cancels the given reminder to not be executed anymore.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
unRemind <reminderId>
|
||||||
Reference in New Issue
Block a user