weiro/providers/db/users.go

66 lines
1.5 KiB
Go
Raw Permalink Normal View History

2026-02-19 11:29:44 +00:00
package db
import (
"context"
"encoding/base64"
"time"
2026-02-19 11:29:44 +00:00
"lmika.dev/lmika/weiro/models"
"lmika.dev/lmika/weiro/providers/db/gen/sqlgen"
)
func (db *Provider) SelectUserByUsername(ctx context.Context, username string) (models.User, error) {
res, err := db.queries.SelectUserByUsername(ctx, username)
if err != nil {
return models.User{}, err
}
2026-02-25 11:04:47 +00:00
return dbUserToUser(res)
}
func (db *Provider) SelectUserByID(ctx context.Context, userID int64) (models.User, error) {
res, err := db.queries.SelectUserByID(ctx, userID)
2026-02-19 11:29:44 +00:00
if err != nil {
return models.User{}, err
}
2026-02-25 11:04:47 +00:00
return dbUserToUser(res)
2026-02-19 11:29:44 +00:00
}
func (db *Provider) SaveUser(ctx context.Context, user *models.User) error {
hashedPassword := base64.StdEncoding.EncodeToString(user.PasswordHashed)
if user.ID == 0 {
newID, err := db.queries.InsertUser(ctx, sqlgen.InsertUserParams{
Username: user.Username,
Password: hashedPassword,
CreatedAt: timeToInt(user.Created),
2026-02-19 11:29:44 +00:00
})
if err != nil {
return err
}
user.ID = newID
return nil
}
return db.queries.UpdateUser(ctx, sqlgen.UpdateUserParams{
ID: user.ID,
Username: user.Username,
Password: hashedPassword,
})
}
2026-02-25 11:04:47 +00:00
func dbUserToUser(res sqlgen.User) (models.User, error) {
pwdBytes, err := base64.StdEncoding.DecodeString(res.Password)
if err != nil {
return models.User{}, err
}
return models.User{
ID: res.ID,
Username: res.Username,
PasswordHashed: pwdBytes,
Created: time.Unix(res.CreatedAt, 0).UTC(),
2026-02-25 11:04:47 +00:00
}, nil
}