Unifies naming conventions for users, companies, and rides across backend and mobile app, standardizing field names for consistency and easier data interchange. Introduces endpoints to fetch all companies and rides for sync. Enhances sync logic to support both upload and download of companies, including first-time population from server. Updates local database schema and access logic to match backend structure, improving maintainability and reliability of sync.
72 lines
2.8 KiB
SQL
72 lines
2.8 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
|
|
-- );
|
|
|
|
-- ============================================================
|
|
-- Enums
|
|
-- ============================================================
|
|
DO $$ BEGIN
|
|
CREATE TYPE "TokenType" AS ENUM ('REFRESH');
|
|
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
END $$;
|
|
|
|
-- ============================================================
|
|
-- Tokens
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS tokens (
|
|
id TEXT PRIMARY KEY,
|
|
token TEXT NOT NULL UNIQUE,
|
|
type "TokenType" NOT NULL,
|
|
"userId" TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
"expiresAt" TIMESTAMPTZ NOT NULL,
|
|
"createdAt" 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);
|
|
CREATE INDEX IF NOT EXISTS idx_tokens_user_id ON tokens("userId");
|