From 1b8e6ff8ae23a4eb7097c4849e97162e6da28a1d Mon Sep 17 00:00:00 2001 From: Klemek Date: Thu, 9 Jul 2026 18:16:32 +0200 Subject: [PATCH] feat: task edition in front end --- app/models/task.py | 2 +- app/server.py | 1 + bun.lock | 6 +- package.json | 1 + resources/ts/components/CronInput.vue | 128 ++++++++++++++++++++++++++ resources/ts/components/TaskItem.vue | 89 ++++++++++++++---- 6 files changed, 208 insertions(+), 19 deletions(-) create mode 100644 resources/ts/components/CronInput.vue 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 @@ + + + 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 @@