bring back yahoo pipes!
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 170 lines 4.2 kB view raw
1package store 2 3import ( 4 "database/sql" 5 "fmt" 6 "time" 7 8 "github.com/google/uuid" 9) 10 11type User struct { 12 ID string 13 IndikoSub string 14 Username string 15 Name string 16 Email string 17 Photo string 18 URL string 19 Role string 20 CreatedAt int64 21 UpdatedAt int64 22} 23 24type Session struct { 25 ID string 26 UserID string 27 AccessToken string 28 RefreshToken string 29 ExpiresAt int64 30 CreatedAt int64 31} 32 33func (db *DB) CreateUser(indikoSub, username, name, email, photo, url string) (*User, error) { 34 now := time.Now().Unix() 35 user := &User{ 36 ID: uuid.New().String(), 37 IndikoSub: indikoSub, 38 Username: username, 39 Name: name, 40 Email: email, 41 Photo: photo, 42 URL: url, 43 Role: "user", 44 CreatedAt: now, 45 UpdatedAt: now, 46 } 47 48 _, err := db.Exec(` 49 INSERT INTO users (id, indiko_sub, username, name, email, photo, url, role, created_at, updated_at) 50 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 51 `, user.ID, user.IndikoSub, user.Username, user.Name, user.Email, user.Photo, user.URL, user.Role, user.CreatedAt, user.UpdatedAt) 52 53 if err != nil { 54 return nil, fmt.Errorf("insert user: %w", err) 55 } 56 57 return user, nil 58} 59 60func (db *DB) GetUserByIndikoSub(indikoSub string) (*User, error) { 61 user := &User{} 62 err := db.QueryRow(` 63 SELECT id, indiko_sub, username, name, email, photo, url, role, created_at, updated_at 64 FROM users 65 WHERE indiko_sub = ? 66 `, indikoSub).Scan(&user.ID, &user.IndikoSub, &user.Username, &user.Name, &user.Email, &user.Photo, &user.URL, &user.Role, &user.CreatedAt, &user.UpdatedAt) 67 68 if err == sql.ErrNoRows { 69 return nil, nil 70 } 71 72 if err != nil { 73 return nil, fmt.Errorf("query user: %w", err) 74 } 75 76 return user, nil 77} 78 79func (db *DB) GetUserByID(id string) (*User, error) { 80 user := &User{} 81 err := db.QueryRow(` 82 SELECT id, indiko_sub, username, name, email, photo, url, role, created_at, updated_at 83 FROM users 84 WHERE id = ? 85 `, id).Scan(&user.ID, &user.IndikoSub, &user.Username, &user.Name, &user.Email, &user.Photo, &user.URL, &user.Role, &user.CreatedAt, &user.UpdatedAt) 86 87 if err == sql.ErrNoRows { 88 return nil, nil 89 } 90 91 if err != nil { 92 return nil, fmt.Errorf("query user: %w", err) 93 } 94 95 return user, nil 96} 97 98func (db *DB) UpdateUser(user *User) error { 99 user.UpdatedAt = time.Now().Unix() 100 101 _, err := db.Exec(` 102 UPDATE users 103 SET username = ?, name = ?, email = ?, photo = ?, url = ?, updated_at = ? 104 WHERE id = ? 105 `, user.Username, user.Name, user.Email, user.Photo, user.URL, user.UpdatedAt, user.ID) 106 107 if err != nil { 108 return fmt.Errorf("update user: %w", err) 109 } 110 111 return nil 112} 113 114func (db *DB) CreateSession(userID, accessToken, refreshToken string, expiresAt int64) (*Session, error) { 115 session := &Session{ 116 ID: uuid.New().String(), 117 UserID: userID, 118 AccessToken: accessToken, 119 RefreshToken: refreshToken, 120 ExpiresAt: expiresAt, 121 CreatedAt: time.Now().Unix(), 122 } 123 124 _, err := db.Exec(` 125 INSERT INTO sessions (id, user_id, access_token, refresh_token, expires_at, created_at) 126 VALUES (?, ?, ?, ?, ?, ?) 127 `, session.ID, session.UserID, session.AccessToken, session.RefreshToken, session.ExpiresAt, session.CreatedAt) 128 129 if err != nil { 130 return nil, fmt.Errorf("insert session: %w", err) 131 } 132 133 return session, nil 134} 135 136func (db *DB) GetSessionByID(id string) (*Session, error) { 137 session := &Session{} 138 err := db.QueryRow(` 139 SELECT id, user_id, access_token, refresh_token, expires_at, created_at 140 FROM sessions 141 WHERE id = ? 142 `, id).Scan(&session.ID, &session.UserID, &session.AccessToken, &session.RefreshToken, &session.ExpiresAt, &session.CreatedAt) 143 144 if err == sql.ErrNoRows { 145 return nil, nil 146 } 147 148 if err != nil { 149 return nil, fmt.Errorf("query session: %w", err) 150 } 151 152 return session, nil 153} 154 155func (db *DB) DeleteSession(id string) error { 156 _, err := db.Exec("DELETE FROM sessions WHERE id = ?", id) 157 if err != nil { 158 return fmt.Errorf("delete session: %w", err) 159 } 160 return nil 161} 162 163func (db *DB) DeleteExpiredSessions() error { 164 now := time.Now().Unix() 165 _, err := db.Exec("DELETE FROM sessions WHERE expires_at < ?", now) 166 if err != nil { 167 return fmt.Errorf("delete expired sessions: %w", err) 168 } 169 return nil 170}