Prava ispravka: usluge/troskovi.datum_unosa promenjen na DATETIME u šemi

Umesto ručnog parsiranja (prethodni commit), migracija 103 rekreira obe
tabele sa DATETIME kolonom (kao svuda drugde u šemi) — SQLite ne podržava
ALTER COLUMN, pa je urađeno kreiraj-novu/prebaci-podatke/obriši-staru/
preimenuj. Fizički format podataka se ne menja (SQLite nema pravi numerički
afinitet za DATETIME nad ovakvim stringom), menja se samo deklarisani tip
kolone koji driver čita da odluči string vs time.Time pri Scan-u.

Uklonjen parseDatumUnosa workaround iz utils.go — skenirajUslugu/skenirajTrosak
sada rade identično kao svi ostali skenirajX helperi (direktan Scan u time.Time).

Potvrđeno: migracija testirana na praznoj i na postojećoj bazi sa podacima
(6 usluga, ID-jevi i datumi netaknuti), /usluge i /troskovi vraćaju 200.
This commit is contained in:
2026-07-04 00:09:32 +02:00
parent 295fe0b9ff
commit e99dd50273
4 changed files with 41 additions and 18 deletions
+1 -5
View File
@@ -26,15 +26,11 @@ func skenirajTrosak(s interface {
var t model.Trosak
var sifra sql.NullString
var arhiviran int
var datumUnosa string
if err := s.Scan(&t.ID, &sifra, &t.Naziv, &t.Cena, &t.Opis, &arhiviran, &datumUnosa); err != nil {
if err := s.Scan(&t.ID, &sifra, &t.Naziv, &t.Cena, &t.Opis, &arhiviran, &t.DatumUnosa); err != nil {
return t, err
}
t.Sifra = sifra.String
t.Arhiviran = arhiviran == 1
if parsed, err := parseDatumUnosa(datumUnosa); err == nil {
t.DatumUnosa = parsed
}
return t, nil
}
+1 -5
View File
@@ -26,15 +26,11 @@ func skenirajUslugu(s interface {
var u model.Usluga
var sifra sql.NullString
var arhiviran int
var datumUnosa string
if err := s.Scan(&u.ID, &sifra, &u.Naziv, &u.Kategorija, &u.JedinicaMere, &u.Cena, &u.PdvStopa, &u.Opis, &arhiviran, &datumUnosa); err != nil {
if err := s.Scan(&u.ID, &sifra, &u.Naziv, &u.Kategorija, &u.JedinicaMere, &u.Cena, &u.PdvStopa, &u.Opis, &arhiviran, &u.DatumUnosa); err != nil {
return u, err
}
u.Sifra = sifra.String
u.Arhiviran = arhiviran == 1
if t, err := parseDatumUnosa(datumUnosa); err == nil {
u.DatumUnosa = t
}
return u, nil
}
-8
View File
@@ -55,11 +55,3 @@ func nullDateString(v *time.Time) sql.NullString {
}
return sql.NullString{String: v.Format("2006-01-02"), Valid: true}
}
// parseDatumUnosa parsira "YYYY-MM-DD HH:MM:SS" iz kolone deklarisane kao TEXT
// (npr. usluge/troskovi.datum_unosa, `DEFAULT (datetime('now'))`). Driver
// vraća string umesto time.Time za TEXT kolone (za razliku od DATETIME kolona
// koje driver sam parsira), pa Scan ne može direktno u *time.Time.
func parseDatumUnosa(s string) (time.Time, error) {
return time.ParseInLocation("2006-01-02 15:04:05", s, time.UTC)
}