An open API service indexing awesome lists of open source software.

https://github.com/hebertzin/project-management

API for project management, which has various functionalities related to projects, teams, objectives and much more.
https://github.com/hebertzin/project-management

api-rest bcrypt bcryptjs class-validator commitlint docker dto eslint husky jwt mailtrap nest nodemailer postgres prettier prisma typescript

Last synced: 17 days ago
JSON representation

API for project management, which has various functionalities related to projects, teams, objectives and much more.

Awesome Lists containing this project

README

        

### API for project management

[![Build Status](https://github.com/ErickWendel/testing-serverless-apps/workflows/Docker%20Actions/badge.svg)](https://github.com/ErickWendel/testing-serverless-apps/actions)

### project description

This is in principle a very challenging project as it involves many tables and many relationships,
developed from the beginning, starting with data modeling, then it was time to choose the technologies,
I chose to develop with nestjs because it is robust and because I wanted to learn more about it, I used Postgres as the database.

### technologies used

- **Nest js** - Framework based on node js.
- **typescript** - By default, nest already comes with typescript.
- **Prisma** - ORM for relational databases.
- **Postgres** - Relational database.
- **Docker** – Containers to upload the database
- **Husky** - For commit routine, for example. Before making a commit, run tests or format the code.
- **Prettier** - To format the code and follow a pattern throughout the project
- **dbdiagram** - I used this software to model the data.

### system modeling
![modelagem-sistema](https://github.com/hebertsanto/API-project-management/assets/108555424/5b154751-4d69-4624-80c3-67442052ea0b)

## Features

### Authentication / security

- [x] Encrypt user passwords
- [x] Send email to confirm account
- [x] Validate email confirmation with token and change status in the database
- [ ] Email notifications
- [ ] Email templates in project
- [ ] Auth with github
- [ ] Reset password
- [ ] 2fa auth

### User

- [x] It is possible to create an account
- [x] It is possible to find an account by ID
- [x] It is possible to delete an account

### Profile

- [x] It is possible to have a profile
- [x] it is possible to find a profile by ID

### Projects

- [x] User can create a project
- [x] User can list a project by ID
- [x] User can list all his projects
- [x] User can delete a project
- [x] User can follow projects
- [x] User can stop following projects

### Project ideas

- [x] It is possibel create a project idea
- [x] It is possibel delete a project idea
- [x] It is possible update a project idea
- [x] It is possible to find all project ideas that you created

### Project questions

- [x] User can add questions for a given project
- [x] User edit questions for a given project
- [x] User can delete questions from a given project
- [x] User can list all his created questions

### Project objectives

- [x] User can add objectives for a given project
- [x] User edit objectives for a given project
- [x] User can delete objectives from a given project
- [x] User can list all his created goals

### Project decisions

- [x] User can add decisions to a given project
- [x] User can update decisions for a given project
- [x] User can delete decisions for a given project
- [x] User can list a decision by ID
- [x] User can list all his decisions

### Project updates

- [x] User can add updates to a given project
- [x] User can edit updates to a given project
- [x] User can delete updates to a given project
- [x] User can list an update by ID
- [x] User can list all their updates

### Teams

- [x] User can create a team
- [x] User can list a team by ID
- [x] User can delete a team
- [x] User can edit team data
- [ ] User can invite participants by email

### Relationships

This is a project where there are several relationships which is really cool, besides being challenging, you get a lot of learning
with relational databases.

You can see all the relationships in the schema.prisma file,
I also provided a diagram where all the tables and relationships are.

### conclusion

It's been a challenging project and good for my evolution as a developer, I'm facing several
challenges, solving them and acquiring a lot of knowledge.


### Future improvements

Even with most of the innovative features, there are still several points that can be improved to make an application more scalable, testable, and compliant with good software architecture practices:

- [ ] **Apply Dependency Inversion**
Separate the application logic from the concrete implementation of external libraries, such as email, persistence, and authentication services. This will provide greater flexibility and facilitate automated testing.

- [ ] **Create a Domain Layer**
Structure an application based on *Domain-Driven Design*, centralizing business rules in pure domain entities and services. This will help keep the code decoupled and easier to understand and maintain.

- [ ] **Refactor to a more solid Layered Architecture**
Better separate responsibilities between the application, domain, infrastructure, and interface layers (controllers, DTOs). This will allow for easier maintenance and the introduction of new features without causing side effects in other parts of the system.

- [ ] **Improve Automated Testing**
With a more decoupled architecture, it will be possible to write more practical tests for the domain and use cases, without directly relying on the infrastructure (such as databases or sending emails).