Files
backend/internal/store/migrations/0001_init.sql
Andriy Oblivantsev a295e36bac
CI / test (push) Successful in 4s
Add bun integration tests for docs flow, update integration guide
- Add test/integration.test.ts: getServicePublicKey, full flow (register, login, createCollection, createPointFeature, listFeatures)
- Update docs example: registerBySigningServiceKey then loginWithSignature
- Document integration tests in typescript-frontend-integration.md

Made-with: Cursor
2026-03-01 13:08:09 +00:00

58 lines
1.6 KiB
SQL

-- Users
CREATE TABLE IF NOT EXISTS users (
public_key TEXT PRIMARY KEY,
inviter TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Challenges (login nonces)
CREATE TABLE IF NOT EXISTS challenges (
nonce TEXT PRIMARY KEY,
public_key TEXT NOT NULL,
expires_at TIMESTAMPTZ NOT NULL,
used BOOLEAN NOT NULL DEFAULT FALSE
);
-- Sessions
CREATE TABLE IF NOT EXISTS sessions (
token TEXT PRIMARY KEY,
public_key TEXT NOT NULL,
expires_at TIMESTAMPTZ NOT NULL
);
-- Invitations
CREATE TABLE IF NOT EXISTS invitations (
jti TEXT PRIMARY KEY,
inviter_public_key TEXT NOT NULL,
invitee_public_key TEXT,
expires_at TIMESTAMPTZ NOT NULL,
max_uses INT NOT NULL,
used_count INT NOT NULL DEFAULT 0
);
-- Collections
CREATE TABLE IF NOT EXISTS collections (
id TEXT PRIMARY KEY,
owner_key TEXT NOT NULL,
name TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Features (geometry and properties as JSONB)
CREATE TABLE IF NOT EXISTS features (
id TEXT PRIMARY KEY,
collection_id TEXT NOT NULL REFERENCES collections(id) ON DELETE CASCADE,
owner_key TEXT NOT NULL,
type TEXT NOT NULL DEFAULT 'Feature',
geometry JSONB NOT NULL,
properties JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_collections_owner ON collections(owner_key);
CREATE INDEX IF NOT EXISTS idx_features_collection ON features(collection_id);
CREATE INDEX IF NOT EXISTS idx_features_owner ON features(owner_key);
CREATE INDEX IF NOT EXISTS idx_challenges_expires ON challenges(expires_at);
CREATE INDEX IF NOT EXISTS idx_sessions_expires ON sessions(expires_at);