.PHONY: help build run migrate-up migrate-down migrate-create lint test test-integration test-coverage proto clean help: @echo "Available commands:" @echo " make build - Build the service" @echo " make run - Run the service" @echo " make migrate-up - Apply migrations" @echo " make migrate-down - Rollback migrations" @echo " make migrate-create - Create new migration (usage: make migrate-create name=migration_name)" @echo " make lint - Run golangci-lint" @echo " make proto - Generate proto files" @echo " make generate-mock - Generate mocks for all interfaces (minimock)" @echo " make test - Run unit tests" @echo " make test-integration - Run integration tests with testcontainers" @echo " make test-coverage - Run tests with coverage report" @echo " make clean - Clean build artifacts" build: @echo "Building server..." @mkdir -p bin go build -o bin/server cmd/server/main.go @echo "Build complete: bin/server" run: @echo "Running server..." go run cmd/server/main.go migrate-up: @echo "Applying migrations..." goose -dir migrations postgres "$(DB_URL)" up migrate-down: @echo "Rolling back migrations..." goose -dir migrations postgres "$(DB_URL)" down migrate-create: @echo "Creating migration: $(name)" goose -dir migrations create $(name) sql lint: @echo "Running linter..." golangci-lint run ./... #Протник генерируем как показано в smart-search-gateway! Здесь это оставлено на всякий случай #proto: # @echo "Generating proto files..." # @mkdir -p pkg/pb # @cd api/proto && protoc --go_out=../../pkg/pb --go_opt=paths=source_relative \ # --go-grpc_out=../../pkg/pb --go-grpc_opt=paths=source_relative \ # auth/auth.proto \ # user/user.proto \ # invite/invite.proto \ # request/request.proto \ # supplier/supplier.proto # @echo "Proto generation complete" # #clean: # @echo "Cleaning build artifacts..." # rm -rf bin/ # rm -rf pkg/pb/ # @echo "Clean complete" .PHONY: generate-mock generate-mock: @echo "Generating mocks for repository interfaces..." @mkdir -p internal/mocks @cd internal/repository && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i UserRepository -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i SessionRepository -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i InviteRepository -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i RequestRepository -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i SupplierRepository -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i TokenUsageRepository -o ../mocks -p mocks -s "_mock.go" @echo "Generating mocks for service interfaces..." @cd internal/service && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i AuthService -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i UserService -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i InviteService -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i RequestService -o ../mocks -p mocks -s "_mock.go" && \ go run github.com/gojuno/minimock/v3/cmd/minimock@latest -i SupplierService -o ../mocks -p mocks -s "_mock.go" @echo "Mocks generated in internal/mocks/" test: @echo "Running unit tests..." go test -v -short ./... test-integration: @echo "Running integration tests with testcontainers..." @echo "This may take several minutes..." go test -v -timeout=10m ./tests/... test-coverage: @echo "Running tests with coverage..." @mkdir -p coverage go test -timeout=10m -coverprofile=coverage/coverage.out -covermode=atomic ./... go tool cover -func=coverage/coverage.out go tool cover -html=coverage/coverage.out -o coverage/coverage.html @echo "Coverage report: coverage/coverage.html" # Default DB URL for local development DB_URL ?= postgres://postgres:password@localhost:5432/b2b_search?sslmode=disable