1package plugindao
2
3import (
4 "database/sql"
5 "errors"
6 "time"
7
8 userdao "github.com/dinkelspiel/goldenage/web/dao/user"
9 "github.com/dinkelspiel/goldenage/web/models"
10)
11
12func scanServerRow(rows *sql.Rows, db *sql.DB) (*models.Server, error) {
13 var server models.Server
14 var createdAt string
15 var updatedAt sql.NullString
16
17 if err := rows.Scan(&server.Id, &server.Name, &server.Secret, &server.ServerAddress, &server.UserId, &createdAt, &updatedAt); err != nil {
18 return nil, err
19 }
20
21 createdAtTime, err := time.Parse("2006-01-02 15:04:05", createdAt)
22 if err != nil {
23 return nil, err
24 }
25 server.CreatedAt = &createdAtTime
26
27 if updatedAt.Valid {
28 updatedAtTime, err := time.Parse("2006-01-02 15:04:05", updatedAt.String)
29 if err != nil {
30 return nil, err
31 }
32 server.UpdatedAt = &updatedAtTime
33 } else {
34 server.UpdatedAt = nil
35 }
36
37 server.User, err = userdao.GetUserById(db, server.UserId)
38 if err != nil {
39 return nil, err
40 }
41
42 return &server, nil
43}
44
45func GetServerByIdAndSecret(db *sql.DB, id int64, secret string) (*models.Server, error) {
46 rows, err := db.Query("SELECT id, name, secret, server_address, user_id, created_at, updated_at FROM servers WHERE id = ? AND secret = ?", id, secret)
47 if err != nil {
48 return nil, err
49 }
50 defer rows.Close()
51
52 if rows.Next() {
53 return scanServerRow(rows, db)
54 }
55 return nil, errors.New("no servers found with matching id and secret")
56}
57
58func GetServerById(db *sql.DB, id int64) (*models.Server, error) {
59 rows, err := db.Query("SELECT id, name, secret, server_address, user_id, created_at, updated_at FROM servers WHERE id = ?", id)
60 if err != nil {
61 return nil, err
62 }
63 defer rows.Close()
64
65 if rows.Next() {
66 return scanServerRow(rows, db)
67 }
68 return nil, errors.New("no servers found with matching id")
69}