From 90a5b6fee7520b4265f80ccdc91535e9248129e0 Mon Sep 17 00:00:00 2001 From: Maksym Pavlenko Date: Fri, 3 Nov 2017 15:41:26 -0700 Subject: [PATCH] Add database model for feeds --- pkg/model/models.go | 19 ++++++++++++++++++- pkg/model/pg.sql | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/pkg/model/models.go b/pkg/model/models.go index c5e82b6..3318591 100644 --- a/pkg/model/models.go +++ b/pkg/model/models.go @@ -1,6 +1,9 @@ package model -import "time" +import ( + "github.com/mxpv/podsync/pkg/api" + "time" +) type Pledge struct { PledgeID int64 `sql:",pk"` @@ -12,3 +15,17 @@ type Pledge struct { OutstandingPaymentAmountCents int IsPaused bool } + +type Feed struct { + FeedID int64 `sql:",pk"` + HashID string // Short human readable feed id for users + UserID string // Patreon user id + ItemID string + LinkType api.LinkType // Either group, channel or user + Provider api.Provider // Youtube or Vimeo + PageSize int // The number of episodes to return + Format api.Format + Quality api.Quality + FeatureLevel int + LastAccess time.Time // Available features +} diff --git a/pkg/model/pg.sql b/pkg/model/pg.sql index f6f67b0..d41b6c8 100644 --- a/pkg/model/pg.sql +++ b/pkg/model/pg.sql @@ -1,5 +1,7 @@ BEGIN; +-- Pledges + CREATE TABLE IF NOT EXISTS pledges ( pledge_id BIGSERIAL PRIMARY KEY, patron_id BIGINT NOT NULL UNIQUE, @@ -13,4 +15,43 @@ CREATE TABLE IF NOT EXISTS pledges ( CREATE INDEX patron_id_idx ON pledges(patron_id); +-- Feeds + +DO $$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'provider') THEN + CREATE TYPE provider_type AS ENUM ('youtube', 'vimeo'); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'link_type') THEN + CREATE TYPE direction AS ENUM ('channel', 'playlist', 'user', 'group'); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'quality') THEN + CREATE TYPE sms_status AS ENUM ('low', 'high'); + END IF; + + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'format') THEN + CREATE TYPE sms_status AS ENUM ('video', 'audio'); + END IF; +END +$$; + +CREATE TABLE IF NOT EXISTS feeds ( + feed_id BIGSERIAL PRIMARY KEY, + hash_id VARCHAR(12) NOT NULL UNIQUE, + user_id VARCHAR(32) NULL, + item_id VARCHAR(32) NOT NULL CHECK (item_id <> ''), + link_type link_type NOT NULL, + provider provider NOT NULL, + page_size INT NOT NULL DEFAULT 50, + format format NOT NULL DEFAULT 'video', + quality quality NOT NULL DEFAULT 'high', + feature_level INT NOT NULL DEFAULT 0, + last_access TIMESTAMPTZ NOT NULL DEFAULT now() +); + +CREATE INDEX feeds_hash_id_idx ON feeds(hash_id); +CREATE INDEX feeds_user_id_idx ON feeds(user_id); + COMMIT; \ No newline at end of file