GO_CTL_NAME=goctl GO_ZERO_STYLE=go_zero GO ?= go GOFMT ?= gofmt "-s" GOFILES := $(shell find . -name "*.go") LDFLAGS := -s -w VERSION="v1.0.0" DOCKER_REPO="refactor-service" # 默認目標 .DEFAULT_GOAL := help # 顏色定義 GREEN := \033[0;32m YELLOW := \033[0;33m NC := \033[0m # No Color help: ## 顯示幫助訊息 @echo "$(GREEN)可用命令:$(NC)" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(NC) %s\n", $$1, $$2}' .PHONY: test test: ## 進行測試 go test -v --cover ./... .PHONY: gen-api gen-api: ## 產生 api goctl api go -api ./generate/api/gateway.api -dir . -style go_zero .PHONY: gen-doc gen-doc: ## 生成 Swagger 文檔 # go-doc openapi --api ./generate/api/gateway.api --filename gateway.json --host dev-api.truheart.com.tw --basepath /api/v1 go-doc -a generate/api/gateway.api -d ./ -f gateway -s openapi3.0 .PHONY: mock-gen mock-gen: ## 建立 mock 資料 mockgen -source=./pkg/member/domain/repository/account.go -destination=./pkg/member/mock/repository/account.go -package=mock mockgen -source=./pkg/member/domain/repository/account_uid.go -destination=./pkg/member/mock/repository/account_uid.go -package=mock mockgen -source=./pkg/member/domain/repository/auto_id.go -destination=./pkg/member/mock/repository/auto_id.go -package=mock mockgen -source=./pkg/member/domain/repository/user.go -destination=./pkg/member/mock/repository/user.go -package=mock mockgen -source=./pkg/member/domain/repository/verify_code.go -destination=./pkg/member/mock/repository/verify_code.go -package=mock mockgen -source=./pkg/member/domain/usecase/generate_uid.go -destination=./pkg/member/mock/usecase/generate_uid.go -package=mock mockgen -source=./pkg/permission/domain/repository/permission.go -destination=./pkg/permission/mock/repository/permission.go -package=mock mockgen -source=./pkg/permission/domain/repository/role.go -destination=./pkg/permission/mock/repository/role.go -package=mock mockgen -source=./pkg/permission/domain/repository/role_permission.go -destination=./pkg/permission/mock/repository/role_permission.go -package=mock mockgen -source=./pkg/permission/domain/repository/user_role.go -destination=./pkg/permission/mock/repository/user_role.go -package=mock mockgen -source=./pkg/permission/domain/repository/token.go -destination=./pkg/permission/mock/repository/token.go -package=mock mockgen -source=./pkg/permission/domain/usecase/permission.go -destination=./pkg/permission/mock/usecase/permission.go -package=mock mockgen -source=./pkg/permission/domain/usecase/role.go -destination=./pkg/permission/mock/usecase/role.go -package=mock mockgen -source=./pkg/permission/domain/usecase/role_permission.go -destination=./pkg/permission/mock/usecase/role_permission.go -package=mock mockgen -source=./pkg/permission/domain/usecase/user_role.go -destination=./pkg/permission/mock/usecase/user_role.go -package=mock mockgen -source=./pkg/permission/domain/usecase/token.go -destination=./pkg/permission/mock/usecase/token.go -package=mock @echo "Generate mock files successfully" .PHONY: fmt fmt: ## 格式優化 $(GOFMT) -w $(GOFILES) goimports -w ./ .PHONY: run run: ## 運行專案 go run geteway.go .PHONY: clean clean: ## 清理編譯文件 rm -rf bin/ .PHONY: install install: ## 安裝依賴 go mod tidy go mod download # go install -tags 'mongodb' github.com/golang-migrate/migrate/v4/cmd/migrate@latest # go get -u github.com/golang-migrate/migrate/v4/database/mongodb # MongoDB Migration 環境變數(可覆寫) MONGO_HOST ?= 127.0.0.1:27017 MONGO_DB ?= digimon MONGO_USER ?= root MONGO_PASSWORD ?= example MONGO_AUTH_DB ?= admin .PHONY: migrate-up migrate-up: ## 執行 MongoDB migration (up) - 使用 mongosh + Docker @echo "=== 執行 MongoDB Migration (UP) ===" @echo "MongoDB: $(MONGO_HOST)/$(MONGO_DB)" docker-compose -f ./build/docker-compose-migrate.yml run --rm \ -e MONGO_HOST=$(MONGO_HOST) \ -e MONGO_DB=$(MONGO_DB) \ -e MONGO_USER=$(MONGO_USER) \ -e MONGO_PASSWORD=$(MONGO_PASSWORD) \ -e MONGO_AUTH_DB=$(MONGO_AUTH_DB) \ migrate .PHONY: migrate-down migrate-down: ## 執行 MongoDB migration (down) - 使用 mongosh + Docker @echo "=== 執行 MongoDB Migration (DOWN) ===" @echo "MongoDB: $(MONGO_HOST)/$(MONGO_DB)" docker-compose -f ./build/docker-compose-migrate.yml run --rm \ -e MONGO_HOST=$(MONGO_HOST) \ -e MONGO_DB=$(MONGO_DB) \ -e MONGO_USER=$(MONGO_USER) \ -e MONGO_PASSWORD=$(MONGO_PASSWORD) \ -e MONGO_AUTH_DB=$(MONGO_AUTH_DB) \ migrate sh -c " \ if [ -z \"$$MONGO_USER\" ] || [ \"$$MONGO_USER\" = \"\" ]; then \ MONGO_URI=\"mongodb://$$MONGO_HOST/$$MONGO_DB\"; \ else \ MONGO_URI=\"mongodb://$$MONGO_USER:$$MONGO_PASSWORD@$$MONGO_HOST/$$MONGO_DB?authSource=$$MONGO_AUTH_DB\"; \ fi && \ echo \"執行 MongoDB migration (DOWN)...\" && \ echo \"連接: $$MONGO_URI\" && \ for file in \$$(ls -1 /migrations/*.down.txt 2>/dev/null | sort -r); do \ echo \"執行: \$$(basename \$$file)\" && \ mongosh \"$$MONGO_URI\" --file \"\$$file\" || exit 1; \ done && \ echo \"✅ Migration DOWN 完成\" \ " .PHONY: migrate-version migrate-version: ## 查看已執行的 migration 文件列表 @echo "=== 已執行的 Migration 文件 ===" @echo "注意:使用 mongosh 執行,無法追蹤版本" @echo "Migration 文件列表:" @ls -1 generate/database/mongo/*.up.txt | xargs -n1 basename