Skip to content

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

License

Notifications You must be signed in to change notification settings

hebertzin/Project-management

Repository files navigation

API for project management

Build Status

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

Features

Authentication / security

  • Encrypt user passwords
  • Send email to confirm account
  • 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

  • It is possible to create an account
  • It is possible to find an account by ID
  • It is possible to delete an account

Profile

  • It is possible to have a profile
  • it is possible to find a profile by ID

Projects

  • User can create a project
  • User can list a project by ID
  • User can list all his projects
  • User can delete a project
  • User can follow projects
  • User can stop following projects

Project ideas

  • It is possibel create a project idea
  • It is possibel delete a project idea
  • It is possible update a project idea
  • It is possible to find all project ideas that you created

Project questions

  • User can add questions for a given project
  • User edit questions for a given project
  • User can delete questions from a given project
  • User can list all his created questions

Project objectives

  • User can add objectives for a given project
  • User edit objectives for a given project
  • User can delete objectives from a given project
  • User can list all his created goals

Project decisions

  • User can add decisions to a given project
  • User can update decisions for a given project
  • User can delete decisions for a given project
  • User can list a decision by ID
  • User can list all his decisions

Project updates

  • User can add updates to a given project
  • User can edit updates to a given project
  • User can delete updates to a given project
  • User can list an update by ID
  • User can list all their updates

Teams

  • User can create a team
  • User can list a team by ID
  • User can delete a team
  • 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).

Releases

No releases published

Packages

No packages published