Ispravke — bezbednost, CSS teme, handleri, sidebar, servis forma
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# NTech
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
Poslovna aplikacija za upravljanje servisom računara, magacinom delova i prodajom. Napravljena u Go-u, radi u brauzeru, ne zahteva internet vezu ni eksterne servise.
|
||||
@@ -23,22 +23,27 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
|
||||
|
||||
- Inicijalno podešavanje pri prvom pokretanju (setup wizard)
|
||||
- Sistem migracija baze podataka
|
||||
- Osnovna struktura baze: artikli, kategorije, klijenti, dobavljači, servisni nalozi, prodajni nalozi, podsetnici
|
||||
|
||||
### U razvoju
|
||||
|
||||
- Korisničko sučelje — sidebar navigacija, sistem tema, dashboard
|
||||
- Magacin — praćenje stanja delova, lokacija, količina
|
||||
- Servisni nalozi — prijem, dijagnostika, statusna traka, cene
|
||||
- Prodajni nalozi — stavke, obračun, evidencija kupaca
|
||||
- Klijenti i dobavljači — baza kontakata, istorija
|
||||
- Korisnički interfejs — sidebar navigacija, sistem tema (tamna/svetla), dashboard sa statistikama
|
||||
- Prijava korisnika — sesije na serveru, zaključavanje naloga
|
||||
- Dvofaktorska autentifikacija (TOTP) — aktivacija sa QR kodom, rezervni kodovi
|
||||
- Bruteforce zaštita — IP zaključavanje nakon 5 neuspelih pokušaja u 15 minuta
|
||||
- CSRF zaštita — double-submit cookie pattern, automatska injekcija tokena u sve forme
|
||||
- Bezbednosni HTTP headeri (CSP, X-Frame-Options, Referrer-Policy, nosniff...)
|
||||
- Evidencija pokušaja prijave — istorija po korisniku, IP, razlog, datum
|
||||
- Korisnici i uloge — admin panel, upravljanje korisnicima
|
||||
- Magacin — artikli, kategorije, filtriranje, kritični nivoi zaliha
|
||||
- Servisni nalozi — prijem, statusna traka, troškovi, priznanica
|
||||
- Prodajni nalozi — stavke, obračun, priznanica sa podacima firme i klijenta
|
||||
- Nabavke — evidencija nabavki od dobavljača
|
||||
- Klijenti i dobavljači — baza kontakata
|
||||
- Podsetnici — evidencija sa rokom
|
||||
- Izveštaji — pregled prihoda, stanje magacina
|
||||
- Podešavanja — naziv, adresa, PIB, logo firme; promena teme
|
||||
|
||||
### Planirano
|
||||
|
||||
- Prijava korisnika — sesije, zaključavanje naloga
|
||||
- Dvofaktorska autentifikacija (TOTP)
|
||||
- Izveštaji — prodaja, stanje magacina, prihodi
|
||||
- Podrška za PostgreSQL (za višekorisničko okruženje)
|
||||
- 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
|
||||
|
||||
@@ -46,16 +51,14 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
|
||||
|
||||
## Tehnologije
|
||||
|
||||
| Tehnologija | Uloga |
|
||||
| ------------------------------------------------------------------------------------ | -------------------------------- |
|
||||
| [Go](https://go.dev) | backend jezik |
|
||||
| [chi](https://github.com/go-chi/chi) | HTTP ruter |
|
||||
| [html/template](https://pkg.go.dev/html/template) | serverski šabloni |
|
||||
| [HTMX](https://htmx.org) | interaktivnost bez build procesa |
|
||||
| [TailwindCSS](https://tailwindcss.com) | stilizovanje |
|
||||
| [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 |
|
||||
| Tehnologija | Uloga |
|
||||
| ------------------------------------------------------------------------------------ | ------------------------------- |
|
||||
| [Go](https://go.dev) | backend jezik |
|
||||
| [chi](https://github.com/go-chi/chi) | HTTP ruter |
|
||||
| [html/template](https://pkg.go.dev/html/template) | serverski šabloni |
|
||||
| [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 |
|
||||
|
||||
---
|
||||
|
||||
@@ -73,22 +76,29 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b
|
||||
git clone <url-repozitorijuma>
|
||||
cd GoNtech
|
||||
|
||||
# 2. Kopiranje i popunjavanje .env fajla
|
||||
cp .env.example .env
|
||||
# Otvori .env i postavi vrednosti (videti tabelu ispod)
|
||||
# 2. Kopiranje konfiguracionog fajla
|
||||
cp ntech.env.example ntech.env
|
||||
# Otvori ntech.env i postavi vrednosti (videti tabelu ispod)
|
||||
|
||||
# 3. Pokretanje u razvojnom okruženju
|
||||
# 3. Učitavanje promenljivih i pokretanje u razvojnom okruženju
|
||||
export $(grep -v '^#' ntech.env | xargs)
|
||||
go run ./cmd/ntech
|
||||
```
|
||||
|
||||
Program se otvara na `http://localhost:8080`.
|
||||
Program se otvara na `http://localhost:8080` (ili na portu definisanom u `ntech.env`).
|
||||
|
||||
Pri prvom pokretanju automatski se pokreće setup wizard.
|
||||
|
||||
### Produkcioni build
|
||||
|
||||
```bash
|
||||
CGO_ENABLED=0 go build -o ntech ./cmd/ntech
|
||||
# Pomoću build.sh skripte (prima opcioni argument verzije)
|
||||
./build.sh 1.0.0
|
||||
|
||||
# Ili ručno
|
||||
CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build \
|
||||
-ldflags "-X main.Verzija=1.0.0 -s -w" \
|
||||
-o ntech ./cmd/ntech
|
||||
./ntech
|
||||
```
|
||||
|
||||
@@ -98,7 +108,7 @@ Rezultat je jedan statički binarni fajl bez zavisnosti.
|
||||
|
||||
## Promenljive okruženja
|
||||
|
||||
Kopirati `.env.example` u `.env` i popuniti vrednosti. Fajl `.env` se **ne commituje** u Git.
|
||||
Kopirati `ntech.env.example` u `ntech.env` i popuniti vrednosti. Fajl `ntech.env` se **ne commituje** u Git.
|
||||
|
||||
| Promenljiva | Podrazumevano | Opis |
|
||||
| -------------- | ------------- | -------------------------------------------- |
|
||||
@@ -118,19 +128,21 @@ ntech/
|
||||
├── cmd/
|
||||
│ └── ntech/ # ulazna tačka programa
|
||||
├── internal/
|
||||
│ ├── auth/ # prijava, sesije, 2FA
|
||||
│ ├── auth/ # prijava, sesije, fail2ban log
|
||||
│ ├── config/ # podešavanja, setup wizard
|
||||
│ ├── db/ # sloj baze podataka
|
||||
│ │ ├── sqlite/ # SQLite implementacija
|
||||
│ │ └── postgres/ # PostgreSQL implementacija
|
||||
│ │ └── sqlite/ # SQLite implementacija
|
||||
│ ├── handler/ # HTTP handleri
|
||||
│ ├── middleware/ # autentifikacija, logovanje, ograničavanje zahteva
|
||||
│ ├── middleware/ # CSRF, bezbednost headeri, autentifikacija
|
||||
│ └── model/ # zajednički tipovi podataka
|
||||
├── web/
|
||||
│ ├── static/ # CSS, JavaScript, slike
|
||||
│ ├── static/ # CSS, JavaScript, slike, logotipi
|
||||
│ └── templates/ # HTML šabloni
|
||||
├── migrations/ # SQL migracije (001_opis.sql, 002_opis.sql, ...)
|
||||
├── .env.example # primer konfiguracije
|
||||
├── logs/ # auth.log i ostali logovi
|
||||
├── backups/ # rezervne kopije baze
|
||||
├── build.sh # skripta za produkcioni build
|
||||
├── ntech.env # lokalna konfiguracija (ne commituje se)
|
||||
├── go.mod
|
||||
└── go.sum
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user