2a88b40cbf29c81b390c5c2833a6d1d18fa5764b
[bloat] / repository / sessionRepository.go
1 package repository
2
3 import (
4         "database/sql"
5
6         "web/model"
7 )
8
9 type sessionRepository struct {
10         db *sql.DB
11 }
12
13 func NewSessionRepository(db *sql.DB) (*sessionRepository, error) {
14         _, err := db.Exec(`CREATE TABLE IF NOT EXISTS session 
15                 (id varchar, instance_url varchar, access_token varchar)`,
16         )
17         if err != nil {
18                 return nil, err
19         }
20
21         return &sessionRepository{
22                 db: db,
23         }, nil
24 }
25
26 func (repo *sessionRepository) Add(s model.Session) (err error) {
27         _, err = repo.db.Exec("INSERT INTO session VALUES (?, ?, ?)", s.ID, s.InstanceURL, s.AccessToken)
28         return
29 }
30
31 func (repo *sessionRepository) Update(sessionID string, accessToken string) (err error) {
32         _, err = repo.db.Exec("UPDATE session SET access_token = ? where id = ?", accessToken, sessionID)
33         return
34 }
35
36 func (repo *sessionRepository) Get(id string) (s model.Session, err error) {
37         rows, err := repo.db.Query("SELECT * FROM session WHERE id = ?", id)
38         if err != nil {
39                 return
40         }
41         defer rows.Close()
42
43         if !rows.Next() {
44                 err = model.ErrSessionNotFound
45                 return
46         }
47
48         err = rows.Scan(&s.ID, &s.InstanceURL, &s.AccessToken)
49         if err != nil {
50                 return
51         }
52
53         return
54 }