# Команды разработки — одинаковые на любой машине.
# На Windows без make те же пункты продублированы в README как голые go-команды.
# Проверить, что цели синхронны с README, можно глазами: список ниже — канон.

.PHONY: run build test race vet lint fmt swag migrate seed up down tidy

run: ## запустить сервер (собирает и поднимает cmd/api)
	go run ./cmd/api

build: ## собрать все пакеты
	go build ./...

test: ## тесты; без DATABASE_URL интеграционные скипаются — не обманывайтесь
	go test ./...

# race требует CGO и C-компилятор: в CI (ubuntu) они есть, на Windows
# без MinGW команда упадёт с «-race requires cgo» — там гонки ищет CI.
race: ## тесты с детектором гонок (то же, что делает CI)
	go test -race ./...

vet: ## быстрая статическая проверка
	go vet ./...

lint: ## полный линтер (конфиг — .golangci.yml)
	golangci-lint run ./...

fmt: ## отформатировать код
	gofmt -w .

swag: ## перегенерировать Swagger из аннотаций (docs/)
	swag init -g cmd/api/main.go -o docs --parseInternal

migrate: ## накатить миграции без запуска API (нужно и CI, и перед тестами)
	go run ./cmd/migrate

seed: ## демо-данные для ручной проверки (ТОЛЬКО локальная/демо-база)
	go run ./cmd/seed --yes

up: ## поднять локальную БД в docker (порт 5433, см. compose.yaml)
	docker compose up -d --wait

down: ## остановить локальную БД; данные остаются в томе pgdata
	docker compose down

tidy: ## привести go.mod/go.sum в порядок
	go mod tidy
