.PHONY: install build test test-unit test-integration test-e2e test-cov test-docker-all clean docker-up docker-down lint format

# ============================================
# 基础命令
# ============================================

install:
	npm install

build:
	npm run build

lint:
	npm run lint

format:
	npm run format

clean:
	rm -rf dist coverage node_modules

# ============================================
# 测试命令
# ============================================

# 单元测试 - 测试领域逻辑和值对象
test-unit:
	npm test -- --testPathPatterns='src/.*\.spec\.ts$$' --verbose

# 集成测试 - 测试服务层和仓储
test-integration:
	npm test -- --testPathPatterns='test/integration/.*\.spec\.ts$$' --verbose

# 端到端测试 - 测试完整API流程
test-e2e:
	npm run test:e2e -- --verbose

# 覆盖率测试
test-cov:
	npm run test:cov

# 运行所有测试
test-all: test-unit test-integration test-e2e

# ============================================
# Docker 测试命令
# ============================================

# 启动测试依赖服务
docker-up:
	docker-compose -f docker-compose.test.yml up -d

# 关闭测试依赖服务
docker-down:
	docker-compose -f docker-compose.test.yml down -v

# 在Docker中运行所有测试
test-docker-all:
	docker-compose -f docker-compose.test.yml up -d
	sleep 5
	npm test -- --testPathPatterns='src/.*\.spec\.ts$$' --verbose || true
	npm test -- --testPathPatterns='test/integration/.*\.spec\.ts$$' --verbose || true
	npm run test:e2e -- --verbose || true
	docker-compose -f docker-compose.test.yml down -v

# 构建测试Docker镜像
docker-build-test:
	docker build -t reward-service-test:latest -f Dockerfile.test .

# 在Docker容器中运行测试
docker-run-test:
	docker run --rm \
		--network reward-test-network \
		-e DATABASE_URL="postgresql://test:test@postgres:5432/reward_test" \
		-e REDIS_HOST=redis \
		-e KAFKA_BROKERS=kafka:9092 \
		reward-service-test:latest

# ============================================
# 数据库命令
# ============================================

db-migrate:
	npx prisma migrate dev

db-reset:
	npx prisma migrate reset --force

db-seed:
	npx prisma db seed

db-studio:
	npx prisma studio
