mirror of
https://codeberg.org/likwid/likwid.git
synced 2026-02-09 21:13:09 +00:00
- Backend: Rust/Axum with PostgreSQL, plugin architecture - Frontend: Astro with polished UI - Voting methods: Approval, Ranked Choice, Schulze, STAR, Quadratic - Features: Liquid delegation, transparent moderation, structured deliberation - Documentation: User and admin guides in /docs - Deployment: Docker/Podman compose files for production and demo - Demo: Seeded data with 3 communities, 13 users, 7 proposals License: AGPLv3
92 lines
3.9 KiB
SQL
92 lines
3.9 KiB
SQL
-- GitLab Integration
|
|
-- Enables linking communities to GitLab projects for issue/MR-based governance
|
|
|
|
-- GitLab connections (per community)
|
|
CREATE TABLE gitlab_connections (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
community_id UUID NOT NULL REFERENCES communities(id) ON DELETE CASCADE UNIQUE,
|
|
gitlab_url VARCHAR(500) NOT NULL, -- e.g., https://invent.kde.org
|
|
project_path VARCHAR(500) NOT NULL, -- e.g., niccolove/likwid
|
|
access_token_encrypted TEXT, -- Encrypted access token
|
|
webhook_secret VARCHAR(100),
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
sync_issues BOOLEAN NOT NULL DEFAULT TRUE,
|
|
sync_merge_requests BOOLEAN NOT NULL DEFAULT TRUE,
|
|
auto_create_proposals BOOLEAN NOT NULL DEFAULT FALSE, -- Auto-create proposals from issues
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
last_synced_at TIMESTAMPTZ
|
|
);
|
|
|
|
-- Linked GitLab issues
|
|
CREATE TABLE gitlab_issues (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
connection_id UUID NOT NULL REFERENCES gitlab_connections(id) ON DELETE CASCADE,
|
|
gitlab_iid INT NOT NULL, -- GitLab issue IID
|
|
gitlab_id BIGINT NOT NULL, -- GitLab global issue ID
|
|
title VARCHAR(500) NOT NULL,
|
|
description TEXT,
|
|
state VARCHAR(20) NOT NULL, -- opened, closed
|
|
author_username VARCHAR(255),
|
|
labels TEXT[], -- Array of label names
|
|
proposal_id UUID REFERENCES proposals(id) ON DELETE SET NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
gitlab_created_at TIMESTAMPTZ,
|
|
gitlab_updated_at TIMESTAMPTZ,
|
|
UNIQUE(connection_id, gitlab_iid)
|
|
);
|
|
|
|
-- Linked GitLab merge requests
|
|
CREATE TABLE gitlab_merge_requests (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
connection_id UUID NOT NULL REFERENCES gitlab_connections(id) ON DELETE CASCADE,
|
|
gitlab_iid INT NOT NULL,
|
|
gitlab_id BIGINT NOT NULL,
|
|
title VARCHAR(500) NOT NULL,
|
|
description TEXT,
|
|
state VARCHAR(20) NOT NULL, -- opened, merged, closed
|
|
author_username VARCHAR(255),
|
|
source_branch VARCHAR(255),
|
|
target_branch VARCHAR(255),
|
|
labels TEXT[],
|
|
proposal_id UUID REFERENCES proposals(id) ON DELETE SET NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
gitlab_created_at TIMESTAMPTZ,
|
|
gitlab_updated_at TIMESTAMPTZ,
|
|
UNIQUE(connection_id, gitlab_iid)
|
|
);
|
|
|
|
-- GitLab webhook events log
|
|
CREATE TABLE gitlab_webhook_events (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
connection_id UUID NOT NULL REFERENCES gitlab_connections(id) ON DELETE CASCADE,
|
|
event_type VARCHAR(50) NOT NULL, -- issue, merge_request, note, etc.
|
|
object_kind VARCHAR(50),
|
|
action VARCHAR(50),
|
|
payload JSONB NOT NULL,
|
|
processed BOOLEAN NOT NULL DEFAULT FALSE,
|
|
processed_at TIMESTAMPTZ,
|
|
error TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX idx_gitlab_connections_community ON gitlab_connections(community_id);
|
|
CREATE INDEX idx_gitlab_issues_connection ON gitlab_issues(connection_id);
|
|
CREATE INDEX idx_gitlab_issues_proposal ON gitlab_issues(proposal_id);
|
|
CREATE INDEX idx_gitlab_mrs_connection ON gitlab_merge_requests(connection_id);
|
|
CREATE INDEX idx_gitlab_mrs_proposal ON gitlab_merge_requests(proposal_id);
|
|
CREATE INDEX idx_gitlab_webhook_events_connection ON gitlab_webhook_events(connection_id);
|
|
CREATE INDEX idx_gitlab_webhook_events_processed ON gitlab_webhook_events(processed) WHERE processed = FALSE;
|
|
|
|
-- Triggers
|
|
CREATE TRIGGER gitlab_connections_updated_at BEFORE UPDATE ON gitlab_connections
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
|
|
CREATE TRIGGER gitlab_issues_updated_at BEFORE UPDATE ON gitlab_issues
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|
|
|
|
CREATE TRIGGER gitlab_mrs_updated_at BEFORE UPDATE ON gitlab_merge_requests
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
|