bookworm-smart-assistant/skills/backend-builder/scripts/init_backend_project.sh

234 lines
4.4 KiB
Bash
Raw Normal View History

#!/bin/bash
# Backend Project Initialization Script
# Usage: ./init_backend_project.sh <project-name> <framework>
# Frameworks: express, fastapi, django, nestjs, flask
set -e
PROJECT_NAME=$1
FRAMEWORK=$2
if [ -z "$PROJECT_NAME" ] || [ -z "$FRAMEWORK" ]; then
echo "Usage: $0 <project-name> <framework>"
echo "Supported frameworks: express, fastapi, django, nestjs, flask"
exit 1
fi
echo "🚀 Initializing backend project: $PROJECT_NAME"
echo "📦 Framework: $FRAMEWORK"
mkdir -p "$PROJECT_NAME"
cd "$PROJECT_NAME"
# Create base directory structure
mkdir -p src/{config,models,controllers,services,middleware,routes,utils}
mkdir -p tests/{unit,integration}
mkdir -p docs
mkdir -p migrations
case $FRAMEWORK in
express|nestjs)
echo "Setting up Node.js project..."
cat > package.json << 'EOF'
{
"name": "PROJECT_NAME",
"version": "1.0.0",
"description": "Backend API",
"main": "src/index.js",
"scripts": {
"dev": "nodemon src/index.js",
"start": "node src/index.js",
"test": "jest",
"migrate": "node scripts/migrate.js"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.0.3",
"cors": "^2.8.5",
"helmet": "^7.0.0",
"bcrypt": "^5.1.0",
"jsonwebtoken": "^9.0.0"
},
"devDependencies": {
"nodemon": "^3.0.1",
"jest": "^29.5.0"
}
}
EOF
sed -i "s/PROJECT_NAME/$PROJECT_NAME/g" package.json
cat > src/index.js << 'EOF'
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
require('dotenv').config();
const app = express();
// Middleware
app.use(helmet());
app.use(cors());
app.use(express.json());
// Health check
app.get('/health', (req, res) => {
res.json({ status: 'ok' });
});
// Routes will be imported here
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`🚀 Server running on port ${PORT}`);
});
EOF
;;
fastapi|flask)
echo "Setting up Python project..."
cat > requirements.txt << 'EOF'
fastapi==0.104.1
uvicorn==0.24.0
sqlalchemy==2.0.23
pydantic==2.5.0
python-dotenv==1.0.0
bcrypt==4.1.1
python-jose[cryptography]==3.3.0
python-multipart==0.0.6
pytest==7.4.3
EOF
cat > src/main.py << 'EOF'
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import os
from dotenv import load_dotenv
load_dotenv()
app = FastAPI(title="API", version="1.0.0")
# CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/health")
def health_check():
return {"status": "ok"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", 8000)))
EOF
;;
django)
echo "Setting up Django project..."
cat > requirements.txt << 'EOF'
django==4.2.7
djangorestframework==3.14.0
django-cors-headers==4.3.0
psycopg2-binary==2.9.9
python-dotenv==1.0.0
djangorestframework-simplejwt==5.3.0
EOF
;;
esac
# Create .env.example
cat > .env.example << 'EOF'
# Server
PORT=3000
NODE_ENV=development
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
# Authentication
JWT_SECRET=your-secret-key-change-in-production
JWT_EXPIRES_IN=24h
# CORS
ALLOWED_ORIGINS=http://localhost:5173
# External Services (add as needed)
# AWS_ACCESS_KEY_ID=
# AWS_SECRET_ACCESS_KEY=
# STRIPE_SECRET_KEY=
# SENDGRID_API_KEY=
EOF
# Create README
cat > README.md << EOF
# $PROJECT_NAME
Backend API built with $FRAMEWORK
## Setup
1. Install dependencies:
\`\`\`bash
npm install # or pip install -r requirements.txt
\`\`\`
2. Configure environment:
\`\`\`bash
cp .env.example .env
# Edit .env with your configuration
\`\`\`
3. Run migrations:
\`\`\`bash
npm run migrate # or python manage.py migrate
\`\`\`
4. Start development server:
\`\`\`bash
npm run dev # or uvicorn src.main:app --reload
\`\`\`
## API Documentation
See \`docs/API.md\` for endpoint documentation.
## Testing
\`\`\`bash
npm test # or pytest
\`\`\`
EOF
# Create .gitignore
cat > .gitignore << 'EOF'
node_modules/
__pycache__/
*.pyc
.env
.venv/
venv/
dist/
build/
*.log
.DS_Store
.idea/
.vscode/
*.db
*.sqlite3
coverage/
.pytest_cache/
EOF
echo "✅ Project initialized successfully!"
echo ""
echo "Next steps:"
echo " 1. cd $PROJECT_NAME"
echo " 2. Install dependencies"
echo " 3. Configure .env file"
echo " 4. Start development server"