.PHONY: help build run migrate-up migrate-down migrate-create lint test test-integration 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 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 ./... 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/... # Default DB URL for local development DB_URL ?= postgres://postgres:password@localhost:5432/b2b_search?sslmode=disable