reprogl

Форк
0
100 строк · 1.5 Кб
1
package repositories
2

3
import (
4
	"database/sql"
5
	"errors"
6
	"time"
7

8
	"xelbot.com/reprogl/models"
9
)
10

11
type UserRepository struct {
12
	DB *sql.DB
13
}
14

15
func (ur *UserRepository) GetLoggedUserByUsername(username string) (*models.LoggedUser, error) {
16
	query := `
17
		SELECT
18
			u.id,
19
			u.username,
20
			u.user_type,
21
			u.password,
22
			u.password_salt
23
		FROM users AS u
24
		WHERE (u.username = ?)`
25

26
	user := models.LoggedUser{}
27
	err := ur.DB.QueryRow(query, username).Scan(
28
		&user.ID,
29
		&user.Username,
30
		&user.Role,
31
		&user.PasswordHash,
32
		&user.Salt)
33

34
	if err != nil {
35
		if errors.Is(err, sql.ErrNoRows) {
36
			return nil, models.RecordNotFound
37
		} else {
38
			return nil, err
39
		}
40
	}
41

42
	return &user, nil
43
}
44

45
func (ur *UserRepository) Find(id int) (*models.User, error) {
46
	query := `
47
		SELECT
48
			u.id,
49
			u.username,
50
			u.mail,
51
			u.user_type,
52
			u.display_name,
53
			u.avatar_variant,
54
			u.time_created,
55
			u.gender
56
		FROM users AS u
57
		WHERE (u.id = ?)`
58

59
	user := models.User{}
60
	err := ur.DB.QueryRow(query, id).Scan(
61
		&user.ID,
62
		&user.Username,
63
		&user.Email,
64
		&user.Role,
65
		&user.DisplayName,
66
		&user.AvatarVariant,
67
		&user.CreatedAt,
68
		&user.Gender)
69

70
	if err != nil {
71
		if errors.Is(err, sql.ErrNoRows) {
72
			return nil, models.RecordNotFound
73
		} else {
74
			return nil, err
75
		}
76
	}
77

78
	return &user, nil
79
}
80

81
func (ur *UserRepository) SaveLoginEvent(id int, ip string) error {
82
	query := `
83
		UPDATE
84
			users
85
		SET
86
			last_login = ?,
87
			login_count = login_count + 1,
88
			ip_last = ?
89
		WHERE
90
			id = ?`
91

92
	_, err := ur.DB.Exec(
93
		query,
94
		time.Now().Format("2006-01-02 15:04:05.000"),
95
		ip,
96
		id,
97
	)
98

99
	return err
100
}
101

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.