- Add is_blocked to core.users (002_core_tables.sql) - Add is_active to activity.sessions for soft deletes (005_activity_tables.sql) - Implement UserRepo: List, GetByID, GetByName, Create, Update, Delete - Implement MimeRepo: List, GetByID, GetByName - Implement SessionRepo: Create, GetByTokenHash, ListByUser, UpdateLastActivity, Delete, DeleteByUserID - Session deletes are soft (SET is_active = false); is_active is a SQL-only filter, not mapped to the domain type Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
38 lines
1.2 KiB
SQL
38 lines
1.2 KiB
SQL
-- +goose Up
|
|
|
|
CREATE TABLE core.users (
|
|
id smallint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
name varchar(32) NOT NULL,
|
|
password text NOT NULL, -- bcrypt hash via pgcrypto
|
|
is_admin boolean NOT NULL DEFAULT false,
|
|
can_create boolean NOT NULL DEFAULT false,
|
|
is_blocked boolean NOT NULL DEFAULT false,
|
|
|
|
CONSTRAINT uni__users__name UNIQUE (name)
|
|
);
|
|
|
|
CREATE TABLE core.mime_types (
|
|
id smallint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
name varchar(127) NOT NULL,
|
|
extension varchar(16) NOT NULL,
|
|
|
|
CONSTRAINT uni__mime_types__name UNIQUE (name)
|
|
);
|
|
|
|
CREATE TABLE core.object_types (
|
|
id smallint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
name varchar(32) NOT NULL,
|
|
|
|
CONSTRAINT uni__object_types__name UNIQUE (name)
|
|
);
|
|
|
|
COMMENT ON TABLE core.users IS 'Application users';
|
|
COMMENT ON TABLE core.mime_types IS 'Whitelist of supported MIME types';
|
|
COMMENT ON TABLE core.object_types IS 'Reference: entity types for ACL and audit log';
|
|
|
|
-- +goose Down
|
|
|
|
DROP TABLE IF EXISTS core.object_types;
|
|
DROP TABLE IF EXISTS core.mime_types;
|
|
DROP TABLE IF EXISTS core.users;
|