Error prefiks: ErrArtikalNePostoji u db/repository.go, ntech: prefiks na ErrNedovoljnoKolicine

This commit is contained in:
2026-07-16 13:16:29 +02:00
parent 80abfd583d
commit 4c75aa2c75
5 changed files with 10 additions and 7 deletions
+1 -1
View File
@@ -6,5 +6,5 @@ type ErrNedovoljnoKolicine struct {
} }
func (e *ErrNedovoljnoKolicine) Error() string { func (e *ErrNedovoljnoKolicine) Error() string {
return "Nedovoljno količine na stanju za artikal: " + e.ArtikalNaziv return "ntech: nedovoljno količine na stanju za artikal: " + e.ArtikalNaziv
} }
+3
View File
@@ -29,6 +29,9 @@ var ErrArtikalDuplikatSifre = errors.New("ntech: šifra ili barkod artikla već
var ErrUslugaDuplikatSifre = errors.New("ntech: šifra usluge već postoji") var ErrUslugaDuplikatSifre = errors.New("ntech: šifra usluge već postoji")
var ErrTrosakDuplikatSifre = errors.New("ntech: šifra troška već postoji") var ErrTrosakDuplikatSifre = errors.New("ntech: šifra troška već postoji")
// ErrArtikalNePostoji se vraća kada se menja cena nepostojećeg artikla
var ErrArtikalNePostoji = errors.New("ntech: artikal ne postoji")
// ArtikalRepository definiše operacije nad artiklima // ArtikalRepository definiše operacije nad artiklima
type ArtikalRepository interface { type ArtikalRepository interface {
Lista(ctx context.Context, filter ArtikalFilter) ([]model.ArtikalSaKategorijom, error) Lista(ctx context.Context, filter ArtikalFilter) ([]model.ArtikalSaKategorijom, error)
+2 -4
View File
@@ -7,6 +7,7 @@ import (
"fmt" "fmt"
"time" "time"
"ntech/internal/db"
"ntech/internal/model" "ntech/internal/model"
) )
@@ -20,9 +21,6 @@ func NoviNivelacijaRepo(db *sql.DB) *NivelacijaRepo {
return &NivelacijaRepo{db: db} return &NivelacijaRepo{db: db}
} }
// ErrArtikalNePostoji se vraća kada se menja cena nepostojećeg artikla
var ErrArtikalNePostoji = errors.New("artikal ne postoji")
// PromeniCenu transakciono menja prodajnu cenu artikla i upisuje nivelacioni zapis. // PromeniCenu transakciono menja prodajnu cenu artikla i upisuje nivelacioni zapis.
// Stara cena se čita iz baze unutar transakcije; izvor je "rucno". // Stara cena se čita iz baze unutar transakcije; izvor je "rucno".
func (r *NivelacijaRepo) PromeniCenu(ctx context.Context, artikalID int64, novaCena float64, razlog string, korisnikID *int64) (*model.Nivelacija, error) { func (r *NivelacijaRepo) PromeniCenu(ctx context.Context, artikalID int64, novaCena float64, razlog string, korisnikID *int64) (*model.Nivelacija, error) {
@@ -35,7 +33,7 @@ func (r *NivelacijaRepo) PromeniCenu(ctx context.Context, artikalID int64, novaC
var stara float64 var stara float64
err = tx.QueryRowContext(ctx, "SELECT prodajna_cena FROM artikli WHERE id = ?", artikalID).Scan(&stara) err = tx.QueryRowContext(ctx, "SELECT prodajna_cena FROM artikli WHERE id = ?", artikalID).Scan(&stara)
if errors.Is(err, sql.ErrNoRows) { if errors.Is(err, sql.ErrNoRows) {
return nil, ErrArtikalNePostoji return nil, db.ErrArtikalNePostoji
} }
if err != nil { if err != nil {
return nil, fmt.Errorf("ntech: NivelacijaRepo.PromeniCenu: čitanje cene: %w", err) return nil, fmt.Errorf("ntech: NivelacijaRepo.PromeniCenu: čitanje cene: %w", err)
+2 -1
View File
@@ -5,6 +5,7 @@ import (
"errors" "errors"
"testing" "testing"
"ntech/internal/db"
"ntech/internal/model" "ntech/internal/model"
) )
@@ -62,7 +63,7 @@ func TestPromeniCenu_NepostojeciArtikal(t *testing.T) {
nivRepo := NoviNivelacijaRepo(baza) nivRepo := NoviNivelacijaRepo(baza)
_, err := nivRepo.PromeniCenu(ctx, 9999, 500, "test", nil) _, err := nivRepo.PromeniCenu(ctx, 9999, 500, "test", nil)
if !errors.Is(err, ErrArtikalNePostoji) { if !errors.Is(err, db.ErrArtikalNePostoji) {
t.Errorf("greška = %v, očekivano ErrArtikalNePostoji", err) t.Errorf("greška = %v, očekivano ErrArtikalNePostoji", err)
} }
+2 -1
View File
@@ -7,6 +7,7 @@ import (
"strings" "strings"
"time" "time"
"ntech/internal/db"
"ntech/internal/db/sqlite" "ntech/internal/db/sqlite"
"ntech/internal/middleware" "ntech/internal/middleware"
"ntech/internal/model" "ntech/internal/model"
@@ -91,7 +92,7 @@ func (h *Handler) PromeniCenuArtikla(w http.ResponseWriter, r *http.Request) {
korisnikID := &k.ID korisnikID := &k.ID
_, err = h.NivelacijaRepo.PromeniCenu(r.Context(), id, novaCena, razlog, korisnikID) _, err = h.NivelacijaRepo.PromeniCenu(r.Context(), id, novaCena, razlog, korisnikID)
switch { switch {
case errors.Is(err, sqlite.ErrArtikalNePostoji): case errors.Is(err, db.ErrArtikalNePostoji):
middleware.SetFlash(w, r, h.DB, "greska", "Artikal nije pronađen.") middleware.SetFlash(w, r, h.DB, "greska", "Artikal nije pronađen.")
http.Redirect(w, r, "/magacin", http.StatusSeeOther) http.Redirect(w, r, "/magacin", http.StatusSeeOther)
case err != nil: case err != nil: