backend cleanup

This commit is contained in:
CoGomu
2025-07-06 15:35:16 +02:00
parent 5e6cca9fe2
commit 060d820f8f
5 changed files with 152 additions and 132 deletions

View File

@@ -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()),

View File

@@ -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<T> = {
[K in keyof T]: T[K];
} & {};
type TaskResponse = Prettify<Omit<typeof task.$inferSelect, 'done'> & { 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<TaskResponse>(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<typeof task.$inferSelect> = 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<typeof event.$inferSelect> = 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');
});

View File

@@ -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<typeof event.$inferSelect> = 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

View File

@@ -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<T> = {
[K in keyof T]: T[K];
} & {};
type TaskResponse = Prettify<Omit<typeof task.$inferSelect, 'done'> & { 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<TaskResponse>(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<typeof task.$inferSelect> = 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

View File

@@ -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<SerializableTask>('/task', task)
const createdTask = await axios.post<SerializableTask>('/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()
}