include api.env
MIGRATION_PATH = ./cmd/db/migrations

export

test:
	@go test -v -cover -short ./...

mock:
	@mockgen --package mockdb --destination internal/db/mock/store.go $(PKG_NAME)/internal/db/sqlc Store
	@mockgen --package mockwk --destination internal/worker/mock/distributor.go $(PKG_NAME)/internal/worker TaskDistributor
	@mockgen --package mocksvc --destination internal/service/mock/service.go $(PKG_NAME)/internal/service UserService,AuthService

up:
	@docker compose --env-file api.env up -d
down:
	@docker compose --env-file api.env down
reload:
	@docker compose --env-file api.env down && docker rmi $(PROJ_NAME)-api && docker compose --env-file api.env up -d
server:
	@air -c air.toml

migration:
	@migrate create -seq -ext sql -dir $(MIGRATION_PATH) $(filter-out $@,$(MAKECMDGOALS))

migrate-up:
	@migrate -path=$(MIGRATION_PATH) -database=$(DB_ADDR) -verbose up

migrate-down:
	@migrate -path=$(MIGRATION_PATH) -database=$(DB_ADDR) -verbose down $(filter-out $@,$(MAKECMDGOALS))

sqlc:
	@sqlc generate

dbdocs:
	@dbdocs build -o ./docs/dbdocs ./docs/db.dbml
	@echo "Database documentation generated at ./docs/dbdocs"

dbschema:
	@dbml2sql --postgres -o docs/schema.sql docs/db.dbml

proto:
	@rm -f pb/*.go
	@rm -f docs/swagger/*.swagger.json
	@protoc --proto_path=proto --go_out=pb --go_opt=paths=source_relative \
    --go-grpc_out=pb --go-grpc_opt=paths=source_relative \
    --grpc-gateway_out=pb --grpc-gateway_opt=paths=source_relative \
    --openapiv2_out=docs/swagger --openapiv2_opt=allow_merge=true,merge_file_name=$(PROJ_NAME)\
    proto/*.proto
	@statik -src=./docs/swagger -dest=./docs

evans:
	@evans --host localhost --port 9090 -r repl

lint:
	@golangci-lint run ./...

.PHONY: test mock up down reload server migration migrate-up migrate-down sqlc dbdocs dbschema proto evans lint
