Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fdaciuk/conduit-api
API for Real World App project (Conduit) using Node.js + TS with Functional Programming
https://github.com/fdaciuk/conduit-api
hacktoberfest
Last synced: 12 days ago
JSON representation
API for Real World App project (Conduit) using Node.js + TS with Functional Programming
- Host: GitHub
- URL: https://github.com/fdaciuk/conduit-api
- Owner: fdaciuk
- License: mit
- Created: 2021-06-23T11:31:39.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-05-11T17:54:37.000Z (over 1 year ago)
- Last Synced: 2024-10-13T13:30:12.117Z (26 days ago)
- Topics: hacktoberfest
- Language: TypeScript
- Homepage: https://conduitapi.up.railway.app
- Size: 519 KB
- Stars: 180
- Watchers: 5
- Forks: 24
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-javascript - conduit-api
- awesome-javascript - conduit-api
README
# Conduit API
> API for Real World App (Conduit) using Node.js + TypeScript with Functional Programming
## Required global dependencies
- Node.js v16
- Yarn v1## Up & Running
1. Install local dependencies:
```terminal
yarn
```2. Tests (watch mode):
```terminal
yarn test:watch
```3. Get the server and database up:
```terminal
yarn dev
```To stop the server watch, just press `Ctrl + c`.
4. Stop docker after get server down:
```
yarn docker:down
```5. Destroy all data from DB:
```
yarn docker:destroy
```## Scripts
| Script | Description |
| ----------------------------- | ------------------------------------------------------------- |
| `yarn start` | Run production server |
| `yarn dev` | Get database up and run dev server |
| `yarn server` | Run only dev server |
| `yarn docker:up` | Get docker configuration up |
| `yarn docker:down` | Get docker configuration down |
| `yarn docker:destroy` | Destroy database and all docker data |
| `yarn migrate ` | Run Prisma migration (You must provide a name) |
| `yarn migration` | Run existent Prisma migrations |
| `yarn migration:prod` | Run existent Prisma migrations on production |
| `yarn test` | Run unit and integration tests once (great to be used in CI) |
| `yarn test:unit` | Run unit tests once |
| `yarn test:watch` | Run unit tests in watch mode |
| `yarn test:integration` | Run integration tests once |
| `yarn test:integration:watch` | Run integration tests in watch mode |
| `yarn lint` | Run linter |
| `yarn lint:fix` | Fix lint errors |
| `yarn type-check` | TS typechecking |
| `yarn prepare` | Not suposed to be manually used. It's just to configure husky |
| `yarn build` | Generates production build |
| `yarn ci` | Run lint, typechecking and tests (meant to be used in a CI) |
| `yarn update-deps` | Update both dependencies and devDependencies |## Tree structure
This project uses Hexagonal Architecture (Ports & Adapters) with Functional Programming.
```terminal
.
├── src
│ ├── config
│ │ ├── tests
│ │ │ └── fixtures
│ │ └── module-alias.ts
│ ├── core
│ │ ├──
│ │ │ ├── use-cases
│ │ │ │ ├── -adapter.ts
│ │ │ │ ├── .test.ts
│ │ │ │ ├── .ts
│ │ │ └── types.ts
│ │ └── types
│ │ ├── .test.ts
│ │ └── .ts
│ ├── ports
│ │ ├── adapters
│ │ │ └──
│ │ └──
│ ├── app.ts
│ └── index.ts
├── .env.example
├── jest.config.integration.js
└── jest.config.js```
| Directory / File | Description |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `src` | All source code write in TypeScript must be in this directory. |
| `src/index.ts` | Main entry point for initial configuration of the project. **Do not edit this file.** Start with `src/app.ts`. |
| `src/app.ts` | Project entry point. You can call your first `port` here and boot your providers that should start before your server. |
| `src/config` | All configurations can live here. |
| `src/config/tests/fixtures` | Helpers for using in tests. |
| `src/config/module-alias.ts` | Module configurations for using `@/` instead of `../../` on dev, tests and production environments. |
| `src/core` | Pure domain implementations. `core` files must **not know** any `port` or `adapter`, nor anything ouside `core` directory. |
| `src/core/` | Inside the `core` directory, you can organize your files by domain or entity. |
| `src/core//types` | Start point for modelling your domain / entity with TypeScript types. |
| `src/core//use-cases` | Here you can put your functions with business rules for this specific domain / entity, and the adapters that `ports` will use. |
| `src/core/types` | Here you can put the types that are not related with any of your domains or entities. |
| `src/helpers` | Here you can put your global helpers. |
| `src/ports` | Anything with external world contact. When you need to access something on `core`, you must use an `adapter`. |
| `src/ports/adapters` | Adapters for ports. For example: You can have a `database` adapter that can use `Postgres` or `MariaDB`. An `http` adapter that can consume `express` or `fastify`. |
| `src/ports/` | Here you can create your raw `ports` with real implementation: `express` / `fastify` as http server, `postgres` / `mariadb` as databases, etc. |
| `.env.example` | List of Environment Variables. Please, copy this file and create a new `.env` file to use Env Vars. |
| `jest.config.integration.js` | Jest configuration file for integration tests. |
| `jest.config.js` | Main Jest configuration file. |## Important usage information
### Environment Variables
You can use env vars by copying the `.env.example` file to a new `.env` file on the root of the project.
To document all used env vars, and get autocomplete when use the function `env('YOU_VAR')`,
just put all your env vars on file `src/helpers/env.ts`.### Global import
All files and dirs inside `src` directory can be imported using `@/`.
Prefer using this way over local import (`../../`).## License
MIT