blob: 0ae5f4e758b3507ba98b649b058bdbda4c67c0c7 [file] [log] [blame]
gioa60f0de2024-07-08 10:49:48 +04001package welcome
2
3import (
4 "database/sql"
5
6 "github.com/giolekva/pcloud/core/installer/soft"
7)
8
9type Commit struct {
10 Hash string
11 Message string
12}
13
14type Store interface {
15 GetApps() ([]string, error)
16 CreateApp(name string) error
17 CreateCommit(name, hash, message string) error
18 GetCommitHistory(name string) ([]Commit, error)
19}
20
21func NewStore(cf soft.RepoIO, db *sql.DB) (Store, error) {
22 s := &storeImpl{cf, db}
23 if err := s.init(); err != nil {
24 return nil, err
25 }
26 return s, nil
27}
28
29type storeImpl struct {
30 cf soft.RepoIO
31 db *sql.DB
32}
33
34func (s *storeImpl) init() error {
35 _, err := s.db.Exec(`
36 CREATE TABLE IF NOT EXISTS apps (
37 name TEXT PRIMARY KEY
38 );
39 CREATE TABLE IF NOT EXISTS commits (
40 app_name TEXT,
41 hash TEXT,
42 message TEXT
43 );
44 `)
45 return err
46
47}
48
49func (s *storeImpl) CreateApp(name string) error {
50 query := `INSERT INTO apps (name) VALUES (?)`
51 _, err := s.db.Exec(query, name)
52 return err
53}
54
55func (s *storeImpl) GetApps() ([]string, error) {
56 query := `SELECT name FROM apps`
57 rows, err := s.db.Query(query)
58 if err != nil {
59 return nil, err
60 }
61 defer rows.Close()
62 ret := []string{}
63 for rows.Next() {
64 if err := rows.Err(); err != nil {
65 return nil, err
66 }
67 var name string
68 if err := rows.Scan(&name); err != nil {
69 return nil, err
70 }
71 ret = append(ret, name)
72
73 }
74 return ret, nil
75}
76
77func (s *storeImpl) CreateCommit(name, hash, message string) error {
78 query := `INSERT INTO commits (app_name, hash, message) VALUES (?, ?, ?)`
79 _, err := s.db.Exec(query, name, hash, message)
80 return err
81}
82
83func (s *storeImpl) GetCommitHistory(name string) ([]Commit, error) {
84 query := `SELECT hash, message FROM commits WHERE app_name = ?`
85 rows, err := s.db.Query(query, name)
86 if err != nil {
87 return nil, err
88 }
89 defer rows.Close()
90 ret := []Commit{}
91 for rows.Next() {
92 if err := rows.Err(); err != nil {
93 return nil, err
94 }
95 var c Commit
96 if err := rows.Scan(&c.Hash, &c.Message); err != nil {
97 return nil, err
98 }
99 ret = append(ret, c)
100
101 }
102 return ret, nil
103}