Appearance
Table Reference Docs
Auto-generated from
apps/api/prisma/schema.prismabyscripts/generate-table-docs.ts. Do not edit — overwritten by CI on every push tomain. Run locally:npx tsx scripts/generate-table-docs.ts
40 models. Jump to:
- User
- FamilyGroup
- FamilyGroupMember
- Group
- GroupMember
- GroupResource
- GroupThread
- GroupPost
- Event
- EventAttendee
- ApprovalWorkflow
- Announcement
- AnnouncementReceipt
- UserCommunicationsScope
- Role
- UserRole
- Invitation
- PushToken
- PushSubscription
- AuditLog
- MemberGroupLeaderAssignment
- MediaSeries
- MediaItem
- MediaChapter
- MediaReceipt
- LiveEvent
- Listing
- ListingImage
- ListingReview
- HomeschoolEnrollment
- AcademicRecord
- EducationResource
- Trip
- TripPassenger
- DeliveryRequest
- DeliveryOffer
- DeliveryTracking
- BibleTranslation
- VerseOfDay
- SisterCommunity
User
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
externalUserId | String | yes | UNIQUE · Clerk subject ID (adults only) |
email | String | yes | UNIQUE · NULL for children |
username | String | yes | UNIQUE · NULL for adults |
credentialType | CredentialType | no | default: SOCIAL |
passwordHash | String | yes | Argon2id hash for parent-managed PINs ONLY |
accountType | AccountType | no | default: MEMBER |
parentUserId | String | yes | FK to managing parent (NULL for adults) |
familyGroupId | String | yes | FK to FamilyGroups (NULL until approved) |
firstName | String | no | |
lastName | String | no | |
displayName | String | yes | |
photoUrl | String | yes | Long-lived SAS read URL; set on upload, cleared on delete (AB#4411) |
phone | String | yes | REQUIRED for adults; NULL allowed for CHILD |
streetAddress | String | yes | |
city | String | yes | |
state | String | yes | |
zip | String | yes | |
birthday | DateTime | yes | |
anniversary | DateTime | yes | |
showBirthday | Boolean | no | default: true |
showAnniversary | Boolean | no | default: true |
showAddress | Boolean | no | default: false |
showPhone | Boolean | no | default: true |
showEmail | Boolean | no | default: true |
showInDirectory | Boolean | no | default: true |
notifyByEmail | Boolean | no | default: true |
notifyBySms | Boolean | no | default: true |
notifyByPush | Boolean | no | default: true |
notifyNewMessages | Boolean | no | default: true |
notifyReplies | Boolean | no | default: true |
notifyAnnouncements | Boolean | no | default: true |
notifyApprovalUpdates | Boolean | no | default: true |
gender | Gender | no | default: NOT_SPECIFIED · for gendered comms (brothers/sisters) |
isBaptized | Boolean | no | default: false |
baptismDate | DateTime | yes | exact date of baptism; set alongside isBaptized |
motherUserId | String | yes | |
fatherUserId | String | yes | |
role | AppRole | no | default: VISITOR |
status | UserStatus | no | default: PENDING_APPROVAL |
isActive | Boolean | no | default: true |
approvedById | String | yes | |
approvedAt | DateTime | yes | |
invitationCode | String | yes | |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no | |
lastLoginAt | DateTime | yes |
Relations:
parent→User(optional FK)children→User(one-to-many)mother→User(optional FK)motherOf→User(one-to-many)father→User(optional FK)fatherOf→User(one-to-many)approvedBy→User(optional FK)approvedUsers→User(one-to-many)familyGroup→FamilyGroup(optional FK)familyGroupMemberships→FamilyGroupMember(one-to-many)familyGroupsAnchored→FamilyGroup(one-to-many)familyGroupsCreated→FamilyGroup(one-to-many)groupMemberships→GroupMember(one-to-many)groupsLed→Group(one-to-many)eventsCreated→Event(one-to-many)eventsModified→Event(one-to-many)eventAttendees→EventAttendee(one-to-many)workflowsAsSubject→ApprovalWorkflow(one-to-many)workflowsRequested→ApprovalWorkflow(one-to-many)workflowsAssigned→ApprovalWorkflow(one-to-many)workflowsAsGroupLead→ApprovalWorkflow(one-to-many)workflowsAsMinister→ApprovalWorkflow(one-to-many)workflowsAsAdmin→ApprovalWorkflow(one-to-many)announcementsAuthored→Announcement(one-to-many)announcementsApproved→Announcement(one-to-many)announcementReceipts→AnnouncementReceipt(one-to-many)communicationsScopes→UserCommunicationsScope(one-to-many)pushTokens→PushToken(one-to-many)pushSubscriptions→PushSubscription(one-to-many)auditLogActions→AuditLog(one-to-many)userRoles→UserRole(one-to-many)assignedRoles→UserRole(one-to-many)invitationsCreated→Invitation(one-to-many)invitationUsed→Invitation(optional FK)groupResourceUploads→GroupResource(one-to-many)groupThreadsAuthored→GroupThread(one-to-many)groupPostsAuthored→GroupPost(one-to-many)seriesCreated→MediaSeries(one-to-many)mediaItemsUploaded→MediaItem(one-to-many)mediaItemsPublished→MediaItem(one-to-many)mediaReceipts→MediaReceipt(one-to-many)liveEventsCreated→LiveEvent(one-to-many)versesCreated→VerseOfDay(one-to-many)listings→Listing(one-to-many)listingReviews→ListingReview(one-to-many)studentEnrollments→HomeschoolEnrollment(one-to-many)guardianEnrollments→HomeschoolEnrollment(one-to-many)resourceUploads→EducationResource(one-to-many)driverTrips→Trip(one-to-many)passengerTrips→TripPassenger(one-to-many)requestedDeliveries→DeliveryRequest(one-to-many)courierOffers→DeliveryOffer(one-to-many)groupLeaderAssignments→MemberGroupLeaderAssignment(one-to-many)leadingGroupMembers→MemberGroupLeaderAssignment(one-to-many)groupAssignmentsMade→MemberGroupLeaderAssignment(one-to-many)
FamilyGroup
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
familyName | String | no | |
primaryMemberId | String | no | |
householdNotes | String | yes | |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no | |
createdById | String | no |
Relations:
primaryMember→User(FK)createdBy→User(FK)members→FamilyGroupMember(one-to-many)users→User(one-to-many)
FamilyGroupMember
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
familyGroupId | String | no | |
userId | String | no | |
relationship | FamilyRelationship | no | |
joinedAt | DateTime | no | default: now( |
isActive | Boolean | no | default: true |
watchListenEnabled | Boolean | no | default: true |
Relations:
familyGroup→FamilyGroup(FK)user→User(FK)
Group
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
name | String | no | |
groupType | GroupType | no | |
description | String | yes | |
leaderId | String | yes | |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
leader→User(optional FK)members→GroupMember(one-to-many)events→Event(one-to-many)audienceAnnouncements→Announcement(one-to-many)commsScopes→UserCommunicationsScope(one-to-many)resources→GroupResource(one-to-many)threads→GroupThread(one-to-many)
GroupMember
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
groupId | String | no | |
userId | String | no | |
joinedAt | DateTime | no | default: now( |
isActive | Boolean | no | default: true |
memberRole | String | no | default: "MEMBER" · "LEADER" |
Relations:
group→Group(FK)user→User(FK)
GroupResource
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
groupId | String | no | |
uploadedById | String | no | |
title | String | no | |
description | String | yes | |
externalUrl | String | yes | |
storageKey | String | yes | |
isFile | Boolean | no | default: false · AB#3442 — file-sharing flag |
mimeType | String | yes | |
fileSize | Int | yes | |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
group→Group(FK)uploadedBy→User(FK)
GroupThread
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
groupId | String | no | |
authorId | String | no | |
title | String | no | |
body | String | no | |
isPinned | Boolean | no | default: false |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
group→Group(FK)author→User(FK)posts→GroupPost(one-to-many)
GroupPost
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
threadId | String | no | |
authorId | String | no | |
body | String | no | |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
Relations:
thread→GroupThread(FK)author→User(FK)
Event
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
title | String | no | |
description | String | yes | |
startAt | DateTime | no | |
endAt | DateTime | no | |
location | String | yes | |
eventType | EventType | no | |
visibilityLevel | Int | no | 1=All, 2=Ministry, 3=SmallGroup, 4=Leadership |
groupId | String | yes | |
maxAttendees | Int | yes | |
requiresRsvp | Boolean | no | default: false |
createdById | String | no | |
createdAt | DateTime | no | default: now( |
modifiedById | String | yes | |
updatedAt | DateTime | no | |
isActive | Boolean | no | default: true |
Relations:
group→Group(optional FK)createdBy→User(FK)modifiedBy→User(optional FK)attendees→EventAttendee(one-to-many)
EventAttendee
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
eventId | String | no | |
userId | String | no | |
rsvpStatus | RsvpStatus | no | default: PENDING |
rsvpAt | DateTime | no | default: now( |
checkedIn | Boolean | no | default: false |
checkInAt | DateTime | yes |
Relations:
event→Event(FK)user→User(FK)
ApprovalWorkflow
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
workflowType | WorkflowType | no | |
userId | String | yes | User being approved (member-join / spouse-add / child-add) |
subjectEntityType | String | yes | e.g. 'Announcement' for content-publish |
subjectEntityId | String | yes | |
requestedById | String | no | |
assignedToId | String | yes | |
currentStep | Int | no | default: 1 |
status | WorkflowStatus | no | default: PENDING |
smallGroupLeaderId | String | yes | |
smallGroupApprovalAt | DateTime | yes | |
smallGroupComments | String | yes | |
ministerId | String | yes | |
ministerApprovalAt | DateTime | yes | |
ministerComments | String | yes | |
adminId | String | yes | |
adminApprovalAt | DateTime | yes | |
adminComments | String | yes | |
createdAt | DateTime | no | default: now( |
completedAt | DateTime | yes |
Relations:
user→User(optional FK)requestedBy→User(FK)assignedTo→User(optional FK)smallGroupLeader→User(optional FK)minister→User(optional FK)admin→User(optional FK)announcements→Announcement(one-to-many)
Announcement
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
title | String | no | |
body | String | no | |
priority | AnnouncementPriority | no | default: NORMAL |
authorId | String | no | |
approvedById | String | yes | |
approvalWorkflowId | String | yes | |
audienceScope | AudienceScope | no | default: ALL |
audienceRole | AppRole | yes | populated when audienceScope = ROLE |
audienceGroupId | String | yes | |
publishAt | DateTime | yes | |
expiresAt | DateTime | yes | |
publishedAt | DateTime | yes | |
status | AnnouncementStatus | no | default: DRAFT |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no | |
isActive | Boolean | no | default: true |
Relations:
author→User(FK)approvedBy→User(optional FK)approvalWorkflow→ApprovalWorkflow(optional FK)audienceGroup→Group(optional FK)receipts→AnnouncementReceipt(one-to-many)
AnnouncementReceipt
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
announcementId | String | no | |
userId | String | no | |
channel | NotificationChannel | no | |
deliveredAt | DateTime | yes | |
readAt | DateTime | yes | |
createdAt | DateTime | no | default: now( |
Relations:
announcement→Announcement(FK)user→User(FK)
UserCommunicationsScope
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
userId | String | no | |
scopeType | CommsScopeType | no | |
groupId | String | yes | populated when scopeType = GROUP or MINISTRY |
createdAt | DateTime | no | default: now( |
Relations:
user→User(FK)group→Group(optional FK)
Role
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
slug | String | no | UNIQUE · e.g. 'admin', 'member' |
name | String | no | UNIQUE · e.g. 'Community Leader' |
description | String | yes | |
permissionLevel | Int | no | |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
Relations:
userRoles→UserRole(one-to-many)
UserRole
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
userId | String | no | |
roleId | String | no | |
assignedBy | String | no | user ID of the admin who granted the role |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
Relations:
user→User(FK)role→Role(FK)assigner→User(FK)
Invitation
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
code | String | no | UNIQUE |
email | String | yes | |
createdById | String | no | |
expiresAt | DateTime | yes | |
usedById | String | yes | UNIQUE |
usedAt | DateTime | yes | |
isActive | Boolean | no | default: true |
maxUses | Int | no | default: 1 |
currentUses | Int | no | default: 0 |
createdAt | DateTime | no | default: now( |
Relations:
createdBy→User(FK)usedBy→User(optional FK)
PushToken
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
userId | String | no | |
token | String | no | UNIQUE |
platform | String | no | 'ios' |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
user→User(FK)
PushSubscription
DB table: push_subscriptions
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
userId | String | no | |
endpoint | String | no | UNIQUE |
p256dh | String | no | |
auth | String | no | |
userAgent | String | yes | |
createdAt | DateTime | no | default: now( |
Relations:
user→User(FK)
AuditLog
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
actorId | String | yes | |
action | String | no | 'Login' |
entityType | String | yes | 'User' |
entityId | String | yes | |
oldValues | Json | yes | |
newValues | Json | yes | |
ipAddress | String | yes | |
userAgent | String | yes | |
createdAt | DateTime | no | default: now( |
Relations:
actor→User(optional FK)
MemberGroupLeaderAssignment
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
memberId | String | no | |
groupLeaderId | String | no | |
assignedById | String | no | |
assignedAt | DateTime | no | default: now( |
Relations:
member→User(FK)groupLeader→User(FK)assigner→User(FK)
MediaSeries
DB table: media_series
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
name | String | no | |
type | MediaType | no | |
accessTier | AccessTier | no | default: MEMBERS |
description | String | yes | |
artworkKey | String | yes | storage key for series artwork; NEVER returned raw to client |
createdById | String | no | FK → User.id |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
createdBy→User(FK)items→MediaItem(one-to-many)
MediaItem
DB table: media_items
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
title | String | no | |
speaker | String | yes | free text (NOT a FK) |
seriesId | String | no | FK → media_series.id (required) |
itemType | MediaType | no | content category (MESSAGES / MUSIC / VIDEOS) |
mediaType | String | no | technical format: "audio" |
date | DateTime | no | |
tags | String | yes | comma-separated controlled vocabulary |
durationSec | Int | yes | |
storageKey | String | no | provider-agnostic object key; NEVER returned to clients |
status | MediaStatus | no | default: DRAFT |
uploadedById | String | no | |
publishedById | String | yes | |
publishedAt | DateTime | yes | |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
series→MediaSeries(FK)uploadedBy→User(FK)publishedBy→User(optional FK)chapters→MediaChapter(one-to-many)receipts→MediaReceipt(one-to-many)archivedFrom→LiveEvent(one-to-many)
MediaChapter
DB table: media_chapters
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
itemId | String | no | |
title | String | no | |
offsetSecs | Int | no |
Relations:
item→MediaItem(FK)
MediaReceipt
DB table: media_receipts
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
itemId | String | no | |
memberId | String | no | renamed from userId |
progressSecs | Int | no | default: 0 |
completed | Boolean | no | default: false |
updatedAt | DateTime | no |
Relations:
item→MediaItem(FK)member→User(FK)
LiveEvent
DB table: live_events
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
title | String | no | |
cloudflareInputId | String | no | server-side only; NEVER returned to client |
cloudflarePlaybackId | String | no | server-side only; NEVER returned to client |
status | LiveEventStatus | no | default: SCHEDULED |
accessTier | AccessTier | no | default: MEMBERS |
scheduledAt | DateTime | yes | |
startedAt | DateTime | yes | |
endedAt | DateTime | yes | |
archivedItemId | String | yes | |
createdById | String | no | |
createdAt | DateTime | no | default: now( |
Relations:
archivedItem→MediaItem(optional FK)createdBy→User(FK)
Listing
DB table: listings
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
sellerId | String | no | |
title | String | no | |
description | String | no | |
price | Decimal | yes | |
isFree | Boolean | no | default: false |
category | ListingCategory | no | |
status | ListingStatus | no | default: ACTIVE |
expiresAt | DateTime | yes | |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
seller→User(FK)images→ListingImage(one-to-many)reviews→ListingReview(one-to-many)
ListingImage
DB table: listing_images
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
listingId | String | no | |
storageKey | String | no | |
sortOrder | Int | no | default: 0 |
Relations:
listing→Listing(FK)
ListingReview
DB table: listing_reviews
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
listingId | String | no | |
reviewerId | String | no | |
rating | Int | no | |
body | String | yes | |
createdAt | DateTime | no | default: now( |
Relations:
listing→Listing(FK)reviewer→User(FK)
HomeschoolEnrollment
DB table: homeschool_enrollments
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
studentId | String | no | |
guardianId | String | no | |
grade | String | yes | |
status | EnrollmentStatus | no | default: PENDING |
enrolledAt | DateTime | yes | |
withdrawnAt | DateTime | yes | |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
student→User(FK)guardian→User(FK)records→AcademicRecord(one-to-many)
AcademicRecord
DB table: academic_records
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
enrollmentId | String | no | |
subject | String | no | |
grade | String | yes | |
notes | String | yes | |
termYear | String | no | |
createdAt | DateTime | no | default: now( |
Relations:
enrollment→HomeschoolEnrollment(FK)
EducationResource
DB table: education_resources
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
title | String | no | |
description | String | yes | |
storageKey | String | yes | |
externalUrl | String | yes | |
subject | String | yes | |
gradeLevel | String | yes | |
uploadedById | String | no | |
downloadCount | Int | no | default: 0 |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
uploadedBy→User(FK)
Trip
DB table: trips
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
driverId | String | no | |
origin | String | no | |
destination | String | no | |
departureAt | DateTime | no | |
seats | Int | no | |
notes | String | yes | |
status | TripStatus | no | default: OPEN |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
driver→User(FK)passengers→TripPassenger(one-to-many)
TripPassenger
DB table: trip_passengers
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
tripId | String | no | |
userId | String | no | |
status | PassengerStatus | no | default: PENDING |
requestedAt | DateTime | no | default: now( |
Relations:
trip→Trip(FK)user→User(FK)
DeliveryRequest
DB table: delivery_requests
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
requesterId | String | no | |
description | String | no | |
pickupAddress | String | no | |
dropoffAddress | String | no | |
neededBy | DateTime | yes | |
status | DeliveryStatus | no | default: REQUESTED |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
requester→User(FK)offers→DeliveryOffer(one-to-many)tracking→DeliveryTracking(one-to-many)
DeliveryOffer
DB table: delivery_offers
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
requestId | String | no | |
courierId | String | no | |
notes | String | yes | |
accepted | Boolean | no | default: false |
createdAt | DateTime | no | default: now( |
Relations:
request→DeliveryRequest(FK)courier→User(FK)
DeliveryTracking
DB table: delivery_tracking
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
requestId | String | no | |
status | DeliveryStatus | no | |
notes | String | yes | |
createdAt | DateTime | no | default: now( |
Relations:
request→DeliveryRequest(FK)
BibleTranslation
DB table: bible_translations
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
name | String | no | e.g. "King James Version" |
abbreviation | String | no | UNIQUE · e.g. "KJV" |
isDefault | Boolean | no | default: false |
isActive | Boolean | no | default: true |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
verses→VerseOfDay(one-to-many)
VerseOfDay
DB table: verses_of_day
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
reference | String | no | e.g. "John 3:16" |
text | String | no | Full verse text |
translationId | String | yes | |
displayDate | DateTime | yes | null = pool (auto-rotated); non-null = pinned to this date |
status | VerseStatus | no | default: SCHEDULED |
createdById | String | yes | |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |
Relations:
translation→BibleTranslation(optional FK)createdBy→User(optional FK)
SisterCommunity
DB table: sister_communities
| Column | Type | Nullable | Notes |
|---|---|---|---|
id | String | no | PK · default: cuid( |
name | String | no | |
location | String | no | |
state | String | yes | |
website | String | yes | |
contactName | String | yes | |
contactEmail | String | yes | |
notes | String | yes | |
status | SisterCommunityStatus | no | default: PROSPECTIVE |
createdAt | DateTime | no | default: now( |
updatedAt | DateTime | no |