1package dao
2
3import (
4 "database/sql"
5 "time"
6
7 "github.com/dinkelspiel/cdn/db"
8 "github.com/dinkelspiel/cdn/models"
9)
10
11func ScanUserAuthCodeRow(rows *sql.Rows) (*models.UserAuthCode, error) {
12 var authCode models.UserAuthCode
13 var createdAt string
14 var updatedAt sql.NullString
15
16 if err := rows.Scan(&authCode.Id, &authCode.UserId, &authCode.Code, &authCode.Used, &updatedAt, &createdAt); err != nil {
17 return nil, err
18 } else {
19 var updatedAtTime time.Time
20 if updatedAt.Valid {
21 updatedAtTime, err = time.Parse("2006-01-02 15:04:05", updatedAt.String)
22 if err != nil {
23 return nil, err
24 }
25 }
26 createdAtTime, err := time.Parse("2006-01-02 15:04:05", createdAt)
27 if err != nil {
28 return nil, err
29 }
30 if updatedAt.Valid {
31 authCode.UpdatedAt = &updatedAtTime
32 } else {
33 authCode.UpdatedAt = nil
34 }
35 authCode.CreatedAt = &createdAtTime
36 return &authCode, nil
37 }
38}
39
40func GetUnusedUserAuthCodeByCode(db *db.DB, code int64) (*models.UserAuthCode, error) {
41 rows, err := db.MariaDB.Query("SELECT id, user_id, code, used, updated_at, created_at FROM user_auth_codes WHERE code = ? AND used = false", code)
42 if err != nil {
43 return nil, err
44 }
45 defer rows.Close()
46
47 if rows.Next() {
48 authCode, err := ScanUserAuthCodeRow(rows)
49 if err != nil {
50 return nil, err
51 }
52 user, err := GetUserById(db, authCode.UserId)
53 if err != nil {
54 return nil, err
55 }
56 authCode.User = user
57 return authCode, nil
58 }
59 return nil, nil
60}
61
62func CreateUserAuthCode(db *db.DB, authCode models.UserAuthCode) (*models.UserAuthCode, error) {
63 insertAuthCode := "INSERT INTO user_auth_codes(user_id, code, used) VALUES(?, ?, ?)"
64
65 res, err := db.MariaDB.Exec(insertAuthCode, authCode.UserId, authCode.Code, authCode.Used)
66 if err != nil {
67 return nil, err
68 }
69 id, _ := res.LastInsertId()
70
71 result := authCode
72 result.Id = &id
73 return &result, nil
74}
75
76func UpdateUserAuthCodeToUsed(db *db.DB, authCode models.UserAuthCode) error {
77 updateAuthCode := "UPDATE user_auth_codes SET used = true WHERE id = ?"
78
79 _, err := db.MariaDB.Exec(updateAuthCode, authCode.Id)
80 if err != nil {
81 return err
82 }
83
84 return nil
85}