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/tasks
GET /v1/workspaces/:workspaceId/tasks
GET /v1/tasks/:taskId
PATCH /v1/tasks/:taskId
DELETE /v1/tasks/:taskId
POST /v1/tasks/:taskId/assign
POST /v1/tasks/:taskId/status
POST /v1/tasks/:taskId/comments
GET /v1/tasks/:taskId/activity

GraphQL 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 created
  • TaskAssigned: Task is assigned to a member
  • TaskStatusChanged: Task moves to different status
  • TaskCompleted: Task is marked as done
  • TaskDeleted: Task is deleted
  • TaskUpdated: Task properties change

Events Consumed

  • MemberRemoved: Unassign tasks from removed member
  • SprintStarted: Move tasks to active sprint
  • ProjectArchived: 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