Sure! Pl
This commit is contained in:
61
scripts/db/backup.sh
Executable file
61
scripts/db/backup.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
SERVICE=$1
|
||||
BACKUP_DIR="${2:-./backups}"
|
||||
|
||||
if [ -z "$SERVICE" ]; then
|
||||
echo "Usage: $0 <service-name> [backup-dir]"
|
||||
echo "Example: $0 auth-service"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_FILE="$BACKUP_DIR/${SERVICE}_${TIMESTAMP}.sql"
|
||||
|
||||
echo "💾 Backing up database for $SERVICE..."
|
||||
|
||||
# Extract database URL from .env or environment
|
||||
cd "services/$SERVICE"
|
||||
|
||||
if [ -z "$DATABASE_URL" ]; then
|
||||
if [ -f ".env" ]; then
|
||||
DATABASE_URL=$(grep DATABASE_URL .env | cut -d '=' -f2- | tr -d '"' | tr -d "'")
|
||||
elif [ -f "../../deployments/local/.env.local" ]; then
|
||||
DATABASE_URL=$(grep DATABASE_URL ../../deployments/local/.env.local | cut -d '=' -f2- | tr -d '"' | tr -d "'")
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$DATABASE_URL" ]; then
|
||||
echo "❌ DATABASE_URL not found. Please set it in:"
|
||||
echo " - services/$SERVICE/.env"
|
||||
echo " - deployments/local/.env.local"
|
||||
echo " - Or as environment variable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Use pg_dump directly with DATABASE_URL (works with Neon and standard PostgreSQL)
|
||||
# Neon URLs format: postgresql://user:pass@ep-xxx.region.neon.tech/dbname?sslmode=require
|
||||
# Standard format: postgresql://user:pass@host:port/dbname
|
||||
|
||||
# Check if pg_dump supports connection string (PostgreSQL 11+)
|
||||
if pg_dump --version | grep -qE "1[1-9]|2[0-9]"; then
|
||||
# Use connection string directly (supports Neon)
|
||||
pg_dump "$DATABASE_URL" > "../$BACKUP_FILE"
|
||||
else
|
||||
# Fallback: Parse connection string for older pg_dump
|
||||
# Remove query parameters for parsing
|
||||
CLEAN_URL=$(echo $DATABASE_URL | sed 's/?.*//')
|
||||
DB_USER=$(echo $CLEAN_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p')
|
||||
DB_PASS=$(echo $CLEAN_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p')
|
||||
DB_HOST=$(echo $CLEAN_URL | sed -n 's/.*@\([^:]*\):.*/\1/p')
|
||||
DB_PORT=$(echo $CLEAN_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p')
|
||||
DB_NAME=$(echo $CLEAN_URL | sed -n 's/.*\/\([^?]*\).*/\1/p')
|
||||
|
||||
PGPASSWORD=$DB_PASS pg_dump -h $DB_HOST -p ${DB_PORT:-5432} -U $DB_USER -d $DB_NAME > "../$BACKUP_FILE"
|
||||
fi
|
||||
|
||||
echo "✅ Backup created: $BACKUP_FILE"
|
||||
51
scripts/db/migrate.sh
Executable file
51
scripts/db/migrate.sh
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
SERVICE=$1
|
||||
|
||||
if [ -z "$SERVICE" ]; then
|
||||
echo "Usage: $0 <service-name> [dev|deploy]"
|
||||
echo "Example: $0 auth-service dev"
|
||||
echo "Example: $0 auth-service deploy"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "services/$SERVICE" ]; then
|
||||
echo "❌ Service $SERVICE not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🔄 Running migrations for $SERVICE..."
|
||||
|
||||
cd "services/$SERVICE"
|
||||
|
||||
# Load environment variables (hybrid pattern)
|
||||
# 1. Load shared env (JWT secrets, Redis config)
|
||||
if [ -f "../../deployments/local/.env.local" ]; then
|
||||
export $(grep -v '^#' ../../deployments/local/.env.local | xargs)
|
||||
fi
|
||||
|
||||
# 2. Load service-specific env (DATABASE_URL, PORT, etc.)
|
||||
if [ -f ".env.local" ]; then
|
||||
export $(grep -v '^#' .env.local | xargs)
|
||||
fi
|
||||
|
||||
# Check if DATABASE_URL is set
|
||||
if [ -z "$DATABASE_URL" ]; then
|
||||
echo "⚠️ DATABASE_URL not set. Please check your .env.local files:"
|
||||
echo " - Shared config: ../../deployments/local/.env.local"
|
||||
echo " - Service config: .env.local"
|
||||
echo " For Neon: postgresql://user:pass@ep-xxx.region.neon.tech/dbname?sslmode=require&pgbouncer=true"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$2" = "dev" ]; then
|
||||
echo "📝 Running development migration (creates new migration)..."
|
||||
pnpm prisma migrate dev
|
||||
else
|
||||
echo "🚀 Running production migration (applies existing migrations)..."
|
||||
pnpm prisma migrate deploy
|
||||
fi
|
||||
|
||||
echo "✅ Migrations completed!"
|
||||
36
scripts/db/seed.sh
Executable file
36
scripts/db/seed.sh
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
SERVICE=$1
|
||||
|
||||
if [ -z "$SERVICE" ]; then
|
||||
echo "Usage: $0 <service-name>"
|
||||
echo "Example: $0 auth-service"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "services/$SERVICE" ]; then
|
||||
echo "❌ Service $SERVICE not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🌱 Seeding database for $SERVICE..."
|
||||
|
||||
cd "services/$SERVICE"
|
||||
|
||||
# Check if DATABASE_URL is set
|
||||
if [ -z "$DATABASE_URL" ]; then
|
||||
if [ -f ".env" ]; then
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
elif [ -f "../../deployments/local/.env.local" ]; then
|
||||
export $(grep -v '^#' ../../deployments/local/.env.local | xargs)
|
||||
else
|
||||
echo "⚠️ DATABASE_URL not set. Please set it in .env or environment variable."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
pnpm prisma:seed
|
||||
|
||||
echo "✅ Database seeded!"
|
||||
69
scripts/db/setup-neon.sh
Executable file
69
scripts/db/setup-neon.sh
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Neon Database Setup Script"
|
||||
echo ""
|
||||
|
||||
# Colors for output
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${YELLOW}This script helps you set up Neon database for all environments.${NC}"
|
||||
echo ""
|
||||
|
||||
# Check if .env.local exists
|
||||
ENV_LOCAL="deployments/local/.env.local"
|
||||
if [ ! -f "$ENV_LOCAL" ]; then
|
||||
echo "📝 Creating $ENV_LOCAL from example..."
|
||||
cp deployments/local/env.local.example "$ENV_LOCAL"
|
||||
echo -e "${GREEN}✅ Created $ENV_LOCAL${NC}"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo "📋 Setup Steps:"
|
||||
echo ""
|
||||
echo "1. Go to https://console.neon.tech"
|
||||
echo "2. Create a project (or use existing): goodgo-platform"
|
||||
echo "3. Create branches:"
|
||||
echo " - staging (from main)"
|
||||
echo " - production (from main)"
|
||||
echo ""
|
||||
echo "4. Get connection strings for each branch from Neon Console"
|
||||
echo " Format: postgresql://user:password@ep-xxx.region.neon.tech/dbname?sslmode=require&pgbouncer=true"
|
||||
echo ""
|
||||
|
||||
read -p "Enter development DATABASE_URL (main branch): " dev_url
|
||||
if [ -n "$dev_url" ]; then
|
||||
# Update .env.local
|
||||
if grep -q "DATABASE_URL=" "$ENV_LOCAL"; then
|
||||
sed -i.bak "s|DATABASE_URL=.*|DATABASE_URL=$dev_url|" "$ENV_LOCAL"
|
||||
rm -f "${ENV_LOCAL}.bak"
|
||||
else
|
||||
echo "DATABASE_URL=$dev_url" >> "$ENV_LOCAL"
|
||||
fi
|
||||
echo -e "${GREEN}✅ Updated $ENV_LOCAL${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "📝 Next Steps:"
|
||||
echo ""
|
||||
echo "1. Add to GitHub Secrets (for CI/CD):"
|
||||
echo " - NEON_DATABASE_URL_STAGING"
|
||||
echo " - NEON_DATABASE_URL_PRODUCTION"
|
||||
echo " - NEON_DATABASE_URL_TEST (optional, for CI tests)"
|
||||
echo ""
|
||||
echo "2. Create Kubernetes secrets for staging/production:"
|
||||
echo " See: deployments/staging/kubernetes/secrets.yaml.example"
|
||||
echo " See: deployments/production/kubernetes/secrets.yaml.example"
|
||||
echo ""
|
||||
echo "3. Run initial migration:"
|
||||
echo " ./scripts/db/migrate.sh auth-service dev"
|
||||
echo ""
|
||||
echo "4. Seed database (optional):"
|
||||
echo " ./scripts/db/seed.sh auth-service"
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ Setup instructions complete!${NC}"
|
||||
echo ""
|
||||
echo "For more details, see: infra/databases/neon/README.md"
|
||||
23
scripts/deploy/deploy-prod.sh
Executable file
23
scripts/deploy/deploy-prod.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "⚠️ WARNING: You are about to deploy to PRODUCTION!"
|
||||
read -p "Are you sure? (yes/no): " confirm
|
||||
|
||||
if [ "$confirm" != "yes" ]; then
|
||||
echo "Deployment cancelled"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🚀 Deploying to production..."
|
||||
|
||||
if [ -z "$KUBECONFIG" ]; then
|
||||
echo "❌ KUBECONFIG environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
kubectl apply -f deployments/production/kubernetes/
|
||||
kubectl rollout status deployment/auth-service -n production
|
||||
|
||||
echo "✅ Deployment completed!"
|
||||
15
scripts/deploy/deploy-staging.sh
Executable file
15
scripts/deploy/deploy-staging.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Deploying to staging..."
|
||||
|
||||
if [ -z "$KUBECONFIG" ]; then
|
||||
echo "❌ KUBECONFIG environment variable not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
kubectl apply -f deployments/staging/kubernetes/
|
||||
kubectl rollout status deployment/auth-service -n staging
|
||||
|
||||
echo "✅ Deployment completed!"
|
||||
26
scripts/dev/logs.sh
Executable file
26
scripts/dev/logs.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
SERVICE=$1
|
||||
|
||||
if [ -z "$SERVICE" ]; then
|
||||
echo "Usage: $0 <service-name>"
|
||||
echo "Example: $0 auth-service"
|
||||
echo ""
|
||||
echo "Or use 'docker' to view Docker logs:"
|
||||
echo " $0 docker <container-name>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$SERVICE" = "docker" ]; then
|
||||
CONTAINER=$2
|
||||
if [ -z "$CONTAINER" ]; then
|
||||
echo "Usage: $0 docker <container-name>"
|
||||
echo "Available containers:"
|
||||
docker ps --format "{{.Names}}"
|
||||
exit 1
|
||||
fi
|
||||
docker logs -f "$CONTAINER"
|
||||
else
|
||||
cd "services/$SERVICE"
|
||||
pnpm dev
|
||||
fi
|
||||
102
scripts/dev/setup-env.sh
Executable file
102
scripts/dev/setup-env.sh
Executable file
@@ -0,0 +1,102 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Setup Environment Variables for Development
|
||||
# Thiết lập Environment Variables cho Development
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔧 Setting up environment variables..."
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Check if we're in the project root
|
||||
if [ ! -f "package.json" ]; then
|
||||
echo -e "${RED}❌ Error: Must run from project root${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setup shared environment
|
||||
echo ""
|
||||
echo "📦 Step 1: Setup shared environment (deployments/local/.env.local)"
|
||||
if [ -f "deployments/local/.env.local" ]; then
|
||||
echo -e "${YELLOW}⚠️ deployments/local/.env.local already exists${NC}"
|
||||
read -p "Overwrite? (y/n): " overwrite
|
||||
if [ "$overwrite" != "y" ]; then
|
||||
echo "Skipping shared environment setup"
|
||||
else
|
||||
cp deployments/local/env.local.example deployments/local/.env.local
|
||||
echo -e "${GREEN}✅ Created deployments/local/.env.local${NC}"
|
||||
fi
|
||||
else
|
||||
cp deployments/local/env.local.example deployments/local/.env.local
|
||||
echo -e "${GREEN}✅ Created deployments/local/.env.local${NC}"
|
||||
fi
|
||||
|
||||
# Setup service-specific environments
|
||||
echo ""
|
||||
echo "📦 Step 2: Setup service-specific environments"
|
||||
|
||||
# Function to setup service env
|
||||
setup_service_env() {
|
||||
local service=$1
|
||||
local service_path="services/$service"
|
||||
|
||||
if [ ! -d "$service_path" ]; then
|
||||
echo -e "${YELLOW}⚠️ Service $service not found, skipping${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -f "$service_path/.env.local" ]; then
|
||||
echo -e "${YELLOW}⚠️ $service_path/.env.local already exists, skipping${NC}"
|
||||
else
|
||||
if [ -f "$service_path/env.local.example" ]; then
|
||||
cp "$service_path/env.local.example" "$service_path/.env.local"
|
||||
echo -e "${GREEN}✅ Created $service_path/.env.local${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ $service_path/env.local.example not found, skipping${NC}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Setup for all services
|
||||
for service_dir in services/*/; do
|
||||
if [ -d "$service_dir" ]; then
|
||||
service_name=$(basename "$service_dir")
|
||||
if [ "$service_name" != "_template" ]; then
|
||||
setup_service_env "$service_name"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo -e "${GREEN}✅ Environment setup complete!${NC}"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo "📝 Next steps:"
|
||||
echo ""
|
||||
echo "1. Edit deployments/local/.env.local:"
|
||||
echo " - Set JWT_SECRET and JWT_REFRESH_SECRET"
|
||||
echo ""
|
||||
echo "2. Edit services/<service>/.env.local for each service:"
|
||||
echo " - Set DATABASE_URL from Neon Console"
|
||||
echo " - Each service needs its own database"
|
||||
echo ""
|
||||
echo "3. Create databases in Neon:"
|
||||
echo " - goodgo_auth_dev (for auth-service)"
|
||||
echo " - goodgo_user_dev (for user-service)"
|
||||
echo " - etc."
|
||||
echo ""
|
||||
echo "4. Run migrations:"
|
||||
echo " ./scripts/db/migrate.sh auth-service dev"
|
||||
echo ""
|
||||
echo "5. Start development:"
|
||||
echo " ./scripts/dev/start-all.sh"
|
||||
echo ""
|
||||
echo "📚 See docs/vi/guides/local-development.md for details"
|
||||
echo ""
|
||||
41
scripts/dev/start-all.sh
Executable file
41
scripts/dev/start-all.sh
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Starting all services..."
|
||||
|
||||
# Check if Docker is running
|
||||
if ! docker info &> /dev/null; then
|
||||
echo "❌ Docker is not running. Please start Docker first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if Neon DATABASE_URL is set
|
||||
if [ -f "deployments/local/.env.local" ]; then
|
||||
export $(grep -v '^#' deployments/local/.env.local | xargs)
|
||||
fi
|
||||
|
||||
if [ -z "$DATABASE_URL" ]; then
|
||||
echo "⚠️ WARNING: DATABASE_URL not set!"
|
||||
echo " Please setup Neon database: ./scripts/db/setup-neon.sh"
|
||||
echo " Or set DATABASE_URL in deployments/local/.env.local"
|
||||
echo ""
|
||||
read -p "Continue anyway? (y/n): " continue
|
||||
if [ "$continue" != "y" ]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Start infrastructure (Redis, Traefik - no PostgreSQL needed)
|
||||
echo "📦 Starting infrastructure (Redis, Traefik)..."
|
||||
cd deployments/local
|
||||
docker-compose up -d
|
||||
cd ../..
|
||||
|
||||
# Wait for Redis to be ready
|
||||
echo "⏳ Waiting for Redis to be ready..."
|
||||
sleep 3
|
||||
|
||||
# Start services
|
||||
echo "🚀 Starting services..."
|
||||
pnpm dev
|
||||
22
scripts/dev/start-service.sh
Executable file
22
scripts/dev/start-service.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
SERVICE=$1
|
||||
|
||||
if [ -z "$SERVICE" ]; then
|
||||
echo "Usage: $0 <service-name>"
|
||||
echo "Example: $0 auth-service"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🚀 Starting $SERVICE..."
|
||||
|
||||
# Check if service exists
|
||||
if [ ! -d "services/$SERVICE" ]; then
|
||||
echo "❌ Service $SERVICE not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "services/$SERVICE"
|
||||
pnpm dev
|
||||
58
scripts/setup/init-project.sh
Executable file
58
scripts/setup/init-project.sh
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Initializing GoodGo Microservices Project..."
|
||||
|
||||
# Check prerequisites
|
||||
if ! command -v pnpm &> /dev/null; then
|
||||
echo "❌ PNPM is not installed. Please install it first: npm install -g pnpm"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "⚠️ Docker is not installed. Some features may not work."
|
||||
fi
|
||||
|
||||
# Install dependencies
|
||||
echo "📦 Installing dependencies..."
|
||||
pnpm install
|
||||
|
||||
# Generate Prisma clients
|
||||
echo "🔧 Generating Prisma clients..."
|
||||
cd services/auth-service
|
||||
pnpm prisma:generate || echo "⚠️ Prisma generation skipped (database not available)"
|
||||
cd ../..
|
||||
|
||||
# Setup environment files
|
||||
echo "📝 Setting up environment files..."
|
||||
if [ ! -f "services/auth-service/.env" ]; then
|
||||
cp services/auth-service/env.example services/auth-service/.env
|
||||
echo "✅ Created services/auth-service/.env"
|
||||
fi
|
||||
|
||||
if [ ! -f "deployments/local/.env.local" ]; then
|
||||
cp deployments/local/env.local.example deployments/local/.env.local
|
||||
echo "✅ Created deployments/local/.env.local"
|
||||
echo "⚠️ IMPORTANT: Edit .env.local and add your Neon DATABASE_URL"
|
||||
fi
|
||||
|
||||
if [ ! -f "apps/web-admin/.env.local" ]; then
|
||||
cp apps/web-admin/.env.example apps/web-admin/.env.local 2>/dev/null || echo "⚠️ Web admin .env.example not found"
|
||||
fi
|
||||
|
||||
if [ ! -f "apps/web-client/.env.local" ]; then
|
||||
cp apps/web-client/.env.example apps/web-client/.env.local 2>/dev/null || echo "⚠️ Web client .env.example not found"
|
||||
fi
|
||||
|
||||
echo "✅ Project initialization complete!"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo "1. Setup Neon database: ./scripts/db/setup-neon.sh"
|
||||
echo "2. Update .env files with your Neon DATABASE_URL"
|
||||
echo "3. Start infrastructure: cd deployments/local && docker-compose up -d"
|
||||
echo "4. Run migrations: ./scripts/db/migrate.sh auth-service dev"
|
||||
echo "5. Seed database: ./scripts/db/seed.sh auth-service"
|
||||
echo "6. Start services: pnpm dev"
|
||||
echo ""
|
||||
echo "📚 See infra/databases/neon/README.md for Neon setup details"
|
||||
9
scripts/setup/install-deps.sh
Executable file
9
scripts/setup/install-deps.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "📦 Installing all dependencies..."
|
||||
|
||||
pnpm install
|
||||
|
||||
echo "✅ Dependencies installed!"
|
||||
23
scripts/utils/cleanup.sh
Executable file
23
scripts/utils/cleanup.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "🧹 Cleaning up temporary files..."
|
||||
|
||||
# Remove node_modules (optional, comment out if you want to keep them)
|
||||
# find . -name "node_modules" -type d -prune -exec rm -rf {} \;
|
||||
|
||||
# Remove build artifacts
|
||||
find . -name "dist" -type d -prune -exec rm -rf {} \;
|
||||
find . -name ".next" -type d -prune -exec rm -rf {} \;
|
||||
find . -name "build" -type d -prune -exec rm -rf {} \;
|
||||
find . -name "*.tsbuildinfo" -type f -delete
|
||||
|
||||
# Remove logs
|
||||
find . -name "*.log" -type f -delete
|
||||
|
||||
# Remove cache
|
||||
find . -name ".turbo" -type d -prune -exec rm -rf {} \;
|
||||
find . -name ".cache" -type d -prune -exec rm -rf {} \;
|
||||
|
||||
echo "✅ Cleanup completed!"
|
||||
45
scripts/utils/create-service.sh
Executable file
45
scripts/utils/create-service.sh
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
SERVICE_NAME=$1
|
||||
|
||||
if [ -z "$SERVICE_NAME" ]; then
|
||||
echo "Usage: $0 <service-name>"
|
||||
echo "Example: $0 payment-service"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SERVICE_DIR="services/$SERVICE_NAME"
|
||||
|
||||
if [ -d "$SERVICE_DIR" ]; then
|
||||
echo "❌ Service $SERVICE_NAME already exists"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📦 Creating new service: $SERVICE_NAME..."
|
||||
|
||||
# Copy template
|
||||
cp -r services/_template "$SERVICE_DIR"
|
||||
|
||||
# Update package.json
|
||||
cd "$SERVICE_DIR"
|
||||
sed -i.bak "s/@goodgo\/service-template/@goodgo\/$SERVICE_NAME/g" package.json
|
||||
rm package.json.bak
|
||||
|
||||
# Update .env.example
|
||||
sed -i.bak "s/SERVICE_NAME=service-name/SERVICE_NAME=$SERVICE_NAME/g" .env.example 2>/dev/null || true
|
||||
rm .env.example.bak 2>/dev/null || true
|
||||
|
||||
# Update Dockerfile port if needed
|
||||
# (Keep default 5000, user can change later)
|
||||
|
||||
cd ../..
|
||||
|
||||
echo "✅ Service $SERVICE_NAME created!"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo "1. Update $SERVICE_DIR/package.json if needed"
|
||||
echo "2. Update $SERVICE_DIR/.env.example with service-specific configs"
|
||||
echo "3. Implement your service logic in $SERVICE_DIR/src/"
|
||||
echo "4. Add Prisma schema if needed: $SERVICE_DIR/prisma/schema.prisma"
|
||||
Reference in New Issue
Block a user