Add insertion and deletion of tables for db sync, and user view

This commit is contained in:
2024-09-10 14:25:23 +02:00
parent fa1a13d411
commit e904f28b3b
14 changed files with 127 additions and 23 deletions

View File

@@ -62,13 +62,13 @@ export default defineEventHandler(async (e): Promise<Return> => {
{
const hash = await Bun.password.hash(body.data.password);
const registration = db.query(`INSERT INTO users(username, email, hash, state) VALUES(?1, ?2, ?3, 0)`);
registration.get(body.data.username, body.data.email, hash) as any;
registration.run(body.data.username, body.data.email, hash);
const userIdQuery = db.query(`SELECT id FROM users WHERE username = ?1`);
const id = (userIdQuery.get(body.data.username) as any).id;
const registeringData = db.query(`INSERT INTO users_data(user_id) VALUES(?1)`);
registeringData.get(id);
const registeringData = db.query(`INSERT INTO users_data(user_id, signin_timestamp) VALUES(?1, ?2)`);
registeringData.run(id, Date.now());
logSession(e, await setUserSession(e, { user: { id: id, username: body.data.username, email: body.data.email, state: 0 } }) as UserSessionRequired);

View File

@@ -12,5 +12,5 @@ export default defineEventHandler((e) => {
const db = useDatabase();
return db.query(`SELECT id, usernamme, email, state FROM users WHERE id = ?1`).get(id) as User;
return db.query(`SELECT id, username, email, state, d.* FROM users u LEFT JOIN users_data d ON u.id = d.user_id WHERE u.id = ?1`).get(id) as User;
});

View File

@@ -0,0 +1,16 @@
import useDatabase from "~/composables/useDatabase";
import type { Comment } from "~/types/auth";
export default defineEventHandler((e) => {
const id = getRouterParam(e, 'id');
if(!id)
{
setResponseStatus(e, 400);
return;
}
const db = useDatabase();
return db.query(`SELECT * FROM explorer_comments WHERE user_id = ?1`).all(id) as Comment[];
});

View File

@@ -0,0 +1,16 @@
import useDatabase from "~/composables/useDatabase";
import type { Project } from "~/types/api";
export default defineEventHandler((e) => {
const id = getRouterParam(e, 'id');
if(!id)
{
setResponseStatus(e, 400);
return;
}
const db = useDatabase();
return db.query(`SELECT * FROM explorer_projects WHERE owner = ?1`).all(id) as Project[];
});

View File

@@ -11,10 +11,12 @@ export default defineNitroPlugin(() => {
if(!result)
{
clearUserSession(event);
throw createError({ statusCode: 401, message: 'Unauthorized' });
}
else if(result && result.lastRefresh && result.lastRefresh < Date.now() - monthAsMs)
{
clearUserSession(event);
throw createError({ statusCode: 401, message: 'Session has expired' });
}
else
@@ -25,8 +27,12 @@ export default defineNitroPlugin(() => {
sessionHooks.hook('clear', async (session, event) => {
if(session.id && session.user)
{
const query = db.prepare('DELETE FROM user_sessions WHERE id = ?1 AND user_id = ?2');
query.run(session.id, session.user.id);
try
{
const query = db.prepare('DELETE FROM user_sessions WHERE id = ?1 AND user_id = ?2');
query.run(session.id, session.user.id);
}
catch(e) { }
}
});
});