████████╗ █████╗ ███████╗██╗ ██╗ ██████╗ ███████╗███╗ ██╗██╗██╗ ██╗
╚══██╔══╝██╔══██╗██╔════╝██║ ██╔╝ ██╔════╝ ██╔════╝████╗ ██║██║╚██╗██╔╝
██║ ███████║███████╗█████╔╝ ██║ ███╗█████╗ ██╔██╗ ██║██║ ╚███╔╝
██║ ██╔══██║╚════██║██╔═██╗ ██║ ██║██╔══╝ ██║╚██╗██║██║ ██╔██╗
██║ ██║ ██║███████║██║ ██╗ ╚██████╔╝███████╗██║ ╚████║██║██╔╝ ██╗
╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝
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! 🚀 │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘