Classes

What a create-user request asks for, typed and independent of the wire format. The controllers build it from their own field names; the service hands it on to the repository with the password in its stored form.

Turns a submitted list of group references into distinct group entities

The last-super-admin rule for writes that take super admin away from users without touching their account: template contents, group membership, group deletion and a group's template. Each one decides and writes in one transaction holding the super admin rows, so two concurrent changes cannot both pass.

What a partial user update asks for: every field is null when the request left it alone. The controllers build it from their own field names; the service hands it on to the repository with the password in its stored form.

Decides whether a user must accept the current user-agreement version and records acceptances.

Domain service for user management operations

Reads and writes per-user preferences with a request cache and config-derived defaults.

Shapes raw user rows into the read format the API exposes

Resolves the timezone to display for a user: their preference, then misc.timezone, then UTC.