diff --git a/backend/src/db/schema.ts b/backend/src/db/schema.ts index 6d577b0..30129df 100644 --- a/backend/src/db/schema.ts +++ b/backend/src/db/schema.ts @@ -17,6 +17,7 @@ export const task = sqliteTable('task', { title: text().notNull(), description: text().notNull(), done: int().notNull(), + scheduled_at: text(), estimated_time: int().notNull(), due_date: text(), created_at: text().notNull().default(new Date().toISOString()), diff --git a/backend/src/main.ts b/backend/src/main.ts index b2c374f..b87048c 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -1,144 +1,20 @@ import express from 'express' import cors from 'cors' -import { drizzle } from 'drizzle-orm/libsql'; -import { event, task } from './db/schema'; -import { eq, ne, gt, gte } from 'drizzle-orm'; -const db = drizzle("file:local.db"); +import taskRouter from './routers/task'; +import eventRouter from './routers/event' + const app = express(); -const userId = "Detlef"; - -type Prettify = { - [K in keyof T]: T[K]; -} & {}; - -type TaskResponse = Prettify & { done: boolean }> app.use(cors()) +app.use('/tasks', taskRouter) +app.use('/events', eventRouter) app.use(express.json()); app.get('/', (req, res) => { res.send('Hello World'); }); -app.get('/tasks', async (req, res) => { - const tasks: typeof task.$inferSelect[] = await db.select().from(task) - console.log(tasks) - res.status(200).send(tasks.map(task => { - return { ...task, done: task.done === 1 } - })); -}); - -app.get('/events', async (req, res) => { - res.status(200).send(await db.select().from(event)) -}); - -app.get('/user/:id', (req, res) => { - const id = req.params['id']; - - if (id == null) { - res.status(400).send({ error: 'Needs an user id' }); - return; - } - - const user = { id: id, name: 'Cracker' } //TODO - res.json(user); - -}); - -app.get('/task/:id', async (req, res) => { - - const id = parseInt(req.params['id']); - - if (id == null) { - res.status(400).send({ error: 'Needs an id' }); - return; - } - - const returnedTask = await db.select().from(task).where(eq(task.id, id)) - // - console.log(returnedTask) - res.json(returnedTask); -}); - -app.get('/event/:id', (req, res) => { - - const id = req.params['id']; - - if (id == null) { - res.status(400).send({ error: 'Needs an id' }); - return; - } - - const event = { id: id, name: 'Pary' } //TODO - res.json(event); -}); - -app.post('/task', async (req, res) => { - - const newTask = req.body - newTask.userid = userId - - console.log(newTask) - const returnedTasks = await db.insert(task).values(newTask).returning() - console.log(returnedTasks) - - res.status(201).json(returnedTasks[0]); -}); - -app.post('/event', async (req, res) => { - - const newEvent: typeof event.$inferInsert = req.body - newEvent.userid = userId - - const returnedEvent = await db.insert(event).values(newEvent).returning() - console.log(returnedEvent) - - res.status(201).json(returnedEvent); -}); - -app.put('/task', (req, res) => { - - const id = parseInt(req.params['id']); - const updatedTask: Partial = req.body - - if (id == null) { - res.status(400).send({ error: 'Needs an id' }); - return; - } - db.update(task).set(updatedTask).where(eq(task.id, id)) - - res.status(200).json(updatedTask); -}); - -app.put('/event', (req, res) => { - - const id = parseInt(req.params['id']); - const updatedEvent: Partial = req.body - - if (id == null) { - res.status(400).send({ error: 'Needs an id' }); - return; - } - db.update(event).set(updatedEvent).where(eq(event.id, id)) - - res.status(200).json(updatedEvent); -}); - -app.delete('/task/:id', async (req, res) => { - const id = parseInt(req.params['id']); - - const success = await db.delete(task).where(eq(task.id, id)) - res.send("Deleted"); -}); - -app.delete('/event/:id', async (req, res) => { - const id = parseInt(req.params['id']); - - const success = await db.delete(event).where(eq(event.id, id)) - res.send("Deleted"); -}); - app.listen(8080, () => { console.log('Listening on port 8080'); }); diff --git a/backend/src/routers/event.ts b/backend/src/routers/event.ts new file mode 100644 index 0000000..1289494 --- /dev/null +++ b/backend/src/routers/event.ts @@ -0,0 +1,65 @@ +import express from 'express' +import cors from 'cors' +import { drizzle } from 'drizzle-orm/libsql'; +import { event } from '../db/schema'; +import { eq, ne, gt, gte } from 'drizzle-orm'; +import { Router } from "express"; + +const db = drizzle("file:local.db"); +const userId = "Detlef"; + +const router = Router() + +router.use(cors()) +router.use(express.json()); + +router.get('/', async (req, res) => { + res.status(200).send(await db.select().from(event)) +}); + +router.get('/:id', (req, res) => { + + const id = req.params['id']; + + if (id == null) { + res.status(400).send({ error: 'Needs an id' }); + return; + } + + const event = { id: id, name: 'Pary' } //TODO + res.json(event); +}); + +router.post('/', async (req, res) => { + console.log("loll") + const newEvent: typeof event.$inferInsert = req.body + newEvent.userid = userId + + const returnedEvent = await db.insert(event).values(newEvent).returning() + console.log(returnedEvent) + + res.status(201).json(returnedEvent); +}); + +router.put('/', (req, res) => { + + const id = parseInt(req.params['id']); + const updatedEvent: Partial = req.body + + if (id == null) { + res.status(400).send({ error: 'Needs an id' }); + return; + } + db.update(event).set(updatedEvent).where(eq(event.id, id)) + + res.status(200).json(updatedEvent); +}); + +router.delete('/:id', async (req, res) => { + const id = parseInt(req.params['id']); + + const success = await db.delete(event).where(eq(event.id, id)) + res.send("Deleted"); +}); + +export default router \ No newline at end of file diff --git a/backend/src/routers/task.ts b/backend/src/routers/task.ts new file mode 100644 index 0000000..219bb82 --- /dev/null +++ b/backend/src/routers/task.ts @@ -0,0 +1,78 @@ +import express from 'express' +import cors from 'cors' +import { drizzle } from 'drizzle-orm/libsql'; +import { task } from '../db/schema'; +import { eq, ne, gt, gte } from 'drizzle-orm'; +import { Router } from "express"; + +const db = drizzle("file:local.db"); +const userId = "Detlef"; + +type Prettify = { + [K in keyof T]: T[K]; +} & {}; + +type TaskResponse = Prettify & { done: boolean }> + +const router = Router() + +router.use(cors()) +router.use(express.json()); + +router.get('/', async (req, res) => { + const tasks: typeof task.$inferSelect[] = await db.select().from(task) + console.log(tasks) + res.status(200).send(tasks.map(task => { + return { ...task, done: task.done === 1 } + })); +}); + +router.get('/:id', async (req, res) => { + + const id = parseInt(req.params['id']); + + if (id == null) { + res.status(400).send({ error: 'Needs an id' }); + return; + } + + const returnedTask = await db.select().from(task).where(eq(task.id, id)) + // + console.log(returnedTask) + res.json(returnedTask); +}); + +router.post('/', async (req, res) => { + + const newTask = req.body + newTask.userid = userId + + console.log(newTask) + const returnedTasks = await db.insert(task).values(newTask).returning() + console.log(returnedTasks) + + res.status(201).json(returnedTasks[0]); +}); + +router.put('/', (req, res) => { + + const id = parseInt(req.params['id']); + const updatedTask: Partial = req.body + + if (id == null) { + res.status(400).send({ error: 'Needs an id' }); + return; + } + db.update(task).set(updatedTask).where(eq(task.id, id)) + + res.status(200).json(updatedTask); +}); + +router.delete('/:id', async (req, res) => { + const id = parseInt(req.params['id']); + + const success = await db.delete(task).where(eq(task.id, id)) + res.send("Deleted"); +}); + +export default router \ No newline at end of file diff --git a/web/pages/index.vue b/web/pages/index.vue index 08a43a3..9f2136d 100644 --- a/web/pages/index.vue +++ b/web/pages/index.vue @@ -27,19 +27,19 @@ onMounted(() => { async function postEvent(event: Event) { console.log('posting Event') - await axios.post('/event', event.toSerializable()) + await axios.post('/events', event.toSerializable()) } async function postTask(task: Task) { console.log('posting Task') - const createdTask = await axios.post('/task', task) + const createdTask = await axios.post('/tasks', task) console.log(createdTask) task.id = createdTask.data.id } async function deleteTask(id: number) { console.log('deleting Task') - await axios.delete(`/task/${id}`) + await axios.delete(`/tasks/${id}`) await refresh() }