Skip to content

apps/api/src/features/groups/groups.service.ts ​

Auto-generated by scripts/generate-file-docs.ts. Do not edit — overwritten on every run.

Purpose ​

GroupsService — small groups, ministries, and leadership groups. Backs api-contracts.md Section 7 (Groups & Ministries). Distinct from FamilyGroup (ADR 0007). All groups share one table; GroupType discriminates. Authorization summary: - Anyone authenticated may list visible groups (LEADERSHIP hidden from visitor/member; visible to group_leader and above). - Anyone authenticated may view a group; leaders and ministry_leader+ additionally receive the member roster. - Create requires ministry_leader+ platform role; creator is recorded as the group's leader via Group.leaderId. - Update requires the group's leader (Group.leaderId === requester) OR a platform ministry_leader+. - Join: if the group requires approval (today: LEADERSHIP type) the request opens an ApprovalWorkflow(type=MEMBER_JOIN, notes=groupId). Otherwise we create the GroupMember directly. - Approve: group leader OR ministry_leader+. Creates the GroupMember and resolves the workflow. - Remove member: self OR group leader OR ministry_leader+. - Update member role: group leader OR admin. Today this promotes / demotes the GROUP-level leader by mutating Group.leaderId — the schema does not yet support a per-member role on GroupMember (open question, see handoff). Every state transition writes an AuditLog row. /

Exports ​

  • export interface ListGroupsParams
  • export interface GroupListItem
  • export interface ListGroupsResult
  • export interface GroupDetail
  • export interface RequestJoinResult
  • export class GroupsService
  • export const groupsService

Imports ​

  • ../../adapters/db
  • ../../lib/errors
  • ../../lib/logger
  • ../../lib/pagination
  • ../../middleware/requireAuth
  • @prisma/client

Imported by ​

Heritage Community Hub — Internal. Access restricted via Cloudflare Access + Entra ID.