modify database schema
This commit is contained in:
		
							parent
							
								
									1f3057df69
								
							
						
					
					
						commit
						99e5a455cb
					
				| @ -10,7 +10,12 @@ new cron.CronJob({ // eslint-disable-line | |||||||
|   onTick: async () => { |   onTick: async () => { | ||||||
|     console.log('run cron') |     console.log('run cron') | ||||||
|     let db = await DB.connect() |     let db = await DB.connect() | ||||||
|     let text = `select "pageid", "groupid", "lastpost", "notify", "notify_tmpl" from "public"."page_group_rt"` |     let text = `select line."notify" as notify, fb."id" as id, fb."groupid" as group, fb."pageid" as page, fb."tmpl" as tmpl, fb."lastpost" as post
 | ||||||
|  |       from "public"."facebook_page" fb | ||||||
|  |       left join "public"."line_group" line | ||||||
|  |       on line."id" = fb."groupid" | ||||||
|  |       where | ||||||
|  |       line."notify" = true` | ||||||
|     let res = await db.query({ |     let res = await db.query({ | ||||||
|       text |       text | ||||||
|     }) |     }) | ||||||
| @ -19,25 +24,25 @@ new cron.CronJob({ // eslint-disable-line | |||||||
|     await new Promise(resolve => { |     await new Promise(resolve => { | ||||||
|       let count = res.rowCount |       let count = res.rowCount | ||||||
|       res.rows.forEach(t => { |       res.rows.forEach(t => { | ||||||
|         fbParser.getLastPost(t.pageid) |         fbParser.getLastPost(t.page) | ||||||
|           .then((data) => { |           .then((data) => { | ||||||
|             let n = Math.floor(Date.now() / 1000) |             let n = Math.floor(Date.now() / 1000) | ||||||
|             if (t.lastpost === data.id || data.time < (n - 10 * 60)) { |             if (t.post === data.id || data.time < (n - 10 * 60)) { | ||||||
|               if (!--count) resolve(null) |               if (!--count) resolve(null) | ||||||
|               return |               return | ||||||
|             } |             } | ||||||
|             t.lastpost = data.id |             t.post = data.id | ||||||
|             let msg = t.notify_tmpl || '' |             let msg = t.tmpl || '' | ||||||
|             if (typeof msg !== 'string' || msg.trim().length === 0) { |             if (typeof msg !== 'string' || msg.trim().length === 0) { | ||||||
|               msg = `${data.txt}\n${data.link}` |               msg = `${data.txt}\n${data.link}` | ||||||
|             } else { |             } else { | ||||||
|               msg = msg.replace(/{link}/, data.link).replace(/{txt}/, data.txt).replace(/\\n/, '\n') |               msg = msg.replace(/{link}/, data.link).replace(/{txt}/, data.txt).replace(/\\n/, '\n') | ||||||
|             } |             } | ||||||
|             if (t.notify) { |             if (t.notify) { | ||||||
|               pushMessage(t.groupid, msg).then(() => {}).catch(() => {}) |               pushMessage(t.group, msg).then(() => {}).catch(() => {}) | ||||||
|             } |             } | ||||||
|             let text = `update "public"."page_group_rt" set "lastpost" = $1, "mtime" = now() where "pageid" = $2 and "groupid" = $3` |             let text = `update "public"."facebook_page" set "lastpost" = $1, "mtime" = now() where "id" = $2` | ||||||
|             let values = [data.id, t.pageid, t.groupid] |             let values = [data.id, t.id] | ||||||
|             db.query({ |             db.query({ | ||||||
|               text, |               text, | ||||||
|               values |               values | ||||||
| @ -52,6 +57,18 @@ new cron.CronJob({ // eslint-disable-line | |||||||
| 
 | 
 | ||||||
|     db.release() |     db.release() | ||||||
|   }, |   }, | ||||||
|  |   runOnInit: true, | ||||||
|  |   start: true, | ||||||
|  |   timeZone: 'Asia/Taipei' | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | // register twitch streaming webhook
 | ||||||
|  | new cron.CronJob({ //eslint-disable-line
 | ||||||
|  |   cronTime: '00 00 0,6,12,18 * * *', | ||||||
|  |   onTick: async () => { | ||||||
|  | 
 | ||||||
|  |   }, | ||||||
|  |   runOnInit: true, | ||||||
|   start: true, |   start: true, | ||||||
|   timeZone: 'Asia/Taipei' |   timeZone: 'Asia/Taipei' | ||||||
| }) | }) | ||||||
|  | |||||||
| @ -51,8 +51,9 @@ const getLastPost = async (pageid = '') => { | |||||||
|     let time = timeEl.attr('data-utime') |     let time = timeEl.attr('data-utime') | ||||||
|     let link = timeEl.parent().attr('href') |     let link = timeEl.parent().attr('href') | ||||||
|     let p = t('div.userContent') |     let p = t('div.userContent') | ||||||
|     let txt = p.first().text() |     let txt = p.text() || '' | ||||||
|     let id = p.first().attr('id') |     let id = p.first().attr('id') | ||||||
|  | 
 | ||||||
|     if (!id) { |     if (!id) { | ||||||
|       if (/[\?|&]id\=(\d+)/.test(link)) { // eslint-disable-line
 |       if (/[\?|&]id\=(\d+)/.test(link)) { // eslint-disable-line
 | ||||||
|         let m = link.match(/[\?|&]story_fbid\=(\d+)/) // eslint-disable-line
 |         let m = link.match(/[\?|&]story_fbid\=(\d+)/) // eslint-disable-line
 | ||||||
| @ -64,9 +65,15 @@ const getLastPost = async (pageid = '') => { | |||||||
|         if (m !== null && m.length > 1) { |         if (m !== null && m.length > 1) { | ||||||
|           id = m[1] |           id = m[1] | ||||||
|         } |         } | ||||||
|  |       } else if (/\/photos\/.+?\/(\d+)/.test(link)) { | ||||||
|  |         let m = link.match(/\/photos\/.+?\/(\d+)/) | ||||||
|  |         if (m !== null && m.length > 1) { | ||||||
|  |           id = m[1] | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     if (!time || !link || !txt || !id) return null |     } | ||||||
|  |     console.log(time, link, txt, id) | ||||||
|  |     if (!time || !link || !id) return null | ||||||
|     let tmp = { |     let tmp = { | ||||||
|       txt, |       txt, | ||||||
|       id, |       id, | ||||||
|  | |||||||
							
								
								
									
										110
									
								
								libs/line-message/commands/group.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								libs/line-message/commands/group.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,110 @@ | |||||||
|  | /** | ||||||
|  |  * add group to database | ||||||
|  |  * @param {string} txt command body format => groupName notifyEnable(0,1) | ||||||
|  |  * @param {object} source | ||||||
|  |  * @param {object} db | ||||||
|  |  */ | ||||||
|  | const addGroup = async (txt, source = {}, db) => { | ||||||
|  |   if (!db) return null | ||||||
|  |   if (!('type' in source) || !('groupId' in source) || !('userId' in source)) return null | ||||||
|  |   let {groupId, userId} = source | ||||||
|  |   let arr = txt.split(' ') | ||||||
|  |   if (arr.length < 2 || !isFinite(arr[1])) return null | ||||||
|  |   let name = arr[0] | ||||||
|  |   let notify = arr[1] | ||||||
|  |   if (typeof notify === 'string') notify = parseInt(notify) | ||||||
|  |   if (notify !== 0 && notify !== 1) return null | ||||||
|  |   let text = `select "id" from "public"."line_group" where "id" = $1` | ||||||
|  |   let values = [groupId] | ||||||
|  |   let result = await db.query({ | ||||||
|  |     text, | ||||||
|  |     values | ||||||
|  |   }) | ||||||
|  |   if (result.rowCount > 0) { | ||||||
|  |     let reply = 'group exists' | ||||||
|  |     return { reply } | ||||||
|  |   } | ||||||
|  |   text = `insert into "public"."line_group" ("id", "name", "notify", "owner", "ctime", "mtime") values ($1, $2, $3, $4, now(), now())` | ||||||
|  |   values = [groupId, name, (notify === 1), userId] | ||||||
|  |   await db.query({ | ||||||
|  |     text, | ||||||
|  |     values | ||||||
|  |   }) | ||||||
|  |   let reply = 'add success' | ||||||
|  |   return { reply } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * add facebook page notify to group | ||||||
|  |  * @param {string} txt command body format => pageid name tmpl | ||||||
|  |  * @param {object} source | ||||||
|  |  * @param {object} db | ||||||
|  |  */ | ||||||
|  | const addPage = async (txt, source = {}, db) => { | ||||||
|  |   if (!db) return null | ||||||
|  |   if (!('type' in source) || !('groupId' in source) || !('userId' in source)) return null | ||||||
|  |   let {groupId, userId} = source | ||||||
|  |   let arr = txt.split(' ') | ||||||
|  |   if (arr.length < 3) return null | ||||||
|  |   let page = arr[0] | ||||||
|  |   let name = arr[1] | ||||||
|  |   let tmpl = arr.slice(2).join(' ') | ||||||
|  |   let text = `select "id","owner" from "public"."line_group" where "id" = $1` | ||||||
|  |   let values = [groupId] | ||||||
|  |   let result = await db.query({ | ||||||
|  |     text, | ||||||
|  |     values | ||||||
|  |   }) | ||||||
|  |   if (result.rowCount === 0) { | ||||||
|  |     let reply = 'group not register' | ||||||
|  |     return { reply } | ||||||
|  |   } | ||||||
|  |   if (result.rows[0].owner !== userId) { | ||||||
|  |     let reply = 'not owner' | ||||||
|  |     return { reply } | ||||||
|  |   } | ||||||
|  |   // check pageid in group
 | ||||||
|  |   text = `select fb."id" from "public"."facebook_page" fb
 | ||||||
|  |     left join "public"."line_group" line | ||||||
|  |     on fb."groupid" = line."id" | ||||||
|  |     where | ||||||
|  |     fb."pageid" = $1` | ||||||
|  |   values = [page] | ||||||
|  |   result = await db.query({ | ||||||
|  |     text, | ||||||
|  |     values | ||||||
|  |   }) | ||||||
|  |   if (result.rowCount > 0) { | ||||||
|  |     let reply = 'page exists' | ||||||
|  |     return { reply } | ||||||
|  |   } | ||||||
|  |   // check page name in group
 | ||||||
|  |   text = `select fb."id" from "public"."facebook_page" fb
 | ||||||
|  |     left join "public"."line_group" line | ||||||
|  |     on fb."groupid" = line."id" | ||||||
|  |     where | ||||||
|  |     fb."name" = $1` | ||||||
|  |   values = [name] | ||||||
|  |   result = await db.query({ | ||||||
|  |     text, | ||||||
|  |     values | ||||||
|  |   }) | ||||||
|  |   if (result.rowCount > 0) { | ||||||
|  |     let reply = 'page name exists' | ||||||
|  |     return { reply } | ||||||
|  |   } | ||||||
|  |   text = `insert into "public"."facebook_page" ("groupid", "pageid", "name", "tmpl", "ctime", "mtime") values 
 | ||||||
|  |     ($1, $2, $3, $4, now(), now())` | ||||||
|  |   values = [groupId, page, name, tmpl] | ||||||
|  |   await db.query({ | ||||||
|  |     text, | ||||||
|  |     values | ||||||
|  |   }) | ||||||
|  |   let reply = 'add page success' | ||||||
|  |   return { reply } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = { | ||||||
|  |   addgroup: addGroup, | ||||||
|  |   addpage: addPage | ||||||
|  | } | ||||||
							
								
								
									
										31
									
								
								libs/line-message/commands/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								libs/line-message/commands/index.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | const DB = require('../../database') | ||||||
|  | const groupCMD = require('./group') | ||||||
|  | 
 | ||||||
|  | const cmds = {} | ||||||
|  | 
 | ||||||
|  | for (let i in groupCMD) { | ||||||
|  |   cmds[i] = groupCMD[i] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const parseCMD = async (text = '', source = {}) => { | ||||||
|  |   if (typeof text !== 'string' || text.trim().length === 0) return null | ||||||
|  |   if (!source || typeof source !== 'object' || !('type' in source)) return null | ||||||
|  |   let txt = text.trim() | ||||||
|  |   let arr = txt.split(' ').map(t => t.trim()) | ||||||
|  |   if (arr.length === 0) return null | ||||||
|  |   if (arr[0][0] !== '!') return null | ||||||
|  |   let cmd = arr[0].replace(/^!/, '') | ||||||
|  |   if (!(cmd in cmds)) return null | ||||||
|  |   let db = await DB.connect() | ||||||
|  |   let result = null | ||||||
|  |   try { | ||||||
|  |     result = await cmds[cmd](arr.slice(1).join(' '), source, db) | ||||||
|  |   } catch (err) { | ||||||
|  |     console.log(err) | ||||||
|  |   } | ||||||
|  |   // if (result === null) return null
 | ||||||
|  |   db.release() | ||||||
|  |   return result | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module.exports = parseCMD | ||||||
| @ -1,6 +1,6 @@ | |||||||
| const axios = require('axios') | const axios = require('axios') | ||||||
| const config = require('../../config') | const config = require('../../config') | ||||||
| const DB = require('../database') | const commands = require('./commands') | ||||||
| 
 | 
 | ||||||
| const client = axios.create({ | const client = axios.create({ | ||||||
|   baseURL: 'https://api.line.me/v2/bot', |   baseURL: 'https://api.line.me/v2/bot', | ||||||
| @ -33,31 +33,34 @@ const pushMessage = async (target, message = '') => { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const textMessage = async (evt) => { | const textMessage = async (evt) => { | ||||||
|   let replyURL = '/message/reply' |   let url = '/message/reply' | ||||||
|   let {replyToken, source, message} = evt |   let {replyToken, source, message} = evt | ||||||
|  |   if (!source || !('type' in source) || source.type !== 'group') return | ||||||
|   if (!message || message.type !== 'text') return |   if (!message || message.type !== 'text') return | ||||||
|   let {text} = message |   let {text} = message | ||||||
|   if (typeof text !== 'string') return |   if (typeof text !== 'string') return | ||||||
|   text = text.trim() |   text = text.trim() | ||||||
|   if (text.length === 0) return |   if (text.length === 0) return | ||||||
|   let db = await DB.connect() |  | ||||||
| 
 | 
 | ||||||
|   // let opts = {
 |   let result = await commands(text, source) | ||||||
|   //   method: 'post',
 |   if (result === null) return | ||||||
|   //   url: replyURL,
 |   if (typeof result === 'object' && 'reply' in result) { | ||||||
|   //   data: {
 |     let opts = { | ||||||
|   //     replyToken,
 |       method: 'post', | ||||||
|   //     messages: [
 |       url, | ||||||
|   //       {
 |       data: { | ||||||
|   //         type: 'text',
 |         replyToken, | ||||||
|   //         text: 'test message'
 |         messages: [ | ||||||
|   //       }
 |           { | ||||||
|   //     ]
 |             type: 'text', | ||||||
|   //   }
 |             text: result.reply | ||||||
|   // }
 |           } | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|   // await client(opts)
 |     await client(opts) | ||||||
|   db.release() |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| module.exports = { | module.exports = { | ||||||
|  | |||||||
							
								
								
									
										173
									
								
								schema/main.sql
									
									
									
									
									
								
							
							
						
						
									
										173
									
								
								schema/main.sql
									
									
									
									
									
								
							| @ -2,23 +2,33 @@ | |||||||
| -- PostgreSQL database dump | -- PostgreSQL database dump | ||||||
| -- | -- | ||||||
| 
 | 
 | ||||||
| -- Dumped from database version 10.2 (Debian 10.2-1.pgdg90+1) | -- Dumped from database version 9.6.8 | ||||||
| -- Dumped by pg_dump version 10.2 (Debian 10.2-1.pgdg90+1) | -- Dumped by pg_dump version 9.6.8 | ||||||
| 
 | 
 | ||||||
| SET statement_timeout = 0; | SET statement_timeout = 0; | ||||||
| SET lock_timeout = 0; | SET lock_timeout = 0; | ||||||
| SET idle_in_transaction_session_timeout = 0; | SET idle_in_transaction_session_timeout = 0; | ||||||
| SET client_encoding = 'UTF8'; | SET client_encoding = 'UTF8'; | ||||||
| SET standard_conforming_strings = on; | SET standard_conforming_strings = on; | ||||||
|  | SELECT pg_catalog.set_config('search_path', '', false); | ||||||
| SET check_function_bodies = false; | SET check_function_bodies = false; | ||||||
| SET client_min_messages = warning; | SET client_min_messages = warning; | ||||||
| SET row_security = off; | SET row_security = off; | ||||||
| 
 | 
 | ||||||
| SET search_path = public, pg_catalog; | ALTER TABLE IF EXISTS ONLY public.twitch_channel DROP CONSTRAINT IF EXISTS twitch_channel_line_group_id_fk; | ||||||
| 
 | ALTER TABLE IF EXISTS ONLY public.facebook_page DROP CONSTRAINT IF EXISTS facebook_page_line_group_id_fk; | ||||||
| ALTER TABLE IF EXISTS ONLY public.page_group_rt DROP CONSTRAINT IF EXISTS page_group_rt_pageid_groupid_pk; | DROP INDEX IF EXISTS public.line_group_name_uindex; | ||||||
|  | ALTER TABLE IF EXISTS ONLY public.twitch_channel DROP CONSTRAINT IF EXISTS twitch_channel_pkey; | ||||||
|  | ALTER TABLE IF EXISTS ONLY public.line_group DROP CONSTRAINT IF EXISTS line_group_pkey; | ||||||
|  | ALTER TABLE IF EXISTS ONLY public.facebook_page DROP CONSTRAINT IF EXISTS facebook_page_pkey; | ||||||
|  | ALTER TABLE IF EXISTS public.twitch_channel ALTER COLUMN id DROP DEFAULT; | ||||||
|  | ALTER TABLE IF EXISTS public.facebook_page ALTER COLUMN id DROP DEFAULT; | ||||||
| DROP TABLE IF EXISTS public.version_ctrl; | DROP TABLE IF EXISTS public.version_ctrl; | ||||||
| DROP TABLE IF EXISTS public.page_group_rt; | DROP SEQUENCE IF EXISTS public.twitch_channel_id_seq; | ||||||
|  | DROP TABLE IF EXISTS public.twitch_channel; | ||||||
|  | DROP TABLE IF EXISTS public.line_group; | ||||||
|  | DROP SEQUENCE IF EXISTS public.facebook_page_id_seq; | ||||||
|  | DROP TABLE IF EXISTS public.facebook_page; | ||||||
| DROP EXTENSION IF EXISTS plpgsql; | DROP EXTENSION IF EXISTS plpgsql; | ||||||
| DROP SCHEMA IF EXISTS public; | DROP SCHEMA IF EXISTS public; | ||||||
| -- | -- | ||||||
| @ -49,44 +59,163 @@ CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; | |||||||
| COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; | COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| SET search_path = public, pg_catalog; |  | ||||||
| 
 |  | ||||||
| SET default_tablespace = ''; | SET default_tablespace = ''; | ||||||
| 
 | 
 | ||||||
| SET default_with_oids = false; | SET default_with_oids = false; | ||||||
| 
 | 
 | ||||||
| -- | -- | ||||||
| -- Name: page_group_rt; Type: TABLE; Schema: public; Owner: - | -- Name: facebook_page; Type: TABLE; Schema: public; Owner: - | ||||||
| -- | -- | ||||||
| 
 | 
 | ||||||
| CREATE TABLE page_group_rt ( | CREATE TABLE public.facebook_page ( | ||||||
|  |     id integer NOT NULL, | ||||||
|  |     groupid character varying(100) NOT NULL, | ||||||
|     pageid character varying(200) NOT NULL, |     pageid character varying(200) NOT NULL, | ||||||
|     groupid character varying(200) NOT NULL, |     name character varying(100) NOT NULL, | ||||||
|     notify boolean DEFAULT false NOT NULL, |     lastpost character varying(100) DEFAULT ''::character varying NOT NULL, | ||||||
|     lastpost character varying(200) DEFAULT ''::character varying NOT NULL, |     tmpl character varying(200) DEFAULT ''::character varying NOT NULL, | ||||||
|     ctime timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, |     ctime timestamp with time zone DEFAULT now() NOT NULL, | ||||||
|     mtime timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, |     mtime timestamp with time zone DEFAULT now() NOT NULL | ||||||
|     notify_tmpl character varying(500) DEFAULT ''::character varying NOT NULL |  | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | -- | ||||||
|  | -- Name: facebook_page_id_seq; Type: SEQUENCE; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | CREATE SEQUENCE public.facebook_page_id_seq | ||||||
|  |     START WITH 1 | ||||||
|  |     INCREMENT BY 1 | ||||||
|  |     NO MINVALUE | ||||||
|  |     NO MAXVALUE | ||||||
|  |     CACHE 1; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: facebook_page_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | ALTER SEQUENCE public.facebook_page_id_seq OWNED BY public.facebook_page.id; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: line_group; Type: TABLE; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | CREATE TABLE public.line_group ( | ||||||
|  |     id character varying(100) NOT NULL, | ||||||
|  |     name character varying(200) NOT NULL, | ||||||
|  |     notify boolean DEFAULT false NOT NULL, | ||||||
|  |     ctime timestamp with time zone DEFAULT now() NOT NULL, | ||||||
|  |     mtime timestamp with time zone DEFAULT now() NOT NULL, | ||||||
|  |     owner character varying(100) DEFAULT ''::character varying NOT NULL | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: twitch_channel; Type: TABLE; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | CREATE TABLE public.twitch_channel ( | ||||||
|  |     id integer NOT NULL, | ||||||
|  |     twitchid character varying(100) NOT NULL, | ||||||
|  |     name character varying(200) NOT NULL, | ||||||
|  |     type character varying(100) DEFAULT ''::character varying NOT NULL, | ||||||
|  |     ctime timestamp with time zone DEFAULT now() NOT NULL, | ||||||
|  |     mtime timestamp with time zone DEFAULT now() NOT NULL, | ||||||
|  |     groupid character varying(100) NOT NULL | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: twitch_channel_id_seq; Type: SEQUENCE; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | CREATE SEQUENCE public.twitch_channel_id_seq | ||||||
|  |     START WITH 1 | ||||||
|  |     INCREMENT BY 1 | ||||||
|  |     NO MINVALUE | ||||||
|  |     NO MAXVALUE | ||||||
|  |     CACHE 1; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: twitch_channel_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | ALTER SEQUENCE public.twitch_channel_id_seq OWNED BY public.twitch_channel.id; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| -- | -- | ||||||
| -- Name: version_ctrl; Type: TABLE; Schema: public; Owner: - | -- Name: version_ctrl; Type: TABLE; Schema: public; Owner: - | ||||||
| -- | -- | ||||||
| 
 | 
 | ||||||
| CREATE TABLE version_ctrl ( | CREATE TABLE public.version_ctrl ( | ||||||
|     version integer NOT NULL, |     version integer NOT NULL, | ||||||
|     ctime timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, |     ctime timestamp with time zone DEFAULT now() NOT NULL, | ||||||
|     querystr character varying(5000) DEFAULT ''::character varying NOT NULL |     querystr text DEFAULT ''::character varying NOT NULL | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| -- | -- | ||||||
| -- Name: page_group_rt page_group_rt_pageid_groupid_pk; Type: CONSTRAINT; Schema: public; Owner: - | -- Name: facebook_page id; Type: DEFAULT; Schema: public; Owner: - | ||||||
| -- | -- | ||||||
| 
 | 
 | ||||||
| ALTER TABLE ONLY page_group_rt | ALTER TABLE ONLY public.facebook_page ALTER COLUMN id SET DEFAULT nextval('public.facebook_page_id_seq'::regclass); | ||||||
|     ADD CONSTRAINT page_group_rt_pageid_groupid_pk PRIMARY KEY (pageid, groupid); | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: twitch_channel id; Type: DEFAULT; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | ALTER TABLE ONLY public.twitch_channel ALTER COLUMN id SET DEFAULT nextval('public.twitch_channel_id_seq'::regclass); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: facebook_page facebook_page_pkey; Type: CONSTRAINT; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | ALTER TABLE ONLY public.facebook_page | ||||||
|  |     ADD CONSTRAINT facebook_page_pkey PRIMARY KEY (id); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: line_group line_group_pkey; Type: CONSTRAINT; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | ALTER TABLE ONLY public.line_group | ||||||
|  |     ADD CONSTRAINT line_group_pkey PRIMARY KEY (id); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: twitch_channel twitch_channel_pkey; Type: CONSTRAINT; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | ALTER TABLE ONLY public.twitch_channel | ||||||
|  |     ADD CONSTRAINT twitch_channel_pkey PRIMARY KEY (id); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: line_group_name_uindex; Type: INDEX; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | CREATE UNIQUE INDEX line_group_name_uindex ON public.line_group USING btree (name); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: facebook_page facebook_page_line_group_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | ALTER TABLE ONLY public.facebook_page | ||||||
|  |     ADD CONSTRAINT facebook_page_line_group_id_fk FOREIGN KEY (groupid) REFERENCES public.line_group(id) ON UPDATE CASCADE ON DELETE CASCADE; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Name: twitch_channel twitch_channel_line_group_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | ALTER TABLE ONLY public.twitch_channel | ||||||
|  |     ADD CONSTRAINT twitch_channel_line_group_id_fk FOREIGN KEY (groupid) REFERENCES public.line_group(id); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| -- | -- | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user