@idealyst/cli 1.0.40 โ†’ 1.0.43

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.
Files changed (89) hide show
  1. package/dist/generators/api.js +1 -2
  2. package/dist/generators/api.js.map +1 -1
  3. package/dist/generators/database.js +1 -2
  4. package/dist/generators/database.js.map +1 -1
  5. package/dist/generators/fullstack.js +371 -0
  6. package/dist/generators/fullstack.js.map +1 -0
  7. package/dist/generators/index.js +5 -0
  8. package/dist/generators/index.js.map +1 -1
  9. package/dist/generators/native.js +2 -1
  10. package/dist/generators/native.js.map +1 -1
  11. package/dist/generators/shared.js +1 -2
  12. package/dist/generators/shared.js.map +1 -1
  13. package/dist/generators/utils.js +71 -7
  14. package/dist/generators/utils.js.map +1 -1
  15. package/dist/generators/web.js +1 -2
  16. package/dist/generators/web.js.map +1 -1
  17. package/dist/generators/workspace.js +56 -2
  18. package/dist/generators/workspace.js.map +1 -1
  19. package/dist/index.js +50 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/templates/database/.env.example +1 -8
  22. package/dist/templates/database/README.md +29 -74
  23. package/dist/templates/database/package.json +20 -34
  24. package/dist/templates/database/prisma/seed.ts +11 -11
  25. package/dist/templates/database/schema.prisma +97 -0
  26. package/dist/templates/database/src/index.ts +12 -8
  27. package/dist/templates/database/src/validators.ts +10 -0
  28. package/dist/templates/database/tsconfig.json +9 -23
  29. package/dist/templates/native/src/App-with-trpc-and-shared.tsx +266 -0
  30. package/dist/templates/shared/package.json +28 -3
  31. package/dist/templates/shared/src/components/index.ts +392 -0
  32. package/dist/templates/shared/src/index.ts +59 -1
  33. package/dist/templates/shared/src/types/index.ts +148 -0
  34. package/dist/templates/shared/src/utils/index.ts +278 -0
  35. package/dist/templates/web/package.json +2 -2
  36. package/dist/templates/web/src/App-with-trpc-and-shared.tsx +304 -0
  37. package/dist/templates/workspace/.devcontainer/Dockerfile +1 -1
  38. package/dist/templates/workspace/.devcontainer/devcontainer.json +7 -2
  39. package/dist/templates/workspace/.devcontainer/docker-compose.yml +14 -0
  40. package/dist/templates/workspace/.devcontainer/figma-mcp.sh +32 -0
  41. package/dist/templates/workspace/.devcontainer/setup.sh +3 -0
  42. package/dist/templates/workspace/setup.sh +22 -197
  43. package/dist/templates/workspace/tsconfig.json +32 -0
  44. package/dist/types/generators/fullstack.d.ts +2 -0
  45. package/dist/types/generators/index.d.ts +1 -0
  46. package/dist/types/generators/utils.d.ts +4 -1
  47. package/dist/types/types.d.ts +3 -1
  48. package/package.json +1 -1
  49. package/templates/database/.env.example +1 -8
  50. package/templates/database/README.md +29 -74
  51. package/templates/database/package.json +20 -34
  52. package/templates/database/prisma/seed.ts +11 -11
  53. package/templates/database/schema.prisma +97 -0
  54. package/templates/database/src/index.ts +12 -8
  55. package/templates/database/src/validators.ts +10 -0
  56. package/templates/database/tsconfig.json +9 -23
  57. package/templates/native/src/App-with-trpc-and-shared.tsx +266 -0
  58. package/templates/shared/package.json +28 -3
  59. package/templates/shared/src/components/index.ts +392 -0
  60. package/templates/shared/src/index.ts +59 -1
  61. package/templates/shared/src/types/index.ts +148 -0
  62. package/templates/shared/src/utils/index.ts +278 -0
  63. package/templates/web/package.json +1 -1
  64. package/templates/web/src/App-with-trpc-and-shared.tsx +304 -0
  65. package/templates/workspace/.devcontainer/devcontainer.json +7 -2
  66. package/templates/workspace/.devcontainer/docker-compose.yml +14 -0
  67. package/templates/workspace/.devcontainer/figma-mcp.sh +32 -0
  68. package/templates/workspace/.devcontainer/setup.sh +3 -0
  69. package/templates/workspace/setup.sh +22 -197
  70. package/templates/workspace/tsconfig.json +32 -0
  71. package/dist/templates/database/__tests__/database.test.ts +0 -14
  72. package/dist/templates/database/jest.config.js +0 -19
  73. package/dist/templates/database/jest.setup.js +0 -11
  74. package/dist/templates/database/prisma/schema.prisma +0 -21
  75. package/dist/templates/database/src/client.ts +0 -18
  76. package/dist/templates/database/src/schemas.ts +0 -26
  77. package/dist/templates/workspace/scripts/docker/db-backup.sh +0 -230
  78. package/dist/templates/workspace/scripts/docker/deploy.sh +0 -212
  79. package/dist/templates/workspace/scripts/test-runner.js +0 -120
  80. package/templates/database/__tests__/database.test.ts +0 -14
  81. package/templates/database/jest.config.js +0 -19
  82. package/templates/database/jest.setup.js +0 -11
  83. package/templates/database/prisma/schema.prisma +0 -21
  84. package/templates/database/src/client.ts +0 -18
  85. package/templates/database/src/schemas.ts +0 -26
  86. package/templates/workspace/scripts/docker/db-backup.sh +0 -230
  87. package/templates/workspace/scripts/docker/deploy.sh +0 -212
  88. package/templates/workspace/scripts/docker-build.sh +0 -151
  89. package/templates/workspace/scripts/test-runner.js +0 -120
@@ -1,205 +1,30 @@
1
1
  #!/bin/bash
2
2
 
3
- # Quick setup script for Idealyst workspace
4
- # Usage: ./setup.sh [development|production]
3
+ # Idealyst Framework Workspace Setup Script
4
+ # This script sets up the development environment for your workspace
5
5
 
6
- set -e
6
+ echo "๐Ÿ—๏ธ Setting up Idealyst Framework workspace..."
7
7
 
8
- ENVIRONMENT=${1:-development}
9
- PROJECT_NAME="{{packageName}}"
8
+ # Install dependencies
9
+ echo "๐Ÿ“ฆ Installing dependencies..."
10
+ yarn install
10
11
 
11
- echo "๐Ÿš€ Setting up Idealyst workspace..."
12
- echo "Environment: $ENVIRONMENT"
13
- echo "Project: $PROJECT_NAME"
14
- echo ""
15
-
16
- # Function to generate random password
17
- generate_password() {
18
- openssl rand -base64 32 | tr -d "=+/" | cut -c1-25
19
- }
20
-
21
- # Function to generate JWT secret
22
- generate_jwt_secret() {
23
- openssl rand -base64 64 | tr -d "=+/" | cut -c1-50
24
- }
25
-
26
- # Function to setup development environment
27
- setup_development() {
28
- echo "๐Ÿ”ง Setting up development environment..."
29
-
30
- if [ ! -f ".env" ]; then
31
- echo "๐Ÿ“ Creating .env from template..."
32
- cp .env.example .env
33
- echo "โœ… Created .env file"
34
- else
35
- echo "โš ๏ธ .env file already exists, skipping..."
36
- fi
37
-
38
- echo ""
39
- echo "๐Ÿณ Starting development containers..."
40
- if command -v docker-compose &> /dev/null; then
41
- docker-compose up -d postgres redis
42
- echo "โœ… Database and Redis started"
43
-
44
- echo "โณ Waiting for services to be ready..."
45
- sleep 10
46
-
47
- echo "๐Ÿš€ Starting development environment..."
48
- echo "๐Ÿ’ก You can now:"
49
- echo " - Run 'docker-compose up -d dev' for full dev container"
50
- echo " - Run 'yarn dev' for local development"
51
- echo " - Open in VS Code and select 'Reopen in Container'"
52
- else
53
- echo "โŒ Docker Compose not found. Please install Docker and Docker Compose."
54
- exit 1
55
- fi
56
- }
57
-
58
- # Function to setup production environment
59
- setup_production() {
60
- echo "๐Ÿญ Setting up production environment..."
61
-
62
- if [ ! -f ".env" ]; then
63
- echo "๐Ÿ“ Creating .env from production template..."
64
- cp .env.production .env
65
-
66
- # Generate secure passwords and secrets
67
- echo "๐Ÿ” Generating secure credentials..."
68
-
69
- DB_PASSWORD=$(generate_password)
70
- JWT_SECRET=$(generate_jwt_secret)
71
- SESSION_SECRET=$(generate_jwt_secret)
72
- ENCRYPTION_KEY=$(openssl rand -base64 32 | cut -c1-32)
73
- GRAFANA_PASSWORD=$(generate_password)
74
-
75
- # Replace placeholders in .env file
76
- sed -i "s/CHANGE_THIS_STRONG_PASSWORD/$DB_PASSWORD/g" .env
77
- sed -i "s/CHANGE_THIS_VERY_STRONG_JWT_SECRET_MINIMUM_32_CHARACTERS/$JWT_SECRET/g" .env
78
- sed -i "s/CHANGE_THIS_VERY_STRONG_SESSION_SECRET/$SESSION_SECRET/g" .env
79
- sed -i "s/CHANGE_THIS_32_CHARACTER_ENCRYPTION_KEY/$ENCRYPTION_KEY/g" .env
80
- sed -i "s/CHANGE_THIS_STRONG_PASSWORD/$GRAFANA_PASSWORD/g" .env
81
-
82
- echo "โœ… Created .env with secure credentials"
83
- echo ""
84
- echo "๐Ÿ” Generated Credentials (save these securely!):"
85
- echo " Database Password: $DB_PASSWORD"
86
- echo " JWT Secret: $JWT_SECRET"
87
- echo " Grafana Password: $GRAFANA_PASSWORD"
88
- echo ""
89
- echo "โš ๏ธ IMPORTANT: Edit .env to configure your domain and other settings!"
90
-
91
- else
92
- echo "โš ๏ธ .env file already exists. Please verify production settings."
93
- fi
94
-
95
- echo ""
96
- echo "๐Ÿ“‹ Production Checklist:"
97
- echo " [ ] Edit .env with your domain name"
98
- echo " [ ] Configure SSL certificates"
99
- echo " [ ] Set up DNS records"
100
- echo " [ ] Configure firewall rules"
101
- echo " [ ] Set up monitoring (optional)"
102
- echo ""
103
- echo "๐Ÿš€ Deploy with: ./scripts/docker/deploy.sh production"
104
- }
12
+ # Build all packages
13
+ echo "๐Ÿ”จ Building packages..."
14
+ yarn build:packages
105
15
 
106
- # Function to check prerequisites
107
- check_prerequisites() {
108
- echo "๐Ÿ” Checking prerequisites..."
109
-
110
- # Check Docker
111
- if ! command -v docker &> /dev/null; then
112
- echo "โŒ Docker not found. Please install Docker."
113
- exit 1
114
- fi
115
-
116
- # Check Docker Compose
117
- if ! command -v docker-compose &> /dev/null; then
118
- echo "โŒ Docker Compose not found. Please install Docker Compose."
119
- exit 1
120
- fi
121
-
122
- # Check if Docker is running
123
- if ! docker info &> /dev/null; then
124
- echo "โŒ Docker is not running. Please start Docker."
125
- exit 1
126
- fi
127
-
128
- echo "โœ… Prerequisites check passed"
129
- echo ""
130
- }
131
-
132
- # Function to show post-setup instructions
133
- show_instructions() {
134
- echo ""
135
- echo "๐ŸŽ‰ Setup complete!"
136
- echo ""
137
- echo "Next steps:"
138
-
139
- if [ "$ENVIRONMENT" = "development" ]; then
140
- echo " 1. Install dependencies: yarn install"
141
- echo " 2. Start development:"
142
- echo " - Full container: docker-compose up -d dev"
143
- echo " - VS Code: Open in Container"
144
- echo " - Local: yarn dev"
145
- echo " 3. Access your app:"
146
- echo " - Web: http://localhost:3000"
147
- echo " - API: http://localhost:3001"
148
- echo " - Database: postgresql://postgres:postgres@localhost:5432/idealyst_db"
149
- else
150
- echo " 1. Edit .env with your production settings"
151
- echo " 2. Configure SSL certificates"
152
- echo " 3. Deploy: ./scripts/docker/deploy.sh production"
153
- echo " 4. Set up monitoring (optional)"
154
- fi
155
-
156
- echo ""
157
- echo "๐Ÿ“š Documentation:"
158
- echo " - DOCKER.md - Complete Docker guide"
159
- echo " - TESTING.md - Testing documentation"
160
- echo " - README.md - General workspace info"
161
- echo ""
162
- echo "๐Ÿ†˜ Need help? Check the documentation or run:"
163
- echo " ./scripts/docker/deploy.sh --help"
164
- }
165
-
166
- # Main setup process
167
- main() {
168
- check_prerequisites
169
-
170
- case $ENVIRONMENT in
171
- "development"|"dev")
172
- setup_development
173
- ;;
174
- "production"|"prod")
175
- setup_production
176
- ;;
177
- *)
178
- echo "โŒ Invalid environment. Use 'development' or 'production'"
179
- echo "Usage: $0 [development|production]"
180
- exit 1
181
- ;;
182
- esac
183
-
184
- show_instructions
185
- }
186
-
187
- # Handle help
188
- if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "help" ]]; then
189
- echo "Idealyst Workspace Setup Script"
190
- echo ""
191
- echo "Usage: $0 [environment]"
192
- echo ""
193
- echo "Environments:"
194
- echo " development (default) - Set up for local development"
195
- echo " production - Set up for production deployment"
196
- echo ""
197
- echo "Examples:"
198
- echo " $0 # Development setup"
199
- echo " $0 development # Development setup"
200
- echo " $0 production # Production setup"
201
- echo ""
202
- exit 0
16
+ # Set up git hooks (if using husky)
17
+ if [ -f "package.json" ] && grep -q "husky" package.json; then
18
+ echo "๐Ÿช Setting up git hooks..."
19
+ yarn prepare
203
20
  fi
204
21
 
205
- main
22
+ echo "โœ… Workspace setup complete!"
23
+ echo ""
24
+ echo "๐Ÿš€ Quick start:"
25
+ echo " โ€ข Run 'yarn dev' to start development mode"
26
+ echo " โ€ข Run 'yarn build' to build all packages"
27
+ echo " โ€ข Run 'yarn test' to run tests"
28
+ echo " โ€ข Use 'idealyst create <type> <name>' to add new projects"
29
+ echo ""
30
+ echo "๐Ÿ“š Check README.md and DOCKER.md for more information."
@@ -0,0 +1,32 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "lib": ["ES2020"],
5
+ "module": "commonjs",
6
+ "moduleResolution": "node",
7
+ "esModuleInterop": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "strict": true,
10
+ "skipLibCheck": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "declaration": true,
13
+ "declarationMap": true,
14
+ "sourceMap": true,
15
+ "outDir": "./dist",
16
+ "rootDir": "./src"
17
+ },
18
+ "include": [
19
+ "packages/*/src/**/*"
20
+ ],
21
+ "exclude": [
22
+ "node_modules",
23
+ "dist",
24
+ "**/*.test.ts",
25
+ "**/*.spec.ts"
26
+ ],
27
+ "references": [
28
+ {
29
+ "path": "./packages/*"
30
+ }
31
+ ]
32
+ }
@@ -1,14 +0,0 @@
1
- import { describe, it, expect } from '@jest/globals';
2
- import { db } from '../src';
3
-
4
- describe('Database', () => {
5
- it('should export database client', () => {
6
- expect(db).toBeDefined();
7
- });
8
-
9
- it('should connect to database', async () => {
10
- // This is a basic connection test
11
- // Add your own model-specific tests here
12
- expect(db.$connect).toBeDefined();
13
- });
14
- });
@@ -1,19 +0,0 @@
1
- module.exports = {
2
- preset: 'ts-jest',
3
- testEnvironment: 'node',
4
- collectCoverageFrom: [
5
- 'src/**/*.{ts,tsx}',
6
- '!src/**/*.d.ts',
7
- ],
8
- testMatch: [
9
- '**/__tests__/**/*.test.{ts,tsx}',
10
- ],
11
- setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
12
- moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
13
- transform: {
14
- '^.+\\.(ts|tsx)$': 'ts-jest',
15
- },
16
- moduleNameMapping: {
17
- '^@/(.*)$': '<rootDir>/src/$1',
18
- },
19
- };
@@ -1,11 +0,0 @@
1
- // Global test setup
2
- import { beforeEach, afterEach } from '@jest/globals';
3
-
4
- // Mock environment variables for testing
5
- process.env.NODE_ENV = 'test';
6
- process.env.DATABASE_URL = 'file:./test.db';
7
-
8
- // Clean up after each test
9
- afterEach(async () => {
10
- // Add any cleanup logic here
11
- });
@@ -1,21 +0,0 @@
1
- // This is your Prisma schema file,
2
- // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
-
4
- generator client {
5
- provider = "prisma-client-js"
6
- }
7
-
8
- datasource db {
9
- provider = "sqlite"
10
- url = env("DATABASE_URL")
11
- }
12
-
13
- // Add your models here
14
- // Example:
15
- // model User {
16
- // id String @id @default(cuid())
17
- // email String @unique
18
- // name String?
19
- // createdAt DateTime @default(now())
20
- // updatedAt DateTime @updatedAt
21
- // }
@@ -1,18 +0,0 @@
1
- import { PrismaClient } from '@prisma/client';
2
-
3
- declare global {
4
- // Prevent multiple instances of Prisma Client in development
5
- var __globalPrisma: PrismaClient | undefined;
6
- }
7
-
8
- const prisma =
9
- globalThis.__globalPrisma ??
10
- new PrismaClient({
11
- log: ['query', 'error', 'warn'],
12
- });
13
-
14
- if (process.env.NODE_ENV !== 'production') {
15
- globalThis.__globalPrisma = prisma;
16
- }
17
-
18
- export default prisma;
@@ -1,26 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- // Add your Zod schemas here to match your Prisma models
4
- // Example:
5
- // export const UserSchema = z.object({
6
- // id: z.string().cuid(),
7
- // email: z.string().email(),
8
- // name: z.string().optional(),
9
- // createdAt: z.date(),
10
- // updatedAt: z.date(),
11
- // });
12
-
13
- // export const CreateUserSchema = UserSchema.omit({
14
- // id: true,
15
- // createdAt: true,
16
- // updatedAt: true,
17
- // });
18
-
19
- // export const UpdateUserSchema = CreateUserSchema.partial();
20
-
21
- // Export all your schemas
22
- export const schemas = {
23
- // user: UserSchema,
24
- // createUser: CreateUserSchema,
25
- // updateUser: UpdateUserSchema,
26
- } as const;
@@ -1,230 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Database backup and restore script for Idealyst workspace
4
- # Usage: ./scripts/docker/db-backup.sh [backup|restore] [filename]
5
-
6
- set -e
7
-
8
- COMMAND=${1:-backup}
9
- FILENAME=${2:-"backup-$(date +%Y%m%d-%H%M%S).sql"}
10
- PROJECT_NAME=${PROJECT_NAME:-idealyst}
11
-
12
- # Source environment variables
13
- if [ -f ".env" ]; then
14
- source .env
15
- fi
16
-
17
- POSTGRES_CONTAINER="${PROJECT_NAME}-postgres"
18
- DATABASE=${POSTGRES_DB:-idealyst_db}
19
- USERNAME=${POSTGRES_USER:-postgres}
20
-
21
- echo "๐Ÿ—„๏ธ Database Operations for Idealyst"
22
- echo "===================================="
23
-
24
- # Function to check if database container is running
25
- check_database() {
26
- if ! docker ps | grep -q "$POSTGRES_CONTAINER"; then
27
- echo "โŒ Database container '$POSTGRES_CONTAINER' is not running"
28
- echo "๐Ÿ’ก Start it with: docker-compose up -d postgres"
29
- exit 1
30
- fi
31
- }
32
-
33
- # Function to create backup
34
- create_backup() {
35
- local backup_file=$1
36
-
37
- echo "๐Ÿ“ฆ Creating backup of database '$DATABASE'..."
38
- echo "๐Ÿ“ Backup file: $backup_file"
39
-
40
- # Create backups directory if it doesn't exist
41
- mkdir -p backups
42
-
43
- # Create the backup
44
- docker exec "$POSTGRES_CONTAINER" pg_dump \
45
- -U "$USERNAME" \
46
- -d "$DATABASE" \
47
- --clean \
48
- --if-exists \
49
- --create \
50
- --verbose > "backups/$backup_file"
51
-
52
- if [ $? -eq 0 ]; then
53
- echo "โœ… Backup created successfully: backups/$backup_file"
54
-
55
- # Show backup info
56
- local size=$(du -h "backups/$backup_file" | cut -f1)
57
- echo "๐Ÿ“Š Backup size: $size"
58
-
59
- # Compress the backup
60
- gzip "backups/$backup_file"
61
- echo "๐Ÿ—œ๏ธ Backup compressed: backups/$backup_file.gz"
62
-
63
- else
64
- echo "โŒ Backup failed"
65
- exit 1
66
- fi
67
- }
68
-
69
- # Function to restore backup
70
- restore_backup() {
71
- local backup_file=$1
72
-
73
- # Check if backup file exists
74
- if [ ! -f "$backup_file" ]; then
75
- # Try with .gz extension
76
- if [ -f "$backup_file.gz" ]; then
77
- echo "๐Ÿ“ฆ Found compressed backup, extracting..."
78
- gunzip "$backup_file.gz"
79
- else
80
- echo "โŒ Backup file not found: $backup_file"
81
- echo "๐Ÿ“ Available backups:"
82
- ls -la backups/ 2>/dev/null || echo "No backups directory found"
83
- exit 1
84
- fi
85
- fi
86
-
87
- echo "โš ๏ธ WARNING: This will replace the current database '$DATABASE'"
88
- echo "๐Ÿ“ Restoring from: $backup_file"
89
-
90
- read -p "Are you sure you want to continue? (y/N): " -n 1 -r
91
- echo
92
-
93
- if [[ ! $REPLY =~ ^[Yy]$ ]]; then
94
- echo "โŒ Restore cancelled"
95
- exit 1
96
- fi
97
-
98
- echo "๐Ÿ”„ Restoring database..."
99
-
100
- # Stop API container to prevent connections
101
- echo "๐Ÿ›‘ Stopping API container..."
102
- docker-compose stop api 2>/dev/null || true
103
-
104
- # Wait a moment for connections to close
105
- sleep 2
106
-
107
- # Restore the backup
108
- docker exec -i "$POSTGRES_CONTAINER" psql \
109
- -U "$USERNAME" \
110
- -d postgres < "$backup_file"
111
-
112
- if [ $? -eq 0 ]; then
113
- echo "โœ… Database restored successfully"
114
-
115
- # Restart API container
116
- echo "๐Ÿš€ Restarting API container..."
117
- docker-compose start api
118
-
119
- else
120
- echo "โŒ Restore failed"
121
- echo "๐Ÿš€ Restarting API container..."
122
- docker-compose start api
123
- exit 1
124
- fi
125
- }
126
-
127
- # Function to list backups
128
- list_backups() {
129
- echo "๐Ÿ“ Available backups:"
130
- echo "===================="
131
-
132
- if [ -d "backups" ]; then
133
- ls -lah backups/ | grep -E '\.(sql|gz)$' || echo "No backup files found"
134
- else
135
- echo "No backups directory found"
136
- fi
137
- }
138
-
139
- # Function to clean old backups
140
- clean_backups() {
141
- local days=${1:-7}
142
-
143
- echo "๐Ÿงน Cleaning backups older than $days days..."
144
-
145
- if [ -d "backups" ]; then
146
- find backups/ -name "*.sql.gz" -mtime +$days -delete
147
- find backups/ -name "*.sql" -mtime +$days -delete
148
- echo "โœ… Old backups cleaned"
149
- else
150
- echo "No backups directory found"
151
- fi
152
- }
153
-
154
- # Function to show database info
155
- show_db_info() {
156
- echo "๐Ÿ“Š Database Information:"
157
- echo "======================="
158
- echo "Container: $POSTGRES_CONTAINER"
159
- echo "Database: $DATABASE"
160
- echo "Username: $USERNAME"
161
- echo ""
162
-
163
- # Show database size
164
- echo "๐Ÿ—„๏ธ Database size:"
165
- docker exec "$POSTGRES_CONTAINER" psql \
166
- -U "$USERNAME" \
167
- -d "$DATABASE" \
168
- -c "SELECT pg_size_pretty(pg_database_size('$DATABASE')) as database_size;"
169
-
170
- echo ""
171
- echo "๐Ÿ“‹ Tables:"
172
- docker exec "$POSTGRES_CONTAINER" psql \
173
- -U "$USERNAME" \
174
- -d "$DATABASE" \
175
- -c "\dt"
176
- }
177
-
178
- # Main script logic
179
- main() {
180
- case $COMMAND in
181
- "backup")
182
- check_database
183
- create_backup "$FILENAME"
184
- ;;
185
-
186
- "restore")
187
- check_database
188
- if [ -z "$FILENAME" ]; then
189
- echo "โŒ Please specify a backup file to restore"
190
- echo "Usage: $0 restore <backup-file>"
191
- exit 1
192
- fi
193
- restore_backup "$FILENAME"
194
- ;;
195
-
196
- "list")
197
- list_backups
198
- ;;
199
-
200
- "clean")
201
- local days=${FILENAME:-7}
202
- clean_backups "$days"
203
- ;;
204
-
205
- "info")
206
- check_database
207
- show_db_info
208
- ;;
209
-
210
- *)
211
- echo "Usage: $0 [backup|restore|list|clean|info] [filename|days]"
212
- echo ""
213
- echo "Commands:"
214
- echo " backup [filename] - Create a database backup"
215
- echo " restore <filename> - Restore from a backup file"
216
- echo " list - List available backups"
217
- echo " clean [days] - Clean backups older than N days (default: 7)"
218
- echo " info - Show database information"
219
- echo ""
220
- echo "Examples:"
221
- echo " $0 backup"
222
- echo " $0 backup my-backup.sql"
223
- echo " $0 restore backups/backup-20240101-120000.sql"
224
- echo " $0 clean 30"
225
- exit 1
226
- ;;
227
- esac
228
- }
229
-
230
- main