Files
sonr/internal/migrations/002_credentials_table.sql
T

37 lines
1.4 KiB
SQL
Raw Normal View History

2025-10-03 14:45:52 -04:00
-- +goose Up
-- +goose StatementBegin
-- Credentials store WebAuthn credentials
CREATE TABLE credentials (
id TEXT PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP WITH TIME ZONE,
handle TEXT NOT NULL,
raw_id TEXT NOT NULL,
type TEXT NOT NULL DEFAULT 'public-key',
authenticator_attachment TEXT,
transports TEXT[], -- Array of transport strings
client_extension_results JSONB,
attestation_object TEXT NOT NULL, -- Base64URL encoded
client_data_json TEXT NOT NULL, -- Base64URL encoded
public_key_alg INTEGER,
public_key BYTEA
);
-- Unique constraints
CREATE UNIQUE INDEX idx_credentials_id_unique ON credentials(id) WHERE deleted_at IS NULL;
CREATE UNIQUE INDEX idx_credentials_raw_id_unique ON credentials(raw_id) WHERE deleted_at IS NULL;
CREATE UNIQUE INDEX idx_credentials_handle_unique ON credentials(handle) WHERE deleted_at IS NULL;
-- Regular indexes for query performance
CREATE INDEX idx_credentials_handle ON credentials(handle);
CREATE INDEX idx_credentials_type ON credentials(type);
CREATE INDEX idx_credentials_authenticator_attachment ON credentials(authenticator_attachment);
CREATE INDEX idx_credentials_deleted_at ON credentials(deleted_at) WHERE deleted_at IS NULL;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE credentials;
-- +goose StatementEnd