Document Time Entry Service
Overview
Document time entries record blocks of time logged by users against a specific document. Each entry captures who did the work, what type of work it was, when it was done, and how long it took.
Relates to:
- Document Time Task Types — work category definitions
- Documents — parent document
All operations are tenant-aware and scoped to the current tenant.
Endpoints
GET
/api/v1/DocumentTimeEntries/{id}
Returns a single time entry by its numeric identifier.
Route parameters:
id(int, required) - entry identifier
Behavior:
- Returns
404if not found
Response:
DocumentTimeEntryModel
Authorization:
- Requires Bearer Token
GET
/api/v1/DocumentTimeEntries/order/{documentId}
Returns all time entries for a given document.
Route parameters:
documentId(long, required) - document identifier
Behavior:
- Returns all time entries for the document ordered by
WorkDateascending - Returns
404if no entries exist for the document
Response:
List<DocumentTimeEntryModel>
Authorization:
- Requires Bearer Token
POST
/api/v1/DocumentTimeEntries
Creates a new time entry against a document.
Request body (DocumentTimeEntryModel):
DocumentId(long, required — must be > 0)UserId(int, required — must be > 0)TaskTypeId(int, required — must be > 0)TotalMinutes(int, required — must be > 0)WorkDate(DateOnly?, optional — defaults to today UTC if not provided)Notes(string?, optional)
Behavior:
- Validates required fields
- Records
CreatedByUserIdandCreatedAt - Successful creation writes an audit log entry
Response:
201 Created—DocumentTimeEntryModel
Authorization:
- Requires Bearer Token
PUT
/api/v1/DocumentTimeEntries/{id}
Updates an existing time entry.
Route parameters:
id(int, required) - entry identifier
Behavior:
- Updates editable fields:
TaskTypeId,WorkDate,TotalMinutes,Notes - Successful update writes an audit log entry
Response:
200 OK—DocumentTimeEntryModel
Authorization:
- Requires Bearer Token
DELETE
/api/v1/DocumentTimeEntries/{id}
Deletes a time entry by its identifier.
Route parameters:
id(int, required) - entry identifier
Behavior:
- Performs a hard delete
- Successful deletion writes an audit log entry
Response:
204 No Content
Authorization:
- Requires Bearer Token
Notes
TotalMinutesis stored as an integer — convert hours to minutes before submittingWorkDateusesDateOnly— time component is not storedCreatedAtis set server-side and is not writable by the client- Validation is enforced in the service layer
- All state-changing operations are audited