feat(backend): add root endpoint and update port to 8214
- Add GET / endpoint with SaveInMed API info - Update PORT from 8080 to 8214 in .env.example - Add start.sh interactive development script - Script auto-installs dependencies when needed
This commit is contained in:
parent
029fce39ce
commit
4037ab6876
3 changed files with 369 additions and 1 deletions
|
|
@ -1,5 +1,5 @@
|
|||
DATABASE_URL=postgres://user:password@host:port/dbname?sslmode=disable
|
||||
PORT=8080
|
||||
PORT=8214
|
||||
DB_MAX_OPEN_CONNS=25
|
||||
DB_MAX_IDLE_CONNS=25
|
||||
DB_CONN_MAX_IDLE=15m
|
||||
|
|
|
|||
|
|
@ -42,6 +42,18 @@ func New(cfg config.Config) (*Server, error) {
|
|||
|
||||
mux := http.NewServeMux()
|
||||
|
||||
// Root endpoint
|
||||
mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path != "/" {
|
||||
http.NotFound(w, r)
|
||||
return
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
response := `{"message":"💊 SaveInMed API is running!","docs":"/swagger/index.html","health":"/health","version":"1.0.0"}`
|
||||
_, _ = w.Write([]byte(response))
|
||||
})
|
||||
|
||||
mux.HandleFunc("GET /health", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = w.Write([]byte("ok"))
|
||||
|
|
|
|||
356
start.sh
Executable file
356
start.sh
Executable file
|
|
@ -0,0 +1,356 @@
|
|||
#!/bin/bash
|
||||
|
||||
# SaveInMed Development Startup Script
|
||||
# Permite iniciar um ou mais serviços do projeto
|
||||
|
||||
# Cores para output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
PURPLE='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Diretório raiz do projeto
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Função para exibir o banner
|
||||
show_banner() {
|
||||
echo -e "${CYAN}"
|
||||
echo "╔══════════════════════════════════════════════════╗"
|
||||
echo "║ ║"
|
||||
echo "║ ███████ █████ ██ ██ ███████ ██ ███ ██ ║"
|
||||
echo "║ ██ ██ ██ ██ ██ ██ ██ ████ ██ ║"
|
||||
echo "║ ███████ ███████ ██ ██ █████ ██ ██ ██ ██ ║"
|
||||
echo "║ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ║"
|
||||
echo "║ ███████ ██ ██ ████ ███████ ██ ██ ████ ║"
|
||||
echo "║ ║"
|
||||
echo "║ ███ ███ ███████ ██████ ║"
|
||||
echo "║ ████ ████ ██ ██ ██ ║"
|
||||
echo "║ ██ ████ ██ █████ ██ ██ ║"
|
||||
echo "║ ██ ██ ██ ██ ██ ██ ║"
|
||||
echo "║ ██ ██ ███████ ██████ ║"
|
||||
echo "║ ║"
|
||||
echo "║ Development Startup Script ║"
|
||||
echo "║ ║"
|
||||
echo "╚══════════════════════════════════════════════════╝"
|
||||
echo -e "${NC}"
|
||||
}
|
||||
|
||||
# Função para verificar dependências
|
||||
check_dependency() {
|
||||
local cmd=$1
|
||||
local name=$2
|
||||
if command -v "$cmd" &> /dev/null; then
|
||||
echo -e " ${GREEN}✓${NC} $name"
|
||||
return 0
|
||||
else
|
||||
echo -e " ${RED}✗${NC} $name (não instalado)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Função para instalar Go
|
||||
install_go() {
|
||||
echo -e "${YELLOW}📦 Instalando Go...${NC}"
|
||||
curl -fsSL https://go.dev/dl/go1.24.3.linux-amd64.tar.gz -o /tmp/go.tar.gz
|
||||
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf /tmp/go.tar.gz
|
||||
export PATH=$PATH:/usr/local/go/bin
|
||||
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.zshrc
|
||||
rm /tmp/go.tar.gz
|
||||
echo -e "${GREEN}✓ Go instalado com sucesso${NC}"
|
||||
}
|
||||
|
||||
# Função para instalar Node.js
|
||||
install_node() {
|
||||
echo -e "${YELLOW}📦 Instalando Node.js...${NC}"
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||||
sudo apt-get install -y nodejs
|
||||
echo -e "${GREEN}✓ Node.js instalado com sucesso${NC}"
|
||||
}
|
||||
|
||||
# Função para instalar pnpm
|
||||
install_pnpm() {
|
||||
echo -e "${YELLOW}📦 Instalando pnpm...${NC}"
|
||||
npm install -g pnpm
|
||||
echo -e "${GREEN}✓ pnpm instalado com sucesso${NC}"
|
||||
}
|
||||
|
||||
# Função para instalar Deno
|
||||
install_deno() {
|
||||
echo -e "${YELLOW}📦 Instalando Deno...${NC}"
|
||||
curl -fsSL https://deno.land/install.sh | sh
|
||||
export DENO_INSTALL="$HOME/.deno"
|
||||
export PATH="$DENO_INSTALL/bin:$PATH"
|
||||
echo 'export DENO_INSTALL="$HOME/.deno"' >> ~/.zshrc
|
||||
echo 'export PATH="$DENO_INSTALL/bin:$PATH"' >> ~/.zshrc
|
||||
echo -e "${GREEN}✓ Deno instalado com sucesso${NC}"
|
||||
}
|
||||
|
||||
# Função para instalar tmux
|
||||
install_tmux() {
|
||||
echo -e "${YELLOW}📦 Instalando tmux...${NC}"
|
||||
sudo apt-get update && sudo apt-get install -y tmux
|
||||
echo -e "${GREEN}✓ tmux instalado com sucesso${NC}"
|
||||
}
|
||||
|
||||
# Função para verificar e instalar dependência
|
||||
ensure_dependency() {
|
||||
local cmd=$1
|
||||
local name=$2
|
||||
local install_func=$3
|
||||
|
||||
if ! command -v "$cmd" &> /dev/null; then
|
||||
echo -e "${RED}✗ $name não está instalado${NC}"
|
||||
read -p "Deseja instalar $name agora? (s/n): " install_choice
|
||||
if [[ "$install_choice" =~ ^[Ss]$ ]]; then
|
||||
$install_func
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}Não é possível continuar sem $name${NC}"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# Função para iniciar o Backend Go
|
||||
start_backend() {
|
||||
echo -e "\n${BLUE}🚀 Iniciando Backend Go...${NC}"
|
||||
|
||||
# Verificar/instalar Go
|
||||
ensure_dependency "go" "Go" "install_go" || return 1
|
||||
|
||||
cd "$PROJECT_ROOT/backend"
|
||||
|
||||
# Carregar variáveis de ambiente se existir .env
|
||||
if [ -f ".env" ]; then
|
||||
echo -e "${GREEN} ✓ Carregando variáveis de .env${NC}"
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
else
|
||||
echo -e "${YELLOW} ⚠ Arquivo .env não encontrado, usando valores padrão${NC}"
|
||||
fi
|
||||
|
||||
# Baixar dependências se necessário
|
||||
if [ ! -f "go.sum" ]; then
|
||||
echo -e "${YELLOW} 📦 Baixando dependências Go...${NC}"
|
||||
go mod download
|
||||
fi
|
||||
|
||||
echo -e "${GREEN} ▶ Executando: go run ./cmd/api${NC}"
|
||||
echo -e "${CYAN} 📍 API disponível em: http://localhost:${PORT:-8214}${NC}"
|
||||
echo -e "${CYAN} 📚 Swagger UI: http://localhost:${PORT:-8214}/swagger/index.html${NC}\n"
|
||||
|
||||
go run ./cmd/api
|
||||
}
|
||||
|
||||
# Função para iniciar o Backoffice NestJS
|
||||
start_backoffice() {
|
||||
echo -e "\n${PURPLE}🚀 Iniciando Backoffice NestJS...${NC}"
|
||||
|
||||
# Verificar/instalar Node.js
|
||||
ensure_dependency "node" "Node.js" "install_node" || return 1
|
||||
|
||||
# Verificar/instalar pnpm
|
||||
if ! command -v pnpm &> /dev/null; then
|
||||
read -p "pnpm não encontrado. Deseja instalar? (s/n): " install_choice
|
||||
if [[ "$install_choice" =~ ^[Ss]$ ]]; then
|
||||
install_pnpm
|
||||
fi
|
||||
fi
|
||||
|
||||
cd "$PROJECT_ROOT/backoffice"
|
||||
|
||||
# Determinar gerenciador de pacotes (pnpm ou npm)
|
||||
if command -v pnpm &> /dev/null; then
|
||||
PKG_MANAGER="pnpm"
|
||||
else
|
||||
PKG_MANAGER="npm"
|
||||
echo -e "${YELLOW} ⚠ pnpm não encontrado, usando npm${NC}"
|
||||
fi
|
||||
|
||||
# Instalar dependências se necessário
|
||||
if [ ! -d "node_modules" ]; then
|
||||
echo -e "${YELLOW} 📦 Instalando dependências...${NC}"
|
||||
$PKG_MANAGER install
|
||||
fi
|
||||
|
||||
# Gerar Prisma client
|
||||
if [ -f "prisma/schema.prisma" ]; then
|
||||
echo -e "${YELLOW} 🔧 Gerando Prisma client...${NC}"
|
||||
$PKG_MANAGER run prisma:generate 2>/dev/null || npx prisma generate
|
||||
fi
|
||||
|
||||
echo -e "${GREEN} ▶ Executando: $PKG_MANAGER run start:dev${NC}"
|
||||
echo -e "${CYAN} 📍 Backoffice disponível em: http://localhost:3000${NC}"
|
||||
echo -e "${CYAN} 📚 Swagger: http://localhost:3000/api${NC}\n"
|
||||
|
||||
$PKG_MANAGER run start:dev
|
||||
}
|
||||
|
||||
# Função para iniciar o Marketplace React
|
||||
start_marketplace() {
|
||||
echo -e "\n${BLUE}🚀 Iniciando Marketplace React...${NC}"
|
||||
|
||||
# Verificar/instalar Node.js
|
||||
ensure_dependency "node" "Node.js" "install_node" || return 1
|
||||
|
||||
cd "$PROJECT_ROOT/marketplace"
|
||||
|
||||
# Instalar dependências se necessário
|
||||
if [ ! -d "node_modules" ]; then
|
||||
echo -e "${YELLOW} 📦 Instalando dependências...${NC}"
|
||||
npm install
|
||||
fi
|
||||
|
||||
echo -e "${GREEN} ▶ Executando: npm run dev${NC}"
|
||||
echo -e "${CYAN} 📍 Marketplace disponível em: http://localhost:5173${NC}\n"
|
||||
|
||||
npm run dev
|
||||
}
|
||||
|
||||
# Função para iniciar o Website Fresh/Deno
|
||||
start_website() {
|
||||
echo -e "\n${GREEN}🚀 Iniciando Website (Fresh/Deno)...${NC}"
|
||||
|
||||
# Verificar/instalar Deno
|
||||
ensure_dependency "deno" "Deno" "install_deno" || return 1
|
||||
|
||||
cd "$PROJECT_ROOT/website"
|
||||
|
||||
echo -e "${GREEN} ▶ Executando: deno task dev${NC}"
|
||||
echo -e "${CYAN} 📍 Website disponível em: http://localhost:8000${NC}\n"
|
||||
|
||||
deno task dev
|
||||
}
|
||||
|
||||
# Função para exibir o menu
|
||||
show_menu() {
|
||||
echo -e "\n${YELLOW}Selecione o serviço para iniciar:${NC}\n"
|
||||
echo -e " ${BLUE}1)${NC} Backend Go ${CYAN}(porta 8214)${NC}"
|
||||
echo -e " ${BLUE}2)${NC} Backoffice NestJS ${CYAN}(porta 3000)${NC}"
|
||||
echo -e " ${BLUE}3)${NC} Marketplace React ${CYAN}(porta 5173)${NC}"
|
||||
echo -e " ${BLUE}4)${NC} Website Fresh/Deno ${CYAN}(porta 8000)${NC}"
|
||||
echo -e ""
|
||||
echo -e " ${GREEN}5)${NC} Iniciar Todos os Serviços"
|
||||
echo -e ""
|
||||
echo -e " ${RED}0)${NC} Sair"
|
||||
echo -e ""
|
||||
}
|
||||
|
||||
# Função para iniciar todos os serviços em terminais separados
|
||||
start_all_services() {
|
||||
echo -e "\n${GREEN}🚀 Iniciando todos os serviços...${NC}\n"
|
||||
|
||||
# Verificar/instalar tmux
|
||||
ensure_dependency "tmux" "tmux" "install_tmux" || return 1
|
||||
|
||||
# Matar sessão anterior se existir
|
||||
tmux kill-session -t saveinmed 2>/dev/null || true
|
||||
|
||||
tmux new-session -d -s saveinmed -n backend "cd $PROJECT_ROOT && ./start.sh --backend"
|
||||
tmux new-window -t saveinmed -n backoffice "cd $PROJECT_ROOT && ./start.sh --backoffice"
|
||||
tmux new-window -t saveinmed -n marketplace "cd $PROJECT_ROOT && ./start.sh --marketplace"
|
||||
tmux new-window -t saveinmed -n website "cd $PROJECT_ROOT && ./start.sh --website"
|
||||
|
||||
echo -e "${GREEN}✓ Serviços iniciados em sessão tmux 'saveinmed'${NC}"
|
||||
echo -e "${CYAN} Use 'tmux attach -t saveinmed' para acessar${NC}"
|
||||
echo -e "${CYAN} Use Ctrl+B + número para trocar de janela${NC}\n"
|
||||
|
||||
tmux attach -t saveinmed
|
||||
}
|
||||
|
||||
# Processar argumentos de linha de comando
|
||||
if [ $# -gt 0 ]; then
|
||||
case "$1" in
|
||||
--backend|-b|1)
|
||||
start_backend
|
||||
exit 0
|
||||
;;
|
||||
--backoffice|-o|2)
|
||||
start_backoffice
|
||||
exit 0
|
||||
;;
|
||||
--marketplace|-m|3)
|
||||
start_marketplace
|
||||
exit 0
|
||||
;;
|
||||
--website|-w|4)
|
||||
start_website
|
||||
exit 0
|
||||
;;
|
||||
--all|-a|5)
|
||||
show_banner
|
||||
start_all_services
|
||||
exit 0
|
||||
;;
|
||||
--help|-h)
|
||||
show_banner
|
||||
echo "Uso: $0 [OPÇÃO]"
|
||||
echo ""
|
||||
echo "Opções:"
|
||||
echo " --backend, -b, 1 Iniciar Backend Go (porta 8214)"
|
||||
echo " --backoffice, -o, 2 Iniciar Backoffice NestJS (porta 3000)"
|
||||
echo " --marketplace, -m, 3 Iniciar Marketplace React (porta 5173)"
|
||||
echo " --website, -w, 4 Iniciar Website Deno (porta 8000)"
|
||||
echo " --all, -a, 5 Iniciar todos os serviços"
|
||||
echo " --help, -h Mostrar esta ajuda"
|
||||
echo ""
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}Opção inválida: $1${NC}"
|
||||
echo "Use --help para ver as opções disponíveis"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Menu interativo
|
||||
show_banner
|
||||
|
||||
echo -e "${YELLOW}Verificando dependências...${NC}"
|
||||
echo ""
|
||||
check_dependency "go" "Go"
|
||||
check_dependency "node" "Node.js"
|
||||
check_dependency "npm" "npm"
|
||||
check_dependency "pnpm" "pnpm (opcional, usa npm como fallback)"
|
||||
check_dependency "deno" "Deno"
|
||||
check_dependency "tmux" "tmux (para iniciar todos)"
|
||||
echo ""
|
||||
|
||||
while true; do
|
||||
show_menu
|
||||
read -p "Opção: " choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
start_backend
|
||||
break
|
||||
;;
|
||||
2)
|
||||
start_backoffice
|
||||
break
|
||||
;;
|
||||
3)
|
||||
start_marketplace
|
||||
break
|
||||
;;
|
||||
4)
|
||||
start_website
|
||||
break
|
||||
;;
|
||||
5)
|
||||
start_all_services
|
||||
break
|
||||
;;
|
||||
0)
|
||||
echo -e "\n${GREEN}👋 Até logo!${NC}\n"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}Opção inválida. Tente novamente.${NC}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
Loading…
Reference in a new issue