From 295fe0b9ff39a9da2f3267de82ede7733881fcec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Fri, 3 Jul 2026 23:42:30 +0200 Subject: [PATCH] =?UTF-8?q?Ispravka:=20Usluge/Tro=C5=A1kovi=20se=20nisu=20?= =?UTF-8?q?u=C4=8Ditavali=20(regresija=20iz=20DatumUnosa=20time.Time=20izm?= =?UTF-8?q?ene)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit usluge.datum_unosa i troskovi.datum_unosa su TEXT kolone (ne DATETIME) — modernc.org/sqlite driver za njih vraća string, ne time.Time, pa je Scan direktno u *time.Time pucao sa "unsupported Scan ... string into *time.Time". Dodat parseDatumUnosa helper (ručni time.Parse), koriste ga skenirajUslugu/skenirajTrosak umesto oslanjanja na driver auto-konverziju. --- internal/db/sqlite/trosak.go | 6 +++++- internal/db/sqlite/usluga.go | 6 +++++- internal/db/sqlite/utils.go | 8 ++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/internal/db/sqlite/trosak.go b/internal/db/sqlite/trosak.go index cbed94f..93cb340 100644 --- a/internal/db/sqlite/trosak.go +++ b/internal/db/sqlite/trosak.go @@ -26,11 +26,15 @@ func skenirajTrosak(s interface { var t model.Trosak var sifra sql.NullString var arhiviran int - if err := s.Scan(&t.ID, &sifra, &t.Naziv, &t.Cena, &t.Opis, &arhiviran, &t.DatumUnosa); err != nil { + var datumUnosa string + if err := s.Scan(&t.ID, &sifra, &t.Naziv, &t.Cena, &t.Opis, &arhiviran, &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 } diff --git a/internal/db/sqlite/usluga.go b/internal/db/sqlite/usluga.go index 8db77c6..e421431 100644 --- a/internal/db/sqlite/usluga.go +++ b/internal/db/sqlite/usluga.go @@ -26,11 +26,15 @@ func skenirajUslugu(s interface { var u model.Usluga var sifra sql.NullString var arhiviran int - if err := s.Scan(&u.ID, &sifra, &u.Naziv, &u.Kategorija, &u.JedinicaMere, &u.Cena, &u.PdvStopa, &u.Opis, &arhiviran, &u.DatumUnosa); err != nil { + 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 { return u, err } u.Sifra = sifra.String u.Arhiviran = arhiviran == 1 + if t, err := parseDatumUnosa(datumUnosa); err == nil { + u.DatumUnosa = t + } return u, nil } diff --git a/internal/db/sqlite/utils.go b/internal/db/sqlite/utils.go index 4f058ab..77ec141 100644 --- a/internal/db/sqlite/utils.go +++ b/internal/db/sqlite/utils.go @@ -55,3 +55,11 @@ 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) +}