set dotenv-load

default:
    @just --list

# Start local dev infrastructure (Postgres + Valkey)
dev:
    docker compose -f deploy/docker-compose.yml up -d

# Stop local dev infrastructure
dev-down:
    docker compose -f deploy/docker-compose.yml down

# Run database migrations
migrate:
    go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
        -path migrations \
        -database "postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=${DB_SSLMODE}" \
        up

# Rollback last migration
migrate-down:
    go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
        -path migrations \
        -database "postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?sslmode=${DB_SSLMODE}" \
        down 1

# Seed sample market data
seed:
    go run ./cmd/seed

# Run the API server
run:
    go run ./cmd/api

# Run all tests
test:
    go test ./... -v -count=1

# Run tests with coverage
test-cover:
    go test ./... -v -count=1 -coverprofile=coverage.out
    go tool cover -html=coverage.out -o coverage.html

# Run linter
lint:
    golangci-lint run ./...

# Format code
fmt:
    gofmt -w .
    goimports -w .

# Build the API binary
build:
    go build -o api ./cmd/api

# Promote a user to admin by email
promote-admin email:
    go run ./cmd/admin promote {{email}}

# Clean build artifacts
clean:
    rm -f api coverage.out coverage.html
