Project Management App

This project was made to get hands-on experience with developing a REST API using C# and the ASP.NET Core Web API framework. While developing this API, I also got a chance to implement the Repository design pattern so that the data-access logic would be separated from the business-logic. The application uses Azure SQL Database, a platform-as-a-service (PaaS) that utilizes the Microsoft SQL Server database engine and hosts the database on Azure. A ReactJS front-end component allows the user to interact with the projects, bugs, employees, and project managers within the database and calls the REST API for it's back-end services. To learn more about the project's features and challenges, scroll down to read more!

Web App Demo API Demo GitHub
Bug picture

Sample UI

GetAllBugs picture

Get All Bugs Method


Get Bug By Id Method


High Level System Design


Entity Relationship Diagram

Features and highlights

  • Allows a user to perform CRUD operations on a Microsft SQL Server database
  • Demonstrates the Repository design pattern that isolates the data-layer from the rest of the application
  • Utilizes the ADO.NET library as the data-access technology
  • Uses an interface to define each entity repository with all logical read and write operations specific to the entity
  • Microsoft SQL Server and Azure SQL was used as the database and hosting environment
  • Utilizes a ReactJS front-end component that calls the REST API for it's back-end data-access services.

Motivations for project

I wanted to learn how to design and implement a REST API from the ground-up using C# and the ASP.NET Core Web API framework. After accomplishing my initial task, I decided that I then wanted to implement a front-end component so that the user could interact with the REST API using a web-based user-interface. I used ReactJS for the front-end component that called the REST API for it's back-end services, allowing the user to interact with the different tables and records stored within the Microsoft SQL Server database using any web-browser.

What I learned

While developing this application, I got hands-on experience with how to use controllers. While writing the data-access methods for each entity, I also got to learn how to write them asynchronously so that each task wouldn't block each other as the async methods were executing. Finally, I learned how to use a constructor for each controller class, that used the interface associated with each entity's data-access class so that the associated data-access logic could be used through dependency-injection. This was done to allow for loose coupling and the ability to swap out data-access implementations without having to refactor a significant chunk of the codebase.

When designing the tables for the database, I made use of constraints such as "ON DELETE SET NULL" and "ON DELETE CASCADE". I used these constraints to ensure that when a project is deleted, all bug records associated with that project would also be deleted; when a project is deleted, the employee assigned to it is also unassigned from the project since it no longer exists. Since the employees are now unassigned, the project manager can now reassign these employees to projects that may need them. Since bugs are usually unique to each piece of software or project, it didn't make sense for them to still exist when a project was deleted so they are deleted along with the project they belonged to.

After I was done with creating the database and REST API that connected to it, I decided to further develop my front-end skills by developing a ReactJS front-end component that would utilize the REST API. While diving into ReactJS I learned how to: use the useEffect hook to perform the necessary API calls, how to collect user-inputs and perform client-side validations using the React-Hook-Form library, established routing between the different ReactJS components using the React-Router library, and added some small animations to the app using the Framer-Motion library.