95 lines
4.3 KiB
Markdown
95 lines
4.3 KiB
Markdown
# Chirpy
|
|
|
|
A Twitter-style microblogging API built in Go as part of the [boot.dev](https://boot.dev) back-end course.
|
|
|
|
## Features
|
|
|
|
- Create, list, sort, and delete chirps (140-char limit, profanity-filtered)
|
|
- User registration and login with password hashing (argon2id)
|
|
- JWT access tokens and revocable refresh tokens
|
|
- Chirpy Red subscription upgrades via Polka webhooks
|
|
- Graceful shutdown and a lightweight admin metrics/reset surface
|
|
|
|
## Tech stack
|
|
|
|
- Go 1.26 (standard `net/http` with `http.ServeMux` routing)
|
|
- PostgreSQL
|
|
- [sqlc](https://sqlc.dev) for type-safe query generation
|
|
- [goose](https://pressly.github.io/goose/) for migrations
|
|
- [golang-jwt/jwt](https://github.com/golang-jwt/jwt) and [argon2id](https://github.com/alexedwards/argon2id)
|
|
|
|
## Getting started
|
|
|
|
### Prerequisites
|
|
|
|
- Go 1.26+
|
|
- PostgreSQL running locally
|
|
- `sqlc`, `goose`, and `make` (run `make install-tools` to install the first two)
|
|
|
|
### Setup
|
|
|
|
```sh
|
|
# 1. Configure environment variables
|
|
cp .env.example .env
|
|
|
|
# fill in DB_URL, PLATFORM, JWT_SECRET, and POLKA_KEY
|
|
|
|
# 2. Apply database migrations
|
|
make migrate-up
|
|
|
|
# 3. Run the server
|
|
make run
|
|
```
|
|
|
|
The server listens on `http://localhost:8080`.
|
|
|
|
### Development
|
|
|
|
Run `make help` to see the full list of targets. Highlights:
|
|
|
|
| Target | Description |
|
|
| ----------------------------------------------------------------------- | -------------------------------------- |
|
|
| `make run` | Build and run the server |
|
|
| `make dev` | Run with the race detector enabled |
|
|
| `make test` | Run all tests |
|
|
| `make test-race` | Run all tests with the race detector |
|
|
| `make check` | Run formatting, vet, and test checks |
|
|
| `make fmt` | Format all Go source files |
|
|
| `make lint` | Run golangci-lint (if installed) |
|
|
| `make build` | Compile the binary into `bin/` |
|
|
| `make generate` | Regenerate sqlc query code |
|
|
| `make migrate-up` / `migrate-down` / `migrate-status` / `migrate-reset` | Database migrations |
|
|
| `make install-tools` | Install goose, sqlc, and golangci-lint |
|
|
| `make clean` | Remove build artifacts |
|
|
|
|
## API reference
|
|
|
|
| Method | Path | Description |
|
|
| ------ | --------------------- | ----------------------------------------------- |
|
|
| POST | `/api/users` | Register a user |
|
|
| PUT | `/api/users` | Update email/password (Bearer access token) |
|
|
| POST | `/api/login` | Log in, receive access + refresh tokens |
|
|
| POST | `/api/refresh` | Exchange a refresh token for a new access token |
|
|
| POST | `/api/revoke` | Revoke a refresh token |
|
|
| GET | `/api/chirps` | List chirps (`?author_id=`, `?sort=asc\|desc`) |
|
|
| GET | `/api/chirps/{id}` | Get a single chirp |
|
|
| POST | `/api/chirps` | Create a chirp (Bearer access token) |
|
|
| DELETE | `/api/chirps/{id}` | Delete a chirp you authored |
|
|
| POST | `/api/polka/webhooks` | Polka webhook (`user.upgraded` -> Chirpy Red) |
|
|
| GET | `/api/healthz` | Health check |
|
|
| GET | `/app/` | Static index page |
|
|
| GET | `/admin/metrics` | File server hit counter (dev only) |
|
|
| POST | `/admin/reset` | Reset the database (dev only) |
|
|
|
|
## Regenerating sqlc code
|
|
|
|
After changing `sql/queries/`, run:
|
|
|
|
```sh
|
|
make generate
|
|
```
|
|
|
|
## License
|
|
|
|
MIT — see [LICENSE.md](LICENSE.md).
|