create-stackr 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +642 -0
- package/bin/cli.js +12 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +113 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/dependencies.d.ts +82 -0
- package/dist/config/dependencies.d.ts.map +1 -0
- package/dist/config/dependencies.js +82 -0
- package/dist/config/dependencies.js.map +1 -0
- package/dist/config/presets.d.ts +3 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/presets.js +174 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/generators/index.d.ts +40 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +130 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/onboarding.d.ts +8 -0
- package/dist/generators/onboarding.d.ts.map +1 -0
- package/dist/generators/onboarding.js +141 -0
- package/dist/generators/onboarding.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/features.d.ts +14 -0
- package/dist/prompts/features.d.ts.map +1 -0
- package/dist/prompts/features.js +96 -0
- package/dist/prompts/features.js.map +1 -0
- package/dist/prompts/index.d.ts +3 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +93 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/onboarding.d.ts +6 -0
- package/dist/prompts/onboarding.d.ts.map +1 -0
- package/dist/prompts/onboarding.js +37 -0
- package/dist/prompts/onboarding.js.map +1 -0
- package/dist/prompts/orm.d.ts +3 -0
- package/dist/prompts/orm.d.ts.map +1 -0
- package/dist/prompts/orm.js +23 -0
- package/dist/prompts/orm.js.map +1 -0
- package/dist/prompts/packageManager.d.ts +2 -0
- package/dist/prompts/packageManager.d.ts.map +1 -0
- package/dist/prompts/packageManager.js +18 -0
- package/dist/prompts/packageManager.js.map +1 -0
- package/dist/prompts/platform.d.ts +3 -0
- package/dist/prompts/platform.d.ts.map +1 -0
- package/dist/prompts/platform.js +21 -0
- package/dist/prompts/platform.js.map +1 -0
- package/dist/prompts/preset.d.ts +4 -0
- package/dist/prompts/preset.d.ts.map +1 -0
- package/dist/prompts/preset.js +165 -0
- package/dist/prompts/preset.js.map +1 -0
- package/dist/prompts/project.d.ts +2 -0
- package/dist/prompts/project.d.ts.map +1 -0
- package/dist/prompts/project.js +27 -0
- package/dist/prompts/project.js.map +1 -0
- package/dist/prompts/sdks.d.ts +2 -0
- package/dist/prompts/sdks.d.ts.map +1 -0
- package/dist/prompts/sdks.js +46 -0
- package/dist/prompts/sdks.js.map +1 -0
- package/dist/types/index.d.ts +77 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +25 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cleanup.d.ts +5 -0
- package/dist/utils/cleanup.d.ts.map +1 -0
- package/dist/utils/cleanup.js +38 -0
- package/dist/utils/cleanup.js.map +1 -0
- package/dist/utils/copy.d.ts +10 -0
- package/dist/utils/copy.d.ts.map +1 -0
- package/dist/utils/copy.js +53 -0
- package/dist/utils/copy.js.map +1 -0
- package/dist/utils/errors.d.ts +33 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +136 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/git.d.ts +5 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +33 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +22 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package.d.ts +16 -0
- package/dist/utils/package.d.ts.map +1 -0
- package/dist/utils/package.js +86 -0
- package/dist/utils/package.js.map +1 -0
- package/dist/utils/system-validation.d.ts +9 -0
- package/dist/utils/system-validation.d.ts.map +1 -0
- package/dist/utils/system-validation.js +31 -0
- package/dist/utils/system-validation.js.map +1 -0
- package/dist/utils/template.d.ts +20 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +234 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/validation.d.ts +8 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +94 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +96 -0
- package/templates/base/backend/.dockerignore.ejs +62 -0
- package/templates/base/backend/.env.example.ejs +116 -0
- package/templates/base/backend/Dockerfile.ejs +142 -0
- package/templates/base/backend/controllers/event-queue/index.ts +20 -0
- package/templates/base/backend/controllers/event-queue/workers/user.ts +39 -0
- package/templates/base/backend/controllers/rest-api/index.ts +48 -0
- package/templates/base/backend/controllers/rest-api/plugins/auth.ts +152 -0
- package/templates/base/backend/controllers/rest-api/plugins/config.ts +64 -0
- package/templates/base/backend/controllers/rest-api/plugins/error-handler.ts +118 -0
- package/templates/base/backend/controllers/rest-api/routes/auth.ts.ejs +180 -0
- package/templates/base/backend/controllers/rest-api/routes/device-sessions.ts +197 -0
- package/templates/base/backend/controllers/rest-api/routes/oauth-web.ts.ejs +375 -0
- package/templates/base/backend/controllers/rest-api/server.ts.ejs +87 -0
- package/templates/base/backend/domain/device-session/repository.drizzle.ts +209 -0
- package/templates/base/backend/domain/device-session/repository.prisma.ts +248 -0
- package/templates/base/backend/domain/device-session/schema.ts +72 -0
- package/templates/base/backend/domain/session/repository.drizzle.ts +72 -0
- package/templates/base/backend/domain/session/repository.prisma.ts +72 -0
- package/templates/base/backend/domain/session/schema.ts +29 -0
- package/templates/base/backend/domain/user/repository.drizzle.ts +127 -0
- package/templates/base/backend/domain/user/repository.prisma.ts +115 -0
- package/templates/base/backend/domain/user/schema.ts +14 -0
- package/templates/base/backend/drizzle/schema.drizzle.ts +111 -0
- package/templates/base/backend/drizzle.config.drizzle.ts +13 -0
- package/templates/base/backend/lib/auth.drizzle.ts.ejs +104 -0
- package/templates/base/backend/lib/auth.prisma.ts.ejs +97 -0
- package/templates/base/backend/lib/constants.ts.ejs +29 -0
- package/templates/base/backend/package.json.ejs +50 -0
- package/templates/base/backend/prisma/schema.prisma.ejs +102 -0
- package/templates/base/backend/prisma.config.prisma.ts +12 -0
- package/templates/base/backend/tsconfig.json +39 -0
- package/templates/base/backend/utils/db.drizzle.ts +41 -0
- package/templates/base/backend/utils/db.prisma.ts +51 -0
- package/templates/base/backend/utils/email.ts.ejs +35 -0
- package/templates/base/backend/utils/errors.ts +348 -0
- package/templates/base/backend/utils/redis.ts.ejs +279 -0
- package/templates/base/mobile/.env.example.ejs +35 -0
- package/templates/base/mobile/.gitignore.ejs +167 -0
- package/templates/base/mobile/app/+not-found.tsx +85 -0
- package/templates/base/mobile/app/_layout.tsx.ejs +71 -0
- package/templates/base/mobile/app.json.ejs +88 -0
- package/templates/base/mobile/assets/images/adaptive-icon.png +0 -0
- package/templates/base/mobile/assets/images/favicon.png +0 -0
- package/templates/base/mobile/assets/images/icon.png +0 -0
- package/templates/base/mobile/assets/images/onboarding_page_1.png +0 -0
- package/templates/base/mobile/assets/images/onboarding_page_2.png +0 -0
- package/templates/base/mobile/assets/images/onboarding_page_3.png +0 -0
- package/templates/base/mobile/assets/images/paywall_image.png +0 -0
- package/templates/base/mobile/assets/images/splash.png +0 -0
- package/templates/base/mobile/eas.json.ejs +49 -0
- package/templates/base/mobile/metro.config.js +9 -0
- package/templates/base/mobile/package.json.ejs +53 -0
- package/templates/base/mobile/src/components/ui/Button.tsx +131 -0
- package/templates/base/mobile/src/components/ui/Card.tsx +68 -0
- package/templates/base/mobile/src/components/ui/IconSymbol.tsx +90 -0
- package/templates/base/mobile/src/components/ui/Input.tsx +142 -0
- package/templates/base/mobile/src/components/ui/LoadingSpinner.tsx +98 -0
- package/templates/base/mobile/src/components/ui/OnboardingLayout.tsx +356 -0
- package/templates/base/mobile/src/components/ui/PaywallLayout.tsx +311 -0
- package/templates/base/mobile/src/components/ui/Skeleton.tsx +58 -0
- package/templates/base/mobile/src/components/ui/index.ts +6 -0
- package/templates/base/mobile/src/constants/Theme.ts +163 -0
- package/templates/base/mobile/src/context/ThemeContext.tsx +157 -0
- package/templates/base/mobile/src/lib/auth-client.ts.ejs +51 -0
- package/templates/base/mobile/src/services/api.ts.ejs +71 -0
- package/templates/base/mobile/src/services/errorService.ts +179 -0
- package/templates/base/mobile/src/services/sdkInitializer.ts.ejs +36 -0
- package/templates/base/mobile/src/store/index.ts.ejs +18 -0
- package/templates/base/mobile/src/store/ui.store.ts +100 -0
- package/templates/base/mobile/src/utils/formatters.ts +105 -0
- package/templates/base/mobile/src/utils/logger.ts +73 -0
- package/templates/base/mobile/src/utils/responsive.ts +234 -0
- package/templates/base/mobile/tsconfig.json +32 -0
- package/templates/base/web/.env.example.ejs +26 -0
- package/templates/base/web/components.json +22 -0
- package/templates/base/web/eslint.config.mjs +18 -0
- package/templates/base/web/next.config.ts +7 -0
- package/templates/base/web/package.json.ejs +35 -0
- package/templates/base/web/postcss.config.mjs +7 -0
- package/templates/base/web/public/.gitkeep +0 -0
- package/templates/base/web/public/file.svg +1 -0
- package/templates/base/web/public/globe.svg +1 -0
- package/templates/base/web/public/next.svg +1 -0
- package/templates/base/web/public/vercel.svg +1 -0
- package/templates/base/web/public/window.svg +1 -0
- package/templates/base/web/src/app/favicon.ico +0 -0
- package/templates/base/web/src/app/globals.css +152 -0
- package/templates/base/web/src/app/layout.tsx.ejs +54 -0
- package/templates/base/web/src/app/page.tsx.ejs +92 -0
- package/templates/base/web/src/components/auth/auth-hydrator.tsx.ejs +19 -0
- package/templates/base/web/src/components/auth/protected-route.tsx.ejs +109 -0
- package/templates/base/web/src/components/providers/device-session-setup.tsx.ejs +56 -0
- package/templates/base/web/src/components/providers/theme-provider.tsx +17 -0
- package/templates/base/web/src/components/theme-toggle.tsx +34 -0
- package/templates/base/web/src/components/ui/button.tsx +62 -0
- package/templates/base/web/src/components/ui/card.tsx +92 -0
- package/templates/base/web/src/components/ui/input.tsx +21 -0
- package/templates/base/web/src/components/ui/label.tsx +24 -0
- package/templates/base/web/src/components/ui/skeleton.tsx +13 -0
- package/templates/base/web/src/components/ui/spinner.tsx +20 -0
- package/templates/base/web/src/hooks/use-device-session.ts.ejs +40 -0
- package/templates/base/web/src/hooks/use-session.ts.ejs +56 -0
- package/templates/base/web/src/lib/auth/actions.ts.ejs +334 -0
- package/templates/base/web/src/lib/auth/config.ts.ejs +65 -0
- package/templates/base/web/src/lib/auth/cookies.ts.ejs +74 -0
- package/templates/base/web/src/lib/auth/index.ts.ejs +40 -0
- package/templates/base/web/src/lib/auth/oauth.ts.ejs +72 -0
- package/templates/base/web/src/lib/auth/pkce.ts.ejs +48 -0
- package/templates/base/web/src/lib/auth/sessions.ts.ejs +135 -0
- package/templates/base/web/src/lib/auth/user-agent.ts.ejs +47 -0
- package/templates/base/web/src/lib/device/actions.ts.ejs +148 -0
- package/templates/base/web/src/lib/device/id.ts.ejs +74 -0
- package/templates/base/web/src/lib/utils.ts +6 -0
- package/templates/base/web/src/proxy.ts.ejs +66 -0
- package/templates/base/web/src/store/auth.store.ts.ejs +89 -0
- package/templates/base/web/src/store/deviceSession.store.ts.ejs +141 -0
- package/templates/base/web/tsconfig.json +34 -0
- package/templates/features/mobile/auth/app/(auth)/_layout.tsx +16 -0
- package/templates/features/mobile/auth/app/(auth)/login.tsx +86 -0
- package/templates/features/mobile/auth/app/(auth)/register.tsx +86 -0
- package/templates/features/mobile/auth/components/auth/LoginForm.tsx.ejs +349 -0
- package/templates/features/mobile/auth/components/auth/RegisterForm.tsx.ejs +407 -0
- package/templates/features/mobile/auth/components/auth/index.ts +2 -0
- package/templates/features/mobile/auth/hooks/index.ts.ejs +1 -0
- package/templates/features/mobile/auth/hooks/useAuth.ts.ejs +367 -0
- package/templates/features/mobile/auth/services/deviceSession.ts +370 -0
- package/templates/features/mobile/auth/store/deviceSession.store.ts +326 -0
- package/templates/features/mobile/onboarding/app/(onboarding)/_layout.tsx.ejs +11 -0
- package/templates/features/mobile/onboarding/app/(onboarding)/page-1.tsx.ejs +52 -0
- package/templates/features/mobile/onboarding/app/(onboarding)/page-2.tsx.ejs +52 -0
- package/templates/features/mobile/onboarding/app/(onboarding)/page-3.tsx.ejs +60 -0
- package/templates/features/mobile/paywall/app/paywall.tsx +550 -0
- package/templates/features/mobile/tabs/app/(tabs)/_layout.tsx +26 -0
- package/templates/features/mobile/tabs/app/(tabs)/index.tsx +565 -0
- package/templates/features/web/.gitkeep +0 -0
- package/templates/features/web/auth/app/(app)/dashboard/dashboard-client.tsx.ejs +166 -0
- package/templates/features/web/auth/app/(app)/dashboard/page.tsx.ejs +24 -0
- package/templates/features/web/auth/app/(app)/layout.tsx.ejs +43 -0
- package/templates/features/web/auth/app/(app)/settings/sessions/page.tsx.ejs +29 -0
- package/templates/features/web/auth/app/(app)/settings/sessions/sessions-client.tsx.ejs +77 -0
- package/templates/features/web/auth/app/(auth)/forgot-password/page.tsx.ejs +127 -0
- package/templates/features/web/auth/app/(auth)/layout.tsx.ejs +32 -0
- package/templates/features/web/auth/app/(auth)/login/page.tsx.ejs +35 -0
- package/templates/features/web/auth/app/(auth)/register/page.tsx.ejs +19 -0
- package/templates/features/web/auth/app/(auth)/reset-password/page.tsx.ejs +40 -0
- package/templates/features/web/auth/app/(auth)/verify-email/page.tsx.ejs +198 -0
- package/templates/features/web/auth/app/auth/callback/route.ts.ejs +152 -0
- package/templates/features/web/auth/components/auth/login-form.tsx.ejs +100 -0
- package/templates/features/web/auth/components/auth/oauth-buttons.tsx.ejs +126 -0
- package/templates/features/web/auth/components/auth/password-reset-form.tsx.ejs +103 -0
- package/templates/features/web/auth/components/auth/register-form.tsx.ejs +139 -0
- package/templates/features/web/auth/components/settings/session-card.tsx.ejs +132 -0
- package/templates/integrations/mobile/adjust/services/adjustService.ts.ejs +163 -0
- package/templates/integrations/mobile/adjust/store/adjust.store.ts +243 -0
- package/templates/integrations/mobile/att/services/attService.ts +84 -0
- package/templates/integrations/mobile/att/services/trackingPermissions.ts +208 -0
- package/templates/integrations/mobile/att/store/att.store.ts +162 -0
- package/templates/integrations/mobile/revenuecat/services/revenuecatService.ts.ejs +174 -0
- package/templates/integrations/mobile/revenuecat/store/revenuecat.store.ts +286 -0
- package/templates/integrations/mobile/scate/services/scateService.ts.ejs +85 -0
- package/templates/integrations/mobile/scate/store/scate.store.ts +125 -0
- package/templates/integrations/web/.gitkeep +0 -0
- package/templates/shared/.env.example.ejs +21 -0
- package/templates/shared/.gitignore.ejs +145 -0
- package/templates/shared/README.md.ejs +134 -0
- package/templates/shared/docker-compose.prod.yml.ejs +120 -0
- package/templates/shared/docker-compose.yml.ejs +129 -0
- package/templates/shared/scripts/docker-dev.sh.ejs +395 -0
- package/templates/shared/scripts/docker-prod.sh.ejs +542 -0
- package/templates/shared/scripts/setup.sh.ejs +979 -0
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Development Environment Docker Script
|
|
4
|
+
# Manages the development Docker environment
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# Colors for output
|
|
9
|
+
RED='\033[0;31m'
|
|
10
|
+
GREEN='\033[0;32m'
|
|
11
|
+
YELLOW='\033[1;33m'
|
|
12
|
+
BLUE='\033[0;34m'
|
|
13
|
+
NC='\033[0m'
|
|
14
|
+
|
|
15
|
+
print_status() {
|
|
16
|
+
echo -e "${GREEN}✓${NC} $1"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
print_info() {
|
|
20
|
+
echo -e "${BLUE}ℹ${NC} $1"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
print_warning() {
|
|
24
|
+
echo -e "${YELLOW}⚠${NC} $1"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
print_error() {
|
|
28
|
+
echo -e "${RED}✗${NC} $1"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Function to show usage
|
|
32
|
+
usage() {
|
|
33
|
+
echo "Full-Stack Auth Boilerplate - Development Environment"
|
|
34
|
+
echo "================================================"
|
|
35
|
+
echo ""
|
|
36
|
+
echo "Usage: $0 [COMMAND] [OPTIONS]"
|
|
37
|
+
echo ""
|
|
38
|
+
echo "Commands:"
|
|
39
|
+
echo " start Start the development environment"
|
|
40
|
+
echo " stop Stop the development environment"
|
|
41
|
+
echo " restart Restart the development environment"
|
|
42
|
+
echo " logs Show logs (specify service: rest-api<% if (backend.eventQueue) { %>, event-queue<% } %>, database<% if (backend.eventQueue) { %>, redis<% } %>)"
|
|
43
|
+
echo " status Show status of all services"
|
|
44
|
+
echo " clean Clean up containers and volumes"
|
|
45
|
+
echo " shell Access microservice container shell"
|
|
46
|
+
echo " db Access database shell"
|
|
47
|
+
echo " health Perform health check on all services"
|
|
48
|
+
echo ""
|
|
49
|
+
echo "Options:"
|
|
50
|
+
echo " --with-pgadmin Include PgAdmin service"
|
|
51
|
+
echo " --build Force rebuild containers"
|
|
52
|
+
echo " --only-rest-api Start only REST API service"
|
|
53
|
+
<% if (backend.eventQueue) { %>
|
|
54
|
+
echo " --only-event-queue Start only Event Queue service"
|
|
55
|
+
<% } %>
|
|
56
|
+
echo ""
|
|
57
|
+
echo "Examples:"
|
|
58
|
+
echo " $0 start # Start all services<% if (backend.eventQueue) { %> (includes Redis)<% } %>"
|
|
59
|
+
echo " $0 start --with-pgadmin # Start with PgAdmin"
|
|
60
|
+
echo " $0 start --only-rest-api # Start only REST API"
|
|
61
|
+
echo " $0 logs rest-api # Show REST API logs"
|
|
62
|
+
<% if (backend.eventQueue) { %>
|
|
63
|
+
echo " $0 logs event-queue # Show Event Queue logs"
|
|
64
|
+
echo " $0 logs redis # Show Redis logs"
|
|
65
|
+
<% } %>
|
|
66
|
+
echo " $0 restart --build # Restart with rebuild"
|
|
67
|
+
echo ""
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# Parse command line arguments
|
|
71
|
+
parse_args() {
|
|
72
|
+
COMMAND=""
|
|
73
|
+
SERVICE=""
|
|
74
|
+
WITH_PGADMIN=false
|
|
75
|
+
FORCE_BUILD=false
|
|
76
|
+
ONLY_REST_API=false
|
|
77
|
+
<% if (backend.eventQueue) { %>
|
|
78
|
+
ONLY_EVENT_QUEUE=false
|
|
79
|
+
<% } %>
|
|
80
|
+
|
|
81
|
+
while [[ $# -gt 0 ]]; do
|
|
82
|
+
case $1 in
|
|
83
|
+
start|stop|restart|logs|status|clean|shell|db|health)
|
|
84
|
+
COMMAND="$1"
|
|
85
|
+
shift
|
|
86
|
+
;;
|
|
87
|
+
rest-api<% if (backend.eventQueue) { %>|event-queue<% } %>|database<% if (backend.eventQueue) { %>|redis<% } %>)
|
|
88
|
+
SERVICE="$1"
|
|
89
|
+
shift
|
|
90
|
+
;;
|
|
91
|
+
--with-pgadmin)
|
|
92
|
+
WITH_PGADMIN=true
|
|
93
|
+
shift
|
|
94
|
+
;;
|
|
95
|
+
--build)
|
|
96
|
+
FORCE_BUILD=true
|
|
97
|
+
shift
|
|
98
|
+
;;
|
|
99
|
+
--only-rest-api)
|
|
100
|
+
ONLY_REST_API=true
|
|
101
|
+
shift
|
|
102
|
+
;;
|
|
103
|
+
<% if (backend.eventQueue) { %>
|
|
104
|
+
--only-event-queue)
|
|
105
|
+
ONLY_EVENT_QUEUE=true
|
|
106
|
+
shift
|
|
107
|
+
;;
|
|
108
|
+
<% } %>
|
|
109
|
+
-h|--help)
|
|
110
|
+
usage
|
|
111
|
+
exit 0
|
|
112
|
+
;;
|
|
113
|
+
*)
|
|
114
|
+
echo "Unknown option: $1"
|
|
115
|
+
usage
|
|
116
|
+
exit 1
|
|
117
|
+
;;
|
|
118
|
+
esac
|
|
119
|
+
done
|
|
120
|
+
|
|
121
|
+
if [ -z "$COMMAND" ]; then
|
|
122
|
+
usage
|
|
123
|
+
exit 1
|
|
124
|
+
fi
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# Build compose command with profiles
|
|
128
|
+
build_compose_cmd() {
|
|
129
|
+
local cmd="docker-compose"
|
|
130
|
+
|
|
131
|
+
# Handle microservices profiles
|
|
132
|
+
if [ "$ONLY_REST_API" = true ]; then
|
|
133
|
+
cmd="$cmd --profile rest-api"
|
|
134
|
+
<% if (backend.eventQueue) { %>
|
|
135
|
+
elif [ "$ONLY_EVENT_QUEUE" = true ]; then
|
|
136
|
+
cmd="$cmd --profile event-queue"
|
|
137
|
+
<% } %>
|
|
138
|
+
else
|
|
139
|
+
cmd="$cmd --profile all"
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
if [ "$WITH_PGADMIN" = true ]; then
|
|
144
|
+
cmd="$cmd --profile with-pgadmin"
|
|
145
|
+
fi
|
|
146
|
+
|
|
147
|
+
echo "$cmd"
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
# Start services
|
|
151
|
+
start_services() {
|
|
152
|
+
local compose_cmd=$(build_compose_cmd)
|
|
153
|
+
|
|
154
|
+
print_info "Starting development environment..."
|
|
155
|
+
|
|
156
|
+
if [ "$FORCE_BUILD" = true ]; then
|
|
157
|
+
print_info "Force rebuilding containers..."
|
|
158
|
+
$compose_cmd build --no-cache
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
# Start services
|
|
162
|
+
$compose_cmd up -d
|
|
163
|
+
|
|
164
|
+
print_status "Services started successfully!"
|
|
165
|
+
|
|
166
|
+
# Show service URLs
|
|
167
|
+
echo ""
|
|
168
|
+
print_info "Service URLs:"
|
|
169
|
+
|
|
170
|
+
if [ "$ONLY_REST_API" = true ]; then
|
|
171
|
+
echo " 🌐 REST API: http://localhost:8080"
|
|
172
|
+
<% if (backend.eventQueue) { %>
|
|
173
|
+
elif [ "$ONLY_EVENT_QUEUE" = true ]; then
|
|
174
|
+
echo " 📋 Event Queue: Running in background (no HTTP interface)"
|
|
175
|
+
<% } %>
|
|
176
|
+
else
|
|
177
|
+
echo " 🌐 REST API: http://localhost:8080"
|
|
178
|
+
<% if (backend.eventQueue) { %>
|
|
179
|
+
echo " 📋 Event Queue: Running in background (no HTTP interface)"
|
|
180
|
+
<% } %>
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
echo " 🗄️ Database: localhost:5432"
|
|
184
|
+
<% if (backend.eventQueue) { %>
|
|
185
|
+
echo " 🔄 Redis: localhost:6379"
|
|
186
|
+
<% } %>
|
|
187
|
+
|
|
188
|
+
if [ "$WITH_PGADMIN" = true ]; then
|
|
189
|
+
echo " 🔧 PgAdmin: http://localhost:8081"
|
|
190
|
+
echo " Login: admin@example.com / admin"
|
|
191
|
+
fi
|
|
192
|
+
|
|
193
|
+
echo ""
|
|
194
|
+
print_info "Use './scripts/docker-dev.sh logs' to view logs"
|
|
195
|
+
print_info "Use './scripts/docker-dev.sh status' to check service status"
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
# Stop services
|
|
199
|
+
stop_services() {
|
|
200
|
+
local compose_cmd=$(build_compose_cmd)
|
|
201
|
+
|
|
202
|
+
print_info "Stopping development environment..."
|
|
203
|
+
$compose_cmd down
|
|
204
|
+
print_status "Services stopped successfully!"
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
# Restart services
|
|
208
|
+
restart_services() {
|
|
209
|
+
local compose_cmd=$(build_compose_cmd)
|
|
210
|
+
|
|
211
|
+
print_info "Restarting development environment..."
|
|
212
|
+
|
|
213
|
+
if [ "$FORCE_BUILD" = true ]; then
|
|
214
|
+
print_info "Force rebuilding containers..."
|
|
215
|
+
$compose_cmd down
|
|
216
|
+
$compose_cmd build --no-cache
|
|
217
|
+
$compose_cmd up -d
|
|
218
|
+
else
|
|
219
|
+
$compose_cmd restart
|
|
220
|
+
fi
|
|
221
|
+
|
|
222
|
+
print_status "Services restarted successfully!"
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
# Show logs
|
|
226
|
+
show_logs() {
|
|
227
|
+
local compose_cmd=$(build_compose_cmd)
|
|
228
|
+
|
|
229
|
+
if [ -n "$SERVICE" ]; then
|
|
230
|
+
print_info "Showing logs for $SERVICE..."
|
|
231
|
+
$compose_cmd logs -f "$SERVICE"
|
|
232
|
+
else
|
|
233
|
+
print_info "Showing logs for all services..."
|
|
234
|
+
$compose_cmd logs -f
|
|
235
|
+
fi
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
# Show status
|
|
239
|
+
show_status() {
|
|
240
|
+
local compose_cmd=$(build_compose_cmd)
|
|
241
|
+
|
|
242
|
+
print_info "Service Status:"
|
|
243
|
+
$compose_cmd ps
|
|
244
|
+
|
|
245
|
+
echo ""
|
|
246
|
+
print_info "Container Health:"
|
|
247
|
+
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep auth_boilerplate || echo "No containers running"
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
# Clean up
|
|
251
|
+
clean_up() {
|
|
252
|
+
local compose_cmd=$(build_compose_cmd)
|
|
253
|
+
|
|
254
|
+
print_warning "This will remove all containers and volumes!"
|
|
255
|
+
read -p "Are you sure? (y/N): " -n 1 -r
|
|
256
|
+
echo
|
|
257
|
+
|
|
258
|
+
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
259
|
+
print_info "Cleaning up containers and volumes..."
|
|
260
|
+
$compose_cmd down -v --remove-orphans
|
|
261
|
+
|
|
262
|
+
# Remove unused volumes
|
|
263
|
+
docker volume prune -f
|
|
264
|
+
|
|
265
|
+
print_status "Cleanup complete!"
|
|
266
|
+
else
|
|
267
|
+
print_info "Cleanup cancelled"
|
|
268
|
+
fi
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
# Access backend shell
|
|
272
|
+
backend_shell() {
|
|
273
|
+
print_info "Accessing microservice container shell..."
|
|
274
|
+
|
|
275
|
+
# Try to access rest-api first<% if (backend.eventQueue) { %>, then event-queue<% } %>
|
|
276
|
+
if docker-compose exec rest-api sh 2>/dev/null; then
|
|
277
|
+
return
|
|
278
|
+
<% if (backend.eventQueue) { %>
|
|
279
|
+
elif docker-compose exec event-queue sh 2>/dev/null; then
|
|
280
|
+
return
|
|
281
|
+
<% } %>
|
|
282
|
+
else
|
|
283
|
+
print_error "No microservice containers are running"
|
|
284
|
+
print_info "Start services first: ./scripts/docker-dev.sh start"
|
|
285
|
+
print_info "Or specify a service: ./scripts/docker-dev.sh start --only-rest-api"
|
|
286
|
+
fi
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
# Access database shell
|
|
290
|
+
database_shell() {
|
|
291
|
+
print_info "Accessing database shell..."
|
|
292
|
+
docker-compose exec database psql -U postgres -d auth_boilerplate || {
|
|
293
|
+
print_error "Database container is not running"
|
|
294
|
+
print_info "Start services first: ./scripts/docker-dev.sh start"
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
# Health check
|
|
299
|
+
health_check() {
|
|
300
|
+
print_info "Performing health check..."
|
|
301
|
+
|
|
302
|
+
# Check if containers are running
|
|
303
|
+
if docker-compose ps | grep -q "Up"; then
|
|
304
|
+
print_status "Containers are running"
|
|
305
|
+
|
|
306
|
+
# Check REST API if it's running
|
|
307
|
+
if docker-compose ps | grep -q "rest_api.*Up"; then
|
|
308
|
+
if curl -sf http://localhost:8080/ > /dev/null 2>&1; then
|
|
309
|
+
print_status "REST API is responding"
|
|
310
|
+
else
|
|
311
|
+
print_warning "REST API is not responding"
|
|
312
|
+
fi
|
|
313
|
+
else
|
|
314
|
+
print_info "REST API service is not running"
|
|
315
|
+
fi
|
|
316
|
+
|
|
317
|
+
<% if (backend.eventQueue) { %>
|
|
318
|
+
# Check Event Queue if it's running
|
|
319
|
+
if docker-compose ps | grep -q "event_queue.*Up"; then
|
|
320
|
+
print_status "Event Queue service is running"
|
|
321
|
+
else
|
|
322
|
+
print_info "Event Queue service is not running"
|
|
323
|
+
fi
|
|
324
|
+
|
|
325
|
+
<% } %>
|
|
326
|
+
# Check database
|
|
327
|
+
if docker-compose exec -T database pg_isready -U postgres > /dev/null 2>&1; then
|
|
328
|
+
print_status "Database is ready"
|
|
329
|
+
else
|
|
330
|
+
print_warning "Database is not ready"
|
|
331
|
+
fi
|
|
332
|
+
|
|
333
|
+
<% if (backend.eventQueue) { %>
|
|
334
|
+
# Check Redis
|
|
335
|
+
if docker-compose exec -T redis redis-cli ping > /dev/null 2>&1; then
|
|
336
|
+
print_status "Redis is ready"
|
|
337
|
+
else
|
|
338
|
+
print_warning "Redis is not ready"
|
|
339
|
+
fi
|
|
340
|
+
<% } %>
|
|
341
|
+
else
|
|
342
|
+
print_error "No containers are running"
|
|
343
|
+
print_info "Start services first: ./scripts/docker-dev.sh start"
|
|
344
|
+
fi
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
# Main execution
|
|
348
|
+
main() {
|
|
349
|
+
# Check if we're in the right directory
|
|
350
|
+
if [ ! -f "docker-compose.yml" ]; then
|
|
351
|
+
print_error "docker-compose.yml not found!"
|
|
352
|
+
print_info "Please run this script from the project root directory"
|
|
353
|
+
exit 1
|
|
354
|
+
fi
|
|
355
|
+
|
|
356
|
+
parse_args "$@"
|
|
357
|
+
|
|
358
|
+
case $COMMAND in
|
|
359
|
+
start)
|
|
360
|
+
start_services
|
|
361
|
+
;;
|
|
362
|
+
stop)
|
|
363
|
+
stop_services
|
|
364
|
+
;;
|
|
365
|
+
restart)
|
|
366
|
+
restart_services
|
|
367
|
+
;;
|
|
368
|
+
logs)
|
|
369
|
+
show_logs
|
|
370
|
+
;;
|
|
371
|
+
status)
|
|
372
|
+
show_status
|
|
373
|
+
;;
|
|
374
|
+
clean)
|
|
375
|
+
clean_up
|
|
376
|
+
;;
|
|
377
|
+
shell)
|
|
378
|
+
backend_shell
|
|
379
|
+
;;
|
|
380
|
+
db)
|
|
381
|
+
database_shell
|
|
382
|
+
;;
|
|
383
|
+
health)
|
|
384
|
+
health_check
|
|
385
|
+
;;
|
|
386
|
+
*)
|
|
387
|
+
print_error "Unknown command: $COMMAND"
|
|
388
|
+
usage
|
|
389
|
+
exit 1
|
|
390
|
+
;;
|
|
391
|
+
esac
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
# Run main function
|
|
395
|
+
main "$@"
|