saveinmed/Makefile
caio-machado-dev bf85072bff chore: remove legacy services and restructure monorepo
- remove backend-old (Medusa), saveinmed-frontend (Next.js/Appwrite) and marketplace dirs
- split Go usecases by domain and move notifications/payments to infrastructure
- reorganize frontend pages into auth, dashboard and marketplace modules
- add Makefile, docker-compose.yml and architecture docs
2026-02-25 16:51:34 -03:00

318 lines
12 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# =============================================================================
# SaveInMed — Makefile
# =============================================================================
# Requisitos:
# - Go 1.23+ (backend)
# - pnpm (frontend e backoffice) → se preferir npm/yarn, ajuste PKG_MGR
# - Node 20+ (frontend e backoffice)
#
# Uso rápido:
# make dev → sobe backend + frontend em paralelo
# make dev-all → sobe backend + frontend + backoffice em paralelo
# make build → build de todos os serviços
# make test → testes de todos os serviços
# make help → lista todos os targets disponíveis
# =============================================================================
# ---------------------------------------------------------------------------
# Variáveis — ajuste aqui se mudar a estrutura de pastas ou gerenciador
# ---------------------------------------------------------------------------
BACKEND_DIR = backend
FRONTEND_DIR = frontend
BACKOFFICE_DIR = backoffice
# Gerenciador de pacotes Node. Troque por "npm" ou "yarn" se necessário.
PKG_MGR = pnpm
# Caminho do entrypoint Go. Ajuste se o main.go mudar de lugar.
GO_ENTRYPOINT = ./cmd/api
# Nome e destino do binário compilado do backend.
BINARY_NAME = api
BINARY_OUT = $(BACKEND_DIR)/bin/$(BINARY_NAME)
# Flags extras para go build (ex.: -ldflags "-s -w" para reduzir tamanho).
GO_BUILD_FLAGS =
# Flags extras para go test (ex.: -race -count=1).
GO_TEST_FLAGS =
# Cores para output (desative com: make COLOR=0 <target>)
COLOR ?= 1
ifeq ($(COLOR), 1)
CYAN = \033[36m
GREEN = \033[32m
YELLOW = \033[33m
RESET = \033[0m
else
CYAN = GREEN = YELLOW = RESET =
endif
# ---------------------------------------------------------------------------
# Targets PHONY — não correspondem a arquivos no disco
# ---------------------------------------------------------------------------
.PHONY: help \
dev dev-backend dev-frontend dev-backoffice dev-all \
build build-backend build-frontend build-backoffice \
test test-backend test-frontend test-backoffice \
lint lint-backend lint-frontend lint-backoffice \
migrate prisma-generate \
install install-frontend install-backoffice \
env clean stop
# ---------------------------------------------------------------------------
# help — lista os targets e suas descrições
# ---------------------------------------------------------------------------
help:
@echo ""
@echo "$(CYAN)SaveInMed — Makefile$(RESET)"
@echo "────────────────────────────────────────────────────────────"
@echo "$(YELLOW)Desenvolvimento$(RESET)"
@echo " make dev Sobe backend + frontend em paralelo"
@echo " make dev-all Sobe backend + frontend + backoffice"
@echo " make dev-backend Servidor Go (hot-reload manual)"
@echo " make dev-frontend Vite dev server"
@echo " make dev-backoffice NestJS com ts-node-dev (hot-reload)"
@echo ""
@echo "$(YELLOW)Build$(RESET)"
@echo " make build Build completo (Go + Vite + Nest)"
@echo " make build-backend Compila o binário Go → $(BINARY_OUT)"
@echo " make build-frontend Vite build de produção → frontend/dist"
@echo " make build-backoffice tsc build Nest → backoffice/dist"
@echo ""
@echo "$(YELLOW)Testes$(RESET)"
@echo " make test Roda todos os testes"
@echo " make test-backend go test ./..."
@echo " make test-frontend vitest (via pnpm test)"
@echo " make test-backoffice (configura scripts de test no Nest)"
@echo ""
@echo "$(YELLOW)Lint$(RESET)"
@echo " make lint Lint em todos os serviços"
@echo " make lint-backend go vet + staticcheck (se instalado)"
@echo " make lint-frontend eslint via pnpm (se configurado)"
@echo " make lint-backoffice eslint do NestJS"
@echo ""
@echo "$(YELLOW)Infra / Utilitários$(RESET)"
@echo " make migrate Aplica migrações DDL do backend"
@echo " make prisma-generate Gera Prisma Client do backoffice"
@echo " make install Instala dependências de todos os serviços"
@echo " make env Copia .env.example → .env (onde existir)"
@echo " make clean Remove artefatos de build"
@echo " make stop Mata processos iniciados por make dev"
@echo "────────────────────────────────────────────────────────────"
@echo ""
# =============================================================================
# BANCO DE DADOS (Docker)
# =============================================================================
# Inicia o container PostgreSQL em background.
db:
@echo "$(GREEN)▶ Iniciando PostgreSQL (Docker)...$(RESET)"
docker compose up -d db
@echo "$(GREEN)✔ Aguardando o banco ficar pronto...$(RESET)"
@docker compose exec db sh -c 'until pg_isready -U postgres -d saveinmed; do sleep 1; done'
@echo "$(GREEN)✔ PostgreSQL pronto na porta 55432$(RESET)"
# Para e remove o container (dados persistem no volume).
db-stop:
@echo "$(YELLOW)▶ Parando PostgreSQL...$(RESET)"
docker compose stop db
# Remove o container e o volume (dados perdidos!).
db-clean:
@echo "$(YELLOW)▶ Removendo container e volume do PostgreSQL...$(RESET)"
docker compose down -v
# Exibe os logs do container do banco.
db-logs:
docker compose logs -f db
# =============================================================================
# DESENVOLVIMENTO
# =============================================================================
# Sobe backend e frontend em paralelo — ideal para o dia a dia.
# O & em cada comando faz rodar em background; o wait aguarda ambos.
dev:
@echo "$(GREEN)▶ Subindo backend e frontend...$(RESET)"
@$(MAKE) dev-backend & \
$(MAKE) dev-frontend & \
wait
# Sobe os três serviços em paralelo.
dev-all:
@echo "$(GREEN)▶ Subindo backend, frontend e backoffice...$(RESET)"
@$(MAKE) dev-backend & \
$(MAKE) dev-frontend & \
$(MAKE) dev-backoffice & \
wait
# Roda o servidor Go. Não tem hot-reload nativo; use 'air' se quiser:
# go install github.com/cosmtrek/air@latest → cd backend && air
dev-backend:
@echo "$(GREEN)▶ Backend Go ($(BACKEND_DIR))$(RESET)"
cd $(BACKEND_DIR) && go run $(GO_ENTRYPOINT)
# Roda o Vite dev server com HMR.
dev-frontend:
@echo "$(GREEN)▶ Frontend Vite ($(FRONTEND_DIR))$(RESET)"
cd $(FRONTEND_DIR) && $(PKG_MGR) dev
# Roda o NestJS com ts-node-dev (hot-reload automático em src/).
dev-backoffice:
@echo "$(GREEN)▶ Backoffice NestJS ($(BACKOFFICE_DIR))$(RESET)"
cd $(BACKOFFICE_DIR) && $(PKG_MGR) start:dev
# =============================================================================
# BUILD
# =============================================================================
# Compila todos os serviços.
build: build-backend build-frontend build-backoffice
@echo "$(GREEN)✔ Build completo concluído.$(RESET)"
# Compila o binário Go. O resultado fica em backend/bin/api.
# Ajuste GO_BUILD_FLAGS acima para adicionar -ldflags, -tags, etc.
build-backend:
@echo "$(GREEN)▶ Build backend Go → $(BINARY_OUT)$(RESET)"
mkdir -p $(BACKEND_DIR)/bin
cd $(BACKEND_DIR) && go build $(GO_BUILD_FLAGS) -o bin/$(BINARY_NAME) $(GO_ENTRYPOINT)
# Build de produção do React/Vite. Artefatos em frontend/dist/.
build-frontend:
@echo "$(GREEN)▶ Build frontend Vite$(RESET)"
cd $(FRONTEND_DIR) && $(PKG_MGR) build
# Build de produção do NestJS. Artefatos em backoffice/dist/.
build-backoffice:
@echo "$(GREEN)▶ Build backoffice NestJS$(RESET)"
cd $(BACKOFFICE_DIR) && $(PKG_MGR) build
# =============================================================================
# TESTES
# =============================================================================
# Roda todos os testes.
test: test-backend test-frontend test-backoffice
# Testes do Go com cobertura. Ajuste GO_TEST_FLAGS acima (ex.: -race).
test-backend:
@echo "$(GREEN)▶ Testes Go$(RESET)"
cd $(BACKEND_DIR) && go test $(GO_TEST_FLAGS) ./... -cover
# Testes do React com Vitest (modo CI — sem modo watch).
test-frontend:
@echo "$(GREEN)▶ Testes frontend (vitest)$(RESET)"
cd $(FRONTEND_DIR) && $(PKG_MGR) run test --run
# Testes do NestJS. Adicione "test": "jest" no backoffice/package.json
# quando configurar o Jest. Por ora exibe instrução.
test-backoffice:
@echo "$(YELLOW)⚠ Testes do backoffice não configurados.$(RESET)"
@echo " Adicione 'test': 'jest' no backoffice/package.json e execute:"
@echo " cd $(BACKOFFICE_DIR) && $(PKG_MGR) test"
# =============================================================================
# LINT
# =============================================================================
# Lint em todos os serviços.
lint: lint-backend lint-frontend lint-backoffice
# go vet + staticcheck (se instalado). Para instalar staticcheck:
# go install honnef.co/go/tools/cmd/staticcheck@latest
lint-backend:
@echo "$(GREEN)▶ Lint backend Go$(RESET)"
cd $(BACKEND_DIR) && go vet ./...
@which staticcheck > /dev/null 2>&1 && \
(cd $(BACKEND_DIR) && staticcheck ./...) || \
echo "$(YELLOW) staticcheck não instalado — pulando análise estática$(RESET)"
# ESLint do frontend (se houver script lint configurado no package.json).
lint-frontend:
@echo "$(GREEN)▶ Lint frontend$(RESET)"
cd $(FRONTEND_DIR) && $(PKG_MGR) run lint 2>/dev/null || \
echo "$(YELLOW) Script 'lint' não encontrado em $(FRONTEND_DIR)/package.json$(RESET)"
# ESLint do NestJS — usa eslint configurado no backoffice.
lint-backoffice:
@echo "$(GREEN)▶ Lint backoffice NestJS$(RESET)"
cd $(BACKOFFICE_DIR) && $(PKG_MGR) run lint
# =============================================================================
# INFRA / UTILITÁRIOS
# =============================================================================
# Aplica as migrações DDL do backend Go.
migrate:
@echo "$(GREEN)▶ Aplicando migrações Do backend$(RESET)"
cd $(BACKEND_DIR) && go run ./cmd/apply_migration
# Regenera o Prisma Client do backoffice após alterações no schema.prisma.
prisma-generate:
@echo "$(GREEN)▶ Gerando Prisma Client$(RESET)"
cd $(BACKOFFICE_DIR) && $(PKG_MGR) run prisma:generate
# Instala dependências de todos os serviços Node.
# As dependências Go são gerenciadas pelo go.mod (go mod download automático).
install: install-frontend install-backoffice
@echo "$(GREEN)▶ Baixando módulos Go$(RESET)"
cd $(BACKEND_DIR) && go mod download
@echo "$(GREEN)✔ Todas as dependências instaladas.$(RESET)"
install-frontend:
@echo "$(GREEN)▶ Instalando dependências do frontend$(RESET)"
cd $(FRONTEND_DIR) && $(PKG_MGR) install
install-backoffice:
@echo "$(GREEN)▶ Instalando dependências do backoffice$(RESET)"
cd $(BACKOFFICE_DIR) && $(PKG_MGR) install
# Copia arquivos .env.example → .env para cada serviço (sem sobrescrever).
# Crie os .env.example em cada pasta para ativar este target.
env:
@for dir in $(BACKEND_DIR) $(FRONTEND_DIR) $(BACKOFFICE_DIR); do \
if [ -f "$$dir/.env.example" ] && [ ! -f "$$dir/.env" ]; then \
cp "$$dir/.env.example" "$$dir/.env"; \
echo "$(GREEN)$$dir/.env criado a partir de .env.example$(RESET)"; \
elif [ -f "$$dir/.env.example" ]; then \
echo "$(YELLOW)$$dir/.env já existe — não sobrescrito$(RESET)"; \
else \
echo "$(YELLOW) $$dir/.env.example não encontrado — pulando$(RESET)"; \
fi \
done
# Remove todos os artefatos de build.
clean:
@echo "$(GREEN)▶ Limpando artefatos...$(RESET)"
rm -rf $(BACKEND_DIR)/bin
rm -rf $(FRONTEND_DIR)/dist
rm -rf $(BACKOFFICE_DIR)/dist
@echo "$(GREEN)✔ Artefatos removidos.$(RESET)"
# Para processos do make dev (salva PIDs em .dev.pids).
# Uso: make dev-bg para subir em background gravando PIDs,
# make stop para matar os processos.
#
# Nota: 'make dev' usa wait/& diretamente, então Ctrl+C já encerra tudo.
# Este target é útil se você subir os serviços manualmente em background.
stop:
@if [ -f .dev.pids ]; then \
echo "$(GREEN)▶ Parando processos...$(RESET)"; \
xargs kill < .dev.pids 2>/dev/null || true; \
rm -f .dev.pids; \
echo "$(GREEN)✔ Processos encerrados.$(RESET)"; \
else \
echo "$(YELLOW) Nenhum arquivo .dev.pids encontrado.$(RESET)"; \
echo " Use Ctrl+C para parar 'make dev', ou mate os processos manualmente."; \
fi