WIP: Add Drafts, Templates, and Recurring Transactions #45

Draft
andrew wants to merge 18 commits from drafts into main
3 changed files with 30 additions and 0 deletions
Showing only changes of commit c0542900be - Show all commits

View File

@ -4,6 +4,7 @@
], ],
"copyright": "Copyright © 2024, Andrew Lalis", "copyright": "Copyright © 2024, Andrew Lalis",
"dependencies": { "dependencies": {
"cronexp": ">=0.1.0-beta3 <0.2.0-0",
"d2sqlite3": "~>1.0", "d2sqlite3": "~>1.0",
"handy-http-starter": "~>1.6", "handy-http-starter": "~>1.6",
"jwt4d": "~>0.0.2", "jwt4d": "~>0.0.2",

View File

@ -2,6 +2,7 @@
"fileVersion": 1, "fileVersion": 1,
"versions": { "versions": {
"asdf": "0.8.0", "asdf": "0.8.0",
"cronexp": "0.1.0-beta3",
"d2sqlite3": "1.0.0", "d2sqlite3": "1.0.0",
"dxml": "0.4.5", "dxml": "0.4.5",
"handy-http-data": "1.3.2", "handy-http-data": "1.3.2",

View File

@ -11,6 +11,7 @@ void startScheduledJobs() {
); );
JobScheduler jobScheduler = new TaskPoolScheduler(); JobScheduler jobScheduler = new TaskPoolScheduler();
jobScheduler.addJob(() { jobScheduler.addJob(() {
// Clear old analytics data from profiles. // Clear old analytics data from profiles.
import profile.data; import profile.data;
@ -38,5 +39,32 @@ void startScheduledJobs() {
); );
}, analyticsSchedule); }, analyticsSchedule);
// Add a scheduled job to regularly check for and create recurring transaction drafts.
jobScheduler.addJob(() {
import profile.data;
import profile.data_impl_sqlite;
import profile.model;
import transaction.dto;
import transaction.data;
import util.pagination;
import std.stdio;
import std.datetime;
import cronexp;
FileSystemProfileRepository.doForAllUserProfiles((Profile profile, ProfileRepository profileRepo) {
writefln!"Recurring transaction check: %s / %s"(profile.username, profile.name);
ProfileDataSource ds = profileRepo.getDataSource(profile);
RecurringTransactionRepository rtRepo = ds.getRecurringTransactionRepository();
Page!(RecurringTransactionResponse) result = rtRepo.findAll(PageRequest.unpaged());
foreach (rt; result.items) {
writeln(rt.scheduleExpr);
DateTime now = cast(DateTime) Clock.currTime();
auto cron = CronExpr(rt.scheduleExpr);
writefln!"scheduleExpr = %s -> %s"(rt.scheduleExpr, cron.getNext(now));
// TODO: Figure out how to actually create the transactions!
}
});
}, new FixedIntervalSchedule(minutes(1), Clock.currTime(UTC())));
jobScheduler.start(); jobScheduler.start();
} }