save tasks in db

This commit is contained in:
CoGomu
2025-07-06 16:28:21 +02:00
parent 060d820f8f
commit 5cd9725f80
5 changed files with 17 additions and 6 deletions

View File

@@ -54,7 +54,7 @@ router.post('/', async (req, res) => {
res.status(201).json(returnedTasks[0]); res.status(201).json(returnedTasks[0]);
}); });
router.put('/', (req, res) => { router.put('/:id', async (req, res) => {
const id = parseInt(req.params['id']); const id = parseInt(req.params['id']);
const updatedTask: Partial<typeof task.$inferSelect> = req.body const updatedTask: Partial<typeof task.$inferSelect> = req.body
@@ -63,7 +63,7 @@ router.put('/', (req, res) => {
res.status(400).send({ error: 'Needs an id' }); res.status(400).send({ error: 'Needs an id' });
return; return;
} }
db.update(task).set(updatedTask).where(eq(task.id, id)) await db.update(task).set(updatedTask).where(eq(task.id, id))
res.status(200).json(updatedTask); res.status(200).json(updatedTask);
}); });

View File

@@ -11,13 +11,14 @@ const tasks = defineModel<Task[]>('tasks', { required: true })
const emits = defineEmits<{ const emits = defineEmits<{
(e: 'createEvent', event: Event): void (e: 'createEvent', event: Event): void
(e: 'edit-task', task: Task): void
}>() }>()
</script> </script>
<template> <template>
<UCard class="flex grow" :ui="{ body: 'w-full h-full' }"> <UCard class="flex grow" :ui="{ body: 'w-full h-full' }">
<Calendar @create="(event) => emits('createEvent', event)" v-model:events="events" v-model:date="date" , <Calendar @create="(event) => emits('createEvent', event)" @edit-task="(task) => emits('edit-task', task)" v-model:events="events" v-model:date="date" ,
v-model:dragged-task="draggedTask" v-model:tasks="tasks"> v-model:dragged-task="draggedTask" v-model:tasks="tasks">
</Calendar> </Calendar>
</UCard> </UCard>

View File

@@ -90,6 +90,7 @@ const emits = defineEmits<{
(e: 'create', event: Event): void (e: 'create', event: Event): void
(e: 'edit', event: Event): void (e: 'edit', event: Event): void
(e: 'delete', event: Event): void (e: 'delete', event: Event): void
(e: 'edit-task', task: Task): void
}>() }>()
const hour = (num: number) => { const hour = (num: number) => {
@@ -187,7 +188,7 @@ function moveEvent(event: Event) {
<CalendarCollumn v-for="day in days" :seperators="seperators" :day="day.date" :events="day.events" <CalendarCollumn v-for="day in days" :seperators="seperators" :day="day.date" :events="day.events"
:date="date" v-model:draggedEvent="draggedEvent" @quick-create="openCreateModal" @edit="openEditModal" :date="date" v-model:draggedEvent="draggedEvent" @quick-create="openCreateModal" @edit="openEditModal"
@delete="openDeleteModal" @moved="moveEvent" v-model:dragged-task="draggedTask" /> @delete="openDeleteModal" @moved="moveEvent" @edit-task="(task) => emits('edit-task', task)" v-model:dragged-task="draggedTask" />
</div> </div>
</div> </div>

View File

@@ -18,6 +18,7 @@ const emit = defineEmits<{
(e: 'edit', event: Event): void (e: 'edit', event: Event): void
(e: 'moved', event: Event): void (e: 'moved', event: Event): void
(e: 'delete', event: Event): void (e: 'delete', event: Event): void
(e: 'edit-task', task: Task): void
}>() }>()
const isDragging = ref(false) const isDragging = ref(false)
@@ -164,6 +165,8 @@ function updateTaskWithDraggedTask() {
draggedTask.value.target.scheduled_at = draggedTask.value.dragInfo.date.startOf('day').plus({ draggedTask.value.target.scheduled_at = draggedTask.value.dragInfo.date.startOf('day').plus({
minutes: draggedTask.value.dragInfo.top / (column.value?.offsetHeight ?? 1) * 24 * 60 minutes: draggedTask.value.dragInfo.top / (column.value?.offsetHeight ?? 1) * 24 * 60
}) })
emit('edit-task', draggedTask.value.target)
draggedTask.value = undefined draggedTask.value = undefined
} }

View File

@@ -43,6 +43,12 @@ async function deleteTask(id: number) {
await refresh() await refresh()
} }
async function putTask(task: Task) {
console.log('editing task')
await axios.put(`/tasks/${task.id}`, task)
await refresh()
}
function scheduleTask(task: Task) { function scheduleTask(task: Task) {
draggedTask.value = { target: task, dragInfo: undefined } draggedTask.value = { target: task, dragInfo: undefined }
} }
@@ -52,9 +58,9 @@ function scheduleTask(task: Task) {
<template> <template>
<div class="h-screen w-screen p-4 flex flex-row gap-5"> <div class="h-screen w-screen p-4 flex flex-row gap-5">
<Sidebar v-if="tasks !== null" v-model:tasks="tasks" v-model:date="date" @create-task="postTask" <Sidebar v-if="tasks !== null" v-model:tasks="tasks" v-model:date="date" @create-task="postTask"
@delete-task="deleteTask" @schedule-task="scheduleTask"/> @delete-task="deleteTask" @schedule-task="scheduleTask" @edit-task="putTask"/>
<MainContent v-if="events !== null" v-model:events="events" v-model:date="date" <MainContent v-if="events !== null" v-model:events="events" v-model:date="date"
v-model:dragged-task="draggedTask" v-model:tasks="tasks" @create-event="postEvent" /> v-model:dragged-task="draggedTask" v-model:tasks="tasks" @create-event="postEvent" @edit-task="putTask"/>
</div> </div>
</template> </template>