Readme: usklađen sa stanjem koda — KPO knjiga je implementirana, PostgreSQL označen kao neimplementiran, dopunjeno stablo strukture (be/, fiskal/, Fisk/)

This commit is contained in:
2026-07-31 11:19:38 +02:00
parent 9ce1ee817d
commit 9a830c3e81
2 changed files with 14 additions and 10 deletions
+7 -5
View File
@@ -86,6 +86,7 @@ The goal is simple: everything the repair shop needs to track is located in one
- Flash messages — one-time feedback after an action
- Automatic SQLite backup — with configurable number of retained copies; restore from a copy (safe, with no downtime)
- Charts — monthly revenue on reports (Chart.js)
- KPO book (ledger of income and expenses)
- Structured logging — `log/slog` (JSON in production, text in development); separate auth log in fail2ban format
- Automated tests — unit and integration over a SQLite database (crypto, RBAC, login flows, form validators, reports)
- **Demo mode** (`NTECH_ENV=demo`) — auto-created demo user, pre-filled login form, restricted backup count, blocked password/2FA changes
@@ -96,8 +97,8 @@ The goal is simple: everything the repair shop needs to track is located in one
### Planned
- KPO book and double-entry bookkeeping (optional, later phase)
- PostgreSQL support (for multi-user environments)
- Double-entry bookkeeping (optional, later phase)
- PostgreSQL support (for multi-user environments) — an empty `internal/db/postgres` package exists as a placeholder, but there is no `pgx` dependency yet and `NTECH_DB`/`NTECH_DSN` are not read by the app
- WebAuthn / Passkey login (database schema is already prepared)
- Notifications (email / WhatsApp) — deferred to a later phase
- Barcode scanning via camera — deferred to a later phase
@@ -114,7 +115,7 @@ The goal is simple: everything the repair shop needs to track is located in one
| [HTMX](https://htmx.org) | dynamic HTML over HTTP |
| [Alpine.js](https://alpinejs.dev) | client-side UI logic |
| [SQLite](https://sqlite.org) + [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | main database (pure Go, no CGO) |
| [PostgreSQL](https://www.postgresql.org) + [pgx/v5](https://github.com/jackc/pgx) | optional production database |
| [PostgreSQL](https://www.postgresql.org) + [pgx/v5](https://github.com/jackc/pgx) | planned production database (not implemented yet) |
---
@@ -171,9 +172,7 @@ The application reads environment variables on startup. In development, place th
| ---------------- | ------------- | ----------------------------------------------------------------- |
| `NTECH_ENV` | `development` | Mode: `development`, `production`, or `demo` |
| `NTECH_PORT` | `8080` | HTTP port |
| `NTECH_DB` | `sqlite` | Database type: `sqlite` or `postgres` |
| `NTECH_SQLITE` | `ntech.db` | Path to the SQLite file |
| `NTECH_DSN` | — | PostgreSQL connection string |
| `NTECH_SECRET` | — | Session signing key (min. 32 bytes); auto-generated if missing |
| `NTECH_TOTP_KEY` | — | AES-256 key for TOTP secret encryption; auto-generated if missing |
| `BE_ENABLED` | `true` | Enables the built-in card-emulator (fiscalization signing device) |
@@ -378,9 +377,11 @@ ntech/
│ └── ntech/ # entry point
├── internal/
│ ├── auth/ # login, sessions, fail2ban log
│ ├── be/ # built-in card-emulator (fiscalization signing device)
│ ├── config/ # settings, setup wizard
│ ├── db/ # database layer
│ │ └── sqlite/ # SQLite implementation
│ ├── fiskal/ # fiscalization (ESIR/L-PFR) client
│ ├── handler/ # HTTP handlers
│ ├── middleware/ # CSRF, security headers, authentication
│ └── model/ # shared data types
@@ -388,6 +389,7 @@ ntech/
│ ├── static/ # CSS, JavaScript, images, logos
│ └── templates/ # HTML templates
├── migrations/ # SQL migrations (001_desc.sql, 002_desc.sql, ...)
├── Fisk/ # Teron L-PFR mock server (Python) for fiscalization testing
├── logs/ # auth.log and other logs
├── backups/ # database backups
├── start.sh # interactive build and Docker push script
+7 -5
View File
@@ -86,6 +86,7 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
- Flash poruke — jednokratne povratne informacije nakon akcije
- Automatski backup SQLite baze — sa podešavanjem broja čuvanih kopija; vraćanje baze iz kopije (bezbedno, bez prekida rada)
- Grafikoni — mesečni prihod na izveštajima (Chart.js)
- KPO knjiga (knjiga prihoda i rashoda)
- Strukturisano logovanje — `log/slog` (JSON u produkciji, tekst u razvoju); zaseban auth log u fail2ban formatu
- Automatski testovi — jedinični i integracioni nad SQLite bazom (kripto, RBAC, tokovi prijave, validatori forme, izveštaji)
- **Demo mod** (`NTECH_ENV=demo`) — automatski kreiran demo korisnik, pre-popunjeni login, ograničen bekap, blokirana promena lozinke i 2FA
@@ -96,8 +97,8 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
### Planirano
- KPO knjiga i dvojno knjigovodstvo (opciono, kasnija faza)
- Podrška za PostgreSQL (za višekorisničko okruženje)
- Dvojno knjigovodstvo (opciono, kasnija faza)
- Podrška za PostgreSQL (za višekorisničko okruženje) — prazan `internal/db/postgres` paket postoji kao mesto za buduću implementaciju, ali `pgx` još nije zavisnost projekta, a `NTECH_DB`/`NTECH_DSN` aplikacija trenutno ne čita
- WebAuthn / Passkey prijava (šema baze je pripremljena)
- Obaveštenja (e-pošta / WhatsApp) — odloženo za kasniju fazu
- Skeniranje barkodova putem kamere — odloženo za kasniju fazu
@@ -114,7 +115,7 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
| [HTMX](https://htmx.org) | dinamički HTML preko HTTP-a |
| [Alpine.js](https://alpinejs.dev) | UI logika na strani klijenta |
| [SQLite](https://sqlite.org) + [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | glavna baza (čisti Go, bez CGO) |
| [PostgreSQL](https://www.postgresql.org) + [pgx/v5](https://github.com/jackc/pgx) | opciona baza za produkciju |
| [PostgreSQL](https://www.postgresql.org) + [pgx/v5](https://github.com/jackc/pgx) | planirana baza za produkciju (još nije implementirano) |
---
@@ -171,9 +172,7 @@ Fajl `ntech.env` se **ne commituje** u Git.
| ---------------- | ------------- | ------------------------------------------------------------------ |
| `NTECH_ENV` | `development` | Mod: `development`, `production` ili `demo` |
| `NTECH_PORT` | `8080` | HTTP port |
| `NTECH_DB` | `sqlite` | Tip baze: `sqlite` ili `postgres` |
| `NTECH_SQLITE` | `ntech.db` | Putanja do SQLite fajla |
| `NTECH_DSN` | — | PostgreSQL connection string |
| `NTECH_SECRET` | — | Ključ za potpisivanje sesija (min. 32 bajta); auto-generiše se |
| `NTECH_TOTP_KEY` | — | AES-256 ključ za šifrovanje TOTP tajni; auto-generiše se |
| `BE_ENABLED` | `true` | Uključuje ugrađeni kartica-emulator (uređaj za potpisivanje pri fiskalizaciji) |
@@ -378,9 +377,11 @@ ntech/
│ └── ntech/ # ulazna tačka programa
├── internal/
│ ├── auth/ # prijava, sesije, fail2ban log
│ ├── be/ # ugrađeni kartica-emulator (uređaj za potpisivanje pri fiskalizaciji)
│ ├── config/ # podešavanja, setup wizard
│ ├── db/ # sloj baze podataka
│ │ └── sqlite/ # SQLite implementacija
│ ├── fiskal/ # klijent za fiskalizaciju (ESIR/L-PFR)
│ ├── handler/ # HTTP handleri
│ ├── middleware/ # CSRF, bezbednost headeri, autentifikacija
│ └── model/ # zajednički tipovi podataka
@@ -388,6 +389,7 @@ ntech/
│ ├── static/ # CSS, JavaScript, slike, logotipi
│ └── templates/ # HTML šabloni
├── migrations/ # SQL migracije (001_opis.sql, 002_opis.sql, ...)
├── Fisk/ # Teron L-PFR mock server (Python) za testiranje fiskalizacije
├── logs/ # auth.log i ostali logovi
├── backups/ # rezervne kopije baze
├── start.sh # interaktivna skripta za build i Docker push