11package main
22
33import (
4- "database/sql"
54 "flag"
65 "go.uber.org/zap"
76 "gopkg.in/yaml.v2"
@@ -18,111 +17,6 @@ import (
1817 _ "github.com/mattn/go-sqlite3"
1918)
2019
21- const (
22- currentSchemaVersion = 2
23- )
24-
25- func initSqlite () db.Database {
26- var err error
27- logger := zapwriter .Logger ("main" )
28-
29- configs .Config .DB , err = sql .Open ("sqlite3" , configs .Config .DatabaseURL )
30- if err != nil {
31- logger .Fatal ("unable to open database file" ,
32- zap .Any ("config" , configs .Config ),
33- zap .Error (err ),
34- )
35- }
36-
37- db := db .NewSQLite (configs .Config .DB )
38-
39- rows , err := configs .Config .DB .Query ("SELECT version from 'schema_version' where id=1" )
40- if err != nil {
41- if err .Error () == "no such table: schema_version" {
42- _ , err = configs .Config .DB .Exec (`
43- CREATE TABLE IF NOT EXISTS 'schema_version' (
44- 'id' INTEGER PRIMARY KEY AUTOINCREMENT,
45- 'version' INTEGER NOT NULL
46- );
47-
48- CREATE TABLE IF NOT EXISTS 'last_version' (
49- 'id' INTEGER PRIMARY KEY AUTOINCREMENT,
50- 'url' VARCHAR(255) NOT NULL,
51- 'filter' VARCHAR(255) NOT NULL,
52- 'last_tag' VARCHAR(255) NOT NULL DEFAULT '',
53- 'date' DATE NOT NULL
54- );
55-
56- CREATE TABLE IF NOT EXISTS 'subscriptions' (
57- 'id' INTEGER PRIMARY KEY AUTOINCREMENT,
58- 'chat_id' Int64,
59- 'endpoint' VARCHAR(255) NOT NULL,
60- 'url' VARCHAR(255) NOT NULL,
61- 'filter' VARCHAR(255) NOT NULL
62- );
63-
64- CREATE TABLE IF NOT EXISTS 'feeds' (
65- 'id' INTEGER PRIMARY KEY AUTOINCREMENT,
66- 'repo' VARCHAR(255) NOT NULL,
67- 'filter' VARCHAR(255) NOT NULL,
68- 'name' VARCHAR(255) NOT NULL,
69- 'message_pattern' VARCHAR(255) NOT NULL
70- );
71-
72- INSERT INTO 'schema_version' (id, version) values (1, 2);
73- ` )
74- if err != nil {
75- logger .Fatal ("failed to initialize database" ,
76- zap .Any ("config" , configs .Config ),
77- zap .Error (err ),
78- )
79- }
80- } else {
81- logger .Fatal ("failed to query database version" ,
82- zap .Error (err ),
83- )
84- }
85- } else {
86- schemaVersion := int (0 )
87- for rows .Next () {
88- err = rows .Scan (& schemaVersion )
89- if err != nil {
90- logger .Fatal ("unable to fetch value" ,
91- zap .Error (err ),
92- )
93- }
94- }
95- rows .Close ()
96-
97- if schemaVersion != currentSchemaVersion {
98- switch schemaVersion {
99- case 1 :
100- _ , err = configs .Config .DB .Exec (`
101- ALTER TABLE last_version ADD COLUMN 'last_tag' VARCHAR(255) NOT NULL DEFAULT '';
102-
103- UPDATE schema_version SET version = 2 WHERE id=1;
104- ` )
105-
106- if err != nil {
107- logger .Fatal ("failed to migrate database" ,
108- zap .Int ("databaseVersion" , schemaVersion ),
109- zap .Int ("upgradingTo" , currentSchemaVersion ),
110- zap .Error (err ),
111- )
112- }
113- // 'last_tag' VARCHAR(255) NOT NULL DEFAULT '',
114- default :
115- // Don't know how to migrate from this version
116- logger .Fatal ("Unknown schema version specified" ,
117- zap .Int ("version" , schemaVersion ),
118- )
119- }
120- }
121- }
122-
123- return db
124- }
125-
12620func main () {
12721 err := zapwriter .ApplyConfig ([]zapwriter.Config {configs .DefaultLoggerConfig })
12822 if err != nil {
@@ -171,9 +65,9 @@ func main() {
17165 }
17266
17367 // TODO: Generalize to support other databases (e.x. mysql)
174- var db db.Database
68+ var database db.Database
17569 if configs .Config .DatabaseType == "sqlite3" || configs .Config .DatabaseType == "sqlite" {
176- db = initSqlite ()
70+ database = db . NewSQLite ()
17771 }
17872
17973 exitChan := make (chan struct {})
@@ -186,7 +80,7 @@ func main() {
18680 zap .Any ("endpoint_config" , cfg ),
18781 )
18882 if cfg .Type == "telegram" {
189- configs .Config .Senders [name ], err = endpoints .InitializeTelegramEndpoint (cfg .Token , exitChan , db )
83+ configs .Config .Senders [name ], err = endpoints .InitializeTelegramEndpoint (cfg .Token , exitChan , database )
19084 if err != nil {
19185 logger .Fatal ("Error initializing telegram endpoint" ,
19286 zap .Error (err ),
@@ -212,7 +106,7 @@ func main() {
212106 zap .Any ("config" , configs .Config ),
213107 )
214108
215- feedsListDB , err := db .ListFeeds ()
109+ feedsListDB , err := database .ListFeeds ()
216110 if err != nil {
217111 logger .Fatal ("unknown error quering database" ,
218112 zap .Error (err ),
@@ -221,7 +115,7 @@ func main() {
221115
222116 feedsList := make ([]* feeds.Feed , 0 , len (feedsListDB ))
223117 for _ , f := range feedsListDB {
224- f2 , err := feeds .NewFeed (f .Repo , f .Filter , f .Name , f .MessagePattern , db )
118+ f2 , err := feeds .NewFeed (f .Repo , f .Filter , f .Name , f .MessagePattern , database )
225119 if err != nil {
226120 continue
227121 }
0 commit comments