GO ?= go AIR ?= air SWAG ?= swag GOOSE ?= goose GOOSE_DIR ?= migrations/goose MIGRATE_APPLY_FROM ?= 20260414 .PHONY: air swag test worker file-worker migrate-status migrate-up migrate-up-to migrate-apply migrate-reapply hospital-apply air: @command -v $(AIR) >/dev/null 2>&1 || { \ echo "air not found. Install with: go install github.com/air-verse/air@latest"; \ exit 1; \ } $(AIR) -c .air.toml swag: @command -v $(SWAG) >/dev/null 2>&1 || { \ echo "swag not found. Install with: go install github.com/swaggo/swag/cmd/swag@latest"; \ exit 1; \ } GOCACHE=$${GOCACHE:-/tmp/go-cache} $(SWAG) init -g cmd/api/main.go -o docs --parseDependency --parseInternal test: $(GO) test ./... -coverprofile=coverage.out $(GO) tool cover -func=coverage.out worker: WORKER_JOB=email $(GO) run ./cmd/worker file-worker: WORKER_JOB=file_processing $(GO) run ./cmd/worker migrate-status: @command -v $(GOOSE) >/dev/null 2>&1 || { \ echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \ exit 1; \ } @MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \ MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \ test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \ $(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" status migrate-up: @command -v $(GOOSE) >/dev/null 2>&1 || { \ echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \ exit 1; \ } @MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \ MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \ test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \ $(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" up migrate-up-to: @command -v $(GOOSE) >/dev/null 2>&1 || { \ echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \ exit 1; \ } @MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \ MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \ test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \ test -n "$(v)" || { echo "usage: make migrate-up-to v=20260414"; exit 1; }; \ $(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" up-to $(v) migrate-apply: @command -v $(GOOSE) >/dev/null 2>&1 || { \ echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \ exit 1; \ } @MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \ MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \ test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \ MODULES="$(modules)"; \ test -n "$$MODULES" || { \ echo "usage: make migrate-apply modules=opc,kassa"; \ echo "hint: use 'make migrate-reapply [from=YYYYMMDD]' for full down-to/up behavior"; \ exit 1; \ }; \ TMP_DIR="$$(mktemp -d)"; \ echo "Applying selected import apply migrations for modules: $$MODULES"; \ for m in $$(echo "$$MODULES" | tr ',' ' '); do \ FOUND="$$(ls -1 $(GOOSE_DIR)/*_$${m}_import_apply.sql 2>/dev/null || true)"; \ if [ -z "$$FOUND" ]; then \ echo "No apply migration found for module '$$m' in $(GOOSE_DIR)"; \ rm -rf "$$TMP_DIR"; \ exit 1; \ fi; \ for f in $$FOUND; do cp "$$f" "$$TMP_DIR"/; done; \ done; \ $(GOOSE) -dir "$$TMP_DIR" -no-versioning mysql "$$MYSQL_DSN_VAL" up; \ rm -rf "$$TMP_DIR" migrate-reapply: @command -v $(GOOSE) >/dev/null 2>&1 || { \ echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \ exit 1; \ } @MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \ MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \ test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \ FROM_VER="$(from)"; \ if [ -z "$$FROM_VER" ]; then FROM_VER="$(MIGRATE_APPLY_FROM)"; fi; \ echo "Re-applying migrations from version $$FROM_VER to latest"; \ $(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" down-to "$$FROM_VER"; \ $(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" up hospital-apply: migrate-apply