# Tickets Seed

A support ticket system with a full workflow state machine, role-based access, and file attachments.

## Resources

| Resource | Features |
|----------|----------|
| Ticket | CRUD, soft delete, audit, state machine, search, field-level permissions |
| Comment | CRUD, soft delete, belongs to Ticket (cascade delete) |
| Attachment | CRUD, belongs to Ticket (cascade delete), file metadata |
| Category | CRUD, admin-only management |

## Relationships

- Ticket hasMany Comment (cascade delete)
- Ticket hasMany Attachment (cascade delete)
- Comment belongsTo Ticket
- Attachment belongsTo Ticket
- Ticket belongsTo Category

## State Machine

```
open ──assign──> assigned ──start──> in_progress ──resolve──> resolved ──close──> closed
                                          │                                         │
                                          ├──block──> blocked ──unblock──┘          │
                                          │                                         │
                                          └────────────────── reopen <──────────────┘
```

| Transition | From | To | Guards | Notes |
|-----------|------|-----|--------|-------|
| assign | open | assigned | authenticated | Any logged-in user can assign |
| start | assigned | in_progress | owner, admin | |
| resolve | in_progress | resolved | owner, admin | Requires `resolution` field |
| block | in_progress | blocked | owner, admin | |
| unblock | blocked | in_progress | admin | Only admins can unblock |
| close | resolved | closed | owner, admin | Sets `closedAt` to current time |
| reopen | closed | open | authenticated | Clears closedAt, resolution, assignee |

## Roles & Permissions

| Role | Capabilities |
|------|-------------|
| admin | Full access to all resources, can unblock tickets, manage categories |
| agent | Can assign, update priority, resolve, and close tickets |
| customer | Can create tickets, add comments, reopen closed tickets |

### Field-Level Restrictions

- `assigneeId` / `assigneeName` — write restricted to agent, admin
- `priority` — write restricted to agent, admin
- `resolution` — write restricted to agent, admin

## Seed Data

4 categories (Account, Billing, Technical, Feature Request), 5 tickets across various states (2 open, 1 in_progress, 1 resolved, 1 closed), users: admin, sarah (agent), mike (agent), alice (customer), bob (customer).
