PlanIt is a web application built with ASP.NET Core, Entity Framework, .NET Identity, and React. The API is based on Clean Architecture, Domain-Driven Design (DDD), and Command Query Responsibility Segregation (CQRS) patterns. The frontend utilizes React 18 with Redux RTK for efficient state management, providing a responsive and intuitive user interface with drag-and-drop functionality for enhanced user experience.
- Clean Architecture & DDD: Ensures clear separation of concerns and a rich domain model
- CQRS with MediatR: Separates read/write operations for scalability
- RESTful API: Serves as the main interface for client interactions, providing clear endpoints for workspace, project, and task management operations
- JWT Authentication: Implements secure user authentication and authorization
demo.mp4
- Create, read, update, and delete workspaces/projects/tasks
- Move tasks from one project to another via drag and drop
- Assign multiple users to a specific task
- Drag tasks and project containers to organize them as you like
- Authentication and authorization using .NET Identity with JWT
- Register, login, and manage user profiles
- Upload user profile pictures
- Browse between different workspaces that encapsulate projects and tasks
- Persistence of project and task order in their containers
- More unit tests, especially for the command handlers
- ASP.NET Core
- Entity Framework Core
- .NET Identity
- MediatR (for CQRS) with command validation
- SQL Server
- React, TypeScript, Redux Toolkit, RTK Query, DndKit
- xUnit, FluentAssertions, NSubstitute (unit testing)
Follow these steps to set up and run the project locally.
- .NET Core SDK
- Visual Studio (or any preferred IDE)
- SQL Server
-
Clone the repository:
git clone https://github.com/tomgasper/PlanIt.git cd PlanIt
-
Configure the infrastructure: Update the connection string in
appsettings.json
to point to your SQL Server instance."ConnectionStrings": { "DefaultConnection": "Server=your_server;Database=PlanItDb;Trusted_Connection=True;MultipleActiveResultSets=true" }
Override JWT settings in appsettings.Development.json with your own secret:
"JwtSettings": { "Secret": "<YOUR SECRET HERE>", "ExpiryMinutes": 60, "Issuer": "PlanIt", "Audience": "PlanIt" }
Provide your API key for Cloudinary Service in appsettings.json:
"CloudinarySettings": { "CloudName": "<YOUR CLOUD NAME>", "ApiKey": "<YOUR API KEY>", "ApiSecret": "<YOUR API SECRET>" }
-
Apply migrations: Open the terminal in the project directory and run the following command to apply the migrations:
dotnet ef database update
-
Run the application:
dotnet run --project src/PlanIt.WebApi
Or you can use Visual Studio to run the project by pressing
F5
.