kybernus 1.0.1 → 1.1.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 +20 -0
- package/README.md +49 -263
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +5 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/prompts/wizard.d.ts +14 -1
- package/dist/cli/prompts/wizard.d.ts.map +1 -1
- package/dist/cli/prompts/wizard.js +45 -9
- package/dist/cli/prompts/wizard.js.map +1 -1
- package/dist/core/generator/project.d.ts +8 -0
- package/dist/core/generator/project.d.ts.map +1 -1
- package/dist/core/generator/project.js +41 -2
- package/dist/core/generator/project.js.map +1 -1
- package/dist/core/templates/downloader.d.ts +32 -0
- package/dist/core/templates/downloader.d.ts.map +1 -0
- package/dist/core/templates/downloader.js +95 -0
- package/dist/core/templates/downloader.js.map +1 -0
- package/dist/models/config.d.ts +1 -0
- package/dist/models/config.d.ts.map +1 -1
- package/package.json +6 -2
- package/templates/java-spring/pro/clean/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/java-spring/pro/clean/Dockerfile.hbs +0 -45
- package/templates/java-spring/pro/clean/README.md.hbs +0 -31
- package/templates/java-spring/pro/clean/docker-compose.yml.hbs +0 -18
- package/templates/java-spring/pro/clean/infra/main.tf.hbs +0 -83
- package/templates/java-spring/pro/clean/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/java-spring/pro/clean/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/java-spring/pro/clean/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/java-spring/pro/clean/pom.xml.hbs +0 -130
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/application/service/AuthService.java.hbs +0 -36
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/domain/entity/User.java.hbs +0 -77
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/domain/repository/UserRepository.java.hbs +0 -15
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/domain/usecase/LoginUserUseCase.java.hbs +0 -36
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/domain/usecase/RegisterUserUseCase.java.hbs +0 -46
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/infrastructure/persistence/InMemoryUserRepository.java.hbs +0 -41
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/infrastructure/security/SecurityAdapters.java.hbs +0 -53
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/infrastructure/web/controller/AuthController.java.hbs +0 -41
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/{{projectNamePascalCase}}Application.java.hbs +0 -14
- package/templates/java-spring/pro/hexagonal/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/java-spring/pro/hexagonal/Dockerfile.hbs +0 -45
- package/templates/java-spring/pro/hexagonal/README.md.hbs +0 -38
- package/templates/java-spring/pro/hexagonal/docker-compose.yml.hbs +0 -18
- package/templates/java-spring/pro/hexagonal/infra/main.tf.hbs +0 -83
- package/templates/java-spring/pro/hexagonal/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/java-spring/pro/hexagonal/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/java-spring/pro/hexagonal/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/java-spring/pro/hexagonal/pom.xml.hbs +0 -130
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/application/service/AuthService.java.hbs +0 -36
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/domain/entity/User.java.hbs +0 -77
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/domain/repository/UserRepository.java.hbs +0 -15
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/domain/usecase/LoginUserUseCase.java.hbs +0 -36
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/domain/usecase/RegisterUserUseCase.java.hbs +0 -46
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/infrastructure/persistence/InMemoryUserRepository.java.hbs +0 -41
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/infrastructure/security/SecurityAdapters.java.hbs +0 -53
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/infrastructure/web/controller/AuthController.java.hbs +0 -41
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/{{projectNamePascalCase}}Application.java.hbs +0 -14
- package/templates/java-spring/pro/mvc/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/java-spring/pro/mvc/Dockerfile.hbs +0 -45
- package/templates/java-spring/pro/mvc/README.md.hbs +0 -116
- package/templates/java-spring/pro/mvc/docker-compose.yml.hbs +0 -18
- package/templates/java-spring/pro/mvc/infra/main.tf.hbs +0 -83
- package/templates/java-spring/pro/mvc/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/java-spring/pro/mvc/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/java-spring/pro/mvc/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/java-spring/pro/mvc/pom.xml.hbs +0 -130
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/config/GlobalExceptionHandler.java.hbs +0 -39
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/config/SecurityConfig.java.hbs +0 -44
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/config/WebConfig.java.hbs +0 -30
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/controller/AuthController.java.hbs +0 -69
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/controller/HealthController.java.hbs +0 -30
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/controller/PaymentsController.java.hbs +0 -49
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/dto/AuthRequest.java.hbs +0 -3
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/dto/AuthResponse.java.hbs +0 -3
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/model/.gitkeep +0 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/repository/.gitkeep +0 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/security/JwtAuthenticationFilter.java.hbs +0 -56
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/security/JwtTokenProvider.java.hbs +0 -59
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/service/.gitkeep +0 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/service/StripeService.java.hbs +0 -67
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/{{projectNamePascalCase}}Application.java.hbs +0 -13
- package/templates/java-spring/pro/mvc/src/main/resources/application.yml.hbs +0 -32
- package/templates/java-spring/pro/mvc/src/test/java/{{packagePath}}/{{projectNamePascalCase}}ApplicationTests.java.hbs +0 -13
- package/templates/java-spring/pro/mvc/src/test/resources/application.yml.hbs +0 -10
- package/templates/java-spring/pro/mvc/template.json +0 -14
- package/templates/nestjs/pro/clean/.env.example.hbs +0 -19
- package/templates/nestjs/pro/clean/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/nestjs/pro/clean/Dockerfile.hbs +0 -45
- package/templates/nestjs/pro/clean/infra/main.tf.hbs +0 -83
- package/templates/nestjs/pro/clean/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/nestjs/pro/clean/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/nestjs/pro/clean/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/nestjs/pro/clean/package.json.hbs +0 -37
- package/templates/nestjs/pro/clean/src/auth.module.ts.hbs +0 -17
- package/templates/nestjs/pro/clean/src/domain/entities/user.entity.ts.hbs +0 -12
- package/templates/nestjs/pro/clean/src/domain/repositories/user.repository.ts.hbs +0 -6
- package/templates/nestjs/pro/clean/src/domain/use-cases/register.use-case.ts.hbs +0 -18
- package/templates/nestjs/pro/clean/src/infrastructure/database/in-memory.repository.ts.hbs +0 -17
- package/templates/nestjs/pro/clean/src/infrastructure/http/auth.controller.ts.hbs +0 -16
- package/templates/nestjs/pro/clean/tsconfig.json.hbs +0 -21
- package/templates/nestjs/pro/hexagonal/.env.example.hbs +0 -19
- package/templates/nestjs/pro/hexagonal/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/nestjs/pro/hexagonal/Dockerfile.hbs +0 -45
- package/templates/nestjs/pro/hexagonal/infra/main.tf.hbs +0 -83
- package/templates/nestjs/pro/hexagonal/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/nestjs/pro/hexagonal/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/nestjs/pro/hexagonal/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/nestjs/pro/hexagonal/package.json.hbs +0 -37
- package/templates/nestjs/pro/hexagonal/src/adapters/inbound/http.adapter.ts.hbs +0 -12
- package/templates/nestjs/pro/hexagonal/src/adapters/outbound/persistence.adapter.ts.hbs +0 -13
- package/templates/nestjs/pro/hexagonal/src/auth.module.ts.hbs +0 -19
- package/templates/nestjs/pro/hexagonal/src/core/auth.service.ts.hbs +0 -16
- package/templates/nestjs/pro/hexagonal/src/core/domain/user.entity.ts.hbs +0 -8
- package/templates/nestjs/pro/hexagonal/src/core/ports/ports.ts.hbs +0 -9
- package/templates/nestjs/pro/hexagonal/tsconfig.json.hbs +0 -21
- package/templates/nestjs/pro/mvc/.env.example.hbs +0 -19
- package/templates/nestjs/pro/mvc/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/nestjs/pro/mvc/Dockerfile.hbs +0 -45
- package/templates/nestjs/pro/mvc/README.md.hbs +0 -28
- package/templates/nestjs/pro/mvc/infra/main.tf.hbs +0 -83
- package/templates/nestjs/pro/mvc/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/nestjs/pro/mvc/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/nestjs/pro/mvc/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/nestjs/pro/mvc/package.json.hbs +0 -37
- package/templates/nestjs/pro/mvc/src/app.module.ts.hbs +0 -17
- package/templates/nestjs/pro/mvc/src/auth/auth.controller.ts.hbs +0 -35
- package/templates/nestjs/pro/mvc/src/auth/auth.module.ts.hbs +0 -25
- package/templates/nestjs/pro/mvc/src/auth/auth.service.ts.hbs +0 -55
- package/templates/nestjs/pro/mvc/src/auth/jwt.strategy.ts.hbs +0 -19
- package/templates/nestjs/pro/mvc/src/controllers/health.controller.ts.hbs +0 -9
- package/templates/nestjs/pro/mvc/src/controllers/items.controller.ts.hbs +0 -32
- package/templates/nestjs/pro/mvc/src/main.ts.hbs +0 -17
- package/templates/nestjs/pro/mvc/src/models/create-item.dto.ts.hbs +0 -10
- package/templates/nestjs/pro/mvc/src/models/item.model.ts.hbs +0 -6
- package/templates/nestjs/pro/mvc/src/modules/items.module.ts.hbs +0 -9
- package/templates/nestjs/pro/mvc/src/payments/payments.controller.ts.hbs +0 -26
- package/templates/nestjs/pro/mvc/src/payments/payments.module.ts.hbs +0 -11
- package/templates/nestjs/pro/mvc/src/payments/payments.service.ts.hbs +0 -43
- package/templates/nestjs/pro/mvc/src/services/items.service.ts.hbs +0 -32
- package/templates/nestjs/pro/mvc/tsconfig.json.hbs +0 -21
- package/templates/nextjs/pro/default/.env.example.hbs +0 -20
- package/templates/nextjs/pro/default/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/nextjs/pro/default/Dockerfile.hbs +0 -45
- package/templates/nextjs/pro/default/README.md.hbs +0 -96
- package/templates/nextjs/pro/default/docker-compose.yml.hbs +0 -18
- package/templates/nextjs/pro/default/infra/main.tf.hbs +0 -83
- package/templates/nextjs/pro/default/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/nextjs/pro/default/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/nextjs/pro/default/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/nextjs/pro/default/next.config.js.hbs +0 -4
- package/templates/nextjs/pro/default/package.json.hbs +0 -34
- package/templates/nextjs/pro/default/postcss.config.js.hbs +0 -6
- package/templates/nextjs/pro/default/prisma/schema.prisma.hbs +0 -18
- package/templates/nextjs/pro/default/public/.gitkeep +0 -0
- package/templates/nextjs/pro/default/src/app/api/auth/[...nextauth]/route.ts.hbs +0 -61
- package/templates/nextjs/pro/default/src/app/api/checkout/route.ts.hbs +0 -30
- package/templates/nextjs/pro/default/src/app/api/health/route.ts.hbs +0 -9
- package/templates/nextjs/pro/default/src/app/api/webhook/route.ts.hbs +0 -51
- package/templates/nextjs/pro/default/src/app/dashboard/page.tsx.hbs +0 -52
- package/templates/nextjs/pro/default/src/app/globals.css.hbs +0 -3
- package/templates/nextjs/pro/default/src/app/layout.tsx.hbs +0 -22
- package/templates/nextjs/pro/default/src/app/page.tsx.hbs +0 -38
- package/templates/nextjs/pro/default/src/components/.gitkeep +0 -0
- package/templates/nextjs/pro/default/src/components/AuthButton.tsx.hbs +0 -34
- package/templates/nextjs/pro/default/src/components/Providers.tsx.hbs +0 -7
- package/templates/nextjs/pro/default/src/lib/prisma.ts.hbs +0 -13
- package/templates/nextjs/pro/default/src/proxy.ts.hbs +0 -22
- package/templates/nextjs/pro/default/tailwind.config.ts.hbs +0 -15
- package/templates/nextjs/pro/default/template.json +0 -18
- package/templates/nextjs/pro/default/tsconfig.json.hbs +0 -40
- package/templates/nodejs-express/pro/clean/.env.example.hbs +0 -19
- package/templates/nodejs-express/pro/clean/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/nodejs-express/pro/clean/Dockerfile.hbs +0 -45
- package/templates/nodejs-express/pro/clean/README.md.hbs +0 -41
- package/templates/nodejs-express/pro/clean/docker-compose.yml.hbs +0 -18
- package/templates/nodejs-express/pro/clean/infra/main.tf.hbs +0 -83
- package/templates/nodejs-express/pro/clean/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/nodejs-express/pro/clean/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/nodejs-express/pro/clean/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/nodejs-express/pro/clean/package.json.hbs +0 -55
- package/templates/nodejs-express/pro/clean/src/application/services/AuthService.ts.hbs +0 -66
- package/templates/nodejs-express/pro/clean/src/domain/entities/User.ts.hbs +0 -38
- package/templates/nodejs-express/pro/clean/src/domain/repositories/IUserRepository.ts.hbs +0 -13
- package/templates/nodejs-express/pro/clean/src/domain/usecases/LoginUserUseCase.ts.hbs +0 -39
- package/templates/nodejs-express/pro/clean/src/domain/usecases/RegisterUserUseCase.ts.hbs +0 -51
- package/templates/nodejs-express/pro/clean/src/index.ts.hbs +0 -40
- package/templates/nodejs-express/pro/clean/src/infrastructure/database/InMemoryUserRepository.ts.hbs +0 -46
- package/templates/nodejs-express/pro/clean/src/infrastructure/http/controllers/AuthController.ts.hbs +0 -45
- package/templates/nodejs-express/pro/clean/src/infrastructure/http/middlewares/AuthMiddleware.ts.hbs +0 -27
- package/templates/nodejs-express/pro/clean/src/infrastructure/providers/PasswordHasher.ts.hbs +0 -14
- package/templates/nodejs-express/pro/clean/src/infrastructure/providers/TokenGenerator.ts.hbs +0 -25
- package/templates/nodejs-express/pro/clean/tsconfig.json.hbs +0 -27
- package/templates/nodejs-express/pro/hexagonal/.env.example.hbs +0 -19
- package/templates/nodejs-express/pro/hexagonal/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/nodejs-express/pro/hexagonal/Dockerfile.hbs +0 -45
- package/templates/nodejs-express/pro/hexagonal/README.md.hbs +0 -42
- package/templates/nodejs-express/pro/hexagonal/docker-compose.yml.hbs +0 -18
- package/templates/nodejs-express/pro/hexagonal/infra/main.tf.hbs +0 -83
- package/templates/nodejs-express/pro/hexagonal/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/nodejs-express/pro/hexagonal/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/nodejs-express/pro/hexagonal/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/nodejs-express/pro/hexagonal/package.json.hbs +0 -55
- package/templates/nodejs-express/pro/hexagonal/src/adapters/inbound/http/AuthController.ts.hbs +0 -48
- package/templates/nodejs-express/pro/hexagonal/src/adapters/outbound/SecurityAdapters.ts.hbs +0 -31
- package/templates/nodejs-express/pro/hexagonal/src/adapters/outbound/persistence/InMemoryUserAdapter.ts.hbs +0 -38
- package/templates/nodejs-express/pro/hexagonal/src/core/AuthService.ts.hbs +0 -51
- package/templates/nodejs-express/pro/hexagonal/src/core/domain/entities/User.ts.hbs +0 -28
- package/templates/nodejs-express/pro/hexagonal/src/core/ports/inbound/IAuthPort.ts.hbs +0 -11
- package/templates/nodejs-express/pro/hexagonal/src/core/ports/outbound/ISecurityPorts.ts.hbs +0 -15
- package/templates/nodejs-express/pro/hexagonal/src/core/ports/outbound/IUserRepositoryPort.ts.hbs +0 -13
- package/templates/nodejs-express/pro/hexagonal/src/index.ts.hbs +0 -41
- package/templates/nodejs-express/pro/hexagonal/tsconfig.json.hbs +0 -27
- package/templates/nodejs-express/pro/mvc/.env.example.hbs +0 -19
- package/templates/nodejs-express/pro/mvc/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/nodejs-express/pro/mvc/Dockerfile.hbs +0 -45
- package/templates/nodejs-express/pro/mvc/README.md.hbs +0 -85
- package/templates/nodejs-express/pro/mvc/docker-compose.yml.hbs +0 -18
- package/templates/nodejs-express/pro/mvc/infra/main.tf.hbs +0 -83
- package/templates/nodejs-express/pro/mvc/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/nodejs-express/pro/mvc/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/nodejs-express/pro/mvc/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/nodejs-express/pro/mvc/package.json.hbs +0 -55
- package/templates/nodejs-express/pro/mvc/src/app.ts.hbs +0 -34
- package/templates/nodejs-express/pro/mvc/src/config/database.ts.hbs +0 -10
- package/templates/nodejs-express/pro/mvc/src/controllers/auth.controller.ts.hbs +0 -91
- package/templates/nodejs-express/pro/mvc/src/controllers/healthController.ts.hbs +0 -20
- package/templates/nodejs-express/pro/mvc/src/controllers/payments.controller.ts.hbs +0 -72
- package/templates/nodejs-express/pro/mvc/src/index.ts.hbs +0 -12
- package/templates/nodejs-express/pro/mvc/src/middleware/errorHandler.ts.hbs +0 -22
- package/templates/nodejs-express/pro/mvc/src/middlewares/auth.middleware.ts.hbs +0 -31
- package/templates/nodejs-express/pro/mvc/src/models/.gitkeep +0 -0
- package/templates/nodejs-express/pro/mvc/src/routes/index.ts.hbs +0 -14
- package/templates/nodejs-express/pro/mvc/src/services/.gitkeep +0 -0
- package/templates/nodejs-express/pro/mvc/src/services/stripe.service.ts.hbs +0 -102
- package/templates/nodejs-express/pro/mvc/template.json +0 -18
- package/templates/nodejs-express/pro/mvc/tsconfig.json.hbs +0 -27
- package/templates/python-fastapi/pro/clean/.env.example.hbs +0 -17
- package/templates/python-fastapi/pro/clean/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/python-fastapi/pro/clean/Dockerfile.hbs +0 -20
- package/templates/python-fastapi/pro/clean/app/domain/entities/user.py.hbs +0 -23
- package/templates/python-fastapi/pro/clean/app/domain/repositories/user_repository.py.hbs +0 -22
- package/templates/python-fastapi/pro/clean/app/domain/usecases/register_user.py.hbs +0 -30
- package/templates/python-fastapi/pro/clean/app/infrastructure/database/in_memory_repository.py.hbs +0 -26
- package/templates/python-fastapi/pro/clean/app/infrastructure/http/auth_controller.py.hbs +0 -26
- package/templates/python-fastapi/pro/clean/app/infrastructure/security/adapters.py.hbs +0 -23
- package/templates/python-fastapi/pro/clean/app/main.py.hbs +0 -10
- package/templates/python-fastapi/pro/clean/infra/main.tf.hbs +0 -83
- package/templates/python-fastapi/pro/clean/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/python-fastapi/pro/clean/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/python-fastapi/pro/clean/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/python-fastapi/pro/clean/requirements.txt.hbs +0 -12
- package/templates/python-fastapi/pro/hexagonal/.env.example.hbs +0 -17
- package/templates/python-fastapi/pro/hexagonal/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/python-fastapi/pro/hexagonal/Dockerfile.hbs +0 -20
- package/templates/python-fastapi/pro/hexagonal/app/adapters/inbound/http_adapter.py.hbs +0 -29
- package/templates/python-fastapi/pro/hexagonal/app/core/domain/user.py.hbs +0 -15
- package/templates/python-fastapi/pro/hexagonal/app/core/ports.py.hbs +0 -25
- package/templates/python-fastapi/pro/hexagonal/app/core/service.py.hbs +0 -28
- package/templates/python-fastapi/pro/hexagonal/app/main.py.hbs +0 -22
- package/templates/python-fastapi/pro/hexagonal/infra/main.tf.hbs +0 -83
- package/templates/python-fastapi/pro/hexagonal/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/python-fastapi/pro/hexagonal/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/python-fastapi/pro/hexagonal/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/python-fastapi/pro/hexagonal/requirements.txt.hbs +0 -12
- package/templates/python-fastapi/pro/mvc/.env.example.hbs +0 -17
- package/templates/python-fastapi/pro/mvc/.github/workflows/ci-cd.yml.hbs +0 -88
- package/templates/python-fastapi/pro/mvc/Dockerfile.hbs +0 -20
- package/templates/python-fastapi/pro/mvc/README.md.hbs +0 -41
- package/templates/python-fastapi/pro/mvc/app/controllers/auth.py.hbs +0 -46
- package/templates/python-fastapi/pro/mvc/app/controllers/health.py.hbs +0 -7
- package/templates/python-fastapi/pro/mvc/app/controllers/items.py.hbs +0 -21
- package/templates/python-fastapi/pro/mvc/app/controllers/payments.py.hbs +0 -32
- package/templates/python-fastapi/pro/mvc/app/main.py.hbs +0 -20
- package/templates/python-fastapi/pro/mvc/app/middleware/security.py.hbs +0 -39
- package/templates/python-fastapi/pro/mvc/app/models/item.py.hbs +0 -11
- package/templates/python-fastapi/pro/mvc/app/schemas/item.py.hbs +0 -16
- package/templates/python-fastapi/pro/mvc/app/services/item_service.py.hbs +0 -24
- package/templates/python-fastapi/pro/mvc/infra/main.tf.hbs +0 -83
- package/templates/python-fastapi/pro/mvc/infra/modules/ecs/main.tf.hbs +0 -54
- package/templates/python-fastapi/pro/mvc/infra/modules/rds/main.tf.hbs +0 -88
- package/templates/python-fastapi/pro/mvc/infra/modules/vpc/main.tf.hbs +0 -107
- package/templates/python-fastapi/pro/mvc/requirements.txt.hbs +0 -12
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
package {{packageName}}.security;
|
|
2
|
-
|
|
3
|
-
import jakarta.servlet.FilterChain;
|
|
4
|
-
import jakarta.servlet.ServletException;
|
|
5
|
-
import jakarta.servlet.http.HttpServletRequest;
|
|
6
|
-
import jakarta.servlet.http.HttpServletResponse;
|
|
7
|
-
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
|
8
|
-
import org.springframework.security.core.context.SecurityContextHolder;
|
|
9
|
-
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
|
|
10
|
-
import org.springframework.stereotype.Component;
|
|
11
|
-
import org.springframework.util.StringUtils;
|
|
12
|
-
import org.springframework.web.filter.OncePerRequestFilter;
|
|
13
|
-
|
|
14
|
-
import java.io.IOException;
|
|
15
|
-
import java.util.Collections;
|
|
16
|
-
|
|
17
|
-
@Component
|
|
18
|
-
public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
|
19
|
-
|
|
20
|
-
private final JwtTokenProvider tokenProvider;
|
|
21
|
-
|
|
22
|
-
public JwtAuthenticationFilter(JwtTokenProvider tokenProvider) {
|
|
23
|
-
this.tokenProvider = tokenProvider;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
@Override
|
|
27
|
-
protected void doFilterInternal(HttpServletRequest request,
|
|
28
|
-
HttpServletResponse response,
|
|
29
|
-
FilterChain filterChain) throws ServletException, IOException {
|
|
30
|
-
try {
|
|
31
|
-
String jwt = getJwtFromRequest(request);
|
|
32
|
-
|
|
33
|
-
if (StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)) {
|
|
34
|
-
String userId = tokenProvider.getUserIdFromToken(jwt);
|
|
35
|
-
|
|
36
|
-
UsernamePasswordAuthenticationToken authentication =
|
|
37
|
-
new UsernamePasswordAuthenticationToken(userId, null, Collections.emptyList());
|
|
38
|
-
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
|
|
39
|
-
|
|
40
|
-
SecurityContextHolder.getContext().setAuthentication(authentication);
|
|
41
|
-
}
|
|
42
|
-
} catch (Exception ex) {
|
|
43
|
-
logger.error("Could not set user authentication in security context", ex);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
filterChain.doFilter(request, response);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
private String getJwtFromRequest(HttpServletRequest request) {
|
|
50
|
-
String bearerToken = request.getHeader("Authorization");
|
|
51
|
-
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
|
|
52
|
-
return bearerToken.substring(7);
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
package {{packageName}}.security;
|
|
2
|
-
|
|
3
|
-
import io.jsonwebtoken.*;
|
|
4
|
-
import io.jsonwebtoken.security.Keys;
|
|
5
|
-
import org.springframework.beans.factory.annotation.Value;
|
|
6
|
-
import org.springframework.stereotype.Component;
|
|
7
|
-
|
|
8
|
-
import javax.crypto.SecretKey;
|
|
9
|
-
import java.nio.charset.StandardCharsets;
|
|
10
|
-
import java.util.Date;
|
|
11
|
-
|
|
12
|
-
@Component
|
|
13
|
-
public class JwtTokenProvider {
|
|
14
|
-
|
|
15
|
-
@Value("${jwt.secret:your-super-secret-jwt-key-change-in-production}")
|
|
16
|
-
private String jwtSecret;
|
|
17
|
-
|
|
18
|
-
@Value("${jwt.expiration:604800000}")
|
|
19
|
-
private long jwtExpiration; // 7 days in milliseconds
|
|
20
|
-
|
|
21
|
-
private SecretKey getSigningKey() {
|
|
22
|
-
return Keys.hmacShaKeyFor(jwtSecret.getBytes(StandardCharsets.UTF_8));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
public String generateToken(String userId, String email) {
|
|
26
|
-
Date now = new Date();
|
|
27
|
-
Date expiryDate = new Date(now.getTime() + jwtExpiration);
|
|
28
|
-
|
|
29
|
-
return Jwts.builder()
|
|
30
|
-
.subject(userId)
|
|
31
|
-
.claim("email", email)
|
|
32
|
-
.issuedAt(now)
|
|
33
|
-
.expiration(expiryDate)
|
|
34
|
-
.signWith(getSigningKey())
|
|
35
|
-
.compact();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
public String getUserIdFromToken(String token) {
|
|
39
|
-
Claims claims = Jwts.parser()
|
|
40
|
-
.verifyWith(getSigningKey())
|
|
41
|
-
.build()
|
|
42
|
-
.parseSignedClaims(token)
|
|
43
|
-
.getPayload();
|
|
44
|
-
|
|
45
|
-
return claims.getSubject();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
public boolean validateToken(String token) {
|
|
49
|
-
try {
|
|
50
|
-
Jwts.parser()
|
|
51
|
-
.verifyWith(getSigningKey())
|
|
52
|
-
.build()
|
|
53
|
-
.parseSignedClaims(token);
|
|
54
|
-
return true;
|
|
55
|
-
} catch (JwtException | IllegalArgumentException e) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
File without changes
|
package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/service/StripeService.java.hbs
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
package {{packageName}}.service;
|
|
2
|
-
|
|
3
|
-
import com.stripe.Stripe;
|
|
4
|
-
import com.stripe.exception.StripeException;
|
|
5
|
-
import com.stripe.model.Customer;
|
|
6
|
-
import com.stripe.model.checkout.Session;
|
|
7
|
-
import com.stripe.param.CustomerCreateParams;
|
|
8
|
-
import com.stripe.param.checkout.SessionCreateParams;
|
|
9
|
-
import jakarta.annotation.PostConstruct;
|
|
10
|
-
import org.springframework.beans.factory.annotation.Value;
|
|
11
|
-
import org.springframework.stereotype.Service;
|
|
12
|
-
|
|
13
|
-
@Service
|
|
14
|
-
public class StripeService {
|
|
15
|
-
|
|
16
|
-
@Value("${stripe.secret-key}")
|
|
17
|
-
private String stripeSecretKey;
|
|
18
|
-
|
|
19
|
-
@Value("${stripe.price-id}")
|
|
20
|
-
private String priceId;
|
|
21
|
-
|
|
22
|
-
@Value("${frontend.url}")
|
|
23
|
-
private String frontendUrl;
|
|
24
|
-
|
|
25
|
-
@PostConstruct
|
|
26
|
-
public void init() {
|
|
27
|
-
Stripe.apiKey = stripeSecretKey;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public Session createCheckoutSession(String customerId) throws StripeException {
|
|
31
|
-
SessionCreateParams.Builder paramsBuilder = SessionCreateParams.builder()
|
|
32
|
-
.setMode(SessionCreateParams.Mode.SUBSCRIPTION)
|
|
33
|
-
.setSuccessUrl(frontendUrl + "/success?session_id={CHECKOUT_SESSION_ID}")
|
|
34
|
-
.setCancelUrl(frontendUrl + "/cancel")
|
|
35
|
-
.addLineItem(
|
|
36
|
-
SessionCreateParams.LineItem.builder()
|
|
37
|
-
.setPrice(priceId)
|
|
38
|
-
.setQuantity(1L)
|
|
39
|
-
.build()
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
if (customerId != null && !customerId.isEmpty()) {
|
|
43
|
-
paramsBuilder.setCustomer(customerId);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return Session.create(paramsBuilder.build());
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
public com.stripe.model.billingportal.Session createPortalSession(String customerId) throws StripeException {
|
|
50
|
-
com.stripe.param.billingportal.SessionCreateParams params =
|
|
51
|
-
com.stripe.param.billingportal.SessionCreateParams.builder()
|
|
52
|
-
.setCustomer(customerId)
|
|
53
|
-
.setReturnUrl(frontendUrl + "/dashboard")
|
|
54
|
-
.build();
|
|
55
|
-
|
|
56
|
-
return com.stripe.model.billingportal.Session.create(params);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public Customer createCustomer(String email, String name) throws StripeException {
|
|
60
|
-
CustomerCreateParams params = CustomerCreateParams.builder()
|
|
61
|
-
.setEmail(email)
|
|
62
|
-
.setName(name)
|
|
63
|
-
.build();
|
|
64
|
-
|
|
65
|
-
return Customer.create(params);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
package {{packageName}};
|
|
2
|
-
|
|
3
|
-
import org.springframework.boot.SpringApplication;
|
|
4
|
-
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
5
|
-
|
|
6
|
-
@SpringBootApplication
|
|
7
|
-
public class {{projectNamePascalCase}}Application {
|
|
8
|
-
|
|
9
|
-
public static void main(String[] args) {
|
|
10
|
-
SpringApplication.run({{projectNamePascalCase}}Application.class, args);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
spring:
|
|
2
|
-
application:
|
|
3
|
-
name: {{projectNameKebabCase}}
|
|
4
|
-
|
|
5
|
-
datasource:
|
|
6
|
-
url: jdbc:postgresql://localhost:5432/{{projectNameSnakeCase}}
|
|
7
|
-
username: postgres
|
|
8
|
-
password: postgres
|
|
9
|
-
driver-class-name: org.postgresql.Driver
|
|
10
|
-
|
|
11
|
-
jpa:
|
|
12
|
-
hibernate:
|
|
13
|
-
ddl-auto: update
|
|
14
|
-
show-sql: true
|
|
15
|
-
properties:
|
|
16
|
-
hibernate:
|
|
17
|
-
format_sql: true
|
|
18
|
-
dialect: org.hibernate.dialect.PostgreSQLDialect
|
|
19
|
-
|
|
20
|
-
# H2 Console (for development)
|
|
21
|
-
h2:
|
|
22
|
-
console:
|
|
23
|
-
enabled: true
|
|
24
|
-
path: /h2-console
|
|
25
|
-
|
|
26
|
-
server:
|
|
27
|
-
port: 8080
|
|
28
|
-
|
|
29
|
-
logging:
|
|
30
|
-
level:
|
|
31
|
-
root: INFO
|
|
32
|
-
{{packageName}}: DEBUG
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Java Spring Boot MVC",
|
|
3
|
-
"tier": "free",
|
|
4
|
-
"stack": "java-spring",
|
|
5
|
-
"version": "1.0.0",
|
|
6
|
-
"description": "Spring Boot 4 REST API with Java 21 and MVC architecture",
|
|
7
|
-
"targetVersions": {
|
|
8
|
-
"java": "21",
|
|
9
|
-
"springBoot": "^4.0.0",
|
|
10
|
-
"maven": "^3.9.0"
|
|
11
|
-
},
|
|
12
|
-
"requiredConfig": ["projectName", "packageName"],
|
|
13
|
-
"optionalConfig": ["useAI", "buildTool"]
|
|
14
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# {{projectName}} Environment Variables
|
|
2
|
-
|
|
3
|
-
# Server
|
|
4
|
-
NODE_ENV=development
|
|
5
|
-
PORT=3000
|
|
6
|
-
|
|
7
|
-
# Database
|
|
8
|
-
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/{{projectNameSnakeCase}}
|
|
9
|
-
|
|
10
|
-
# Authentication
|
|
11
|
-
JWT_SECRET=your-super-secret-jwt-key-change-in-production
|
|
12
|
-
|
|
13
|
-
# Stripe
|
|
14
|
-
STRIPE_SECRET_KEY=sk_test_your_stripe_secret_key
|
|
15
|
-
STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret
|
|
16
|
-
STRIPE_PRICE_ID=price_your_price_id
|
|
17
|
-
|
|
18
|
-
# Frontend URL (for redirects)
|
|
19
|
-
FRONTEND_URL=http://localhost:3001
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
name: CI/CD Pipeline
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main, develop]
|
|
6
|
-
pull_request:
|
|
7
|
-
branches: [main]
|
|
8
|
-
|
|
9
|
-
env:
|
|
10
|
-
NODE_VERSION: '20'
|
|
11
|
-
AWS_REGION: 'us-east-1'
|
|
12
|
-
|
|
13
|
-
jobs:
|
|
14
|
-
test:
|
|
15
|
-
runs-on: ubuntu-latest
|
|
16
|
-
|
|
17
|
-
steps:
|
|
18
|
-
- uses: actions/checkout@v4
|
|
19
|
-
|
|
20
|
-
- name: Setup Node.js
|
|
21
|
-
uses: actions/setup-node@v4
|
|
22
|
-
with:
|
|
23
|
-
node-version: $\{{ env.NODE_VERSION }}
|
|
24
|
-
cache: 'npm'
|
|
25
|
-
|
|
26
|
-
- name: Install dependencies
|
|
27
|
-
run: npm ci
|
|
28
|
-
|
|
29
|
-
- name: Run linter
|
|
30
|
-
run: npm run lint --if-present
|
|
31
|
-
|
|
32
|
-
- name: Run tests
|
|
33
|
-
run: npm test --if-present
|
|
34
|
-
|
|
35
|
-
- name: Build
|
|
36
|
-
run: npm run build
|
|
37
|
-
|
|
38
|
-
build-and-push:
|
|
39
|
-
needs: test
|
|
40
|
-
runs-on: ubuntu-latest
|
|
41
|
-
if: github.ref == 'refs/heads/main'
|
|
42
|
-
|
|
43
|
-
steps:
|
|
44
|
-
- uses: actions/checkout@v4
|
|
45
|
-
|
|
46
|
-
- name: Configure AWS credentials
|
|
47
|
-
uses: aws-actions/configure-aws-credentials@v4
|
|
48
|
-
with:
|
|
49
|
-
aws-access-key-id: $\{{ secrets.AWS_ACCESS_KEY_ID }}
|
|
50
|
-
aws-secret-access-key: $\{{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
51
|
-
aws-region: $\{{ env.AWS_REGION }}
|
|
52
|
-
|
|
53
|
-
- name: Login to Amazon ECR
|
|
54
|
-
id: login-ecr
|
|
55
|
-
uses: aws-actions/amazon-ecr-login@v2
|
|
56
|
-
|
|
57
|
-
- name: Build, tag, and push image to Amazon ECR
|
|
58
|
-
env:
|
|
59
|
-
ECR_REGISTRY: $\{{ steps.login-ecr.outputs.registry }}
|
|
60
|
-
ECR_REPOSITORY: {{projectNameKebabCase}}
|
|
61
|
-
IMAGE_TAG: $\{{ github.sha }}
|
|
62
|
-
run: |
|
|
63
|
-
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
|
|
64
|
-
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:latest .
|
|
65
|
-
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
|
|
66
|
-
docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
|
|
67
|
-
|
|
68
|
-
deploy:
|
|
69
|
-
needs: build-and-push
|
|
70
|
-
runs-on: ubuntu-latest
|
|
71
|
-
if: github.ref == 'refs/heads/main'
|
|
72
|
-
|
|
73
|
-
steps:
|
|
74
|
-
- uses: actions/checkout@v4
|
|
75
|
-
|
|
76
|
-
- name: Configure AWS credentials
|
|
77
|
-
uses: aws-actions/configure-aws-credentials@v4
|
|
78
|
-
with:
|
|
79
|
-
aws-access-key-id: $\{{ secrets.AWS_ACCESS_KEY_ID }}
|
|
80
|
-
aws-secret-access-key: $\{{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
81
|
-
aws-region: $\{{ env.AWS_REGION }}
|
|
82
|
-
|
|
83
|
-
- name: Deploy to ECS
|
|
84
|
-
run: |
|
|
85
|
-
aws ecs update-service \
|
|
86
|
-
--cluster {{projectNameKebabCase}}-prod \
|
|
87
|
-
--service {{projectNameKebabCase}}-api \
|
|
88
|
-
--force-new-deployment
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Production Dockerfile for {{projectName}}
|
|
2
|
-
|
|
3
|
-
# Build stage
|
|
4
|
-
FROM node:20-alpine AS builder
|
|
5
|
-
|
|
6
|
-
WORKDIR /app
|
|
7
|
-
|
|
8
|
-
# Copy package files
|
|
9
|
-
COPY package*.json ./
|
|
10
|
-
|
|
11
|
-
# Install dependencies
|
|
12
|
-
RUN npm ci --only=production
|
|
13
|
-
|
|
14
|
-
# Copy source code
|
|
15
|
-
COPY . .
|
|
16
|
-
|
|
17
|
-
# Build TypeScript
|
|
18
|
-
RUN npm run build
|
|
19
|
-
|
|
20
|
-
# Production stage
|
|
21
|
-
FROM node:20-alpine AS production
|
|
22
|
-
|
|
23
|
-
WORKDIR /app
|
|
24
|
-
|
|
25
|
-
# Create non-root user
|
|
26
|
-
RUN addgroup -g 1001 -S nodejs && \
|
|
27
|
-
adduser -S nodejs -u 1001
|
|
28
|
-
|
|
29
|
-
# Copy built application
|
|
30
|
-
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
|
|
31
|
-
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
|
|
32
|
-
COPY --from=builder --chown=nodejs:nodejs /app/package.json ./
|
|
33
|
-
|
|
34
|
-
# Switch to non-root user
|
|
35
|
-
USER nodejs
|
|
36
|
-
|
|
37
|
-
# Expose port
|
|
38
|
-
EXPOSE 3000
|
|
39
|
-
|
|
40
|
-
# Health check
|
|
41
|
-
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
42
|
-
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
|
|
43
|
-
|
|
44
|
-
# Start application
|
|
45
|
-
CMD ["node", "dist/index.js"]
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# Terraform Infrastructure for {{projectName}}
|
|
2
|
-
|
|
3
|
-
terraform {
|
|
4
|
-
required_version = ">= 1.0.0"
|
|
5
|
-
|
|
6
|
-
required_providers {
|
|
7
|
-
aws = {
|
|
8
|
-
source = "hashicorp/aws"
|
|
9
|
-
version = "~> 5.0"
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
# Uncomment for remote state (recommended for production)
|
|
14
|
-
# backend "s3" {
|
|
15
|
-
# bucket = "your-terraform-state-bucket"
|
|
16
|
-
# key = "{{projectNameKebabCase}}/terraform.tfstate"
|
|
17
|
-
# region = "us-east-1"
|
|
18
|
-
# encrypt = true
|
|
19
|
-
# dynamodb_table = "terraform-locks"
|
|
20
|
-
# }
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
provider "aws" {
|
|
24
|
-
region = var.aws_region
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
# Variables
|
|
28
|
-
variable "aws_region" {
|
|
29
|
-
description = "AWS region"
|
|
30
|
-
type = string
|
|
31
|
-
default = "us-east-1"
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
variable "environment" {
|
|
35
|
-
description = "Environment name (dev, staging, prod)"
|
|
36
|
-
type = string
|
|
37
|
-
default = "dev"
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
variable "app_name" {
|
|
41
|
-
description = "Application name"
|
|
42
|
-
type = string
|
|
43
|
-
default = "{{projectNameKebabCase}}"
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
# VPC
|
|
47
|
-
module "vpc" {
|
|
48
|
-
source = "./modules/vpc"
|
|
49
|
-
|
|
50
|
-
app_name = var.app_name
|
|
51
|
-
environment = var.environment
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
# ECS Cluster
|
|
55
|
-
module "ecs" {
|
|
56
|
-
source = "./modules/ecs"
|
|
57
|
-
|
|
58
|
-
app_name = var.app_name
|
|
59
|
-
environment = var.environment
|
|
60
|
-
vpc_id = module.vpc.vpc_id
|
|
61
|
-
subnet_ids = module.vpc.private_subnet_ids
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
# RDS PostgreSQL
|
|
65
|
-
module "rds" {
|
|
66
|
-
source = "./modules/rds"
|
|
67
|
-
|
|
68
|
-
app_name = var.app_name
|
|
69
|
-
environment = var.environment
|
|
70
|
-
vpc_id = module.vpc.vpc_id
|
|
71
|
-
subnet_ids = module.vpc.private_subnet_ids
|
|
72
|
-
security_group_id = module.vpc.db_security_group_id
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
# Outputs
|
|
76
|
-
output "ecs_cluster_name" {
|
|
77
|
-
value = module.ecs.cluster_name
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
output "rds_endpoint" {
|
|
81
|
-
value = module.rds.endpoint
|
|
82
|
-
sensitive = true
|
|
83
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# ECS Module
|
|
2
|
-
|
|
3
|
-
variable "app_name" {
|
|
4
|
-
type = string
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
variable "environment" {
|
|
8
|
-
type = string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
variable "vpc_id" {
|
|
12
|
-
type = string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
variable "subnet_ids" {
|
|
16
|
-
type = list(string)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
# ECS Cluster
|
|
20
|
-
resource "aws_ecs_cluster" "main" {
|
|
21
|
-
name = "${var.app_name}-${var.environment}"
|
|
22
|
-
|
|
23
|
-
setting {
|
|
24
|
-
name = "containerInsights"
|
|
25
|
-
value = "enabled"
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
tags = {
|
|
29
|
-
Name = "${var.app_name}-${var.environment}"
|
|
30
|
-
Environment = var.environment
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
# ECS Capacity Provider
|
|
35
|
-
resource "aws_ecs_cluster_capacity_providers" "main" {
|
|
36
|
-
cluster_name = aws_ecs_cluster.main.name
|
|
37
|
-
|
|
38
|
-
capacity_providers = ["FARGATE", "FARGATE_SPOT"]
|
|
39
|
-
|
|
40
|
-
default_capacity_provider_strategy {
|
|
41
|
-
base = 1
|
|
42
|
-
weight = 100
|
|
43
|
-
capacity_provider = "FARGATE"
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
# Outputs
|
|
48
|
-
output "cluster_name" {
|
|
49
|
-
value = aws_ecs_cluster.main.name
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
output "cluster_arn" {
|
|
53
|
-
value = aws_ecs_cluster.main.arn
|
|
54
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
# RDS Module
|
|
2
|
-
|
|
3
|
-
variable "app_name" {
|
|
4
|
-
type = string
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
variable "environment" {
|
|
8
|
-
type = string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
variable "vpc_id" {
|
|
12
|
-
type = string
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
variable "subnet_ids" {
|
|
16
|
-
type = list(string)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
variable "security_group_id" {
|
|
20
|
-
type = string
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
# DB Subnet Group
|
|
24
|
-
resource "aws_db_subnet_group" "main" {
|
|
25
|
-
name = "${var.app_name}-${var.environment}"
|
|
26
|
-
subnet_ids = var.subnet_ids
|
|
27
|
-
|
|
28
|
-
tags = {
|
|
29
|
-
Name = "${var.app_name}-${var.environment}"
|
|
30
|
-
Environment = var.environment
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
# RDS PostgreSQL Instance
|
|
35
|
-
resource "aws_db_instance" "main" {
|
|
36
|
-
identifier = "${var.app_name}-${var.environment}"
|
|
37
|
-
|
|
38
|
-
engine = "postgres"
|
|
39
|
-
engine_version = "16"
|
|
40
|
-
instance_class = "db.t3.micro"
|
|
41
|
-
|
|
42
|
-
allocated_storage = 20
|
|
43
|
-
max_allocated_storage = 100
|
|
44
|
-
storage_type = "gp3"
|
|
45
|
-
storage_encrypted = true
|
|
46
|
-
|
|
47
|
-
db_name = replace(var.app_name, "-", "_")
|
|
48
|
-
username = "postgres"
|
|
49
|
-
password = random_password.db_password.result
|
|
50
|
-
|
|
51
|
-
db_subnet_group_name = aws_db_subnet_group.main.name
|
|
52
|
-
vpc_security_group_ids = [var.security_group_id]
|
|
53
|
-
|
|
54
|
-
backup_retention_period = 7
|
|
55
|
-
skip_final_snapshot = var.environment != "prod"
|
|
56
|
-
|
|
57
|
-
tags = {
|
|
58
|
-
Name = "${var.app_name}-${var.environment}"
|
|
59
|
-
Environment = var.environment
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
# Random password for DB
|
|
64
|
-
resource "random_password" "db_password" {
|
|
65
|
-
length = 32
|
|
66
|
-
special = false
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
# Store password in SSM
|
|
70
|
-
resource "aws_ssm_parameter" "db_password" {
|
|
71
|
-
name = "/${var.app_name}/${var.environment}/db-password"
|
|
72
|
-
description = "Database password for ${var.app_name}"
|
|
73
|
-
type = "SecureString"
|
|
74
|
-
value = random_password.db_password.result
|
|
75
|
-
|
|
76
|
-
tags = {
|
|
77
|
-
Environment = var.environment
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
# Outputs
|
|
82
|
-
output "endpoint" {
|
|
83
|
-
value = aws_db_instance.main.endpoint
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
output "db_name" {
|
|
87
|
-
value = aws_db_instance.main.db_name
|
|
88
|
-
}
|