---
title: Time Entry Bounded Context
type: entity
created: 2026-09-06
updated: 2026-09-06
sources: [raw/sessions/2026-09-06-frontend-integration.md]
tags: [time-entry, context, issue-tracking]
---

# Time Entry Bounded Context

`TimeEntry` records time logged against a ticket (author, minutes, date, note). It was added as part of the issue-tracking frontend port.

## Domain

- **Aggregate:** `Domain\TimeEntry\Entities\TimeEntry` (`src/Domain/TimeEntry/Entities/TimeEntry.php`) — `reconstitute(TimeEntryId, TicketId, UserId $authorId, minutes, date, note)`; getters `id()`, `ticketId()`, `authorId()`, `minutes()`, `date()`, `note()`.
- **Value object:** `TimeEntryId` (string id).
- **Repository interface:** `TimeEntryRepositoryInterface` — `nextIdentity()`, `save()`, `findById()`, `findByTicket(TicketId): list<TimeEntry>`, `all()`.

## Infrastructure

- `TimeEntryModel` (table `time_entries`, string PK `time_entry_id`; relations: `ticket()`, `author()`).
- `TimeEntryMapper`, `EloquentTimeEntryRepository`.

## Persistence / relationships

`time_entries` was created by `2026_09_06_000000_extend_for_issue_tracking.php` with FKs to `tickets.ticket_id` and `users.user_id`, an integer `minutes`, a `date`, and a nullable `note`.

## Application / presentation

- Query: `ListTimeEntries` (resolves issue key/title for the time page). Command: `LogTime` (also records an activity).
- Presentation: `TimeController` (`/w/{workspace}/time`).

## Related pages

- [ticket](ticket.md) — time is logged against tickets
- [activity](activity.md) — logging time records an activity
- [workspace](workspace.md) — workspace-scoped view
- [overview](../overview.md) — project context