Skip to content

wladimirgrf/forum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

forum api

Terraform AWS NestJS TypeScript Vitest Prisma Docker Swagger

๐Ÿ“ƒ Overview

This project is a RESTful API designed for forum management. The use cases are centered around the fundamental elements of questions, answers, and comments. The entire application is built following SOLID principles, clean architecture, and domain event patterns.

โ˜๏ธ Infrastructure

๐Ÿ”Œ RESTful API with OpenAPI

๐Ÿ—„๏ธ Database Design

โ–ถ๏ธ Getting started

Requirements

Clone the project

$ git clone https://github.com/wladimirgrf/forum.git && cd forum

Install the Project dependencies

$ npm install

Environment Variables

$ cp .env.example .env

Set access credentials

aws configure

๐Ÿ–ฅ๏ธ Local Environment

Run the containers

$ docker-compose up -d

Migrations

$ npm run db:migrate

Launch the Application

$ npm run start:dev

Note

The API will be launched at http://localhost:3333/
Documentation available at http://localhost:3333/docs

๐Ÿš€ Deployment

You need to set up the resources for Terraform state synchronization.

Create the Bucket

aws s3api create-bucket --bucket forum-tf-state --region us-east-1

Caution

S3 requires unique names for buckets.

Create the DynamoDB table for state lock

aws dynamodb create-table \
    --table-name forum-tf-state-lock \
    --attribute-definitions AttributeName=LockID,AttributeType=S \
    --key-schema AttributeName=LockID,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
    --region us-east-1

Initialize the Working Directory

npm run infra:prep

Check the Execution Plan (OPTIONAL)

npm run infra:plan

Deploy the entire Infrastructure

# The process takes about 10 minutes
npm run infra:up

Note

Terraform requires a username and password for database access during deployment to securely connect the application.

โ–ณ Prisma

Prisma migrations are automatically executed during the deployment process.

However, it's important to note that this project utilizes a private VPC, and Prisma (in its current version) does not support executing migrations via API.

To address this, I incorporated the engine from the version I am using into the project's deployment flow. With a simple JS script, it is possible to use Lambda to execute the migrations within the VPC.

Important

So, if you want to run this project or another with the same infrastructure, it's crucial to pay attention to the engine version. Below is a link to a step-by-step guide for downloading the schema engine for the version of Prisma you are using: prisma/prisma#14873

Another useful link to follow is the issue addressing this topic in the Prisma repository. This feature may eventually be supported by the framework. prisma/prisma#4703

๐Ÿค Contributing

Fork the repository and clone your fork

$ git clone <fork-url> && cd forum

Create a branch for your edits

$ git checkout -b new-feature

Make the commit with your changes

$ git commit -m 'feat: New feature'

Send the code to your remote branch

$ git push origin new-feature

Create a pull request with your version.
After your pull request is merged, you can delete your branch.

๐Ÿ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

About

๐Ÿ’ฌ RESTful API designed for forum management

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published