From 9a830c3e812e39033441ec821397cd1c449c1d2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Fri, 31 Jul 2026 11:19:38 +0200 Subject: [PATCH] =?UTF-8?q?Readme:=20uskla=C4=91en=20sa=20stanjem=20koda?= =?UTF-8?q?=20=E2=80=94=20KPO=20knjiga=20je=20implementirana,=20PostgreSQL?= =?UTF-8?q?=20ozna=C4=8Den=20kao=20neimplementiran,=20dopunjeno=20stablo?= =?UTF-8?q?=20strukture=20(be/,=20fiskal/,=20Fisk/)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 12 +++++++----- Readme_sr.md | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Readme.md b/Readme.md index 6c05f83..72f3b91 100644 --- a/Readme.md +++ b/Readme.md @@ -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 diff --git a/Readme_sr.md b/Readme_sr.md index 17b98bc..36eaac9 100644 --- a/Readme_sr.md +++ b/Readme_sr.md @@ -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