Task Service
Core service for managing task lifecycle, assignments, and task metadata
Overview
The Task Service is the primary service for managing all task-related operations in TaskFlow. It handles task creation, updates, assignments, and state transitions.
Key Responsibilities
Task Lifecycle Management
- Create new tasks with full metadata
- Update task properties (title, description, priority, due date)
- Transition tasks through workflow states
- Archive and delete tasks
- Manage task dependencies and relationships
Assignment Management
- Assign tasks to single or multiple users
- Reassign tasks to different members
- Track assignment history
- Handle unassigned tasks in backlog
Task Metadata
- Manage labels and tags
- Set and update priorities (Critical, High, Medium, Low)
- Define and track custom fields
- Handle task attachments and links
Search and Filtering
- Full-text search across task content
- Filter by assignee, status, priority, labels
- Saved search queries
- Advanced query syntax
Technical Details
Technology Stack:
- Runtime: Go 1.21
- Framework: Gin
- Database: PostgreSQL (primary data)
- Search: Elasticsearch (full-text search)
- Cache: Redis (frequently accessed tasks)
- Message Broker: Apache Kafka
Database Design:
- Partitioned by workspace_id for multi-tenancy
- Optimized indexes for common queries
- Full audit trail in separate table
- Archive tables for completed tasks
SLA:
- Availability: 99.95%
- Response Time: < 200ms (p95)
- Search Latency: < 300ms (p95)
- Throughput: 5000 requests/second
API Endpoints
REST API
POST /v1/workspaces/:workspaceId/tasksGET /v1/workspaces/:workspaceId/tasksGET /v1/tasks/:taskIdPATCH /v1/tasks/:taskIdDELETE /v1/tasks/:taskId
POST /v1/tasks/:taskId/assignPOST /v1/tasks/:taskId/statusPOST /v1/tasks/:taskId/commentsGET /v1/tasks/:taskId/activityGraphQL API
type Task { id: ID! title: String! description: String status: TaskStatus! priority: Priority! assignees: [User!]! createdBy: User! createdAt: DateTime! updatedAt: DateTime! dueDate: DateTime labels: [Label!]! comments: [Comment!]!}
type Mutation { createTask(input: CreateTaskInput!): Task! updateTask(taskId: ID!, input: UpdateTaskInput!): Task! assignTask(taskId: ID!, assigneeIds: [ID!]!): Task!}Events Published
TaskCreated: New task is createdTaskAssigned: Task is assigned to a memberTaskStatusChanged: Task moves to different statusTaskCompleted: Task is marked as doneTaskDeleted: Task is deletedTaskUpdated: Task properties change
Events Consumed
MemberRemoved: Unassign tasks from removed memberSprintStarted: Move tasks to active sprintProjectArchived: Archive related tasks
Caching Strategy
- Hot tasks (recently viewed): 5-minute TTL
- Task metadata: 1-hour TTL
- Search results: 30-second TTL
- Cache invalidation on task updates
Performance Optimizations
- Connection pooling for database
- Batch operations for bulk updates
- Lazy loading of comments and activity
- Denormalized read models for common queries
- CDC (Change Data Capture) for real-time sync