Files
GoNtech/internal/db/sqlite/sesije.go
T

75 lines
2.2 KiB
Go

package sqlite
import (
"context"
"database/sql"
"fmt"
"time"
"ntech/internal/model"
)
type sqliteSesijeRepo struct{ db *sql.DB }
// NoviSesijeRepo kreira SQLite implementaciju SesijeRepository
func NoviSesijeRepo(db *sql.DB) *sqliteSesijeRepo {
return &sqliteSesijeRepo{db: db}
}
func (r *sqliteSesijeRepo) Kreiraj(ctx context.Context, korisnikID int64, token string, istice time.Time, totpPotvrdjeno bool) error {
potvrdjen := 1
if !totpPotvrdjeno {
potvrdjen = 0
}
_, err := r.db.ExecContext(ctx,
`INSERT INTO sesije (korisnik_id, token, totp_potvrdjeno, datum_isteka) VALUES (?, ?, ?, ?)`,
korisnikID, token, potvrdjen, istice)
if err != nil {
return fmt.Errorf("ntech: sesije.Kreiraj: %w", err)
}
return nil
}
func (r *sqliteSesijeRepo) DohvatiPoTokenu(ctx context.Context, token string) (*model.Sesija, error) {
s := &model.Sesija{}
var totpPotvrdjeno int
var datumIsteka, datumKreiranja time.Time
err := r.db.QueryRowContext(ctx,
`SELECT id, korisnik_id, token, totp_potvrdjeno, datum_isteka, datum_kreiranja
FROM sesije WHERE token = ?`, token).
Scan(&s.ID, &s.KorisnikID, &s.Token, &totpPotvrdjeno, &datumIsteka, &datumKreiranja)
if err != nil {
return nil, fmt.Errorf("ntech: sesije.DohvatiPoTokenu: %w", err)
}
s.TotpPotvrdjeno = totpPotvrdjeno == 1
s.DatumIsteka = datumIsteka
s.DatumKreiranja = datumKreiranja
return s, nil
}
func (r *sqliteSesijeRepo) PotvrdiTotp(ctx context.Context, token string, novoIstice time.Time) error {
_, err := r.db.ExecContext(ctx,
`UPDATE sesije SET totp_potvrdjeno = 1, datum_isteka = ? WHERE token = ?`,
novoIstice, token)
if err != nil {
return fmt.Errorf("ntech: sesije.PotvrdiTotp: %w", err)
}
return nil
}
func (r *sqliteSesijeRepo) Obrisi(ctx context.Context, token string) error {
_, err := r.db.ExecContext(ctx, `DELETE FROM sesije WHERE token = ?`, token)
if err != nil {
return fmt.Errorf("ntech: sesije.Obrisi: %w", err)
}
return nil
}
func (r *sqliteSesijeRepo) ObrisiIstekle(ctx context.Context) error {
_, err := r.db.ExecContext(ctx, `DELETE FROM sesije WHERE datum_isteka < ?`, time.Now())
if err != nil {
return fmt.Errorf("ntech: sesije.ObrisiIstekle: %w", err)
}
return nil
}