watch-party/backend/README.md

44 lines
1.3 KiB
Markdown

# Backend (Go + Gin)
REST API that serves the schedule/time endpoints and current episode control. Built in Go, containerized with a multi-stage Dockerfile.
## Prerequisites
- Go 1.22+
- PostgreSQL reachable (uses env-driven DSN pieces)
- `golang-migrate` not required locally (migrations shipped in repo)
## Env
The server builds its DSN from:
- `PGHOST`, `POSTGRES_PORT`, `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB`, `PGSSLMODE`
- `ADDR` (listen address, default `:8082`)
- `GIN_MODE` (e.g., `release`)
## Commands
```bash
# Run locally (expects Postgres per env)
go run ./cmd/server
# Run migrations
go run ./cmd/migrate
# Tests
go test ./...
# Swagger create docs
swag init -g cmd/server/main.go -o ./docs
```
## Docker build (used by compose)
```bash
docker build -t watchparty-backend .
```
Compose uses the same image for `api` and the one-off `migrate` job.
## Endpoints (key)
- `GET /api/v1/time` — server time for client clock sync
- `GET /api/v1/current` — current schedule item
- `POST /api/v1/current` — set current episode (expects `{ id, start_time? }`)
- `GET /api/v1/shows` — list of episodes
- `POST /api/v1/shows` — create a new episode (expects `{ ep_num, ep_title, season_name, start_time, playback_length }`)
- `GET /healthz` — health check