44 lines
1.3 KiB
Markdown
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
|