#!/usr/bin/env node
import "source-map-support/register";
import { App, Aws } from "@aws-cdk/core";

import { GraphqlApiStack } from "../lib/api-stack";
import { VpcStack } from "../lib/vpc-stack";
import { RDSStack } from "../lib/rds-stack";
import { PipelineStack } from "../lib/cicd-stack";

const app = new App();

const vpcStack = new VpcStack(app, "VPCStack");

// RDS Postgres
const rdsStack = new RDSStack(app, "RDSStack", {
  vpc: vpcStack.vpc,
  securityGroup: vpcStack.ingressSecurityGroup,
});

// Serverless Lambda/API Gateway Graphql API
new GraphqlApiStack(app, "APIStack", {
  vpc: vpcStack.vpc,
  inboundDbAccessSecurityGroup:
    rdsStack.postgresRDSInstance.connections.securityGroups[0].securityGroupId,
  rdsEndpoint: rdsStack.postgresRDSInstance.dbInstanceEndpointAddress,
  rdsDbUser: rdsStack.rdsDbUser,
  rdsDbName: rdsStack.rdsDbName,
  rdsPort: rdsStack.rdsPort,
});

// CodePipeline/CodeBuild for CI/CD
new PipelineStack(app, "PipelineStack");