chore: init monorepo with GPL-3.0 license, docs, backend skeleton, frontend wiring

This commit is contained in:
loki5512344 2026-09-06 14:34:57 +02:00
commit 43cf0e277d
Signed by: boba
GPG key ID: 253067914055423B
57 changed files with 5027 additions and 0 deletions

View file

@ -0,0 +1,32 @@
-- Таблица модов (метаданные репозитория)
CREATE TABLE IF NOT EXISTS mods (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
github_repo_id BIGINT UNIQUE NOT NULL,
owner VARCHAR(255) NOT NULL,
repo VARCHAR(255) NOT NULL,
slug VARCHAR(64) UNIQUE NOT NULL,
name VARCHAR(128) NOT NULL,
summary TEXT,
icon_url TEXT,
default_branch VARCHAR(32) NOT NULL DEFAULT 'main',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Таблица версий (релизов), полученных через Webhook/API
CREATE TABLE IF NOT EXISTS mod_versions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
mod_id UUID NOT NULL REFERENCES mods(id) ON DELETE CASCADE,
version_number VARCHAR(64) NOT NULL,
game_versions VARCHAR(32)[] NOT NULL,
loaders VARCHAR(32)[] NOT NULL,
download_url TEXT NOT NULL,
file_sha256 CHAR(64) NOT NULL,
published_at TIMESTAMPTZ NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT unique_mod_version UNIQUE (mod_id, version_number)
);
-- Индексы для быстрой фильтрации лаунчерами
CREATE INDEX IF NOT EXISTS idx_mods_slug ON mods(slug);
CREATE INDEX IF NOT EXISTS idx_versions_lookup ON mod_versions USING GIN (game_versions, loaders);

View file

@ -0,0 +1,30 @@
-- Indexium Analytics: bStats аналог
CREATE TABLE IF NOT EXISTS mod_telemetry_pings (
id BIGSERIAL PRIMARY KEY,
mod_id UUID NOT NULL REFERENCES mods(id) ON DELETE CASCADE,
server_hash CHAR(64) NOT NULL,
mc_version VARCHAR(16) NOT NULL,
loader VARCHAR(16) NOT NULL,
os VARCHAR(16) NOT NULL,
java_version VARCHAR(16) NOT NULL,
player_count INT NOT NULL DEFAULT 0,
pinged_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_telemetry_lookup ON mod_telemetry_pings (mod_id, pinged_at DESC);
CREATE INDEX IF NOT EXISTS idx_telemetry_hash ON mod_telemetry_pings (server_hash, pinged_at);
CREATE TABLE IF NOT EXISTS mod_daily_stats (
mod_id UUID NOT NULL REFERENCES mods(id) ON DELETE CASCADE,
date DATE NOT NULL,
active_servers INT NOT NULL DEFAULT 0,
active_players INT NOT NULL DEFAULT 0,
breakdown_json JSONB NOT NULL,
PRIMARY KEY (mod_id, date)
);
CREATE TABLE IF NOT EXISTS analytics_salts (
date DATE PRIMARY KEY,
salt CHAR(64) NOT NULL
);

View file

@ -0,0 +1,8 @@
CREATE TABLE IF NOT EXISTS webhook_deliveries (
delivery_id VARCHAR(64) PRIMARY KEY,
event VARCHAR(32) NOT NULL,
action VARCHAR(32),
repo_id BIGINT,
payload JSONB,
processed_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

View file

@ -0,0 +1,10 @@
CREATE TABLE IF NOT EXISTS collections (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
slug VARCHAR(64) UNIQUE NOT NULL,
title VARCHAR(128) NOT NULL,
description TEXT,
mods JSONB NOT NULL DEFAULT '[]'::jsonb,
author_id BIGINT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_collections_slug ON collections(slug);