Files
backend/README.md
Andriy Oblivantsev c2aa716ed8
CI / test (push) Successful in 5s
Switch local API port to 8122 and keep DB internal.
Update runtime defaults, compose mappings, frontend defaults, and developer docs to use port 8122 while keeping PostGIS reachable only via the internal compose network.

Made-with: Cursor
2026-03-01 12:12:44 +00:00

100 lines
2.2 KiB
Markdown

# Momswap Geo Backend
Go backend service for user-owned GeoJSON feature collections with Ed25519 authentication and invitation-based onboarding.
## What is implemented
- Ed25519 challenge-response auth (`/v1/auth/challenge`, `/v1/auth/login`)
- Hybrid invitation onboarding (signed invite payload + inviter lineage)
- User registration with ownership proof (`/v1/auth/register`)
- Per-user collections and Point feature CRUD endpoints
- Static no-build frontend (`web/`) using Vue + Vuetify from CDN
- Reusable TypeScript API client (`libs/geo-api-client`) using `@noble/ed25519`
- Bun tests for the TS client and Go tests for API flows
- Gitea CI workflow running Go and Bun test suites
## Quick start
```bash
go test ./...
go run ./cmd/api
```
Primary deployed base URL: `https://momswap.produktor.duckdns.org/`.
Local default (for development): `http://localhost:8122`.
Optional environment variables:
- `ADDR` (default `:8122`)
- `ADMIN_PUBLIC_KEY` (bootstrap initial inviter/admin user)
## Docker Compose
Build and run the backend service:
```bash
COMPOSE_BAKE=true docker compose up --build -d
```
This starts:
- `db` (`postgis/postgis`) on `5432`
- `api` on `8122`, wired with `DATABASE_URL` to the `db` service
Stop the service:
```bash
docker compose down
```
For local development with auto-rebuild on file changes:
```bash
COMPOSE_BAKE=true docker compose --profile dev up --watch
```
Notes:
- `api` service uses the production `runtime` image target.
- `api-dev` profile uses the `dev` image target and Docker Compose watch.
- Build cache is persisted at `.docker/buildx-cache` via `cache_from`/`cache_to`.
- DB defaults can be overridden via `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD`.
## Frontend
Frontend is served by the Go backend at runtime.
Example:
```bash
go run ./cmd/api
```
Then visit:
- Production: `https://momswap.produktor.duckdns.org/web/`
- Local: `http://localhost:8122/web/`
## API client library
Path: `libs/geo-api-client`
```bash
cd libs/geo-api-client
bun install
bun test
bun run build
```
Frontend TypeScript integration guide:
- `docs/typescript-frontend-integration.md`
## CI
Workflow: `.gitea/workflows/ci.yml`
- `go test ./...`
- `bun test` in `libs/geo-api-client`