- Go backend: auth (JWT), points earn/spend, QR token generation, partners, admin grant/stats endpoints with chi router - Next.js 14 frontend: login, student dashboard, transaction history, QR display, partners list - PostgreSQL migrations (4 tables), Redis cache, Docker Compose - CORS middleware, role-based route protection, Zustand auth store Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
20 lines
687 B
SQL
20 lines
687 B
SQL
-- +goose Up
|
|
CREATE TABLE users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
email TEXT NOT NULL UNIQUE,
|
|
name TEXT NOT NULL,
|
|
-- student_id is NULL for partner and admin accounts
|
|
student_id TEXT UNIQUE,
|
|
password_hash TEXT NOT NULL,
|
|
role TEXT NOT NULL CHECK (role IN ('student', 'partner', 'admin')),
|
|
-- balance is denormalised for read performance; always updated atomically with transactions table
|
|
balance INTEGER NOT NULL DEFAULT 0 CHECK (balance >= 0),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX ON users(email);
|
|
CREATE INDEX ON users(role);
|
|
|
|
-- +goose Down
|
|
DROP TABLE IF EXISTS users;
|