Initiële commit: VibeFinance 3-container opzet
Basislijn van de bestaande applicatie (Vite/React frontend, Express backend, PostgreSQL) zoals die in de index stond, plus dev-, release- en documentatiescripts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import { db } from "../db.js";
|
||||
import { INITIAL_DATA } from "../constants/initialData.js";
|
||||
|
||||
export const dataStore = {
|
||||
async load(userId) {
|
||||
const { rows } = await db.query("SELECT data FROM user_data WHERE user_id = $1", [userId]);
|
||||
return rows[0] ? JSON.parse(rows[0].data) : structuredClone(INITIAL_DATA);
|
||||
},
|
||||
async save(userId, payload) {
|
||||
await db.query(
|
||||
"INSERT INTO user_data (user_id, data) VALUES ($1, $2) ON CONFLICT (user_id) DO UPDATE SET data = $2",
|
||||
[userId, JSON.stringify(payload)]
|
||||
);
|
||||
return payload;
|
||||
},
|
||||
async reset(userId) {
|
||||
await db.query(
|
||||
"INSERT INTO user_data (user_id, data) VALUES ($1, $2) ON CONFLICT (user_id) DO UPDATE SET data = $2",
|
||||
[userId, JSON.stringify(structuredClone(INITIAL_DATA))]
|
||||
);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* PostgreSQL-backed user store.
|
||||
*/
|
||||
import { db } from "../db.js";
|
||||
|
||||
const toUser = (row) => row ? { ...row } : null;
|
||||
|
||||
export const userStore = {
|
||||
async list() {
|
||||
const { rows } = await db.query("SELECT * FROM users");
|
||||
return rows.map(toUser);
|
||||
},
|
||||
async findByEmail(email) {
|
||||
const { rows } = await db.query("SELECT * FROM users WHERE email = $1", [email]);
|
||||
return toUser(rows[0]);
|
||||
},
|
||||
async findById(id) {
|
||||
const { rows } = await db.query("SELECT * FROM users WHERE id = $1", [id]);
|
||||
return toUser(rows[0]);
|
||||
},
|
||||
async create(data) {
|
||||
const u = { id: `u${Date.now()}`, ...data };
|
||||
await db.query(
|
||||
"INSERT INTO users (id, naam, email, wachtwoord, rol, actief) VALUES ($1, $2, $3, $4, $5, $6)",
|
||||
[u.id, u.naam, u.email, u.wachtwoord, u.rol ?? "Viewer", u.actief ?? true]
|
||||
);
|
||||
return u;
|
||||
},
|
||||
async update(id, patch) {
|
||||
const { rows } = await db.query("SELECT * FROM users WHERE id = $1", [id]);
|
||||
const user = toUser(rows[0]);
|
||||
if (!user) return null;
|
||||
const u = { ...user, ...patch };
|
||||
await db.query(
|
||||
"UPDATE users SET naam=$1, email=$2, wachtwoord=$3, rol=$4, actief=$5, avatar=$6 WHERE id=$7",
|
||||
[u.naam, u.email, u.wachtwoord, u.rol, u.actief, u.avatar ?? null, id]
|
||||
);
|
||||
return u;
|
||||
},
|
||||
async remove(id) {
|
||||
await db.query("DELETE FROM users WHERE id = $1", [id]);
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user