package models import "time" // Team is the unit of tenancy: it owns its incidents, alerts, schedule and // integrations, and a user sees exactly the teams they belong to. type Team struct { ID int64 `json:"id"` Name string `json:"name"` CreatedAt time.Time `json:"created_at"` // Role is the caller's own role in this team, populated when a team is // listed for a particular person. Empty when nobody in particular is // asking, as in the admin listing. Role string `json:"role,omitempty"` // Source says who granted Role, on the endpoint that lists one user's teams: // "manual", or "oidc" when the identity provider's groups did. Source string `json:"source,omitempty"` } // Team roles. An owner configures the team — its schedule, its integrations and // who is in it. A member works its incidents. const ( RoleOwner = "owner" RoleMember = "member" ) // TeamMember is one person's membership of one team. type TeamMember struct { TeamID int64 `json:"team_id"` UserID int64 `json:"user_id"` Username string `json:"username"` Role string `json:"role"` JoinedAt time.Time `json:"joined_at"` // Source is who granted the membership: "manual", or "oidc" when the // identity provider's groups did and only they can change it. Source string `json:"source"` } // Integration is how alerts get in, and the only thing that says which team an // arriving alert belongs to. type Integration struct { ID int64 `json:"id"` TeamID int64 `json:"team_id"` Kind string `json:"kind"` Name string `json:"name"` CreatedAt time.Time `json:"created_at"` LastUsedAt *time.Time `json:"last_used_at,omitempty"` // Key is the raw integration key, shown once when the integration is // created and never stored. URL is the address to point the sender at, // likewise only complete at creation time. Key string `json:"key,omitempty"` URL string `json:"url,omitempty"` } // Integration kinds. const ( IntegrationAlertmanager = "alertmanager" )