Skip to content

Latest commit

 

History

History
110 lines (71 loc) · 2.66 KB

technology-stack.md

File metadata and controls

110 lines (71 loc) · 2.66 KB

The main stack

  • TypeScript
  • Java
  • SQL

Infrastructure

AWS, CDK - TypeScript

For CI/CD, we use a lot of AWS: codebuild, codepipeline, lambda, ECR.

The AWS code is in a separate repo, there's no credentials in there but we're still reluctant to make it publicly available, especially early during development.

https://github.com/au-research/raido-v2-aws-private

We would be open to working on a simple "example" AWS CDK infrastructure.

Database

Postgres

Managed via AWS RDS.

No cross-database support, we take full advantage of Postgres features without needing to worry about cross-DB compatibility

Flyway

For Schema migration.

Developers are encouraged to understand SQL and use it to full potential, with jOOQ helping us take advantage of static typing for our queries.

jOOQ

After a new schema is defined and migrated, we generate jOOQ code for accessing the database, see db/raido/build.gradle.

API

Currently, the API is defined as an OpenAPI 3.0 yaml document.

We plan to use OpenAPI 3.1, but the tooling hasn't caught up with the specification yet (seems like the complexity of the change to json-schema surprised most people with how much work it turned out to be).

We define the API as a yaml file, then the Java interfaces for serving the API from the api-svc (Spring) are generated via the openap-generator, see idl-raid-v2/build.gradle.

The client-side TypeScript mappings are also generated via openapi-generator, see app-client/build.gradle.

Backend

  • Docker
    • very simple setup running on EC2 via shell script, see /api-svc/docker
      • unfortunately, the actual shell script to install and run the container is in the private rep
  • Java
    • JDK 17 - Corretto
  • Spring
    • Not spring-boot
  • Gatling
    • load testing
    • we use the Java API bindings for this, no Scala

Frontend

  • TypeScript
  • React
    • With react-query, but no Redux or similar Flux implementation
  • Material UI

REST

We use OpenApi with an “API first” approach, Java and TypeScript code is generated from the OpenApi definition.

Miscellaneous

Little bits of scripting stuff, the usual glue code.

  • Docker
    • i.e. Dockerfile
  • Groovy
    • Gradle build scripts
    • legacy data migration
  • Shell scripts
    • for booting up EC2 instances,
    • codebuild definitions
  • JavaScript
    • little bits of glue, like in NPM scripts, etc.