Page:
Razvoj
Clone
1
Razvoj
Dasko edited this page 2026-06-21 02:16:00 +02:00
Razvoj
Okruženje
# 1. Kloniraj
git clone git@git.vm-net.in.rs:Dasko/GoNtech.git
cd GoNtech
# 2. Podesi ENV
export $(grep -v '^#' ntech.env | xargs)
# 3. Pokreni u dev modu (šabloni sa diska — hot-reload nije ugrađen)
go run ./cmd/ntech
Struktura koda po konvenciji
- Handleri — grupisani po domenu u
internal/handler/(jedan fajl = jedan domen) - Modeli —
internal/model/— čiste strukture, nula poslovne logike - Middleware — stacked na chi ruter u
main.go - Šabloni — komponentna struktura u
web/templates/komponente/ - Migracije — numerisane prefiksom (
001_,002_, ...), append-only, nikad ne renumber-ovati
Konvencije koda
- Indentacija: tabovi (Go standard)
- Formatiranje:
gofmt -s -w .pre svakog commit-a - Imenovanje:
- Izvezeni: PascalCase (
MagacinHandler,ListaArtikala) - Neizvezeni: camelCase (
renderStranicu,parsirajFormu) - Fajlovi:
snake_case.gopo domenu (magacin.go,servis.go)
- Izvezeni: PascalCase (
- Importi: stdlib → third-party → internal (blank-line razdvajanje)
- Error handling: eksplicitna provera, wrap kroz
fmt.Errorf("ntech: ...: %w", err)
Jezik
| Šta | Jezik |
|---|---|
| Korisnički interfejs | srpski (ekavica, latinica) |
| Poruke o greškama | srpski |
| Komentari u kodu | srpski |
| Git commit poruke | srpski |
| Dokumentacija | srpski |
| Imena promenljivih/funkcija | engleski |
| Nazivi SQL kolona/tabela | engleski |
| Nazivi ENV promenljivih | engleski |
Testiranje
# Svi testovi
go test ./...
# Bez keša
go test ./... -v -count=1
# Specifični test
go test ./internal/handler/ -run TestPrijava -v
Test fajlovi su pored koda koji testiraju:
internal/handler/prijava_test.gointernal/handler/parseformu_test.gointernal/model/model_test.gointernal/db/sqlite/izvestaj_test.go
Build i provera
# Formatiranje
gofmt -s -w .
# Statička analiza
go vet ./...
# Build
CGO_ENABLED=0 go build ./cmd/ntech
Migracije
Migracije su u migrations/, numerisane trocifrenim prefiksom:
001_kategorije.sql
002_artikli.sql
...
061_backfill_kategorija_kod.sql
Pravila:
- Append-only — nove migracije se dodaju, postojeće se nikad ne menjaju
- Idempotentne — koriste
CREATE TABLE IF NOT EXISTS,ALTER TABLE ... ADD COLUMN(SQLite) - Redosled — izvršavaju se po imenu fajla, rastuće
- Transakcije — SQLite implicitno,
migrationtabela prati koje su izvršene
Grane i workflow
# Nova funkcionalnost
git switch -c feature/kratak-opis
# Posle izmene
gofmt -s -w .
go vet ./...
git commit -m "Kratak opis promene"
git push -u origin feature/kratak-opis
Commit poruke
Format: srpski, kratak opis (max 50 karaktera), opciono detaljnije u telu.
Primeri:
Magacin: modal za premeštanje + ujednačen slajder na svim brauzerima
Bezbednosni audit i refaktoring: HP popravke, RBAC, flash poruke, go:embed, CSP
Dodavanje novog modula
- Model — struktura u
internal/model/novi_modul.go - Repozitorijum — interfejs u
internal/db/repository.go, implementacija uinternal/db/sqlite/novi_modul.go - Migracija —
migrations/062_novi_modul.sql - Handler —
internal/handler/novi_modul.go - Rute — dodati u
cmd/ntech/main.go - Dozvole — dodati u
internal/middleware/dozvole.go - Šabloni —
web/templates/stranice/novi_modul.html - CSS — dodati u
web/static/main.css(ako treba novi stil)
Zavisnosti (go.mod)
| Direktna | Verzija | Uloga |
|---|---|---|
go-chi/chi/v5 |
5.3.0 | HTTP ruter + middleware |
google/uuid |
1.6.0 | UUID generator (tokeni sesije) |
joho/godotenv |
1.5.1 | .env fajl loader |
pquerna/otp |
1.5.0 | TOTP 2FA |
x/crypto |
0.52.0 | bcrypt |
modernc.org/sqlite |
1.51.0 | SQLite bez CGO |
Sve ostalo je Go standardna biblioteka: net/http, database/sql, html/template, crypto/rand, embed, io/fs, log/slog.