72 lines
No EOL
1.6 KiB
Markdown
72 lines
No EOL
1.6 KiB
Markdown
# Go Backend Template
|
|
|
|
A simple Go backend with authentication using native `net/http` and PostgreSQL.
|
|
|
|
## Features
|
|
|
|
- Session-based authentication
|
|
- Argon2 password hashing
|
|
- PostgreSQL database
|
|
- CORS support
|
|
- Request logging middleware
|
|
- Native Go HTTP server (no external frameworks)
|
|
|
|
## Requirements
|
|
|
|
- Go 1.24+
|
|
- PostgreSQL
|
|
- [goose](https://github.com/pressly/goose) for migrations, [air](https://github.com/air-verse/air) for live reload (optional):
|
|
```bash
|
|
go install github.com/pressly/goose/v3/cmd/goose@latest
|
|
go install github.com/air-verse/air@latest
|
|
```
|
|
|
|
## Setup
|
|
|
|
1. Copy environment variables:
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
2. Update `.env` with your database credentials (both the `DB_*` and `GOOSE_*` values).
|
|
|
|
3. Install dependencies:
|
|
```bash
|
|
go mod tidy
|
|
```
|
|
|
|
4. Run database migrations:
|
|
```bash
|
|
./scripts/goose.sh up
|
|
```
|
|
|
|
5. Run the server:
|
|
```bash
|
|
air # live reload, or:
|
|
go run ./cmd
|
|
```
|
|
|
|
## Migrations
|
|
|
|
`goose.sh` loads `.env` and passes through to goose (`up`, `down`, `status`, ...).
|
|
Create a new migration with:
|
|
|
|
```bash
|
|
./scripts/goose-create.sh add_widgets
|
|
```
|
|
|
|
## SQLC (optional)
|
|
|
|
Query codegen is configured in `sqlc.yaml` (engine `postgresql`, schema read from
|
|
`migrations/`). Add `.sql` files under `internal/database/queries/` and run
|
|
`sqlc generate` to emit typed accessors into `internal/database/sqlc/`.
|
|
|
|
## API Endpoints
|
|
|
|
- `POST /login` - User login
|
|
- `GET /user` - Get user info (requires session cookie)
|
|
|
|
## Database Schema
|
|
|
|
- `user_auth` - User accounts with Argon2 password hashes
|
|
- `user_session` - User sessions with SHA-256 hashed token secrets |