Coverage Summary for Class: WorkspaceMember (com.georgeci.moneysurfer.domain.model)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| WorkspaceMember |
100%
(1/1)
|
100%
(1/1)
|
|
100%
(12/12)
|
100%
(113/113)
|
package com.georgeci.moneysurfer.domain.model
import com.georgeci.moneysurfer.domain.primitives.UserId
import com.georgeci.moneysurfer.domain.primitives.WorkspaceId
import kotlin.time.Instant
/**
* Participation of a [User] in a [Workspace].
*
* Snapshots ([displayName], [email]) are intentionally duplicated here so the membership
* roster keeps stable history even after the user later edits their profile or deletes
* their account. They are populated at the moment the row is written and never retro-updated.
*
* Soft-delete via [status] / [leftAt] / [removedAt] — see [WorkspaceMemberStatus].
*/
data class WorkspaceMember(
val userId: UserId,
val workspaceId: WorkspaceId,
val role: WorkspaceRole,
val status: WorkspaceMemberStatus = WorkspaceMemberStatus.ACTIVE,
val displayName: String = "",
val email: String? = null,
val addedByUserId: UserId? = null,
val createdAt: Instant,
val updatedAt: Instant = createdAt,
val leftAt: Instant? = null,
val removedAt: Instant? = null,
)