Files
RoleForge/app/sql/001_init.sql
Sergey Antropoff b2d3b6b803 Профиль и аккаунт
- API и страницы профиля (редактирование, смена пароля, аватар), публичные карточки.
- Сайдбар: блок пользователя, пункт Users для admin/root, исправлен порядок
  инициализации (показ admin-only после initAuthSession, currentUser).
- GET /auth/me: ответ через ProfileMeResponse, исправлена валидация (is_founder bool).

Команды и роли
- Маршруты и UI команд; при редактировании роли: видимость Team, выбор команды
  в модалке, только команды с активным членством; API team_id в details/ update.
- GET /api/v1/teams?membership=active для списка «своих» команд.
- Форма роли: сегмент Team, панель выбора команды только при Team и не при
  с
2026-05-05 08:15:21 +03:00

129 lines
4.5 KiB
SQL

create extension if not exists "pgcrypto";
create table if not exists users (
id uuid primary key default gen_random_uuid(),
username text unique,
email text unique not null,
password_hash text not null,
role text not null default 'user',
full_name text not null,
created_at timestamptz not null default now()
);
create table if not exists password_reset_tokens (
id uuid primary key default gen_random_uuid(),
user_id uuid not null references users(id) on delete cascade,
token text unique not null,
expires_at timestamptz not null,
used_at timestamptz,
created_at timestamptz not null default now()
);
create table if not exists role_categories (
id uuid primary key default gen_random_uuid(),
owner_id uuid references users(id) on delete cascade,
name text not null,
created_at timestamptz not null default now(),
unique (owner_id, name)
);
create table if not exists app_config (
key text primary key,
value jsonb not null default '{}'::jsonb,
updated_at timestamptz not null default now()
);
create table if not exists ansible_roles (
id uuid primary key default gen_random_uuid(),
owner_id uuid not null references users(id) on delete cascade,
name text not null,
source_type text not null,
source_ref text not null default '',
category_id uuid references role_categories(id) on delete set null,
content jsonb not null default '{}'::jsonb,
visibility text not null default 'personal' check (visibility in ('public', 'team', 'personal')),
team_id uuid,
forked_from_id uuid references ansible_roles(id) on delete set null,
created_at timestamptz not null default now()
);
create table if not exists role_files (
id uuid primary key default gen_random_uuid(),
role_id uuid not null references ansible_roles(id) on delete cascade,
path text not null,
content text not null default '',
created_at timestamptz not null default now(),
updated_at timestamptz not null default now(),
unique (role_id, path)
);
create table if not exists inventories (
id uuid primary key default gen_random_uuid(),
owner_id uuid not null references users(id) on delete cascade,
name text not null,
inventory_text text not null,
created_at timestamptz not null default now()
);
create table if not exists playbooks (
id uuid primary key default gen_random_uuid(),
owner_id uuid not null references users(id) on delete cascade,
name text not null,
description text not null default '',
playbook_yaml text not null,
inventory_id uuid not null references inventories(id) on delete cascade,
role_ids uuid[] not null default '{}',
is_shared boolean not null default false,
created_at timestamptz not null default now()
);
create table if not exists jobs (
id uuid primary key default gen_random_uuid(),
owner_id uuid not null references users(id) on delete cascade,
playbook_id uuid not null references playbooks(id) on delete cascade,
status text not null,
runtime_mode text not null default 'docker',
celery_task_id text,
runner_url text,
runner_run_id text,
runner_container_name text,
runner_last_heartbeat timestamptz,
extra_vars jsonb not null default '{}'::jsonb,
started_at timestamptz,
finished_at timestamptz,
created_at timestamptz not null default now()
);
create table if not exists job_logs (
id bigserial primary key,
job_id uuid not null references jobs(id) on delete cascade,
log_line text not null,
created_at timestamptz not null default now()
);
create table if not exists test_runs (
id uuid primary key default gen_random_uuid(),
owner_id uuid not null references users(id) on delete cascade,
playbook_id uuid references playbooks(id) on delete cascade,
role_id uuid references ansible_roles(id) on delete cascade,
status text not null,
runtime_mode text not null default 'docker',
celery_task_id text,
runner_url text,
runner_run_id text,
runner_container_name text,
runner_last_heartbeat timestamptz,
hosts_blueprint jsonb not null default '[]'::jsonb,
extra_vars jsonb not null default '{}'::jsonb,
started_at timestamptz,
finished_at timestamptz,
created_at timestamptz not null default now()
);
create table if not exists test_logs (
id bigserial primary key,
test_run_id uuid not null references test_runs(id) on delete cascade,
log_line text not null,
created_at timestamptz not null default now()
);