feat: bootstrap project

This commit is contained in:
Duarte
2026-05-31 20:22:50 +01:00
commit 66581ef584
65 changed files with 7915 additions and 0 deletions
@@ -0,0 +1,91 @@
import { db } from '$lib/server/db';
import * as schema from '$lib/server/db/schema';
import { eq } from 'drizzle-orm';
import { fail, redirect } from '@sveltejs/kit';
import type { Actions } from './$types';
import bcrypt from 'bcrypt';
export const actions: Actions = {
default: async ({ request }) => {
const data = await request.formData();
const username = data.get('username')?.toString().trim();
const role = data.get('role')?.toString().trim();
const password = data.get('password')?.toString();
const confirmPassword = data.get('confirmPassword')?.toString();
if (!username || !role || !password || !confirmPassword) {
return fail(400, {
success: false,
username,
role,
error: 'Todos os campos obrigatórios devem ser preenchidos.'
});
}
if (role !== 'admin' && role !== 'shift_manager' && role !== 'volunteer') {
return fail(400, {
success: false,
username,
role,
error: 'Perfil selecionado é inválido.'
});
}
if (password !== confirmPassword) {
return fail(400, {
success: false,
username,
role,
error: 'As palavras-passe introduzidas não coincidem.'
});
}
if (password.length < 4) {
return fail(400, {
success: false,
username,
role,
error: 'A palavra-passe deve ter pelo menos 4 caracteres.'
});
}
try {
// Check if username already exists
const existing = db
.select()
.from(schema.users)
.where(eq(schema.users.username, username))
.get();
if (existing) {
return fail(400, {
success: false,
username,
role,
error: 'O nome de utilizador já está a ser utilizado.'
});
}
// Insert user
const passwordHash = bcrypt.hashSync(password, 10);
db.insert(schema.users)
.values({
username,
role,
passwordHash,
createdAt: Date.now()
})
.run();
} catch (err) {
console.error('Error creating user:', err);
return fail(500, {
success: false,
username,
role,
error: 'Erro interno ao guardar o utilizador. Tente novamente.'
});
}
throw redirect(303, `/admin/utilizadores?success=${encodeURIComponent('Utilizador criado com sucesso.')}`);
}
};