---
title: TaskFactory
summary: API reference for TaskFactory.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-24
library: SAIF.Services
reference_type: package
---

# TaskFactory

Implements `ITaskFactory`, creating marketing and underwriting `Task` records against a policy after validating the incoming request. It depends on `IRepositoryFactory` for repository access, `IUserProfileService` (resolved once at construction into a cached current-user snapshot), `IValidationService` for FluentValidation-based request validation, and `ITaskQueryProvider` for resolving the target policy and task category.

## Purpose
- Validates a `CreatePolicyTaskRequest` and throws `SaifValidationException` when it fails validation, preventing invalid tasks from being persisted.
- Creates a marketing task ("MA" category) or an underwriting task ("U" category) for a policy, defaulting priority/source/action from the resolved task category.
- Stamps new tasks with the current user as both create and update user.

## Context
- Namespace: `SAIF.Services.Tasks`
- Assembly/package: `SAIF.Services` (packaged inside the `SAIF.SAIFCode.Core` NuGet package)

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| TaskFactory(...) | `public TaskFactory(IRepositoryFactory repoFactory, IUserProfileService profile, IValidationService validation, ITaskQueryProvider taskQueryProvider)` | Validates `repoFactory`, `profile`, and `validation` are non-null via `Enforce.ArgumentNotNull`, wires in the query provider, and captures the current user once for reuse by later task-creation calls. |
| CreateMarketingTask | `public long CreateMarketingTask(CreatePolicyTaskRequest request)` | Validates the request, creates a task in the "MA" (marketing) category linked to the requested policy, adds it to the repository, and returns its new ID; throws `SaifValidationException` on invalid input. |
| CreateUnderwritingTask | `public long CreateUnderwritingTask(CreatePolicyTaskRequest request)` | Validates the request, creates a task in the "U" (underwriting) category linked to the requested policy, adds it to the repository, and returns its new ID; throws `SaifValidationException` on invalid input. |

## Behavioral notes
- The current user is resolved once in the constructor (`profile.GetCurrentUser()`) and cached for the lifetime of the factory instance, so the create/update user stamped on tasks reflects the user at construction time rather than at each call*.
- Both task-creation methods run the same validation pipeline via `_validationService.Validate(request)` before touching the repository, so no partial task is added to the repository when the request is invalid.
- New tasks inherit their priority, source, and default action entirely from the resolved `TaskCategory` (`"MA"` or `"U"`) rather than accepting them as request parameters.

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- Services/SAIF.Services/Tasks/TaskFactory.cs
