mirror of
https://github.com/knightcrawler-stremio/knightcrawler.git
synced 2024-12-20 03:29:51 +00:00
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