βββββββββ ββββββ βββββββββββ βββ βββββββ ββββββββββββ βββββββββ βββ
ββββββββββββββββββββββββββββ ββββ ββββββββ βββββββββββββ ββββββββββββββ
βββ βββββββββββββββββββββββ βββ ββββββββββ ββββββ ββββββ ββββββ
βββ βββββββββββββββββββββββ βββ βββββββββ βββββββββββββ ββββββ
βββ βββ ββββββββββββββ βββ ββββββββββββββββββββ βββββββββββββ βββ
βββ βββ ββββββββββββββ βββ βββββββ βββββββββββ βββββββββββ βββ
A modular, extensible .NET 8 backend for an AIβassisted collaborative workspace
Empowering teams with intelligent project management, smart task generation, and seamless collaboration
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ποΈ TABLE OF CONTENTS β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- π Features
- ποΈ Architecture
- π Domain Model Overview
- π οΈ Tech Stack
- π Quick Start
- βοΈ Configuration
- π Running & Migration
- π‘ API Patterns
- π Example JSON
- π€ AI Roadmap
- π§ͺ Testing
- π€ Contribution
- π License
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π FEATURES β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- π’ Workspaces / Projects - Ownership, members, roles: Owner, Member, Viewer
- π Smart Task Generation - AI-assisted task creation (
TaskGen) with status, priority, due dates & reminder config - π User Authentication - JWT + refresh tokens + OTP flow + device tokens
- π³ Subscription Management - Quota tracking (Plans, PlanFeatures, UserPlans, UserPlanFeatures)
- π° Payment Integration - Transaction scaffold (PayOS integration placeholder)
- π Notification System - Scheduled, per-task, multi-channel ready
- ποΈ Recording Entity - Voice meeting capture (future transcription / summarization)
- π§© Clean Architecture - Separation of layers (Core / DAL / BLL / Server / AI)
- π DTO Projection - Via Mapster (prevents circular references)
- β Centralized Validation - Consistent API responses
- π Transaction-Safe Operations - Unit of Work pattern
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ποΈ ARCHITECTURE β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TaskGenix-BE/
βββ π― TaskGenix.Core # Domains, DTOs, Requests, Responses, Mappings, Validators, Meta
βββ ποΈ TaskGenix.DAL # EF Core DbContext, Configurations, Migrations
βββ βοΈ TaskGenix.BLL # Business Services, Interfaces, Transaction wrappers
βββ π TaskGenix.Server # ASP.NET Core Web API Host (Controllers, DI, Program)
βββ π€ TaskGenix.AI # (Future) AI orchestration / pipelines
βββ π§ͺ TaskGenix.Tests.Unit
βββ π¬ TaskGenix.Tests.Integration
- ποΈ Repository + Unit of Work - Clean data access abstraction
- π¦ DTO-first Controllers - Consistent API contracts
- π Mapster Mapping Registry - High-performance object mapping
- π‘οΈ Middleware-based Exception Handling - Centralized error management
- β Custom Model Validation - Enhanced input validation
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π DOMAIN MODEL OVERVIEW β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| π’ Area | π Key Entities |
|---|---|
| π€ Users & Auth | User, JwtToken, OtpCode, UserSetting |
| π’ Workspaces | Project, ProjectMember, Recording |
| π Tasks | TaskGen, TaskAssignment, TaskReminderConfig |
| π³ Plans & Billing | Plan, PlanFeature, UserPlan, UserPlanFeature, PaymentTransaction |
| π Notifications | Notification, UserDeviceToken |
| π€ AI (Future) | ModelPromting placeholder |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π οΈ TECH STACK β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- π· .NET 8 / C# 12 - Latest .NET ecosystem
- π ASP.NET Core Web API - High-performance web framework
- ποΈ Entity Framework Core - PostgreSQL via Npgsql
- β‘ Mapster - High-performance object mapping
- π JWT Authentication - Secure token-based auth with refresh tokens
- π₯ Firebase Admin SDK - Push notification infrastructure
- π Swagger / Swashbuckle - API documentation
- πΎ MemoryCache - In-memory caching
- π³ PayOS - Payment integration (placeholder)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π QUICK START β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- β .NET 8 SDK - Latest version
- β PostgreSQL - Database instance
- π₯ (Optional) Firebase - Service account JSON
firebase-service-account.json - π³ (Optional) PayOS - Payment gateway credentials
git clone https://github.com/taskgenix/TaskGenix-BE.git
cd TaskGenix-BEdotnet restore
dotnet buildββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β βοΈ CONFIGURATION β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Add to appsettings.Development.json (sample):
{
"ConnectionStrings": {
"SupabaseConnection": "Host=localhost;Port=5432;Database=taskgenix;Username=postgres;Password=secret"
},
"Jwt": {
"Issuer": "TaskGenix",
"Audience": "TaskGenix.Client",
"Key": "REPLACE_WITH_256BIT_SECRET_KEY",
"AccessTokenMinutes": 30,
"RefreshTokenDays": 7
},
"ApplyMigrations": true,
"PayOS": {
"ClientId": "...",
"ApiKey": "...",
"ChecksumKey": "..."
}
}Place Firebase credentials file at: TaskGenix.Server/firebase-service-account.json (if used).
| π Key | π Purpose |
|---|---|
ApplyMigrations |
Auto apply EF migrations on startup (dev only) |
Jwt.Key |
Symmetric signing key (must be strong) |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π RUNNING & MIGRATION β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Auto-migrate (dev): set ApplyMigrations=true.
dotnet ef migrations add InitSchema -p TaskGenix.DAL -s TaskGenix.Server
dotnet ef database update -p TaskGenix.DAL -s TaskGenix.Serverdotnet run --project TaskGenix.Server- Swagger UI:
https://localhost:7026/swagger - HTTP: Also available on
:5009as configured
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π‘ API PATTERNS β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
All successful responses follow this pattern:
{
"message": "Operation successful",
"data": { /* payload */ }
}{
"message": "Validation failed",
"reason": "One or more model validation errors occurred",
"errors": ["fieldName: The field fieldName is required."]
}Include JWT token in requests:
Authorization: Bearer <access_token>
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π EXAMPLE JSON β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
"id": "5f3c...",
"name": "Workspace Alpha",
"status": "Active",
"type": "Team",
"ownerId": "9d1a...",
"members": [
{
"user": { "id": "u1", "username": "alice" },
"role": "Owner",
"joinedAt": "2024-01-01T00:00:00Z"
}
],
"taskGens": [
{
"id": "t1",
"title": "Prepare brief",
"status": "Pending",
"priority": 1
}
]
}{
"id": "t1",
"title": "Prepare brief",
"status": "Pending",
"priority": "Medium",
"dueDate": "2024-12-01T12:00:00Z",
"assignments": [
{
"assignedUser": { "id": "u1", "username": "alice" },
"assignedAt": "2024-11-20T09:00:00Z"
}
]
}ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π€ AI ROADMAP β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- ποΈ Auto Task Extraction - From meeting transcripts
- π Smart Summarization - Recordings & task clustering
- β Priority Scoring - Using embeddings for relevance
- π Quota Enforcement - Per plan across AI features
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π§ͺ TESTING β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
dotnet test- π§ͺ Unit Tests - Individual component testing
- π¬ Integration Tests - End-to-end scenarios
- β Extensible - Add scenarios for new services / controllers
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π€ CONTRIBUTION β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- π΄ Fork repository
- πΏ Create feature branch:
git checkout -b feat/your-feature - π» Commit changes:
feat: short description - π Push & open PR (reference issue if applicable)
- π― Keep PRs focused & covered by tests
- π― Keep controllers thin - Push business rules to services
- π¦ Always project to DTOs - For outward responses
- π Use transactions - For multi-entity mutations
- π Extend Mapster registrations - In
TaskGenix.Core/Mappings
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π LICENSE β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π License Information
Add a LICENSE file (MIT recommended) β not yet included.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β βββββββββ ββββββ βββββββββββ βββ βββββββ ββββββββββββ βββββββββ βββ β
β ββββββββββββββββββββββββββββ ββββ ββββββββ βββββββββββββ ββββββββββββββ β
β βββ βββββββββββββββββββββββ βββ ββββββββββ ββββββ ββββββ ββββββ β
β βββ βββββββββββββββββββββββ βββ βββββββββ βββββββββββββ ββββββ β
β βββ βββ ββββββββββββββ βββ ββββββββββββββββββββ βββββββββββββ βββ β
β βββ βββ ββββββββββββββ βββ βββββββ βββββββββββ βββββββββββ βββ β
β β
β π― "Let AI Handle The Notes β You Lead The Work." π― β
β β
β Happy building! π β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ