mirror of
https://github.com/Dvorinka/Bookra.git
synced 2026-06-03 20:13:00 +00:00
75 lines
2.5 KiB
Markdown
75 lines
2.5 KiB
Markdown
# Bookra Backend
|
|
|
|
Go + Gin API for Bookra, designed for Railway deployment with Neon Auth, Neon Postgres, and Paddle billing.
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
go run ./cmd/api
|
|
go build ./...
|
|
npm run db:generate
|
|
npm run db:migrate:status
|
|
npm run db:migrate:up
|
|
```
|
|
|
|
## Environment
|
|
|
|
- `BOOKRA_FRONTEND_URL` allowed browser origin
|
|
- `BOOKRA_DATABASE_URL` Neon pooled connection
|
|
- `BOOKRA_DATABASE_DIRECT_URL` Neon direct connection for migrations/admin tasks
|
|
- `BOOKRA_NEON_AUTH_URL` Neon Auth base URL used for JWKS verification
|
|
- `BOOKRA_AUTH_JWT_SECRET` optional local JWT fallback when not using Neon Auth
|
|
- `BOOKRA_JOB_RUNNER_KEY` shared secret for remote reminder dispatch calls
|
|
- `BOOKRA_EMAIL_FROM` sender identity for email reminders
|
|
- `BOOKRA_PADDLE_ENV` billing environment: `sandbox` or `live`
|
|
- `BOOKRA_PADDLE_API_KEY` Paddle API key
|
|
- `BOOKRA_PADDLE_WEBHOOK_SECRET` Paddle notification destination secret
|
|
- `BOOKRA_PADDLE_{STARTER,PRO,BUSINESS}_{CZK,USD}_PRICE_ID` Paddle price IDs
|
|
- `BOOKRA_UMAMI_API_URL` and `BOOKRA_UMAMI_API_KEY` optional analytics integration
|
|
|
|
## Notes
|
|
|
|
- Auth verification is isolated in `internal/auth`.
|
|
- OpenAPI lives in `openapi/bookra.openapi.yaml`.
|
|
- SQL migrations live in `migrations/`.
|
|
- `sqlc.yaml` is wired through `npm run db:generate`.
|
|
- Goose migrations are wired through `npm run db:migrate:*` and use the Neon direct connection URL.
|
|
- Reminder dispatch now runs through `POST /v1/internal/jobs/reminders/dispatch` with `X-Bookra-Job-Key`.
|
|
|
|
## Production Auth
|
|
|
|
Bookra production auth should use Neon Auth directly:
|
|
|
|
- frontend uses `VITE_NEON_AUTH_URL`
|
|
- backend verifies Neon JWTs with `BOOKRA_NEON_AUTH_URL`
|
|
- auth-service may stay deployed for standalone auth/admin workflows, but backend billing and app APIs do not depend on it
|
|
|
|
Trusted redirect domains in Neon Auth should include your frontend origin such as `https://bookra.eu`, plus local dev origins when needed.
|
|
|
|
## Paddle Setup
|
|
|
|
Get these values from Paddle dashboard:
|
|
|
|
- `BOOKRA_PADDLE_ENV`: `sandbox` for testing, `live` for production
|
|
- `BOOKRA_PADDLE_API_KEY`: Developer tools -> Authentication
|
|
- `BOOKRA_PADDLE_WEBHOOK_SECRET`: Notification settings -> destination secret key
|
|
- `BOOKRA_PADDLE_*_PRICE_ID`: Catalog -> each SaaS plan recurring price ID
|
|
|
|
Create one recurring price per plan/currency you support:
|
|
|
|
- `starter` `czk`
|
|
- `starter` `usd`
|
|
- `pro` `czk`
|
|
- `pro` `usd`
|
|
- `business` `czk`
|
|
- `business` `usd`
|
|
|
|
Set your webhook destination to:
|
|
|
|
```text
|
|
POST /v1/webhooks/paddle
|
|
POST /api/paddle_webhook
|
|
```
|
|
|
|
Use Paddle webhook simulator for event testing.
|