Merge pull request #139 from Gabisonfire/feature/migrator
Initial Database migrations service
This commit is contained in:
14
.github/workflows/build_migrator.yaml
vendored
Normal file
14
.github/workflows/build_migrator.yaml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
name: Build and Push Migrator Service
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'src/migrator/**'
|
||||
|
||||
jobs:
|
||||
process:
|
||||
uses: ./.github/workflows/base_image_workflow.yaml
|
||||
secrets: inherit
|
||||
with:
|
||||
CONTEXT: ./src/migrator/
|
||||
IMAGE_NAME: knightcrawler-migrator
|
||||
1
src/migrator/.dockerignore
Normal file
1
src/migrator/.dockerignore
Normal file
@@ -0,0 +1 @@
|
||||
Dockerfile
|
||||
4
src/migrator/.pgmigrate.yaml
Normal file
4
src/migrator/.pgmigrate.yaml
Normal file
@@ -0,0 +1,4 @@
|
||||
migrations: "./migrations"
|
||||
schema:
|
||||
name: "public"
|
||||
file: "./schema.sql"
|
||||
7
src/migrator/Dockerfile
Normal file
7
src/migrator/Dockerfile
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM ghcr.io/peterldowns/pgmigrate:latest
|
||||
USER root
|
||||
RUN addgroup -S migrator && adduser -S -G migrator migrator
|
||||
USER migrator
|
||||
WORKDIR /tmp
|
||||
COPY --chmod=0777 . .
|
||||
ENTRYPOINT [ "./entrypoint.sh" ]
|
||||
3
src/migrator/entrypoint.sh
Normal file
3
src/migrator/entrypoint.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
pgmigrate apply -d "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}"
|
||||
111
src/migrator/migrations/001_initial.sql
Normal file
111
src/migrator/migrations/001_initial.sql
Normal file
@@ -0,0 +1,111 @@
|
||||
CREATE TABLE public.contents (
|
||||
"infoHash" character varying(64) NOT NULL,
|
||||
"fileIndex" integer NOT NULL,
|
||||
path character varying(512) NOT NULL,
|
||||
size bigint
|
||||
);
|
||||
|
||||
ALTER TABLE public.contents
|
||||
ADD CONSTRAINT contents_pkey
|
||||
PRIMARY KEY ("infoHash", "fileIndex");
|
||||
|
||||
CREATE SEQUENCE public.files_id_seq;
|
||||
|
||||
CREATE TABLE public.files (
|
||||
id integer PRIMARY KEY NOT NULL DEFAULT nextval('files_id_seq'::regclass),
|
||||
"infoHash" character varying(64) NOT NULL,
|
||||
"fileIndex" integer,
|
||||
title character varying(512) NOT NULL,
|
||||
size bigint,
|
||||
"imdbId" character varying(32),
|
||||
"imdbSeason" integer,
|
||||
"imdbEpisode" integer,
|
||||
"kitsuId" integer,
|
||||
"kitsuEpisode" integer,
|
||||
"createdAt" timestamp with time zone NOT NULL,
|
||||
"updatedAt" timestamp with time zone NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX files_imdb_id_imdb_season_imdb_episode ON public.files USING btree ("imdbId", "imdbSeason", "imdbEpisode");
|
||||
|
||||
CREATE INDEX files_kitsu_id_kitsu_episode ON public.files USING btree ("kitsuId", "kitsuEpisode");
|
||||
|
||||
CREATE UNIQUE INDEX files_unique_file_constraint ON public.files USING btree ("infoHash", "fileIndex", "imdbId", "imdbSeason", "imdbEpisode", "kitsuId", "kitsuEpisode");
|
||||
|
||||
ALTER SEQUENCE public.files_id_seq OWNED BY public.files.id;
|
||||
|
||||
CREATE SEQUENCE public.ingested_pages_id_seq;
|
||||
|
||||
CREATE TABLE public.ingested_pages (
|
||||
id integer PRIMARY KEY NOT NULL DEFAULT nextval('ingested_pages_id_seq'::regclass),
|
||||
url character varying(512) UNIQUE NOT NULL,
|
||||
"createdAt" timestamp with time zone NOT NULL,
|
||||
"updatedAt" timestamp with time zone NOT NULL
|
||||
);
|
||||
|
||||
ALTER SEQUENCE public.ingested_pages_id_seq OWNED BY public.ingested_pages.id;
|
||||
|
||||
CREATE SEQUENCE public.ingested_torrents_id_seq;
|
||||
|
||||
CREATE TABLE public.ingested_torrents (
|
||||
id integer PRIMARY KEY NOT NULL DEFAULT nextval('ingested_torrents_id_seq'::regclass),
|
||||
name character varying(512),
|
||||
source character varying(512),
|
||||
category character varying(32),
|
||||
info_hash character varying(64),
|
||||
size character varying(32),
|
||||
seeders integer,
|
||||
leechers integer,
|
||||
imdb character varying(32),
|
||||
processed boolean DEFAULT false,
|
||||
"createdAt" timestamp with time zone NOT NULL,
|
||||
"updatedAt" timestamp with time zone NOT NULL
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX ingested_torrent_unique_source_info_hash_constraint ON public.ingested_torrents USING btree (source, info_hash);
|
||||
|
||||
ALTER SEQUENCE public.ingested_torrents_id_seq OWNED BY public.ingested_torrents.id;
|
||||
|
||||
CREATE TABLE public.providers (
|
||||
name character varying(32) PRIMARY KEY NOT NULL,
|
||||
"lastScraped" timestamp with time zone,
|
||||
"lastScrapedId" character varying(128)
|
||||
);
|
||||
|
||||
CREATE TABLE public.skip_torrents (
|
||||
"infoHash" character varying(64) PRIMARY KEY NOT NULL
|
||||
);
|
||||
|
||||
CREATE SEQUENCE public.subtitles_id_seq;
|
||||
|
||||
CREATE TABLE public.subtitles (
|
||||
id integer PRIMARY KEY NOT NULL DEFAULT nextval('subtitles_id_seq'::regclass),
|
||||
"infoHash" character varying(64) NOT NULL,
|
||||
"fileIndex" integer NOT NULL,
|
||||
"fileId" bigint,
|
||||
title character varying(512) NOT NULL
|
||||
);
|
||||
|
||||
CREATE INDEX subtitles_file_id ON public.subtitles USING btree ("fileId");
|
||||
|
||||
CREATE UNIQUE INDEX subtitles_unique_subtitle_constraint ON public.subtitles USING btree ("infoHash", "fileIndex", "fileId");
|
||||
|
||||
ALTER SEQUENCE public.subtitles_id_seq OWNED BY public.subtitles.id;
|
||||
|
||||
CREATE TABLE public.torrents (
|
||||
"infoHash" character varying(64) PRIMARY KEY NOT NULL,
|
||||
provider character varying(32) NOT NULL,
|
||||
"torrentId" character varying(512),
|
||||
title character varying(512) NOT NULL,
|
||||
size bigint,
|
||||
type character varying(16) NOT NULL,
|
||||
"uploadDate" timestamp with time zone NOT NULL,
|
||||
seeders smallint,
|
||||
trackers character varying(8000),
|
||||
languages character varying(4096),
|
||||
resolution character varying(16),
|
||||
reviewed boolean NOT NULL DEFAULT false,
|
||||
opened boolean NOT NULL DEFAULT false,
|
||||
"createdAt" timestamp with time zone NOT NULL,
|
||||
"updatedAt" timestamp with time zone NOT NULL
|
||||
);
|
||||
Reference in New Issue
Block a user