mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-13 03:26:31 +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"))
|
||||
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;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||
import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
|
||||
@@ -88,7 +89,9 @@ public class RemindServiceBean implements ReminderService {
|
||||
log.trace("Starting scheduled job to execute reminder.");
|
||||
JobDataMap parameters = new JobDataMap();
|
||||
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
|
||||
public void executeReminder(Long reminderId) {
|
||||
Reminder reminderToRemindFor = reminderManagementService.loadReminder(reminderId);
|
||||
if(reminderToRemindFor.isReminded()) {
|
||||
return;
|
||||
}
|
||||
AServer server = reminderToRemindFor.getServer();
|
||||
AChannel channel = reminderToRemindFor.getChannel();
|
||||
log.info("Executing reminder {}.", reminderId);
|
||||
@@ -123,4 +129,18 @@ public class RemindServiceBean implements ReminderService {
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Reminder saveReminder(Reminder reminder) {
|
||||
return reminderRepository.save(reminder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Reminder> getActiveRemindersForUser(AUserInAServer aUserInAServer) {
|
||||
return reminderRepository.getByRemindedUserAndRemindedFalse(aUserInAServer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Reminder getReminderByAndByUserNotReminded(AUserInAServer aUserInAServer, Long reminderId) {
|
||||
return reminderRepository.getByIdAndRemindedUserAndRemindedFalse(reminderId, aUserInAServer);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user