# Simple Todo API (Monolith)

This project is a single backend service built with Gin.
The `iam/` directory is kept as a separate scaffold module and is not part of the monolith build.

## Run

```bash
go run ./cmd/server
```

The server listens on `:8080`.

## Frontend

```bash
cd vue
npm install
npm run dev
```

The Vue app calls `http://localhost:8080/api/v1` by default.

## Quick Demo

```bash
curl http://localhost:8080/api/health

curl -X POST http://localhost:8080/api/v1/auth/register \
  -H 'Content-Type: application/json' \
  -d '{"email":"demo@example.com","password":"secret123"}'

curl -X POST http://localhost:8080/api/v1/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"email":"demo@example.com","password":"secret123"}'

curl -X POST http://localhost:8080/api/v1/tasks \
  -H 'Authorization: Bearer demo' \
  -H 'Content-Type: application/json' \
  -d '{"title":"Learn Gin","priority":1,"tags":["demo"]}'

curl http://localhost:8080/api/v1/tasks \
  -H 'Authorization: Bearer demo'
```

## Notes
- Tasks and users are stored in PostgreSQL.
- Auth uses HMAC-signed bearer tokens with TTL (default 24h).
- Redis token cache is optional (`REDIS_ADDR` not set means disabled).
- Kafka task event emit is optional (`KAFKA_BROKERS` not set means disabled).
