Introduces database schema, Prisma models, and API support for companies and rides, enabling CRUD operations and synchronization. Updates the sync flow to handle companies and rides, removes redundant user sync, and aligns naming conventions and indexing for better consistency and maintainability. Co-authored-by: Copilot <copilot@github.com>
51 lines
2 KiB
SQL
51 lines
2 KiB
SQL
-- ============================================================
|
|
-- TopTran — PostgreSQL table creation script
|
|
-- ============================================================
|
|
-- NOTE: The "users" table already exists with the schema below.
|
|
-- Do NOT run the commented block if it already exists.
|
|
-- ============================================================
|
|
|
|
-- [EXISTING TABLE — DO NOT RECREATE]
|
|
-- CREATE TABLE IF NOT EXISTS users (
|
|
-- id TEXT PRIMARY KEY,
|
|
-- name TEXT NOT NULL,
|
|
-- email TEXT NOT NULL UNIQUE,
|
|
-- password TEXT NOT NULL,
|
|
-- "createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
|
-- "updatedAt" TIMESTAMPTZ DEFAULT NOW()
|
|
-- );
|
|
|
|
-- ============================================================
|
|
-- Companies
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS companies (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
cost_per_km NUMERIC(10,2) NOT NULL,
|
|
notes TEXT DEFAULT '',
|
|
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
|
"updatedAt" TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- ============================================================
|
|
-- Rides
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS rides (
|
|
id TEXT PRIMARY KEY,
|
|
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
company TEXT NOT NULL,
|
|
km NUMERIC(10,2) NOT NULL,
|
|
cost_per_km NUMERIC(10,2) NOT NULL,
|
|
total NUMERIC(10,2) NOT NULL,
|
|
ride_date TEXT NOT NULL,
|
|
synced SMALLINT DEFAULT 0,
|
|
"createdAt" TIMESTAMPTZ DEFAULT NOW(),
|
|
"updatedAt" TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- ============================================================
|
|
-- Indexes
|
|
-- ============================================================
|
|
CREATE INDEX IF NOT EXISTS idx_rides_user_id ON rides(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_rides_synced ON rides(synced);
|
|
CREATE INDEX IF NOT EXISTS idx_companies_name ON companies(name);
|