# Overview

### General

The codebase is all [TypeScript](https://www.typescriptlang.org) and [NodeJS](https://nodejs.org/en/). For more info please see the [Technical Direction](https://proyecto-informatico.gitbook.io/task-manager/technical-overview/broken-reference). We use [NX](https://nx.dev) to manage the monorepo structure. We have one set of NodeJS modules used by all code and any changes in there affect potentially multiple services.

The backend is being constructed as a monolitic REST API, using Spring boot web flux and Mysql Server for the data persistance.

| Tool                                                                                 | Description                         |
| ------------------------------------------------------------------------------------ | ----------------------------------- |
| [Spring boot](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/) | scripts and server-side framework   |
| [TypeScript](https://www.typescriptlang.org/)                                        | programming language                |
| [NX](https://nx.dev/react)                                                           | monorepo tools and code scaffolding |

### Frontend

| Tool                               | Description                    |
| ---------------------------------- | ------------------------------ |
| Angular                            | UI framework                   |
| [Cypress](https://www.cypress.io/) | automated browser testing tool |

### Backend

We use Springboot for the backend. Use the pre-packaged setup that we have and you will save us all some time. You can find the latest and greatest in how we setup a backend in our [reference-backend](https://proyecto-informatico.gitbook.io/task-manager/technical-overview/broken-reference)

| Tool                                                 | Description                                                                                          |
| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| Springboot                                           | server-side framework focused on flux web and fast response micro services.                          |
| Hibernate                                            | a famous Java ORM (object relational mapping) embed database object relational mapper in Spring boot |
| [OpenAPI Generator](https://openapi-generator.tech/) | generate clients and types for OpenAPI APIs                                                          |

### Code Quality

| Tool                             | Description                                                                            |
| -------------------------------- | -------------------------------------------------------------------------------------- |
| [Jest](https://jestjs.io/)       | automated testing tool                                                                 |
| [ESLint](https://eslint.org/)    | code checker                                                                           |
| [Prettier](https://prettier.io/) | code formatter                                                                         |
| JUnit                            | automated unitary and integration testing tool focused on Java and with Spring support |

### Protocols and specifications

| Tool                                           | Description                                                                                                                    |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| [GraphQL](https://graphql.org/)                | api protocol for our frontend projects                                                                                         |
| [OpenAPI](https://www.openapis.org/)           | specification to describe rest apis                                                                                            |
| [Open ID Connect](https://openid.net/connect/) | authentication protocols                                                                                                       |
| REST                                           | A software architectural style that was created to guide the design and development of the architecture for the World Wide Web |

### Repositories

| Tool                                      | Description                        |
| ----------------------------------------- | ---------------------------------- |
| MySQL                                     | SQL database                       |
| [Contentful](https://www.contentful.com/) | headless content management system |
