licence-server/internal/repository/user_repo.go
djuka 04fd1678be Zateceno stanje sa produkcije: admin_users prijava + logo/favicon
Ovaj commit hvata radnu kopiju sa 151 kakva je zatecena 2026-07-25 (nije
pravljena u ovoj sesiji) - funkcionalnost prijave administratora preko
admin_users tabele (username/password_hash umesto jednog ADMIN_PASSWORD),
plus logo/favicon i go 1.24.0 + golang.org/x/crypto zavisnost. Binarni fajl
koji trenutno radi na produkciji je bas iz ovog stanja.

Zarobljeno kao osnova pre preimenovanja dal-license-server -> licence-server.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-25 05:47:42 +00:00

54 lines
1.4 KiB
Go

package repository
import (
"dal-license-server/internal/model"
"database/sql"
"fmt"
)
type UserRepo struct {
db *sql.DB
}
func NewUserRepo(db *sql.DB) *UserRepo {
return &UserRepo{db: db}
}
func (r *UserRepo) GetByUsername(username string) (*model.AdminUser, error) {
var u model.AdminUser
err := r.db.QueryRow(
"SELECT id, username, password_hash, full_name, active, created_at, updated_at, last_login_at FROM admin_users WHERE username = ?",
username,
).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.FullName, &u.Active, &u.CreatedAt, &u.UpdatedAt, &u.LastLoginAt)
if err != nil {
return nil, fmt.Errorf("get user by username: %w", err)
}
return &u, nil
}
func (r *UserRepo) Create(u *model.AdminUser) error {
res, err := r.db.Exec(
"INSERT INTO admin_users (username, password_hash, full_name, active) VALUES (?, ?, ?, ?)",
u.Username, u.PasswordHash, u.FullName, u.Active,
)
if err != nil {
return fmt.Errorf("create user: %w", err)
}
u.ID, _ = res.LastInsertId()
return nil
}
func (r *UserRepo) UpdateLastLogin(id int64) error {
_, err := r.db.Exec("UPDATE admin_users SET last_login_at = NOW() WHERE id = ?", id)
if err != nil {
return fmt.Errorf("update last login: %w", err)
}
return nil
}
func (r *UserRepo) Count() (int, error) {
var count int
err := r.db.QueryRow("SELECT COUNT(*) FROM admin_users").Scan(&count)
return count, err
}