diff --git a/app/models/task.py b/app/models/task.py index f7ccb72..2dee4e4 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -43,5 +43,5 @@ class Task(AbstractModel): "previous_check_date", ]: if field in data: - out_data[field] = data["field"] + out_data[field] = data[field] return out_data diff --git a/app/server.py b/app/server.py index 869fc0b..bde08a2 100644 --- a/app/server.py +++ b/app/server.py @@ -64,6 +64,7 @@ class Server(gunicorn.app.base.BaseApplication): try: task = await Task.get(id=task_uuid) await task.update_from_dict(parsed_data) + await task.save() return task.serialize() except tortoise.exceptions.ValidationError: flask.abort(400) diff --git a/bun.lock b/bun.lock index 8b38ef9..a1edf66 100644 --- a/bun.lock +++ b/bun.lock @@ -1,11 +1,11 @@ { "lockfileVersion": 1, - "configVersion": 0, "workspaces": { "": { "name": "tout-doux", "dependencies": { "@lucide/vue": "^1.23.0", + "cron-parser": "^5.6.1", "vue": "^3.5.38", }, "devDependencies": { @@ -410,6 +410,8 @@ "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "cron-parser": ["cron-parser@5.6.1", "", { "dependencies": { "luxon": "^3.7.2" } }, "sha512-QBm4o1PwZiuY7KFbVvW7FLC8bozy7YWzv+Fz6KRS7sQghzcbDZCGxr/Bc5b6TQreAoSwuWVP491dIcK0THCX6A=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], @@ -586,6 +588,8 @@ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + "luxon": ["luxon@3.7.2", "", {}, "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], "memorystream": ["memorystream@0.3.1", "", {}, "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw=="], diff --git a/package.json b/package.json index 4dcf033..fca18c5 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ }, "dependencies": { "@lucide/vue": "^1.23.0", + "cron-parser": "^5.6.1", "vue": "^3.5.38" }, "devDependencies": { diff --git a/resources/ts/components/CronInput.vue b/resources/ts/components/CronInput.vue new file mode 100644 index 0000000..c3e156b --- /dev/null +++ b/resources/ts/components/CronInput.vue @@ -0,0 +1,128 @@ + + + + + + One time (do not repeat) + Every day at + Every week on + Every month on the + Every year on + Specific + + + {{ i.toFixed(0).padStart(2, '0') }}:00 + + + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + Sunday + + + {{i}}{{ i % 10 == 1 ? 'st' : (i % 10 === 2 ? 'nd': (i % 10 === 3 ? 'rd' : 'th')) }} + + + January + February + March + April + May + June + July + August + September + October + November + December + + + + diff --git a/resources/ts/components/TaskItem.vue b/resources/ts/components/TaskItem.vue index 5ee4083..5d98d18 100644 --- a/resources/ts/components/TaskItem.vue +++ b/resources/ts/components/TaskItem.vue @@ -1,17 +1,70 @@ - + ({ required: true }); {{ task.name }} - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +