From 81245535b34e75b4bd59351e7bf8984b114e777a Mon Sep 17 00:00:00 2001 From: fabio Date: Sun, 22 Feb 2026 18:01:37 +0100 Subject: [PATCH] prompt 10 --- .env.example | 1 + Makefile | 19 +++++++ README.md | 112 ++++++++++++++++++++----------------- codex-prompt/prompt-10.txt | 20 +++++++ docker-compose.yml | 23 ++++++++ internal/config/config.go | 12 +++- 6 files changed, 134 insertions(+), 53 deletions(-) create mode 100644 Makefile create mode 100644 codex-prompt/prompt-10.txt create mode 100644 docker-compose.yml diff --git a/.env.example b/.env.example index bcf47e8..258532a 100644 --- a/.env.example +++ b/.env.example @@ -9,6 +9,7 @@ APP_BUILD_HASH=dev DB_DRIVER=sqlite DB_SQLITE_PATH=data/app.sqlite3 DB_POSTGRES_DSN= +DB_PG_DSN= # CORS (comma-separated) CORS_ORIGINS=http://localhost:3000 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7ca3424 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ +.PHONY: dev ui-build ui-dev test db-reset fmt + +dev: + go run ./cmd/server + +ui-build: + cd ui-kit && npm i && npm run build + +ui-dev: + cd ui-kit && npm i && npm run dev + +test: + go test ./... + +db-reset: + rm -f ./data/app.db ./data/app.sqlite3 + +fmt: + gofmt -w $$(find ./cmd ./internal -type f -name '*.go') diff --git a/README.md b/README.md index d850813..66e3906 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,72 @@ # GoFiber MVC Boilerplate -Boilerplate riusabile per: +Boilerplate GoFiber MVC + HTMX + Svelte Custom Elements + GORM, con auth server-rendered, area private/admin e mail sink in sviluppo. -- GoFiber (MVC) -- HTMX -- Svelte Custom Elements (UI kit) -- GORM -- SQLite/Postgres -- Auth + ruolo `admin` -- Email sink -- CORS -- Template directory `public` / `private` / `admin` - -In ambiente `develop`, le email vengono salvate in `./data/emails` (sink locale). - -## UI Kit (Vite + Svelte CE) - -Comandi: +## Quickstart SQLite ```bash -cd ui-kit -npm install -npm run dev -npm run build +cp .env.example .env +make dev ``` -La build scrive direttamente in `web/static/ui`: +Default SQLite path: `./data/app.sqlite3`. + +Comandi utili: + +```bash +make test +make fmt +make db-reset +``` + +## Quickstart Postgres (Docker Compose) + +```bash +docker compose up -d +cp .env.example .env +``` + +Configura `.env` così: + +```env +DB_DRIVER=postgres +DB_PG_DSN=postgres://trustcontact:trustcontact@localhost:5432/trustcontact?sslmode=disable +``` + +`DB_POSTGRES_DSN` è comunque supportato. + +## UI Kit Build + +```bash +make ui-build +``` + +Per sviluppo UI: + +```bash +make ui-dev +``` + +Output build in `web/static/ui`: - `ui.esm.js` - `ui.css` -## Struttura iniziale +## Template Directories -```text -. -├── cmd/ -│ └── server/ -├── internal/ -│ ├── app/ -│ ├── auth/ -│ ├── config/ -│ ├── controllers/ -│ ├── db/ -│ ├── http/ -│ ├── mailer/ -│ ├── middleware/ -│ ├── models/ -│ ├── repo/ -│ └── services/ -├── ui-kit/ -├── web/ -│ ├── emails/ -│ │ └── templates/ -│ ├── static/ -│ │ ├── css/ -│ │ ├── ui/ -│ │ └── vendor/ -│ └── templates/ -│ ├── admin/ -│ ├── private/ -│ └── public/ -└── data/ # solo sviluppo locale -``` +- Public: `web/templates/public` +- Private: `web/templates/private` +- Admin: `web/templates/admin` + +## Email in Develop + +In `develop`, le email vengono salvate in `./data/emails`. + +## Make Targets + +- `make dev` -> `go run ./cmd/server` +- `make ui-build` -> install + build ui-kit +- `make ui-dev` -> watch UI con Vite +- `make test` -> `go test ./...` +- `make db-reset` -> reset DB sqlite locale (`./data/app.db` / `./data/app.sqlite3`) +- `make fmt` -> `gofmt` su `cmd/` e `internal/` diff --git a/codex-prompt/prompt-10.txt b/codex-prompt/prompt-10.txt new file mode 100644 index 0000000..6a183b6 --- /dev/null +++ b/codex-prompt/prompt-10.txt @@ -0,0 +1,20 @@ +Aggiungi DX boilerplate. + +- Makefile: + - make dev (go run ./cmd/server) + - make ui-build (cd ui-kit && npm i && npm run build) + - make ui-dev (watch) + - make test (go test ./...) + - make db-reset (solo sqlite: rimuovi ./data/app.db) + - make fmt (gofmt) + +- docker-compose.yml: + - postgres service (porta 5432) + - env compatibile con DB_PG_DSN + +- README.md: + - Quickstart sqlite + - Quickstart postgres (docker compose) + - dove stanno templates public/private/admin + - email in develop: ./data/emails + - build UI kit \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..bc3e9a4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: "3.9" + +services: + postgres: + image: postgres:16-alpine + container_name: trustcontact-postgres + restart: unless-stopped + ports: + - "5432:5432" + environment: + POSTGRES_USER: trustcontact + POSTGRES_PASSWORD: trustcontact + POSTGRES_DB: trustcontact + volumes: + - pgdata:/var/lib/postgresql/data + +volumes: + pgdata: + +# App env compatibility: +# DB_DRIVER=postgres +# DB_PG_DSN=postgres://trustcontact:trustcontact@localhost:5432/trustcontact?sslmode=disable +# (also supported: DB_POSTGRES_DSN) diff --git a/internal/config/config.go b/internal/config/config.go index 50da29e..6c813f3 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -70,7 +70,7 @@ func Load() (*Config, error) { BuildHash: envOrDefault("APP_BUILD_HASH", "dev"), DBDriver: envOrDefault("DB_DRIVER", DBDriverSQLite), SQLitePath: envOrDefault("DB_SQLITE_PATH", "data/app.sqlite3"), - PostgresDSN: strings.TrimSpace(os.Getenv("DB_POSTGRES_DSN")), + PostgresDSN: envFirstNonEmpty("DB_POSTGRES_DSN", "DB_PG_DSN"), CORS: CORSConfig{ Origins: envListOrDefault("CORS_ORIGINS", []string{"http://localhost:3000"}), Headers: envListOrDefault("CORS_HEADERS", []string{"Origin", "Content-Type", "Accept", "Authorization", "HX-Request"}), @@ -202,3 +202,13 @@ func envListOrDefault(key string, fallback []string) []string { return out } + +func envFirstNonEmpty(keys ...string) string { + for _, key := range keys { + value := strings.TrimSpace(os.Getenv(key)) + if value != "" { + return value + } + } + return "" +}