generated: '2026-07-19' method: derived source: openapi/forithmus-openapi-original.json notes: Entity-relationship graph derived from OpenAPI *Out response schemas and their *_id reference fields. entity_count: 28 entities: - name: AuditLog schema: AuditLogOut field_count: 10 - name: Challenge schema: ChallengeOut field_count: 47 - name: ChallengePage schema: ChallengePageOut field_count: 6 - name: ChallengePhase schema: ChallengePhaseOut field_count: 33 - name: ChallengeRole schema: ChallengeRoleOut field_count: 9 - name: Collection schema: CollectionOut field_count: 22 - name: ComputeResource schema: ComputeResourceOut field_count: 19 - name: Conversation schema: ConversationOut field_count: 13 - name: CreditGrantRule schema: CreditGrantRuleOut field_count: 10 - name: CreditPool schema: CreditPoolOut field_count: 11 - name: CreditTransaction schema: CreditTransactionOut field_count: 8 - name: ForumCategory schema: ForumCategoryOut field_count: 7 - name: ForumPost schema: ForumPostOut field_count: 23 - name: ForumPostEdit schema: ForumPostEditOut field_count: 6 - name: Group schema: GroupOut field_count: 8 - name: GroupLeaderboard schema: GroupLeaderboardOut field_count: 5 - name: GroupLeaderboardEntry schema: GroupLeaderboardEntryOut field_count: 13 - name: GroupMember schema: GroupMemberOut field_count: 10 - name: Leaderboard schema: LeaderboardOut field_count: 5 - name: LeaderboardEntry schema: LeaderboardEntryOut field_count: 13 - name: Member schema: MemberOut field_count: 15 - name: Message schema: MessageOut field_count: 6 - name: PermissionList schema: PermissionListOut field_count: 3 - name: PlatformRole schema: PlatformRoleOut field_count: 6 - name: PlatformStats schema: PlatformStatsOut field_count: 5 - name: Submission schema: SubmissionOut field_count: 23 - name: TimelineEvent schema: TimelineEventOut field_count: 8 - name: User schema: UserOut field_count: 27 relationships: - from: AuditLog type: belongs_to to: challenge via: challenge_id - from: AuditLog type: belongs_to to: user via: user_id - from: Challenge type: belongs_to to: collection via: collection_id - from: Challenge type: belongs_to to: user via: host_user_id - from: ChallengePhase type: belongs_to to: challenge via: challenge_id - from: ChallengeRole type: belongs_to to: challenge via: challenge_id - from: Collection type: belongs_to to: user via: host_user_id - from: Conversation type: belongs_to to: challenge via: challenge_id - from: CreditGrantRule type: belongs_to to: challenge via: challenge_id - from: CreditPool type: belongs_to to: challenge via: challenge_id - from: CreditPool type: belongs_to to: collection via: collection_id - from: CreditTransaction type: belongs_to to: challenge via: challenge_id - from: ForumPost type: belongs_to to: forum_category via: category_id - from: ForumPost type: belongs_to to: challenge via: challenge_id - from: ForumPost type: belongs_to to: user via: user_id - from: ForumPostEdit type: belongs_to to: user via: user_id - from: Group type: belongs_to to: challenge via: challenge_id - from: GroupLeaderboard type: belongs_to to: challenge via: challenge_id - from: GroupLeaderboardEntry type: belongs_to to: group via: group_id - from: GroupLeaderboardEntry type: belongs_to to: submission via: submission_id - from: GroupMember type: belongs_to to: user via: user_id - from: Leaderboard type: belongs_to to: challenge via: challenge_id - from: LeaderboardEntry type: belongs_to to: submission via: submission_id - from: LeaderboardEntry type: belongs_to to: user via: user_id - from: Member type: belongs_to to: user via: user_id - from: Message type: belongs_to to: conversation via: conversation_id - from: Submission type: belongs_to to: challenge via: challenge_id - from: Submission type: belongs_to to: phase via: phase_id - from: Submission type: belongs_to to: user via: user_id - from: TimelineEvent type: belongs_to to: challenge via: challenge_id