Skip to content

Commit 7708513

Browse files
committed
add routine to settle thread status if was left open
1 parent 28c28b4 commit 7708513

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

application/src/main/java/org/togetherjava/tjbot/features/Features.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public static Collection<Feature> createFeatures(JDA jda, Database database, Con
106106
.add(new AutoPruneHelperRoutine(config, helpSystemHelper, modAuditLogWriter, database));
107107
features.add(new HelpThreadAutoArchiver(helpSystemHelper));
108108
features.add(new LeftoverBookmarksCleanupRoutine(bookmarksSystem));
109+
features.add(new MarkHelpThreadCloseInDBRoutine(database));
109110

110111
// Message receivers
111112
features.add(new TopHelpersMessageListener(database, config));
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.togetherjava.tjbot.features.help;
2+
3+
import net.dv8tion.jda.api.JDA;
4+
5+
import org.togetherjava.tjbot.db.Database;
6+
import org.togetherjava.tjbot.features.Routine;
7+
8+
import java.time.Instant;
9+
import java.time.temporal.ChronoUnit;
10+
import java.util.concurrent.TimeUnit;
11+
12+
import static org.togetherjava.tjbot.db.generated.tables.HelpThreads.HELP_THREADS;
13+
14+
/**
15+
* Updates the status of help threads in database that were created a few days ago and couldn't be
16+
* closed.
17+
*/
18+
public final class MarkHelpThreadCloseInDBRoutine implements Routine {
19+
private final Database database;
20+
21+
/**
22+
* Creates a new instance.
23+
*
24+
* @param database the database to store help thread metadata in
25+
*/
26+
public MarkHelpThreadCloseInDBRoutine(Database database) {
27+
this.database = database;
28+
}
29+
30+
31+
@Override
32+
public Schedule createSchedule() {
33+
return new Schedule(ScheduleMode.FIXED_RATE, 0, 1, TimeUnit.HOURS);
34+
}
35+
36+
@Override
37+
public void runRoutine(JDA jda) {
38+
updateTicketStatus();
39+
}
40+
41+
private void updateTicketStatus() {
42+
Instant now = Instant.now();
43+
Instant threeDaysAgo = now.minus(3, ChronoUnit.DAYS);
44+
45+
database.write(context -> context.update(HELP_THREADS)
46+
.set(HELP_THREADS.TICKET_STATUS, HelpSystemHelper.TicketStatus.ARCHIVED.val)
47+
.where(HELP_THREADS.CREATED_AT.lessOrEqual(threeDaysAgo)
48+
.and(HELP_THREADS.TICKET_STATUS.eq(HelpSystemHelper.TicketStatus.ACTIVE.val)))
49+
.execute());
50+
}
51+
}

0 commit comments

Comments
 (0)