Coder Social home page Coder Social logo

hamed-shirbandi / taskomask Goto Github PK

View Code? Open in Web Editor NEW
649.0 24.0 108.0 17.62 MB

Task management system based on .NET 6 with Microservices, DDD, CQRS, Event Sourcing and Testing Concepts

Home Page: http://taskomask.ir

License: MIT License

C# 59.81% Dockerfile 1.12% HTML 37.41% CSS 1.15% JavaScript 0.01% Gherkin 0.07% Batchfile 0.02% PowerShell 0.24% Shell 0.19%
ddd event-sourcing cqrs bdd microservices clean-architechture event-driven-architecture tdd net6 vertical-slice-architecture

taskomask's Introduction

What is TaskoMask?

build and test Mutation testing GitHub issues

TaskoMask is an open-source task management system built on the .Net framework. The primary objective of this project is to demonstrate the practical application of advanced software development concepts such as DDD (Domain-Driven Design), TDD (Test-Driven Development), BDD (Behavior-Driven Development), and Microservices.

In many cases, the experience of applying these concepts to real-world software products is often obscured by proprietary software companies. TaskoMask seeks to provide transparency and insight into their usage.

We invite you to explore our project's wiki for more information

Try it [online]

taskomask website

Documentation

Plan and Progress

All the information presented beyond this section represents our project's final objectives and the broader vision. It's important to note that some of these elements may still be a work in progress. To gain insight into our project's roadmap and track our progress, please refer to the following items:

Design

🔴Work is in progress

Here is a comprehensive list of the patterns, principles, approaches, and methodologies that we have incorporated into our project's design. It's important to note that these have been included as examples to showcase their usage within a project. In a real-world design, you would need to carefully evaluate and select the most appropriate ones based on your project's specific trade-offs and requirements.

development architecture

Implementation

Here is a comprehensive list of the tools and technologies we have employed to implement this project.

  • Back-end:

    click for details
  • Front-end:

    click for details
    • Blazor
      • Blazor Server
        • Cookie Authentication without ASP.NET Identity
        • It was Blazor Server befor refactoring it to WebAssembly (browse the codes here)
      • Blazor WebAssembly (standalone)
        • JWT Authentication
      • Comunication between components
      • Local Storage
      • Consume REST API
      • Retry using HttpClientRetryHelper
      • Handle Drag and Drop
      • Using Modal, Toast, etc.
    • .HTML
    • CSS
    • JavaScript
    • JQuery
    • Bootstrap
    • Jquery.noty
    • Chart.js
  • Some other Features:

    click for details
    • Continuous Integration
    • Feature Branch Workflow
    • Conventional Commits
    • GitHub Actions
    • Mutation testing dashboard reporter
    • Caching Behavior using Pipeline Pattern
    • Validation Behavior using Pipeline Pattern (Check both Fluent Validation and Data Annotation Validation)
    • Event Storing Behavior using Pipeline Pattern
    • Exception Handling
    • Cookie Authentication
    • JWT Authentication
    • Role Permission Base User Management without ASP.NET Identity (check Domain documentation)
    • Swagger UI with JWT Support

Contributing

We welcome contributions, issue reports, and questions from the community. Any contributions you make are highly valued and appreciated.

Please refer to our Contribution Guide for detailed instructions on how to get involved in this project.

This project thrives and evolves thanks to the dedicated individuals who contribute their time and expertise

GitHub Contributors Image

Articles And Tutorials

Supporting

We are dedicated to creating a valuable resource for the .NET community. If this project has been beneficial to you, please consider showing your support by giving it a ⭐ star. Your support is crucial, whether through starring the project, contributing, or sharing it with anyone who can benefit. You can also join the conversation on Twitter by using the hashtag #taskomask.

Author & License

This project is authored by Hamed Shirbandi and is licensed under the MIT License. You can find Hamed across various online platforms, and please don't hesitate to reach out if you have any questions or inquiries.

LinkedInInstagramGitHubMediumNugetEmailTelegramTwitter

Change logs

2023
  • Oct, 2023

    • Instrument with Prometheus metrics
    • Implement build system using nuke
    • Implement Mutation Testing using Stryker
    • Integrate CI with nuke and stryker
    • Mutation testing dashboard reporter
  • Sep, 2023

    • Global Code Refactoring
    • Handle Managed and Unmanaged Exceptions
    • Log Managed and Unmanaged Exceptions
  • Feb, 2023

    • Simplify Write Service Architecture
    • Implement Unit Tests for Task Services
    • Implement Integration Tests for Task Services
  • Jan, 2023

    • Extract Task Write Service
    • Extract Task Read Service
    • Remove Monolith Service
    • Simplify Write Service Architecture
2022
  • Dec, 2022

    • Extract Board Write Service
    • Extract Board Read Service
    • Implement Integration Tests for Board Services
    • Implement Unit Tests for Board Services
    • Handle RPC requests by gRPC
    • Extract API Gateway Aggregator
    • Complete API Gateway Configs by Ocelot
  • Nov, 2022

    • Implement Unit Tests for Owner Services
    • Implement Integration Tests for Owner Services
  • Oct, 2022

    • Extract Owner Write Service
    • Extract Owner Read Service
    • Handle Messaging by RabbitMQ
  • Sep, 2022

    • Extract Identity Service
    • Add IdentityServer as IDP
    • Add ASP.NET Identity
    • Add User Panel API Gateway
    • Refactor to Clean Architecture
    • Follow Vertical Slice Architecture
    • Follow Use Case Driven Development
  • Aug, 2022

    • Migrate from Monolith to Microservices
  • July, 2022

    • Convert UserPanel from Blazor Server to Blazor WebAssembly
    • Complete the functionalities for single user usage
  • Apr, 2022

    • Implement Unit Tests
    • Implement Integration Tests
    • Implement Acceptance Tests
    • Implement API Tests
    • Implement UI Tests
  • Jan, 2022

    • Full refactor Domain model with DDD concepts
    • Separate Domain Model and Data Model
    • Separate Read Side and Write Side Database
2021
  • Dec, 2021

    • Upgrade to .NET 6
  • Nov, 2021

    • Convert user panel from ASP.NET MVC to Blazor Server
  • Oct, 2021

    • Implement admin panel with ASP.NET MVC
    • Implement administration subdomain
  • Aug, 2021

    • Remove Asp.net Identity
    • Add cookie authentication
    • Add JWT authorization
    • Implement API with ASP.NET Web API
  • Jul, 2021

    • Full refactore
2020
  • Nov, 2020

    • Upgrad from net 3.1 to net 5
    • Implement user panel with ASP.NET MVC
  • Oct, 2020

    • Implement Website with ASP.NET MVC
    • Implement Anemic Domain Model
    • Create Repository

taskomask's People

Contributors

amiradeli avatar armanleft avatar connellsharp avatar hamed-shirbandi avatar kurnakovv avatar rezamansouri70 avatar sajadjalilian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

taskomask's Issues

Add color to board

  • add color and its related behavior to board
  • add it to create and update forms for board in UserPanel

What is the best reference for microservices?

hello , hamed
1- What is the best reference for microservices?
2- Is DDD necessary for microservices Or it can be based on business?
3- Is CQRS necessary for microservices Or it can be based on business?

Add attachment to task

  • add attachment to domain model
  • implement attachment application services
  • update the domain documentation

Add attachment to task

Attachments can be any type of safe files.

  • add attachments list to task details view model
  • add new api to add an attachment to a task
  • add new api to delete an attachment from a task
  • handle add and delete attachment in task details component
  • update Readme files for handling files with Blazor

Ignore complexity of soft delete

Soft delete add complexity to application by over checking all objects in all queries.
We have event store and can use it if the deleted data is needed.

Project dependencies don't seem to match architectural documentation

Great project! Contains many patterns and approaches I've been learning about recently and it's nice to see them put together.

I was looking at the architecture documentation and noticed the project uses Onion Architecture. There's a diagram showing the Infrastructure and Persistence layers depending on the Application. The bullets below the diagram show that each csproj sits within one of those layers and the namespaces indicate which layer they are in.

I would expect to see a dependency tree 1. Infrastructure -> 2. Application -> 3. Domain. This appears correct when the Infrastructure.CrossCutting project has a project reference to the Application.Core.

However, when browsing the source, the Libraries directory contains numbered folders which imply a different order 1. Application -> 2. Infrastructure -> 3. Domain. The Application.Core project contains a project reference to the Infrastructure.Data project which matches this approach.

The only usage of this reference I can find is that the EventStoringBehavior depends on the IEventStore from the infrastructure.

Can I move that behaviour to the infrastructure project and reverse the dependency here? Happy to raise the PR

Serilog in not working!

First of all, thank you for knowledge sharing.
Actually, projects did not run properly for me until I added

builder.Host.UseSerilog(((ctx, lc) => lc.ReadFrom.Configuration(ctx.Configuration)));

to the Program.cs file.
Please let me know if the projects are working properly for you without this line.
I suppose for Serilog to be working properly we have to add UseSerilog but I did not find it anywhere in the code.

Configure docker-compose for deployment

  • make a docker-compose to build and run the app through docker (docker-compose.yaml)
  • make a docker-compose to run the required services for debugging the app (infrastracture.yaml)
  • update project README file with docker compose information

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.