diff --git a/datastore/dsfetch/fields_generated.go b/datastore/dsfetch/fields_generated.go index 2eb5858e3..458b8a220 100644 --- a/datastore/dsfetch/fields_generated.go +++ b/datastore/dsfetch/fields_generated.go @@ -1553,40 +1553,13 @@ func (r *Fetch) Group_ReadCommentSectionIDs(groupID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Group_UsedAsAssignmentPollDefaultID(groupID int) *ValueMaybeInt { - key, err := dskey.FromParts("group", groupID, "used_as_assignment_poll_default_id") +func (r *Fetch) Group_UsedInMeetingPollDefaultIDs(groupID int) *ValueIntSlice { + key, err := dskey.FromParts("group", groupID, "used_in_meeting_poll_default_ids") if err != nil { - return &ValueMaybeInt{err: err} - } - - return &ValueMaybeInt{fetch: r, key: key} -} - -func (r *Fetch) Group_UsedAsMotionPollDefaultID(groupID int) *ValueMaybeInt { - key, err := dskey.FromParts("group", groupID, "used_as_motion_poll_default_id") - if err != nil { - return &ValueMaybeInt{err: err} - } - - return &ValueMaybeInt{fetch: r, key: key} -} - -func (r *Fetch) Group_UsedAsPollDefaultID(groupID int) *ValueMaybeInt { - key, err := dskey.FromParts("group", groupID, "used_as_poll_default_id") - if err != nil { - return &ValueMaybeInt{err: err} - } - - return &ValueMaybeInt{fetch: r, key: key} -} - -func (r *Fetch) Group_UsedAsTopicPollDefaultID(groupID int) *ValueMaybeInt { - key, err := dskey.FromParts("group", groupID, "used_as_topic_poll_default_id") - if err != nil { - return &ValueMaybeInt{err: err} + return &ValueIntSlice{err: err} } - return &ValueMaybeInt{fetch: r, key: key} + return &ValueIntSlice{fetch: r, key: key} } func (r *Fetch) Group_Weight(groupID int) *ValueInt { @@ -1670,6 +1643,15 @@ func (r *Fetch) HistoryEntry_PositionID(historyEntryID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } +func (r *Fetch) HistoryEntry_StructuredInformation(historyEntryID int) *ValueJSON { + key, err := dskey.FromParts("history_entry", historyEntryID, "structured_information") + if err != nil { + return &ValueJSON{err: err} + } + + return &ValueJSON{fetch: r, key: key} +} + func (r *Fetch) HistoryPosition_EntryIDs(historyPositionID int) *ValueIntSlice { key, err := dskey.FromParts("history_position", historyPositionID, "entry_ids") if err != nil { @@ -2192,6 +2174,123 @@ func (r *Fetch) MeetingMediafile_UsedAsLogoWebHeaderInMeetingID(meetingMediafile return &ValueMaybeInt{fetch: r, key: key} } +func (r *Fetch) MeetingPollDefault_AllowAbstain(meetingPollDefaultID int) *ValueBool { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "allow_abstain") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_AllowNota(meetingPollDefaultID int) *ValueBool { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "allow_nota") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_DisplayChart(meetingPollDefaultID int) *ValueString { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "display_chart") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_GroupIDs(meetingPollDefaultID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "group_ids") + if err != nil { + return &ValueIntSlice{err: err} + } + + return &ValueIntSlice{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_ID(meetingPollDefaultID int) *ValueInt { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "id") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) MeetingPollDefault_MeetingID(meetingPollDefaultID int) *ValueInt { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "meeting_id") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) MeetingPollDefault_OnehundredPercentBase(meetingPollDefaultID int) *ValueString { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "onehundred_percent_base") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_SortResultByVotes(meetingPollDefaultID int) *ValueBool { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "sort_result_by_votes") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_StrikeOut(meetingPollDefaultID int) *ValueBool { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "strike_out") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_UsedAsAssignmentPollConfigInMeetingID(meetingPollDefaultID int) *ValueMaybeInt { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "used_as_assignment_poll_config_in_meeting_id") + if err != nil { + return &ValueMaybeInt{err: err} + } + + return &ValueMaybeInt{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_UsedAsMotionPollConfigInMeetingID(meetingPollDefaultID int) *ValueMaybeInt { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "used_as_motion_poll_config_in_meeting_id") + if err != nil { + return &ValueMaybeInt{err: err} + } + + return &ValueMaybeInt{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_UsedAsTopicPollConfigInMeetingID(meetingPollDefaultID int) *ValueMaybeInt { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "used_as_topic_poll_config_in_meeting_id") + if err != nil { + return &ValueMaybeInt{err: err} + } + + return &ValueMaybeInt{fetch: r, key: key} +} + +func (r *Fetch) MeetingPollDefault_Visibility(meetingPollDefaultID int) *ValueString { + key, err := dskey.FromParts("meeting_poll_default", meetingPollDefaultID, "visibility") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key} +} + func (r *Fetch) MeetingUser_AboutMe(meetingUserID int) *ValueString { key, err := dskey.FromParts("meeting_user", meetingUserID, "about_me") if err != nil { @@ -2201,6 +2300,15 @@ func (r *Fetch) MeetingUser_AboutMe(meetingUserID int) *ValueString { return &ValueString{fetch: r, key: key} } +func (r *Fetch) MeetingUser_ActingBallotIDs(meetingUserID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting_user", meetingUserID, "acting_ballot_ids") + if err != nil { + return &ValueIntSlice{err: err} + } + + return &ValueIntSlice{fetch: r, key: key} +} + func (r *Fetch) MeetingUser_AssignmentCandidateIDs(meetingUserID int) *ValueIntSlice { key, err := dskey.FromParts("meeting_user", meetingUserID, "assignment_candidate_ids") if err != nil { @@ -2237,6 +2345,15 @@ func (r *Fetch) MeetingUser_GroupIDs(meetingUserID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key, required: true} } +func (r *Fetch) MeetingUser_HistoryEntryIDs(meetingUserID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting_user", meetingUserID, "history_entry_ids") + if err != nil { + return &ValueIntSlice{err: err} + } + + return &ValueIntSlice{fetch: r, key: key} +} + func (r *Fetch) MeetingUser_ID(meetingUserID int) *ValueInt { key, err := dskey.FromParts("meeting_user", meetingUserID, "id") if err != nil { @@ -2318,6 +2435,24 @@ func (r *Fetch) MeetingUser_PersonalNoteIDs(meetingUserID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } +func (r *Fetch) MeetingUser_PollOptionIDs(meetingUserID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting_user", meetingUserID, "poll_option_ids") + if err != nil { + return &ValueIntSlice{err: err} + } + + return &ValueIntSlice{fetch: r, key: key} +} + +func (r *Fetch) MeetingUser_RepresentedBallotIDs(meetingUserID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting_user", meetingUserID, "represented_ballot_ids") + if err != nil { + return &ValueIntSlice{err: err} + } + + return &ValueIntSlice{fetch: r, key: key} +} + func (r *Fetch) MeetingUser_SpeakerIDs(meetingUserID int) *ValueIntSlice { key, err := dskey.FromParts("meeting_user", meetingUserID, "speaker_ids") if err != nil { @@ -2570,40 +2705,13 @@ func (r *Fetch) Meeting_AssignmentPollAddCandidatesToListOfSpeakers(meetingID in return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Meeting_AssignmentPollBallotPaperNumber(meetingID int) *ValueInt { - key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_ballot_paper_number") - if err != nil { - return &ValueInt{err: err} - } - - return &ValueInt{fetch: r, key: key} -} - -func (r *Fetch) Meeting_AssignmentPollBallotPaperSelection(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_ballot_paper_selection") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key} -} - -func (r *Fetch) Meeting_AssignmentPollDefaultBackend(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_backend") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key} -} - -func (r *Fetch) Meeting_AssignmentPollDefaultGroupIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_group_ids") +func (r *Fetch) Meeting_AssignmentPollConfigID(meetingID int) *ValueMaybeInt { + key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_config_id") if err != nil { - return &ValueIntSlice{err: err} + return &ValueMaybeInt{err: err} } - return &ValueIntSlice{fetch: r, key: key} + return &ValueMaybeInt{fetch: r, key: key} } func (r *Fetch) Meeting_AssignmentPollDefaultMethod(meetingID int) *ValueString { @@ -2615,42 +2723,6 @@ func (r *Fetch) Meeting_AssignmentPollDefaultMethod(meetingID int) *ValueString return &ValueString{fetch: r, key: key} } -func (r *Fetch) Meeting_AssignmentPollDefaultOnehundredPercentBase(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_onehundred_percent_base") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key} -} - -func (r *Fetch) Meeting_AssignmentPollDefaultType(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_default_type") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key} -} - -func (r *Fetch) Meeting_AssignmentPollEnableMaxVotesPerOption(meetingID int) *ValueBool { - key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_enable_max_votes_per_option") - if err != nil { - return &ValueBool{err: err} - } - - return &ValueBool{fetch: r, key: key} -} - -func (r *Fetch) Meeting_AssignmentPollSortPollResultByVotes(meetingID int) *ValueBool { - key, err := dskey.FromParts("meeting", meetingID, "assignment_poll_sort_poll_result_by_votes") - if err != nil { - return &ValueBool{err: err} - } - - return &ValueBool{fetch: r, key: key} -} - func (r *Fetch) Meeting_AssignmentsExportPreamble(meetingID int) *ValueString { key, err := dskey.FromParts("meeting", meetingID, "assignments_export_preamble") if err != nil { @@ -2912,8 +2984,8 @@ func (r *Fetch) Meeting_DefaultProjectorMotionPollIDs(meetingID int) *ValueIntSl return &ValueIntSlice{fetch: r, key: key, required: true} } -func (r *Fetch) Meeting_DefaultProjectorPollIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "default_projector_poll_ids") +func (r *Fetch) Meeting_DefaultProjectorTopicIDs(meetingID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting", meetingID, "default_projector_topic_ids") if err != nil { return &ValueIntSlice{err: err} } @@ -2921,8 +2993,8 @@ func (r *Fetch) Meeting_DefaultProjectorPollIDs(meetingID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key, required: true} } -func (r *Fetch) Meeting_DefaultProjectorTopicIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "default_projector_topic_ids") +func (r *Fetch) Meeting_DefaultProjectorTopicPollIDs(meetingID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting", meetingID, "default_projector_topic_poll_ids") if err != nil { return &ValueIntSlice{err: err} } @@ -3587,35 +3659,35 @@ func (r *Fetch) Meeting_MotionIDs(meetingID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollBallotPaperNumber(meetingID int) *ValueInt { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_ballot_paper_number") +func (r *Fetch) Meeting_MotionPollConfigID(meetingID int) *ValueMaybeInt { + key, err := dskey.FromParts("meeting", meetingID, "motion_poll_config_id") if err != nil { - return &ValueInt{err: err} + return &ValueMaybeInt{err: err} } - return &ValueInt{fetch: r, key: key} + return &ValueMaybeInt{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollBallotPaperSelection(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_ballot_paper_selection") +func (r *Fetch) Meeting_MotionStateIDs(meetingID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting", meetingID, "motion_state_ids") if err != nil { - return &ValueString{err: err} + return &ValueIntSlice{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollDefaultBackend(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_backend") +func (r *Fetch) Meeting_MotionSubmitterIDs(meetingID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting", meetingID, "motion_submitter_ids") if err != nil { - return &ValueString{err: err} + return &ValueIntSlice{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollDefaultGroupIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_group_ids") +func (r *Fetch) Meeting_MotionSupporterIDs(meetingID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting", meetingID, "motion_supporter_ids") if err != nil { return &ValueIntSlice{err: err} } @@ -3623,121 +3695,49 @@ func (r *Fetch) Meeting_MotionPollDefaultGroupIDs(meetingID int) *ValueIntSlice return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollDefaultMethod(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_method") +func (r *Fetch) Meeting_MotionWorkflowIDs(meetingID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting", meetingID, "motion_workflow_ids") if err != nil { - return &ValueString{err: err} + return &ValueIntSlice{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollDefaultOnehundredPercentBase(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_onehundred_percent_base") +func (r *Fetch) Meeting_MotionWorkingGroupSpeakerIDs(meetingID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting", meetingID, "motion_working_group_speaker_ids") if err != nil { - return &ValueString{err: err} + return &ValueIntSlice{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollDefaultType(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_default_type") +func (r *Fetch) Meeting_MotionsAmendmentsEnabled(meetingID int) *ValueBool { + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_enabled") if err != nil { - return &ValueString{err: err} + return &ValueBool{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollProjectionMaxColumns(meetingID int) *ValueInt { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_projection_max_columns") +func (r *Fetch) Meeting_MotionsAmendmentsInMainList(meetingID int) *ValueBool { + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_in_main_list") if err != nil { - return &ValueInt{err: err} + return &ValueBool{err: err} } - return &ValueInt{fetch: r, key: key, required: true} + return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Meeting_MotionPollProjectionNameOrderFirst(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "motion_poll_projection_name_order_first") +func (r *Fetch) Meeting_MotionsAmendmentsMultipleParagraphs(meetingID int) *ValueBool { + key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_multiple_paragraphs") if err != nil { - return &ValueString{err: err} + return &ValueBool{err: err} } - return &ValueString{fetch: r, key: key, required: true} -} - -func (r *Fetch) Meeting_MotionStateIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "motion_state_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) Meeting_MotionSubmitterIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "motion_submitter_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) Meeting_MotionSupporterIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "motion_supporter_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) Meeting_MotionWorkflowIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "motion_workflow_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) Meeting_MotionWorkingGroupSpeakerIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "motion_working_group_speaker_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) Meeting_MotionsAmendmentsEnabled(meetingID int) *ValueBool { - key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_enabled") - if err != nil { - return &ValueBool{err: err} - } - - return &ValueBool{fetch: r, key: key} -} - -func (r *Fetch) Meeting_MotionsAmendmentsInMainList(meetingID int) *ValueBool { - key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_in_main_list") - if err != nil { - return &ValueBool{err: err} - } - - return &ValueBool{fetch: r, key: key} -} - -func (r *Fetch) Meeting_MotionsAmendmentsMultipleParagraphs(meetingID int) *ValueBool { - key, err := dskey.FromParts("meeting", meetingID, "motions_amendments_multiple_paragraphs") - if err != nil { - return &ValueBool{err: err} - } - - return &ValueBool{fetch: r, key: key} + return &ValueBool{fetch: r, key: key} } func (r *Fetch) Meeting_MotionsAmendmentsOfAmendments(meetingID int) *ValueBool { @@ -4064,15 +4064,6 @@ func (r *Fetch) Meeting_Name(meetingID int) *ValueString { return &ValueString{fetch: r, key: key, required: true} } -func (r *Fetch) Meeting_OptionIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "option_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - func (r *Fetch) Meeting_OrganizationTagIDs(meetingID int) *ValueIntSlice { key, err := dskey.FromParts("meeting", meetingID, "organization_tag_ids") if err != nil { @@ -4100,42 +4091,6 @@ func (r *Fetch) Meeting_PointOfOrderCategoryIDs(meetingID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_PollBallotPaperNumber(meetingID int) *ValueInt { - key, err := dskey.FromParts("meeting", meetingID, "poll_ballot_paper_number") - if err != nil { - return &ValueInt{err: err} - } - - return &ValueInt{fetch: r, key: key} -} - -func (r *Fetch) Meeting_PollBallotPaperSelection(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "poll_ballot_paper_selection") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key} -} - -func (r *Fetch) Meeting_PollCandidateIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "poll_candidate_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) Meeting_PollCandidateListIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "poll_candidate_list_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - func (r *Fetch) Meeting_PollCountdownID(meetingID int) *ValueMaybeInt { key, err := dskey.FromParts("meeting", meetingID, "poll_countdown_id") if err != nil { @@ -4154,26 +4109,17 @@ func (r *Fetch) Meeting_PollCoupleCountdown(meetingID int) *ValueBool { return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Meeting_PollDefaultBackend(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "poll_default_backend") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key} -} - -func (r *Fetch) Meeting_PollDefaultGroupIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "poll_default_group_ids") +func (r *Fetch) Meeting_PollDefaultAllowInvalid(meetingID int) *ValueBool { + key, err := dskey.FromParts("meeting", meetingID, "poll_default_allow_invalid") if err != nil { - return &ValueIntSlice{err: err} + return &ValueBool{err: err} } - return &ValueIntSlice{fetch: r, key: key} + return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Meeting_PollDefaultLiveVotingEnabled(meetingID int) *ValueBool { - key, err := dskey.FromParts("meeting", meetingID, "poll_default_live_voting_enabled") +func (r *Fetch) Meeting_PollDefaultAllowVoteSplit(meetingID int) *ValueBool { + key, err := dskey.FromParts("meeting", meetingID, "poll_default_allow_vote_split") if err != nil { return &ValueBool{err: err} } @@ -4181,31 +4127,31 @@ func (r *Fetch) Meeting_PollDefaultLiveVotingEnabled(meetingID int) *ValueBool { return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Meeting_PollDefaultMethod(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "poll_default_method") +func (r *Fetch) Meeting_PollDefaultIDs(meetingID int) *ValueIntSlice { + key, err := dskey.FromParts("meeting", meetingID, "poll_default_ids") if err != nil { - return &ValueString{err: err} + return &ValueIntSlice{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_PollDefaultOnehundredPercentBase(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "poll_default_onehundred_percent_base") +func (r *Fetch) Meeting_PollDefaultLiveVotingEnabled(meetingID int) *ValueBool { + key, err := dskey.FromParts("meeting", meetingID, "poll_default_live_voting_enabled") if err != nil { - return &ValueString{err: err} + return &ValueBool{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Meeting_PollDefaultType(meetingID int) *ValueString { - key, err := dskey.FromParts("meeting", meetingID, "poll_default_type") +func (r *Fetch) Meeting_PollEnableMaxVotesPerOption(meetingID int) *ValueBool { + key, err := dskey.FromParts("meeting", meetingID, "poll_enable_max_votes_per_option") if err != nil { - return &ValueString{err: err} + return &ValueBool{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueBool{fetch: r, key: key} } func (r *Fetch) Meeting_PollIDs(meetingID int) *ValueIntSlice { @@ -4217,13 +4163,22 @@ func (r *Fetch) Meeting_PollIDs(meetingID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_PollSortPollResultByVotes(meetingID int) *ValueBool { - key, err := dskey.FromParts("meeting", meetingID, "poll_sort_poll_result_by_votes") +func (r *Fetch) Meeting_PollProjectionMaxColumns(meetingID int) *ValueInt { + key, err := dskey.FromParts("meeting", meetingID, "poll_projection_max_columns") if err != nil { - return &ValueBool{err: err} + return &ValueInt{err: err} } - return &ValueBool{fetch: r, key: key} + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) Meeting_PollProjectionNameOrderFirst(meetingID int) *ValueString { + key, err := dskey.FromParts("meeting", meetingID, "poll_projection_name_order_first") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key, required: true} } func (r *Fetch) Meeting_PresentUserIDs(meetingID int) *ValueIntSlice { @@ -4379,13 +4334,22 @@ func (r *Fetch) Meeting_TopicIDs(meetingID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Meeting_TopicPollDefaultGroupIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "topic_poll_default_group_ids") +func (r *Fetch) Meeting_TopicPollConfigID(meetingID int) *ValueMaybeInt { + key, err := dskey.FromParts("meeting", meetingID, "topic_poll_config_id") if err != nil { - return &ValueIntSlice{err: err} + return &ValueMaybeInt{err: err} } - return &ValueIntSlice{fetch: r, key: key} + return &ValueMaybeInt{fetch: r, key: key} +} + +func (r *Fetch) Meeting_TopicPollDefaultMethod(meetingID int) *ValueString { + key, err := dskey.FromParts("meeting", meetingID, "topic_poll_default_method") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key} } func (r *Fetch) Meeting_UserIDs(meetingID int) *ValueIntSlice { @@ -4550,15 +4514,6 @@ func (r *Fetch) Meeting_UsersPdfWlanSsid(meetingID int) *ValueString { return &ValueString{fetch: r, key: key} } -func (r *Fetch) Meeting_VoteIDs(meetingID int) *ValueIntSlice { - key, err := dskey.FromParts("meeting", meetingID, "vote_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - func (r *Fetch) Meeting_WelcomeText(meetingID int) *ValueString { key, err := dskey.FromParts("meeting", meetingID, "welcome_text") if err != nil { @@ -5711,15 +5666,6 @@ func (r *Fetch) Motion_NumberValue(motionID int) *ValueInt { return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Motion_OptionIDs(motionID int) *ValueIntSlice { - key, err := dskey.FromParts("motion", motionID, "option_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - func (r *Fetch) Motion_OriginID(motionID int) *ValueMaybeInt { key, err := dskey.FromParts("motion", motionID, "origin_id") if err != nil { @@ -5963,105 +5909,6 @@ func (r *Fetch) Motion_WorkingGroupSpeakerIDs(motionID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Option_Abstain(optionID int) *ValueDecimal { - key, err := dskey.FromParts("option", optionID, "abstain") - if err != nil { - return &ValueDecimal{err: err} - } - - return &ValueDecimal{fetch: r, key: key} -} - -func (r *Fetch) Option_ContentObjectID(optionID int) *ValueMaybeString { - key, err := dskey.FromParts("option", optionID, "content_object_id") - if err != nil { - return &ValueMaybeString{err: err} - } - - return &ValueMaybeString{fetch: r, key: key} -} - -func (r *Fetch) Option_ID(optionID int) *ValueInt { - key, err := dskey.FromParts("option", optionID, "id") - if err != nil { - return &ValueInt{err: err} - } - - return &ValueInt{fetch: r, key: key, required: true} -} - -func (r *Fetch) Option_MeetingID(optionID int) *ValueInt { - key, err := dskey.FromParts("option", optionID, "meeting_id") - if err != nil { - return &ValueInt{err: err} - } - - return &ValueInt{fetch: r, key: key, required: true} -} - -func (r *Fetch) Option_No(optionID int) *ValueDecimal { - key, err := dskey.FromParts("option", optionID, "no") - if err != nil { - return &ValueDecimal{err: err} - } - - return &ValueDecimal{fetch: r, key: key} -} - -func (r *Fetch) Option_PollID(optionID int) *ValueMaybeInt { - key, err := dskey.FromParts("option", optionID, "poll_id") - if err != nil { - return &ValueMaybeInt{err: err} - } - - return &ValueMaybeInt{fetch: r, key: key} -} - -func (r *Fetch) Option_Text(optionID int) *ValueString { - key, err := dskey.FromParts("option", optionID, "text") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key} -} - -func (r *Fetch) Option_UsedAsGlobalOptionInPollID(optionID int) *ValueMaybeInt { - key, err := dskey.FromParts("option", optionID, "used_as_global_option_in_poll_id") - if err != nil { - return &ValueMaybeInt{err: err} - } - - return &ValueMaybeInt{fetch: r, key: key} -} - -func (r *Fetch) Option_VoteIDs(optionID int) *ValueIntSlice { - key, err := dskey.FromParts("option", optionID, "vote_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) Option_Weight(optionID int) *ValueInt { - key, err := dskey.FromParts("option", optionID, "weight") - if err != nil { - return &ValueInt{err: err} - } - - return &ValueInt{fetch: r, key: key} -} - -func (r *Fetch) Option_Yes(optionID int) *ValueDecimal { - key, err := dskey.FromParts("option", optionID, "yes") - if err != nil { - return &ValueDecimal{err: err} - } - - return &ValueDecimal{fetch: r, key: key} -} - func (r *Fetch) OrganizationTag_Color(organizationTagID int) *ValueString { key, err := dskey.FromParts("organization_tag", organizationTagID, "color") if err != nil { @@ -6566,8 +6413,8 @@ func (r *Fetch) PointOfOrderCategory_Text(pointOfOrderCategoryID int) *ValueStri return &ValueString{fetch: r, key: key, required: true} } -func (r *Fetch) PollCandidateList_ID(pollCandidateListID int) *ValueInt { - key, err := dskey.FromParts("poll_candidate_list", pollCandidateListID, "id") +func (r *Fetch) PollBallotUser_ActingMeetingUserID(pollBallotUserID int) *ValueInt { + key, err := dskey.FromParts("poll_ballot_user", pollBallotUserID, "acting_meeting_user_id") if err != nil { return &ValueInt{err: err} } @@ -6575,8 +6422,8 @@ func (r *Fetch) PollCandidateList_ID(pollCandidateListID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) PollCandidateList_MeetingID(pollCandidateListID int) *ValueInt { - key, err := dskey.FromParts("poll_candidate_list", pollCandidateListID, "meeting_id") +func (r *Fetch) PollBallotUser_ID(pollBallotUserID int) *ValueInt { + key, err := dskey.FromParts("poll_ballot_user", pollBallotUserID, "id") if err != nil { return &ValueInt{err: err} } @@ -6584,26 +6431,26 @@ func (r *Fetch) PollCandidateList_MeetingID(pollCandidateListID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) PollCandidateList_OptionID(pollCandidateListID int) *ValueInt { - key, err := dskey.FromParts("poll_candidate_list", pollCandidateListID, "option_id") +func (r *Fetch) PollBallotUser_PollBallotID(pollBallotUserID int) *ValueMaybeInt { + key, err := dskey.FromParts("poll_ballot_user", pollBallotUserID, "poll_ballot_id") if err != nil { - return &ValueInt{err: err} + return &ValueMaybeInt{err: err} } - return &ValueInt{fetch: r, key: key, required: true} + return &ValueMaybeInt{fetch: r, key: key} } -func (r *Fetch) PollCandidateList_PollCandidateIDs(pollCandidateListID int) *ValueIntSlice { - key, err := dskey.FromParts("poll_candidate_list", pollCandidateListID, "poll_candidate_ids") +func (r *Fetch) PollBallotUser_PollID(pollBallotUserID int) *ValueInt { + key, err := dskey.FromParts("poll_ballot_user", pollBallotUserID, "poll_id") if err != nil { - return &ValueIntSlice{err: err} + return &ValueInt{err: err} } - return &ValueIntSlice{fetch: r, key: key} + return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) PollCandidate_ID(pollCandidateID int) *ValueInt { - key, err := dskey.FromParts("poll_candidate", pollCandidateID, "id") +func (r *Fetch) PollBallotUser_RepresentedMeetingUserID(pollBallotUserID int) *ValueInt { + key, err := dskey.FromParts("poll_ballot_user", pollBallotUserID, "represented_meeting_user_id") if err != nil { return &ValueInt{err: err} } @@ -6611,8 +6458,8 @@ func (r *Fetch) PollCandidate_ID(pollCandidateID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) PollCandidate_MeetingID(pollCandidateID int) *ValueInt { - key, err := dskey.FromParts("poll_candidate", pollCandidateID, "meeting_id") +func (r *Fetch) PollBallot_ID(pollBallotID int) *ValueInt { + key, err := dskey.FromParts("poll_ballot", pollBallotID, "id") if err != nil { return &ValueInt{err: err} } @@ -6620,26 +6467,62 @@ func (r *Fetch) PollCandidate_MeetingID(pollCandidateID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) PollCandidate_PollCandidateListID(pollCandidateID int) *ValueInt { - key, err := dskey.FromParts("poll_candidate", pollCandidateID, "poll_candidate_list_id") +func (r *Fetch) PollBallot_PollBallotUserID(pollBallotID int) *ValueMaybeInt { + key, err := dskey.FromParts("poll_ballot", pollBallotID, "poll_ballot_user_id") if err != nil { - return &ValueInt{err: err} + return &ValueMaybeInt{err: err} + } + + return &ValueMaybeInt{fetch: r, key: key} +} + +func (r *Fetch) PollBallot_PollID(pollBallotID int) *ValueInt { + key, err := dskey.FromParts("poll_ballot", pollBallotID, "poll_id") + if err != nil { + return &ValueInt{err: err} } return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) PollCandidate_UserID(pollCandidateID int) *ValueMaybeInt { - key, err := dskey.FromParts("poll_candidate", pollCandidateID, "user_id") +func (r *Fetch) PollBallot_Split(pollBallotID int) *ValueBool { + key, err := dskey.FromParts("poll_ballot", pollBallotID, "split") if err != nil { - return &ValueMaybeInt{err: err} + return &ValueBool{err: err} } - return &ValueMaybeInt{fetch: r, key: key} + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) PollBallot_Value(pollBallotID int) *ValueString { + key, err := dskey.FromParts("poll_ballot", pollBallotID, "value") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key} +} + +func (r *Fetch) PollBallot_Weight(pollBallotID int) *ValueDecimal { + key, err := dskey.FromParts("poll_ballot", pollBallotID, "weight") + if err != nil { + return &ValueDecimal{err: err} + } + + return &ValueDecimal{fetch: r, key: key} } -func (r *Fetch) PollCandidate_Weight(pollCandidateID int) *ValueInt { - key, err := dskey.FromParts("poll_candidate", pollCandidateID, "weight") +func (r *Fetch) PollConfigApproval_AllowAbstain(pollConfigApprovalID int) *ValueBool { + key, err := dskey.FromParts("poll_config_approval", pollConfigApprovalID, "allow_abstain") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) PollConfigApproval_ID(pollConfigApprovalID int) *ValueInt { + key, err := dskey.FromParts("poll_config_approval", pollConfigApprovalID, "id") if err != nil { return &ValueInt{err: err} } @@ -6647,8 +6530,8 @@ func (r *Fetch) PollCandidate_Weight(pollCandidateID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_Backend(pollID int) *ValueString { - key, err := dskey.FromParts("poll", pollID, "backend") +func (r *Fetch) PollConfigApproval_OnehundredPercentBase(pollConfigApprovalID int) *ValueString { + key, err := dskey.FromParts("poll_config_approval", pollConfigApprovalID, "onehundred_percent_base") if err != nil { return &ValueString{err: err} } @@ -6656,8 +6539,62 @@ func (r *Fetch) Poll_Backend(pollID int) *ValueString { return &ValueString{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_ContentObjectID(pollID int) *ValueString { - key, err := dskey.FromParts("poll", pollID, "content_object_id") +func (r *Fetch) PollConfigApproval_PollID(pollConfigApprovalID int) *ValueInt { + key, err := dskey.FromParts("poll_config_approval", pollConfigApprovalID, "poll_id") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) PollConfigRatingApproval_AllowAbstain(pollConfigRatingApprovalID int) *ValueBool { + key, err := dskey.FromParts("poll_config_rating_approval", pollConfigRatingApprovalID, "allow_abstain") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) PollConfigRatingApproval_ID(pollConfigRatingApprovalID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_approval", pollConfigRatingApprovalID, "id") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) PollConfigRatingApproval_MaxOptionsAmount(pollConfigRatingApprovalID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_approval", pollConfigRatingApprovalID, "max_options_amount") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key} +} + +func (r *Fetch) PollConfigRatingApproval_MaxYesAmount(pollConfigRatingApprovalID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_approval", pollConfigRatingApprovalID, "max_yes_amount") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key} +} + +func (r *Fetch) PollConfigRatingApproval_MinOptionsAmount(pollConfigRatingApprovalID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_approval", pollConfigRatingApprovalID, "min_options_amount") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key} +} + +func (r *Fetch) PollConfigRatingApproval_OnehundredPercentBase(pollConfigRatingApprovalID int) *ValueString { + key, err := dskey.FromParts("poll_config_rating_approval", pollConfigRatingApprovalID, "onehundred_percent_base") if err != nil { return &ValueString{err: err} } @@ -6665,71 +6602,80 @@ func (r *Fetch) Poll_ContentObjectID(pollID int) *ValueString { return &ValueString{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_Description(pollID int) *ValueString { - key, err := dskey.FromParts("poll", pollID, "description") +func (r *Fetch) PollConfigRatingApproval_PollID(pollConfigRatingApprovalID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_approval", pollConfigRatingApprovalID, "poll_id") if err != nil { - return &ValueString{err: err} + return &ValueInt{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_EntitledGroupIDs(pollID int) *ValueIntSlice { - key, err := dskey.FromParts("poll", pollID, "entitled_group_ids") +func (r *Fetch) PollConfigRatingScore_ID(pollConfigRatingScoreID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_score", pollConfigRatingScoreID, "id") if err != nil { - return &ValueIntSlice{err: err} + return &ValueInt{err: err} } - return &ValueIntSlice{fetch: r, key: key} + return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_EntitledUsersAtStop(pollID int) *ValueJSON { - key, err := dskey.FromParts("poll", pollID, "entitled_users_at_stop") +func (r *Fetch) PollConfigRatingScore_MaxOptionsAmount(pollConfigRatingScoreID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_score", pollConfigRatingScoreID, "max_options_amount") if err != nil { - return &ValueJSON{err: err} + return &ValueInt{err: err} } - return &ValueJSON{fetch: r, key: key} + return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Poll_GlobalAbstain(pollID int) *ValueBool { - key, err := dskey.FromParts("poll", pollID, "global_abstain") +func (r *Fetch) PollConfigRatingScore_MaxVoteSum(pollConfigRatingScoreID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_score", pollConfigRatingScoreID, "max_vote_sum") if err != nil { - return &ValueBool{err: err} + return &ValueInt{err: err} } - return &ValueBool{fetch: r, key: key} + return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Poll_GlobalNo(pollID int) *ValueBool { - key, err := dskey.FromParts("poll", pollID, "global_no") +func (r *Fetch) PollConfigRatingScore_MaxVotesPerOption(pollConfigRatingScoreID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_score", pollConfigRatingScoreID, "max_votes_per_option") if err != nil { - return &ValueBool{err: err} + return &ValueInt{err: err} } - return &ValueBool{fetch: r, key: key} + return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Poll_GlobalOptionID(pollID int) *ValueMaybeInt { - key, err := dskey.FromParts("poll", pollID, "global_option_id") +func (r *Fetch) PollConfigRatingScore_MinOptionsAmount(pollConfigRatingScoreID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_score", pollConfigRatingScoreID, "min_options_amount") if err != nil { - return &ValueMaybeInt{err: err} + return &ValueInt{err: err} } - return &ValueMaybeInt{fetch: r, key: key} + return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Poll_GlobalYes(pollID int) *ValueBool { - key, err := dskey.FromParts("poll", pollID, "global_yes") +func (r *Fetch) PollConfigRatingScore_MinVoteSum(pollConfigRatingScoreID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_score", pollConfigRatingScoreID, "min_vote_sum") if err != nil { - return &ValueBool{err: err} + return &ValueInt{err: err} } - return &ValueBool{fetch: r, key: key} + return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Poll_ID(pollID int) *ValueInt { - key, err := dskey.FromParts("poll", pollID, "id") +func (r *Fetch) PollConfigRatingScore_OnehundredPercentBase(pollConfigRatingScoreID int) *ValueString { + key, err := dskey.FromParts("poll_config_rating_score", pollConfigRatingScoreID, "onehundred_percent_base") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key, required: true} +} + +func (r *Fetch) PollConfigRatingScore_PollID(pollConfigRatingScoreID int) *ValueInt { + key, err := dskey.FromParts("poll_config_rating_score", pollConfigRatingScoreID, "poll_id") if err != nil { return &ValueInt{err: err} } @@ -6737,8 +6683,8 @@ func (r *Fetch) Poll_ID(pollID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_IsPseudoanonymized(pollID int) *ValueBool { - key, err := dskey.FromParts("poll", pollID, "is_pseudoanonymized") +func (r *Fetch) PollConfigSelection_AllowNota(pollConfigSelectionID int) *ValueBool { + key, err := dskey.FromParts("poll_config_selection", pollConfigSelectionID, "allow_nota") if err != nil { return &ValueBool{err: err} } @@ -6746,26 +6692,26 @@ func (r *Fetch) Poll_IsPseudoanonymized(pollID int) *ValueBool { return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Poll_LiveVotes(pollID int) *ValueJSON { - key, err := dskey.FromParts("poll", pollID, "live_votes") +func (r *Fetch) PollConfigSelection_DisplayChart(pollConfigSelectionID int) *ValueString { + key, err := dskey.FromParts("poll_config_selection", pollConfigSelectionID, "display_chart") if err != nil { - return &ValueJSON{err: err} + return &ValueString{err: err} } - return &ValueJSON{fetch: r, key: key} + return &ValueString{fetch: r, key: key} } -func (r *Fetch) Poll_LiveVotingEnabled(pollID int) *ValueBool { - key, err := dskey.FromParts("poll", pollID, "live_voting_enabled") +func (r *Fetch) PollConfigSelection_ID(pollConfigSelectionID int) *ValueInt { + key, err := dskey.FromParts("poll_config_selection", pollConfigSelectionID, "id") if err != nil { - return &ValueBool{err: err} + return &ValueInt{err: err} } - return &ValueBool{fetch: r, key: key} + return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_MaxVotesAmount(pollID int) *ValueInt { - key, err := dskey.FromParts("poll", pollID, "max_votes_amount") +func (r *Fetch) PollConfigSelection_MaxOptionsAmount(pollConfigSelectionID int) *ValueInt { + key, err := dskey.FromParts("poll_config_selection", pollConfigSelectionID, "max_options_amount") if err != nil { return &ValueInt{err: err} } @@ -6773,8 +6719,8 @@ func (r *Fetch) Poll_MaxVotesAmount(pollID int) *ValueInt { return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Poll_MaxVotesPerOption(pollID int) *ValueInt { - key, err := dskey.FromParts("poll", pollID, "max_votes_per_option") +func (r *Fetch) PollConfigSelection_MinOptionsAmount(pollConfigSelectionID int) *ValueInt { + key, err := dskey.FromParts("poll_config_selection", pollConfigSelectionID, "min_options_amount") if err != nil { return &ValueInt{err: err} } @@ -6782,8 +6728,35 @@ func (r *Fetch) Poll_MaxVotesPerOption(pollID int) *ValueInt { return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Poll_MeetingID(pollID int) *ValueInt { - key, err := dskey.FromParts("poll", pollID, "meeting_id") +func (r *Fetch) PollConfigSelection_OnehundredPercentBase(pollConfigSelectionID int) *ValueString { + key, err := dskey.FromParts("poll_config_selection", pollConfigSelectionID, "onehundred_percent_base") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key, required: true} +} + +func (r *Fetch) PollConfigSelection_PollID(pollConfigSelectionID int) *ValueInt { + key, err := dskey.FromParts("poll_config_selection", pollConfigSelectionID, "poll_id") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) PollConfigSelection_StrikeOut(pollConfigSelectionID int) *ValueBool { + key, err := dskey.FromParts("poll_config_selection", pollConfigSelectionID, "strike_out") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) PollConfigStvScottish_ID(pollConfigStvScottishID int) *ValueInt { + key, err := dskey.FromParts("poll_config_stv_scottish", pollConfigStvScottishID, "id") if err != nil { return &ValueInt{err: err} } @@ -6791,8 +6764,17 @@ func (r *Fetch) Poll_MeetingID(pollID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_MinVotesAmount(pollID int) *ValueInt { - key, err := dskey.FromParts("poll", pollID, "min_votes_amount") +func (r *Fetch) PollConfigStvScottish_PollID(pollConfigStvScottishID int) *ValueInt { + key, err := dskey.FromParts("poll_config_stv_scottish", pollConfigStvScottishID, "poll_id") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) PollConfigStvScottish_Posts(pollConfigStvScottishID int) *ValueInt { + key, err := dskey.FromParts("poll_config_stv_scottish", pollConfigStvScottishID, "posts") if err != nil { return &ValueInt{err: err} } @@ -6800,17 +6782,80 @@ func (r *Fetch) Poll_MinVotesAmount(pollID int) *ValueInt { return &ValueInt{fetch: r, key: key} } -func (r *Fetch) Poll_OnehundredPercentBase(pollID int) *ValueString { - key, err := dskey.FromParts("poll", pollID, "onehundred_percent_base") +func (r *Fetch) PollOption_ID(pollOptionID int) *ValueInt { + key, err := dskey.FromParts("poll_option", pollOptionID, "id") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) PollOption_MeetingUserID(pollOptionID int) *ValueMaybeInt { + key, err := dskey.FromParts("poll_option", pollOptionID, "meeting_user_id") + if err != nil { + return &ValueMaybeInt{err: err} + } + + return &ValueMaybeInt{fetch: r, key: key} +} + +func (r *Fetch) PollOption_PollID(pollOptionID int) *ValueInt { + key, err := dskey.FromParts("poll_option", pollOptionID, "poll_id") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key, required: true} +} + +func (r *Fetch) PollOption_Text(pollOptionID int) *ValueString { + key, err := dskey.FromParts("poll_option", pollOptionID, "text") if err != nil { return &ValueString{err: err} } - return &ValueString{fetch: r, key: key, required: true} + return &ValueString{fetch: r, key: key} } -func (r *Fetch) Poll_OptionIDs(pollID int) *ValueIntSlice { - key, err := dskey.FromParts("poll", pollID, "option_ids") +func (r *Fetch) PollOption_Weight(pollOptionID int) *ValueInt { + key, err := dskey.FromParts("poll_option", pollOptionID, "weight") + if err != nil { + return &ValueInt{err: err} + } + + return &ValueInt{fetch: r, key: key} +} + +func (r *Fetch) Poll_AllowInvalid(pollID int) *ValueBool { + key, err := dskey.FromParts("poll", pollID, "allow_invalid") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) Poll_AllowVoteSplit(pollID int) *ValueBool { + key, err := dskey.FromParts("poll", pollID, "allow_vote_split") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) Poll_Anonymized(pollID int) *ValueBool { + key, err := dskey.FromParts("poll", pollID, "anonymized") + if err != nil { + return &ValueBool{err: err} + } + + return &ValueBool{fetch: r, key: key} +} + +func (r *Fetch) Poll_BallotIDs(pollID int) *ValueIntSlice { + key, err := dskey.FromParts("poll", pollID, "ballot_ids") if err != nil { return &ValueIntSlice{err: err} } @@ -6818,8 +6863,17 @@ func (r *Fetch) Poll_OptionIDs(pollID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Poll_Pollmethod(pollID int) *ValueString { - key, err := dskey.FromParts("poll", pollID, "pollmethod") +func (r *Fetch) Poll_BallotUserIDs(pollID int) *ValueIntSlice { + key, err := dskey.FromParts("poll", pollID, "ballot_user_ids") + if err != nil { + return &ValueIntSlice{err: err} + } + + return &ValueIntSlice{fetch: r, key: key} +} + +func (r *Fetch) Poll_ConfigID(pollID int) *ValueString { + key, err := dskey.FromParts("poll", pollID, "config_id") if err != nil { return &ValueString{err: err} } @@ -6827,8 +6881,17 @@ func (r *Fetch) Poll_Pollmethod(pollID int) *ValueString { return &ValueString{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_ProjectionIDs(pollID int) *ValueIntSlice { - key, err := dskey.FromParts("poll", pollID, "projection_ids") +func (r *Fetch) Poll_ContentObjectID(pollID int) *ValueString { + key, err := dskey.FromParts("poll", pollID, "content_object_id") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key, required: true} +} + +func (r *Fetch) Poll_EntitledGroupIDs(pollID int) *ValueIntSlice { + key, err := dskey.FromParts("poll", pollID, "entitled_group_ids") if err != nil { return &ValueIntSlice{err: err} } @@ -6836,8 +6899,17 @@ func (r *Fetch) Poll_ProjectionIDs(pollID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Poll_SequentialNumber(pollID int) *ValueInt { - key, err := dskey.FromParts("poll", pollID, "sequential_number") +func (r *Fetch) Poll_HistoryEntryIDs(pollID int) *ValueIntSlice { + key, err := dskey.FromParts("poll", pollID, "history_entry_ids") + if err != nil { + return &ValueIntSlice{err: err} + } + + return &ValueIntSlice{fetch: r, key: key} +} + +func (r *Fetch) Poll_ID(pollID int) *ValueInt { + key, err := dskey.FromParts("poll", pollID, "id") if err != nil { return &ValueInt{err: err} } @@ -6845,35 +6917,35 @@ func (r *Fetch) Poll_SequentialNumber(pollID int) *ValueInt { return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_State(pollID int) *ValueString { - key, err := dskey.FromParts("poll", pollID, "state") +func (r *Fetch) Poll_LiveVotingEnabled(pollID int) *ValueBool { + key, err := dskey.FromParts("poll", pollID, "live_voting_enabled") if err != nil { - return &ValueString{err: err} + return &ValueBool{err: err} } - return &ValueString{fetch: r, key: key} + return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Poll_Title(pollID int) *ValueString { - key, err := dskey.FromParts("poll", pollID, "title") +func (r *Fetch) Poll_MeetingID(pollID int) *ValueInt { + key, err := dskey.FromParts("poll", pollID, "meeting_id") if err != nil { - return &ValueString{err: err} + return &ValueInt{err: err} } - return &ValueString{fetch: r, key: key, required: true} + return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Poll_Type(pollID int) *ValueString { - key, err := dskey.FromParts("poll", pollID, "type") +func (r *Fetch) Poll_OptionIDs(pollID int) *ValueIntSlice { + key, err := dskey.FromParts("poll", pollID, "option_ids") if err != nil { - return &ValueString{err: err} + return &ValueIntSlice{err: err} } - return &ValueString{fetch: r, key: key, required: true} + return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Poll_VotedIDs(pollID int) *ValueIntSlice { - key, err := dskey.FromParts("poll", pollID, "voted_ids") +func (r *Fetch) Poll_ProjectionIDs(pollID int) *ValueIntSlice { + key, err := dskey.FromParts("poll", pollID, "projection_ids") if err != nil { return &ValueIntSlice{err: err} } @@ -6881,40 +6953,58 @@ func (r *Fetch) Poll_VotedIDs(pollID int) *ValueIntSlice { return &ValueIntSlice{fetch: r, key: key} } -func (r *Fetch) Poll_Votescast(pollID int) *ValueDecimal { - key, err := dskey.FromParts("poll", pollID, "votescast") +func (r *Fetch) Poll_Published(pollID int) *ValueBool { + key, err := dskey.FromParts("poll", pollID, "published") if err != nil { - return &ValueDecimal{err: err} + return &ValueBool{err: err} } - return &ValueDecimal{fetch: r, key: key} + return &ValueBool{fetch: r, key: key} } -func (r *Fetch) Poll_Votesinvalid(pollID int) *ValueDecimal { - key, err := dskey.FromParts("poll", pollID, "votesinvalid") +func (r *Fetch) Poll_Result(pollID int) *ValueString { + key, err := dskey.FromParts("poll", pollID, "result") if err != nil { - return &ValueDecimal{err: err} + return &ValueString{err: err} } - return &ValueDecimal{fetch: r, key: key} + return &ValueString{fetch: r, key: key} } -func (r *Fetch) Poll_Votesvalid(pollID int) *ValueDecimal { - key, err := dskey.FromParts("poll", pollID, "votesvalid") +func (r *Fetch) Poll_SequentialNumber(pollID int) *ValueInt { + key, err := dskey.FromParts("poll", pollID, "sequential_number") if err != nil { - return &ValueDecimal{err: err} + return &ValueInt{err: err} } - return &ValueDecimal{fetch: r, key: key} + return &ValueInt{fetch: r, key: key, required: true} } -func (r *Fetch) Projection_Content(projectionID int) *ValueJSON { - key, err := dskey.FromParts("projection", projectionID, "content") +func (r *Fetch) Poll_State(pollID int) *ValueString { + key, err := dskey.FromParts("poll", pollID, "state") if err != nil { - return &ValueJSON{err: err} + return &ValueString{err: err} } - return &ValueJSON{fetch: r, key: key} + return &ValueString{fetch: r, key: key} +} + +func (r *Fetch) Poll_Title(pollID int) *ValueString { + key, err := dskey.FromParts("poll", pollID, "title") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key, required: true} +} + +func (r *Fetch) Poll_Visibility(pollID int) *ValueString { + key, err := dskey.FromParts("poll", pollID, "visibility") + if err != nil { + return &ValueString{err: err} + } + + return &ValueString{fetch: r, key: key, required: true} } func (r *Fetch) Projection_ContentObjectID(projectionID int) *ValueString { @@ -7466,8 +7556,8 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForMotionPollInMeetingID(project return &ValueMaybeInt{fetch: r, key: key} } -func (r *Fetch) Projector_UsedAsDefaultProjectorForPollInMeetingID(projectorID int) *ValueMaybeInt { - key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_poll_in_meeting_id") +func (r *Fetch) Projector_UsedAsDefaultProjectorForTopicInMeetingID(projectorID int) *ValueMaybeInt { + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_topic_in_meeting_id") if err != nil { return &ValueMaybeInt{err: err} } @@ -7475,8 +7565,8 @@ func (r *Fetch) Projector_UsedAsDefaultProjectorForPollInMeetingID(projectorID i return &ValueMaybeInt{fetch: r, key: key} } -func (r *Fetch) Projector_UsedAsDefaultProjectorForTopicInMeetingID(projectorID int) *ValueMaybeInt { - key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_topic_in_meeting_id") +func (r *Fetch) Projector_UsedAsDefaultProjectorForTopicPollInMeetingID(projectorID int) *ValueMaybeInt { + key, err := dskey.FromParts("projector", projectorID, "used_as_default_projector_for_topic_poll_in_meeting_id") if err != nil { return &ValueMaybeInt{err: err} } @@ -8411,15 +8501,6 @@ func (r *Fetch) User_DefaultVoteWeight(userID int) *ValueDecimal { return &ValueDecimal{fetch: r, key: key} } -func (r *Fetch) User_DelegatedVoteIDs(userID int) *ValueIntSlice { - key, err := dskey.FromParts("user", userID, "delegated_vote_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - func (r *Fetch) User_Email(userID int) *ValueString { key, err := dskey.FromParts("user", userID, "email") if err != nil { @@ -8582,15 +8663,6 @@ func (r *Fetch) User_MemberNumber(userID int) *ValueString { return &ValueString{fetch: r, key: key} } -func (r *Fetch) User_OptionIDs(userID int) *ValueIntSlice { - key, err := dskey.FromParts("user", userID, "option_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - func (r *Fetch) User_OrganizationID(userID int) *ValueInt { key, err := dskey.FromParts("user", userID, "organization_id") if err != nil { @@ -8618,24 +8690,6 @@ func (r *Fetch) User_Password(userID int) *ValueString { return &ValueString{fetch: r, key: key} } -func (r *Fetch) User_PollCandidateIDs(userID int) *ValueIntSlice { - key, err := dskey.FromParts("user", userID, "poll_candidate_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) User_PollVotedIDs(userID int) *ValueIntSlice { - key, err := dskey.FromParts("user", userID, "poll_voted_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - func (r *Fetch) User_Pronoun(userID int) *ValueString { key, err := dskey.FromParts("user", userID, "pronoun") if err != nil { @@ -8671,84 +8725,3 @@ func (r *Fetch) User_Username(userID int) *ValueString { return &ValueString{fetch: r, key: key, required: true} } - -func (r *Fetch) User_VoteIDs(userID int) *ValueIntSlice { - key, err := dskey.FromParts("user", userID, "vote_ids") - if err != nil { - return &ValueIntSlice{err: err} - } - - return &ValueIntSlice{fetch: r, key: key} -} - -func (r *Fetch) Vote_DelegatedUserID(voteID int) *ValueMaybeInt { - key, err := dskey.FromParts("vote", voteID, "delegated_user_id") - if err != nil { - return &ValueMaybeInt{err: err} - } - - return &ValueMaybeInt{fetch: r, key: key} -} - -func (r *Fetch) Vote_ID(voteID int) *ValueInt { - key, err := dskey.FromParts("vote", voteID, "id") - if err != nil { - return &ValueInt{err: err} - } - - return &ValueInt{fetch: r, key: key, required: true} -} - -func (r *Fetch) Vote_MeetingID(voteID int) *ValueInt { - key, err := dskey.FromParts("vote", voteID, "meeting_id") - if err != nil { - return &ValueInt{err: err} - } - - return &ValueInt{fetch: r, key: key, required: true} -} - -func (r *Fetch) Vote_OptionID(voteID int) *ValueInt { - key, err := dskey.FromParts("vote", voteID, "option_id") - if err != nil { - return &ValueInt{err: err} - } - - return &ValueInt{fetch: r, key: key, required: true} -} - -func (r *Fetch) Vote_UserID(voteID int) *ValueMaybeInt { - key, err := dskey.FromParts("vote", voteID, "user_id") - if err != nil { - return &ValueMaybeInt{err: err} - } - - return &ValueMaybeInt{fetch: r, key: key} -} - -func (r *Fetch) Vote_UserToken(voteID int) *ValueString { - key, err := dskey.FromParts("vote", voteID, "user_token") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key, required: true} -} - -func (r *Fetch) Vote_Value(voteID int) *ValueString { - key, err := dskey.FromParts("vote", voteID, "value") - if err != nil { - return &ValueString{err: err} - } - - return &ValueString{fetch: r, key: key, required: true} -} - -func (r *Fetch) Vote_Weight(voteID int) *ValueDecimal { - key, err := dskey.FromParts("vote", voteID, "weight") - if err != nil { - return &ValueDecimal{err: err} - } - - return &ValueDecimal{fetch: r, key: key, required: true} -} diff --git a/datastore/dskey/gen_collection_fields.go b/datastore/dskey/gen_collection_fields.go index fbfdf2d0e..b3aaf3f7d 100644 --- a/datastore/dskey/gen_collection_fields.go +++ b/datastore/dskey/gen_collection_fields.go @@ -108,10 +108,7 @@ var collectionFields = [...]collectionField{ {"group", "poll_ids"}, {"group", "read_chat_group_ids"}, {"group", "read_comment_section_ids"}, - {"group", "used_as_assignment_poll_default_id"}, - {"group", "used_as_motion_poll_default_id"}, - {"group", "used_as_poll_default_id"}, - {"group", "used_as_topic_poll_default_id"}, + {"group", "used_in_meeting_poll_default_ids"}, {"group", "weight"}, {"group", "write_chat_group_ids"}, {"group", "write_comment_section_ids"}, @@ -122,6 +119,7 @@ var collectionFields = [...]collectionField{ {"history_entry", "model_id"}, {"history_entry", "original_model_id"}, {"history_entry", "position_id"}, + {"history_entry", "structured_information"}, {"history_position", "A"}, {"history_position", "entry_ids"}, {"history_position", "id"}, @@ -187,15 +185,8 @@ var collectionFields = [...]collectionField{ {"meeting", "assignment_candidate_ids"}, {"meeting", "assignment_ids"}, {"meeting", "assignment_poll_add_candidates_to_list_of_speakers"}, - {"meeting", "assignment_poll_ballot_paper_number"}, - {"meeting", "assignment_poll_ballot_paper_selection"}, - {"meeting", "assignment_poll_default_backend"}, - {"meeting", "assignment_poll_default_group_ids"}, + {"meeting", "assignment_poll_config_id"}, {"meeting", "assignment_poll_default_method"}, - {"meeting", "assignment_poll_default_onehundred_percent_base"}, - {"meeting", "assignment_poll_default_type"}, - {"meeting", "assignment_poll_enable_max_votes_per_option"}, - {"meeting", "assignment_poll_sort_poll_result_by_votes"}, {"meeting", "assignments_export_preamble"}, {"meeting", "assignments_export_title"}, {"meeting", "chat_group_ids"}, @@ -225,8 +216,8 @@ var collectionFields = [...]collectionField{ {"meeting", "default_projector_motion_block_ids"}, {"meeting", "default_projector_motion_ids"}, {"meeting", "default_projector_motion_poll_ids"}, - {"meeting", "default_projector_poll_ids"}, {"meeting", "default_projector_topic_ids"}, + {"meeting", "default_projector_topic_poll_ids"}, {"meeting", "description"}, {"meeting", "enable_anonymous"}, {"meeting", "end_time"}, @@ -300,15 +291,7 @@ var collectionFields = [...]collectionField{ {"meeting", "motion_comment_section_ids"}, {"meeting", "motion_editor_ids"}, {"meeting", "motion_ids"}, - {"meeting", "motion_poll_ballot_paper_number"}, - {"meeting", "motion_poll_ballot_paper_selection"}, - {"meeting", "motion_poll_default_backend"}, - {"meeting", "motion_poll_default_group_ids"}, - {"meeting", "motion_poll_default_method"}, - {"meeting", "motion_poll_default_onehundred_percent_base"}, - {"meeting", "motion_poll_default_type"}, - {"meeting", "motion_poll_projection_max_columns"}, - {"meeting", "motion_poll_projection_name_order_first"}, + {"meeting", "motion_poll_config_id"}, {"meeting", "motion_state_ids"}, {"meeting", "motion_submitter_ids"}, {"meeting", "motion_supporter_ids"}, @@ -353,24 +336,19 @@ var collectionFields = [...]collectionField{ {"meeting", "motions_show_sequential_number"}, {"meeting", "motions_supporters_min_amount"}, {"meeting", "name"}, - {"meeting", "option_ids"}, {"meeting", "organization_tag_ids"}, {"meeting", "personal_note_ids"}, {"meeting", "point_of_order_category_ids"}, - {"meeting", "poll_ballot_paper_number"}, - {"meeting", "poll_ballot_paper_selection"}, - {"meeting", "poll_candidate_ids"}, - {"meeting", "poll_candidate_list_ids"}, {"meeting", "poll_countdown_id"}, {"meeting", "poll_couple_countdown"}, - {"meeting", "poll_default_backend"}, - {"meeting", "poll_default_group_ids"}, + {"meeting", "poll_default_allow_invalid"}, + {"meeting", "poll_default_allow_vote_split"}, + {"meeting", "poll_default_ids"}, {"meeting", "poll_default_live_voting_enabled"}, - {"meeting", "poll_default_method"}, - {"meeting", "poll_default_onehundred_percent_base"}, - {"meeting", "poll_default_type"}, + {"meeting", "poll_enable_max_votes_per_option"}, {"meeting", "poll_ids"}, - {"meeting", "poll_sort_poll_result_by_votes"}, + {"meeting", "poll_projection_max_columns"}, + {"meeting", "poll_projection_name_order_first"}, {"meeting", "present_user_ids"}, {"meeting", "projection_ids"}, {"meeting", "projector_countdown_default_time"}, @@ -388,7 +366,8 @@ var collectionFields = [...]collectionField{ {"meeting", "template_for_organization_id"}, {"meeting", "time_zone"}, {"meeting", "topic_ids"}, - {"meeting", "topic_poll_default_group_ids"}, + {"meeting", "topic_poll_config_id"}, + {"meeting", "topic_poll_default_method"}, {"meeting", "user_ids"}, {"meeting", "users_allow_self_set_present"}, {"meeting", "users_email_body"}, @@ -407,7 +386,6 @@ var collectionFields = [...]collectionField{ {"meeting", "users_pdf_wlan_encryption"}, {"meeting", "users_pdf_wlan_password"}, {"meeting", "users_pdf_wlan_ssid"}, - {"meeting", "vote_ids"}, {"meeting", "welcome_text"}, {"meeting", "welcome_title"}, {"meeting_mediafile", "A"}, @@ -436,16 +414,32 @@ var collectionFields = [...]collectionField{ {"meeting_mediafile", "used_as_logo_projector_header_in_meeting_id"}, {"meeting_mediafile", "used_as_logo_projector_main_in_meeting_id"}, {"meeting_mediafile", "used_as_logo_web_header_in_meeting_id"}, + {"meeting_poll_default", "A"}, + {"meeting_poll_default", "allow_abstain"}, + {"meeting_poll_default", "allow_nota"}, + {"meeting_poll_default", "display_chart"}, + {"meeting_poll_default", "group_ids"}, + {"meeting_poll_default", "id"}, + {"meeting_poll_default", "meeting_id"}, + {"meeting_poll_default", "onehundred_percent_base"}, + {"meeting_poll_default", "sort_result_by_votes"}, + {"meeting_poll_default", "strike_out"}, + {"meeting_poll_default", "used_as_assignment_poll_config_in_meeting_id"}, + {"meeting_poll_default", "used_as_motion_poll_config_in_meeting_id"}, + {"meeting_poll_default", "used_as_topic_poll_config_in_meeting_id"}, + {"meeting_poll_default", "visibility"}, {"meeting_user", "A"}, {"meeting_user", "B"}, {"meeting_user", "C"}, {"meeting_user", "D"}, {"meeting_user", "E"}, {"meeting_user", "about_me"}, + {"meeting_user", "acting_ballot_ids"}, {"meeting_user", "assignment_candidate_ids"}, {"meeting_user", "chat_message_ids"}, {"meeting_user", "comment"}, {"meeting_user", "group_ids"}, + {"meeting_user", "history_entry_ids"}, {"meeting_user", "id"}, {"meeting_user", "locked_out"}, {"meeting_user", "meeting_id"}, @@ -455,6 +449,8 @@ var collectionFields = [...]collectionField{ {"meeting_user", "motion_working_group_speaker_ids"}, {"meeting_user", "number"}, {"meeting_user", "personal_note_ids"}, + {"meeting_user", "poll_option_ids"}, + {"meeting_user", "represented_ballot_ids"}, {"meeting_user", "speaker_ids"}, {"meeting_user", "structure_level_ids"}, {"meeting_user", "user_id"}, @@ -494,7 +490,6 @@ var collectionFields = [...]collectionField{ {"motion", "modified_final_version"}, {"motion", "number"}, {"motion", "number_value"}, - {"motion", "option_ids"}, {"motion", "origin_id"}, {"motion", "origin_meeting_id"}, {"motion", "personal_note_ids"}, @@ -631,19 +626,6 @@ var collectionFields = [...]collectionField{ {"motion_working_group_speaker", "meeting_user_id"}, {"motion_working_group_speaker", "motion_id"}, {"motion_working_group_speaker", "weight"}, - {"option", "A"}, - {"option", "B"}, - {"option", "abstain"}, - {"option", "content_object_id"}, - {"option", "id"}, - {"option", "meeting_id"}, - {"option", "no"}, - {"option", "poll_id"}, - {"option", "text"}, - {"option", "used_as_global_option_in_poll_id"}, - {"option", "vote_ids"}, - {"option", "weight"}, - {"option", "yes"}, {"organization", "A"}, {"organization", "B"}, {"organization", "C"}, @@ -710,50 +692,81 @@ var collectionFields = [...]collectionField{ {"point_of_order_category", "text"}, {"poll", "A"}, {"poll", "B"}, - {"poll", "C"}, - {"poll", "D"}, - {"poll", "backend"}, + {"poll", "allow_invalid"}, + {"poll", "allow_vote_split"}, + {"poll", "anonymized"}, + {"poll", "ballot_ids"}, + {"poll", "ballot_user_ids"}, + {"poll", "config_id"}, {"poll", "content_object_id"}, - {"poll", "description"}, {"poll", "entitled_group_ids"}, - {"poll", "entitled_users_at_stop"}, - {"poll", "global_abstain"}, - {"poll", "global_no"}, - {"poll", "global_option_id"}, - {"poll", "global_yes"}, + {"poll", "history_entry_ids"}, {"poll", "id"}, - {"poll", "is_pseudoanonymized"}, - {"poll", "live_votes"}, {"poll", "live_voting_enabled"}, - {"poll", "max_votes_amount"}, - {"poll", "max_votes_per_option"}, {"poll", "meeting_id"}, - {"poll", "min_votes_amount"}, - {"poll", "onehundred_percent_base"}, {"poll", "option_ids"}, - {"poll", "pollmethod"}, {"poll", "projection_ids"}, + {"poll", "published"}, + {"poll", "result"}, {"poll", "sequential_number"}, {"poll", "state"}, {"poll", "title"}, - {"poll", "type"}, - {"poll", "voted_ids"}, - {"poll", "votescast"}, - {"poll", "votesinvalid"}, - {"poll", "votesvalid"}, - {"poll_candidate", "A"}, - {"poll_candidate", "id"}, - {"poll_candidate", "meeting_id"}, - {"poll_candidate", "poll_candidate_list_id"}, - {"poll_candidate", "user_id"}, - {"poll_candidate", "weight"}, - {"poll_candidate_list", "A"}, - {"poll_candidate_list", "id"}, - {"poll_candidate_list", "meeting_id"}, - {"poll_candidate_list", "option_id"}, - {"poll_candidate_list", "poll_candidate_ids"}, + {"poll", "visibility"}, + {"poll_ballot", "A"}, + {"poll_ballot", "id"}, + {"poll_ballot", "poll_ballot_user_id"}, + {"poll_ballot", "poll_id"}, + {"poll_ballot", "split"}, + {"poll_ballot", "value"}, + {"poll_ballot", "weight"}, + {"poll_ballot_user", "A"}, + {"poll_ballot_user", "acting_meeting_user_id"}, + {"poll_ballot_user", "id"}, + {"poll_ballot_user", "poll_ballot_id"}, + {"poll_ballot_user", "poll_id"}, + {"poll_ballot_user", "represented_meeting_user_id"}, + {"poll_config_approval", "A"}, + {"poll_config_approval", "allow_abstain"}, + {"poll_config_approval", "id"}, + {"poll_config_approval", "onehundred_percent_base"}, + {"poll_config_approval", "poll_id"}, + {"poll_config_rating_approval", "A"}, + {"poll_config_rating_approval", "allow_abstain"}, + {"poll_config_rating_approval", "id"}, + {"poll_config_rating_approval", "max_options_amount"}, + {"poll_config_rating_approval", "max_yes_amount"}, + {"poll_config_rating_approval", "min_options_amount"}, + {"poll_config_rating_approval", "onehundred_percent_base"}, + {"poll_config_rating_approval", "poll_id"}, + {"poll_config_rating_score", "A"}, + {"poll_config_rating_score", "id"}, + {"poll_config_rating_score", "max_options_amount"}, + {"poll_config_rating_score", "max_vote_sum"}, + {"poll_config_rating_score", "max_votes_per_option"}, + {"poll_config_rating_score", "min_options_amount"}, + {"poll_config_rating_score", "min_vote_sum"}, + {"poll_config_rating_score", "onehundred_percent_base"}, + {"poll_config_rating_score", "poll_id"}, + {"poll_config_selection", "A"}, + {"poll_config_selection", "allow_nota"}, + {"poll_config_selection", "display_chart"}, + {"poll_config_selection", "id"}, + {"poll_config_selection", "max_options_amount"}, + {"poll_config_selection", "min_options_amount"}, + {"poll_config_selection", "onehundred_percent_base"}, + {"poll_config_selection", "poll_id"}, + {"poll_config_selection", "strike_out"}, + {"poll_config_stv_scottish", "A"}, + {"poll_config_stv_scottish", "id"}, + {"poll_config_stv_scottish", "poll_id"}, + {"poll_config_stv_scottish", "posts"}, + {"poll_option", "A"}, + {"poll_option", "id"}, + {"poll_option", "meeting_user_id"}, + {"poll_option", "poll_id"}, + {"poll_option", "text"}, + {"poll_option", "weight"}, {"projection", "A"}, - {"projection", "content"}, {"projection", "content_object_id"}, {"projection", "current_projector_id"}, {"projection", "history_projector_id"}, @@ -802,8 +815,8 @@ var collectionFields = [...]collectionField{ {"projector", "used_as_default_projector_for_motion_block_in_meeting_id"}, {"projector", "used_as_default_projector_for_motion_in_meeting_id"}, {"projector", "used_as_default_projector_for_motion_poll_in_meeting_id"}, - {"projector", "used_as_default_projector_for_poll_in_meeting_id"}, {"projector", "used_as_default_projector_for_topic_in_meeting_id"}, + {"projector", "used_as_default_projector_for_topic_poll_in_meeting_id"}, {"projector", "used_as_reference_projector_meeting_id"}, {"projector", "width"}, {"projector_countdown", "A"}, @@ -936,7 +949,6 @@ var collectionFields = [...]collectionField{ {"user", "committee_management_ids"}, {"user", "default_password"}, {"user", "default_vote_weight"}, - {"user", "delegated_vote_ids"}, {"user", "email"}, {"user", "external"}, {"user", "first_name"}, @@ -955,27 +967,13 @@ var collectionFields = [...]collectionField{ {"user", "meeting_ids"}, {"user", "meeting_user_ids"}, {"user", "member_number"}, - {"user", "option_ids"}, {"user", "organization_id"}, {"user", "organization_management_level"}, {"user", "password"}, - {"user", "poll_candidate_ids"}, - {"user", "poll_voted_ids"}, {"user", "pronoun"}, {"user", "saml_id"}, {"user", "title"}, {"user", "username"}, - {"user", "vote_ids"}, - {"vote", "A"}, - {"vote", "B"}, - {"vote", "delegated_user_id"}, - {"vote", "id"}, - {"vote", "meeting_id"}, - {"vote", "option_id"}, - {"vote", "user_id"}, - {"vote", "user_token"}, - {"vote", "value"}, - {"vote", "weight"}, } func collectionFieldToID(cf string) int { @@ -1190,1742 +1188,1738 @@ func collectionFieldToID(cf string) int { return 104 case "group/read_comment_section_ids": return 105 - case "group/used_as_assignment_poll_default_id": + case "group/used_in_meeting_poll_default_ids": return 106 - case "group/used_as_motion_poll_default_id": + case "group/weight": return 107 - case "group/used_as_poll_default_id": + case "group/write_chat_group_ids": return 108 - case "group/used_as_topic_poll_default_id": + case "group/write_comment_section_ids": return 109 - case "group/weight": + case "history_entry/A": return 110 - case "group/write_chat_group_ids": + case "history_entry/entries": return 111 - case "group/write_comment_section_ids": + case "history_entry/id": return 112 - case "history_entry/A": + case "history_entry/meeting_id": return 113 - case "history_entry/entries": + case "history_entry/model_id": return 114 - case "history_entry/id": + case "history_entry/original_model_id": return 115 - case "history_entry/meeting_id": + case "history_entry/position_id": return 116 - case "history_entry/model_id": + case "history_entry/structured_information": return 117 - case "history_entry/original_model_id": + case "history_position/A": return 118 - case "history_entry/position_id": + case "history_position/entry_ids": return 119 - case "history_position/A": + case "history_position/id": return 120 - case "history_position/entry_ids": + case "history_position/original_user_id": return 121 - case "history_position/id": + case "history_position/timestamp": return 122 - case "history_position/original_user_id": + case "history_position/user_id": return 123 - case "history_position/timestamp": + case "import_preview/A": return 124 - case "history_position/user_id": + case "import_preview/created": return 125 - case "import_preview/A": + case "import_preview/id": return 126 - case "import_preview/created": + case "import_preview/name": return 127 - case "import_preview/id": + case "import_preview/result": return 128 - case "import_preview/name": + case "import_preview/state": return 129 - case "import_preview/result": + case "list_of_speakers/A": return 130 - case "import_preview/state": + case "list_of_speakers/B": return 131 - case "list_of_speakers/A": + case "list_of_speakers/closed": return 132 - case "list_of_speakers/B": + case "list_of_speakers/content_object_id": return 133 - case "list_of_speakers/closed": + case "list_of_speakers/id": return 134 - case "list_of_speakers/content_object_id": + case "list_of_speakers/meeting_id": return 135 - case "list_of_speakers/id": + case "list_of_speakers/moderator_notes": return 136 - case "list_of_speakers/meeting_id": + case "list_of_speakers/projection_ids": return 137 - case "list_of_speakers/moderator_notes": + case "list_of_speakers/sequential_number": return 138 - case "list_of_speakers/projection_ids": + case "list_of_speakers/speaker_ids": return 139 - case "list_of_speakers/sequential_number": + case "list_of_speakers/structure_level_list_of_speakers_ids": return 140 - case "list_of_speakers/speaker_ids": + case "mediafile/A": return 141 - case "list_of_speakers/structure_level_list_of_speakers_ids": + case "mediafile/child_ids": return 142 - case "mediafile/A": + case "mediafile/create_timestamp": return 143 - case "mediafile/child_ids": + case "mediafile/filename": return 144 - case "mediafile/create_timestamp": + case "mediafile/filesize": return 145 - case "mediafile/filename": + case "mediafile/id": return 146 - case "mediafile/filesize": + case "mediafile/is_directory": return 147 - case "mediafile/id": + case "mediafile/meeting_mediafile_ids": return 148 - case "mediafile/is_directory": + case "mediafile/mimetype": return 149 - case "mediafile/meeting_mediafile_ids": + case "mediafile/owner_id": return 150 - case "mediafile/mimetype": + case "mediafile/parent_id": return 151 - case "mediafile/owner_id": + case "mediafile/pdf_information": return 152 - case "mediafile/parent_id": + case "mediafile/published_to_meetings_in_organization_id": return 153 - case "mediafile/pdf_information": + case "mediafile/title": return 154 - case "mediafile/published_to_meetings_in_organization_id": + case "mediafile/token": return 155 - case "mediafile/title": + case "meeting/A": return 156 - case "mediafile/token": + case "meeting/B": return 157 - case "meeting/A": + case "meeting/C": return 158 - case "meeting/B": + case "meeting/E": return 159 - case "meeting/C": + case "meeting/F": return 160 - case "meeting/E": + case "meeting/admin_group_id": return 161 - case "meeting/F": + case "meeting/agenda_enable_numbering": return 162 - case "meeting/admin_group_id": + case "meeting/agenda_item_creation": return 163 - case "meeting/agenda_enable_numbering": + case "meeting/agenda_item_ids": return 164 - case "meeting/agenda_item_creation": + case "meeting/agenda_new_items_default_visibility": return 165 - case "meeting/agenda_item_ids": + case "meeting/agenda_number_prefix": return 166 - case "meeting/agenda_new_items_default_visibility": + case "meeting/agenda_numeral_system": return 167 - case "meeting/agenda_number_prefix": + case "meeting/agenda_show_internal_items_on_projector": return 168 - case "meeting/agenda_numeral_system": + case "meeting/agenda_show_subtitles": return 169 - case "meeting/agenda_show_internal_items_on_projector": + case "meeting/agenda_show_topic_navigation_on_detail_view": return 170 - case "meeting/agenda_show_subtitles": + case "meeting/all_projection_ids": return 171 - case "meeting/agenda_show_topic_navigation_on_detail_view": + case "meeting/anonymous_group_id": return 172 - case "meeting/all_projection_ids": + case "meeting/applause_enable": return 173 - case "meeting/anonymous_group_id": + case "meeting/applause_max_amount": return 174 - case "meeting/applause_enable": + case "meeting/applause_min_amount": return 175 - case "meeting/applause_max_amount": + case "meeting/applause_particle_image_url": return 176 - case "meeting/applause_min_amount": + case "meeting/applause_show_level": return 177 - case "meeting/applause_particle_image_url": + case "meeting/applause_timeout": return 178 - case "meeting/applause_show_level": + case "meeting/applause_type": return 179 - case "meeting/applause_timeout": + case "meeting/assignment_candidate_ids": return 180 - case "meeting/applause_type": + case "meeting/assignment_ids": return 181 - case "meeting/assignment_candidate_ids": + case "meeting/assignment_poll_add_candidates_to_list_of_speakers": return 182 - case "meeting/assignment_ids": + case "meeting/assignment_poll_config_id": return 183 - case "meeting/assignment_poll_add_candidates_to_list_of_speakers": + case "meeting/assignment_poll_default_method": return 184 - case "meeting/assignment_poll_ballot_paper_number": + case "meeting/assignments_export_preamble": return 185 - case "meeting/assignment_poll_ballot_paper_selection": + case "meeting/assignments_export_title": return 186 - case "meeting/assignment_poll_default_backend": + case "meeting/chat_group_ids": return 187 - case "meeting/assignment_poll_default_group_ids": + case "meeting/chat_message_ids": return 188 - case "meeting/assignment_poll_default_method": + case "meeting/committee_id": return 189 - case "meeting/assignment_poll_default_onehundred_percent_base": + case "meeting/conference_auto_connect": return 190 - case "meeting/assignment_poll_default_type": + case "meeting/conference_auto_connect_next_speakers": return 191 - case "meeting/assignment_poll_enable_max_votes_per_option": + case "meeting/conference_enable_helpdesk": return 192 - case "meeting/assignment_poll_sort_poll_result_by_votes": + case "meeting/conference_los_restriction": return 193 - case "meeting/assignments_export_preamble": + case "meeting/conference_open_microphone": return 194 - case "meeting/assignments_export_title": + case "meeting/conference_open_video": return 195 - case "meeting/chat_group_ids": + case "meeting/conference_show": return 196 - case "meeting/chat_message_ids": + case "meeting/conference_stream_poster_url": return 197 - case "meeting/committee_id": + case "meeting/conference_stream_url": return 198 - case "meeting/conference_auto_connect": + case "meeting/custom_translations": return 199 - case "meeting/conference_auto_connect_next_speakers": + case "meeting/default_group_id": return 200 - case "meeting/conference_enable_helpdesk": + case "meeting/default_meeting_for_committee_id": return 201 - case "meeting/conference_los_restriction": + case "meeting/default_projector_agenda_item_list_ids": return 202 - case "meeting/conference_open_microphone": + case "meeting/default_projector_amendment_ids": return 203 - case "meeting/conference_open_video": + case "meeting/default_projector_assignment_ids": return 204 - case "meeting/conference_show": + case "meeting/default_projector_assignment_poll_ids": return 205 - case "meeting/conference_stream_poster_url": + case "meeting/default_projector_countdown_ids": return 206 - case "meeting/conference_stream_url": + case "meeting/default_projector_current_los_ids": return 207 - case "meeting/custom_translations": + case "meeting/default_projector_list_of_speakers_ids": return 208 - case "meeting/default_group_id": + case "meeting/default_projector_mediafile_ids": return 209 - case "meeting/default_meeting_for_committee_id": + case "meeting/default_projector_message_ids": return 210 - case "meeting/default_projector_agenda_item_list_ids": + case "meeting/default_projector_motion_block_ids": return 211 - case "meeting/default_projector_amendment_ids": + case "meeting/default_projector_motion_ids": return 212 - case "meeting/default_projector_assignment_ids": + case "meeting/default_projector_motion_poll_ids": return 213 - case "meeting/default_projector_assignment_poll_ids": + case "meeting/default_projector_topic_ids": return 214 - case "meeting/default_projector_countdown_ids": + case "meeting/default_projector_topic_poll_ids": return 215 - case "meeting/default_projector_current_los_ids": + case "meeting/description": return 216 - case "meeting/default_projector_list_of_speakers_ids": + case "meeting/enable_anonymous": return 217 - case "meeting/default_projector_mediafile_ids": + case "meeting/end_time": return 218 - case "meeting/default_projector_message_ids": + case "meeting/export_csv_encoding": return 219 - case "meeting/default_projector_motion_block_ids": + case "meeting/export_csv_separator": return 220 - case "meeting/default_projector_motion_ids": + case "meeting/export_pdf_fontsize": return 221 - case "meeting/default_projector_motion_poll_ids": + case "meeting/export_pdf_line_height": return 222 - case "meeting/default_projector_poll_ids": + case "meeting/export_pdf_page_margin_bottom": return 223 - case "meeting/default_projector_topic_ids": + case "meeting/export_pdf_page_margin_left": return 224 - case "meeting/description": + case "meeting/export_pdf_page_margin_right": return 225 - case "meeting/enable_anonymous": + case "meeting/export_pdf_page_margin_top": return 226 - case "meeting/end_time": + case "meeting/export_pdf_pagenumber_alignment": return 227 - case "meeting/export_csv_encoding": + case "meeting/export_pdf_pagesize": return 228 - case "meeting/export_csv_separator": + case "meeting/external_id": return 229 - case "meeting/export_pdf_fontsize": + case "meeting/font_bold_id": return 230 - case "meeting/export_pdf_line_height": + case "meeting/font_bold_italic_id": return 231 - case "meeting/export_pdf_page_margin_bottom": + case "meeting/font_chyron_speaker_name_id": return 232 - case "meeting/export_pdf_page_margin_left": + case "meeting/font_italic_id": return 233 - case "meeting/export_pdf_page_margin_right": + case "meeting/font_monospace_id": return 234 - case "meeting/export_pdf_page_margin_top": + case "meeting/font_projector_h1_id": return 235 - case "meeting/export_pdf_pagenumber_alignment": + case "meeting/font_projector_h2_id": return 236 - case "meeting/export_pdf_pagesize": + case "meeting/font_regular_id": return 237 - case "meeting/external_id": + case "meeting/forwarded_motion_ids": return 238 - case "meeting/font_bold_id": + case "meeting/group_ids": return 239 - case "meeting/font_bold_italic_id": + case "meeting/id": return 240 - case "meeting/font_chyron_speaker_name_id": + case "meeting/imported_at": return 241 - case "meeting/font_italic_id": + case "meeting/is_active_in_organization_id": return 242 - case "meeting/font_monospace_id": + case "meeting/is_archived_in_organization_id": return 243 - case "meeting/font_projector_h1_id": + case "meeting/jitsi_domain": return 244 - case "meeting/font_projector_h2_id": + case "meeting/jitsi_room_name": return 245 - case "meeting/font_regular_id": + case "meeting/jitsi_room_password": return 246 - case "meeting/forwarded_motion_ids": + case "meeting/language": return 247 - case "meeting/group_ids": + case "meeting/list_of_speakers_allow_multiple_speakers": return 248 - case "meeting/id": + case "meeting/list_of_speakers_amount_last_on_projector": return 249 - case "meeting/imported_at": + case "meeting/list_of_speakers_amount_next_on_projector": return 250 - case "meeting/is_active_in_organization_id": + case "meeting/list_of_speakers_can_create_point_of_order_for_others": return 251 - case "meeting/is_archived_in_organization_id": + case "meeting/list_of_speakers_can_set_contribution_self": return 252 - case "meeting/jitsi_domain": + case "meeting/list_of_speakers_closing_disables_point_of_order": return 253 - case "meeting/jitsi_room_name": + case "meeting/list_of_speakers_countdown_id": return 254 - case "meeting/jitsi_room_password": + case "meeting/list_of_speakers_couple_countdown": return 255 - case "meeting/language": + case "meeting/list_of_speakers_default_structure_level_time": return 256 - case "meeting/list_of_speakers_allow_multiple_speakers": + case "meeting/list_of_speakers_enable_interposed_question": return 257 - case "meeting/list_of_speakers_amount_last_on_projector": + case "meeting/list_of_speakers_enable_point_of_order_categories": return 258 - case "meeting/list_of_speakers_amount_next_on_projector": + case "meeting/list_of_speakers_enable_point_of_order_speakers": return 259 - case "meeting/list_of_speakers_can_create_point_of_order_for_others": + case "meeting/list_of_speakers_enable_pro_contra_speech": return 260 - case "meeting/list_of_speakers_can_set_contribution_self": + case "meeting/list_of_speakers_hide_contribution_count": return 261 - case "meeting/list_of_speakers_closing_disables_point_of_order": + case "meeting/list_of_speakers_ids": return 262 - case "meeting/list_of_speakers_countdown_id": + case "meeting/list_of_speakers_initially_closed": return 263 - case "meeting/list_of_speakers_couple_countdown": + case "meeting/list_of_speakers_intervention_time": return 264 - case "meeting/list_of_speakers_default_structure_level_time": + case "meeting/list_of_speakers_present_users_only": return 265 - case "meeting/list_of_speakers_enable_interposed_question": + case "meeting/list_of_speakers_show_amount_of_speakers_on_slide": return 266 - case "meeting/list_of_speakers_enable_point_of_order_categories": + case "meeting/list_of_speakers_show_first_contribution": return 267 - case "meeting/list_of_speakers_enable_point_of_order_speakers": + case "meeting/list_of_speakers_speaker_note_for_everyone": return 268 - case "meeting/list_of_speakers_enable_pro_contra_speech": + case "meeting/location": return 269 - case "meeting/list_of_speakers_hide_contribution_count": + case "meeting/locked_from_inside": return 270 - case "meeting/list_of_speakers_ids": + case "meeting/logo_pdf_ballot_paper_id": return 271 - case "meeting/list_of_speakers_initially_closed": + case "meeting/logo_pdf_footer_l_id": return 272 - case "meeting/list_of_speakers_intervention_time": + case "meeting/logo_pdf_footer_r_id": return 273 - case "meeting/list_of_speakers_present_users_only": + case "meeting/logo_pdf_header_l_id": return 274 - case "meeting/list_of_speakers_show_amount_of_speakers_on_slide": + case "meeting/logo_pdf_header_r_id": return 275 - case "meeting/list_of_speakers_show_first_contribution": + case "meeting/logo_projector_header_id": return 276 - case "meeting/list_of_speakers_speaker_note_for_everyone": + case "meeting/logo_projector_main_id": return 277 - case "meeting/location": + case "meeting/logo_web_header_id": return 278 - case "meeting/locked_from_inside": + case "meeting/mediafile_ids": return 279 - case "meeting/logo_pdf_ballot_paper_id": + case "meeting/meeting_mediafile_ids": return 280 - case "meeting/logo_pdf_footer_l_id": + case "meeting/meeting_user_ids": return 281 - case "meeting/logo_pdf_footer_r_id": + case "meeting/motion_block_ids": return 282 - case "meeting/logo_pdf_header_l_id": + case "meeting/motion_category_ids": return 283 - case "meeting/logo_pdf_header_r_id": + case "meeting/motion_change_recommendation_ids": return 284 - case "meeting/logo_projector_header_id": + case "meeting/motion_comment_ids": return 285 - case "meeting/logo_projector_main_id": + case "meeting/motion_comment_section_ids": return 286 - case "meeting/logo_web_header_id": + case "meeting/motion_editor_ids": return 287 - case "meeting/mediafile_ids": + case "meeting/motion_ids": return 288 - case "meeting/meeting_mediafile_ids": + case "meeting/motion_poll_config_id": return 289 - case "meeting/meeting_user_ids": + case "meeting/motion_state_ids": return 290 - case "meeting/motion_block_ids": + case "meeting/motion_submitter_ids": return 291 - case "meeting/motion_category_ids": + case "meeting/motion_supporter_ids": return 292 - case "meeting/motion_change_recommendation_ids": + case "meeting/motion_workflow_ids": return 293 - case "meeting/motion_comment_ids": + case "meeting/motion_working_group_speaker_ids": return 294 - case "meeting/motion_comment_section_ids": + case "meeting/motions_amendments_enabled": return 295 - case "meeting/motion_editor_ids": + case "meeting/motions_amendments_in_main_list": return 296 - case "meeting/motion_ids": + case "meeting/motions_amendments_multiple_paragraphs": return 297 - case "meeting/motion_poll_ballot_paper_number": + case "meeting/motions_amendments_of_amendments": return 298 - case "meeting/motion_poll_ballot_paper_selection": + case "meeting/motions_amendments_prefix": return 299 - case "meeting/motion_poll_default_backend": + case "meeting/motions_amendments_text_mode": return 300 - case "meeting/motion_poll_default_group_ids": + case "meeting/motions_block_slide_columns": return 301 - case "meeting/motion_poll_default_method": + case "meeting/motions_create_enable_additional_submitter_text": return 302 - case "meeting/motion_poll_default_onehundred_percent_base": + case "meeting/motions_default_amendment_workflow_id": return 303 - case "meeting/motion_poll_default_type": + case "meeting/motions_default_line_numbering": return 304 - case "meeting/motion_poll_projection_max_columns": + case "meeting/motions_default_sorting": return 305 - case "meeting/motion_poll_projection_name_order_first": + case "meeting/motions_default_workflow_id": return 306 - case "meeting/motion_state_ids": + case "meeting/motions_enable_editor": return 307 - case "meeting/motion_submitter_ids": + case "meeting/motions_enable_origin_motion_display": return 308 - case "meeting/motion_supporter_ids": + case "meeting/motions_enable_reason_on_projector": return 309 - case "meeting/motion_workflow_ids": + case "meeting/motions_enable_recommendation_on_projector": return 310 - case "meeting/motion_working_group_speaker_ids": + case "meeting/motions_enable_restricted_editor_for_manager": return 311 - case "meeting/motions_amendments_enabled": + case "meeting/motions_enable_restricted_editor_for_non_manager": return 312 - case "meeting/motions_amendments_in_main_list": + case "meeting/motions_enable_sidebox_on_projector": return 313 - case "meeting/motions_amendments_multiple_paragraphs": + case "meeting/motions_enable_text_on_projector": return 314 - case "meeting/motions_amendments_of_amendments": + case "meeting/motions_enable_working_group_speaker": return 315 - case "meeting/motions_amendments_prefix": + case "meeting/motions_export_follow_recommendation": return 316 - case "meeting/motions_amendments_text_mode": + case "meeting/motions_export_preamble": return 317 - case "meeting/motions_block_slide_columns": + case "meeting/motions_export_submitter_recommendation": return 318 - case "meeting/motions_create_enable_additional_submitter_text": + case "meeting/motions_export_title": return 319 - case "meeting/motions_default_amendment_workflow_id": + case "meeting/motions_hide_metadata_background": return 320 - case "meeting/motions_default_line_numbering": + case "meeting/motions_line_length": return 321 - case "meeting/motions_default_sorting": + case "meeting/motions_number_min_digits": return 322 - case "meeting/motions_default_workflow_id": + case "meeting/motions_number_type": return 323 - case "meeting/motions_enable_editor": + case "meeting/motions_number_with_blank": return 324 - case "meeting/motions_enable_origin_motion_display": + case "meeting/motions_origin_motion_toggle_default": return 325 - case "meeting/motions_enable_reason_on_projector": + case "meeting/motions_preamble": return 326 - case "meeting/motions_enable_recommendation_on_projector": + case "meeting/motions_reason_required": return 327 - case "meeting/motions_enable_restricted_editor_for_manager": + case "meeting/motions_recommendation_text_mode": return 328 - case "meeting/motions_enable_restricted_editor_for_non_manager": + case "meeting/motions_recommendations_by": return 329 - case "meeting/motions_enable_sidebox_on_projector": + case "meeting/motions_show_referring_motions": return 330 - case "meeting/motions_enable_text_on_projector": + case "meeting/motions_show_sequential_number": return 331 - case "meeting/motions_enable_working_group_speaker": + case "meeting/motions_supporters_min_amount": return 332 - case "meeting/motions_export_follow_recommendation": + case "meeting/name": return 333 - case "meeting/motions_export_preamble": + case "meeting/organization_tag_ids": return 334 - case "meeting/motions_export_submitter_recommendation": + case "meeting/personal_note_ids": return 335 - case "meeting/motions_export_title": + case "meeting/point_of_order_category_ids": return 336 - case "meeting/motions_hide_metadata_background": + case "meeting/poll_countdown_id": return 337 - case "meeting/motions_line_length": + case "meeting/poll_couple_countdown": return 338 - case "meeting/motions_number_min_digits": + case "meeting/poll_default_allow_invalid": return 339 - case "meeting/motions_number_type": + case "meeting/poll_default_allow_vote_split": return 340 - case "meeting/motions_number_with_blank": + case "meeting/poll_default_ids": return 341 - case "meeting/motions_origin_motion_toggle_default": + case "meeting/poll_default_live_voting_enabled": return 342 - case "meeting/motions_preamble": + case "meeting/poll_enable_max_votes_per_option": return 343 - case "meeting/motions_reason_required": + case "meeting/poll_ids": return 344 - case "meeting/motions_recommendation_text_mode": + case "meeting/poll_projection_max_columns": return 345 - case "meeting/motions_recommendations_by": + case "meeting/poll_projection_name_order_first": return 346 - case "meeting/motions_show_referring_motions": + case "meeting/present_user_ids": return 347 - case "meeting/motions_show_sequential_number": + case "meeting/projection_ids": return 348 - case "meeting/motions_supporters_min_amount": + case "meeting/projector_countdown_default_time": return 349 - case "meeting/name": + case "meeting/projector_countdown_ids": return 350 - case "meeting/option_ids": + case "meeting/projector_countdown_warning_time": return 351 - case "meeting/organization_tag_ids": + case "meeting/projector_ids": return 352 - case "meeting/personal_note_ids": + case "meeting/projector_message_ids": return 353 - case "meeting/point_of_order_category_ids": + case "meeting/reference_projector_id": return 354 - case "meeting/poll_ballot_paper_number": + case "meeting/relevant_history_entry_ids": return 355 - case "meeting/poll_ballot_paper_selection": + case "meeting/speaker_ids": return 356 - case "meeting/poll_candidate_ids": + case "meeting/start_time": return 357 - case "meeting/poll_candidate_list_ids": + case "meeting/structure_level_ids": return 358 - case "meeting/poll_countdown_id": + case "meeting/structure_level_list_of_speakers_ids": return 359 - case "meeting/poll_couple_countdown": + case "meeting/tag_ids": return 360 - case "meeting/poll_default_backend": + case "meeting/template_for_organization_id": return 361 - case "meeting/poll_default_group_ids": + case "meeting/time_zone": return 362 - case "meeting/poll_default_live_voting_enabled": + case "meeting/topic_ids": return 363 - case "meeting/poll_default_method": + case "meeting/topic_poll_config_id": return 364 - case "meeting/poll_default_onehundred_percent_base": + case "meeting/topic_poll_default_method": return 365 - case "meeting/poll_default_type": + case "meeting/user_ids": return 366 - case "meeting/poll_ids": + case "meeting/users_allow_self_set_present": return 367 - case "meeting/poll_sort_poll_result_by_votes": + case "meeting/users_email_body": return 368 - case "meeting/present_user_ids": + case "meeting/users_email_replyto": return 369 - case "meeting/projection_ids": + case "meeting/users_email_sender": return 370 - case "meeting/projector_countdown_default_time": + case "meeting/users_email_subject": return 371 - case "meeting/projector_countdown_ids": + case "meeting/users_enable_presence_view": return 372 - case "meeting/projector_countdown_warning_time": + case "meeting/users_enable_vote_delegations": return 373 - case "meeting/projector_ids": + case "meeting/users_enable_vote_weight": return 374 - case "meeting/projector_message_ids": + case "meeting/users_forbid_delegator_as_submitter": return 375 - case "meeting/reference_projector_id": + case "meeting/users_forbid_delegator_as_supporter": return 376 - case "meeting/relevant_history_entry_ids": + case "meeting/users_forbid_delegator_in_list_of_speakers": return 377 - case "meeting/speaker_ids": + case "meeting/users_forbid_delegator_to_vote": return 378 - case "meeting/start_time": + case "meeting/users_pdf_welcometext": return 379 - case "meeting/structure_level_ids": + case "meeting/users_pdf_welcometitle": return 380 - case "meeting/structure_level_list_of_speakers_ids": + case "meeting/users_pdf_wlan_encryption": return 381 - case "meeting/tag_ids": + case "meeting/users_pdf_wlan_password": return 382 - case "meeting/template_for_organization_id": + case "meeting/users_pdf_wlan_ssid": return 383 - case "meeting/time_zone": + case "meeting/welcome_text": return 384 - case "meeting/topic_ids": + case "meeting/welcome_title": return 385 - case "meeting/topic_poll_default_group_ids": + case "meeting_mediafile/A": return 386 - case "meeting/user_ids": + case "meeting_mediafile/access_group_ids": return 387 - case "meeting/users_allow_self_set_present": + case "meeting_mediafile/attachment_ids": return 388 - case "meeting/users_email_body": + case "meeting_mediafile/id": return 389 - case "meeting/users_email_replyto": + case "meeting_mediafile/inherited_access_group_ids": return 390 - case "meeting/users_email_sender": + case "meeting_mediafile/is_public": return 391 - case "meeting/users_email_subject": + case "meeting_mediafile/list_of_speakers_id": return 392 - case "meeting/users_enable_presence_view": + case "meeting_mediafile/mediafile_id": return 393 - case "meeting/users_enable_vote_delegations": + case "meeting_mediafile/meeting_id": return 394 - case "meeting/users_enable_vote_weight": + case "meeting_mediafile/projection_ids": return 395 - case "meeting/users_forbid_delegator_as_submitter": + case "meeting_mediafile/used_as_font_bold_in_meeting_id": return 396 - case "meeting/users_forbid_delegator_as_supporter": + case "meeting_mediafile/used_as_font_bold_italic_in_meeting_id": return 397 - case "meeting/users_forbid_delegator_in_list_of_speakers": + case "meeting_mediafile/used_as_font_chyron_speaker_name_in_meeting_id": return 398 - case "meeting/users_forbid_delegator_to_vote": + case "meeting_mediafile/used_as_font_italic_in_meeting_id": return 399 - case "meeting/users_pdf_welcometext": + case "meeting_mediafile/used_as_font_monospace_in_meeting_id": return 400 - case "meeting/users_pdf_welcometitle": + case "meeting_mediafile/used_as_font_projector_h1_in_meeting_id": return 401 - case "meeting/users_pdf_wlan_encryption": + case "meeting_mediafile/used_as_font_projector_h2_in_meeting_id": return 402 - case "meeting/users_pdf_wlan_password": + case "meeting_mediafile/used_as_font_regular_in_meeting_id": return 403 - case "meeting/users_pdf_wlan_ssid": + case "meeting_mediafile/used_as_logo_pdf_ballot_paper_in_meeting_id": return 404 - case "meeting/vote_ids": + case "meeting_mediafile/used_as_logo_pdf_footer_l_in_meeting_id": return 405 - case "meeting/welcome_text": + case "meeting_mediafile/used_as_logo_pdf_footer_r_in_meeting_id": return 406 - case "meeting/welcome_title": + case "meeting_mediafile/used_as_logo_pdf_header_l_in_meeting_id": return 407 - case "meeting_mediafile/A": + case "meeting_mediafile/used_as_logo_pdf_header_r_in_meeting_id": return 408 - case "meeting_mediafile/access_group_ids": + case "meeting_mediafile/used_as_logo_projector_header_in_meeting_id": return 409 - case "meeting_mediafile/attachment_ids": + case "meeting_mediafile/used_as_logo_projector_main_in_meeting_id": return 410 - case "meeting_mediafile/id": + case "meeting_mediafile/used_as_logo_web_header_in_meeting_id": return 411 - case "meeting_mediafile/inherited_access_group_ids": + case "meeting_poll_default/A": return 412 - case "meeting_mediafile/is_public": + case "meeting_poll_default/allow_abstain": return 413 - case "meeting_mediafile/list_of_speakers_id": + case "meeting_poll_default/allow_nota": return 414 - case "meeting_mediafile/mediafile_id": + case "meeting_poll_default/display_chart": return 415 - case "meeting_mediafile/meeting_id": + case "meeting_poll_default/group_ids": return 416 - case "meeting_mediafile/projection_ids": + case "meeting_poll_default/id": return 417 - case "meeting_mediafile/used_as_font_bold_in_meeting_id": + case "meeting_poll_default/meeting_id": return 418 - case "meeting_mediafile/used_as_font_bold_italic_in_meeting_id": + case "meeting_poll_default/onehundred_percent_base": return 419 - case "meeting_mediafile/used_as_font_chyron_speaker_name_in_meeting_id": + case "meeting_poll_default/sort_result_by_votes": return 420 - case "meeting_mediafile/used_as_font_italic_in_meeting_id": + case "meeting_poll_default/strike_out": return 421 - case "meeting_mediafile/used_as_font_monospace_in_meeting_id": + case "meeting_poll_default/used_as_assignment_poll_config_in_meeting_id": return 422 - case "meeting_mediafile/used_as_font_projector_h1_in_meeting_id": + case "meeting_poll_default/used_as_motion_poll_config_in_meeting_id": return 423 - case "meeting_mediafile/used_as_font_projector_h2_in_meeting_id": + case "meeting_poll_default/used_as_topic_poll_config_in_meeting_id": return 424 - case "meeting_mediafile/used_as_font_regular_in_meeting_id": + case "meeting_poll_default/visibility": return 425 - case "meeting_mediafile/used_as_logo_pdf_ballot_paper_in_meeting_id": + case "meeting_user/A": return 426 - case "meeting_mediafile/used_as_logo_pdf_footer_l_in_meeting_id": + case "meeting_user/B": return 427 - case "meeting_mediafile/used_as_logo_pdf_footer_r_in_meeting_id": + case "meeting_user/C": return 428 - case "meeting_mediafile/used_as_logo_pdf_header_l_in_meeting_id": + case "meeting_user/D": return 429 - case "meeting_mediafile/used_as_logo_pdf_header_r_in_meeting_id": + case "meeting_user/E": return 430 - case "meeting_mediafile/used_as_logo_projector_header_in_meeting_id": + case "meeting_user/about_me": return 431 - case "meeting_mediafile/used_as_logo_projector_main_in_meeting_id": + case "meeting_user/acting_ballot_ids": return 432 - case "meeting_mediafile/used_as_logo_web_header_in_meeting_id": + case "meeting_user/assignment_candidate_ids": return 433 - case "meeting_user/A": + case "meeting_user/chat_message_ids": return 434 - case "meeting_user/B": + case "meeting_user/comment": return 435 - case "meeting_user/C": + case "meeting_user/group_ids": return 436 - case "meeting_user/D": + case "meeting_user/history_entry_ids": return 437 - case "meeting_user/E": + case "meeting_user/id": return 438 - case "meeting_user/about_me": + case "meeting_user/locked_out": return 439 - case "meeting_user/assignment_candidate_ids": + case "meeting_user/meeting_id": return 440 - case "meeting_user/chat_message_ids": + case "meeting_user/motion_editor_ids": return 441 - case "meeting_user/comment": + case "meeting_user/motion_submitter_ids": return 442 - case "meeting_user/group_ids": + case "meeting_user/motion_supporter_ids": return 443 - case "meeting_user/id": + case "meeting_user/motion_working_group_speaker_ids": return 444 - case "meeting_user/locked_out": + case "meeting_user/number": return 445 - case "meeting_user/meeting_id": + case "meeting_user/personal_note_ids": return 446 - case "meeting_user/motion_editor_ids": + case "meeting_user/poll_option_ids": return 447 - case "meeting_user/motion_submitter_ids": + case "meeting_user/represented_ballot_ids": return 448 - case "meeting_user/motion_supporter_ids": + case "meeting_user/speaker_ids": return 449 - case "meeting_user/motion_working_group_speaker_ids": + case "meeting_user/structure_level_ids": return 450 - case "meeting_user/number": + case "meeting_user/user_id": return 451 - case "meeting_user/personal_note_ids": + case "meeting_user/vote_delegated_to_id": return 452 - case "meeting_user/speaker_ids": + case "meeting_user/vote_delegations_from_ids": return 453 - case "meeting_user/structure_level_ids": + case "meeting_user/vote_weight": return 454 - case "meeting_user/user_id": + case "motion/A": return 455 - case "meeting_user/vote_delegated_to_id": + case "motion/B": return 456 - case "meeting_user/vote_delegations_from_ids": + case "motion/C": return 457 - case "meeting_user/vote_weight": + case "motion/D": return 458 - case "motion/A": + case "motion/E": return 459 - case "motion/B": + case "motion/additional_submitter": return 460 - case "motion/C": + case "motion/agenda_item_id": return 461 - case "motion/D": + case "motion/all_derived_motion_ids": return 462 - case "motion/E": + case "motion/all_origin_ids": return 463 - case "motion/additional_submitter": + case "motion/amendment_ids": return 464 - case "motion/agenda_item_id": + case "motion/amendment_paragraphs": return 465 - case "motion/all_derived_motion_ids": + case "motion/attachment_meeting_mediafile_ids": return 466 - case "motion/all_origin_ids": + case "motion/block_id": return 467 - case "motion/amendment_ids": + case "motion/category_id": return 468 - case "motion/amendment_paragraphs": + case "motion/category_weight": return 469 - case "motion/attachment_meeting_mediafile_ids": + case "motion/change_recommendation_ids": return 470 - case "motion/block_id": + case "motion/comment_ids": return 471 - case "motion/category_id": + case "motion/created": return 472 - case "motion/category_weight": + case "motion/derived_motion_ids": return 473 - case "motion/change_recommendation_ids": + case "motion/diff_version": return 474 - case "motion/comment_ids": + case "motion/editor_ids": return 475 - case "motion/created": + case "motion/forwarded": return 476 - case "motion/derived_motion_ids": + case "motion/history_entry_ids": return 477 - case "motion/diff_version": + case "motion/id": return 478 - case "motion/editor_ids": + case "motion/identical_motion_ids": return 479 - case "motion/forwarded": + case "motion/last_modified": return 480 - case "motion/history_entry_ids": + case "motion/lead_motion_id": return 481 - case "motion/id": + case "motion/list_of_speakers_id": return 482 - case "motion/identical_motion_ids": + case "motion/marked_forwarded": return 483 - case "motion/last_modified": + case "motion/meeting_id": return 484 - case "motion/lead_motion_id": + case "motion/modified_final_version": return 485 - case "motion/list_of_speakers_id": + case "motion/number": return 486 - case "motion/marked_forwarded": + case "motion/number_value": return 487 - case "motion/meeting_id": + case "motion/origin_id": return 488 - case "motion/modified_final_version": + case "motion/origin_meeting_id": return 489 - case "motion/number": + case "motion/personal_note_ids": return 490 - case "motion/number_value": + case "motion/poll_ids": return 491 - case "motion/option_ids": + case "motion/projection_ids": return 492 - case "motion/origin_id": + case "motion/reason": return 493 - case "motion/origin_meeting_id": + case "motion/recommendation_extension": return 494 - case "motion/personal_note_ids": + case "motion/recommendation_extension_reference_ids": return 495 - case "motion/poll_ids": + case "motion/recommendation_id": return 496 - case "motion/projection_ids": + case "motion/referenced_in_motion_recommendation_extension_ids": return 497 - case "motion/reason": + case "motion/referenced_in_motion_state_extension_ids": return 498 - case "motion/recommendation_extension": + case "motion/sequential_number": return 499 - case "motion/recommendation_extension_reference_ids": + case "motion/sort_child_ids": return 500 - case "motion/recommendation_id": + case "motion/sort_parent_id": return 501 - case "motion/referenced_in_motion_recommendation_extension_ids": + case "motion/sort_weight": return 502 - case "motion/referenced_in_motion_state_extension_ids": + case "motion/start_line_number": return 503 - case "motion/sequential_number": + case "motion/state_extension": return 504 - case "motion/sort_child_ids": + case "motion/state_extension_reference_ids": return 505 - case "motion/sort_parent_id": + case "motion/state_id": return 506 - case "motion/sort_weight": + case "motion/submitter_ids": return 507 - case "motion/start_line_number": + case "motion/supporter_ids": return 508 - case "motion/state_extension": + case "motion/tag_ids": return 509 - case "motion/state_extension_reference_ids": + case "motion/text": return 510 - case "motion/state_id": + case "motion/text_hash": return 511 - case "motion/submitter_ids": + case "motion/title": return 512 - case "motion/supporter_ids": + case "motion/workflow_timestamp": return 513 - case "motion/tag_ids": + case "motion/working_group_speaker_ids": return 514 - case "motion/text": + case "motion_block/A": return 515 - case "motion/text_hash": + case "motion_block/agenda_item_id": return 516 - case "motion/title": + case "motion_block/id": return 517 - case "motion/workflow_timestamp": + case "motion_block/internal": return 518 - case "motion/working_group_speaker_ids": + case "motion_block/list_of_speakers_id": return 519 - case "motion_block/A": + case "motion_block/meeting_id": return 520 - case "motion_block/agenda_item_id": + case "motion_block/motion_ids": return 521 - case "motion_block/id": + case "motion_block/projection_ids": return 522 - case "motion_block/internal": + case "motion_block/sequential_number": return 523 - case "motion_block/list_of_speakers_id": + case "motion_block/title": return 524 - case "motion_block/meeting_id": + case "motion_category/A": return 525 - case "motion_block/motion_ids": + case "motion_category/child_ids": return 526 - case "motion_block/projection_ids": + case "motion_category/id": return 527 - case "motion_block/sequential_number": + case "motion_category/level": return 528 - case "motion_block/title": + case "motion_category/meeting_id": return 529 - case "motion_category/A": + case "motion_category/motion_ids": return 530 - case "motion_category/child_ids": + case "motion_category/name": return 531 - case "motion_category/id": + case "motion_category/parent_id": return 532 - case "motion_category/level": + case "motion_category/prefix": return 533 - case "motion_category/meeting_id": + case "motion_category/sequential_number": return 534 - case "motion_category/motion_ids": + case "motion_category/weight": return 535 - case "motion_category/name": + case "motion_change_recommendation/A": return 536 - case "motion_category/parent_id": + case "motion_change_recommendation/creation_time": return 537 - case "motion_category/prefix": + case "motion_change_recommendation/id": return 538 - case "motion_category/sequential_number": + case "motion_change_recommendation/internal": return 539 - case "motion_category/weight": + case "motion_change_recommendation/line_from": return 540 - case "motion_change_recommendation/A": + case "motion_change_recommendation/line_to": return 541 - case "motion_change_recommendation/creation_time": + case "motion_change_recommendation/meeting_id": return 542 - case "motion_change_recommendation/id": + case "motion_change_recommendation/motion_id": return 543 - case "motion_change_recommendation/internal": + case "motion_change_recommendation/other_description": return 544 - case "motion_change_recommendation/line_from": + case "motion_change_recommendation/rejected": return 545 - case "motion_change_recommendation/line_to": + case "motion_change_recommendation/text": return 546 - case "motion_change_recommendation/meeting_id": + case "motion_change_recommendation/type": return 547 - case "motion_change_recommendation/motion_id": + case "motion_comment/A": return 548 - case "motion_change_recommendation/other_description": + case "motion_comment/comment": return 549 - case "motion_change_recommendation/rejected": + case "motion_comment/id": return 550 - case "motion_change_recommendation/text": + case "motion_comment/meeting_id": return 551 - case "motion_change_recommendation/type": + case "motion_comment/motion_id": return 552 - case "motion_comment/A": + case "motion_comment/section_id": return 553 - case "motion_comment/comment": + case "motion_comment_section/A": return 554 - case "motion_comment/id": + case "motion_comment_section/comment_ids": return 555 - case "motion_comment/meeting_id": + case "motion_comment_section/id": return 556 - case "motion_comment/motion_id": + case "motion_comment_section/meeting_id": return 557 - case "motion_comment/section_id": + case "motion_comment_section/name": return 558 - case "motion_comment_section/A": + case "motion_comment_section/read_group_ids": return 559 - case "motion_comment_section/comment_ids": + case "motion_comment_section/sequential_number": return 560 - case "motion_comment_section/id": + case "motion_comment_section/submitter_can_write": return 561 - case "motion_comment_section/meeting_id": + case "motion_comment_section/weight": return 562 - case "motion_comment_section/name": + case "motion_comment_section/write_group_ids": return 563 - case "motion_comment_section/read_group_ids": + case "motion_editor/A": return 564 - case "motion_comment_section/sequential_number": + case "motion_editor/id": return 565 - case "motion_comment_section/submitter_can_write": + case "motion_editor/meeting_id": return 566 - case "motion_comment_section/weight": + case "motion_editor/meeting_user_id": return 567 - case "motion_comment_section/write_group_ids": + case "motion_editor/motion_id": return 568 - case "motion_editor/A": + case "motion_editor/weight": return 569 - case "motion_editor/id": + case "motion_state/A": return 570 - case "motion_editor/meeting_id": + case "motion_state/allow_amendment_forwarding": return 571 - case "motion_editor/meeting_user_id": + case "motion_state/allow_create_poll": return 572 - case "motion_editor/motion_id": + case "motion_state/allow_motion_forwarding": return 573 - case "motion_editor/weight": + case "motion_state/allow_submitter_edit": return 574 - case "motion_state/A": + case "motion_state/allow_support": return 575 - case "motion_state/allow_amendment_forwarding": + case "motion_state/css_class": return 576 - case "motion_state/allow_create_poll": + case "motion_state/first_state_of_workflow_id": return 577 - case "motion_state/allow_motion_forwarding": + case "motion_state/id": return 578 - case "motion_state/allow_submitter_edit": + case "motion_state/is_internal": return 579 - case "motion_state/allow_support": + case "motion_state/meeting_id": return 580 - case "motion_state/css_class": + case "motion_state/merge_amendment_into_final": return 581 - case "motion_state/first_state_of_workflow_id": + case "motion_state/motion_ids": return 582 - case "motion_state/id": + case "motion_state/motion_recommendation_ids": return 583 - case "motion_state/is_internal": + case "motion_state/name": return 584 - case "motion_state/meeting_id": + case "motion_state/next_state_ids": return 585 - case "motion_state/merge_amendment_into_final": + case "motion_state/previous_state_ids": return 586 - case "motion_state/motion_ids": + case "motion_state/recommendation_label": return 587 - case "motion_state/motion_recommendation_ids": + case "motion_state/restrictions": return 588 - case "motion_state/name": + case "motion_state/set_number": return 589 - case "motion_state/next_state_ids": + case "motion_state/set_workflow_timestamp": return 590 - case "motion_state/previous_state_ids": + case "motion_state/show_recommendation_extension_field": return 591 - case "motion_state/recommendation_label": + case "motion_state/show_state_extension_field": return 592 - case "motion_state/restrictions": + case "motion_state/state_button_label": return 593 - case "motion_state/set_number": + case "motion_state/submitter_withdraw_back_ids": return 594 - case "motion_state/set_workflow_timestamp": + case "motion_state/submitter_withdraw_state_id": return 595 - case "motion_state/show_recommendation_extension_field": + case "motion_state/weight": return 596 - case "motion_state/show_state_extension_field": + case "motion_state/workflow_id": return 597 - case "motion_state/state_button_label": + case "motion_submitter/A": return 598 - case "motion_state/submitter_withdraw_back_ids": + case "motion_submitter/id": return 599 - case "motion_state/submitter_withdraw_state_id": + case "motion_submitter/meeting_id": return 600 - case "motion_state/weight": + case "motion_submitter/meeting_user_id": return 601 - case "motion_state/workflow_id": + case "motion_submitter/motion_id": return 602 - case "motion_submitter/A": + case "motion_submitter/weight": return 603 - case "motion_submitter/id": + case "motion_supporter/A": return 604 - case "motion_submitter/meeting_id": + case "motion_supporter/id": return 605 - case "motion_submitter/meeting_user_id": + case "motion_supporter/meeting_id": return 606 - case "motion_submitter/motion_id": + case "motion_supporter/meeting_user_id": return 607 - case "motion_submitter/weight": + case "motion_supporter/motion_id": return 608 - case "motion_supporter/A": + case "motion_workflow/A": return 609 - case "motion_supporter/id": + case "motion_workflow/default_amendment_workflow_meeting_id": return 610 - case "motion_supporter/meeting_id": + case "motion_workflow/default_workflow_meeting_id": return 611 - case "motion_supporter/meeting_user_id": + case "motion_workflow/first_state_id": return 612 - case "motion_supporter/motion_id": + case "motion_workflow/id": return 613 - case "motion_workflow/A": + case "motion_workflow/meeting_id": return 614 - case "motion_workflow/default_amendment_workflow_meeting_id": + case "motion_workflow/name": return 615 - case "motion_workflow/default_workflow_meeting_id": + case "motion_workflow/sequential_number": return 616 - case "motion_workflow/first_state_id": + case "motion_workflow/state_ids": return 617 - case "motion_workflow/id": + case "motion_working_group_speaker/A": return 618 - case "motion_workflow/meeting_id": + case "motion_working_group_speaker/id": return 619 - case "motion_workflow/name": + case "motion_working_group_speaker/meeting_id": return 620 - case "motion_workflow/sequential_number": + case "motion_working_group_speaker/meeting_user_id": return 621 - case "motion_workflow/state_ids": + case "motion_working_group_speaker/motion_id": return 622 - case "motion_working_group_speaker/A": + case "motion_working_group_speaker/weight": return 623 - case "motion_working_group_speaker/id": + case "organization/A": return 624 - case "motion_working_group_speaker/meeting_id": + case "organization/B": return 625 - case "motion_working_group_speaker/meeting_user_id": + case "organization/C": return 626 - case "motion_working_group_speaker/motion_id": + case "organization/D": return 627 - case "motion_working_group_speaker/weight": + case "organization/E": return 628 - case "option/A": + case "organization/active_meeting_ids": return 629 - case "option/B": + case "organization/archived_meeting_ids": return 630 - case "option/abstain": + case "organization/committee_ids": return 631 - case "option/content_object_id": + case "organization/default_language": return 632 - case "option/id": + case "organization/description": return 633 - case "option/meeting_id": + case "organization/disable_forward_with_attachments": return 634 - case "option/no": + case "organization/enable_anonymous": return 635 - case "option/poll_id": + case "organization/enable_chat": return 636 - case "option/text": + case "organization/enable_electronic_voting": return 637 - case "option/used_as_global_option_in_poll_id": + case "organization/gender_ids": return 638 - case "option/vote_ids": + case "organization/id": return 639 - case "option/weight": + case "organization/legal_notice": return 640 - case "option/yes": + case "organization/limit_of_meetings": return 641 - case "organization/A": + case "organization/limit_of_users": return 642 - case "organization/B": + case "organization/login_text": return 643 - case "organization/C": + case "organization/mediafile_ids": return 644 - case "organization/D": + case "organization/name": return 645 - case "organization/E": + case "organization/organization_tag_ids": return 646 - case "organization/active_meeting_ids": + case "organization/privacy_policy": return 647 - case "organization/archived_meeting_ids": + case "organization/published_mediafile_ids": return 648 - case "organization/committee_ids": + case "organization/require_duplicate_from": return 649 - case "organization/default_language": + case "organization/reset_password_verbose_errors": return 650 - case "organization/description": + case "organization/restrict_edit_forward_committees": return 651 - case "organization/disable_forward_with_attachments": + case "organization/restrict_editing_same_level_committee_admins": return 652 - case "organization/enable_anonymous": + case "organization/saml_attr_mapping": return 653 - case "organization/enable_chat": + case "organization/saml_enabled": return 654 - case "organization/enable_electronic_voting": + case "organization/saml_login_button_text": return 655 - case "organization/gender_ids": + case "organization/saml_metadata_idp": return 656 - case "organization/id": + case "organization/saml_metadata_sp": return 657 - case "organization/legal_notice": + case "organization/saml_private_key": return 658 - case "organization/limit_of_meetings": + case "organization/template_meeting_ids": return 659 - case "organization/limit_of_users": + case "organization/theme_id": return 660 - case "organization/login_text": + case "organization/theme_ids": return 661 - case "organization/mediafile_ids": + case "organization/time_zone": return 662 - case "organization/name": + case "organization/url": return 663 - case "organization/organization_tag_ids": + case "organization/user_ids": return 664 - case "organization/privacy_policy": + case "organization/users_email_body": return 665 - case "organization/published_mediafile_ids": + case "organization/users_email_replyto": return 666 - case "organization/require_duplicate_from": + case "organization/users_email_sender": return 667 - case "organization/reset_password_verbose_errors": + case "organization/users_email_subject": return 668 - case "organization/restrict_edit_forward_committees": + case "organization_tag/A": return 669 - case "organization/restrict_editing_same_level_committee_admins": + case "organization_tag/color": return 670 - case "organization/saml_attr_mapping": + case "organization_tag/id": return 671 - case "organization/saml_enabled": + case "organization_tag/name": return 672 - case "organization/saml_login_button_text": + case "organization_tag/organization_id": return 673 - case "organization/saml_metadata_idp": + case "organization_tag/tagged_ids": return 674 - case "organization/saml_metadata_sp": + case "personal_note/A": return 675 - case "organization/saml_private_key": + case "personal_note/content_object_id": return 676 - case "organization/template_meeting_ids": + case "personal_note/id": return 677 - case "organization/theme_id": + case "personal_note/meeting_id": return 678 - case "organization/theme_ids": + case "personal_note/meeting_user_id": return 679 - case "organization/time_zone": + case "personal_note/note": return 680 - case "organization/url": + case "personal_note/star": return 681 - case "organization/user_ids": + case "point_of_order_category/A": return 682 - case "organization/users_email_body": + case "point_of_order_category/id": return 683 - case "organization/users_email_replyto": + case "point_of_order_category/meeting_id": return 684 - case "organization/users_email_sender": + case "point_of_order_category/rank": return 685 - case "organization/users_email_subject": + case "point_of_order_category/speaker_ids": return 686 - case "organization_tag/A": + case "point_of_order_category/text": return 687 - case "organization_tag/color": + case "poll/A": return 688 - case "organization_tag/id": + case "poll/B": return 689 - case "organization_tag/name": + case "poll/allow_invalid": return 690 - case "organization_tag/organization_id": + case "poll/allow_vote_split": return 691 - case "organization_tag/tagged_ids": + case "poll/anonymized": return 692 - case "personal_note/A": + case "poll/ballot_ids": return 693 - case "personal_note/content_object_id": + case "poll/ballot_user_ids": return 694 - case "personal_note/id": + case "poll/config_id": return 695 - case "personal_note/meeting_id": + case "poll/content_object_id": return 696 - case "personal_note/meeting_user_id": + case "poll/entitled_group_ids": return 697 - case "personal_note/note": + case "poll/history_entry_ids": return 698 - case "personal_note/star": + case "poll/id": return 699 - case "point_of_order_category/A": + case "poll/live_voting_enabled": return 700 - case "point_of_order_category/id": + case "poll/meeting_id": return 701 - case "point_of_order_category/meeting_id": + case "poll/option_ids": return 702 - case "point_of_order_category/rank": + case "poll/projection_ids": return 703 - case "point_of_order_category/speaker_ids": + case "poll/published": return 704 - case "point_of_order_category/text": + case "poll/result": return 705 - case "poll/A": + case "poll/sequential_number": return 706 - case "poll/B": + case "poll/state": return 707 - case "poll/C": + case "poll/title": return 708 - case "poll/D": + case "poll/visibility": return 709 - case "poll/backend": + case "poll_ballot/A": return 710 - case "poll/content_object_id": + case "poll_ballot/id": return 711 - case "poll/description": + case "poll_ballot/poll_ballot_user_id": return 712 - case "poll/entitled_group_ids": + case "poll_ballot/poll_id": return 713 - case "poll/entitled_users_at_stop": + case "poll_ballot/split": return 714 - case "poll/global_abstain": + case "poll_ballot/value": return 715 - case "poll/global_no": + case "poll_ballot/weight": return 716 - case "poll/global_option_id": + case "poll_ballot_user/A": return 717 - case "poll/global_yes": + case "poll_ballot_user/acting_meeting_user_id": return 718 - case "poll/id": + case "poll_ballot_user/id": return 719 - case "poll/is_pseudoanonymized": + case "poll_ballot_user/poll_ballot_id": return 720 - case "poll/live_votes": + case "poll_ballot_user/poll_id": return 721 - case "poll/live_voting_enabled": + case "poll_ballot_user/represented_meeting_user_id": return 722 - case "poll/max_votes_amount": + case "poll_config_approval/A": return 723 - case "poll/max_votes_per_option": + case "poll_config_approval/allow_abstain": return 724 - case "poll/meeting_id": + case "poll_config_approval/id": return 725 - case "poll/min_votes_amount": + case "poll_config_approval/onehundred_percent_base": return 726 - case "poll/onehundred_percent_base": + case "poll_config_approval/poll_id": return 727 - case "poll/option_ids": + case "poll_config_rating_approval/A": return 728 - case "poll/pollmethod": + case "poll_config_rating_approval/allow_abstain": return 729 - case "poll/projection_ids": + case "poll_config_rating_approval/id": return 730 - case "poll/sequential_number": + case "poll_config_rating_approval/max_options_amount": return 731 - case "poll/state": + case "poll_config_rating_approval/max_yes_amount": return 732 - case "poll/title": + case "poll_config_rating_approval/min_options_amount": return 733 - case "poll/type": + case "poll_config_rating_approval/onehundred_percent_base": return 734 - case "poll/voted_ids": + case "poll_config_rating_approval/poll_id": return 735 - case "poll/votescast": + case "poll_config_rating_score/A": return 736 - case "poll/votesinvalid": + case "poll_config_rating_score/id": return 737 - case "poll/votesvalid": + case "poll_config_rating_score/max_options_amount": return 738 - case "poll_candidate/A": + case "poll_config_rating_score/max_vote_sum": return 739 - case "poll_candidate/id": + case "poll_config_rating_score/max_votes_per_option": return 740 - case "poll_candidate/meeting_id": + case "poll_config_rating_score/min_options_amount": return 741 - case "poll_candidate/poll_candidate_list_id": + case "poll_config_rating_score/min_vote_sum": return 742 - case "poll_candidate/user_id": + case "poll_config_rating_score/onehundred_percent_base": return 743 - case "poll_candidate/weight": + case "poll_config_rating_score/poll_id": return 744 - case "poll_candidate_list/A": + case "poll_config_selection/A": return 745 - case "poll_candidate_list/id": + case "poll_config_selection/allow_nota": return 746 - case "poll_candidate_list/meeting_id": + case "poll_config_selection/display_chart": return 747 - case "poll_candidate_list/option_id": + case "poll_config_selection/id": return 748 - case "poll_candidate_list/poll_candidate_ids": + case "poll_config_selection/max_options_amount": return 749 - case "projection/A": + case "poll_config_selection/min_options_amount": return 750 - case "projection/content": + case "poll_config_selection/onehundred_percent_base": return 751 - case "projection/content_object_id": + case "poll_config_selection/poll_id": return 752 - case "projection/current_projector_id": + case "poll_config_selection/strike_out": return 753 - case "projection/history_projector_id": + case "poll_config_stv_scottish/A": return 754 - case "projection/id": + case "poll_config_stv_scottish/id": return 755 - case "projection/meeting_id": + case "poll_config_stv_scottish/poll_id": return 756 - case "projection/options": + case "poll_config_stv_scottish/posts": return 757 - case "projection/preview_projector_id": + case "poll_option/A": return 758 - case "projection/stable": + case "poll_option/id": return 759 - case "projection/type": + case "poll_option/meeting_user_id": return 760 - case "projection/weight": + case "poll_option/poll_id": return 761 - case "projector/A": + case "poll_option/text": return 762 - case "projector/aspect_ratio_denominator": + case "poll_option/weight": return 763 - case "projector/aspect_ratio_numerator": + case "projection/A": return 764 - case "projector/background_color": + case "projection/content_object_id": return 765 - case "projector/chyron_background_color": + case "projection/current_projector_id": return 766 - case "projector/chyron_background_color_2": + case "projection/history_projector_id": return 767 - case "projector/chyron_font_color": + case "projection/id": return 768 - case "projector/chyron_font_color_2": + case "projection/meeting_id": return 769 - case "projector/color": + case "projection/options": return 770 - case "projector/current_projection_ids": + case "projection/preview_projector_id": return 771 - case "projector/header_background_color": + case "projection/stable": return 772 - case "projector/header_font_color": + case "projection/type": return 773 - case "projector/header_h1_color": + case "projection/weight": return 774 - case "projector/history_projection_ids": + case "projector/A": return 775 - case "projector/id": + case "projector/aspect_ratio_denominator": return 776 - case "projector/is_internal": + case "projector/aspect_ratio_numerator": return 777 - case "projector/meeting_id": + case "projector/background_color": return 778 - case "projector/name": + case "projector/chyron_background_color": return 779 - case "projector/preview_projection_ids": + case "projector/chyron_background_color_2": return 780 - case "projector/scale": + case "projector/chyron_font_color": return 781 - case "projector/scroll": + case "projector/chyron_font_color_2": return 782 - case "projector/sequential_number": + case "projector/color": return 783 - case "projector/show_clock": + case "projector/current_projection_ids": return 784 - case "projector/show_header_footer": + case "projector/header_background_color": return 785 - case "projector/show_logo": + case "projector/header_font_color": return 786 - case "projector/show_title": + case "projector/header_h1_color": return 787 - case "projector/used_as_default_projector_for_agenda_item_list_in_meeting_id": + case "projector/history_projection_ids": return 788 - case "projector/used_as_default_projector_for_amendment_in_meeting_id": + case "projector/id": return 789 - case "projector/used_as_default_projector_for_assignment_in_meeting_id": + case "projector/is_internal": return 790 - case "projector/used_as_default_projector_for_assignment_poll_in_meeting_id": + case "projector/meeting_id": return 791 - case "projector/used_as_default_projector_for_countdown_in_meeting_id": + case "projector/name": return 792 - case "projector/used_as_default_projector_for_current_los_in_meeting_id": + case "projector/preview_projection_ids": return 793 - case "projector/used_as_default_projector_for_list_of_speakers_in_meeting_id": + case "projector/scale": return 794 - case "projector/used_as_default_projector_for_mediafile_in_meeting_id": + case "projector/scroll": return 795 - case "projector/used_as_default_projector_for_message_in_meeting_id": + case "projector/sequential_number": return 796 - case "projector/used_as_default_projector_for_motion_block_in_meeting_id": + case "projector/show_clock": return 797 - case "projector/used_as_default_projector_for_motion_in_meeting_id": + case "projector/show_header_footer": return 798 - case "projector/used_as_default_projector_for_motion_poll_in_meeting_id": + case "projector/show_logo": return 799 - case "projector/used_as_default_projector_for_poll_in_meeting_id": + case "projector/show_title": return 800 - case "projector/used_as_default_projector_for_topic_in_meeting_id": + case "projector/used_as_default_projector_for_agenda_item_list_in_meeting_id": return 801 - case "projector/used_as_reference_projector_meeting_id": + case "projector/used_as_default_projector_for_amendment_in_meeting_id": return 802 - case "projector/width": + case "projector/used_as_default_projector_for_assignment_in_meeting_id": return 803 - case "projector_countdown/A": + case "projector/used_as_default_projector_for_assignment_poll_in_meeting_id": return 804 - case "projector_countdown/countdown_time": + case "projector/used_as_default_projector_for_countdown_in_meeting_id": return 805 - case "projector_countdown/default_time": + case "projector/used_as_default_projector_for_current_los_in_meeting_id": return 806 - case "projector_countdown/description": + case "projector/used_as_default_projector_for_list_of_speakers_in_meeting_id": return 807 - case "projector_countdown/id": + case "projector/used_as_default_projector_for_mediafile_in_meeting_id": return 808 - case "projector_countdown/meeting_id": + case "projector/used_as_default_projector_for_message_in_meeting_id": return 809 - case "projector_countdown/projection_ids": + case "projector/used_as_default_projector_for_motion_block_in_meeting_id": return 810 - case "projector_countdown/running": + case "projector/used_as_default_projector_for_motion_in_meeting_id": return 811 - case "projector_countdown/title": + case "projector/used_as_default_projector_for_motion_poll_in_meeting_id": return 812 - case "projector_countdown/used_as_list_of_speakers_countdown_meeting_id": + case "projector/used_as_default_projector_for_topic_in_meeting_id": return 813 - case "projector_countdown/used_as_poll_countdown_meeting_id": + case "projector/used_as_default_projector_for_topic_poll_in_meeting_id": return 814 - case "projector_message/A": + case "projector/used_as_reference_projector_meeting_id": return 815 - case "projector_message/id": + case "projector/width": return 816 - case "projector_message/meeting_id": + case "projector_countdown/A": return 817 - case "projector_message/message": + case "projector_countdown/countdown_time": return 818 - case "projector_message/projection_ids": + case "projector_countdown/default_time": return 819 - case "speaker/A": + case "projector_countdown/description": return 820 - case "speaker/answer": + case "projector_countdown/id": return 821 - case "speaker/begin_time": + case "projector_countdown/meeting_id": return 822 - case "speaker/end_time": + case "projector_countdown/projection_ids": return 823 - case "speaker/id": + case "projector_countdown/running": return 824 - case "speaker/list_of_speakers_id": + case "projector_countdown/title": return 825 - case "speaker/meeting_id": + case "projector_countdown/used_as_list_of_speakers_countdown_meeting_id": return 826 - case "speaker/meeting_user_id": + case "projector_countdown/used_as_poll_countdown_meeting_id": return 827 - case "speaker/note": + case "projector_message/A": return 828 - case "speaker/pause_time": + case "projector_message/id": return 829 - case "speaker/point_of_order": + case "projector_message/meeting_id": return 830 - case "speaker/point_of_order_category_id": + case "projector_message/message": return 831 - case "speaker/speech_state": + case "projector_message/projection_ids": return 832 - case "speaker/structure_level_list_of_speakers_id": + case "speaker/A": return 833 - case "speaker/total_pause": + case "speaker/answer": return 834 - case "speaker/unpause_time": + case "speaker/begin_time": return 835 - case "speaker/weight": + case "speaker/end_time": return 836 - case "structure_level/A": + case "speaker/id": return 837 - case "structure_level/color": + case "speaker/list_of_speakers_id": return 838 - case "structure_level/default_time": + case "speaker/meeting_id": return 839 - case "structure_level/id": + case "speaker/meeting_user_id": return 840 - case "structure_level/meeting_id": + case "speaker/note": return 841 - case "structure_level/meeting_user_ids": + case "speaker/pause_time": return 842 - case "structure_level/name": + case "speaker/point_of_order": return 843 - case "structure_level/structure_level_list_of_speakers_ids": + case "speaker/point_of_order_category_id": return 844 - case "structure_level_list_of_speakers/A": + case "speaker/speech_state": return 845 - case "structure_level_list_of_speakers/additional_time": + case "speaker/structure_level_list_of_speakers_id": return 846 - case "structure_level_list_of_speakers/current_start_time": + case "speaker/total_pause": return 847 - case "structure_level_list_of_speakers/id": + case "speaker/unpause_time": return 848 - case "structure_level_list_of_speakers/initial_time": + case "speaker/weight": return 849 - case "structure_level_list_of_speakers/list_of_speakers_id": + case "structure_level/A": return 850 - case "structure_level_list_of_speakers/meeting_id": + case "structure_level/color": return 851 - case "structure_level_list_of_speakers/remaining_time": + case "structure_level/default_time": return 852 - case "structure_level_list_of_speakers/speaker_ids": + case "structure_level/id": return 853 - case "structure_level_list_of_speakers/structure_level_id": + case "structure_level/meeting_id": return 854 - case "tag/A": + case "structure_level/meeting_user_ids": return 855 - case "tag/id": + case "structure_level/name": return 856 - case "tag/meeting_id": + case "structure_level/structure_level_list_of_speakers_ids": return 857 - case "tag/name": + case "structure_level_list_of_speakers/A": return 858 - case "tag/tagged_ids": + case "structure_level_list_of_speakers/additional_time": return 859 - case "theme/A": + case "structure_level_list_of_speakers/current_start_time": return 860 - case "theme/abstain": + case "structure_level_list_of_speakers/id": return 861 - case "theme/accent_100": + case "structure_level_list_of_speakers/initial_time": return 862 - case "theme/accent_200": + case "structure_level_list_of_speakers/list_of_speakers_id": return 863 - case "theme/accent_300": + case "structure_level_list_of_speakers/meeting_id": return 864 - case "theme/accent_400": + case "structure_level_list_of_speakers/remaining_time": return 865 - case "theme/accent_50": + case "structure_level_list_of_speakers/speaker_ids": return 866 - case "theme/accent_500": + case "structure_level_list_of_speakers/structure_level_id": return 867 - case "theme/accent_600": + case "tag/A": return 868 - case "theme/accent_700": + case "tag/id": return 869 - case "theme/accent_800": + case "tag/meeting_id": return 870 - case "theme/accent_900": + case "tag/name": return 871 - case "theme/accent_a100": + case "tag/tagged_ids": return 872 - case "theme/accent_a200": + case "theme/A": return 873 - case "theme/accent_a400": + case "theme/abstain": return 874 - case "theme/accent_a700": + case "theme/accent_100": return 875 - case "theme/headbar": + case "theme/accent_200": return 876 - case "theme/id": + case "theme/accent_300": return 877 - case "theme/name": + case "theme/accent_400": return 878 - case "theme/no": + case "theme/accent_50": return 879 - case "theme/organization_id": + case "theme/accent_500": return 880 - case "theme/primary_100": + case "theme/accent_600": return 881 - case "theme/primary_200": + case "theme/accent_700": return 882 - case "theme/primary_300": + case "theme/accent_800": return 883 - case "theme/primary_400": + case "theme/accent_900": return 884 - case "theme/primary_50": + case "theme/accent_a100": return 885 - case "theme/primary_500": + case "theme/accent_a200": return 886 - case "theme/primary_600": + case "theme/accent_a400": return 887 - case "theme/primary_700": + case "theme/accent_a700": return 888 - case "theme/primary_800": + case "theme/headbar": return 889 - case "theme/primary_900": + case "theme/id": return 890 - case "theme/primary_a100": + case "theme/name": return 891 - case "theme/primary_a200": + case "theme/no": return 892 - case "theme/primary_a400": + case "theme/organization_id": return 893 - case "theme/primary_a700": + case "theme/primary_100": return 894 - case "theme/theme_for_organization_id": + case "theme/primary_200": return 895 - case "theme/warn_100": + case "theme/primary_300": return 896 - case "theme/warn_200": + case "theme/primary_400": return 897 - case "theme/warn_300": + case "theme/primary_50": return 898 - case "theme/warn_400": + case "theme/primary_500": return 899 - case "theme/warn_50": + case "theme/primary_600": return 900 - case "theme/warn_500": + case "theme/primary_700": return 901 - case "theme/warn_600": + case "theme/primary_800": return 902 - case "theme/warn_700": + case "theme/primary_900": return 903 - case "theme/warn_800": + case "theme/primary_a100": return 904 - case "theme/warn_900": + case "theme/primary_a200": return 905 - case "theme/warn_a100": + case "theme/primary_a400": return 906 - case "theme/warn_a200": + case "theme/primary_a700": return 907 - case "theme/warn_a400": + case "theme/theme_for_organization_id": return 908 - case "theme/warn_a700": + case "theme/warn_100": return 909 - case "theme/yes": + case "theme/warn_200": return 910 - case "topic/A": + case "theme/warn_300": return 911 - case "topic/agenda_item_id": + case "theme/warn_400": return 912 - case "topic/attachment_meeting_mediafile_ids": + case "theme/warn_50": return 913 - case "topic/id": + case "theme/warn_500": return 914 - case "topic/list_of_speakers_id": + case "theme/warn_600": return 915 - case "topic/meeting_id": + case "theme/warn_700": return 916 - case "topic/poll_ids": + case "theme/warn_800": return 917 - case "topic/projection_ids": + case "theme/warn_900": return 918 - case "topic/sequential_number": + case "theme/warn_a100": return 919 - case "topic/text": + case "theme/warn_a200": return 920 - case "topic/title": + case "theme/warn_a400": return 921 - case "user/A": + case "theme/warn_a700": return 922 - case "user/B": + case "theme/yes": return 923 - case "user/D": + case "topic/A": return 924 - case "user/E": + case "topic/agenda_item_id": return 925 - case "user/F": + case "topic/attachment_meeting_mediafile_ids": return 926 - case "user/G": + case "topic/id": return 927 - case "user/H": + case "topic/list_of_speakers_id": return 928 - case "user/can_change_own_password": + case "topic/meeting_id": return 929 - case "user/committee_ids": + case "topic/poll_ids": return 930 - case "user/committee_management_ids": + case "topic/projection_ids": return 931 - case "user/default_password": + case "topic/sequential_number": return 932 - case "user/default_vote_weight": + case "topic/text": return 933 - case "user/delegated_vote_ids": + case "topic/title": return 934 - case "user/email": + case "user/A": return 935 - case "user/external": + case "user/B": return 936 - case "user/first_name": + case "user/D": return 937 - case "user/gender_id": + case "user/E": return 938 - case "user/history_entry_ids": + case "user/F": return 939 - case "user/history_position_ids": + case "user/G": return 940 - case "user/home_committee_id": + case "user/H": return 941 - case "user/id": + case "user/can_change_own_password": return 942 - case "user/is_active": + case "user/committee_ids": return 943 - case "user/is_demo_user": + case "user/committee_management_ids": return 944 - case "user/is_physical_person": + case "user/default_password": return 945 - case "user/is_present_in_meeting_ids": + case "user/default_vote_weight": return 946 - case "user/last_email_sent": + case "user/email": return 947 - case "user/last_login": + case "user/external": return 948 - case "user/last_name": + case "user/first_name": return 949 - case "user/meeting_ids": + case "user/gender_id": return 950 - case "user/meeting_user_ids": + case "user/history_entry_ids": return 951 - case "user/member_number": + case "user/history_position_ids": return 952 - case "user/option_ids": + case "user/home_committee_id": return 953 - case "user/organization_id": + case "user/id": return 954 - case "user/organization_management_level": + case "user/is_active": return 955 - case "user/password": + case "user/is_demo_user": return 956 - case "user/poll_candidate_ids": + case "user/is_physical_person": return 957 - case "user/poll_voted_ids": + case "user/is_present_in_meeting_ids": return 958 - case "user/pronoun": + case "user/last_email_sent": return 959 - case "user/saml_id": + case "user/last_login": return 960 - case "user/title": + case "user/last_name": return 961 - case "user/username": + case "user/meeting_ids": return 962 - case "user/vote_ids": + case "user/meeting_user_ids": return 963 - case "vote/A": + case "user/member_number": return 964 - case "vote/B": + case "user/organization_id": return 965 - case "vote/delegated_user_id": + case "user/organization_management_level": return 966 - case "vote/id": + case "user/password": return 967 - case "vote/meeting_id": + case "user/pronoun": return 968 - case "vote/option_id": + case "user/saml_id": return 969 - case "vote/user_id": + case "user/title": return 970 - case "vote/user_token": + case "user/username": return 971 - case "vote/value": - return 972 - case "vote/weight": - return 973 default: return -1 } diff --git a/datastore/dsmodels/builder.go b/datastore/dsmodels/builder.go index 48904659e..da65f24a0 100644 --- a/datastore/dsmodels/builder.go +++ b/datastore/dsmodels/builder.go @@ -9,6 +9,7 @@ import ( type builderWrapperI interface { SetIds(ids []int) + SetFqids(fqids []string) setChild(builder builderWrapperI) builderWrapperI getParent() builderWrapperI getIDField() string @@ -19,13 +20,14 @@ type builderWrapperI interface { lazyAll(ctx context.Context) []any } -type builderPtr[T any, M any] interface { - lazy(ds *Fetch, id int) *M +type builderPtr[T any, M any, R any] interface { + lazy(ds *Fetch, id any) R *T } -type builder[C any, T builderPtr[C, M], M any] struct { +type builder[C any, T builderPtr[C, M, R], M any, R any] struct { ids []int + fqids []string value T parent builderWrapperI children map[string]builderWrapperI @@ -33,13 +35,19 @@ type builder[C any, T builderPtr[C, M], M any] struct { relField string many bool fetch *Fetch + + conv func(R) M } -func (b *builder[C, T, M]) SetIds(ids []int) { +func (b *builder[C, T, M, R]) SetIds(ids []int) { b.ids = ids } -func (b *builder[C, T, M]) setChild(builder builderWrapperI) builderWrapperI { +func (b *builder[C, T, M, R]) SetFqids(fqids []string) { + b.fqids = fqids +} + +func (b *builder[C, T, M, R]) setChild(builder builderWrapperI) builderWrapperI { if b.children == nil { b.children = map[string]builderWrapperI{} } @@ -51,31 +59,36 @@ func (b *builder[C, T, M]) setChild(builder builderWrapperI) builderWrapperI { return b.children[builder.getRelField()] } -func (b *builder[C, T, M]) getRelField() string { +func (b *builder[C, T, M, R]) getRelField() string { return b.relField } -func (b *builder[C, T, M]) getIDField() string { +func (b *builder[C, T, M, R]) getIDField() string { return b.idField } -func (b *builder[C, T, M]) getMany() bool { +func (b *builder[C, T, M, R]) getMany() bool { return b.many } -func (b *builder[C, T, M]) getParent() builderWrapperI { +func (b *builder[C, T, M, R]) getParent() builderWrapperI { return b.parent } -func (b *builder[C, T, M]) lazyAll(ctx context.Context) []any { +func (b *builder[C, T, M, R]) lazyAll(ctx context.Context) []any { items := []any{} for _, id := range b.ids { items = append(items, b.value.lazy(b.fetch, id)) } + + for _, id := range b.fqids { + items = append(items, b.value.lazy(b.fetch, id)) + } + return items } -func (b *builder[C, T, M]) Preload(rel builderWrapperI) { +func (b *builder[C, T, M, R]) Preload(rel builderWrapperI) { children := []builderWrapperI{} for rel != b && rel != nil && rel.getRelField() != "" { children = append([]builderWrapperI{rel}, children...) @@ -89,12 +102,15 @@ func (b *builder[C, T, M]) Preload(rel builderWrapperI) { } } -func getRelationIds(idField reflect.Value, targetField reflect.Value, many bool) []int { +func getRelationIds(idField reflect.Value, targetField reflect.Value, many bool) ([]int, []string) { ids := []int{} + fqids := []string{} if many { ids = idField.Interface().([]int) } else if idField.Kind() == reflect.Int { ids = append(ids, int(idField.Int())) + } else if idField.Kind() == reflect.String { + fqids = append(fqids, string(idField.String())) } else if idField.Type().Name() == "Maybe[int]" { relMaybeType := targetField.Type().Elem() relValue := reflect.New(relMaybeType) @@ -107,7 +123,7 @@ func getRelationIds(idField reflect.Value, targetField reflect.Value, many bool) } } - return ids + return ids, fqids } func setRelationField(idField reflect.Value, targetField reflect.Value, item any, many bool) { @@ -127,15 +143,16 @@ type childInfo struct { targetField reflect.Value } -func (b *builder[C, T, M]) prepareChildren(ctx context.Context, parents ...any) []childInfo { +func (b *builder[C, T, M, R]) prepareChildren(ctx context.Context, parents ...any) []childInfo { childInfos := make([]childInfo, 0, len(b.children)) for _, parent := range parents { rParent := reflect.ValueOf(parent).Elem() for _, child := range b.children { idField := rParent.FieldByName(child.getIDField()) targetField := rParent.FieldByName(child.getRelField()) - ids := getRelationIds(idField, targetField, child.getMany()) + ids, fqids := getRelationIds(idField, targetField, child.getMany()) child.SetIds(ids) + child.SetFqids(fqids) items := child.lazyAll(ctx) childInfos = append(childInfos, childInfo{ child: child, @@ -196,7 +213,7 @@ func bulkLoadChildren(ctx context.Context, fetch *Fetch, requests []loadRequest) return nil } -func (b *builder[C, T, M]) loadChildren(ctx context.Context, parents ...any) error { +func (b *builder[C, T, M, R]) loadChildren(ctx context.Context, parents ...any) error { if b.children == nil { return nil } @@ -207,7 +224,7 @@ func (b *builder[C, T, M]) loadChildren(ctx context.Context, parents ...any) err }}) } -func (b *builder[C, T, M]) First(ctx context.Context) (M, error) { +func (b *builder[C, T, M, R]) First(ctx context.Context) (M, error) { c := b.value.lazy(b.fetch, b.ids[0]) if err := b.fetch.Execute(ctx); err != nil { @@ -220,11 +237,11 @@ func (b *builder[C, T, M]) First(ctx context.Context) (M, error) { return zero, err } - return *c, nil + return b.conv(c), nil } -func (b *builder[C, T, M]) Get(ctx context.Context) ([]M, error) { - itemPtrs := make([]*M, len(b.ids)) +func (b *builder[C, T, M, R]) Get(ctx context.Context) ([]M, error) { + itemPtrs := make([]R, len(b.ids)) for i, id := range b.ids { itemPtrs[i] = b.value.lazy(b.fetch, id) } @@ -238,7 +255,7 @@ func (b *builder[C, T, M]) Get(ctx context.Context) ([]M, error) { if err := b.loadChildren(ctx, el); err != nil { return []M{}, err } - items[i] = *el + items[i] = b.conv(el) } return items, nil diff --git a/datastore/dsmodels/fetch_test.go b/datastore/dsmodels/fetch_test.go index 719f4734a..a211d2932 100644 --- a/datastore/dsmodels/fetch_test.go +++ b/datastore/dsmodels/fetch_test.go @@ -1,6 +1,7 @@ package dsmodels_test import ( + "reflect" "testing" "github.com/OpenSlides/openslides-go/datastore/dsmock" @@ -246,3 +247,35 @@ func TestRequestSinglePreloadMulti(t *testing.T) { t.Errorf("res.ListOfSpeakers.ContentObjectID = %s, expected topic/1", res.ListOfSpeakers.ContentObjectID) } } + +func TestPolymorphicPreload(t *testing.T) { + ds := dsmodels.New(dsmock.Stub(dsmock.YAMLData(`--- + topic/1: + sequential_number: 1 + title: foo + meeting_id: 1 + agenda_item_id: 1 + list_of_speakers_id: 1 + agenda_item/1/content_object_id: topic/1 + agenda_item/1/meeting_id: 1 + list_of_speakers/1: + sequential_number: 1 + content_object_id: topic/1 + meeting_id: 1 + `))) + + tQ := ds.AgendaItem(1) + res, err := tQ.Preload(tQ.ContentObject()).First(t.Context()) + if err != nil { + t.Errorf("Topic 1 with agenda item returned unexpected error: %v", err) + } + + topic, isTopic := res.ContentObject.(*dsmodels.Topic) + if !isTopic { + t.Errorf("type of res.ContentObject = %s, expected *dsmodels.Topic", reflect.TypeOf(res.ContentObject)) + } + + if topic.Title != "foo" { + t.Errorf("res.ContentObject.Title = %s, expected 'foo'", topic.Title) + } +} diff --git a/datastore/dsmodels/gen_models/collection.go.tmpl b/datastore/dsmodels/gen_models/collection.go.tmpl index fe1d8e81e..30a16ffe0 100644 --- a/datastore/dsmodels/gen_models/collection.go.tmpl +++ b/datastore/dsmodels/gen_models/collection.go.tmpl @@ -9,10 +9,11 @@ type {{.GoName}} struct{ } type {{.GoNameLc}}Builder struct{ - builder[{{.GoNameLc}}Builder, *{{.GoNameLc}}Builder, {{.GoName}}] + builder[{{.GoNameLc}}Builder, *{{.GoNameLc}}Builder, {{.GoName}}, *{{.GoName}}] } -func (b *{{.GoNameLc}}Builder)lazy(ds *Fetch, id int) *{{.GoName}} { +func (b *{{.GoNameLc}}Builder)lazy(ds *Fetch, idI any) *{{.GoName}} { + id := idI.(int) c := {{.GoName}}{} {{- range .Fields}} ds.{{.FetchName}}(id).Lazy(&c.{{.Name}}) @@ -25,27 +26,87 @@ func (b *{{.GoNameLc}}Builder) Preload(rel builderWrapperI) *{{.GoNameLc}}Builde return b } -{{ range .Relations}} -func (b *{{$.GoNameLc}}Builder) {{.MethodName}}() *{{.TypeLc}}Builder { - return &{{.TypeLc}}Builder{ - builder: builder[{{.TypeLc}}Builder, *{{.TypeLc}}Builder, {{.Type}}]{ - fetch: b.fetch, - parent: b, - idField: "{{.FieldName}}", - relField: "{{.MethodName}}", - {{- if .IsList}} - many: true, - {{- end}} - }, +{{ range .Relations }} + func (b *{{$.GoNameLc}}Builder) {{.MethodName}}() *{{.TypeLc}}Builder { + return &{{.TypeLc}}Builder{ + builder: builder[{{.TypeLc}}Builder, *{{.TypeLc}}Builder, {{.Type}}, {{ if not .IsGeneric }}*{{ end }}{{.Type}}]{ + fetch: b.fetch, + parent: b, + idField: "{{.FieldName}}", + relField: "{{.MethodName}}", + {{- if .IsList}} + many: true, + {{- end}} + {{- if .IsGeneric }} + conv: func(u {{.Type}}) {{.Type}} { return u }, + {{- else }} + conv: func(p *{{.Type}}) {{.Type}} { return *p }, + {{- end }} + }, + } } -} -{{end}} + + {{ if .IsGeneric }} + type {{ .Type }} interface { + is{{ .Type }}() + } + + {{ $type := .Type }} + {{ range $index, $element := .GenericTypes }} + func (*{{ $element }}) is{{ $type }}() {}{{ end }} + + type {{.TypeLc}}Builder struct { + builder[{{.TypeLc}}Builder, *{{.TypeLc}}Builder, {{.Type}}, {{.Type}}] + } + + func (b *{{.TypeLc}}Builder) lazy(ds *Fetch, id any) {{.Type}} { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + {{- $genericTypesLc := .GenericTypesLc }} + {{- $genericTypesCc := .GenericTypesCc }} + {{- range $i, $gType := .GenericTypes }} + case "{{ index $genericTypesCc $i }}": + {{- $typeLc := index $genericTypesLc $i }} + builder := &{{$typeLc}}Builder{ + builder: builder[{{$typeLc}}Builder, *{{$typeLc}}Builder, {{$gType}}, *{{$gType}}]{ + fetch: ds, + conv: func(p *{{$gType}}) {{$gType}} { return *p }, + }, + } + return builder.lazy(ds, intId) + {{- end }} + } + + return nil + } + + func (b *{{.TypeLc}}Builder) Preload(rel builderWrapperI) *{{.TypeLc}}Builder { + b.builder.Preload(rel) + return b + } + {{ end }} +{{ end }} func (r *Fetch){{.GoName}}(ids... int) *{{.GoNameLc}}Builder { return &{{.GoNameLc}}Builder{ - builder: builder[{{.GoNameLc}}Builder, *{{.GoNameLc}}Builder, {{.GoName}}]{ + builder: builder[{{.GoNameLc}}Builder, *{{.GoNameLc}}Builder, {{.GoName}}, *{{.GoName}}]{ ids: ids, fetch: r, + conv: func(p *{{.GoName}}) {{.GoName}} { return *p }, }, } } diff --git a/datastore/dsmodels/gen_models/header.go.tmpl b/datastore/dsmodels/gen_models/header.go.tmpl index 66249453a..341b33771 100644 --- a/datastore/dsmodels/gen_models/header.go.tmpl +++ b/datastore/dsmodels/gen_models/header.go.tmpl @@ -3,6 +3,9 @@ package dsmodels import ( "encoding/json" + "strconv" + "strings" + "github.com/OpenSlides/openslides-go/datastore/dsfetch" "github.com/shopspring/decimal" ) diff --git a/datastore/dsmodels/gen_models/main.go b/datastore/dsmodels/gen_models/main.go index 81429c325..bcdc9252e 100644 --- a/datastore/dsmodels/gen_models/main.go +++ b/datastore/dsmodels/gen_models/main.go @@ -178,9 +178,13 @@ type CollectionField struct { // CollectionRelation is one Relation, needed for method generation. type CollectionRelation struct { ResultType string + IsGeneric bool IsList bool Type string TypeLc string + GenericTypes []string + GenericTypesLc []string + GenericTypesCc []string FieldName string MethodName string StructFieldName string @@ -212,20 +216,38 @@ func toCollections(raw map[string]collection.Collection) []Collection { continue } - if strings.Contains(collectionField.Type, "generic") { - // TODO: Add generic - //fmt.Println(collectionName, fieldName) - continue - } + isGeneric := strings.Contains(collectionField.Type, "generic") + genericTypes := []string{} + genericTypesLc := []string{} + genericTypesCc := []string{} + var resultType string toType := goName(relation.ToCollections()[0].Collection) + if isGeneric { + toType = fmt.Sprintf("%s%sUnion", colGoName, withoutID(goName(fieldName))) + for _, col := range relation.ToCollections() { + colName := goName(col.Collection) + genericTypes = append(genericTypes, colName) + genericTypesLc = append(genericTypesLc, string(colName[0]+32)+string(colName[1:])) + genericTypesCc = append(genericTypesCc, col.Collection) + } + } + toTypeLc := string(toType[0]+32) + string(toType[1:]) - resultType := fmt.Sprintf("*%s", toType) + resultType = fmt.Sprintf("*%s", toType) if !relation.List() && !collectionField.Required { resultType = fmt.Sprintf("*dsfetch.Maybe[%s]", toType) } + if isGeneric { + resultType = fmt.Sprintf("%s", toType) + } if relation.List() { + if isGeneric { + // TODO: Generic lists are currently skipped + continue + } + resultType = fmt.Sprintf("[]%s", toType) } @@ -236,12 +258,16 @@ func toCollections(raw map[string]collection.Collection) []Collection { col.Relations, CollectionRelation{ ResultType: resultType, + IsGeneric: isGeneric, IsList: relation.List(), FieldName: goName(fieldName), MethodName: methodName, StructFieldName: structFieldName, Type: toType, TypeLc: toTypeLc, + GenericTypes: genericTypes, + GenericTypesLc: genericTypesLc, + GenericTypesCc: genericTypesCc, Required: collectionField.Required, }, ) diff --git a/datastore/dsmodels/models_generated.go b/datastore/dsmodels/models_generated.go index c99715676..5b2dcabf0 100644 --- a/datastore/dsmodels/models_generated.go +++ b/datastore/dsmodels/models_generated.go @@ -3,6 +3,9 @@ package dsmodels import ( "encoding/json" + "strconv" + "strings" + "github.com/OpenSlides/openslides-go/datastore/dsfetch" "github.com/shopspring/decimal" ) @@ -19,10 +22,11 @@ type ActionWorker struct { } type actionWorkerBuilder struct { - builder[actionWorkerBuilder, *actionWorkerBuilder, ActionWorker] + builder[actionWorkerBuilder, *actionWorkerBuilder, ActionWorker, *ActionWorker] } -func (b *actionWorkerBuilder) lazy(ds *Fetch, id int) *ActionWorker { +func (b *actionWorkerBuilder) lazy(ds *Fetch, idI any) *ActionWorker { + id := idI.(int) c := ActionWorker{} ds.ActionWorker_Created(id).Lazy(&c.Created) ds.ActionWorker_ID(id).Lazy(&c.ID) @@ -41,9 +45,10 @@ func (b *actionWorkerBuilder) Preload(rel builderWrapperI) *actionWorkerBuilder func (r *Fetch) ActionWorker(ids ...int) *actionWorkerBuilder { return &actionWorkerBuilder{ - builder: builder[actionWorkerBuilder, *actionWorkerBuilder, ActionWorker]{ + builder: builder[actionWorkerBuilder, *actionWorkerBuilder, ActionWorker, *ActionWorker]{ ids: ids, fetch: r, + conv: func(p *ActionWorker) ActionWorker { return *p }, }, } } @@ -67,6 +72,7 @@ type AgendaItem struct { Type string Weight int ChildList []AgendaItem + ContentObject AgendaItemContentObjectUnion Meeting *Meeting Parent *dsfetch.Maybe[AgendaItem] ProjectionList []Projection @@ -74,10 +80,11 @@ type AgendaItem struct { } type agendaItemBuilder struct { - builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem] + builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem] } -func (b *agendaItemBuilder) lazy(ds *Fetch, id int) *AgendaItem { +func (b *agendaItemBuilder) lazy(ds *Fetch, idI any) *AgendaItem { + id := idI.(int) c := AgendaItem{} ds.AgendaItem_ChildIDs(id).Lazy(&c.ChildIDs) ds.AgendaItem_Closed(id).Lazy(&c.Closed) @@ -105,67 +112,157 @@ func (b *agendaItemBuilder) Preload(rel builderWrapperI) *agendaItemBuilder { func (b *agendaItemBuilder) ChildList() *agendaItemBuilder { return &agendaItemBuilder{ - builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem]{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ fetch: b.fetch, parent: b, idField: "ChildIDs", relField: "ChildList", many: true, + conv: func(p *AgendaItem) AgendaItem { return *p }, + }, + } +} + +func (b *agendaItemBuilder) ContentObject() *agendaItemContentObjectUnionBuilder { + return &agendaItemContentObjectUnionBuilder{ + builder: builder[agendaItemContentObjectUnionBuilder, *agendaItemContentObjectUnionBuilder, AgendaItemContentObjectUnion, AgendaItemContentObjectUnion]{ + fetch: b.fetch, + parent: b, + idField: "ContentObjectID", + relField: "ContentObject", + conv: func(u AgendaItemContentObjectUnion) AgendaItemContentObjectUnion { return u }, }, } } +type AgendaItemContentObjectUnion interface { + isAgendaItemContentObjectUnion() +} + +func (*Motion) isAgendaItemContentObjectUnion() {} +func (*MotionBlock) isAgendaItemContentObjectUnion() {} +func (*Assignment) isAgendaItemContentObjectUnion() {} +func (*Topic) isAgendaItemContentObjectUnion() {} + +type agendaItemContentObjectUnionBuilder struct { + builder[agendaItemContentObjectUnionBuilder, *agendaItemContentObjectUnionBuilder, AgendaItemContentObjectUnion, AgendaItemContentObjectUnion] +} + +func (b *agendaItemContentObjectUnionBuilder) lazy(ds *Fetch, id any) AgendaItemContentObjectUnion { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + case "motion": + builder := &motionBuilder{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ + fetch: ds, + conv: func(p *Motion) Motion { return *p }, + }, + } + return builder.lazy(ds, intId) + case "motion_block": + builder := &motionBlockBuilder{ + builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock, *MotionBlock]{ + fetch: ds, + conv: func(p *MotionBlock) MotionBlock { return *p }, + }, + } + return builder.lazy(ds, intId) + case "assignment": + builder := &assignmentBuilder{ + builder: builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment]{ + fetch: ds, + conv: func(p *Assignment) Assignment { return *p }, + }, + } + return builder.lazy(ds, intId) + case "topic": + builder := &topicBuilder{ + builder: builder[topicBuilder, *topicBuilder, Topic, *Topic]{ + fetch: ds, + conv: func(p *Topic) Topic { return *p }, + }, + } + return builder.lazy(ds, intId) + } + + return nil +} + +func (b *agendaItemContentObjectUnionBuilder) Preload(rel builderWrapperI) *agendaItemContentObjectUnionBuilder { + b.builder.Preload(rel) + return b +} + func (b *agendaItemBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *agendaItemBuilder) Parent() *agendaItemBuilder { return &agendaItemBuilder{ - builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem]{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ fetch: b.fetch, parent: b, idField: "ParentID", relField: "Parent", + conv: func(p *AgendaItem) AgendaItem { return *p }, }, } } func (b *agendaItemBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *agendaItemBuilder) TagList() *tagBuilder { return &tagBuilder{ - builder: builder[tagBuilder, *tagBuilder, Tag]{ + builder: builder[tagBuilder, *tagBuilder, Tag, *Tag]{ fetch: b.fetch, parent: b, idField: "TagIDs", relField: "TagList", many: true, + conv: func(p *Tag) Tag { return *p }, }, } } func (r *Fetch) AgendaItem(ids ...int) *agendaItemBuilder { return &agendaItemBuilder{ - builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem]{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ ids: ids, fetch: r, + conv: func(p *AgendaItem) AgendaItem { return *p }, }, } } @@ -201,10 +298,11 @@ type Assignment struct { } type assignmentBuilder struct { - builder[assignmentBuilder, *assignmentBuilder, Assignment] + builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment] } -func (b *assignmentBuilder) lazy(ds *Fetch, id int) *Assignment { +func (b *assignmentBuilder) lazy(ds *Fetch, idI any) *Assignment { + id := idI.(int) c := Assignment{} ds.Assignment_AgendaItemID(id).Lazy(&c.AgendaItemID) ds.Assignment_AttachmentMeetingMediafileIDs(id).Lazy(&c.AttachmentMeetingMediafileIDs) @@ -233,114 +331,124 @@ func (b *assignmentBuilder) Preload(rel builderWrapperI) *assignmentBuilder { func (b *assignmentBuilder) AgendaItem() *agendaItemBuilder { return &agendaItemBuilder{ - builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem]{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ fetch: b.fetch, parent: b, idField: "AgendaItemID", relField: "AgendaItem", + conv: func(p *AgendaItem) AgendaItem { return *p }, }, } } func (b *assignmentBuilder) AttachmentMeetingMediafileList() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "AttachmentMeetingMediafileIDs", relField: "AttachmentMeetingMediafileList", many: true, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *assignmentBuilder) CandidateList() *assignmentCandidateBuilder { return &assignmentCandidateBuilder{ - builder: builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate]{ + builder: builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate, *AssignmentCandidate]{ fetch: b.fetch, parent: b, idField: "CandidateIDs", relField: "CandidateList", many: true, + conv: func(p *AssignmentCandidate) AssignmentCandidate { return *p }, }, } } func (b *assignmentBuilder) HistoryEntryList() *historyEntryBuilder { return &historyEntryBuilder{ - builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry]{ + builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry]{ fetch: b.fetch, parent: b, idField: "HistoryEntryIDs", relField: "HistoryEntryList", many: true, + conv: func(p *HistoryEntry) HistoryEntry { return *p }, }, } } func (b *assignmentBuilder) ListOfSpeakers() *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersID", relField: "ListOfSpeakers", + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } func (b *assignmentBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *assignmentBuilder) PollList() *pollBuilder { return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, idField: "PollIDs", relField: "PollList", many: true, + conv: func(p *Poll) Poll { return *p }, }, } } func (b *assignmentBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *assignmentBuilder) TagList() *tagBuilder { return &tagBuilder{ - builder: builder[tagBuilder, *tagBuilder, Tag]{ + builder: builder[tagBuilder, *tagBuilder, Tag, *Tag]{ fetch: b.fetch, parent: b, idField: "TagIDs", relField: "TagList", many: true, + conv: func(p *Tag) Tag { return *p }, }, } } func (r *Fetch) Assignment(ids ...int) *assignmentBuilder { return &assignmentBuilder{ - builder: builder[assignmentBuilder, *assignmentBuilder, Assignment]{ + builder: builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment]{ ids: ids, fetch: r, + conv: func(p *Assignment) Assignment { return *p }, }, } } @@ -358,10 +466,11 @@ type AssignmentCandidate struct { } type assignmentCandidateBuilder struct { - builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate] + builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate, *AssignmentCandidate] } -func (b *assignmentCandidateBuilder) lazy(ds *Fetch, id int) *AssignmentCandidate { +func (b *assignmentCandidateBuilder) lazy(ds *Fetch, idI any) *AssignmentCandidate { + id := idI.(int) c := AssignmentCandidate{} ds.AssignmentCandidate_AssignmentID(id).Lazy(&c.AssignmentID) ds.AssignmentCandidate_ID(id).Lazy(&c.ID) @@ -378,42 +487,46 @@ func (b *assignmentCandidateBuilder) Preload(rel builderWrapperI) *assignmentCan func (b *assignmentCandidateBuilder) Assignment() *assignmentBuilder { return &assignmentBuilder{ - builder: builder[assignmentBuilder, *assignmentBuilder, Assignment]{ + builder: builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment]{ fetch: b.fetch, parent: b, idField: "AssignmentID", relField: "Assignment", + conv: func(p *Assignment) Assignment { return *p }, }, } } func (b *assignmentCandidateBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *assignmentCandidateBuilder) MeetingUser() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserID", relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (r *Fetch) AssignmentCandidate(ids ...int) *assignmentCandidateBuilder { return &assignmentCandidateBuilder{ - builder: builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate]{ + builder: builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate, *AssignmentCandidate]{ ids: ids, fetch: r, + conv: func(p *AssignmentCandidate) AssignmentCandidate { return *p }, }, } } @@ -434,10 +547,11 @@ type ChatGroup struct { } type chatGroupBuilder struct { - builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup] + builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup, *ChatGroup] } -func (b *chatGroupBuilder) lazy(ds *Fetch, id int) *ChatGroup { +func (b *chatGroupBuilder) lazy(ds *Fetch, idI any) *ChatGroup { + id := idI.(int) c := ChatGroup{} ds.ChatGroup_ChatMessageIDs(id).Lazy(&c.ChatMessageIDs) ds.ChatGroup_ID(id).Lazy(&c.ID) @@ -456,56 +570,61 @@ func (b *chatGroupBuilder) Preload(rel builderWrapperI) *chatGroupBuilder { func (b *chatGroupBuilder) ChatMessageList() *chatMessageBuilder { return &chatMessageBuilder{ - builder: builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage]{ + builder: builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage, *ChatMessage]{ fetch: b.fetch, parent: b, idField: "ChatMessageIDs", relField: "ChatMessageList", many: true, + conv: func(p *ChatMessage) ChatMessage { return *p }, }, } } func (b *chatGroupBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *chatGroupBuilder) ReadGroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "ReadGroupIDs", relField: "ReadGroupList", many: true, + conv: func(p *Group) Group { return *p }, }, } } func (b *chatGroupBuilder) WriteGroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "WriteGroupIDs", relField: "WriteGroupList", many: true, + conv: func(p *Group) Group { return *p }, }, } } func (r *Fetch) ChatGroup(ids ...int) *chatGroupBuilder { return &chatGroupBuilder{ - builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup]{ + builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup, *ChatGroup]{ ids: ids, fetch: r, + conv: func(p *ChatGroup) ChatGroup { return *p }, }, } } @@ -524,10 +643,11 @@ type ChatMessage struct { } type chatMessageBuilder struct { - builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage] + builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage, *ChatMessage] } -func (b *chatMessageBuilder) lazy(ds *Fetch, id int) *ChatMessage { +func (b *chatMessageBuilder) lazy(ds *Fetch, idI any) *ChatMessage { + id := idI.(int) c := ChatMessage{} ds.ChatMessage_ChatGroupID(id).Lazy(&c.ChatGroupID) ds.ChatMessage_Content(id).Lazy(&c.Content) @@ -545,42 +665,46 @@ func (b *chatMessageBuilder) Preload(rel builderWrapperI) *chatMessageBuilder { func (b *chatMessageBuilder) ChatGroup() *chatGroupBuilder { return &chatGroupBuilder{ - builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup]{ + builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup, *ChatGroup]{ fetch: b.fetch, parent: b, idField: "ChatGroupID", relField: "ChatGroup", + conv: func(p *ChatGroup) ChatGroup { return *p }, }, } } func (b *chatMessageBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *chatMessageBuilder) MeetingUser() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserID", relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (r *Fetch) ChatMessage(ids ...int) *chatMessageBuilder { return &chatMessageBuilder{ - builder: builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage]{ + builder: builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage, *ChatMessage]{ ids: ids, fetch: r, + conv: func(p *ChatMessage) ChatMessage { return *p }, }, } } @@ -620,10 +744,11 @@ type Committee struct { } type committeeBuilder struct { - builder[committeeBuilder, *committeeBuilder, Committee] + builder[committeeBuilder, *committeeBuilder, Committee, *Committee] } -func (b *committeeBuilder) lazy(ds *Fetch, id int) *Committee { +func (b *committeeBuilder) lazy(ds *Fetch, idI any) *Committee { + id := idI.(int) c := Committee{} ds.Committee_AllChildIDs(id).Lazy(&c.AllChildIDs) ds.Committee_AllParentIDs(id).Lazy(&c.AllParentIDs) @@ -652,162 +777,176 @@ func (b *committeeBuilder) Preload(rel builderWrapperI) *committeeBuilder { func (b *committeeBuilder) AllChildList() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "AllChildIDs", relField: "AllChildList", many: true, + conv: func(p *Committee) Committee { return *p }, }, } } func (b *committeeBuilder) AllParentList() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "AllParentIDs", relField: "AllParentList", many: true, + conv: func(p *Committee) Committee { return *p }, }, } } func (b *committeeBuilder) ChildList() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "ChildIDs", relField: "ChildList", many: true, + conv: func(p *Committee) Committee { return *p }, }, } } func (b *committeeBuilder) DefaultMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "DefaultMeetingID", relField: "DefaultMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *committeeBuilder) ForwardToCommitteeList() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "ForwardToCommitteeIDs", relField: "ForwardToCommitteeList", many: true, + conv: func(p *Committee) Committee { return *p }, }, } } func (b *committeeBuilder) ManagerList() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "ManagerIDs", relField: "ManagerList", many: true, + conv: func(p *User) User { return *p }, }, } } func (b *committeeBuilder) MeetingList() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingIDs", relField: "MeetingList", many: true, + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *committeeBuilder) NativeUserList() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "NativeUserIDs", relField: "NativeUserList", many: true, + conv: func(p *User) User { return *p }, }, } } func (b *committeeBuilder) Organization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "OrganizationID", relField: "Organization", + conv: func(p *Organization) Organization { return *p }, }, } } func (b *committeeBuilder) OrganizationTagList() *organizationTagBuilder { return &organizationTagBuilder{ - builder: builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag]{ + builder: builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag, *OrganizationTag]{ fetch: b.fetch, parent: b, idField: "OrganizationTagIDs", relField: "OrganizationTagList", many: true, + conv: func(p *OrganizationTag) OrganizationTag { return *p }, }, } } func (b *committeeBuilder) Parent() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "ParentID", relField: "Parent", + conv: func(p *Committee) Committee { return *p }, }, } } func (b *committeeBuilder) ReceiveForwardingsFromCommitteeList() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "ReceiveForwardingsFromCommitteeIDs", relField: "ReceiveForwardingsFromCommitteeList", many: true, + conv: func(p *Committee) Committee { return *p }, }, } } func (b *committeeBuilder) UserList() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "UserIDs", relField: "UserList", many: true, + conv: func(p *User) User { return *p }, }, } } func (r *Fetch) Committee(ids ...int) *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ ids: ids, fetch: r, + conv: func(p *Committee) Committee { return *p }, }, } } @@ -823,10 +962,11 @@ type Gender struct { } type genderBuilder struct { - builder[genderBuilder, *genderBuilder, Gender] + builder[genderBuilder, *genderBuilder, Gender, *Gender] } -func (b *genderBuilder) lazy(ds *Fetch, id int) *Gender { +func (b *genderBuilder) lazy(ds *Fetch, idI any) *Gender { + id := idI.(int) c := Gender{} ds.Gender_ID(id).Lazy(&c.ID) ds.Gender_Name(id).Lazy(&c.Name) @@ -842,32 +982,35 @@ func (b *genderBuilder) Preload(rel builderWrapperI) *genderBuilder { func (b *genderBuilder) Organization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "OrganizationID", relField: "Organization", + conv: func(p *Organization) Organization { return *p }, }, } } func (b *genderBuilder) UserList() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "UserIDs", relField: "UserList", many: true, + conv: func(p *User) User { return *p }, }, } } func (r *Fetch) Gender(ids ...int) *genderBuilder { return &genderBuilder{ - builder: builder[genderBuilder, *genderBuilder, Gender]{ + builder: builder[genderBuilder, *genderBuilder, Gender, *Gender]{ ids: ids, fetch: r, + conv: func(p *Gender) Gender { return *p }, }, } } @@ -888,10 +1031,7 @@ type Group struct { PollIDs []int ReadChatGroupIDs []int ReadCommentSectionIDs []int - UsedAsAssignmentPollDefaultID dsfetch.Maybe[int] - UsedAsMotionPollDefaultID dsfetch.Maybe[int] - UsedAsPollDefaultID dsfetch.Maybe[int] - UsedAsTopicPollDefaultID dsfetch.Maybe[int] + UsedInMeetingPollDefaultIDs []int Weight int WriteChatGroupIDs []int WriteCommentSectionIDs []int @@ -905,19 +1045,17 @@ type Group struct { PollList []Poll ReadChatGroupList []ChatGroup ReadCommentSectionList []MotionCommentSection - UsedAsAssignmentPollDefault *dsfetch.Maybe[Meeting] - UsedAsMotionPollDefault *dsfetch.Maybe[Meeting] - UsedAsPollDefault *dsfetch.Maybe[Meeting] - UsedAsTopicPollDefault *dsfetch.Maybe[Meeting] + UsedInMeetingPollDefaultList []MeetingPollDefault WriteChatGroupList []ChatGroup WriteCommentSectionList []MotionCommentSection } type groupBuilder struct { - builder[groupBuilder, *groupBuilder, Group] + builder[groupBuilder, *groupBuilder, Group, *Group] } -func (b *groupBuilder) lazy(ds *Fetch, id int) *Group { +func (b *groupBuilder) lazy(ds *Fetch, idI any) *Group { + id := idI.(int) c := Group{} ds.Group_AdminGroupForMeetingID(id).Lazy(&c.AdminGroupForMeetingID) ds.Group_AnonymousGroupForMeetingID(id).Lazy(&c.AnonymousGroupForMeetingID) @@ -933,10 +1071,7 @@ func (b *groupBuilder) lazy(ds *Fetch, id int) *Group { ds.Group_PollIDs(id).Lazy(&c.PollIDs) ds.Group_ReadChatGroupIDs(id).Lazy(&c.ReadChatGroupIDs) ds.Group_ReadCommentSectionIDs(id).Lazy(&c.ReadCommentSectionIDs) - ds.Group_UsedAsAssignmentPollDefaultID(id).Lazy(&c.UsedAsAssignmentPollDefaultID) - ds.Group_UsedAsMotionPollDefaultID(id).Lazy(&c.UsedAsMotionPollDefaultID) - ds.Group_UsedAsPollDefaultID(id).Lazy(&c.UsedAsPollDefaultID) - ds.Group_UsedAsTopicPollDefaultID(id).Lazy(&c.UsedAsTopicPollDefaultID) + ds.Group_UsedInMeetingPollDefaultIDs(id).Lazy(&c.UsedInMeetingPollDefaultIDs) ds.Group_Weight(id).Lazy(&c.Weight) ds.Group_WriteChatGroupIDs(id).Lazy(&c.WriteChatGroupIDs) ds.Group_WriteCommentSectionIDs(id).Lazy(&c.WriteCommentSectionIDs) @@ -950,214 +1085,199 @@ func (b *groupBuilder) Preload(rel builderWrapperI) *groupBuilder { func (b *groupBuilder) AdminGroupForMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "AdminGroupForMeetingID", relField: "AdminGroupForMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *groupBuilder) AnonymousGroupForMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "AnonymousGroupForMeetingID", relField: "AnonymousGroupForMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *groupBuilder) DefaultGroupForMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "DefaultGroupForMeetingID", relField: "DefaultGroupForMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *groupBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *groupBuilder) MeetingMediafileAccessGroupList() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "MeetingMediafileAccessGroupIDs", relField: "MeetingMediafileAccessGroupList", many: true, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *groupBuilder) MeetingMediafileInheritedAccessGroupList() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "MeetingMediafileInheritedAccessGroupIDs", relField: "MeetingMediafileInheritedAccessGroupList", many: true, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *groupBuilder) MeetingUserList() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserIDs", relField: "MeetingUserList", many: true, + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *groupBuilder) PollList() *pollBuilder { return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, idField: "PollIDs", relField: "PollList", many: true, + conv: func(p *Poll) Poll { return *p }, }, } } func (b *groupBuilder) ReadChatGroupList() *chatGroupBuilder { return &chatGroupBuilder{ - builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup]{ + builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup, *ChatGroup]{ fetch: b.fetch, parent: b, idField: "ReadChatGroupIDs", relField: "ReadChatGroupList", many: true, + conv: func(p *ChatGroup) ChatGroup { return *p }, }, } } func (b *groupBuilder) ReadCommentSectionList() *motionCommentSectionBuilder { return &motionCommentSectionBuilder{ - builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection]{ + builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection, *MotionCommentSection]{ fetch: b.fetch, parent: b, idField: "ReadCommentSectionIDs", relField: "ReadCommentSectionList", many: true, + conv: func(p *MotionCommentSection) MotionCommentSection { return *p }, }, } } -func (b *groupBuilder) UsedAsAssignmentPollDefault() *meetingBuilder { - return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ - fetch: b.fetch, - parent: b, - idField: "UsedAsAssignmentPollDefaultID", - relField: "UsedAsAssignmentPollDefault", - }, - } -} - -func (b *groupBuilder) UsedAsMotionPollDefault() *meetingBuilder { - return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ - fetch: b.fetch, - parent: b, - idField: "UsedAsMotionPollDefaultID", - relField: "UsedAsMotionPollDefault", - }, - } -} - -func (b *groupBuilder) UsedAsPollDefault() *meetingBuilder { - return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ - fetch: b.fetch, - parent: b, - idField: "UsedAsPollDefaultID", - relField: "UsedAsPollDefault", - }, - } -} - -func (b *groupBuilder) UsedAsTopicPollDefault() *meetingBuilder { - return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ +func (b *groupBuilder) UsedInMeetingPollDefaultList() *meetingPollDefaultBuilder { + return &meetingPollDefaultBuilder{ + builder: builder[meetingPollDefaultBuilder, *meetingPollDefaultBuilder, MeetingPollDefault, *MeetingPollDefault]{ fetch: b.fetch, parent: b, - idField: "UsedAsTopicPollDefaultID", - relField: "UsedAsTopicPollDefault", + idField: "UsedInMeetingPollDefaultIDs", + relField: "UsedInMeetingPollDefaultList", + many: true, + conv: func(p *MeetingPollDefault) MeetingPollDefault { return *p }, }, } } func (b *groupBuilder) WriteChatGroupList() *chatGroupBuilder { return &chatGroupBuilder{ - builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup]{ + builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup, *ChatGroup]{ fetch: b.fetch, parent: b, idField: "WriteChatGroupIDs", relField: "WriteChatGroupList", many: true, + conv: func(p *ChatGroup) ChatGroup { return *p }, }, } } func (b *groupBuilder) WriteCommentSectionList() *motionCommentSectionBuilder { return &motionCommentSectionBuilder{ - builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection]{ + builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection, *MotionCommentSection]{ fetch: b.fetch, parent: b, idField: "WriteCommentSectionIDs", relField: "WriteCommentSectionList", many: true, + conv: func(p *MotionCommentSection) MotionCommentSection { return *p }, }, } } func (r *Fetch) Group(ids ...int) *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ ids: ids, fetch: r, + conv: func(p *Group) Group { return *p }, }, } } // HistoryEntry has all fields from history_entry. type HistoryEntry struct { - Entries []string - ID int - MeetingID dsfetch.Maybe[int] - ModelID dsfetch.Maybe[string] - OriginalModelID string - PositionID int - Meeting *dsfetch.Maybe[Meeting] - Position *HistoryPosition + Entries []string + ID int + MeetingID dsfetch.Maybe[int] + ModelID dsfetch.Maybe[string] + OriginalModelID string + PositionID int + StructuredInformation json.RawMessage + Meeting *dsfetch.Maybe[Meeting] + Model HistoryEntryModelUnion + Position *HistoryPosition } type historyEntryBuilder struct { - builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry] + builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry] } -func (b *historyEntryBuilder) lazy(ds *Fetch, id int) *HistoryEntry { +func (b *historyEntryBuilder) lazy(ds *Fetch, idI any) *HistoryEntry { + id := idI.(int) c := HistoryEntry{} ds.HistoryEntry_Entries(id).Lazy(&c.Entries) ds.HistoryEntry_ID(id).Lazy(&c.ID) @@ -1165,6 +1285,7 @@ func (b *historyEntryBuilder) lazy(ds *Fetch, id int) *HistoryEntry { ds.HistoryEntry_ModelID(id).Lazy(&c.ModelID) ds.HistoryEntry_OriginalModelID(id).Lazy(&c.OriginalModelID) ds.HistoryEntry_PositionID(id).Lazy(&c.PositionID) + ds.HistoryEntry_StructuredInformation(id).Lazy(&c.StructuredInformation) return &c } @@ -1175,31 +1296,127 @@ func (b *historyEntryBuilder) Preload(rel builderWrapperI) *historyEntryBuilder func (b *historyEntryBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, + }, + } +} + +func (b *historyEntryBuilder) Model() *historyEntryModelUnionBuilder { + return &historyEntryModelUnionBuilder{ + builder: builder[historyEntryModelUnionBuilder, *historyEntryModelUnionBuilder, HistoryEntryModelUnion, HistoryEntryModelUnion]{ + fetch: b.fetch, + parent: b, + idField: "ModelID", + relField: "Model", + conv: func(u HistoryEntryModelUnion) HistoryEntryModelUnion { return u }, }, } } +type HistoryEntryModelUnion interface { + isHistoryEntryModelUnion() +} + +func (*Assignment) isHistoryEntryModelUnion() {} +func (*MeetingUser) isHistoryEntryModelUnion() {} +func (*Motion) isHistoryEntryModelUnion() {} +func (*Poll) isHistoryEntryModelUnion() {} +func (*User) isHistoryEntryModelUnion() {} + +type historyEntryModelUnionBuilder struct { + builder[historyEntryModelUnionBuilder, *historyEntryModelUnionBuilder, HistoryEntryModelUnion, HistoryEntryModelUnion] +} + +func (b *historyEntryModelUnionBuilder) lazy(ds *Fetch, id any) HistoryEntryModelUnion { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + case "assignment": + builder := &assignmentBuilder{ + builder: builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment]{ + fetch: ds, + conv: func(p *Assignment) Assignment { return *p }, + }, + } + return builder.lazy(ds, intId) + case "meeting_user": + builder := &meetingUserBuilder{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ + fetch: ds, + conv: func(p *MeetingUser) MeetingUser { return *p }, + }, + } + return builder.lazy(ds, intId) + case "motion": + builder := &motionBuilder{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ + fetch: ds, + conv: func(p *Motion) Motion { return *p }, + }, + } + return builder.lazy(ds, intId) + case "poll": + builder := &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ + fetch: ds, + conv: func(p *Poll) Poll { return *p }, + }, + } + return builder.lazy(ds, intId) + case "user": + builder := &userBuilder{ + builder: builder[userBuilder, *userBuilder, User, *User]{ + fetch: ds, + conv: func(p *User) User { return *p }, + }, + } + return builder.lazy(ds, intId) + } + + return nil +} + +func (b *historyEntryModelUnionBuilder) Preload(rel builderWrapperI) *historyEntryModelUnionBuilder { + b.builder.Preload(rel) + return b +} + func (b *historyEntryBuilder) Position() *historyPositionBuilder { return &historyPositionBuilder{ - builder: builder[historyPositionBuilder, *historyPositionBuilder, HistoryPosition]{ + builder: builder[historyPositionBuilder, *historyPositionBuilder, HistoryPosition, *HistoryPosition]{ fetch: b.fetch, parent: b, idField: "PositionID", relField: "Position", + conv: func(p *HistoryPosition) HistoryPosition { return *p }, }, } } func (r *Fetch) HistoryEntry(ids ...int) *historyEntryBuilder { return &historyEntryBuilder{ - builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry]{ + builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry]{ ids: ids, fetch: r, + conv: func(p *HistoryEntry) HistoryEntry { return *p }, }, } } @@ -1216,10 +1433,11 @@ type HistoryPosition struct { } type historyPositionBuilder struct { - builder[historyPositionBuilder, *historyPositionBuilder, HistoryPosition] + builder[historyPositionBuilder, *historyPositionBuilder, HistoryPosition, *HistoryPosition] } -func (b *historyPositionBuilder) lazy(ds *Fetch, id int) *HistoryPosition { +func (b *historyPositionBuilder) lazy(ds *Fetch, idI any) *HistoryPosition { + id := idI.(int) c := HistoryPosition{} ds.HistoryPosition_EntryIDs(id).Lazy(&c.EntryIDs) ds.HistoryPosition_ID(id).Lazy(&c.ID) @@ -1236,32 +1454,35 @@ func (b *historyPositionBuilder) Preload(rel builderWrapperI) *historyPositionBu func (b *historyPositionBuilder) EntryList() *historyEntryBuilder { return &historyEntryBuilder{ - builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry]{ + builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry]{ fetch: b.fetch, parent: b, idField: "EntryIDs", relField: "EntryList", many: true, + conv: func(p *HistoryEntry) HistoryEntry { return *p }, }, } } func (b *historyPositionBuilder) User() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "UserID", relField: "User", + conv: func(p *User) User { return *p }, }, } } func (r *Fetch) HistoryPosition(ids ...int) *historyPositionBuilder { return &historyPositionBuilder{ - builder: builder[historyPositionBuilder, *historyPositionBuilder, HistoryPosition]{ + builder: builder[historyPositionBuilder, *historyPositionBuilder, HistoryPosition, *HistoryPosition]{ ids: ids, fetch: r, + conv: func(p *HistoryPosition) HistoryPosition { return *p }, }, } } @@ -1276,10 +1497,11 @@ type ImportPreview struct { } type importPreviewBuilder struct { - builder[importPreviewBuilder, *importPreviewBuilder, ImportPreview] + builder[importPreviewBuilder, *importPreviewBuilder, ImportPreview, *ImportPreview] } -func (b *importPreviewBuilder) lazy(ds *Fetch, id int) *ImportPreview { +func (b *importPreviewBuilder) lazy(ds *Fetch, idI any) *ImportPreview { + id := idI.(int) c := ImportPreview{} ds.ImportPreview_Created(id).Lazy(&c.Created) ds.ImportPreview_ID(id).Lazy(&c.ID) @@ -1296,9 +1518,10 @@ func (b *importPreviewBuilder) Preload(rel builderWrapperI) *importPreviewBuilde func (r *Fetch) ImportPreview(ids ...int) *importPreviewBuilder { return &importPreviewBuilder{ - builder: builder[importPreviewBuilder, *importPreviewBuilder, ImportPreview]{ + builder: builder[importPreviewBuilder, *importPreviewBuilder, ImportPreview, *ImportPreview]{ ids: ids, fetch: r, + conv: func(p *ImportPreview) ImportPreview { return *p }, }, } } @@ -1314,6 +1537,7 @@ type ListOfSpeakers struct { SequentialNumber int SpeakerIDs []int StructureLevelListOfSpeakersIDs []int + ContentObject ListOfSpeakersContentObjectUnion Meeting *Meeting ProjectionList []Projection SpeakerList []Speaker @@ -1321,10 +1545,11 @@ type ListOfSpeakers struct { } type listOfSpeakersBuilder struct { - builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers] + builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers] } -func (b *listOfSpeakersBuilder) lazy(ds *Fetch, id int) *ListOfSpeakers { +func (b *listOfSpeakersBuilder) lazy(ds *Fetch, idI any) *ListOfSpeakers { + id := idI.(int) c := ListOfSpeakers{} ds.ListOfSpeakers_Closed(id).Lazy(&c.Closed) ds.ListOfSpeakers_ContentObjectID(id).Lazy(&c.ContentObjectID) @@ -1343,58 +1568,156 @@ func (b *listOfSpeakersBuilder) Preload(rel builderWrapperI) *listOfSpeakersBuil return b } +func (b *listOfSpeakersBuilder) ContentObject() *listOfSpeakersContentObjectUnionBuilder { + return &listOfSpeakersContentObjectUnionBuilder{ + builder: builder[listOfSpeakersContentObjectUnionBuilder, *listOfSpeakersContentObjectUnionBuilder, ListOfSpeakersContentObjectUnion, ListOfSpeakersContentObjectUnion]{ + fetch: b.fetch, + parent: b, + idField: "ContentObjectID", + relField: "ContentObject", + conv: func(u ListOfSpeakersContentObjectUnion) ListOfSpeakersContentObjectUnion { return u }, + }, + } +} + +type ListOfSpeakersContentObjectUnion interface { + isListOfSpeakersContentObjectUnion() +} + +func (*Motion) isListOfSpeakersContentObjectUnion() {} +func (*MotionBlock) isListOfSpeakersContentObjectUnion() {} +func (*Assignment) isListOfSpeakersContentObjectUnion() {} +func (*Topic) isListOfSpeakersContentObjectUnion() {} +func (*MeetingMediafile) isListOfSpeakersContentObjectUnion() {} + +type listOfSpeakersContentObjectUnionBuilder struct { + builder[listOfSpeakersContentObjectUnionBuilder, *listOfSpeakersContentObjectUnionBuilder, ListOfSpeakersContentObjectUnion, ListOfSpeakersContentObjectUnion] +} + +func (b *listOfSpeakersContentObjectUnionBuilder) lazy(ds *Fetch, id any) ListOfSpeakersContentObjectUnion { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + case "motion": + builder := &motionBuilder{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ + fetch: ds, + conv: func(p *Motion) Motion { return *p }, + }, + } + return builder.lazy(ds, intId) + case "motion_block": + builder := &motionBlockBuilder{ + builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock, *MotionBlock]{ + fetch: ds, + conv: func(p *MotionBlock) MotionBlock { return *p }, + }, + } + return builder.lazy(ds, intId) + case "assignment": + builder := &assignmentBuilder{ + builder: builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment]{ + fetch: ds, + conv: func(p *Assignment) Assignment { return *p }, + }, + } + return builder.lazy(ds, intId) + case "topic": + builder := &topicBuilder{ + builder: builder[topicBuilder, *topicBuilder, Topic, *Topic]{ + fetch: ds, + conv: func(p *Topic) Topic { return *p }, + }, + } + return builder.lazy(ds, intId) + case "meeting_mediafile": + builder := &meetingMediafileBuilder{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ + fetch: ds, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, + }, + } + return builder.lazy(ds, intId) + } + + return nil +} + +func (b *listOfSpeakersContentObjectUnionBuilder) Preload(rel builderWrapperI) *listOfSpeakersContentObjectUnionBuilder { + b.builder.Preload(rel) + return b +} + func (b *listOfSpeakersBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *listOfSpeakersBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *listOfSpeakersBuilder) SpeakerList() *speakerBuilder { return &speakerBuilder{ - builder: builder[speakerBuilder, *speakerBuilder, Speaker]{ + builder: builder[speakerBuilder, *speakerBuilder, Speaker, *Speaker]{ fetch: b.fetch, parent: b, idField: "SpeakerIDs", relField: "SpeakerList", many: true, + conv: func(p *Speaker) Speaker { return *p }, }, } } func (b *listOfSpeakersBuilder) StructureLevelListOfSpeakersList() *structureLevelListOfSpeakersBuilder { return &structureLevelListOfSpeakersBuilder{ - builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers]{ + builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers, *StructureLevelListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "StructureLevelListOfSpeakersIDs", relField: "StructureLevelListOfSpeakersList", many: true, + conv: func(p *StructureLevelListOfSpeakers) StructureLevelListOfSpeakers { return *p }, }, } } func (r *Fetch) ListOfSpeakers(ids ...int) *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ ids: ids, fetch: r, + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } @@ -1417,15 +1740,17 @@ type Mediafile struct { Token string ChildList []Mediafile MeetingMediafileList []MeetingMediafile + Owner MediafileOwnerUnion Parent *dsfetch.Maybe[Mediafile] PublishedToMeetingsInOrganization *dsfetch.Maybe[Organization] } type mediafileBuilder struct { - builder[mediafileBuilder, *mediafileBuilder, Mediafile] + builder[mediafileBuilder, *mediafileBuilder, Mediafile, *Mediafile] } -func (b *mediafileBuilder) lazy(ds *Fetch, id int) *Mediafile { +func (b *mediafileBuilder) lazy(ds *Fetch, idI any) *Mediafile { + id := idI.(int) c := Mediafile{} ds.Mediafile_ChildIDs(id).Lazy(&c.ChildIDs) ds.Mediafile_CreateTimestamp(id).Lazy(&c.CreateTimestamp) @@ -1451,55 +1776,126 @@ func (b *mediafileBuilder) Preload(rel builderWrapperI) *mediafileBuilder { func (b *mediafileBuilder) ChildList() *mediafileBuilder { return &mediafileBuilder{ - builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile]{ + builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile, *Mediafile]{ fetch: b.fetch, parent: b, idField: "ChildIDs", relField: "ChildList", many: true, + conv: func(p *Mediafile) Mediafile { return *p }, }, } } func (b *mediafileBuilder) MeetingMediafileList() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "MeetingMediafileIDs", relField: "MeetingMediafileList", many: true, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, + }, + } +} + +func (b *mediafileBuilder) Owner() *mediafileOwnerUnionBuilder { + return &mediafileOwnerUnionBuilder{ + builder: builder[mediafileOwnerUnionBuilder, *mediafileOwnerUnionBuilder, MediafileOwnerUnion, MediafileOwnerUnion]{ + fetch: b.fetch, + parent: b, + idField: "OwnerID", + relField: "Owner", + conv: func(u MediafileOwnerUnion) MediafileOwnerUnion { return u }, }, } } +type MediafileOwnerUnion interface { + isMediafileOwnerUnion() +} + +func (*Meeting) isMediafileOwnerUnion() {} +func (*Organization) isMediafileOwnerUnion() {} + +type mediafileOwnerUnionBuilder struct { + builder[mediafileOwnerUnionBuilder, *mediafileOwnerUnionBuilder, MediafileOwnerUnion, MediafileOwnerUnion] +} + +func (b *mediafileOwnerUnionBuilder) lazy(ds *Fetch, id any) MediafileOwnerUnion { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + case "meeting": + builder := &meetingBuilder{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ + fetch: ds, + conv: func(p *Meeting) Meeting { return *p }, + }, + } + return builder.lazy(ds, intId) + case "organization": + builder := &organizationBuilder{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ + fetch: ds, + conv: func(p *Organization) Organization { return *p }, + }, + } + return builder.lazy(ds, intId) + } + + return nil +} + +func (b *mediafileOwnerUnionBuilder) Preload(rel builderWrapperI) *mediafileOwnerUnionBuilder { + b.builder.Preload(rel) + return b +} + func (b *mediafileBuilder) Parent() *mediafileBuilder { return &mediafileBuilder{ - builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile]{ + builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile, *Mediafile]{ fetch: b.fetch, parent: b, idField: "ParentID", relField: "Parent", + conv: func(p *Mediafile) Mediafile { return *p }, }, } } func (b *mediafileBuilder) PublishedToMeetingsInOrganization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "PublishedToMeetingsInOrganizationID", relField: "PublishedToMeetingsInOrganization", + conv: func(p *Organization) Organization { return *p }, }, } } func (r *Fetch) Mediafile(ids ...int) *mediafileBuilder { return &mediafileBuilder{ - builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile]{ + builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile, *Mediafile]{ ids: ids, fetch: r, + conv: func(p *Mediafile) Mediafile { return *p }, }, } } @@ -1528,15 +1924,8 @@ type Meeting struct { AssignmentCandidateIDs []int AssignmentIDs []int AssignmentPollAddCandidatesToListOfSpeakers bool - AssignmentPollBallotPaperNumber int - AssignmentPollBallotPaperSelection string - AssignmentPollDefaultBackend string - AssignmentPollDefaultGroupIDs []int + AssignmentPollConfigID dsfetch.Maybe[int] AssignmentPollDefaultMethod string - AssignmentPollDefaultOnehundredPercentBase string - AssignmentPollDefaultType string - AssignmentPollEnableMaxVotesPerOption bool - AssignmentPollSortPollResultByVotes bool AssignmentsExportPreamble string AssignmentsExportTitle string ChatGroupIDs []int @@ -1566,8 +1955,8 @@ type Meeting struct { DefaultProjectorMotionBlockIDs []int DefaultProjectorMotionIDs []int DefaultProjectorMotionPollIDs []int - DefaultProjectorPollIDs []int DefaultProjectorTopicIDs []int + DefaultProjectorTopicPollIDs []int Description string EnableAnonymous bool EndTime int @@ -1641,15 +2030,7 @@ type Meeting struct { MotionCommentSectionIDs []int MotionEditorIDs []int MotionIDs []int - MotionPollBallotPaperNumber int - MotionPollBallotPaperSelection string - MotionPollDefaultBackend string - MotionPollDefaultGroupIDs []int - MotionPollDefaultMethod string - MotionPollDefaultOnehundredPercentBase string - MotionPollDefaultType string - MotionPollProjectionMaxColumns int - MotionPollProjectionNameOrderFirst string + MotionPollConfigID dsfetch.Maybe[int] MotionStateIDs []int MotionSubmitterIDs []int MotionSupporterIDs []int @@ -1694,24 +2075,19 @@ type Meeting struct { MotionsShowSequentialNumber bool MotionsSupportersMinAmount int Name string - OptionIDs []int OrganizationTagIDs []int PersonalNoteIDs []int PointOfOrderCategoryIDs []int - PollBallotPaperNumber int - PollBallotPaperSelection string - PollCandidateIDs []int - PollCandidateListIDs []int PollCountdownID dsfetch.Maybe[int] PollCoupleCountdown bool - PollDefaultBackend string - PollDefaultGroupIDs []int + PollDefaultAllowInvalid bool + PollDefaultAllowVoteSplit bool + PollDefaultIDs []int PollDefaultLiveVotingEnabled bool - PollDefaultMethod string - PollDefaultOnehundredPercentBase string - PollDefaultType string + PollEnableMaxVotesPerOption bool PollIDs []int - PollSortPollResultByVotes bool + PollProjectionMaxColumns int + PollProjectionNameOrderFirst string PresentUserIDs []int ProjectionIDs []int ProjectorCountdownDefaultTime int @@ -1729,7 +2105,8 @@ type Meeting struct { TemplateForOrganizationID dsfetch.Maybe[int] TimeZone string TopicIDs []int - TopicPollDefaultGroupIDs []int + TopicPollConfigID dsfetch.Maybe[int] + TopicPollDefaultMethod string UserIDs []int UsersAllowSelfSetPresent bool UsersEmailBody string @@ -1748,7 +2125,6 @@ type Meeting struct { UsersPdfWlanEncryption string UsersPdfWlanPassword string UsersPdfWlanSsid string - VoteIDs []int WelcomeText string WelcomeTitle string AdminGroup *dsfetch.Maybe[Group] @@ -1757,7 +2133,7 @@ type Meeting struct { AnonymousGroup *dsfetch.Maybe[Group] AssignmentCandidateList []AssignmentCandidate AssignmentList []Assignment - AssignmentPollDefaultGroupList []Group + AssignmentPollConfig *dsfetch.Maybe[MeetingPollDefault] ChatGroupList []ChatGroup ChatMessageList []ChatMessage Committee *Committee @@ -1775,8 +2151,8 @@ type Meeting struct { DefaultProjectorMotionBlockList []Projector DefaultProjectorMotionList []Projector DefaultProjectorMotionPollList []Projector - DefaultProjectorPollList []Projector DefaultProjectorTopicList []Projector + DefaultProjectorTopicPollList []Projector FontBold *dsfetch.Maybe[MeetingMediafile] FontBoldItalic *dsfetch.Maybe[MeetingMediafile] FontChyronSpeakerName *dsfetch.Maybe[MeetingMediafile] @@ -1809,7 +2185,7 @@ type Meeting struct { MotionCommentSectionList []MotionCommentSection MotionEditorList []MotionEditor MotionList []Motion - MotionPollDefaultGroupList []Group + MotionPollConfig *dsfetch.Maybe[MeetingPollDefault] MotionStateList []MotionState MotionSubmitterList []MotionSubmitter MotionSupporterList []MotionSupporter @@ -1817,14 +2193,11 @@ type Meeting struct { MotionWorkingGroupSpeakerList []MotionWorkingGroupSpeaker MotionsDefaultAmendmentWorkflow *MotionWorkflow MotionsDefaultWorkflow *MotionWorkflow - OptionList []Option OrganizationTagList []OrganizationTag PersonalNoteList []PersonalNote PointOfOrderCategoryList []PointOfOrderCategory - PollCandidateList []PollCandidate - PollCandidateListList []PollCandidateList PollCountdown *dsfetch.Maybe[ProjectorCountdown] - PollDefaultGroupList []Group + PollDefaultList []MeetingPollDefault PollList []Poll PresentUserList []User ProjectionList []Projection @@ -1839,16 +2212,16 @@ type Meeting struct { TagList []Tag TemplateForOrganization *dsfetch.Maybe[Organization] TopicList []Topic - TopicPollDefaultGroupList []Group + TopicPollConfig *dsfetch.Maybe[MeetingPollDefault] UserList []User - VoteList []Vote } type meetingBuilder struct { - builder[meetingBuilder, *meetingBuilder, Meeting] + builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting] } -func (b *meetingBuilder) lazy(ds *Fetch, id int) *Meeting { +func (b *meetingBuilder) lazy(ds *Fetch, idI any) *Meeting { + id := idI.(int) c := Meeting{} ds.Meeting_AdminGroupID(id).Lazy(&c.AdminGroupID) ds.Meeting_AgendaEnableNumbering(id).Lazy(&c.AgendaEnableNumbering) @@ -1872,15 +2245,8 @@ func (b *meetingBuilder) lazy(ds *Fetch, id int) *Meeting { ds.Meeting_AssignmentCandidateIDs(id).Lazy(&c.AssignmentCandidateIDs) ds.Meeting_AssignmentIDs(id).Lazy(&c.AssignmentIDs) ds.Meeting_AssignmentPollAddCandidatesToListOfSpeakers(id).Lazy(&c.AssignmentPollAddCandidatesToListOfSpeakers) - ds.Meeting_AssignmentPollBallotPaperNumber(id).Lazy(&c.AssignmentPollBallotPaperNumber) - ds.Meeting_AssignmentPollBallotPaperSelection(id).Lazy(&c.AssignmentPollBallotPaperSelection) - ds.Meeting_AssignmentPollDefaultBackend(id).Lazy(&c.AssignmentPollDefaultBackend) - ds.Meeting_AssignmentPollDefaultGroupIDs(id).Lazy(&c.AssignmentPollDefaultGroupIDs) + ds.Meeting_AssignmentPollConfigID(id).Lazy(&c.AssignmentPollConfigID) ds.Meeting_AssignmentPollDefaultMethod(id).Lazy(&c.AssignmentPollDefaultMethod) - ds.Meeting_AssignmentPollDefaultOnehundredPercentBase(id).Lazy(&c.AssignmentPollDefaultOnehundredPercentBase) - ds.Meeting_AssignmentPollDefaultType(id).Lazy(&c.AssignmentPollDefaultType) - ds.Meeting_AssignmentPollEnableMaxVotesPerOption(id).Lazy(&c.AssignmentPollEnableMaxVotesPerOption) - ds.Meeting_AssignmentPollSortPollResultByVotes(id).Lazy(&c.AssignmentPollSortPollResultByVotes) ds.Meeting_AssignmentsExportPreamble(id).Lazy(&c.AssignmentsExportPreamble) ds.Meeting_AssignmentsExportTitle(id).Lazy(&c.AssignmentsExportTitle) ds.Meeting_ChatGroupIDs(id).Lazy(&c.ChatGroupIDs) @@ -1910,8 +2276,8 @@ func (b *meetingBuilder) lazy(ds *Fetch, id int) *Meeting { ds.Meeting_DefaultProjectorMotionBlockIDs(id).Lazy(&c.DefaultProjectorMotionBlockIDs) ds.Meeting_DefaultProjectorMotionIDs(id).Lazy(&c.DefaultProjectorMotionIDs) ds.Meeting_DefaultProjectorMotionPollIDs(id).Lazy(&c.DefaultProjectorMotionPollIDs) - ds.Meeting_DefaultProjectorPollIDs(id).Lazy(&c.DefaultProjectorPollIDs) ds.Meeting_DefaultProjectorTopicIDs(id).Lazy(&c.DefaultProjectorTopicIDs) + ds.Meeting_DefaultProjectorTopicPollIDs(id).Lazy(&c.DefaultProjectorTopicPollIDs) ds.Meeting_Description(id).Lazy(&c.Description) ds.Meeting_EnableAnonymous(id).Lazy(&c.EnableAnonymous) ds.Meeting_EndTime(id).Lazy(&c.EndTime) @@ -1985,15 +2351,7 @@ func (b *meetingBuilder) lazy(ds *Fetch, id int) *Meeting { ds.Meeting_MotionCommentSectionIDs(id).Lazy(&c.MotionCommentSectionIDs) ds.Meeting_MotionEditorIDs(id).Lazy(&c.MotionEditorIDs) ds.Meeting_MotionIDs(id).Lazy(&c.MotionIDs) - ds.Meeting_MotionPollBallotPaperNumber(id).Lazy(&c.MotionPollBallotPaperNumber) - ds.Meeting_MotionPollBallotPaperSelection(id).Lazy(&c.MotionPollBallotPaperSelection) - ds.Meeting_MotionPollDefaultBackend(id).Lazy(&c.MotionPollDefaultBackend) - ds.Meeting_MotionPollDefaultGroupIDs(id).Lazy(&c.MotionPollDefaultGroupIDs) - ds.Meeting_MotionPollDefaultMethod(id).Lazy(&c.MotionPollDefaultMethod) - ds.Meeting_MotionPollDefaultOnehundredPercentBase(id).Lazy(&c.MotionPollDefaultOnehundredPercentBase) - ds.Meeting_MotionPollDefaultType(id).Lazy(&c.MotionPollDefaultType) - ds.Meeting_MotionPollProjectionMaxColumns(id).Lazy(&c.MotionPollProjectionMaxColumns) - ds.Meeting_MotionPollProjectionNameOrderFirst(id).Lazy(&c.MotionPollProjectionNameOrderFirst) + ds.Meeting_MotionPollConfigID(id).Lazy(&c.MotionPollConfigID) ds.Meeting_MotionStateIDs(id).Lazy(&c.MotionStateIDs) ds.Meeting_MotionSubmitterIDs(id).Lazy(&c.MotionSubmitterIDs) ds.Meeting_MotionSupporterIDs(id).Lazy(&c.MotionSupporterIDs) @@ -2038,24 +2396,19 @@ func (b *meetingBuilder) lazy(ds *Fetch, id int) *Meeting { ds.Meeting_MotionsShowSequentialNumber(id).Lazy(&c.MotionsShowSequentialNumber) ds.Meeting_MotionsSupportersMinAmount(id).Lazy(&c.MotionsSupportersMinAmount) ds.Meeting_Name(id).Lazy(&c.Name) - ds.Meeting_OptionIDs(id).Lazy(&c.OptionIDs) ds.Meeting_OrganizationTagIDs(id).Lazy(&c.OrganizationTagIDs) ds.Meeting_PersonalNoteIDs(id).Lazy(&c.PersonalNoteIDs) ds.Meeting_PointOfOrderCategoryIDs(id).Lazy(&c.PointOfOrderCategoryIDs) - ds.Meeting_PollBallotPaperNumber(id).Lazy(&c.PollBallotPaperNumber) - ds.Meeting_PollBallotPaperSelection(id).Lazy(&c.PollBallotPaperSelection) - ds.Meeting_PollCandidateIDs(id).Lazy(&c.PollCandidateIDs) - ds.Meeting_PollCandidateListIDs(id).Lazy(&c.PollCandidateListIDs) ds.Meeting_PollCountdownID(id).Lazy(&c.PollCountdownID) ds.Meeting_PollCoupleCountdown(id).Lazy(&c.PollCoupleCountdown) - ds.Meeting_PollDefaultBackend(id).Lazy(&c.PollDefaultBackend) - ds.Meeting_PollDefaultGroupIDs(id).Lazy(&c.PollDefaultGroupIDs) + ds.Meeting_PollDefaultAllowInvalid(id).Lazy(&c.PollDefaultAllowInvalid) + ds.Meeting_PollDefaultAllowVoteSplit(id).Lazy(&c.PollDefaultAllowVoteSplit) + ds.Meeting_PollDefaultIDs(id).Lazy(&c.PollDefaultIDs) ds.Meeting_PollDefaultLiveVotingEnabled(id).Lazy(&c.PollDefaultLiveVotingEnabled) - ds.Meeting_PollDefaultMethod(id).Lazy(&c.PollDefaultMethod) - ds.Meeting_PollDefaultOnehundredPercentBase(id).Lazy(&c.PollDefaultOnehundredPercentBase) - ds.Meeting_PollDefaultType(id).Lazy(&c.PollDefaultType) + ds.Meeting_PollEnableMaxVotesPerOption(id).Lazy(&c.PollEnableMaxVotesPerOption) ds.Meeting_PollIDs(id).Lazy(&c.PollIDs) - ds.Meeting_PollSortPollResultByVotes(id).Lazy(&c.PollSortPollResultByVotes) + ds.Meeting_PollProjectionMaxColumns(id).Lazy(&c.PollProjectionMaxColumns) + ds.Meeting_PollProjectionNameOrderFirst(id).Lazy(&c.PollProjectionNameOrderFirst) ds.Meeting_PresentUserIDs(id).Lazy(&c.PresentUserIDs) ds.Meeting_ProjectionIDs(id).Lazy(&c.ProjectionIDs) ds.Meeting_ProjectorCountdownDefaultTime(id).Lazy(&c.ProjectorCountdownDefaultTime) @@ -2073,7 +2426,8 @@ func (b *meetingBuilder) lazy(ds *Fetch, id int) *Meeting { ds.Meeting_TemplateForOrganizationID(id).Lazy(&c.TemplateForOrganizationID) ds.Meeting_TimeZone(id).Lazy(&c.TimeZone) ds.Meeting_TopicIDs(id).Lazy(&c.TopicIDs) - ds.Meeting_TopicPollDefaultGroupIDs(id).Lazy(&c.TopicPollDefaultGroupIDs) + ds.Meeting_TopicPollConfigID(id).Lazy(&c.TopicPollConfigID) + ds.Meeting_TopicPollDefaultMethod(id).Lazy(&c.TopicPollDefaultMethod) ds.Meeting_UserIDs(id).Lazy(&c.UserIDs) ds.Meeting_UsersAllowSelfSetPresent(id).Lazy(&c.UsersAllowSelfSetPresent) ds.Meeting_UsersEmailBody(id).Lazy(&c.UsersEmailBody) @@ -2092,7 +2446,6 @@ func (b *meetingBuilder) lazy(ds *Fetch, id int) *Meeting { ds.Meeting_UsersPdfWlanEncryption(id).Lazy(&c.UsersPdfWlanEncryption) ds.Meeting_UsersPdfWlanPassword(id).Lazy(&c.UsersPdfWlanPassword) ds.Meeting_UsersPdfWlanSsid(id).Lazy(&c.UsersPdfWlanSsid) - ds.Meeting_VoteIDs(id).Lazy(&c.VoteIDs) ds.Meeting_WelcomeText(id).Lazy(&c.WelcomeText) ds.Meeting_WelcomeTitle(id).Lazy(&c.WelcomeTitle) return &c @@ -2105,1072 +2458,1109 @@ func (b *meetingBuilder) Preload(rel builderWrapperI) *meetingBuilder { func (b *meetingBuilder) AdminGroup() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "AdminGroupID", relField: "AdminGroup", + conv: func(p *Group) Group { return *p }, }, } } func (b *meetingBuilder) AgendaItemList() *agendaItemBuilder { return &agendaItemBuilder{ - builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem]{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ fetch: b.fetch, parent: b, idField: "AgendaItemIDs", relField: "AgendaItemList", many: true, + conv: func(p *AgendaItem) AgendaItem { return *p }, }, } } func (b *meetingBuilder) AllProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "AllProjectionIDs", relField: "AllProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *meetingBuilder) AnonymousGroup() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "AnonymousGroupID", relField: "AnonymousGroup", + conv: func(p *Group) Group { return *p }, }, } } func (b *meetingBuilder) AssignmentCandidateList() *assignmentCandidateBuilder { return &assignmentCandidateBuilder{ - builder: builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate]{ + builder: builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate, *AssignmentCandidate]{ fetch: b.fetch, parent: b, idField: "AssignmentCandidateIDs", relField: "AssignmentCandidateList", many: true, + conv: func(p *AssignmentCandidate) AssignmentCandidate { return *p }, }, } } func (b *meetingBuilder) AssignmentList() *assignmentBuilder { return &assignmentBuilder{ - builder: builder[assignmentBuilder, *assignmentBuilder, Assignment]{ + builder: builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment]{ fetch: b.fetch, parent: b, idField: "AssignmentIDs", relField: "AssignmentList", many: true, + conv: func(p *Assignment) Assignment { return *p }, }, } } -func (b *meetingBuilder) AssignmentPollDefaultGroupList() *groupBuilder { - return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ +func (b *meetingBuilder) AssignmentPollConfig() *meetingPollDefaultBuilder { + return &meetingPollDefaultBuilder{ + builder: builder[meetingPollDefaultBuilder, *meetingPollDefaultBuilder, MeetingPollDefault, *MeetingPollDefault]{ fetch: b.fetch, parent: b, - idField: "AssignmentPollDefaultGroupIDs", - relField: "AssignmentPollDefaultGroupList", - many: true, + idField: "AssignmentPollConfigID", + relField: "AssignmentPollConfig", + conv: func(p *MeetingPollDefault) MeetingPollDefault { return *p }, }, } } func (b *meetingBuilder) ChatGroupList() *chatGroupBuilder { return &chatGroupBuilder{ - builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup]{ + builder: builder[chatGroupBuilder, *chatGroupBuilder, ChatGroup, *ChatGroup]{ fetch: b.fetch, parent: b, idField: "ChatGroupIDs", relField: "ChatGroupList", many: true, + conv: func(p *ChatGroup) ChatGroup { return *p }, }, } } func (b *meetingBuilder) ChatMessageList() *chatMessageBuilder { return &chatMessageBuilder{ - builder: builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage]{ + builder: builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage, *ChatMessage]{ fetch: b.fetch, parent: b, idField: "ChatMessageIDs", relField: "ChatMessageList", many: true, + conv: func(p *ChatMessage) ChatMessage { return *p }, }, } } func (b *meetingBuilder) Committee() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "CommitteeID", relField: "Committee", + conv: func(p *Committee) Committee { return *p }, }, } } func (b *meetingBuilder) DefaultGroup() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "DefaultGroupID", relField: "DefaultGroup", + conv: func(p *Group) Group { return *p }, }, } } func (b *meetingBuilder) DefaultMeetingForCommittee() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "DefaultMeetingForCommitteeID", relField: "DefaultMeetingForCommittee", + conv: func(p *Committee) Committee { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorAgendaItemListList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorAgendaItemListIDs", relField: "DefaultProjectorAgendaItemListList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorAmendmentList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorAmendmentIDs", relField: "DefaultProjectorAmendmentList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorAssignmentList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorAssignmentIDs", relField: "DefaultProjectorAssignmentList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorAssignmentPollList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorAssignmentPollIDs", relField: "DefaultProjectorAssignmentPollList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorCountdownList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorCountdownIDs", relField: "DefaultProjectorCountdownList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorCurrentLosList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorCurrentLosIDs", relField: "DefaultProjectorCurrentLosList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorListOfSpeakersList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorListOfSpeakersIDs", relField: "DefaultProjectorListOfSpeakersList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorMediafileList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorMediafileIDs", relField: "DefaultProjectorMediafileList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorMessageList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorMessageIDs", relField: "DefaultProjectorMessageList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorMotionBlockList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorMotionBlockIDs", relField: "DefaultProjectorMotionBlockList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorMotionList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorMotionIDs", relField: "DefaultProjectorMotionList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) DefaultProjectorMotionPollList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "DefaultProjectorMotionPollIDs", relField: "DefaultProjectorMotionPollList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } -func (b *meetingBuilder) DefaultProjectorPollList() *projectorBuilder { +func (b *meetingBuilder) DefaultProjectorTopicList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, - idField: "DefaultProjectorPollIDs", - relField: "DefaultProjectorPollList", + idField: "DefaultProjectorTopicIDs", + relField: "DefaultProjectorTopicList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } -func (b *meetingBuilder) DefaultProjectorTopicList() *projectorBuilder { +func (b *meetingBuilder) DefaultProjectorTopicPollList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, - idField: "DefaultProjectorTopicIDs", - relField: "DefaultProjectorTopicList", + idField: "DefaultProjectorTopicPollIDs", + relField: "DefaultProjectorTopicPollList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) FontBold() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "FontBoldID", relField: "FontBold", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) FontBoldItalic() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "FontBoldItalicID", relField: "FontBoldItalic", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) FontChyronSpeakerName() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "FontChyronSpeakerNameID", relField: "FontChyronSpeakerName", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) FontItalic() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "FontItalicID", relField: "FontItalic", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) FontMonospace() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "FontMonospaceID", relField: "FontMonospace", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) FontProjectorH1() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "FontProjectorH1ID", relField: "FontProjectorH1", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) FontProjectorH2() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "FontProjectorH2ID", relField: "FontProjectorH2", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) FontRegular() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "FontRegularID", relField: "FontRegular", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) ForwardedMotionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "ForwardedMotionIDs", relField: "ForwardedMotionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *meetingBuilder) GroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "GroupIDs", relField: "GroupList", many: true, + conv: func(p *Group) Group { return *p }, }, } } func (b *meetingBuilder) IsActiveInOrganization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "IsActiveInOrganizationID", relField: "IsActiveInOrganization", + conv: func(p *Organization) Organization { return *p }, }, } } func (b *meetingBuilder) IsArchivedInOrganization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "IsArchivedInOrganizationID", relField: "IsArchivedInOrganization", + conv: func(p *Organization) Organization { return *p }, }, } } func (b *meetingBuilder) ListOfSpeakersCountdown() *projectorCountdownBuilder { return &projectorCountdownBuilder{ - builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown]{ + builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown, *ProjectorCountdown]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersCountdownID", relField: "ListOfSpeakersCountdown", + conv: func(p *ProjectorCountdown) ProjectorCountdown { return *p }, }, } } func (b *meetingBuilder) ListOfSpeakersList() *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersIDs", relField: "ListOfSpeakersList", many: true, + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } func (b *meetingBuilder) LogoPdfBallotPaper() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "LogoPdfBallotPaperID", relField: "LogoPdfBallotPaper", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) LogoPdfFooterL() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "LogoPdfFooterLID", relField: "LogoPdfFooterL", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) LogoPdfFooterR() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "LogoPdfFooterRID", relField: "LogoPdfFooterR", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) LogoPdfHeaderL() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "LogoPdfHeaderLID", relField: "LogoPdfHeaderL", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) LogoPdfHeaderR() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "LogoPdfHeaderRID", relField: "LogoPdfHeaderR", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) LogoProjectorHeader() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "LogoProjectorHeaderID", relField: "LogoProjectorHeader", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) LogoProjectorMain() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "LogoProjectorMainID", relField: "LogoProjectorMain", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) LogoWebHeader() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "LogoWebHeaderID", relField: "LogoWebHeader", + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) MediafileList() *mediafileBuilder { return &mediafileBuilder{ - builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile]{ + builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile, *Mediafile]{ fetch: b.fetch, parent: b, idField: "MediafileIDs", relField: "MediafileList", many: true, + conv: func(p *Mediafile) Mediafile { return *p }, }, } } func (b *meetingBuilder) MeetingMediafileList() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "MeetingMediafileIDs", relField: "MeetingMediafileList", many: true, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *meetingBuilder) MeetingUserList() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserIDs", relField: "MeetingUserList", many: true, + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *meetingBuilder) MotionBlockList() *motionBlockBuilder { return &motionBlockBuilder{ - builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock]{ + builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock, *MotionBlock]{ fetch: b.fetch, parent: b, idField: "MotionBlockIDs", relField: "MotionBlockList", many: true, + conv: func(p *MotionBlock) MotionBlock { return *p }, }, } } func (b *meetingBuilder) MotionCategoryList() *motionCategoryBuilder { return &motionCategoryBuilder{ - builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory]{ + builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory, *MotionCategory]{ fetch: b.fetch, parent: b, idField: "MotionCategoryIDs", relField: "MotionCategoryList", many: true, + conv: func(p *MotionCategory) MotionCategory { return *p }, }, } } func (b *meetingBuilder) MotionChangeRecommendationList() *motionChangeRecommendationBuilder { return &motionChangeRecommendationBuilder{ - builder: builder[motionChangeRecommendationBuilder, *motionChangeRecommendationBuilder, MotionChangeRecommendation]{ + builder: builder[motionChangeRecommendationBuilder, *motionChangeRecommendationBuilder, MotionChangeRecommendation, *MotionChangeRecommendation]{ fetch: b.fetch, parent: b, idField: "MotionChangeRecommendationIDs", relField: "MotionChangeRecommendationList", many: true, + conv: func(p *MotionChangeRecommendation) MotionChangeRecommendation { return *p }, }, } } func (b *meetingBuilder) MotionCommentList() *motionCommentBuilder { return &motionCommentBuilder{ - builder: builder[motionCommentBuilder, *motionCommentBuilder, MotionComment]{ + builder: builder[motionCommentBuilder, *motionCommentBuilder, MotionComment, *MotionComment]{ fetch: b.fetch, parent: b, idField: "MotionCommentIDs", relField: "MotionCommentList", many: true, + conv: func(p *MotionComment) MotionComment { return *p }, }, } } func (b *meetingBuilder) MotionCommentSectionList() *motionCommentSectionBuilder { return &motionCommentSectionBuilder{ - builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection]{ + builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection, *MotionCommentSection]{ fetch: b.fetch, parent: b, idField: "MotionCommentSectionIDs", relField: "MotionCommentSectionList", many: true, + conv: func(p *MotionCommentSection) MotionCommentSection { return *p }, }, } } func (b *meetingBuilder) MotionEditorList() *motionEditorBuilder { return &motionEditorBuilder{ - builder: builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor]{ + builder: builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor, *MotionEditor]{ fetch: b.fetch, parent: b, idField: "MotionEditorIDs", relField: "MotionEditorList", many: true, + conv: func(p *MotionEditor) MotionEditor { return *p }, }, } } func (b *meetingBuilder) MotionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionIDs", relField: "MotionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } -func (b *meetingBuilder) MotionPollDefaultGroupList() *groupBuilder { - return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ +func (b *meetingBuilder) MotionPollConfig() *meetingPollDefaultBuilder { + return &meetingPollDefaultBuilder{ + builder: builder[meetingPollDefaultBuilder, *meetingPollDefaultBuilder, MeetingPollDefault, *MeetingPollDefault]{ fetch: b.fetch, parent: b, - idField: "MotionPollDefaultGroupIDs", - relField: "MotionPollDefaultGroupList", - many: true, + idField: "MotionPollConfigID", + relField: "MotionPollConfig", + conv: func(p *MeetingPollDefault) MeetingPollDefault { return *p }, }, } } func (b *meetingBuilder) MotionStateList() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "MotionStateIDs", relField: "MotionStateList", many: true, + conv: func(p *MotionState) MotionState { return *p }, }, } } func (b *meetingBuilder) MotionSubmitterList() *motionSubmitterBuilder { return &motionSubmitterBuilder{ - builder: builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter]{ + builder: builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter, *MotionSubmitter]{ fetch: b.fetch, parent: b, idField: "MotionSubmitterIDs", relField: "MotionSubmitterList", many: true, + conv: func(p *MotionSubmitter) MotionSubmitter { return *p }, }, } } func (b *meetingBuilder) MotionSupporterList() *motionSupporterBuilder { return &motionSupporterBuilder{ - builder: builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter]{ + builder: builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter, *MotionSupporter]{ fetch: b.fetch, parent: b, idField: "MotionSupporterIDs", relField: "MotionSupporterList", many: true, + conv: func(p *MotionSupporter) MotionSupporter { return *p }, }, } } func (b *meetingBuilder) MotionWorkflowList() *motionWorkflowBuilder { return &motionWorkflowBuilder{ - builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow]{ + builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow, *MotionWorkflow]{ fetch: b.fetch, parent: b, idField: "MotionWorkflowIDs", relField: "MotionWorkflowList", many: true, + conv: func(p *MotionWorkflow) MotionWorkflow { return *p }, }, } } func (b *meetingBuilder) MotionWorkingGroupSpeakerList() *motionWorkingGroupSpeakerBuilder { return &motionWorkingGroupSpeakerBuilder{ - builder: builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker]{ + builder: builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker, *MotionWorkingGroupSpeaker]{ fetch: b.fetch, parent: b, idField: "MotionWorkingGroupSpeakerIDs", relField: "MotionWorkingGroupSpeakerList", many: true, + conv: func(p *MotionWorkingGroupSpeaker) MotionWorkingGroupSpeaker { return *p }, }, } } func (b *meetingBuilder) MotionsDefaultAmendmentWorkflow() *motionWorkflowBuilder { return &motionWorkflowBuilder{ - builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow]{ + builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow, *MotionWorkflow]{ fetch: b.fetch, parent: b, idField: "MotionsDefaultAmendmentWorkflowID", relField: "MotionsDefaultAmendmentWorkflow", + conv: func(p *MotionWorkflow) MotionWorkflow { return *p }, }, } } func (b *meetingBuilder) MotionsDefaultWorkflow() *motionWorkflowBuilder { return &motionWorkflowBuilder{ - builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow]{ + builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow, *MotionWorkflow]{ fetch: b.fetch, parent: b, idField: "MotionsDefaultWorkflowID", relField: "MotionsDefaultWorkflow", - }, - } -} - -func (b *meetingBuilder) OptionList() *optionBuilder { - return &optionBuilder{ - builder: builder[optionBuilder, *optionBuilder, Option]{ - fetch: b.fetch, - parent: b, - idField: "OptionIDs", - relField: "OptionList", - many: true, + conv: func(p *MotionWorkflow) MotionWorkflow { return *p }, }, } } func (b *meetingBuilder) OrganizationTagList() *organizationTagBuilder { return &organizationTagBuilder{ - builder: builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag]{ + builder: builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag, *OrganizationTag]{ fetch: b.fetch, parent: b, idField: "OrganizationTagIDs", relField: "OrganizationTagList", many: true, + conv: func(p *OrganizationTag) OrganizationTag { return *p }, }, } } func (b *meetingBuilder) PersonalNoteList() *personalNoteBuilder { return &personalNoteBuilder{ - builder: builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote]{ + builder: builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote, *PersonalNote]{ fetch: b.fetch, parent: b, idField: "PersonalNoteIDs", relField: "PersonalNoteList", many: true, + conv: func(p *PersonalNote) PersonalNote { return *p }, }, } } func (b *meetingBuilder) PointOfOrderCategoryList() *pointOfOrderCategoryBuilder { return &pointOfOrderCategoryBuilder{ - builder: builder[pointOfOrderCategoryBuilder, *pointOfOrderCategoryBuilder, PointOfOrderCategory]{ + builder: builder[pointOfOrderCategoryBuilder, *pointOfOrderCategoryBuilder, PointOfOrderCategory, *PointOfOrderCategory]{ fetch: b.fetch, parent: b, idField: "PointOfOrderCategoryIDs", relField: "PointOfOrderCategoryList", many: true, - }, - } -} - -func (b *meetingBuilder) PollCandidateList() *pollCandidateBuilder { - return &pollCandidateBuilder{ - builder: builder[pollCandidateBuilder, *pollCandidateBuilder, PollCandidate]{ - fetch: b.fetch, - parent: b, - idField: "PollCandidateIDs", - relField: "PollCandidateList", - many: true, - }, - } -} - -func (b *meetingBuilder) PollCandidateListList() *pollCandidateListBuilder { - return &pollCandidateListBuilder{ - builder: builder[pollCandidateListBuilder, *pollCandidateListBuilder, PollCandidateList]{ - fetch: b.fetch, - parent: b, - idField: "PollCandidateListIDs", - relField: "PollCandidateListList", - many: true, + conv: func(p *PointOfOrderCategory) PointOfOrderCategory { return *p }, }, } } func (b *meetingBuilder) PollCountdown() *projectorCountdownBuilder { return &projectorCountdownBuilder{ - builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown]{ + builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown, *ProjectorCountdown]{ fetch: b.fetch, parent: b, idField: "PollCountdownID", relField: "PollCountdown", + conv: func(p *ProjectorCountdown) ProjectorCountdown { return *p }, }, } } -func (b *meetingBuilder) PollDefaultGroupList() *groupBuilder { - return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ +func (b *meetingBuilder) PollDefaultList() *meetingPollDefaultBuilder { + return &meetingPollDefaultBuilder{ + builder: builder[meetingPollDefaultBuilder, *meetingPollDefaultBuilder, MeetingPollDefault, *MeetingPollDefault]{ fetch: b.fetch, parent: b, - idField: "PollDefaultGroupIDs", - relField: "PollDefaultGroupList", + idField: "PollDefaultIDs", + relField: "PollDefaultList", many: true, + conv: func(p *MeetingPollDefault) MeetingPollDefault { return *p }, }, } } func (b *meetingBuilder) PollList() *pollBuilder { return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, idField: "PollIDs", relField: "PollList", many: true, + conv: func(p *Poll) Poll { return *p }, }, } } func (b *meetingBuilder) PresentUserList() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "PresentUserIDs", relField: "PresentUserList", many: true, + conv: func(p *User) User { return *p }, }, } } func (b *meetingBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *meetingBuilder) ProjectorCountdownList() *projectorCountdownBuilder { return &projectorCountdownBuilder{ - builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown]{ + builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown, *ProjectorCountdown]{ fetch: b.fetch, parent: b, idField: "ProjectorCountdownIDs", relField: "ProjectorCountdownList", many: true, + conv: func(p *ProjectorCountdown) ProjectorCountdown { return *p }, }, } } func (b *meetingBuilder) ProjectorList() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "ProjectorIDs", relField: "ProjectorList", many: true, + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) ProjectorMessageList() *projectorMessageBuilder { return &projectorMessageBuilder{ - builder: builder[projectorMessageBuilder, *projectorMessageBuilder, ProjectorMessage]{ + builder: builder[projectorMessageBuilder, *projectorMessageBuilder, ProjectorMessage, *ProjectorMessage]{ fetch: b.fetch, parent: b, idField: "ProjectorMessageIDs", relField: "ProjectorMessageList", many: true, + conv: func(p *ProjectorMessage) ProjectorMessage { return *p }, }, } } func (b *meetingBuilder) ReferenceProjector() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "ReferenceProjectorID", relField: "ReferenceProjector", + conv: func(p *Projector) Projector { return *p }, }, } } func (b *meetingBuilder) RelevantHistoryEntryList() *historyEntryBuilder { return &historyEntryBuilder{ - builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry]{ + builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry]{ fetch: b.fetch, parent: b, idField: "RelevantHistoryEntryIDs", relField: "RelevantHistoryEntryList", many: true, + conv: func(p *HistoryEntry) HistoryEntry { return *p }, }, } } func (b *meetingBuilder) SpeakerList() *speakerBuilder { return &speakerBuilder{ - builder: builder[speakerBuilder, *speakerBuilder, Speaker]{ + builder: builder[speakerBuilder, *speakerBuilder, Speaker, *Speaker]{ fetch: b.fetch, parent: b, idField: "SpeakerIDs", relField: "SpeakerList", many: true, + conv: func(p *Speaker) Speaker { return *p }, }, } } func (b *meetingBuilder) StructureLevelList() *structureLevelBuilder { return &structureLevelBuilder{ - builder: builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel]{ + builder: builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel, *StructureLevel]{ fetch: b.fetch, parent: b, idField: "StructureLevelIDs", relField: "StructureLevelList", many: true, + conv: func(p *StructureLevel) StructureLevel { return *p }, }, } } func (b *meetingBuilder) StructureLevelListOfSpeakersList() *structureLevelListOfSpeakersBuilder { return &structureLevelListOfSpeakersBuilder{ - builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers]{ + builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers, *StructureLevelListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "StructureLevelListOfSpeakersIDs", relField: "StructureLevelListOfSpeakersList", many: true, + conv: func(p *StructureLevelListOfSpeakers) StructureLevelListOfSpeakers { return *p }, }, } } func (b *meetingBuilder) TagList() *tagBuilder { return &tagBuilder{ - builder: builder[tagBuilder, *tagBuilder, Tag]{ + builder: builder[tagBuilder, *tagBuilder, Tag, *Tag]{ fetch: b.fetch, parent: b, idField: "TagIDs", relField: "TagList", many: true, + conv: func(p *Tag) Tag { return *p }, }, } } func (b *meetingBuilder) TemplateForOrganization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "TemplateForOrganizationID", relField: "TemplateForOrganization", + conv: func(p *Organization) Organization { return *p }, }, } } func (b *meetingBuilder) TopicList() *topicBuilder { return &topicBuilder{ - builder: builder[topicBuilder, *topicBuilder, Topic]{ + builder: builder[topicBuilder, *topicBuilder, Topic, *Topic]{ fetch: b.fetch, parent: b, idField: "TopicIDs", relField: "TopicList", many: true, + conv: func(p *Topic) Topic { return *p }, }, } } -func (b *meetingBuilder) TopicPollDefaultGroupList() *groupBuilder { - return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ +func (b *meetingBuilder) TopicPollConfig() *meetingPollDefaultBuilder { + return &meetingPollDefaultBuilder{ + builder: builder[meetingPollDefaultBuilder, *meetingPollDefaultBuilder, MeetingPollDefault, *MeetingPollDefault]{ fetch: b.fetch, parent: b, - idField: "TopicPollDefaultGroupIDs", - relField: "TopicPollDefaultGroupList", - many: true, + idField: "TopicPollConfigID", + relField: "TopicPollConfig", + conv: func(p *MeetingPollDefault) MeetingPollDefault { return *p }, }, } } func (b *meetingBuilder) UserList() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "UserIDs", relField: "UserList", many: true, - }, - } -} - -func (b *meetingBuilder) VoteList() *voteBuilder { - return &voteBuilder{ - builder: builder[voteBuilder, *voteBuilder, Vote]{ - fetch: b.fetch, - parent: b, - idField: "VoteIDs", - relField: "VoteList", - many: true, + conv: func(p *User) User { return *p }, }, } } func (r *Fetch) Meeting(ids ...int) *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ ids: ids, fetch: r, + conv: func(p *Meeting) Meeting { return *p }, }, } } @@ -3227,10 +3617,11 @@ type MeetingMediafile struct { } type meetingMediafileBuilder struct { - builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile] + builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile] } -func (b *meetingMediafileBuilder) lazy(ds *Fetch, id int) *MeetingMediafile { +func (b *meetingMediafileBuilder) lazy(ds *Fetch, idI any) *MeetingMediafile { + id := idI.(int) c := MeetingMediafile{} ds.MeetingMediafile_AccessGroupIDs(id).Lazy(&c.AccessGroupIDs) ds.MeetingMediafile_AttachmentIDs(id).Lazy(&c.AttachmentIDs) @@ -3267,254 +3658,398 @@ func (b *meetingMediafileBuilder) Preload(rel builderWrapperI) *meetingMediafile func (b *meetingMediafileBuilder) AccessGroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "AccessGroupIDs", relField: "AccessGroupList", many: true, + conv: func(p *Group) Group { return *p }, }, } } func (b *meetingMediafileBuilder) InheritedAccessGroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "InheritedAccessGroupIDs", relField: "InheritedAccessGroupList", many: true, + conv: func(p *Group) Group { return *p }, }, } } func (b *meetingMediafileBuilder) ListOfSpeakers() *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersID", relField: "ListOfSpeakers", + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } func (b *meetingMediafileBuilder) Mediafile() *mediafileBuilder { return &mediafileBuilder{ - builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile]{ + builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile, *Mediafile]{ fetch: b.fetch, parent: b, idField: "MediafileID", relField: "Mediafile", + conv: func(p *Mediafile) Mediafile { return *p }, }, } } func (b *meetingMediafileBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsFontBoldInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsFontBoldInMeetingID", relField: "UsedAsFontBoldInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsFontBoldItalicInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsFontBoldItalicInMeetingID", relField: "UsedAsFontBoldItalicInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsFontChyronSpeakerNameInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsFontChyronSpeakerNameInMeetingID", relField: "UsedAsFontChyronSpeakerNameInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsFontItalicInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsFontItalicInMeetingID", relField: "UsedAsFontItalicInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsFontMonospaceInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsFontMonospaceInMeetingID", relField: "UsedAsFontMonospaceInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsFontProjectorH1InMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsFontProjectorH1InMeetingID", relField: "UsedAsFontProjectorH1InMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsFontProjectorH2InMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsFontProjectorH2InMeetingID", relField: "UsedAsFontProjectorH2InMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsFontRegularInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsFontRegularInMeetingID", relField: "UsedAsFontRegularInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsLogoPdfBallotPaperInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsLogoPdfBallotPaperInMeetingID", relField: "UsedAsLogoPdfBallotPaperInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsLogoPdfFooterLInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsLogoPdfFooterLInMeetingID", relField: "UsedAsLogoPdfFooterLInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsLogoPdfFooterRInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsLogoPdfFooterRInMeetingID", relField: "UsedAsLogoPdfFooterRInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsLogoPdfHeaderLInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsLogoPdfHeaderLInMeetingID", relField: "UsedAsLogoPdfHeaderLInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsLogoPdfHeaderRInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsLogoPdfHeaderRInMeetingID", relField: "UsedAsLogoPdfHeaderRInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsLogoProjectorHeaderInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsLogoProjectorHeaderInMeetingID", relField: "UsedAsLogoProjectorHeaderInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsLogoProjectorMainInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsLogoProjectorMainInMeetingID", relField: "UsedAsLogoProjectorMainInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingMediafileBuilder) UsedAsLogoWebHeaderInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsLogoWebHeaderInMeetingID", relField: "UsedAsLogoWebHeaderInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (r *Fetch) MeetingMediafile(ids ...int) *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ + ids: ids, + fetch: r, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, + }, + } +} + +// MeetingPollDefault has all fields from meeting_poll_default. +type MeetingPollDefault struct { + AllowAbstain bool + AllowNota bool + DisplayChart string + GroupIDs []int + ID int + MeetingID int + OnehundredPercentBase string + SortResultByVotes bool + StrikeOut bool + UsedAsAssignmentPollConfigInMeetingID dsfetch.Maybe[int] + UsedAsMotionPollConfigInMeetingID dsfetch.Maybe[int] + UsedAsTopicPollConfigInMeetingID dsfetch.Maybe[int] + Visibility string + GroupList []Group + Meeting *Meeting + UsedAsAssignmentPollConfigInMeeting *dsfetch.Maybe[Meeting] + UsedAsMotionPollConfigInMeeting *dsfetch.Maybe[Meeting] + UsedAsTopicPollConfigInMeeting *dsfetch.Maybe[Meeting] +} + +type meetingPollDefaultBuilder struct { + builder[meetingPollDefaultBuilder, *meetingPollDefaultBuilder, MeetingPollDefault, *MeetingPollDefault] +} + +func (b *meetingPollDefaultBuilder) lazy(ds *Fetch, idI any) *MeetingPollDefault { + id := idI.(int) + c := MeetingPollDefault{} + ds.MeetingPollDefault_AllowAbstain(id).Lazy(&c.AllowAbstain) + ds.MeetingPollDefault_AllowNota(id).Lazy(&c.AllowNota) + ds.MeetingPollDefault_DisplayChart(id).Lazy(&c.DisplayChart) + ds.MeetingPollDefault_GroupIDs(id).Lazy(&c.GroupIDs) + ds.MeetingPollDefault_ID(id).Lazy(&c.ID) + ds.MeetingPollDefault_MeetingID(id).Lazy(&c.MeetingID) + ds.MeetingPollDefault_OnehundredPercentBase(id).Lazy(&c.OnehundredPercentBase) + ds.MeetingPollDefault_SortResultByVotes(id).Lazy(&c.SortResultByVotes) + ds.MeetingPollDefault_StrikeOut(id).Lazy(&c.StrikeOut) + ds.MeetingPollDefault_UsedAsAssignmentPollConfigInMeetingID(id).Lazy(&c.UsedAsAssignmentPollConfigInMeetingID) + ds.MeetingPollDefault_UsedAsMotionPollConfigInMeetingID(id).Lazy(&c.UsedAsMotionPollConfigInMeetingID) + ds.MeetingPollDefault_UsedAsTopicPollConfigInMeetingID(id).Lazy(&c.UsedAsTopicPollConfigInMeetingID) + ds.MeetingPollDefault_Visibility(id).Lazy(&c.Visibility) + return &c +} + +func (b *meetingPollDefaultBuilder) Preload(rel builderWrapperI) *meetingPollDefaultBuilder { + b.builder.Preload(rel) + return b +} + +func (b *meetingPollDefaultBuilder) GroupList() *groupBuilder { + return &groupBuilder{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ + fetch: b.fetch, + parent: b, + idField: "GroupIDs", + relField: "GroupList", + many: true, + conv: func(p *Group) Group { return *p }, + }, + } +} + +func (b *meetingPollDefaultBuilder) Meeting() *meetingBuilder { + return &meetingBuilder{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ + fetch: b.fetch, + parent: b, + idField: "MeetingID", + relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, + }, + } +} + +func (b *meetingPollDefaultBuilder) UsedAsAssignmentPollConfigInMeeting() *meetingBuilder { + return &meetingBuilder{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ + fetch: b.fetch, + parent: b, + idField: "UsedAsAssignmentPollConfigInMeetingID", + relField: "UsedAsAssignmentPollConfigInMeeting", + conv: func(p *Meeting) Meeting { return *p }, + }, + } +} + +func (b *meetingPollDefaultBuilder) UsedAsMotionPollConfigInMeeting() *meetingBuilder { + return &meetingBuilder{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ + fetch: b.fetch, + parent: b, + idField: "UsedAsMotionPollConfigInMeetingID", + relField: "UsedAsMotionPollConfigInMeeting", + conv: func(p *Meeting) Meeting { return *p }, + }, + } +} + +func (b *meetingPollDefaultBuilder) UsedAsTopicPollConfigInMeeting() *meetingBuilder { + return &meetingBuilder{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ + fetch: b.fetch, + parent: b, + idField: "UsedAsTopicPollConfigInMeetingID", + relField: "UsedAsTopicPollConfigInMeeting", + conv: func(p *Meeting) Meeting { return *p }, + }, + } +} + +func (r *Fetch) MeetingPollDefault(ids ...int) *meetingPollDefaultBuilder { + return &meetingPollDefaultBuilder{ + builder: builder[meetingPollDefaultBuilder, *meetingPollDefaultBuilder, MeetingPollDefault, *MeetingPollDefault]{ ids: ids, fetch: r, + conv: func(p *MeetingPollDefault) MeetingPollDefault { return *p }, }, } } @@ -3522,10 +4057,12 @@ func (r *Fetch) MeetingMediafile(ids ...int) *meetingMediafileBuilder { // MeetingUser has all fields from meeting_user. type MeetingUser struct { AboutMe string + ActingBallotIDs []int AssignmentCandidateIDs []int ChatMessageIDs []int Comment string GroupIDs []int + HistoryEntryIDs []int ID int LockedOut bool MeetingID int @@ -3535,21 +4072,27 @@ type MeetingUser struct { MotionWorkingGroupSpeakerIDs []int Number string PersonalNoteIDs []int + PollOptionIDs []int + RepresentedBallotIDs []int SpeakerIDs []int StructureLevelIDs []int UserID int VoteDelegatedToID dsfetch.Maybe[int] VoteDelegationsFromIDs []int VoteWeight decimal.Decimal + ActingBallotList []PollBallotUser AssignmentCandidateList []AssignmentCandidate ChatMessageList []ChatMessage GroupList []Group + HistoryEntryList []HistoryEntry Meeting *Meeting MotionEditorList []MotionEditor MotionSubmitterList []MotionSubmitter MotionSupporterList []MotionSupporter MotionWorkingGroupSpeakerList []MotionWorkingGroupSpeaker PersonalNoteList []PersonalNote + PollOptionList []PollOption + RepresentedBallotList []PollBallotUser SpeakerList []Speaker StructureLevelList []StructureLevel User *User @@ -3558,16 +4101,19 @@ type MeetingUser struct { } type meetingUserBuilder struct { - builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser] + builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser] } -func (b *meetingUserBuilder) lazy(ds *Fetch, id int) *MeetingUser { +func (b *meetingUserBuilder) lazy(ds *Fetch, idI any) *MeetingUser { + id := idI.(int) c := MeetingUser{} ds.MeetingUser_AboutMe(id).Lazy(&c.AboutMe) + ds.MeetingUser_ActingBallotIDs(id).Lazy(&c.ActingBallotIDs) ds.MeetingUser_AssignmentCandidateIDs(id).Lazy(&c.AssignmentCandidateIDs) ds.MeetingUser_ChatMessageIDs(id).Lazy(&c.ChatMessageIDs) ds.MeetingUser_Comment(id).Lazy(&c.Comment) ds.MeetingUser_GroupIDs(id).Lazy(&c.GroupIDs) + ds.MeetingUser_HistoryEntryIDs(id).Lazy(&c.HistoryEntryIDs) ds.MeetingUser_ID(id).Lazy(&c.ID) ds.MeetingUser_LockedOut(id).Lazy(&c.LockedOut) ds.MeetingUser_MeetingID(id).Lazy(&c.MeetingID) @@ -3577,6 +4123,8 @@ func (b *meetingUserBuilder) lazy(ds *Fetch, id int) *MeetingUser { ds.MeetingUser_MotionWorkingGroupSpeakerIDs(id).Lazy(&c.MotionWorkingGroupSpeakerIDs) ds.MeetingUser_Number(id).Lazy(&c.Number) ds.MeetingUser_PersonalNoteIDs(id).Lazy(&c.PersonalNoteIDs) + ds.MeetingUser_PollOptionIDs(id).Lazy(&c.PollOptionIDs) + ds.MeetingUser_RepresentedBallotIDs(id).Lazy(&c.RepresentedBallotIDs) ds.MeetingUser_SpeakerIDs(id).Lazy(&c.SpeakerIDs) ds.MeetingUser_StructureLevelIDs(id).Lazy(&c.StructureLevelIDs) ds.MeetingUser_UserID(id).Lazy(&c.UserID) @@ -3591,176 +4139,243 @@ func (b *meetingUserBuilder) Preload(rel builderWrapperI) *meetingUserBuilder { return b } +func (b *meetingUserBuilder) ActingBallotList() *pollBallotUserBuilder { + return &pollBallotUserBuilder{ + builder: builder[pollBallotUserBuilder, *pollBallotUserBuilder, PollBallotUser, *PollBallotUser]{ + fetch: b.fetch, + parent: b, + idField: "ActingBallotIDs", + relField: "ActingBallotList", + many: true, + conv: func(p *PollBallotUser) PollBallotUser { return *p }, + }, + } +} + func (b *meetingUserBuilder) AssignmentCandidateList() *assignmentCandidateBuilder { return &assignmentCandidateBuilder{ - builder: builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate]{ + builder: builder[assignmentCandidateBuilder, *assignmentCandidateBuilder, AssignmentCandidate, *AssignmentCandidate]{ fetch: b.fetch, parent: b, idField: "AssignmentCandidateIDs", relField: "AssignmentCandidateList", many: true, + conv: func(p *AssignmentCandidate) AssignmentCandidate { return *p }, }, } } func (b *meetingUserBuilder) ChatMessageList() *chatMessageBuilder { return &chatMessageBuilder{ - builder: builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage]{ + builder: builder[chatMessageBuilder, *chatMessageBuilder, ChatMessage, *ChatMessage]{ fetch: b.fetch, parent: b, idField: "ChatMessageIDs", relField: "ChatMessageList", many: true, + conv: func(p *ChatMessage) ChatMessage { return *p }, }, } } func (b *meetingUserBuilder) GroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "GroupIDs", relField: "GroupList", many: true, + conv: func(p *Group) Group { return *p }, + }, + } +} + +func (b *meetingUserBuilder) HistoryEntryList() *historyEntryBuilder { + return &historyEntryBuilder{ + builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry]{ + fetch: b.fetch, + parent: b, + idField: "HistoryEntryIDs", + relField: "HistoryEntryList", + many: true, + conv: func(p *HistoryEntry) HistoryEntry { return *p }, }, } } func (b *meetingUserBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *meetingUserBuilder) MotionEditorList() *motionEditorBuilder { return &motionEditorBuilder{ - builder: builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor]{ + builder: builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor, *MotionEditor]{ fetch: b.fetch, parent: b, idField: "MotionEditorIDs", relField: "MotionEditorList", many: true, + conv: func(p *MotionEditor) MotionEditor { return *p }, }, } } func (b *meetingUserBuilder) MotionSubmitterList() *motionSubmitterBuilder { return &motionSubmitterBuilder{ - builder: builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter]{ + builder: builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter, *MotionSubmitter]{ fetch: b.fetch, parent: b, idField: "MotionSubmitterIDs", relField: "MotionSubmitterList", many: true, + conv: func(p *MotionSubmitter) MotionSubmitter { return *p }, }, } } func (b *meetingUserBuilder) MotionSupporterList() *motionSupporterBuilder { return &motionSupporterBuilder{ - builder: builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter]{ + builder: builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter, *MotionSupporter]{ fetch: b.fetch, parent: b, idField: "MotionSupporterIDs", relField: "MotionSupporterList", many: true, + conv: func(p *MotionSupporter) MotionSupporter { return *p }, }, } } func (b *meetingUserBuilder) MotionWorkingGroupSpeakerList() *motionWorkingGroupSpeakerBuilder { return &motionWorkingGroupSpeakerBuilder{ - builder: builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker]{ + builder: builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker, *MotionWorkingGroupSpeaker]{ fetch: b.fetch, parent: b, idField: "MotionWorkingGroupSpeakerIDs", relField: "MotionWorkingGroupSpeakerList", many: true, + conv: func(p *MotionWorkingGroupSpeaker) MotionWorkingGroupSpeaker { return *p }, }, } } func (b *meetingUserBuilder) PersonalNoteList() *personalNoteBuilder { return &personalNoteBuilder{ - builder: builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote]{ + builder: builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote, *PersonalNote]{ fetch: b.fetch, parent: b, idField: "PersonalNoteIDs", relField: "PersonalNoteList", many: true, + conv: func(p *PersonalNote) PersonalNote { return *p }, + }, + } +} + +func (b *meetingUserBuilder) PollOptionList() *pollOptionBuilder { + return &pollOptionBuilder{ + builder: builder[pollOptionBuilder, *pollOptionBuilder, PollOption, *PollOption]{ + fetch: b.fetch, + parent: b, + idField: "PollOptionIDs", + relField: "PollOptionList", + many: true, + conv: func(p *PollOption) PollOption { return *p }, + }, + } +} + +func (b *meetingUserBuilder) RepresentedBallotList() *pollBallotUserBuilder { + return &pollBallotUserBuilder{ + builder: builder[pollBallotUserBuilder, *pollBallotUserBuilder, PollBallotUser, *PollBallotUser]{ + fetch: b.fetch, + parent: b, + idField: "RepresentedBallotIDs", + relField: "RepresentedBallotList", + many: true, + conv: func(p *PollBallotUser) PollBallotUser { return *p }, }, } } func (b *meetingUserBuilder) SpeakerList() *speakerBuilder { return &speakerBuilder{ - builder: builder[speakerBuilder, *speakerBuilder, Speaker]{ + builder: builder[speakerBuilder, *speakerBuilder, Speaker, *Speaker]{ fetch: b.fetch, parent: b, idField: "SpeakerIDs", relField: "SpeakerList", many: true, + conv: func(p *Speaker) Speaker { return *p }, }, } } func (b *meetingUserBuilder) StructureLevelList() *structureLevelBuilder { return &structureLevelBuilder{ - builder: builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel]{ + builder: builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel, *StructureLevel]{ fetch: b.fetch, parent: b, idField: "StructureLevelIDs", relField: "StructureLevelList", many: true, + conv: func(p *StructureLevel) StructureLevel { return *p }, }, } } func (b *meetingUserBuilder) User() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "UserID", relField: "User", + conv: func(p *User) User { return *p }, }, } } func (b *meetingUserBuilder) VoteDelegatedTo() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "VoteDelegatedToID", relField: "VoteDelegatedTo", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *meetingUserBuilder) VoteDelegationsFromList() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "VoteDelegationsFromIDs", relField: "VoteDelegationsFromList", many: true, + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (r *Fetch) MeetingUser(ids ...int) *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ ids: ids, fetch: r, + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } @@ -3795,7 +4410,6 @@ type Motion struct { ModifiedFinalVersion string Number string NumberValue int - OptionIDs []int OriginID dsfetch.Maybe[int] OriginMeetingID dsfetch.Maybe[int] PersonalNoteIDs []int @@ -3839,7 +4453,6 @@ type Motion struct { LeadMotion *dsfetch.Maybe[Motion] ListOfSpeakers *ListOfSpeakers Meeting *Meeting - OptionList []Option Origin *dsfetch.Maybe[Motion] OriginMeeting *dsfetch.Maybe[Meeting] PersonalNoteList []PersonalNote @@ -3858,10 +4471,11 @@ type Motion struct { } type motionBuilder struct { - builder[motionBuilder, *motionBuilder, Motion] + builder[motionBuilder, *motionBuilder, Motion, *Motion] } -func (b *motionBuilder) lazy(ds *Fetch, id int) *Motion { +func (b *motionBuilder) lazy(ds *Fetch, idI any) *Motion { + id := idI.(int) c := Motion{} ds.Motion_AdditionalSubmitter(id).Lazy(&c.AdditionalSubmitter) ds.Motion_AgendaItemID(id).Lazy(&c.AgendaItemID) @@ -3891,7 +4505,6 @@ func (b *motionBuilder) lazy(ds *Fetch, id int) *Motion { ds.Motion_ModifiedFinalVersion(id).Lazy(&c.ModifiedFinalVersion) ds.Motion_Number(id).Lazy(&c.Number) ds.Motion_NumberValue(id).Lazy(&c.NumberValue) - ds.Motion_OptionIDs(id).Lazy(&c.OptionIDs) ds.Motion_OriginID(id).Lazy(&c.OriginID) ds.Motion_OriginMeetingID(id).Lazy(&c.OriginMeetingID) ds.Motion_PersonalNoteIDs(id).Lazy(&c.PersonalNoteIDs) @@ -3929,382 +4542,402 @@ func (b *motionBuilder) Preload(rel builderWrapperI) *motionBuilder { func (b *motionBuilder) AgendaItem() *agendaItemBuilder { return &agendaItemBuilder{ - builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem]{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ fetch: b.fetch, parent: b, idField: "AgendaItemID", relField: "AgendaItem", + conv: func(p *AgendaItem) AgendaItem { return *p }, }, } } func (b *motionBuilder) AllDerivedMotionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "AllDerivedMotionIDs", relField: "AllDerivedMotionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) AllOriginList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "AllOriginIDs", relField: "AllOriginList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) AmendmentList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "AmendmentIDs", relField: "AmendmentList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) AttachmentMeetingMediafileList() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "AttachmentMeetingMediafileIDs", relField: "AttachmentMeetingMediafileList", many: true, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *motionBuilder) Block() *motionBlockBuilder { return &motionBlockBuilder{ - builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock]{ + builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock, *MotionBlock]{ fetch: b.fetch, parent: b, idField: "BlockID", relField: "Block", + conv: func(p *MotionBlock) MotionBlock { return *p }, }, } } func (b *motionBuilder) Category() *motionCategoryBuilder { return &motionCategoryBuilder{ - builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory]{ + builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory, *MotionCategory]{ fetch: b.fetch, parent: b, idField: "CategoryID", relField: "Category", + conv: func(p *MotionCategory) MotionCategory { return *p }, }, } } func (b *motionBuilder) ChangeRecommendationList() *motionChangeRecommendationBuilder { return &motionChangeRecommendationBuilder{ - builder: builder[motionChangeRecommendationBuilder, *motionChangeRecommendationBuilder, MotionChangeRecommendation]{ + builder: builder[motionChangeRecommendationBuilder, *motionChangeRecommendationBuilder, MotionChangeRecommendation, *MotionChangeRecommendation]{ fetch: b.fetch, parent: b, idField: "ChangeRecommendationIDs", relField: "ChangeRecommendationList", many: true, + conv: func(p *MotionChangeRecommendation) MotionChangeRecommendation { return *p }, }, } } func (b *motionBuilder) CommentList() *motionCommentBuilder { return &motionCommentBuilder{ - builder: builder[motionCommentBuilder, *motionCommentBuilder, MotionComment]{ + builder: builder[motionCommentBuilder, *motionCommentBuilder, MotionComment, *MotionComment]{ fetch: b.fetch, parent: b, idField: "CommentIDs", relField: "CommentList", many: true, + conv: func(p *MotionComment) MotionComment { return *p }, }, } } func (b *motionBuilder) DerivedMotionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "DerivedMotionIDs", relField: "DerivedMotionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) EditorList() *motionEditorBuilder { return &motionEditorBuilder{ - builder: builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor]{ + builder: builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor, *MotionEditor]{ fetch: b.fetch, parent: b, idField: "EditorIDs", relField: "EditorList", many: true, + conv: func(p *MotionEditor) MotionEditor { return *p }, }, } } func (b *motionBuilder) HistoryEntryList() *historyEntryBuilder { return &historyEntryBuilder{ - builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry]{ + builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry]{ fetch: b.fetch, parent: b, idField: "HistoryEntryIDs", relField: "HistoryEntryList", many: true, + conv: func(p *HistoryEntry) HistoryEntry { return *p }, }, } } func (b *motionBuilder) IDenticalMotionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "IDenticalMotionIDs", relField: "IDenticalMotionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) LeadMotion() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "LeadMotionID", relField: "LeadMotion", + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) ListOfSpeakers() *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersID", relField: "ListOfSpeakers", + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } func (b *motionBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } -func (b *motionBuilder) OptionList() *optionBuilder { - return &optionBuilder{ - builder: builder[optionBuilder, *optionBuilder, Option]{ +func (b *motionBuilder) Origin() *motionBuilder { + return &motionBuilder{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, - idField: "OptionIDs", - relField: "OptionList", - many: true, - }, - } -} - -func (b *motionBuilder) Origin() *motionBuilder { - return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ - fetch: b.fetch, - parent: b, - idField: "OriginID", - relField: "Origin", + idField: "OriginID", + relField: "Origin", + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) OriginMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "OriginMeetingID", relField: "OriginMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionBuilder) PersonalNoteList() *personalNoteBuilder { return &personalNoteBuilder{ - builder: builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote]{ + builder: builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote, *PersonalNote]{ fetch: b.fetch, parent: b, idField: "PersonalNoteIDs", relField: "PersonalNoteList", many: true, + conv: func(p *PersonalNote) PersonalNote { return *p }, }, } } func (b *motionBuilder) PollList() *pollBuilder { return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, idField: "PollIDs", relField: "PollList", many: true, + conv: func(p *Poll) Poll { return *p }, }, } } func (b *motionBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *motionBuilder) Recommendation() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "RecommendationID", relField: "Recommendation", + conv: func(p *MotionState) MotionState { return *p }, }, } } func (b *motionBuilder) ReferencedInMotionRecommendationExtensionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "ReferencedInMotionRecommendationExtensionIDs", relField: "ReferencedInMotionRecommendationExtensionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) ReferencedInMotionStateExtensionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "ReferencedInMotionStateExtensionIDs", relField: "ReferencedInMotionStateExtensionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) SortChildList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "SortChildIDs", relField: "SortChildList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) SortParent() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "SortParentID", relField: "SortParent", + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBuilder) State() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "StateID", relField: "State", + conv: func(p *MotionState) MotionState { return *p }, }, } } func (b *motionBuilder) SubmitterList() *motionSubmitterBuilder { return &motionSubmitterBuilder{ - builder: builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter]{ + builder: builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter, *MotionSubmitter]{ fetch: b.fetch, parent: b, idField: "SubmitterIDs", relField: "SubmitterList", many: true, + conv: func(p *MotionSubmitter) MotionSubmitter { return *p }, }, } } func (b *motionBuilder) SupporterList() *motionSupporterBuilder { return &motionSupporterBuilder{ - builder: builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter]{ + builder: builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter, *MotionSupporter]{ fetch: b.fetch, parent: b, idField: "SupporterIDs", relField: "SupporterList", many: true, + conv: func(p *MotionSupporter) MotionSupporter { return *p }, }, } } func (b *motionBuilder) TagList() *tagBuilder { return &tagBuilder{ - builder: builder[tagBuilder, *tagBuilder, Tag]{ + builder: builder[tagBuilder, *tagBuilder, Tag, *Tag]{ fetch: b.fetch, parent: b, idField: "TagIDs", relField: "TagList", many: true, + conv: func(p *Tag) Tag { return *p }, }, } } func (b *motionBuilder) WorkingGroupSpeakerList() *motionWorkingGroupSpeakerBuilder { return &motionWorkingGroupSpeakerBuilder{ - builder: builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker]{ + builder: builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker, *MotionWorkingGroupSpeaker]{ fetch: b.fetch, parent: b, idField: "WorkingGroupSpeakerIDs", relField: "WorkingGroupSpeakerList", many: true, + conv: func(p *MotionWorkingGroupSpeaker) MotionWorkingGroupSpeaker { return *p }, }, } } func (r *Fetch) Motion(ids ...int) *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ ids: ids, fetch: r, + conv: func(p *Motion) Motion { return *p }, }, } } @@ -4328,10 +4961,11 @@ type MotionBlock struct { } type motionBlockBuilder struct { - builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock] + builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock, *MotionBlock] } -func (b *motionBlockBuilder) lazy(ds *Fetch, id int) *MotionBlock { +func (b *motionBlockBuilder) lazy(ds *Fetch, idI any) *MotionBlock { + id := idI.(int) c := MotionBlock{} ds.MotionBlock_AgendaItemID(id).Lazy(&c.AgendaItemID) ds.MotionBlock_ID(id).Lazy(&c.ID) @@ -4352,66 +4986,72 @@ func (b *motionBlockBuilder) Preload(rel builderWrapperI) *motionBlockBuilder { func (b *motionBlockBuilder) AgendaItem() *agendaItemBuilder { return &agendaItemBuilder{ - builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem]{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ fetch: b.fetch, parent: b, idField: "AgendaItemID", relField: "AgendaItem", + conv: func(p *AgendaItem) AgendaItem { return *p }, }, } } func (b *motionBlockBuilder) ListOfSpeakers() *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersID", relField: "ListOfSpeakers", + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } func (b *motionBlockBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionBlockBuilder) MotionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionIDs", relField: "MotionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionBlockBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (r *Fetch) MotionBlock(ids ...int) *motionBlockBuilder { return &motionBlockBuilder{ - builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock]{ + builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock, *MotionBlock]{ ids: ids, fetch: r, + conv: func(p *MotionBlock) MotionBlock { return *p }, }, } } @@ -4435,10 +5075,11 @@ type MotionCategory struct { } type motionCategoryBuilder struct { - builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory] + builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory, *MotionCategory] } -func (b *motionCategoryBuilder) lazy(ds *Fetch, id int) *MotionCategory { +func (b *motionCategoryBuilder) lazy(ds *Fetch, idI any) *MotionCategory { + id := idI.(int) c := MotionCategory{} ds.MotionCategory_ChildIDs(id).Lazy(&c.ChildIDs) ds.MotionCategory_ID(id).Lazy(&c.ID) @@ -4460,55 +5101,60 @@ func (b *motionCategoryBuilder) Preload(rel builderWrapperI) *motionCategoryBuil func (b *motionCategoryBuilder) ChildList() *motionCategoryBuilder { return &motionCategoryBuilder{ - builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory]{ + builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory, *MotionCategory]{ fetch: b.fetch, parent: b, idField: "ChildIDs", relField: "ChildList", many: true, + conv: func(p *MotionCategory) MotionCategory { return *p }, }, } } func (b *motionCategoryBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionCategoryBuilder) MotionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionIDs", relField: "MotionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionCategoryBuilder) Parent() *motionCategoryBuilder { return &motionCategoryBuilder{ - builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory]{ + builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory, *MotionCategory]{ fetch: b.fetch, parent: b, idField: "ParentID", relField: "Parent", + conv: func(p *MotionCategory) MotionCategory { return *p }, }, } } func (r *Fetch) MotionCategory(ids ...int) *motionCategoryBuilder { return &motionCategoryBuilder{ - builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory]{ + builder: builder[motionCategoryBuilder, *motionCategoryBuilder, MotionCategory, *MotionCategory]{ ids: ids, fetch: r, + conv: func(p *MotionCategory) MotionCategory { return *p }, }, } } @@ -4531,10 +5177,11 @@ type MotionChangeRecommendation struct { } type motionChangeRecommendationBuilder struct { - builder[motionChangeRecommendationBuilder, *motionChangeRecommendationBuilder, MotionChangeRecommendation] + builder[motionChangeRecommendationBuilder, *motionChangeRecommendationBuilder, MotionChangeRecommendation, *MotionChangeRecommendation] } -func (b *motionChangeRecommendationBuilder) lazy(ds *Fetch, id int) *MotionChangeRecommendation { +func (b *motionChangeRecommendationBuilder) lazy(ds *Fetch, idI any) *MotionChangeRecommendation { + id := idI.(int) c := MotionChangeRecommendation{} ds.MotionChangeRecommendation_CreationTime(id).Lazy(&c.CreationTime) ds.MotionChangeRecommendation_ID(id).Lazy(&c.ID) @@ -4557,31 +5204,34 @@ func (b *motionChangeRecommendationBuilder) Preload(rel builderWrapperI) *motion func (b *motionChangeRecommendationBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionChangeRecommendationBuilder) Motion() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionID", relField: "Motion", + conv: func(p *Motion) Motion { return *p }, }, } } func (r *Fetch) MotionChangeRecommendation(ids ...int) *motionChangeRecommendationBuilder { return &motionChangeRecommendationBuilder{ - builder: builder[motionChangeRecommendationBuilder, *motionChangeRecommendationBuilder, MotionChangeRecommendation]{ + builder: builder[motionChangeRecommendationBuilder, *motionChangeRecommendationBuilder, MotionChangeRecommendation, *MotionChangeRecommendation]{ ids: ids, fetch: r, + conv: func(p *MotionChangeRecommendation) MotionChangeRecommendation { return *p }, }, } } @@ -4599,10 +5249,11 @@ type MotionComment struct { } type motionCommentBuilder struct { - builder[motionCommentBuilder, *motionCommentBuilder, MotionComment] + builder[motionCommentBuilder, *motionCommentBuilder, MotionComment, *MotionComment] } -func (b *motionCommentBuilder) lazy(ds *Fetch, id int) *MotionComment { +func (b *motionCommentBuilder) lazy(ds *Fetch, idI any) *MotionComment { + id := idI.(int) c := MotionComment{} ds.MotionComment_Comment(id).Lazy(&c.Comment) ds.MotionComment_ID(id).Lazy(&c.ID) @@ -4619,42 +5270,46 @@ func (b *motionCommentBuilder) Preload(rel builderWrapperI) *motionCommentBuilde func (b *motionCommentBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionCommentBuilder) Motion() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionID", relField: "Motion", + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionCommentBuilder) Section() *motionCommentSectionBuilder { return &motionCommentSectionBuilder{ - builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection]{ + builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection, *MotionCommentSection]{ fetch: b.fetch, parent: b, idField: "SectionID", relField: "Section", + conv: func(p *MotionCommentSection) MotionCommentSection { return *p }, }, } } func (r *Fetch) MotionComment(ids ...int) *motionCommentBuilder { return &motionCommentBuilder{ - builder: builder[motionCommentBuilder, *motionCommentBuilder, MotionComment]{ + builder: builder[motionCommentBuilder, *motionCommentBuilder, MotionComment, *MotionComment]{ ids: ids, fetch: r, + conv: func(p *MotionComment) MotionComment { return *p }, }, } } @@ -4677,10 +5332,11 @@ type MotionCommentSection struct { } type motionCommentSectionBuilder struct { - builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection] + builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection, *MotionCommentSection] } -func (b *motionCommentSectionBuilder) lazy(ds *Fetch, id int) *MotionCommentSection { +func (b *motionCommentSectionBuilder) lazy(ds *Fetch, idI any) *MotionCommentSection { + id := idI.(int) c := MotionCommentSection{} ds.MotionCommentSection_CommentIDs(id).Lazy(&c.CommentIDs) ds.MotionCommentSection_ID(id).Lazy(&c.ID) @@ -4701,56 +5357,61 @@ func (b *motionCommentSectionBuilder) Preload(rel builderWrapperI) *motionCommen func (b *motionCommentSectionBuilder) CommentList() *motionCommentBuilder { return &motionCommentBuilder{ - builder: builder[motionCommentBuilder, *motionCommentBuilder, MotionComment]{ + builder: builder[motionCommentBuilder, *motionCommentBuilder, MotionComment, *MotionComment]{ fetch: b.fetch, parent: b, idField: "CommentIDs", relField: "CommentList", many: true, + conv: func(p *MotionComment) MotionComment { return *p }, }, } } func (b *motionCommentSectionBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionCommentSectionBuilder) ReadGroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "ReadGroupIDs", relField: "ReadGroupList", many: true, + conv: func(p *Group) Group { return *p }, }, } } func (b *motionCommentSectionBuilder) WriteGroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "WriteGroupIDs", relField: "WriteGroupList", many: true, + conv: func(p *Group) Group { return *p }, }, } } func (r *Fetch) MotionCommentSection(ids ...int) *motionCommentSectionBuilder { return &motionCommentSectionBuilder{ - builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection]{ + builder: builder[motionCommentSectionBuilder, *motionCommentSectionBuilder, MotionCommentSection, *MotionCommentSection]{ ids: ids, fetch: r, + conv: func(p *MotionCommentSection) MotionCommentSection { return *p }, }, } } @@ -4768,10 +5429,11 @@ type MotionEditor struct { } type motionEditorBuilder struct { - builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor] + builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor, *MotionEditor] } -func (b *motionEditorBuilder) lazy(ds *Fetch, id int) *MotionEditor { +func (b *motionEditorBuilder) lazy(ds *Fetch, idI any) *MotionEditor { + id := idI.(int) c := MotionEditor{} ds.MotionEditor_ID(id).Lazy(&c.ID) ds.MotionEditor_MeetingID(id).Lazy(&c.MeetingID) @@ -4788,42 +5450,46 @@ func (b *motionEditorBuilder) Preload(rel builderWrapperI) *motionEditorBuilder func (b *motionEditorBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionEditorBuilder) MeetingUser() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserID", relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *motionEditorBuilder) Motion() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionID", relField: "Motion", + conv: func(p *Motion) Motion { return *p }, }, } } func (r *Fetch) MotionEditor(ids ...int) *motionEditorBuilder { return &motionEditorBuilder{ - builder: builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor]{ + builder: builder[motionEditorBuilder, *motionEditorBuilder, MotionEditor, *MotionEditor]{ ids: ids, fetch: r, + conv: func(p *MotionEditor) MotionEditor { return *p }, }, } } @@ -4869,10 +5535,11 @@ type MotionState struct { } type motionStateBuilder struct { - builder[motionStateBuilder, *motionStateBuilder, MotionState] + builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState] } -func (b *motionStateBuilder) lazy(ds *Fetch, id int) *MotionState { +func (b *motionStateBuilder) lazy(ds *Fetch, idI any) *MotionState { + id := idI.(int) c := MotionState{} ds.MotionState_AllowAmendmentForwarding(id).Lazy(&c.AllowAmendmentForwarding) ds.MotionState_AllowCreatePoll(id).Lazy(&c.AllowCreatePoll) @@ -4911,113 +5578,123 @@ func (b *motionStateBuilder) Preload(rel builderWrapperI) *motionStateBuilder { func (b *motionStateBuilder) FirstStateOfWorkflow() *motionWorkflowBuilder { return &motionWorkflowBuilder{ - builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow]{ + builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow, *MotionWorkflow]{ fetch: b.fetch, parent: b, idField: "FirstStateOfWorkflowID", relField: "FirstStateOfWorkflow", + conv: func(p *MotionWorkflow) MotionWorkflow { return *p }, }, } } func (b *motionStateBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionStateBuilder) MotionList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionIDs", relField: "MotionList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionStateBuilder) MotionRecommendationList() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionRecommendationIDs", relField: "MotionRecommendationList", many: true, + conv: func(p *Motion) Motion { return *p }, }, } } func (b *motionStateBuilder) NextStateList() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "NextStateIDs", relField: "NextStateList", many: true, + conv: func(p *MotionState) MotionState { return *p }, }, } } func (b *motionStateBuilder) PreviousStateList() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "PreviousStateIDs", relField: "PreviousStateList", many: true, + conv: func(p *MotionState) MotionState { return *p }, }, } } func (b *motionStateBuilder) SubmitterWithdrawBackList() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "SubmitterWithdrawBackIDs", relField: "SubmitterWithdrawBackList", many: true, + conv: func(p *MotionState) MotionState { return *p }, }, } } func (b *motionStateBuilder) SubmitterWithdrawState() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "SubmitterWithdrawStateID", relField: "SubmitterWithdrawState", + conv: func(p *MotionState) MotionState { return *p }, }, } } func (b *motionStateBuilder) Workflow() *motionWorkflowBuilder { return &motionWorkflowBuilder{ - builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow]{ + builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow, *MotionWorkflow]{ fetch: b.fetch, parent: b, idField: "WorkflowID", relField: "Workflow", + conv: func(p *MotionWorkflow) MotionWorkflow { return *p }, }, } } func (r *Fetch) MotionState(ids ...int) *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ ids: ids, fetch: r, + conv: func(p *MotionState) MotionState { return *p }, }, } } @@ -5035,10 +5712,11 @@ type MotionSubmitter struct { } type motionSubmitterBuilder struct { - builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter] + builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter, *MotionSubmitter] } -func (b *motionSubmitterBuilder) lazy(ds *Fetch, id int) *MotionSubmitter { +func (b *motionSubmitterBuilder) lazy(ds *Fetch, idI any) *MotionSubmitter { + id := idI.(int) c := MotionSubmitter{} ds.MotionSubmitter_ID(id).Lazy(&c.ID) ds.MotionSubmitter_MeetingID(id).Lazy(&c.MeetingID) @@ -5055,42 +5733,46 @@ func (b *motionSubmitterBuilder) Preload(rel builderWrapperI) *motionSubmitterBu func (b *motionSubmitterBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionSubmitterBuilder) MeetingUser() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserID", relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *motionSubmitterBuilder) Motion() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionID", relField: "Motion", + conv: func(p *Motion) Motion { return *p }, }, } } func (r *Fetch) MotionSubmitter(ids ...int) *motionSubmitterBuilder { return &motionSubmitterBuilder{ - builder: builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter]{ + builder: builder[motionSubmitterBuilder, *motionSubmitterBuilder, MotionSubmitter, *MotionSubmitter]{ ids: ids, fetch: r, + conv: func(p *MotionSubmitter) MotionSubmitter { return *p }, }, } } @@ -5107,10 +5789,11 @@ type MotionSupporter struct { } type motionSupporterBuilder struct { - builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter] + builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter, *MotionSupporter] } -func (b *motionSupporterBuilder) lazy(ds *Fetch, id int) *MotionSupporter { +func (b *motionSupporterBuilder) lazy(ds *Fetch, idI any) *MotionSupporter { + id := idI.(int) c := MotionSupporter{} ds.MotionSupporter_ID(id).Lazy(&c.ID) ds.MotionSupporter_MeetingID(id).Lazy(&c.MeetingID) @@ -5126,42 +5809,46 @@ func (b *motionSupporterBuilder) Preload(rel builderWrapperI) *motionSupporterBu func (b *motionSupporterBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionSupporterBuilder) MeetingUser() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserID", relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *motionSupporterBuilder) Motion() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionID", relField: "Motion", + conv: func(p *Motion) Motion { return *p }, }, } } func (r *Fetch) MotionSupporter(ids ...int) *motionSupporterBuilder { return &motionSupporterBuilder{ - builder: builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter]{ + builder: builder[motionSupporterBuilder, *motionSupporterBuilder, MotionSupporter, *MotionSupporter]{ ids: ids, fetch: r, + conv: func(p *MotionSupporter) MotionSupporter { return *p }, }, } } @@ -5184,10 +5871,11 @@ type MotionWorkflow struct { } type motionWorkflowBuilder struct { - builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow] + builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow, *MotionWorkflow] } -func (b *motionWorkflowBuilder) lazy(ds *Fetch, id int) *MotionWorkflow { +func (b *motionWorkflowBuilder) lazy(ds *Fetch, idI any) *MotionWorkflow { + id := idI.(int) c := MotionWorkflow{} ds.MotionWorkflow_DefaultAmendmentWorkflowMeetingID(id).Lazy(&c.DefaultAmendmentWorkflowMeetingID) ds.MotionWorkflow_DefaultWorkflowMeetingID(id).Lazy(&c.DefaultWorkflowMeetingID) @@ -5207,65 +5895,71 @@ func (b *motionWorkflowBuilder) Preload(rel builderWrapperI) *motionWorkflowBuil func (b *motionWorkflowBuilder) DefaultAmendmentWorkflowMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "DefaultAmendmentWorkflowMeetingID", relField: "DefaultAmendmentWorkflowMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionWorkflowBuilder) DefaultWorkflowMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "DefaultWorkflowMeetingID", relField: "DefaultWorkflowMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionWorkflowBuilder) FirstState() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "FirstStateID", relField: "FirstState", + conv: func(p *MotionState) MotionState { return *p }, }, } } func (b *motionWorkflowBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionWorkflowBuilder) StateList() *motionStateBuilder { return &motionStateBuilder{ - builder: builder[motionStateBuilder, *motionStateBuilder, MotionState]{ + builder: builder[motionStateBuilder, *motionStateBuilder, MotionState, *MotionState]{ fetch: b.fetch, parent: b, idField: "StateIDs", relField: "StateList", many: true, + conv: func(p *MotionState) MotionState { return *p }, }, } } func (r *Fetch) MotionWorkflow(ids ...int) *motionWorkflowBuilder { return &motionWorkflowBuilder{ - builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow]{ + builder: builder[motionWorkflowBuilder, *motionWorkflowBuilder, MotionWorkflow, *MotionWorkflow]{ ids: ids, fetch: r, + conv: func(p *MotionWorkflow) MotionWorkflow { return *p }, }, } } @@ -5283,10 +5977,11 @@ type MotionWorkingGroupSpeaker struct { } type motionWorkingGroupSpeakerBuilder struct { - builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker] + builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker, *MotionWorkingGroupSpeaker] } -func (b *motionWorkingGroupSpeakerBuilder) lazy(ds *Fetch, id int) *MotionWorkingGroupSpeaker { +func (b *motionWorkingGroupSpeakerBuilder) lazy(ds *Fetch, idI any) *MotionWorkingGroupSpeaker { + id := idI.(int) c := MotionWorkingGroupSpeaker{} ds.MotionWorkingGroupSpeaker_ID(id).Lazy(&c.ID) ds.MotionWorkingGroupSpeaker_MeetingID(id).Lazy(&c.MeetingID) @@ -5303,140 +5998,46 @@ func (b *motionWorkingGroupSpeakerBuilder) Preload(rel builderWrapperI) *motionW func (b *motionWorkingGroupSpeakerBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *motionWorkingGroupSpeakerBuilder) MeetingUser() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserID", relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *motionWorkingGroupSpeakerBuilder) Motion() *motionBuilder { return &motionBuilder{ - builder: builder[motionBuilder, *motionBuilder, Motion]{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ fetch: b.fetch, parent: b, idField: "MotionID", relField: "Motion", + conv: func(p *Motion) Motion { return *p }, }, } } func (r *Fetch) MotionWorkingGroupSpeaker(ids ...int) *motionWorkingGroupSpeakerBuilder { return &motionWorkingGroupSpeakerBuilder{ - builder: builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker]{ - ids: ids, - fetch: r, - }, - } -} - -// Option has all fields from option. -type Option struct { - Abstain decimal.Decimal - ContentObjectID dsfetch.Maybe[string] - ID int - MeetingID int - No decimal.Decimal - PollID dsfetch.Maybe[int] - Text string - UsedAsGlobalOptionInPollID dsfetch.Maybe[int] - VoteIDs []int - Weight int - Yes decimal.Decimal - Meeting *Meeting - Poll *dsfetch.Maybe[Poll] - UsedAsGlobalOptionInPoll *dsfetch.Maybe[Poll] - VoteList []Vote -} - -type optionBuilder struct { - builder[optionBuilder, *optionBuilder, Option] -} - -func (b *optionBuilder) lazy(ds *Fetch, id int) *Option { - c := Option{} - ds.Option_Abstain(id).Lazy(&c.Abstain) - ds.Option_ContentObjectID(id).Lazy(&c.ContentObjectID) - ds.Option_ID(id).Lazy(&c.ID) - ds.Option_MeetingID(id).Lazy(&c.MeetingID) - ds.Option_No(id).Lazy(&c.No) - ds.Option_PollID(id).Lazy(&c.PollID) - ds.Option_Text(id).Lazy(&c.Text) - ds.Option_UsedAsGlobalOptionInPollID(id).Lazy(&c.UsedAsGlobalOptionInPollID) - ds.Option_VoteIDs(id).Lazy(&c.VoteIDs) - ds.Option_Weight(id).Lazy(&c.Weight) - ds.Option_Yes(id).Lazy(&c.Yes) - return &c -} - -func (b *optionBuilder) Preload(rel builderWrapperI) *optionBuilder { - b.builder.Preload(rel) - return b -} - -func (b *optionBuilder) Meeting() *meetingBuilder { - return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ - fetch: b.fetch, - parent: b, - idField: "MeetingID", - relField: "Meeting", - }, - } -} - -func (b *optionBuilder) Poll() *pollBuilder { - return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ - fetch: b.fetch, - parent: b, - idField: "PollID", - relField: "Poll", - }, - } -} - -func (b *optionBuilder) UsedAsGlobalOptionInPoll() *pollBuilder { - return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ - fetch: b.fetch, - parent: b, - idField: "UsedAsGlobalOptionInPollID", - relField: "UsedAsGlobalOptionInPoll", - }, - } -} - -func (b *optionBuilder) VoteList() *voteBuilder { - return &voteBuilder{ - builder: builder[voteBuilder, *voteBuilder, Vote]{ - fetch: b.fetch, - parent: b, - idField: "VoteIDs", - relField: "VoteList", - many: true, - }, - } -} - -func (r *Fetch) Option(ids ...int) *optionBuilder { - return &optionBuilder{ - builder: builder[optionBuilder, *optionBuilder, Option]{ + builder: builder[motionWorkingGroupSpeakerBuilder, *motionWorkingGroupSpeakerBuilder, MotionWorkingGroupSpeaker, *MotionWorkingGroupSpeaker]{ ids: ids, fetch: r, + conv: func(p *MotionWorkingGroupSpeaker) MotionWorkingGroupSpeaker { return *p }, }, } } @@ -5497,10 +6098,11 @@ type Organization struct { } type organizationBuilder struct { - builder[organizationBuilder, *organizationBuilder, Organization] + builder[organizationBuilder, *organizationBuilder, Organization, *Organization] } -func (b *organizationBuilder) lazy(ds *Fetch, id int) *Organization { +func (b *organizationBuilder) lazy(ds *Fetch, idI any) *Organization { + id := idI.(int) c := Organization{} ds.Organization_ActiveMeetingIDs(id).Lazy(&c.ActiveMeetingIDs) ds.Organization_ArchivedMeetingIDs(id).Lazy(&c.ArchivedMeetingIDs) @@ -5552,140 +6154,152 @@ func (b *organizationBuilder) Preload(rel builderWrapperI) *organizationBuilder func (b *organizationBuilder) ActiveMeetingList() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "ActiveMeetingIDs", relField: "ActiveMeetingList", many: true, + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *organizationBuilder) ArchivedMeetingList() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "ArchivedMeetingIDs", relField: "ArchivedMeetingList", many: true, + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *organizationBuilder) CommitteeList() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "CommitteeIDs", relField: "CommitteeList", many: true, + conv: func(p *Committee) Committee { return *p }, }, } } func (b *organizationBuilder) GenderList() *genderBuilder { return &genderBuilder{ - builder: builder[genderBuilder, *genderBuilder, Gender]{ + builder: builder[genderBuilder, *genderBuilder, Gender, *Gender]{ fetch: b.fetch, parent: b, idField: "GenderIDs", relField: "GenderList", many: true, + conv: func(p *Gender) Gender { return *p }, }, } } func (b *organizationBuilder) MediafileList() *mediafileBuilder { return &mediafileBuilder{ - builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile]{ + builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile, *Mediafile]{ fetch: b.fetch, parent: b, idField: "MediafileIDs", relField: "MediafileList", many: true, + conv: func(p *Mediafile) Mediafile { return *p }, }, } } func (b *organizationBuilder) OrganizationTagList() *organizationTagBuilder { return &organizationTagBuilder{ - builder: builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag]{ + builder: builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag, *OrganizationTag]{ fetch: b.fetch, parent: b, idField: "OrganizationTagIDs", relField: "OrganizationTagList", many: true, + conv: func(p *OrganizationTag) OrganizationTag { return *p }, }, } } func (b *organizationBuilder) PublishedMediafileList() *mediafileBuilder { return &mediafileBuilder{ - builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile]{ + builder: builder[mediafileBuilder, *mediafileBuilder, Mediafile, *Mediafile]{ fetch: b.fetch, parent: b, idField: "PublishedMediafileIDs", relField: "PublishedMediafileList", many: true, + conv: func(p *Mediafile) Mediafile { return *p }, }, } } func (b *organizationBuilder) TemplateMeetingList() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "TemplateMeetingIDs", relField: "TemplateMeetingList", many: true, + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *organizationBuilder) Theme() *themeBuilder { return &themeBuilder{ - builder: builder[themeBuilder, *themeBuilder, Theme]{ + builder: builder[themeBuilder, *themeBuilder, Theme, *Theme]{ fetch: b.fetch, parent: b, idField: "ThemeID", relField: "Theme", + conv: func(p *Theme) Theme { return *p }, }, } } func (b *organizationBuilder) ThemeList() *themeBuilder { return &themeBuilder{ - builder: builder[themeBuilder, *themeBuilder, Theme]{ + builder: builder[themeBuilder, *themeBuilder, Theme, *Theme]{ fetch: b.fetch, parent: b, idField: "ThemeIDs", relField: "ThemeList", many: true, + conv: func(p *Theme) Theme { return *p }, }, } } func (b *organizationBuilder) UserList() *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ fetch: b.fetch, parent: b, idField: "UserIDs", relField: "UserList", many: true, + conv: func(p *User) User { return *p }, }, } } func (r *Fetch) Organization(ids ...int) *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ ids: ids, fetch: r, + conv: func(p *Organization) Organization { return *p }, }, } } @@ -5701,10 +6315,11 @@ type OrganizationTag struct { } type organizationTagBuilder struct { - builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag] + builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag, *OrganizationTag] } -func (b *organizationTagBuilder) lazy(ds *Fetch, id int) *OrganizationTag { +func (b *organizationTagBuilder) lazy(ds *Fetch, idI any) *OrganizationTag { + id := idI.(int) c := OrganizationTag{} ds.OrganizationTag_Color(id).Lazy(&c.Color) ds.OrganizationTag_ID(id).Lazy(&c.ID) @@ -5721,20 +6336,22 @@ func (b *organizationTagBuilder) Preload(rel builderWrapperI) *organizationTagBu func (b *organizationTagBuilder) Organization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "OrganizationID", relField: "Organization", + conv: func(p *Organization) Organization { return *p }, }, } } func (r *Fetch) OrganizationTag(ids ...int) *organizationTagBuilder { return &organizationTagBuilder{ - builder: builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag]{ + builder: builder[organizationTagBuilder, *organizationTagBuilder, OrganizationTag, *OrganizationTag]{ ids: ids, fetch: r, + conv: func(p *OrganizationTag) OrganizationTag { return *p }, }, } } @@ -5747,15 +6364,17 @@ type PersonalNote struct { MeetingUserID int Note string Star bool + ContentObject PersonalNoteContentObjectUnion Meeting *Meeting MeetingUser *MeetingUser } type personalNoteBuilder struct { - builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote] + builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote, *PersonalNote] } -func (b *personalNoteBuilder) lazy(ds *Fetch, id int) *PersonalNote { +func (b *personalNoteBuilder) lazy(ds *Fetch, idI any) *PersonalNote { + id := idI.(int) c := PersonalNote{} ds.PersonalNote_ContentObjectID(id).Lazy(&c.ContentObjectID) ds.PersonalNote_ID(id).Lazy(&c.ID) @@ -5771,33 +6390,93 @@ func (b *personalNoteBuilder) Preload(rel builderWrapperI) *personalNoteBuilder return b } +func (b *personalNoteBuilder) ContentObject() *personalNoteContentObjectUnionBuilder { + return &personalNoteContentObjectUnionBuilder{ + builder: builder[personalNoteContentObjectUnionBuilder, *personalNoteContentObjectUnionBuilder, PersonalNoteContentObjectUnion, PersonalNoteContentObjectUnion]{ + fetch: b.fetch, + parent: b, + idField: "ContentObjectID", + relField: "ContentObject", + conv: func(u PersonalNoteContentObjectUnion) PersonalNoteContentObjectUnion { return u }, + }, + } +} + +type PersonalNoteContentObjectUnion interface { + isPersonalNoteContentObjectUnion() +} + +func (*Motion) isPersonalNoteContentObjectUnion() {} + +type personalNoteContentObjectUnionBuilder struct { + builder[personalNoteContentObjectUnionBuilder, *personalNoteContentObjectUnionBuilder, PersonalNoteContentObjectUnion, PersonalNoteContentObjectUnion] +} + +func (b *personalNoteContentObjectUnionBuilder) lazy(ds *Fetch, id any) PersonalNoteContentObjectUnion { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + case "motion": + builder := &motionBuilder{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ + fetch: ds, + conv: func(p *Motion) Motion { return *p }, + }, + } + return builder.lazy(ds, intId) + } + + return nil +} + +func (b *personalNoteContentObjectUnionBuilder) Preload(rel builderWrapperI) *personalNoteContentObjectUnionBuilder { + b.builder.Preload(rel) + return b +} + func (b *personalNoteBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *personalNoteBuilder) MeetingUser() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserID", relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (r *Fetch) PersonalNote(ids ...int) *personalNoteBuilder { return &personalNoteBuilder{ - builder: builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote]{ + builder: builder[personalNoteBuilder, *personalNoteBuilder, PersonalNote, *PersonalNote]{ ids: ids, fetch: r, + conv: func(p *PersonalNote) PersonalNote { return *p }, }, } } @@ -5814,10 +6493,11 @@ type PointOfOrderCategory struct { } type pointOfOrderCategoryBuilder struct { - builder[pointOfOrderCategoryBuilder, *pointOfOrderCategoryBuilder, PointOfOrderCategory] + builder[pointOfOrderCategoryBuilder, *pointOfOrderCategoryBuilder, PointOfOrderCategory, *PointOfOrderCategory] } -func (b *pointOfOrderCategoryBuilder) lazy(ds *Fetch, id int) *PointOfOrderCategory { +func (b *pointOfOrderCategoryBuilder) lazy(ds *Fetch, idI any) *PointOfOrderCategory { + id := idI.(int) c := PointOfOrderCategory{} ds.PointOfOrderCategory_ID(id).Lazy(&c.ID) ds.PointOfOrderCategory_MeetingID(id).Lazy(&c.MeetingID) @@ -5834,110 +6514,99 @@ func (b *pointOfOrderCategoryBuilder) Preload(rel builderWrapperI) *pointOfOrder func (b *pointOfOrderCategoryBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *pointOfOrderCategoryBuilder) SpeakerList() *speakerBuilder { return &speakerBuilder{ - builder: builder[speakerBuilder, *speakerBuilder, Speaker]{ + builder: builder[speakerBuilder, *speakerBuilder, Speaker, *Speaker]{ fetch: b.fetch, parent: b, idField: "SpeakerIDs", relField: "SpeakerList", many: true, + conv: func(p *Speaker) Speaker { return *p }, }, } } func (r *Fetch) PointOfOrderCategory(ids ...int) *pointOfOrderCategoryBuilder { return &pointOfOrderCategoryBuilder{ - builder: builder[pointOfOrderCategoryBuilder, *pointOfOrderCategoryBuilder, PointOfOrderCategory]{ + builder: builder[pointOfOrderCategoryBuilder, *pointOfOrderCategoryBuilder, PointOfOrderCategory, *PointOfOrderCategory]{ ids: ids, fetch: r, + conv: func(p *PointOfOrderCategory) PointOfOrderCategory { return *p }, }, } } // Poll has all fields from poll. type Poll struct { - Backend string - ContentObjectID string - Description string - EntitledGroupIDs []int - EntitledUsersAtStop json.RawMessage - GlobalAbstain bool - GlobalNo bool - GlobalOptionID dsfetch.Maybe[int] - GlobalYes bool - ID int - IsPseudoanonymized bool - LiveVotes json.RawMessage - LiveVotingEnabled bool - MaxVotesAmount int - MaxVotesPerOption int - MeetingID int - MinVotesAmount int - OnehundredPercentBase string - OptionIDs []int - Pollmethod string - ProjectionIDs []int - SequentialNumber int - State string - Title string - Type string - VotedIDs []int - Votescast decimal.Decimal - Votesinvalid decimal.Decimal - Votesvalid decimal.Decimal - EntitledGroupList []Group - GlobalOption *dsfetch.Maybe[Option] - Meeting *Meeting - OptionList []Option - ProjectionList []Projection - VotedList []User + AllowInvalid bool + AllowVoteSplit bool + Anonymized bool + BallotIDs []int + BallotUserIDs []int + ConfigID string + ContentObjectID string + EntitledGroupIDs []int + HistoryEntryIDs []int + ID int + LiveVotingEnabled bool + MeetingID int + OptionIDs []int + ProjectionIDs []int + Published bool + Result string + SequentialNumber int + State string + Title string + Visibility string + BallotList []PollBallot + BallotUserList []PollBallotUser + Config PollConfigUnion + ContentObject PollContentObjectUnion + EntitledGroupList []Group + HistoryEntryList []HistoryEntry + Meeting *Meeting + OptionList []PollOption + ProjectionList []Projection } type pollBuilder struct { - builder[pollBuilder, *pollBuilder, Poll] + builder[pollBuilder, *pollBuilder, Poll, *Poll] } -func (b *pollBuilder) lazy(ds *Fetch, id int) *Poll { +func (b *pollBuilder) lazy(ds *Fetch, idI any) *Poll { + id := idI.(int) c := Poll{} - ds.Poll_Backend(id).Lazy(&c.Backend) + ds.Poll_AllowInvalid(id).Lazy(&c.AllowInvalid) + ds.Poll_AllowVoteSplit(id).Lazy(&c.AllowVoteSplit) + ds.Poll_Anonymized(id).Lazy(&c.Anonymized) + ds.Poll_BallotIDs(id).Lazy(&c.BallotIDs) + ds.Poll_BallotUserIDs(id).Lazy(&c.BallotUserIDs) + ds.Poll_ConfigID(id).Lazy(&c.ConfigID) ds.Poll_ContentObjectID(id).Lazy(&c.ContentObjectID) - ds.Poll_Description(id).Lazy(&c.Description) ds.Poll_EntitledGroupIDs(id).Lazy(&c.EntitledGroupIDs) - ds.Poll_EntitledUsersAtStop(id).Lazy(&c.EntitledUsersAtStop) - ds.Poll_GlobalAbstain(id).Lazy(&c.GlobalAbstain) - ds.Poll_GlobalNo(id).Lazy(&c.GlobalNo) - ds.Poll_GlobalOptionID(id).Lazy(&c.GlobalOptionID) - ds.Poll_GlobalYes(id).Lazy(&c.GlobalYes) + ds.Poll_HistoryEntryIDs(id).Lazy(&c.HistoryEntryIDs) ds.Poll_ID(id).Lazy(&c.ID) - ds.Poll_IsPseudoanonymized(id).Lazy(&c.IsPseudoanonymized) - ds.Poll_LiveVotes(id).Lazy(&c.LiveVotes) ds.Poll_LiveVotingEnabled(id).Lazy(&c.LiveVotingEnabled) - ds.Poll_MaxVotesAmount(id).Lazy(&c.MaxVotesAmount) - ds.Poll_MaxVotesPerOption(id).Lazy(&c.MaxVotesPerOption) ds.Poll_MeetingID(id).Lazy(&c.MeetingID) - ds.Poll_MinVotesAmount(id).Lazy(&c.MinVotesAmount) - ds.Poll_OnehundredPercentBase(id).Lazy(&c.OnehundredPercentBase) ds.Poll_OptionIDs(id).Lazy(&c.OptionIDs) - ds.Poll_Pollmethod(id).Lazy(&c.Pollmethod) ds.Poll_ProjectionIDs(id).Lazy(&c.ProjectionIDs) + ds.Poll_Published(id).Lazy(&c.Published) + ds.Poll_Result(id).Lazy(&c.Result) ds.Poll_SequentialNumber(id).Lazy(&c.SequentialNumber) ds.Poll_State(id).Lazy(&c.State) ds.Poll_Title(id).Lazy(&c.Title) - ds.Poll_Type(id).Lazy(&c.Type) - ds.Poll_VotedIDs(id).Lazy(&c.VotedIDs) - ds.Poll_Votescast(id).Lazy(&c.Votescast) - ds.Poll_Votesinvalid(id).Lazy(&c.Votesinvalid) - ds.Poll_Votesvalid(id).Lazy(&c.Votesvalid) + ds.Poll_Visibility(id).Lazy(&c.Visibility) return &c } @@ -5946,233 +6615,769 @@ func (b *pollBuilder) Preload(rel builderWrapperI) *pollBuilder { return b } +func (b *pollBuilder) BallotList() *pollBallotBuilder { + return &pollBallotBuilder{ + builder: builder[pollBallotBuilder, *pollBallotBuilder, PollBallot, *PollBallot]{ + fetch: b.fetch, + parent: b, + idField: "BallotIDs", + relField: "BallotList", + many: true, + conv: func(p *PollBallot) PollBallot { return *p }, + }, + } +} + +func (b *pollBuilder) BallotUserList() *pollBallotUserBuilder { + return &pollBallotUserBuilder{ + builder: builder[pollBallotUserBuilder, *pollBallotUserBuilder, PollBallotUser, *PollBallotUser]{ + fetch: b.fetch, + parent: b, + idField: "BallotUserIDs", + relField: "BallotUserList", + many: true, + conv: func(p *PollBallotUser) PollBallotUser { return *p }, + }, + } +} + +func (b *pollBuilder) Config() *pollConfigUnionBuilder { + return &pollConfigUnionBuilder{ + builder: builder[pollConfigUnionBuilder, *pollConfigUnionBuilder, PollConfigUnion, PollConfigUnion]{ + fetch: b.fetch, + parent: b, + idField: "ConfigID", + relField: "Config", + conv: func(u PollConfigUnion) PollConfigUnion { return u }, + }, + } +} + +type PollConfigUnion interface { + isPollConfigUnion() +} + +func (*PollConfigApproval) isPollConfigUnion() {} +func (*PollConfigSelection) isPollConfigUnion() {} +func (*PollConfigRatingScore) isPollConfigUnion() {} +func (*PollConfigRatingApproval) isPollConfigUnion() {} +func (*PollConfigStvScottish) isPollConfigUnion() {} + +type pollConfigUnionBuilder struct { + builder[pollConfigUnionBuilder, *pollConfigUnionBuilder, PollConfigUnion, PollConfigUnion] +} + +func (b *pollConfigUnionBuilder) lazy(ds *Fetch, id any) PollConfigUnion { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + case "poll_config_approval": + builder := &pollConfigApprovalBuilder{ + builder: builder[pollConfigApprovalBuilder, *pollConfigApprovalBuilder, PollConfigApproval, *PollConfigApproval]{ + fetch: ds, + conv: func(p *PollConfigApproval) PollConfigApproval { return *p }, + }, + } + return builder.lazy(ds, intId) + case "poll_config_selection": + builder := &pollConfigSelectionBuilder{ + builder: builder[pollConfigSelectionBuilder, *pollConfigSelectionBuilder, PollConfigSelection, *PollConfigSelection]{ + fetch: ds, + conv: func(p *PollConfigSelection) PollConfigSelection { return *p }, + }, + } + return builder.lazy(ds, intId) + case "poll_config_rating_score": + builder := &pollConfigRatingScoreBuilder{ + builder: builder[pollConfigRatingScoreBuilder, *pollConfigRatingScoreBuilder, PollConfigRatingScore, *PollConfigRatingScore]{ + fetch: ds, + conv: func(p *PollConfigRatingScore) PollConfigRatingScore { return *p }, + }, + } + return builder.lazy(ds, intId) + case "poll_config_rating_approval": + builder := &pollConfigRatingApprovalBuilder{ + builder: builder[pollConfigRatingApprovalBuilder, *pollConfigRatingApprovalBuilder, PollConfigRatingApproval, *PollConfigRatingApproval]{ + fetch: ds, + conv: func(p *PollConfigRatingApproval) PollConfigRatingApproval { return *p }, + }, + } + return builder.lazy(ds, intId) + case "poll_config_stv_scottish": + builder := &pollConfigStvScottishBuilder{ + builder: builder[pollConfigStvScottishBuilder, *pollConfigStvScottishBuilder, PollConfigStvScottish, *PollConfigStvScottish]{ + fetch: ds, + conv: func(p *PollConfigStvScottish) PollConfigStvScottish { return *p }, + }, + } + return builder.lazy(ds, intId) + } + + return nil +} + +func (b *pollConfigUnionBuilder) Preload(rel builderWrapperI) *pollConfigUnionBuilder { + b.builder.Preload(rel) + return b +} + +func (b *pollBuilder) ContentObject() *pollContentObjectUnionBuilder { + return &pollContentObjectUnionBuilder{ + builder: builder[pollContentObjectUnionBuilder, *pollContentObjectUnionBuilder, PollContentObjectUnion, PollContentObjectUnion]{ + fetch: b.fetch, + parent: b, + idField: "ContentObjectID", + relField: "ContentObject", + conv: func(u PollContentObjectUnion) PollContentObjectUnion { return u }, + }, + } +} + +type PollContentObjectUnion interface { + isPollContentObjectUnion() +} + +func (*Motion) isPollContentObjectUnion() {} +func (*Assignment) isPollContentObjectUnion() {} +func (*Topic) isPollContentObjectUnion() {} + +type pollContentObjectUnionBuilder struct { + builder[pollContentObjectUnionBuilder, *pollContentObjectUnionBuilder, PollContentObjectUnion, PollContentObjectUnion] +} + +func (b *pollContentObjectUnionBuilder) lazy(ds *Fetch, id any) PollContentObjectUnion { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + case "motion": + builder := &motionBuilder{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ + fetch: ds, + conv: func(p *Motion) Motion { return *p }, + }, + } + return builder.lazy(ds, intId) + case "assignment": + builder := &assignmentBuilder{ + builder: builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment]{ + fetch: ds, + conv: func(p *Assignment) Assignment { return *p }, + }, + } + return builder.lazy(ds, intId) + case "topic": + builder := &topicBuilder{ + builder: builder[topicBuilder, *topicBuilder, Topic, *Topic]{ + fetch: ds, + conv: func(p *Topic) Topic { return *p }, + }, + } + return builder.lazy(ds, intId) + } + + return nil +} + +func (b *pollContentObjectUnionBuilder) Preload(rel builderWrapperI) *pollContentObjectUnionBuilder { + b.builder.Preload(rel) + return b +} + func (b *pollBuilder) EntitledGroupList() *groupBuilder { return &groupBuilder{ - builder: builder[groupBuilder, *groupBuilder, Group]{ + builder: builder[groupBuilder, *groupBuilder, Group, *Group]{ fetch: b.fetch, parent: b, idField: "EntitledGroupIDs", relField: "EntitledGroupList", many: true, + conv: func(p *Group) Group { return *p }, }, } } -func (b *pollBuilder) GlobalOption() *optionBuilder { - return &optionBuilder{ - builder: builder[optionBuilder, *optionBuilder, Option]{ +func (b *pollBuilder) HistoryEntryList() *historyEntryBuilder { + return &historyEntryBuilder{ + builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry]{ fetch: b.fetch, parent: b, - idField: "GlobalOptionID", - relField: "GlobalOption", + idField: "HistoryEntryIDs", + relField: "HistoryEntryList", + many: true, + conv: func(p *HistoryEntry) HistoryEntry { return *p }, }, } } func (b *pollBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } -func (b *pollBuilder) OptionList() *optionBuilder { - return &optionBuilder{ - builder: builder[optionBuilder, *optionBuilder, Option]{ +func (b *pollBuilder) OptionList() *pollOptionBuilder { + return &pollOptionBuilder{ + builder: builder[pollOptionBuilder, *pollOptionBuilder, PollOption, *PollOption]{ fetch: b.fetch, parent: b, idField: "OptionIDs", relField: "OptionList", many: true, + conv: func(p *PollOption) PollOption { return *p }, }, } } func (b *pollBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } -func (b *pollBuilder) VotedList() *userBuilder { - return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ +func (r *Fetch) Poll(ids ...int) *pollBuilder { + return &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ + ids: ids, + fetch: r, + conv: func(p *Poll) Poll { return *p }, + }, + } +} + +// PollBallot has all fields from poll_ballot. +type PollBallot struct { + ID int + PollBallotUserID dsfetch.Maybe[int] + PollID int + Split bool + Value string + Weight decimal.Decimal + PollBallotUser *dsfetch.Maybe[PollBallotUser] + Poll *Poll +} + +type pollBallotBuilder struct { + builder[pollBallotBuilder, *pollBallotBuilder, PollBallot, *PollBallot] +} + +func (b *pollBallotBuilder) lazy(ds *Fetch, idI any) *PollBallot { + id := idI.(int) + c := PollBallot{} + ds.PollBallot_ID(id).Lazy(&c.ID) + ds.PollBallot_PollBallotUserID(id).Lazy(&c.PollBallotUserID) + ds.PollBallot_PollID(id).Lazy(&c.PollID) + ds.PollBallot_Split(id).Lazy(&c.Split) + ds.PollBallot_Value(id).Lazy(&c.Value) + ds.PollBallot_Weight(id).Lazy(&c.Weight) + return &c +} + +func (b *pollBallotBuilder) Preload(rel builderWrapperI) *pollBallotBuilder { + b.builder.Preload(rel) + return b +} + +func (b *pollBallotBuilder) PollBallotUser() *pollBallotUserBuilder { + return &pollBallotUserBuilder{ + builder: builder[pollBallotUserBuilder, *pollBallotUserBuilder, PollBallotUser, *PollBallotUser]{ fetch: b.fetch, parent: b, - idField: "VotedIDs", - relField: "VotedList", - many: true, + idField: "PollBallotUserID", + relField: "PollBallotUser", + conv: func(p *PollBallotUser) PollBallotUser { return *p }, }, } } -func (r *Fetch) Poll(ids ...int) *pollBuilder { +func (b *pollBallotBuilder) Poll() *pollBuilder { return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ + fetch: b.fetch, + parent: b, + idField: "PollID", + relField: "Poll", + conv: func(p *Poll) Poll { return *p }, + }, + } +} + +func (r *Fetch) PollBallot(ids ...int) *pollBallotBuilder { + return &pollBallotBuilder{ + builder: builder[pollBallotBuilder, *pollBallotBuilder, PollBallot, *PollBallot]{ ids: ids, fetch: r, + conv: func(p *PollBallot) PollBallot { return *p }, }, } } -// PollCandidate has all fields from poll_candidate. -type PollCandidate struct { - ID int - MeetingID int - PollCandidateListID int - UserID dsfetch.Maybe[int] - Weight int - Meeting *Meeting - PollCandidateList *PollCandidateList - User *dsfetch.Maybe[User] +// PollBallotUser has all fields from poll_ballot_user. +type PollBallotUser struct { + ActingMeetingUserID int + ID int + PollBallotID dsfetch.Maybe[int] + PollID int + RepresentedMeetingUserID int + ActingMeetingUser *MeetingUser + PollBallot *dsfetch.Maybe[PollBallot] + Poll *Poll + RepresentedMeetingUser *MeetingUser } -type pollCandidateBuilder struct { - builder[pollCandidateBuilder, *pollCandidateBuilder, PollCandidate] +type pollBallotUserBuilder struct { + builder[pollBallotUserBuilder, *pollBallotUserBuilder, PollBallotUser, *PollBallotUser] } -func (b *pollCandidateBuilder) lazy(ds *Fetch, id int) *PollCandidate { - c := PollCandidate{} - ds.PollCandidate_ID(id).Lazy(&c.ID) - ds.PollCandidate_MeetingID(id).Lazy(&c.MeetingID) - ds.PollCandidate_PollCandidateListID(id).Lazy(&c.PollCandidateListID) - ds.PollCandidate_UserID(id).Lazy(&c.UserID) - ds.PollCandidate_Weight(id).Lazy(&c.Weight) +func (b *pollBallotUserBuilder) lazy(ds *Fetch, idI any) *PollBallotUser { + id := idI.(int) + c := PollBallotUser{} + ds.PollBallotUser_ActingMeetingUserID(id).Lazy(&c.ActingMeetingUserID) + ds.PollBallotUser_ID(id).Lazy(&c.ID) + ds.PollBallotUser_PollBallotID(id).Lazy(&c.PollBallotID) + ds.PollBallotUser_PollID(id).Lazy(&c.PollID) + ds.PollBallotUser_RepresentedMeetingUserID(id).Lazy(&c.RepresentedMeetingUserID) return &c } -func (b *pollCandidateBuilder) Preload(rel builderWrapperI) *pollCandidateBuilder { +func (b *pollBallotUserBuilder) Preload(rel builderWrapperI) *pollBallotUserBuilder { b.builder.Preload(rel) return b } -func (b *pollCandidateBuilder) Meeting() *meetingBuilder { - return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ +func (b *pollBallotUserBuilder) ActingMeetingUser() *meetingUserBuilder { + return &meetingUserBuilder{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, - idField: "MeetingID", - relField: "Meeting", + idField: "ActingMeetingUserID", + relField: "ActingMeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } -func (b *pollCandidateBuilder) PollCandidateList() *pollCandidateListBuilder { - return &pollCandidateListBuilder{ - builder: builder[pollCandidateListBuilder, *pollCandidateListBuilder, PollCandidateList]{ +func (b *pollBallotUserBuilder) PollBallot() *pollBallotBuilder { + return &pollBallotBuilder{ + builder: builder[pollBallotBuilder, *pollBallotBuilder, PollBallot, *PollBallot]{ fetch: b.fetch, parent: b, - idField: "PollCandidateListID", - relField: "PollCandidateList", + idField: "PollBallotID", + relField: "PollBallot", + conv: func(p *PollBallot) PollBallot { return *p }, }, } } -func (b *pollCandidateBuilder) User() *userBuilder { - return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ +func (b *pollBallotUserBuilder) Poll() *pollBuilder { + return &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, - idField: "UserID", - relField: "User", + idField: "PollID", + relField: "Poll", + conv: func(p *Poll) Poll { return *p }, }, } } -func (r *Fetch) PollCandidate(ids ...int) *pollCandidateBuilder { - return &pollCandidateBuilder{ - builder: builder[pollCandidateBuilder, *pollCandidateBuilder, PollCandidate]{ +func (b *pollBallotUserBuilder) RepresentedMeetingUser() *meetingUserBuilder { + return &meetingUserBuilder{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ + fetch: b.fetch, + parent: b, + idField: "RepresentedMeetingUserID", + relField: "RepresentedMeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, + }, + } +} + +func (r *Fetch) PollBallotUser(ids ...int) *pollBallotUserBuilder { + return &pollBallotUserBuilder{ + builder: builder[pollBallotUserBuilder, *pollBallotUserBuilder, PollBallotUser, *PollBallotUser]{ ids: ids, fetch: r, + conv: func(p *PollBallotUser) PollBallotUser { return *p }, }, } } -// PollCandidateList has all fields from poll_candidate_list. -type PollCandidateList struct { - ID int - MeetingID int - OptionID int - PollCandidateIDs []int - Meeting *Meeting - Option *Option - PollCandidateList []PollCandidate +// PollConfigApproval has all fields from poll_config_approval. +type PollConfigApproval struct { + AllowAbstain bool + ID int + OnehundredPercentBase string + PollID int + Poll *Poll } -type pollCandidateListBuilder struct { - builder[pollCandidateListBuilder, *pollCandidateListBuilder, PollCandidateList] +type pollConfigApprovalBuilder struct { + builder[pollConfigApprovalBuilder, *pollConfigApprovalBuilder, PollConfigApproval, *PollConfigApproval] } -func (b *pollCandidateListBuilder) lazy(ds *Fetch, id int) *PollCandidateList { - c := PollCandidateList{} - ds.PollCandidateList_ID(id).Lazy(&c.ID) - ds.PollCandidateList_MeetingID(id).Lazy(&c.MeetingID) - ds.PollCandidateList_OptionID(id).Lazy(&c.OptionID) - ds.PollCandidateList_PollCandidateIDs(id).Lazy(&c.PollCandidateIDs) +func (b *pollConfigApprovalBuilder) lazy(ds *Fetch, idI any) *PollConfigApproval { + id := idI.(int) + c := PollConfigApproval{} + ds.PollConfigApproval_AllowAbstain(id).Lazy(&c.AllowAbstain) + ds.PollConfigApproval_ID(id).Lazy(&c.ID) + ds.PollConfigApproval_OnehundredPercentBase(id).Lazy(&c.OnehundredPercentBase) + ds.PollConfigApproval_PollID(id).Lazy(&c.PollID) return &c } -func (b *pollCandidateListBuilder) Preload(rel builderWrapperI) *pollCandidateListBuilder { +func (b *pollConfigApprovalBuilder) Preload(rel builderWrapperI) *pollConfigApprovalBuilder { b.builder.Preload(rel) return b } -func (b *pollCandidateListBuilder) Meeting() *meetingBuilder { - return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ +func (b *pollConfigApprovalBuilder) Poll() *pollBuilder { + return &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, - idField: "MeetingID", - relField: "Meeting", + idField: "PollID", + relField: "Poll", + conv: func(p *Poll) Poll { return *p }, + }, + } +} + +func (r *Fetch) PollConfigApproval(ids ...int) *pollConfigApprovalBuilder { + return &pollConfigApprovalBuilder{ + builder: builder[pollConfigApprovalBuilder, *pollConfigApprovalBuilder, PollConfigApproval, *PollConfigApproval]{ + ids: ids, + fetch: r, + conv: func(p *PollConfigApproval) PollConfigApproval { return *p }, + }, + } +} + +// PollConfigRatingApproval has all fields from poll_config_rating_approval. +type PollConfigRatingApproval struct { + AllowAbstain bool + ID int + MaxOptionsAmount int + MaxYesAmount int + MinOptionsAmount int + OnehundredPercentBase string + PollID int + Poll *Poll +} + +type pollConfigRatingApprovalBuilder struct { + builder[pollConfigRatingApprovalBuilder, *pollConfigRatingApprovalBuilder, PollConfigRatingApproval, *PollConfigRatingApproval] +} + +func (b *pollConfigRatingApprovalBuilder) lazy(ds *Fetch, idI any) *PollConfigRatingApproval { + id := idI.(int) + c := PollConfigRatingApproval{} + ds.PollConfigRatingApproval_AllowAbstain(id).Lazy(&c.AllowAbstain) + ds.PollConfigRatingApproval_ID(id).Lazy(&c.ID) + ds.PollConfigRatingApproval_MaxOptionsAmount(id).Lazy(&c.MaxOptionsAmount) + ds.PollConfigRatingApproval_MaxYesAmount(id).Lazy(&c.MaxYesAmount) + ds.PollConfigRatingApproval_MinOptionsAmount(id).Lazy(&c.MinOptionsAmount) + ds.PollConfigRatingApproval_OnehundredPercentBase(id).Lazy(&c.OnehundredPercentBase) + ds.PollConfigRatingApproval_PollID(id).Lazy(&c.PollID) + return &c +} + +func (b *pollConfigRatingApprovalBuilder) Preload(rel builderWrapperI) *pollConfigRatingApprovalBuilder { + b.builder.Preload(rel) + return b +} + +func (b *pollConfigRatingApprovalBuilder) Poll() *pollBuilder { + return &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ + fetch: b.fetch, + parent: b, + idField: "PollID", + relField: "Poll", + conv: func(p *Poll) Poll { return *p }, + }, + } +} + +func (r *Fetch) PollConfigRatingApproval(ids ...int) *pollConfigRatingApprovalBuilder { + return &pollConfigRatingApprovalBuilder{ + builder: builder[pollConfigRatingApprovalBuilder, *pollConfigRatingApprovalBuilder, PollConfigRatingApproval, *PollConfigRatingApproval]{ + ids: ids, + fetch: r, + conv: func(p *PollConfigRatingApproval) PollConfigRatingApproval { return *p }, }, } } -func (b *pollCandidateListBuilder) Option() *optionBuilder { - return &optionBuilder{ - builder: builder[optionBuilder, *optionBuilder, Option]{ +// PollConfigRatingScore has all fields from poll_config_rating_score. +type PollConfigRatingScore struct { + ID int + MaxOptionsAmount int + MaxVoteSum int + MaxVotesPerOption int + MinOptionsAmount int + MinVoteSum int + OnehundredPercentBase string + PollID int + Poll *Poll +} + +type pollConfigRatingScoreBuilder struct { + builder[pollConfigRatingScoreBuilder, *pollConfigRatingScoreBuilder, PollConfigRatingScore, *PollConfigRatingScore] +} + +func (b *pollConfigRatingScoreBuilder) lazy(ds *Fetch, idI any) *PollConfigRatingScore { + id := idI.(int) + c := PollConfigRatingScore{} + ds.PollConfigRatingScore_ID(id).Lazy(&c.ID) + ds.PollConfigRatingScore_MaxOptionsAmount(id).Lazy(&c.MaxOptionsAmount) + ds.PollConfigRatingScore_MaxVoteSum(id).Lazy(&c.MaxVoteSum) + ds.PollConfigRatingScore_MaxVotesPerOption(id).Lazy(&c.MaxVotesPerOption) + ds.PollConfigRatingScore_MinOptionsAmount(id).Lazy(&c.MinOptionsAmount) + ds.PollConfigRatingScore_MinVoteSum(id).Lazy(&c.MinVoteSum) + ds.PollConfigRatingScore_OnehundredPercentBase(id).Lazy(&c.OnehundredPercentBase) + ds.PollConfigRatingScore_PollID(id).Lazy(&c.PollID) + return &c +} + +func (b *pollConfigRatingScoreBuilder) Preload(rel builderWrapperI) *pollConfigRatingScoreBuilder { + b.builder.Preload(rel) + return b +} + +func (b *pollConfigRatingScoreBuilder) Poll() *pollBuilder { + return &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, - idField: "OptionID", - relField: "Option", + idField: "PollID", + relField: "Poll", + conv: func(p *Poll) Poll { return *p }, + }, + } +} + +func (r *Fetch) PollConfigRatingScore(ids ...int) *pollConfigRatingScoreBuilder { + return &pollConfigRatingScoreBuilder{ + builder: builder[pollConfigRatingScoreBuilder, *pollConfigRatingScoreBuilder, PollConfigRatingScore, *PollConfigRatingScore]{ + ids: ids, + fetch: r, + conv: func(p *PollConfigRatingScore) PollConfigRatingScore { return *p }, }, } } -func (b *pollCandidateListBuilder) PollCandidateList() *pollCandidateBuilder { - return &pollCandidateBuilder{ - builder: builder[pollCandidateBuilder, *pollCandidateBuilder, PollCandidate]{ +// PollConfigSelection has all fields from poll_config_selection. +type PollConfigSelection struct { + AllowNota bool + DisplayChart string + ID int + MaxOptionsAmount int + MinOptionsAmount int + OnehundredPercentBase string + PollID int + StrikeOut bool + Poll *Poll +} + +type pollConfigSelectionBuilder struct { + builder[pollConfigSelectionBuilder, *pollConfigSelectionBuilder, PollConfigSelection, *PollConfigSelection] +} + +func (b *pollConfigSelectionBuilder) lazy(ds *Fetch, idI any) *PollConfigSelection { + id := idI.(int) + c := PollConfigSelection{} + ds.PollConfigSelection_AllowNota(id).Lazy(&c.AllowNota) + ds.PollConfigSelection_DisplayChart(id).Lazy(&c.DisplayChart) + ds.PollConfigSelection_ID(id).Lazy(&c.ID) + ds.PollConfigSelection_MaxOptionsAmount(id).Lazy(&c.MaxOptionsAmount) + ds.PollConfigSelection_MinOptionsAmount(id).Lazy(&c.MinOptionsAmount) + ds.PollConfigSelection_OnehundredPercentBase(id).Lazy(&c.OnehundredPercentBase) + ds.PollConfigSelection_PollID(id).Lazy(&c.PollID) + ds.PollConfigSelection_StrikeOut(id).Lazy(&c.StrikeOut) + return &c +} + +func (b *pollConfigSelectionBuilder) Preload(rel builderWrapperI) *pollConfigSelectionBuilder { + b.builder.Preload(rel) + return b +} + +func (b *pollConfigSelectionBuilder) Poll() *pollBuilder { + return &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, - idField: "PollCandidateIDs", - relField: "PollCandidateList", - many: true, + idField: "PollID", + relField: "Poll", + conv: func(p *Poll) Poll { return *p }, + }, + } +} + +func (r *Fetch) PollConfigSelection(ids ...int) *pollConfigSelectionBuilder { + return &pollConfigSelectionBuilder{ + builder: builder[pollConfigSelectionBuilder, *pollConfigSelectionBuilder, PollConfigSelection, *PollConfigSelection]{ + ids: ids, + fetch: r, + conv: func(p *PollConfigSelection) PollConfigSelection { return *p }, + }, + } +} + +// PollConfigStvScottish has all fields from poll_config_stv_scottish. +type PollConfigStvScottish struct { + ID int + PollID int + Posts int + Poll *Poll +} + +type pollConfigStvScottishBuilder struct { + builder[pollConfigStvScottishBuilder, *pollConfigStvScottishBuilder, PollConfigStvScottish, *PollConfigStvScottish] +} + +func (b *pollConfigStvScottishBuilder) lazy(ds *Fetch, idI any) *PollConfigStvScottish { + id := idI.(int) + c := PollConfigStvScottish{} + ds.PollConfigStvScottish_ID(id).Lazy(&c.ID) + ds.PollConfigStvScottish_PollID(id).Lazy(&c.PollID) + ds.PollConfigStvScottish_Posts(id).Lazy(&c.Posts) + return &c +} + +func (b *pollConfigStvScottishBuilder) Preload(rel builderWrapperI) *pollConfigStvScottishBuilder { + b.builder.Preload(rel) + return b +} + +func (b *pollConfigStvScottishBuilder) Poll() *pollBuilder { + return &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ + fetch: b.fetch, + parent: b, + idField: "PollID", + relField: "Poll", + conv: func(p *Poll) Poll { return *p }, + }, + } +} + +func (r *Fetch) PollConfigStvScottish(ids ...int) *pollConfigStvScottishBuilder { + return &pollConfigStvScottishBuilder{ + builder: builder[pollConfigStvScottishBuilder, *pollConfigStvScottishBuilder, PollConfigStvScottish, *PollConfigStvScottish]{ + ids: ids, + fetch: r, + conv: func(p *PollConfigStvScottish) PollConfigStvScottish { return *p }, + }, + } +} + +// PollOption has all fields from poll_option. +type PollOption struct { + ID int + MeetingUserID dsfetch.Maybe[int] + PollID int + Text string + Weight int + MeetingUser *dsfetch.Maybe[MeetingUser] + Poll *Poll +} + +type pollOptionBuilder struct { + builder[pollOptionBuilder, *pollOptionBuilder, PollOption, *PollOption] +} + +func (b *pollOptionBuilder) lazy(ds *Fetch, idI any) *PollOption { + id := idI.(int) + c := PollOption{} + ds.PollOption_ID(id).Lazy(&c.ID) + ds.PollOption_MeetingUserID(id).Lazy(&c.MeetingUserID) + ds.PollOption_PollID(id).Lazy(&c.PollID) + ds.PollOption_Text(id).Lazy(&c.Text) + ds.PollOption_Weight(id).Lazy(&c.Weight) + return &c +} + +func (b *pollOptionBuilder) Preload(rel builderWrapperI) *pollOptionBuilder { + b.builder.Preload(rel) + return b +} + +func (b *pollOptionBuilder) MeetingUser() *meetingUserBuilder { + return &meetingUserBuilder{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ + fetch: b.fetch, + parent: b, + idField: "MeetingUserID", + relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, + }, + } +} + +func (b *pollOptionBuilder) Poll() *pollBuilder { + return &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ + fetch: b.fetch, + parent: b, + idField: "PollID", + relField: "Poll", + conv: func(p *Poll) Poll { return *p }, }, } } -func (r *Fetch) PollCandidateList(ids ...int) *pollCandidateListBuilder { - return &pollCandidateListBuilder{ - builder: builder[pollCandidateListBuilder, *pollCandidateListBuilder, PollCandidateList]{ +func (r *Fetch) PollOption(ids ...int) *pollOptionBuilder { + return &pollOptionBuilder{ + builder: builder[pollOptionBuilder, *pollOptionBuilder, PollOption, *PollOption]{ ids: ids, fetch: r, + conv: func(p *PollOption) PollOption { return *p }, }, } } // Projection has all fields from projection. type Projection struct { - Content json.RawMessage ContentObjectID string CurrentProjectorID dsfetch.Maybe[int] HistoryProjectorID dsfetch.Maybe[int] @@ -6183,6 +7388,7 @@ type Projection struct { Stable bool Type string Weight int + ContentObject ProjectionContentObjectUnion CurrentProjector *dsfetch.Maybe[Projector] HistoryProjector *dsfetch.Maybe[Projector] Meeting *Meeting @@ -6190,12 +7396,12 @@ type Projection struct { } type projectionBuilder struct { - builder[projectionBuilder, *projectionBuilder, Projection] + builder[projectionBuilder, *projectionBuilder, Projection, *Projection] } -func (b *projectionBuilder) lazy(ds *Fetch, id int) *Projection { +func (b *projectionBuilder) lazy(ds *Fetch, idI any) *Projection { + id := idI.(int) c := Projection{} - ds.Projection_Content(id).Lazy(&c.Content) ds.Projection_ContentObjectID(id).Lazy(&c.ContentObjectID) ds.Projection_CurrentProjectorID(id).Lazy(&c.CurrentProjectorID) ds.Projection_HistoryProjectorID(id).Lazy(&c.HistoryProjectorID) @@ -6214,55 +7420,207 @@ func (b *projectionBuilder) Preload(rel builderWrapperI) *projectionBuilder { return b } +func (b *projectionBuilder) ContentObject() *projectionContentObjectUnionBuilder { + return &projectionContentObjectUnionBuilder{ + builder: builder[projectionContentObjectUnionBuilder, *projectionContentObjectUnionBuilder, ProjectionContentObjectUnion, ProjectionContentObjectUnion]{ + fetch: b.fetch, + parent: b, + idField: "ContentObjectID", + relField: "ContentObject", + conv: func(u ProjectionContentObjectUnion) ProjectionContentObjectUnion { return u }, + }, + } +} + +type ProjectionContentObjectUnion interface { + isProjectionContentObjectUnion() +} + +func (*Meeting) isProjectionContentObjectUnion() {} +func (*Motion) isProjectionContentObjectUnion() {} +func (*MeetingMediafile) isProjectionContentObjectUnion() {} +func (*ListOfSpeakers) isProjectionContentObjectUnion() {} +func (*MotionBlock) isProjectionContentObjectUnion() {} +func (*Assignment) isProjectionContentObjectUnion() {} +func (*AgendaItem) isProjectionContentObjectUnion() {} +func (*Topic) isProjectionContentObjectUnion() {} +func (*Poll) isProjectionContentObjectUnion() {} +func (*ProjectorMessage) isProjectionContentObjectUnion() {} +func (*ProjectorCountdown) isProjectionContentObjectUnion() {} + +type projectionContentObjectUnionBuilder struct { + builder[projectionContentObjectUnionBuilder, *projectionContentObjectUnionBuilder, ProjectionContentObjectUnion, ProjectionContentObjectUnion] +} + +func (b *projectionContentObjectUnionBuilder) lazy(ds *Fetch, id any) ProjectionContentObjectUnion { + fqid, ok := id.(string) + if !ok { + return nil + } + + collection, idStr, ok := strings.Cut(fqid, "/") + if !ok { + return nil + } + + intId, err := strconv.Atoi(idStr) + if err != nil { + return nil + } + + switch collection { + case "meeting": + builder := &meetingBuilder{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ + fetch: ds, + conv: func(p *Meeting) Meeting { return *p }, + }, + } + return builder.lazy(ds, intId) + case "motion": + builder := &motionBuilder{ + builder: builder[motionBuilder, *motionBuilder, Motion, *Motion]{ + fetch: ds, + conv: func(p *Motion) Motion { return *p }, + }, + } + return builder.lazy(ds, intId) + case "meeting_mediafile": + builder := &meetingMediafileBuilder{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ + fetch: ds, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, + }, + } + return builder.lazy(ds, intId) + case "list_of_speakers": + builder := &listOfSpeakersBuilder{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ + fetch: ds, + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, + }, + } + return builder.lazy(ds, intId) + case "motion_block": + builder := &motionBlockBuilder{ + builder: builder[motionBlockBuilder, *motionBlockBuilder, MotionBlock, *MotionBlock]{ + fetch: ds, + conv: func(p *MotionBlock) MotionBlock { return *p }, + }, + } + return builder.lazy(ds, intId) + case "assignment": + builder := &assignmentBuilder{ + builder: builder[assignmentBuilder, *assignmentBuilder, Assignment, *Assignment]{ + fetch: ds, + conv: func(p *Assignment) Assignment { return *p }, + }, + } + return builder.lazy(ds, intId) + case "agenda_item": + builder := &agendaItemBuilder{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ + fetch: ds, + conv: func(p *AgendaItem) AgendaItem { return *p }, + }, + } + return builder.lazy(ds, intId) + case "topic": + builder := &topicBuilder{ + builder: builder[topicBuilder, *topicBuilder, Topic, *Topic]{ + fetch: ds, + conv: func(p *Topic) Topic { return *p }, + }, + } + return builder.lazy(ds, intId) + case "poll": + builder := &pollBuilder{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ + fetch: ds, + conv: func(p *Poll) Poll { return *p }, + }, + } + return builder.lazy(ds, intId) + case "projector_message": + builder := &projectorMessageBuilder{ + builder: builder[projectorMessageBuilder, *projectorMessageBuilder, ProjectorMessage, *ProjectorMessage]{ + fetch: ds, + conv: func(p *ProjectorMessage) ProjectorMessage { return *p }, + }, + } + return builder.lazy(ds, intId) + case "projector_countdown": + builder := &projectorCountdownBuilder{ + builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown, *ProjectorCountdown]{ + fetch: ds, + conv: func(p *ProjectorCountdown) ProjectorCountdown { return *p }, + }, + } + return builder.lazy(ds, intId) + } + + return nil +} + +func (b *projectionContentObjectUnionBuilder) Preload(rel builderWrapperI) *projectionContentObjectUnionBuilder { + b.builder.Preload(rel) + return b +} + func (b *projectionBuilder) CurrentProjector() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "CurrentProjectorID", relField: "CurrentProjector", + conv: func(p *Projector) Projector { return *p }, }, } } func (b *projectionBuilder) HistoryProjector() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "HistoryProjectorID", relField: "HistoryProjector", + conv: func(p *Projector) Projector { return *p }, }, } } func (b *projectionBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectionBuilder) PreviewProjector() *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ fetch: b.fetch, parent: b, idField: "PreviewProjectorID", relField: "PreviewProjector", + conv: func(p *Projector) Projector { return *p }, }, } } func (r *Fetch) Projection(ids ...int) *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ ids: ids, fetch: r, + conv: func(p *Projection) Projection { return *p }, }, } } @@ -6306,8 +7664,8 @@ type Projector struct { UsedAsDefaultProjectorForMotionBlockInMeetingID dsfetch.Maybe[int] UsedAsDefaultProjectorForMotionInMeetingID dsfetch.Maybe[int] UsedAsDefaultProjectorForMotionPollInMeetingID dsfetch.Maybe[int] - UsedAsDefaultProjectorForPollInMeetingID dsfetch.Maybe[int] UsedAsDefaultProjectorForTopicInMeetingID dsfetch.Maybe[int] + UsedAsDefaultProjectorForTopicPollInMeetingID dsfetch.Maybe[int] UsedAsReferenceProjectorMeetingID dsfetch.Maybe[int] Width int CurrentProjectionList []Projection @@ -6326,16 +7684,17 @@ type Projector struct { UsedAsDefaultProjectorForMotionBlockInMeeting *dsfetch.Maybe[Meeting] UsedAsDefaultProjectorForMotionInMeeting *dsfetch.Maybe[Meeting] UsedAsDefaultProjectorForMotionPollInMeeting *dsfetch.Maybe[Meeting] - UsedAsDefaultProjectorForPollInMeeting *dsfetch.Maybe[Meeting] UsedAsDefaultProjectorForTopicInMeeting *dsfetch.Maybe[Meeting] + UsedAsDefaultProjectorForTopicPollInMeeting *dsfetch.Maybe[Meeting] UsedAsReferenceProjectorMeeting *dsfetch.Maybe[Meeting] } type projectorBuilder struct { - builder[projectorBuilder, *projectorBuilder, Projector] + builder[projectorBuilder, *projectorBuilder, Projector, *Projector] } -func (b *projectorBuilder) lazy(ds *Fetch, id int) *Projector { +func (b *projectorBuilder) lazy(ds *Fetch, idI any) *Projector { + id := idI.(int) c := Projector{} ds.Projector_AspectRatioDenominator(id).Lazy(&c.AspectRatioDenominator) ds.Projector_AspectRatioNumerator(id).Lazy(&c.AspectRatioNumerator) @@ -6374,8 +7733,8 @@ func (b *projectorBuilder) lazy(ds *Fetch, id int) *Projector { ds.Projector_UsedAsDefaultProjectorForMotionBlockInMeetingID(id).Lazy(&c.UsedAsDefaultProjectorForMotionBlockInMeetingID) ds.Projector_UsedAsDefaultProjectorForMotionInMeetingID(id).Lazy(&c.UsedAsDefaultProjectorForMotionInMeetingID) ds.Projector_UsedAsDefaultProjectorForMotionPollInMeetingID(id).Lazy(&c.UsedAsDefaultProjectorForMotionPollInMeetingID) - ds.Projector_UsedAsDefaultProjectorForPollInMeetingID(id).Lazy(&c.UsedAsDefaultProjectorForPollInMeetingID) ds.Projector_UsedAsDefaultProjectorForTopicInMeetingID(id).Lazy(&c.UsedAsDefaultProjectorForTopicInMeetingID) + ds.Projector_UsedAsDefaultProjectorForTopicPollInMeetingID(id).Lazy(&c.UsedAsDefaultProjectorForTopicPollInMeetingID) ds.Projector_UsedAsReferenceProjectorMeetingID(id).Lazy(&c.UsedAsReferenceProjectorMeetingID) ds.Projector_Width(id).Lazy(&c.Width) return &c @@ -6388,221 +7747,241 @@ func (b *projectorBuilder) Preload(rel builderWrapperI) *projectorBuilder { func (b *projectorBuilder) CurrentProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "CurrentProjectionIDs", relField: "CurrentProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *projectorBuilder) HistoryProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "HistoryProjectionIDs", relField: "HistoryProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *projectorBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) PreviewProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "PreviewProjectionIDs", relField: "PreviewProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForAgendaItemListInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForAgendaItemListInMeetingID", relField: "UsedAsDefaultProjectorForAgendaItemListInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForAmendmentInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForAmendmentInMeetingID", relField: "UsedAsDefaultProjectorForAmendmentInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForAssignmentInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForAssignmentInMeetingID", relField: "UsedAsDefaultProjectorForAssignmentInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForAssignmentPollInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForAssignmentPollInMeetingID", relField: "UsedAsDefaultProjectorForAssignmentPollInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForCountdownInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForCountdownInMeetingID", relField: "UsedAsDefaultProjectorForCountdownInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForCurrentLosInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForCurrentLosInMeetingID", relField: "UsedAsDefaultProjectorForCurrentLosInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForListOfSpeakersInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForListOfSpeakersInMeetingID", relField: "UsedAsDefaultProjectorForListOfSpeakersInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForMediafileInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForMediafileInMeetingID", relField: "UsedAsDefaultProjectorForMediafileInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForMessageInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForMessageInMeetingID", relField: "UsedAsDefaultProjectorForMessageInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForMotionBlockInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForMotionBlockInMeetingID", relField: "UsedAsDefaultProjectorForMotionBlockInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForMotionInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForMotionInMeetingID", relField: "UsedAsDefaultProjectorForMotionInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsDefaultProjectorForMotionPollInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsDefaultProjectorForMotionPollInMeetingID", relField: "UsedAsDefaultProjectorForMotionPollInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } -func (b *projectorBuilder) UsedAsDefaultProjectorForPollInMeeting() *meetingBuilder { +func (b *projectorBuilder) UsedAsDefaultProjectorForTopicInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, - idField: "UsedAsDefaultProjectorForPollInMeetingID", - relField: "UsedAsDefaultProjectorForPollInMeeting", + idField: "UsedAsDefaultProjectorForTopicInMeetingID", + relField: "UsedAsDefaultProjectorForTopicInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } -func (b *projectorBuilder) UsedAsDefaultProjectorForTopicInMeeting() *meetingBuilder { +func (b *projectorBuilder) UsedAsDefaultProjectorForTopicPollInMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, - idField: "UsedAsDefaultProjectorForTopicInMeetingID", - relField: "UsedAsDefaultProjectorForTopicInMeeting", + idField: "UsedAsDefaultProjectorForTopicPollInMeetingID", + relField: "UsedAsDefaultProjectorForTopicPollInMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorBuilder) UsedAsReferenceProjectorMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsReferenceProjectorMeetingID", relField: "UsedAsReferenceProjectorMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (r *Fetch) Projector(ids ...int) *projectorBuilder { return &projectorBuilder{ - builder: builder[projectorBuilder, *projectorBuilder, Projector]{ + builder: builder[projectorBuilder, *projectorBuilder, Projector, *Projector]{ ids: ids, fetch: r, + conv: func(p *Projector) Projector { return *p }, }, } } @@ -6626,10 +8005,11 @@ type ProjectorCountdown struct { } type projectorCountdownBuilder struct { - builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown] + builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown, *ProjectorCountdown] } -func (b *projectorCountdownBuilder) lazy(ds *Fetch, id int) *ProjectorCountdown { +func (b *projectorCountdownBuilder) lazy(ds *Fetch, idI any) *ProjectorCountdown { + id := idI.(int) c := ProjectorCountdown{} ds.ProjectorCountdown_CountdownTime(id).Lazy(&c.CountdownTime) ds.ProjectorCountdown_DefaultTime(id).Lazy(&c.DefaultTime) @@ -6651,54 +8031,59 @@ func (b *projectorCountdownBuilder) Preload(rel builderWrapperI) *projectorCount func (b *projectorCountdownBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorCountdownBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (b *projectorCountdownBuilder) UsedAsListOfSpeakersCountdownMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsListOfSpeakersCountdownMeetingID", relField: "UsedAsListOfSpeakersCountdownMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorCountdownBuilder) UsedAsPollCountdownMeeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "UsedAsPollCountdownMeetingID", relField: "UsedAsPollCountdownMeeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (r *Fetch) ProjectorCountdown(ids ...int) *projectorCountdownBuilder { return &projectorCountdownBuilder{ - builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown]{ + builder: builder[projectorCountdownBuilder, *projectorCountdownBuilder, ProjectorCountdown, *ProjectorCountdown]{ ids: ids, fetch: r, + conv: func(p *ProjectorCountdown) ProjectorCountdown { return *p }, }, } } @@ -6714,10 +8099,11 @@ type ProjectorMessage struct { } type projectorMessageBuilder struct { - builder[projectorMessageBuilder, *projectorMessageBuilder, ProjectorMessage] + builder[projectorMessageBuilder, *projectorMessageBuilder, ProjectorMessage, *ProjectorMessage] } -func (b *projectorMessageBuilder) lazy(ds *Fetch, id int) *ProjectorMessage { +func (b *projectorMessageBuilder) lazy(ds *Fetch, idI any) *ProjectorMessage { + id := idI.(int) c := ProjectorMessage{} ds.ProjectorMessage_ID(id).Lazy(&c.ID) ds.ProjectorMessage_MeetingID(id).Lazy(&c.MeetingID) @@ -6733,32 +8119,35 @@ func (b *projectorMessageBuilder) Preload(rel builderWrapperI) *projectorMessage func (b *projectorMessageBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *projectorMessageBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (r *Fetch) ProjectorMessage(ids ...int) *projectorMessageBuilder { return &projectorMessageBuilder{ - builder: builder[projectorMessageBuilder, *projectorMessageBuilder, ProjectorMessage]{ + builder: builder[projectorMessageBuilder, *projectorMessageBuilder, ProjectorMessage, *ProjectorMessage]{ ids: ids, fetch: r, + conv: func(p *ProjectorMessage) ProjectorMessage { return *p }, }, } } @@ -6789,10 +8178,11 @@ type Speaker struct { } type speakerBuilder struct { - builder[speakerBuilder, *speakerBuilder, Speaker] + builder[speakerBuilder, *speakerBuilder, Speaker, *Speaker] } -func (b *speakerBuilder) lazy(ds *Fetch, id int) *Speaker { +func (b *speakerBuilder) lazy(ds *Fetch, idI any) *Speaker { + id := idI.(int) c := Speaker{} ds.Speaker_Answer(id).Lazy(&c.Answer) ds.Speaker_BeginTime(id).Lazy(&c.BeginTime) @@ -6820,64 +8210,70 @@ func (b *speakerBuilder) Preload(rel builderWrapperI) *speakerBuilder { func (b *speakerBuilder) ListOfSpeakers() *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersID", relField: "ListOfSpeakers", + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } func (b *speakerBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *speakerBuilder) MeetingUser() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserID", relField: "MeetingUser", + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *speakerBuilder) PointOfOrderCategory() *pointOfOrderCategoryBuilder { return &pointOfOrderCategoryBuilder{ - builder: builder[pointOfOrderCategoryBuilder, *pointOfOrderCategoryBuilder, PointOfOrderCategory]{ + builder: builder[pointOfOrderCategoryBuilder, *pointOfOrderCategoryBuilder, PointOfOrderCategory, *PointOfOrderCategory]{ fetch: b.fetch, parent: b, idField: "PointOfOrderCategoryID", relField: "PointOfOrderCategory", + conv: func(p *PointOfOrderCategory) PointOfOrderCategory { return *p }, }, } } func (b *speakerBuilder) StructureLevelListOfSpeakers() *structureLevelListOfSpeakersBuilder { return &structureLevelListOfSpeakersBuilder{ - builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers]{ + builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers, *StructureLevelListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "StructureLevelListOfSpeakersID", relField: "StructureLevelListOfSpeakers", + conv: func(p *StructureLevelListOfSpeakers) StructureLevelListOfSpeakers { return *p }, }, } } func (r *Fetch) Speaker(ids ...int) *speakerBuilder { return &speakerBuilder{ - builder: builder[speakerBuilder, *speakerBuilder, Speaker]{ + builder: builder[speakerBuilder, *speakerBuilder, Speaker, *Speaker]{ ids: ids, fetch: r, + conv: func(p *Speaker) Speaker { return *p }, }, } } @@ -6897,10 +8293,11 @@ type StructureLevel struct { } type structureLevelBuilder struct { - builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel] + builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel, *StructureLevel] } -func (b *structureLevelBuilder) lazy(ds *Fetch, id int) *StructureLevel { +func (b *structureLevelBuilder) lazy(ds *Fetch, idI any) *StructureLevel { + id := idI.(int) c := StructureLevel{} ds.StructureLevel_Color(id).Lazy(&c.Color) ds.StructureLevel_DefaultTime(id).Lazy(&c.DefaultTime) @@ -6919,44 +8316,48 @@ func (b *structureLevelBuilder) Preload(rel builderWrapperI) *structureLevelBuil func (b *structureLevelBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *structureLevelBuilder) MeetingUserList() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserIDs", relField: "MeetingUserList", many: true, + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *structureLevelBuilder) StructureLevelListOfSpeakersList() *structureLevelListOfSpeakersBuilder { return &structureLevelListOfSpeakersBuilder{ - builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers]{ + builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers, *StructureLevelListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "StructureLevelListOfSpeakersIDs", relField: "StructureLevelListOfSpeakersList", many: true, + conv: func(p *StructureLevelListOfSpeakers) StructureLevelListOfSpeakers { return *p }, }, } } func (r *Fetch) StructureLevel(ids ...int) *structureLevelBuilder { return &structureLevelBuilder{ - builder: builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel]{ + builder: builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel, *StructureLevel]{ ids: ids, fetch: r, + conv: func(p *StructureLevel) StructureLevel { return *p }, }, } } @@ -6979,10 +8380,11 @@ type StructureLevelListOfSpeakers struct { } type structureLevelListOfSpeakersBuilder struct { - builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers] + builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers, *StructureLevelListOfSpeakers] } -func (b *structureLevelListOfSpeakersBuilder) lazy(ds *Fetch, id int) *StructureLevelListOfSpeakers { +func (b *structureLevelListOfSpeakersBuilder) lazy(ds *Fetch, idI any) *StructureLevelListOfSpeakers { + id := idI.(int) c := StructureLevelListOfSpeakers{} ds.StructureLevelListOfSpeakers_AdditionalTime(id).Lazy(&c.AdditionalTime) ds.StructureLevelListOfSpeakers_CurrentStartTime(id).Lazy(&c.CurrentStartTime) @@ -7003,54 +8405,59 @@ func (b *structureLevelListOfSpeakersBuilder) Preload(rel builderWrapperI) *stru func (b *structureLevelListOfSpeakersBuilder) ListOfSpeakers() *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersID", relField: "ListOfSpeakers", + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } func (b *structureLevelListOfSpeakersBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *structureLevelListOfSpeakersBuilder) SpeakerList() *speakerBuilder { return &speakerBuilder{ - builder: builder[speakerBuilder, *speakerBuilder, Speaker]{ + builder: builder[speakerBuilder, *speakerBuilder, Speaker, *Speaker]{ fetch: b.fetch, parent: b, idField: "SpeakerIDs", relField: "SpeakerList", many: true, + conv: func(p *Speaker) Speaker { return *p }, }, } } func (b *structureLevelListOfSpeakersBuilder) StructureLevel() *structureLevelBuilder { return &structureLevelBuilder{ - builder: builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel]{ + builder: builder[structureLevelBuilder, *structureLevelBuilder, StructureLevel, *StructureLevel]{ fetch: b.fetch, parent: b, idField: "StructureLevelID", relField: "StructureLevel", + conv: func(p *StructureLevel) StructureLevel { return *p }, }, } } func (r *Fetch) StructureLevelListOfSpeakers(ids ...int) *structureLevelListOfSpeakersBuilder { return &structureLevelListOfSpeakersBuilder{ - builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers]{ + builder: builder[structureLevelListOfSpeakersBuilder, *structureLevelListOfSpeakersBuilder, StructureLevelListOfSpeakers, *StructureLevelListOfSpeakers]{ ids: ids, fetch: r, + conv: func(p *StructureLevelListOfSpeakers) StructureLevelListOfSpeakers { return *p }, }, } } @@ -7065,10 +8472,11 @@ type Tag struct { } type tagBuilder struct { - builder[tagBuilder, *tagBuilder, Tag] + builder[tagBuilder, *tagBuilder, Tag, *Tag] } -func (b *tagBuilder) lazy(ds *Fetch, id int) *Tag { +func (b *tagBuilder) lazy(ds *Fetch, idI any) *Tag { + id := idI.(int) c := Tag{} ds.Tag_ID(id).Lazy(&c.ID) ds.Tag_MeetingID(id).Lazy(&c.MeetingID) @@ -7084,20 +8492,22 @@ func (b *tagBuilder) Preload(rel builderWrapperI) *tagBuilder { func (b *tagBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (r *Fetch) Tag(ids ...int) *tagBuilder { return &tagBuilder{ - builder: builder[tagBuilder, *tagBuilder, Tag]{ + builder: builder[tagBuilder, *tagBuilder, Tag, *Tag]{ ids: ids, fetch: r, + conv: func(p *Tag) Tag { return *p }, }, } } @@ -7159,10 +8569,11 @@ type Theme struct { } type themeBuilder struct { - builder[themeBuilder, *themeBuilder, Theme] + builder[themeBuilder, *themeBuilder, Theme, *Theme] } -func (b *themeBuilder) lazy(ds *Fetch, id int) *Theme { +func (b *themeBuilder) lazy(ds *Fetch, idI any) *Theme { + id := idI.(int) c := Theme{} ds.Theme_Abstain(id).Lazy(&c.Abstain) ds.Theme_Accent100(id).Lazy(&c.Accent100) @@ -7224,31 +8635,34 @@ func (b *themeBuilder) Preload(rel builderWrapperI) *themeBuilder { func (b *themeBuilder) Organization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "OrganizationID", relField: "Organization", + conv: func(p *Organization) Organization { return *p }, }, } } func (b *themeBuilder) ThemeForOrganization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "ThemeForOrganizationID", relField: "ThemeForOrganization", + conv: func(p *Organization) Organization { return *p }, }, } } func (r *Fetch) Theme(ids ...int) *themeBuilder { return &themeBuilder{ - builder: builder[themeBuilder, *themeBuilder, Theme]{ + builder: builder[themeBuilder, *themeBuilder, Theme, *Theme]{ ids: ids, fetch: r, + conv: func(p *Theme) Theme { return *p }, }, } } @@ -7274,10 +8688,11 @@ type Topic struct { } type topicBuilder struct { - builder[topicBuilder, *topicBuilder, Topic] + builder[topicBuilder, *topicBuilder, Topic, *Topic] } -func (b *topicBuilder) lazy(ds *Fetch, id int) *Topic { +func (b *topicBuilder) lazy(ds *Fetch, idI any) *Topic { + id := idI.(int) c := Topic{} ds.Topic_AgendaItemID(id).Lazy(&c.AgendaItemID) ds.Topic_AttachmentMeetingMediafileIDs(id).Lazy(&c.AttachmentMeetingMediafileIDs) @@ -7299,78 +8714,85 @@ func (b *topicBuilder) Preload(rel builderWrapperI) *topicBuilder { func (b *topicBuilder) AgendaItem() *agendaItemBuilder { return &agendaItemBuilder{ - builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem]{ + builder: builder[agendaItemBuilder, *agendaItemBuilder, AgendaItem, *AgendaItem]{ fetch: b.fetch, parent: b, idField: "AgendaItemID", relField: "AgendaItem", + conv: func(p *AgendaItem) AgendaItem { return *p }, }, } } func (b *topicBuilder) AttachmentMeetingMediafileList() *meetingMediafileBuilder { return &meetingMediafileBuilder{ - builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile]{ + builder: builder[meetingMediafileBuilder, *meetingMediafileBuilder, MeetingMediafile, *MeetingMediafile]{ fetch: b.fetch, parent: b, idField: "AttachmentMeetingMediafileIDs", relField: "AttachmentMeetingMediafileList", many: true, + conv: func(p *MeetingMediafile) MeetingMediafile { return *p }, }, } } func (b *topicBuilder) ListOfSpeakers() *listOfSpeakersBuilder { return &listOfSpeakersBuilder{ - builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers]{ + builder: builder[listOfSpeakersBuilder, *listOfSpeakersBuilder, ListOfSpeakers, *ListOfSpeakers]{ fetch: b.fetch, parent: b, idField: "ListOfSpeakersID", relField: "ListOfSpeakers", + conv: func(p *ListOfSpeakers) ListOfSpeakers { return *p }, }, } } func (b *topicBuilder) Meeting() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingID", relField: "Meeting", + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *topicBuilder) PollList() *pollBuilder { return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ + builder: builder[pollBuilder, *pollBuilder, Poll, *Poll]{ fetch: b.fetch, parent: b, idField: "PollIDs", relField: "PollList", many: true, + conv: func(p *Poll) Poll { return *p }, }, } } func (b *topicBuilder) ProjectionList() *projectionBuilder { return &projectionBuilder{ - builder: builder[projectionBuilder, *projectionBuilder, Projection]{ + builder: builder[projectionBuilder, *projectionBuilder, Projection, *Projection]{ fetch: b.fetch, parent: b, idField: "ProjectionIDs", relField: "ProjectionList", many: true, + conv: func(p *Projection) Projection { return *p }, }, } } func (r *Fetch) Topic(ids ...int) *topicBuilder { return &topicBuilder{ - builder: builder[topicBuilder, *topicBuilder, Topic]{ + builder: builder[topicBuilder, *topicBuilder, Topic, *Topic]{ ids: ids, fetch: r, + conv: func(p *Topic) Topic { return *p }, }, } } @@ -7382,7 +8804,6 @@ type User struct { CommitteeManagementIDs []int DefaultPassword string DefaultVoteWeight decimal.Decimal - DelegatedVoteIDs []int Email string External bool FirstName string @@ -7401,20 +8822,15 @@ type User struct { MeetingIDs []int MeetingUserIDs []int MemberNumber string - OptionIDs []int OrganizationID int OrganizationManagementLevel string Password string - PollCandidateIDs []int - PollVotedIDs []int Pronoun string SamlID string Title string Username string - VoteIDs []int CommitteeList []Committee CommitteeManagementList []Committee - DelegatedVoteList []Vote Gender *dsfetch.Maybe[Gender] HistoryEntryList []HistoryEntry HistoryPositionList []HistoryPosition @@ -7422,25 +8838,21 @@ type User struct { IsPresentInMeetingList []Meeting MeetingList []Meeting MeetingUserList []MeetingUser - OptionList []Option Organization *Organization - PollCandidateList []PollCandidate - PollVotedList []Poll - VoteList []Vote } type userBuilder struct { - builder[userBuilder, *userBuilder, User] + builder[userBuilder, *userBuilder, User, *User] } -func (b *userBuilder) lazy(ds *Fetch, id int) *User { +func (b *userBuilder) lazy(ds *Fetch, idI any) *User { + id := idI.(int) c := User{} ds.User_CanChangeOwnPassword(id).Lazy(&c.CanChangeOwnPassword) ds.User_CommitteeIDs(id).Lazy(&c.CommitteeIDs) ds.User_CommitteeManagementIDs(id).Lazy(&c.CommitteeManagementIDs) ds.User_DefaultPassword(id).Lazy(&c.DefaultPassword) ds.User_DefaultVoteWeight(id).Lazy(&c.DefaultVoteWeight) - ds.User_DelegatedVoteIDs(id).Lazy(&c.DelegatedVoteIDs) ds.User_Email(id).Lazy(&c.Email) ds.User_External(id).Lazy(&c.External) ds.User_FirstName(id).Lazy(&c.FirstName) @@ -7459,17 +8871,13 @@ func (b *userBuilder) lazy(ds *Fetch, id int) *User { ds.User_MeetingIDs(id).Lazy(&c.MeetingIDs) ds.User_MeetingUserIDs(id).Lazy(&c.MeetingUserIDs) ds.User_MemberNumber(id).Lazy(&c.MemberNumber) - ds.User_OptionIDs(id).Lazy(&c.OptionIDs) ds.User_OrganizationID(id).Lazy(&c.OrganizationID) ds.User_OrganizationManagementLevel(id).Lazy(&c.OrganizationManagementLevel) ds.User_Password(id).Lazy(&c.Password) - ds.User_PollCandidateIDs(id).Lazy(&c.PollCandidateIDs) - ds.User_PollVotedIDs(id).Lazy(&c.PollVotedIDs) ds.User_Pronoun(id).Lazy(&c.Pronoun) ds.User_SamlID(id).Lazy(&c.SamlID) ds.User_Title(id).Lazy(&c.Title) ds.User_Username(id).Lazy(&c.Username) - ds.User_VoteIDs(id).Lazy(&c.VoteIDs) return &c } @@ -7480,277 +8888,137 @@ func (b *userBuilder) Preload(rel builderWrapperI) *userBuilder { func (b *userBuilder) CommitteeList() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "CommitteeIDs", relField: "CommitteeList", many: true, + conv: func(p *Committee) Committee { return *p }, }, } } func (b *userBuilder) CommitteeManagementList() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "CommitteeManagementIDs", relField: "CommitteeManagementList", many: true, - }, - } -} - -func (b *userBuilder) DelegatedVoteList() *voteBuilder { - return &voteBuilder{ - builder: builder[voteBuilder, *voteBuilder, Vote]{ - fetch: b.fetch, - parent: b, - idField: "DelegatedVoteIDs", - relField: "DelegatedVoteList", - many: true, + conv: func(p *Committee) Committee { return *p }, }, } } func (b *userBuilder) Gender() *genderBuilder { return &genderBuilder{ - builder: builder[genderBuilder, *genderBuilder, Gender]{ + builder: builder[genderBuilder, *genderBuilder, Gender, *Gender]{ fetch: b.fetch, parent: b, idField: "GenderID", relField: "Gender", + conv: func(p *Gender) Gender { return *p }, }, } } func (b *userBuilder) HistoryEntryList() *historyEntryBuilder { return &historyEntryBuilder{ - builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry]{ + builder: builder[historyEntryBuilder, *historyEntryBuilder, HistoryEntry, *HistoryEntry]{ fetch: b.fetch, parent: b, idField: "HistoryEntryIDs", relField: "HistoryEntryList", many: true, + conv: func(p *HistoryEntry) HistoryEntry { return *p }, }, } } func (b *userBuilder) HistoryPositionList() *historyPositionBuilder { return &historyPositionBuilder{ - builder: builder[historyPositionBuilder, *historyPositionBuilder, HistoryPosition]{ + builder: builder[historyPositionBuilder, *historyPositionBuilder, HistoryPosition, *HistoryPosition]{ fetch: b.fetch, parent: b, idField: "HistoryPositionIDs", relField: "HistoryPositionList", many: true, + conv: func(p *HistoryPosition) HistoryPosition { return *p }, }, } } func (b *userBuilder) HomeCommittee() *committeeBuilder { return &committeeBuilder{ - builder: builder[committeeBuilder, *committeeBuilder, Committee]{ + builder: builder[committeeBuilder, *committeeBuilder, Committee, *Committee]{ fetch: b.fetch, parent: b, idField: "HomeCommitteeID", relField: "HomeCommittee", + conv: func(p *Committee) Committee { return *p }, }, } } func (b *userBuilder) IsPresentInMeetingList() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "IsPresentInMeetingIDs", relField: "IsPresentInMeetingList", many: true, + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *userBuilder) MeetingList() *meetingBuilder { return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ + builder: builder[meetingBuilder, *meetingBuilder, Meeting, *Meeting]{ fetch: b.fetch, parent: b, idField: "MeetingIDs", relField: "MeetingList", many: true, + conv: func(p *Meeting) Meeting { return *p }, }, } } func (b *userBuilder) MeetingUserList() *meetingUserBuilder { return &meetingUserBuilder{ - builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser]{ + builder: builder[meetingUserBuilder, *meetingUserBuilder, MeetingUser, *MeetingUser]{ fetch: b.fetch, parent: b, idField: "MeetingUserIDs", relField: "MeetingUserList", many: true, - }, - } -} - -func (b *userBuilder) OptionList() *optionBuilder { - return &optionBuilder{ - builder: builder[optionBuilder, *optionBuilder, Option]{ - fetch: b.fetch, - parent: b, - idField: "OptionIDs", - relField: "OptionList", - many: true, + conv: func(p *MeetingUser) MeetingUser { return *p }, }, } } func (b *userBuilder) Organization() *organizationBuilder { return &organizationBuilder{ - builder: builder[organizationBuilder, *organizationBuilder, Organization]{ + builder: builder[organizationBuilder, *organizationBuilder, Organization, *Organization]{ fetch: b.fetch, parent: b, idField: "OrganizationID", relField: "Organization", - }, - } -} - -func (b *userBuilder) PollCandidateList() *pollCandidateBuilder { - return &pollCandidateBuilder{ - builder: builder[pollCandidateBuilder, *pollCandidateBuilder, PollCandidate]{ - fetch: b.fetch, - parent: b, - idField: "PollCandidateIDs", - relField: "PollCandidateList", - many: true, - }, - } -} - -func (b *userBuilder) PollVotedList() *pollBuilder { - return &pollBuilder{ - builder: builder[pollBuilder, *pollBuilder, Poll]{ - fetch: b.fetch, - parent: b, - idField: "PollVotedIDs", - relField: "PollVotedList", - many: true, - }, - } -} - -func (b *userBuilder) VoteList() *voteBuilder { - return &voteBuilder{ - builder: builder[voteBuilder, *voteBuilder, Vote]{ - fetch: b.fetch, - parent: b, - idField: "VoteIDs", - relField: "VoteList", - many: true, + conv: func(p *Organization) Organization { return *p }, }, } } func (r *Fetch) User(ids ...int) *userBuilder { return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ - ids: ids, - fetch: r, - }, - } -} - -// Vote has all fields from vote. -type Vote struct { - DelegatedUserID dsfetch.Maybe[int] - ID int - MeetingID int - OptionID int - UserID dsfetch.Maybe[int] - UserToken string - Value string - Weight decimal.Decimal - DelegatedUser *dsfetch.Maybe[User] - Meeting *Meeting - Option *Option - User *dsfetch.Maybe[User] -} - -type voteBuilder struct { - builder[voteBuilder, *voteBuilder, Vote] -} - -func (b *voteBuilder) lazy(ds *Fetch, id int) *Vote { - c := Vote{} - ds.Vote_DelegatedUserID(id).Lazy(&c.DelegatedUserID) - ds.Vote_ID(id).Lazy(&c.ID) - ds.Vote_MeetingID(id).Lazy(&c.MeetingID) - ds.Vote_OptionID(id).Lazy(&c.OptionID) - ds.Vote_UserID(id).Lazy(&c.UserID) - ds.Vote_UserToken(id).Lazy(&c.UserToken) - ds.Vote_Value(id).Lazy(&c.Value) - ds.Vote_Weight(id).Lazy(&c.Weight) - return &c -} - -func (b *voteBuilder) Preload(rel builderWrapperI) *voteBuilder { - b.builder.Preload(rel) - return b -} - -func (b *voteBuilder) DelegatedUser() *userBuilder { - return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ - fetch: b.fetch, - parent: b, - idField: "DelegatedUserID", - relField: "DelegatedUser", - }, - } -} - -func (b *voteBuilder) Meeting() *meetingBuilder { - return &meetingBuilder{ - builder: builder[meetingBuilder, *meetingBuilder, Meeting]{ - fetch: b.fetch, - parent: b, - idField: "MeetingID", - relField: "Meeting", - }, - } -} - -func (b *voteBuilder) Option() *optionBuilder { - return &optionBuilder{ - builder: builder[optionBuilder, *optionBuilder, Option]{ - fetch: b.fetch, - parent: b, - idField: "OptionID", - relField: "Option", - }, - } -} - -func (b *voteBuilder) User() *userBuilder { - return &userBuilder{ - builder: builder[userBuilder, *userBuilder, User]{ - fetch: b.fetch, - parent: b, - idField: "UserID", - relField: "User", - }, - } -} - -func (r *Fetch) Vote(ids ...int) *voteBuilder { - return &voteBuilder{ - builder: builder[voteBuilder, *voteBuilder, Vote]{ + builder: builder[userBuilder, *userBuilder, User, *User]{ ids: ids, fetch: r, + conv: func(p *User) User { return *p }, }, } } diff --git a/datastore/field_def.go b/datastore/field_def.go index de10b1780..30618969d 100644 --- a/datastore/field_def.go +++ b/datastore/field_def.go @@ -10,16 +10,17 @@ var collectionFields = map[string][]string{ "chat_message": {"chat_group_id", "content", "created", "id", "meeting_id", "meeting_user_id"}, "committee": {"all_child_ids", "all_parent_ids", "child_ids", "default_meeting_id", "description", "external_id", "forward_to_committee_ids", "id", "manager_ids", "meeting_ids", "name", "native_user_ids", "organization_id", "organization_tag_ids", "parent_id", "receive_forwardings_from_committee_ids", "user_ids"}, "gender": {"id", "name", "organization_id", "user_ids"}, - "group": {"admin_group_for_meeting_id", "anonymous_group_for_meeting_id", "default_group_for_meeting_id", "external_id", "id", "meeting_id", "meeting_mediafile_access_group_ids", "meeting_mediafile_inherited_access_group_ids", "meeting_user_ids", "name", "permissions", "poll_ids", "read_chat_group_ids", "read_comment_section_ids", "used_as_assignment_poll_default_id", "used_as_motion_poll_default_id", "used_as_poll_default_id", "used_as_topic_poll_default_id", "weight", "write_chat_group_ids", "write_comment_section_ids"}, - "history_entry": {"entries", "id", "meeting_id", "model_id", "original_model_id", "position_id"}, + "group": {"admin_group_for_meeting_id", "anonymous_group_for_meeting_id", "default_group_for_meeting_id", "external_id", "id", "meeting_id", "meeting_mediafile_access_group_ids", "meeting_mediafile_inherited_access_group_ids", "meeting_user_ids", "name", "permissions", "poll_ids", "read_chat_group_ids", "read_comment_section_ids", "used_in_meeting_poll_default_ids", "weight", "write_chat_group_ids", "write_comment_section_ids"}, + "history_entry": {"entries", "id", "meeting_id", "model_id", "original_model_id", "position_id", "structured_information"}, "history_position": {"entry_ids", "id", "original_user_id", "timestamp", "user_id"}, "import_preview": {"created", "id", "name", "result", "state"}, "list_of_speakers": {"closed", "content_object_id", "id", "meeting_id", "moderator_notes", "projection_ids", "sequential_number", "speaker_ids", "structure_level_list_of_speakers_ids"}, "mediafile": {"child_ids", "create_timestamp", "filename", "filesize", "id", "is_directory", "meeting_mediafile_ids", "mimetype", "owner_id", "parent_id", "pdf_information", "published_to_meetings_in_organization_id", "title", "token"}, - "meeting": {"admin_group_id", "agenda_enable_numbering", "agenda_item_creation", "agenda_item_ids", "agenda_new_items_default_visibility", "agenda_number_prefix", "agenda_numeral_system", "agenda_show_internal_items_on_projector", "agenda_show_subtitles", "agenda_show_topic_navigation_on_detail_view", "all_projection_ids", "anonymous_group_id", "applause_enable", "applause_max_amount", "applause_min_amount", "applause_particle_image_url", "applause_show_level", "applause_timeout", "applause_type", "assignment_candidate_ids", "assignment_ids", "assignment_poll_add_candidates_to_list_of_speakers", "assignment_poll_ballot_paper_number", "assignment_poll_ballot_paper_selection", "assignment_poll_default_backend", "assignment_poll_default_group_ids", "assignment_poll_default_method", "assignment_poll_default_onehundred_percent_base", "assignment_poll_default_type", "assignment_poll_enable_max_votes_per_option", "assignment_poll_sort_poll_result_by_votes", "assignments_export_preamble", "assignments_export_title", "chat_group_ids", "chat_message_ids", "committee_id", "conference_auto_connect", "conference_auto_connect_next_speakers", "conference_enable_helpdesk", "conference_los_restriction", "conference_open_microphone", "conference_open_video", "conference_show", "conference_stream_poster_url", "conference_stream_url", "custom_translations", "default_group_id", "default_meeting_for_committee_id", "default_projector_agenda_item_list_ids", "default_projector_amendment_ids", "default_projector_assignment_ids", "default_projector_assignment_poll_ids", "default_projector_countdown_ids", "default_projector_current_los_ids", "default_projector_list_of_speakers_ids", "default_projector_mediafile_ids", "default_projector_message_ids", "default_projector_motion_block_ids", "default_projector_motion_ids", "default_projector_motion_poll_ids", "default_projector_poll_ids", "default_projector_topic_ids", "description", "enable_anonymous", "end_time", "export_csv_encoding", "export_csv_separator", "export_pdf_fontsize", "export_pdf_line_height", "export_pdf_page_margin_bottom", "export_pdf_page_margin_left", "export_pdf_page_margin_right", "export_pdf_page_margin_top", "export_pdf_pagenumber_alignment", "export_pdf_pagesize", "external_id", "font_bold_id", "font_bold_italic_id", "font_chyron_speaker_name_id", "font_italic_id", "font_monospace_id", "font_projector_h1_id", "font_projector_h2_id", "font_regular_id", "forwarded_motion_ids", "group_ids", "id", "imported_at", "is_active_in_organization_id", "is_archived_in_organization_id", "jitsi_domain", "jitsi_room_name", "jitsi_room_password", "language", "list_of_speakers_allow_multiple_speakers", "list_of_speakers_amount_last_on_projector", "list_of_speakers_amount_next_on_projector", "list_of_speakers_can_create_point_of_order_for_others", "list_of_speakers_can_set_contribution_self", "list_of_speakers_closing_disables_point_of_order", "list_of_speakers_countdown_id", "list_of_speakers_couple_countdown", "list_of_speakers_default_structure_level_time", "list_of_speakers_enable_interposed_question", "list_of_speakers_enable_point_of_order_categories", "list_of_speakers_enable_point_of_order_speakers", "list_of_speakers_enable_pro_contra_speech", "list_of_speakers_hide_contribution_count", "list_of_speakers_ids", "list_of_speakers_initially_closed", "list_of_speakers_intervention_time", "list_of_speakers_present_users_only", "list_of_speakers_show_amount_of_speakers_on_slide", "list_of_speakers_show_first_contribution", "list_of_speakers_speaker_note_for_everyone", "location", "locked_from_inside", "logo_pdf_ballot_paper_id", "logo_pdf_footer_l_id", "logo_pdf_footer_r_id", "logo_pdf_header_l_id", "logo_pdf_header_r_id", "logo_projector_header_id", "logo_projector_main_id", "logo_web_header_id", "mediafile_ids", "meeting_mediafile_ids", "meeting_user_ids", "motion_block_ids", "motion_category_ids", "motion_change_recommendation_ids", "motion_comment_ids", "motion_comment_section_ids", "motion_editor_ids", "motion_ids", "motion_poll_ballot_paper_number", "motion_poll_ballot_paper_selection", "motion_poll_default_backend", "motion_poll_default_group_ids", "motion_poll_default_method", "motion_poll_default_onehundred_percent_base", "motion_poll_default_type", "motion_poll_projection_max_columns", "motion_poll_projection_name_order_first", "motion_state_ids", "motion_submitter_ids", "motion_supporter_ids", "motion_workflow_ids", "motion_working_group_speaker_ids", "motions_amendments_enabled", "motions_amendments_in_main_list", "motions_amendments_multiple_paragraphs", "motions_amendments_of_amendments", "motions_amendments_prefix", "motions_amendments_text_mode", "motions_block_slide_columns", "motions_create_enable_additional_submitter_text", "motions_default_amendment_workflow_id", "motions_default_line_numbering", "motions_default_sorting", "motions_default_workflow_id", "motions_enable_editor", "motions_enable_origin_motion_display", "motions_enable_reason_on_projector", "motions_enable_recommendation_on_projector", "motions_enable_restricted_editor_for_manager", "motions_enable_restricted_editor_for_non_manager", "motions_enable_sidebox_on_projector", "motions_enable_text_on_projector", "motions_enable_working_group_speaker", "motions_export_follow_recommendation", "motions_export_preamble", "motions_export_submitter_recommendation", "motions_export_title", "motions_hide_metadata_background", "motions_line_length", "motions_number_min_digits", "motions_number_type", "motions_number_with_blank", "motions_origin_motion_toggle_default", "motions_preamble", "motions_reason_required", "motions_recommendation_text_mode", "motions_recommendations_by", "motions_show_referring_motions", "motions_show_sequential_number", "motions_supporters_min_amount", "name", "option_ids", "organization_tag_ids", "personal_note_ids", "point_of_order_category_ids", "poll_ballot_paper_number", "poll_ballot_paper_selection", "poll_candidate_ids", "poll_candidate_list_ids", "poll_countdown_id", "poll_couple_countdown", "poll_default_backend", "poll_default_group_ids", "poll_default_live_voting_enabled", "poll_default_method", "poll_default_onehundred_percent_base", "poll_default_type", "poll_ids", "poll_sort_poll_result_by_votes", "present_user_ids", "projection_ids", "projector_countdown_default_time", "projector_countdown_ids", "projector_countdown_warning_time", "projector_ids", "projector_message_ids", "reference_projector_id", "relevant_history_entry_ids", "speaker_ids", "start_time", "structure_level_ids", "structure_level_list_of_speakers_ids", "tag_ids", "template_for_organization_id", "time_zone", "topic_ids", "topic_poll_default_group_ids", "user_ids", "users_allow_self_set_present", "users_email_body", "users_email_replyto", "users_email_sender", "users_email_subject", "users_enable_presence_view", "users_enable_vote_delegations", "users_enable_vote_weight", "users_forbid_delegator_as_submitter", "users_forbid_delegator_as_supporter", "users_forbid_delegator_in_list_of_speakers", "users_forbid_delegator_to_vote", "users_pdf_welcometext", "users_pdf_welcometitle", "users_pdf_wlan_encryption", "users_pdf_wlan_password", "users_pdf_wlan_ssid", "vote_ids", "welcome_text", "welcome_title"}, + "meeting": {"admin_group_id", "agenda_enable_numbering", "agenda_item_creation", "agenda_item_ids", "agenda_new_items_default_visibility", "agenda_number_prefix", "agenda_numeral_system", "agenda_show_internal_items_on_projector", "agenda_show_subtitles", "agenda_show_topic_navigation_on_detail_view", "all_projection_ids", "anonymous_group_id", "applause_enable", "applause_max_amount", "applause_min_amount", "applause_particle_image_url", "applause_show_level", "applause_timeout", "applause_type", "assignment_candidate_ids", "assignment_ids", "assignment_poll_add_candidates_to_list_of_speakers", "assignment_poll_config_id", "assignment_poll_default_method", "assignments_export_preamble", "assignments_export_title", "chat_group_ids", "chat_message_ids", "committee_id", "conference_auto_connect", "conference_auto_connect_next_speakers", "conference_enable_helpdesk", "conference_los_restriction", "conference_open_microphone", "conference_open_video", "conference_show", "conference_stream_poster_url", "conference_stream_url", "custom_translations", "default_group_id", "default_meeting_for_committee_id", "default_projector_agenda_item_list_ids", "default_projector_amendment_ids", "default_projector_assignment_ids", "default_projector_assignment_poll_ids", "default_projector_countdown_ids", "default_projector_current_los_ids", "default_projector_list_of_speakers_ids", "default_projector_mediafile_ids", "default_projector_message_ids", "default_projector_motion_block_ids", "default_projector_motion_ids", "default_projector_motion_poll_ids", "default_projector_topic_ids", "default_projector_topic_poll_ids", "description", "enable_anonymous", "end_time", "export_csv_encoding", "export_csv_separator", "export_pdf_fontsize", "export_pdf_line_height", "export_pdf_page_margin_bottom", "export_pdf_page_margin_left", "export_pdf_page_margin_right", "export_pdf_page_margin_top", "export_pdf_pagenumber_alignment", "export_pdf_pagesize", "external_id", "font_bold_id", "font_bold_italic_id", "font_chyron_speaker_name_id", "font_italic_id", "font_monospace_id", "font_projector_h1_id", "font_projector_h2_id", "font_regular_id", "forwarded_motion_ids", "group_ids", "id", "imported_at", "is_active_in_organization_id", "is_archived_in_organization_id", "jitsi_domain", "jitsi_room_name", "jitsi_room_password", "language", "list_of_speakers_allow_multiple_speakers", "list_of_speakers_amount_last_on_projector", "list_of_speakers_amount_next_on_projector", "list_of_speakers_can_create_point_of_order_for_others", "list_of_speakers_can_set_contribution_self", "list_of_speakers_closing_disables_point_of_order", "list_of_speakers_countdown_id", "list_of_speakers_couple_countdown", "list_of_speakers_default_structure_level_time", "list_of_speakers_enable_interposed_question", "list_of_speakers_enable_point_of_order_categories", "list_of_speakers_enable_point_of_order_speakers", "list_of_speakers_enable_pro_contra_speech", "list_of_speakers_hide_contribution_count", "list_of_speakers_ids", "list_of_speakers_initially_closed", "list_of_speakers_intervention_time", "list_of_speakers_present_users_only", "list_of_speakers_show_amount_of_speakers_on_slide", "list_of_speakers_show_first_contribution", "list_of_speakers_speaker_note_for_everyone", "location", "locked_from_inside", "logo_pdf_ballot_paper_id", "logo_pdf_footer_l_id", "logo_pdf_footer_r_id", "logo_pdf_header_l_id", "logo_pdf_header_r_id", "logo_projector_header_id", "logo_projector_main_id", "logo_web_header_id", "mediafile_ids", "meeting_mediafile_ids", "meeting_user_ids", "motion_block_ids", "motion_category_ids", "motion_change_recommendation_ids", "motion_comment_ids", "motion_comment_section_ids", "motion_editor_ids", "motion_ids", "motion_poll_config_id", "motion_state_ids", "motion_submitter_ids", "motion_supporter_ids", "motion_workflow_ids", "motion_working_group_speaker_ids", "motions_amendments_enabled", "motions_amendments_in_main_list", "motions_amendments_multiple_paragraphs", "motions_amendments_of_amendments", "motions_amendments_prefix", "motions_amendments_text_mode", "motions_block_slide_columns", "motions_create_enable_additional_submitter_text", "motions_default_amendment_workflow_id", "motions_default_line_numbering", "motions_default_sorting", "motions_default_workflow_id", "motions_enable_editor", "motions_enable_origin_motion_display", "motions_enable_reason_on_projector", "motions_enable_recommendation_on_projector", "motions_enable_restricted_editor_for_manager", "motions_enable_restricted_editor_for_non_manager", "motions_enable_sidebox_on_projector", "motions_enable_text_on_projector", "motions_enable_working_group_speaker", "motions_export_follow_recommendation", "motions_export_preamble", "motions_export_submitter_recommendation", "motions_export_title", "motions_hide_metadata_background", "motions_line_length", "motions_number_min_digits", "motions_number_type", "motions_number_with_blank", "motions_origin_motion_toggle_default", "motions_preamble", "motions_reason_required", "motions_recommendation_text_mode", "motions_recommendations_by", "motions_show_referring_motions", "motions_show_sequential_number", "motions_supporters_min_amount", "name", "organization_tag_ids", "personal_note_ids", "point_of_order_category_ids", "poll_countdown_id", "poll_couple_countdown", "poll_default_allow_invalid", "poll_default_allow_vote_split", "poll_default_ids", "poll_default_live_voting_enabled", "poll_enable_max_votes_per_option", "poll_ids", "poll_projection_max_columns", "poll_projection_name_order_first", "present_user_ids", "projection_ids", "projector_countdown_default_time", "projector_countdown_ids", "projector_countdown_warning_time", "projector_ids", "projector_message_ids", "reference_projector_id", "relevant_history_entry_ids", "speaker_ids", "start_time", "structure_level_ids", "structure_level_list_of_speakers_ids", "tag_ids", "template_for_organization_id", "time_zone", "topic_ids", "topic_poll_config_id", "topic_poll_default_method", "user_ids", "users_allow_self_set_present", "users_email_body", "users_email_replyto", "users_email_sender", "users_email_subject", "users_enable_presence_view", "users_enable_vote_delegations", "users_enable_vote_weight", "users_forbid_delegator_as_submitter", "users_forbid_delegator_as_supporter", "users_forbid_delegator_in_list_of_speakers", "users_forbid_delegator_to_vote", "users_pdf_welcometext", "users_pdf_welcometitle", "users_pdf_wlan_encryption", "users_pdf_wlan_password", "users_pdf_wlan_ssid", "welcome_text", "welcome_title"}, "meeting_mediafile": {"access_group_ids", "attachment_ids", "id", "inherited_access_group_ids", "is_public", "list_of_speakers_id", "mediafile_id", "meeting_id", "projection_ids", "used_as_font_bold_in_meeting_id", "used_as_font_bold_italic_in_meeting_id", "used_as_font_chyron_speaker_name_in_meeting_id", "used_as_font_italic_in_meeting_id", "used_as_font_monospace_in_meeting_id", "used_as_font_projector_h1_in_meeting_id", "used_as_font_projector_h2_in_meeting_id", "used_as_font_regular_in_meeting_id", "used_as_logo_pdf_ballot_paper_in_meeting_id", "used_as_logo_pdf_footer_l_in_meeting_id", "used_as_logo_pdf_footer_r_in_meeting_id", "used_as_logo_pdf_header_l_in_meeting_id", "used_as_logo_pdf_header_r_in_meeting_id", "used_as_logo_projector_header_in_meeting_id", "used_as_logo_projector_main_in_meeting_id", "used_as_logo_web_header_in_meeting_id"}, - "meeting_user": {"about_me", "assignment_candidate_ids", "chat_message_ids", "comment", "group_ids", "id", "locked_out", "meeting_id", "motion_editor_ids", "motion_submitter_ids", "motion_supporter_ids", "motion_working_group_speaker_ids", "number", "personal_note_ids", "speaker_ids", "structure_level_ids", "user_id", "vote_delegated_to_id", "vote_delegations_from_ids", "vote_weight"}, - "motion": {"additional_submitter", "agenda_item_id", "all_derived_motion_ids", "all_origin_ids", "amendment_ids", "amendment_paragraphs", "attachment_meeting_mediafile_ids", "block_id", "category_id", "category_weight", "change_recommendation_ids", "comment_ids", "created", "derived_motion_ids", "diff_version", "editor_ids", "forwarded", "history_entry_ids", "id", "identical_motion_ids", "last_modified", "lead_motion_id", "list_of_speakers_id", "marked_forwarded", "meeting_id", "modified_final_version", "number", "number_value", "option_ids", "origin_id", "origin_meeting_id", "personal_note_ids", "poll_ids", "projection_ids", "reason", "recommendation_extension", "recommendation_extension_reference_ids", "recommendation_id", "referenced_in_motion_recommendation_extension_ids", "referenced_in_motion_state_extension_ids", "sequential_number", "sort_child_ids", "sort_parent_id", "sort_weight", "start_line_number", "state_extension", "state_extension_reference_ids", "state_id", "submitter_ids", "supporter_ids", "tag_ids", "text", "text_hash", "title", "workflow_timestamp", "working_group_speaker_ids"}, + "meeting_poll_default": {"allow_abstain", "allow_nota", "display_chart", "group_ids", "id", "meeting_id", "onehundred_percent_base", "sort_result_by_votes", "strike_out", "used_as_assignment_poll_config_in_meeting_id", "used_as_motion_poll_config_in_meeting_id", "used_as_topic_poll_config_in_meeting_id", "visibility"}, + "meeting_user": {"about_me", "acting_ballot_ids", "assignment_candidate_ids", "chat_message_ids", "comment", "group_ids", "history_entry_ids", "id", "locked_out", "meeting_id", "motion_editor_ids", "motion_submitter_ids", "motion_supporter_ids", "motion_working_group_speaker_ids", "number", "personal_note_ids", "poll_option_ids", "represented_ballot_ids", "speaker_ids", "structure_level_ids", "user_id", "vote_delegated_to_id", "vote_delegations_from_ids", "vote_weight"}, + "motion": {"additional_submitter", "agenda_item_id", "all_derived_motion_ids", "all_origin_ids", "amendment_ids", "amendment_paragraphs", "attachment_meeting_mediafile_ids", "block_id", "category_id", "category_weight", "change_recommendation_ids", "comment_ids", "created", "derived_motion_ids", "diff_version", "editor_ids", "forwarded", "history_entry_ids", "id", "identical_motion_ids", "last_modified", "lead_motion_id", "list_of_speakers_id", "marked_forwarded", "meeting_id", "modified_final_version", "number", "number_value", "origin_id", "origin_meeting_id", "personal_note_ids", "poll_ids", "projection_ids", "reason", "recommendation_extension", "recommendation_extension_reference_ids", "recommendation_id", "referenced_in_motion_recommendation_extension_ids", "referenced_in_motion_state_extension_ids", "sequential_number", "sort_child_ids", "sort_parent_id", "sort_weight", "start_line_number", "state_extension", "state_extension_reference_ids", "state_id", "submitter_ids", "supporter_ids", "tag_ids", "text", "text_hash", "title", "workflow_timestamp", "working_group_speaker_ids"}, "motion_block": {"agenda_item_id", "id", "internal", "list_of_speakers_id", "meeting_id", "motion_ids", "projection_ids", "sequential_number", "title"}, "motion_category": {"child_ids", "id", "level", "meeting_id", "motion_ids", "name", "parent_id", "prefix", "sequential_number", "weight"}, "motion_change_recommendation": {"creation_time", "id", "internal", "line_from", "line_to", "meeting_id", "motion_id", "other_description", "rejected", "text", "type"}, @@ -31,16 +32,21 @@ var collectionFields = map[string][]string{ "motion_supporter": {"id", "meeting_id", "meeting_user_id", "motion_id"}, "motion_workflow": {"default_amendment_workflow_meeting_id", "default_workflow_meeting_id", "first_state_id", "id", "meeting_id", "name", "sequential_number", "state_ids"}, "motion_working_group_speaker": {"id", "meeting_id", "meeting_user_id", "motion_id", "weight"}, - "option": {"abstain", "content_object_id", "id", "meeting_id", "no", "poll_id", "text", "used_as_global_option_in_poll_id", "vote_ids", "weight", "yes"}, "organization": {"active_meeting_ids", "archived_meeting_ids", "committee_ids", "default_language", "description", "disable_forward_with_attachments", "enable_anonymous", "enable_chat", "enable_electronic_voting", "gender_ids", "id", "legal_notice", "limit_of_meetings", "limit_of_users", "login_text", "mediafile_ids", "name", "organization_tag_ids", "privacy_policy", "published_mediafile_ids", "require_duplicate_from", "reset_password_verbose_errors", "restrict_edit_forward_committees", "restrict_editing_same_level_committee_admins", "saml_attr_mapping", "saml_enabled", "saml_login_button_text", "saml_metadata_idp", "saml_metadata_sp", "saml_private_key", "template_meeting_ids", "theme_id", "theme_ids", "time_zone", "url", "user_ids", "users_email_body", "users_email_replyto", "users_email_sender", "users_email_subject"}, "organization_tag": {"color", "id", "name", "organization_id", "tagged_ids"}, "personal_note": {"content_object_id", "id", "meeting_id", "meeting_user_id", "note", "star"}, "point_of_order_category": {"id", "meeting_id", "rank", "speaker_ids", "text"}, - "poll": {"backend", "content_object_id", "description", "entitled_group_ids", "entitled_users_at_stop", "global_abstain", "global_no", "global_option_id", "global_yes", "id", "is_pseudoanonymized", "live_votes", "live_voting_enabled", "max_votes_amount", "max_votes_per_option", "meeting_id", "min_votes_amount", "onehundred_percent_base", "option_ids", "pollmethod", "projection_ids", "sequential_number", "state", "title", "type", "voted_ids", "votescast", "votesinvalid", "votesvalid"}, - "poll_candidate": {"id", "meeting_id", "poll_candidate_list_id", "user_id", "weight"}, - "poll_candidate_list": {"id", "meeting_id", "option_id", "poll_candidate_ids"}, - "projection": {"content", "content_object_id", "current_projector_id", "history_projector_id", "id", "meeting_id", "options", "preview_projector_id", "stable", "type", "weight"}, - "projector": {"aspect_ratio_denominator", "aspect_ratio_numerator", "background_color", "chyron_background_color", "chyron_background_color_2", "chyron_font_color", "chyron_font_color_2", "color", "current_projection_ids", "header_background_color", "header_font_color", "header_h1_color", "history_projection_ids", "id", "is_internal", "meeting_id", "name", "preview_projection_ids", "scale", "scroll", "sequential_number", "show_clock", "show_header_footer", "show_logo", "show_title", "used_as_default_projector_for_agenda_item_list_in_meeting_id", "used_as_default_projector_for_amendment_in_meeting_id", "used_as_default_projector_for_assignment_in_meeting_id", "used_as_default_projector_for_assignment_poll_in_meeting_id", "used_as_default_projector_for_countdown_in_meeting_id", "used_as_default_projector_for_current_los_in_meeting_id", "used_as_default_projector_for_list_of_speakers_in_meeting_id", "used_as_default_projector_for_mediafile_in_meeting_id", "used_as_default_projector_for_message_in_meeting_id", "used_as_default_projector_for_motion_block_in_meeting_id", "used_as_default_projector_for_motion_in_meeting_id", "used_as_default_projector_for_motion_poll_in_meeting_id", "used_as_default_projector_for_poll_in_meeting_id", "used_as_default_projector_for_topic_in_meeting_id", "used_as_reference_projector_meeting_id", "width"}, + "poll": {"allow_invalid", "allow_vote_split", "anonymized", "ballot_ids", "ballot_user_ids", "config_id", "content_object_id", "entitled_group_ids", "history_entry_ids", "id", "live_voting_enabled", "meeting_id", "option_ids", "projection_ids", "published", "result", "sequential_number", "state", "title", "visibility"}, + "poll_ballot": {"id", "poll_ballot_user_id", "poll_id", "split", "value", "weight"}, + "poll_ballot_user": {"acting_meeting_user_id", "id", "poll_ballot_id", "poll_id", "represented_meeting_user_id"}, + "poll_config_approval": {"allow_abstain", "id", "onehundred_percent_base", "poll_id"}, + "poll_config_rating_approval": {"allow_abstain", "id", "max_options_amount", "max_yes_amount", "min_options_amount", "onehundred_percent_base", "poll_id"}, + "poll_config_rating_score": {"id", "max_options_amount", "max_vote_sum", "max_votes_per_option", "min_options_amount", "min_vote_sum", "onehundred_percent_base", "poll_id"}, + "poll_config_selection": {"allow_nota", "display_chart", "id", "max_options_amount", "min_options_amount", "onehundred_percent_base", "poll_id", "strike_out"}, + "poll_config_stv_scottish": {"id", "poll_id", "posts"}, + "poll_option": {"id", "meeting_user_id", "poll_id", "text", "weight"}, + "projection": {"content_object_id", "current_projector_id", "history_projector_id", "id", "meeting_id", "options", "preview_projector_id", "stable", "type", "weight"}, + "projector": {"aspect_ratio_denominator", "aspect_ratio_numerator", "background_color", "chyron_background_color", "chyron_background_color_2", "chyron_font_color", "chyron_font_color_2", "color", "current_projection_ids", "header_background_color", "header_font_color", "header_h1_color", "history_projection_ids", "id", "is_internal", "meeting_id", "name", "preview_projection_ids", "scale", "scroll", "sequential_number", "show_clock", "show_header_footer", "show_logo", "show_title", "used_as_default_projector_for_agenda_item_list_in_meeting_id", "used_as_default_projector_for_amendment_in_meeting_id", "used_as_default_projector_for_assignment_in_meeting_id", "used_as_default_projector_for_assignment_poll_in_meeting_id", "used_as_default_projector_for_countdown_in_meeting_id", "used_as_default_projector_for_current_los_in_meeting_id", "used_as_default_projector_for_list_of_speakers_in_meeting_id", "used_as_default_projector_for_mediafile_in_meeting_id", "used_as_default_projector_for_message_in_meeting_id", "used_as_default_projector_for_motion_block_in_meeting_id", "used_as_default_projector_for_motion_in_meeting_id", "used_as_default_projector_for_motion_poll_in_meeting_id", "used_as_default_projector_for_topic_in_meeting_id", "used_as_default_projector_for_topic_poll_in_meeting_id", "used_as_reference_projector_meeting_id", "width"}, "projector_countdown": {"countdown_time", "default_time", "description", "id", "meeting_id", "projection_ids", "running", "title", "used_as_list_of_speakers_countdown_meeting_id", "used_as_poll_countdown_meeting_id"}, "projector_message": {"id", "meeting_id", "message", "projection_ids"}, "speaker": {"answer", "begin_time", "end_time", "id", "list_of_speakers_id", "meeting_id", "meeting_user_id", "note", "pause_time", "point_of_order", "point_of_order_category_id", "speech_state", "structure_level_list_of_speakers_id", "total_pause", "unpause_time", "weight"}, @@ -49,6 +55,5 @@ var collectionFields = map[string][]string{ "tag": {"id", "meeting_id", "name", "tagged_ids"}, "theme": {"abstain", "accent_100", "accent_200", "accent_300", "accent_400", "accent_50", "accent_500", "accent_600", "accent_700", "accent_800", "accent_900", "accent_a100", "accent_a200", "accent_a400", "accent_a700", "headbar", "id", "name", "no", "organization_id", "primary_100", "primary_200", "primary_300", "primary_400", "primary_50", "primary_500", "primary_600", "primary_700", "primary_800", "primary_900", "primary_a100", "primary_a200", "primary_a400", "primary_a700", "theme_for_organization_id", "warn_100", "warn_200", "warn_300", "warn_400", "warn_50", "warn_500", "warn_600", "warn_700", "warn_800", "warn_900", "warn_a100", "warn_a200", "warn_a400", "warn_a700", "yes"}, "topic": {"agenda_item_id", "attachment_meeting_mediafile_ids", "id", "list_of_speakers_id", "meeting_id", "poll_ids", "projection_ids", "sequential_number", "text", "title"}, - "user": {"can_change_own_password", "committee_ids", "committee_management_ids", "default_password", "default_vote_weight", "delegated_vote_ids", "email", "external", "first_name", "gender_id", "history_entry_ids", "history_position_ids", "home_committee_id", "id", "is_active", "is_demo_user", "is_physical_person", "is_present_in_meeting_ids", "last_email_sent", "last_login", "last_name", "meeting_ids", "meeting_user_ids", "member_number", "option_ids", "organization_id", "organization_management_level", "password", "poll_candidate_ids", "poll_voted_ids", "pronoun", "saml_id", "title", "username", "vote_ids"}, - "vote": {"delegated_user_id", "id", "meeting_id", "option_id", "user_id", "user_token", "value", "weight"}, + "user": {"can_change_own_password", "committee_ids", "committee_management_ids", "default_password", "default_vote_weight", "email", "external", "first_name", "gender_id", "history_entry_ids", "history_position_ids", "home_committee_id", "id", "is_active", "is_demo_user", "is_physical_person", "is_present_in_meeting_ids", "last_email_sent", "last_login", "last_name", "meeting_ids", "meeting_user_ids", "member_number", "organization_id", "organization_management_level", "password", "pronoun", "saml_id", "title", "username"}, } diff --git a/datastore/flow/combined.go b/datastore/flow/combined.go deleted file mode 100644 index ca92db5db..000000000 --- a/datastore/flow/combined.go +++ /dev/null @@ -1,104 +0,0 @@ -package flow - -import ( - "context" - "fmt" - "sync" - - "github.com/OpenSlides/openslides-go/datastore/dskey" - "golang.org/x/sync/errgroup" -) - -type combined struct { - defaultFlow Flow - otherFlows map[string]Flow -} - -func (c *combined) Get(ctx context.Context, keys ...dskey.Key) (map[dskey.Key][]byte, error) { - grouped := make(map[string][]dskey.Key, len(keys)) - for _, key := range keys { - if _, ok := c.otherFlows[key.CollectionField()]; ok { - grouped[key.CollectionField()] = append(grouped[key.CollectionField()], key) - continue - } - - grouped["default"] = append(grouped["default"], key) - } - - eg, ctx := errgroup.WithContext(ctx) - dataCh := make(chan map[dskey.Key][]byte, 1) - - for flowName, keys := range grouped { - keys := keys - flowName := flowName - flow, found := c.otherFlows[flowName] - if !found { - flow = c.defaultFlow - flowName = "default" - } - - eg.Go(func() error { - values, err := flow.Get(ctx, keys...) - if err != nil { - return fmt.Errorf("source %s: %w", flowName, err) - } - - dataCh <- values - return nil - }) - } - - errCh := make(chan error, 1) - go func() { - errCh <- eg.Wait() - close(dataCh) - }() - - result := make(map[dskey.Key][]byte, len(keys)) - for values := range dataCh { - for k, v := range values { - result[k] = v - } - } - - if err := <-errCh; err != nil { - return nil, err - } - - return result, nil -} - -func (c *combined) Update(ctx context.Context, updateFn func(map[dskey.Key][]byte, error)) { - cancelCtx, cancel := context.WithCancel(ctx) - defer cancel() - - var wg sync.WaitGroup - - wg.Add(1) - go func() { - c.defaultFlow.Update(cancelCtx, updateFn) - cancel() - wg.Done() - }() - - wg.Add(len(c.otherFlows)) - for _, flow := range c.otherFlows { - go func(flow Flow) { - flow.Update(cancelCtx, updateFn) - cancel() - wg.Done() - }(flow) - } - - wg.Wait() -} - -// Combine combines flows. -// -// One is used as default. The others are used when a corresponding key is called. -func Combine(defaultFlow Flow, keys map[string]Flow) Flow { - return &combined{ - defaultFlow: defaultFlow, - otherFlows: keys, - } -} diff --git a/datastore/flow_postgres.go b/datastore/flow_postgres.go index de994691d..c6c5ff5bd 100644 --- a/datastore/flow_postgres.go +++ b/datastore/flow_postgres.go @@ -159,18 +159,6 @@ func (p *FlowPostgres) getWithConn(ctx context.Context, conn *pgx.Conn, keys ... fields := []string{"id"} fields = append(fields, collectionFields[collection]...) - // TODO: Remove me, if the new vote service and projector service are merged - switch collection { - case "poll": - fields = slices.DeleteFunc(fields, func(s string) bool { - return s == "live_votes" - }) - case "projection": - fields = slices.DeleteFunc(fields, func(s string) bool { - return s == "content" - }) - } - sql := fmt.Sprintf( `SELECT %s FROM "%s" WHERE id = ANY ($1) `, strings.Join(fields, ","), diff --git a/datastore/flow_postgres_test.go b/datastore/flow_postgres_test.go index e3616734f..8ebf10f70 100644 --- a/datastore/flow_postgres_test.go +++ b/datastore/flow_postgres_test.go @@ -234,116 +234,6 @@ func TestPostgresUpdate(t *testing.T) { } } -func TestPostgresUpdateCollectionWithCalculatedField(t *testing.T) { - ctx, cancel := context.WithTimeout(t.Context(), 30*time.Second) - defer cancel() - - t.Parallel() - if testing.Short() { - t.Skip("Postgres Test") - } - - tp, err := pgtest.NewPostgresTest(t) - if err != nil { - t.Fatalf("starting postgres: %v", err) - } - - conn, err := tp.Conn(ctx) - if err != nil { - t.Fatalf("create connection: %v", err) - } - - flow, err := datastore.NewFlowPostgres(environment.ForTests(tp.Env)) - if err != nil { - t.Fatalf("NewFlowPostgres(): %v", err) - } - - keys := []dskey.Key{ - dskey.MustKey("poll/300/title"), - } - - done := make(chan error) - // TODO: When update fails, this currently blocks for ever. Maybe use a - // timeout. - go flow.Update(ctx, func(m map[dskey.Key][]byte, err error) { - select { - case <-done: - // Only call update once. - return - default: - } - - if err != nil { - done <- fmt.Errorf("from Update callback: %w", err) - return - } - - if m[keys[0]] == nil { - done <- fmt.Errorf("key %s not found", keys[0]) - return - } - - done <- nil - return - }) - // TODO: This test could be flaky. - time.Sleep(5 * time.Second) // TODO: How to do this without a sleep? - sql := ` - INSERT INTO assignment_t ( - id, - title, - sequential_number, - meeting_id - ) VALUES ( - 123, - 'Test Assignment', - 1, - 1 - ); - - INSERT INTO list_of_speakers_t ( - id, - sequential_number, - content_object_id, - meeting_id - ) VALUES ( - 456, - 1, - 'assignment/123', - 1 - ); - - INSERT INTO poll_t ( - id, - title, - type, - backend, - pollmethod, - onehundred_percent_base, - sequential_number, - content_object_id, - meeting_id - ) VALUES ( - 300, - 'My poll', - 'named', - 'fast', - 'YNA', - 'disabled', - 1, - 'assignment/123', - 1 - ); -` - if _, err := conn.Exec(ctx, sql); err != nil { - t.Fatalf("adding example data: %v", err) - } - - if err := <-done; err != nil { - t.Errorf("Error: %v", err) - } -} - func TestBigQuery(t *testing.T) { t.Parallel() diff --git a/datastore/flow_vote.go b/datastore/flow_vote.go deleted file mode 100644 index 02d0e9128..000000000 --- a/datastore/flow_vote.go +++ /dev/null @@ -1,226 +0,0 @@ -package datastore - -import ( - "context" - "encoding/json" - "fmt" - "io" - "maps" - "net/http" - "strconv" - "sync" - "time" - - "github.com/OpenSlides/openslides-go/datastore/dskey" - "github.com/OpenSlides/openslides-go/environment" -) - -var ( - envVoteHost = environment.NewVariable("VOTE_HOST", "localhost", "Host of the vote-service.") - envVotePort = environment.NewVariable("VOTE_PORT", "9013", "Port of the vote-service.") - envVoteProtocol = environment.NewVariable("VOTE_PROTOCOL", "http", "Protocol of the vote-service.") - envDebugLiveVotes = environment.NewVariable("DEBUG_HAS_VOTED_USER_IDS", "false", "Enable Debug message for an error from May 2025.") -) - -const liveVotesPath = "/internal/vote/live_votes" - -// FlowVoteCount is a datastore flow for the poll/vote_count value. -type FlowVoteCount struct { - voteServiceURL string - client *http.Client - id uint64 - - mu sync.Mutex - pollLiveVotes map[int]map[int]*string - update chan map[int]map[int]*string - ready chan struct{} - - debugLiveVotes bool -} - -// NewFlowVoteCount initializes the object. -func NewFlowVoteCount(lookup environment.Environmenter) *FlowVoteCount { - url := fmt.Sprintf( - "%s://%s:%s", - envVoteProtocol.Value(lookup), - envVoteHost.Value(lookup), - envVotePort.Value(lookup), - ) - - debug2025, _ := strconv.ParseBool(envDebugLiveVotes.Value(lookup)) - - flow := FlowVoteCount{ - voteServiceURL: url, - client: &http.Client{}, - update: make(chan map[int]map[int]*string, 1), - pollLiveVotes: make(map[int]map[int]*string), - ready: make(chan struct{}), - - debugLiveVotes: debug2025, - } - - return &flow -} - -func (s *FlowVoteCount) printDebugLiveVotes(format string, a ...any) { - if !s.debugLiveVotes { - return - } - fmt.Printf("DEBUG: Live Votes: %s\n", fmt.Sprintf(format, a...)) -} - -// Connect creates a connection to the vote service and makes sure, it stays -// open. -// -// eventProvider is a function that returns a channel. If the connection fails, -// this function fetches such a channel and waits for a signal before it tries -// to open a new connection. -func (s *FlowVoteCount) Connect(ctx context.Context, eventProvider func() (<-chan time.Time, func() bool), errHandler func(error)) { - for ctx.Err() == nil { - s.printDebugLiveVotes("Create connection to vote service") - if err := s.connect(ctx); err != nil { - s.printDebugLiveVotes("Error with vote service connection: %v", err) - errHandler(fmt.Errorf("connecting to vote service: %w", err)) - } - - // TODO: When the connection is closed, s.ready has to be resetted. But - // this would be a race condition. - - s.printDebugLiveVotes("Waiting for reconnect") - s.wait(ctx, eventProvider) - } - - s.printDebugLiveVotes("Stop trying to connect to vote service: %v", ctx.Err()) -} - -// wait waits for an event in s.eventProvider. -func (s *FlowVoteCount) wait(ctx context.Context, eventProvider func() (<-chan time.Time, func() bool)) { - event, close := eventProvider() - defer close() - - select { - case <-ctx.Done(): - case <-event: - } -} - -func (s *FlowVoteCount) connect(ctx context.Context) error { - s.mu.Lock() - s.pollLiveVotes = make(map[int]map[int]*string) - s.mu.Unlock() - - req, err := http.NewRequestWithContext(ctx, "GET", s.voteServiceURL+liveVotesPath, nil) - if err != nil { - return fmt.Errorf("building request: %w", err) - } - - resp, err := s.client.Do(req) - if err != nil { - // TODO External Error - return fmt.Errorf("sending request to vote service: %w", err) - } - defer resp.Body.Close() - - decoder := json.NewDecoder(resp.Body) - for { - var fromVoteService map[int]map[int]*string - if err := decoder.Decode(&fromVoteService); err != nil { - if err == io.EOF { - return nil - } - return fmt.Errorf("decoding poll data: %w", err) - } - - s.mu.Lock() - for pollID, userID2Vote := range fromVoteService { - if userID2Vote == nil { - // The userID2Vote map is nil, if a poll was removed. - delete(s.pollLiveVotes, pollID) - continue - } - if s.pollLiveVotes[pollID] == nil { - s.pollLiveVotes[pollID] = make(map[int]*string) - } - maps.Copy(s.pollLiveVotes[pollID], userID2Vote) - } - s.mu.Unlock() - - select { - case <-s.ready: - default: - close(s.ready) - } - - select { - case s.update <- fromVoteService: - default: - s.printDebugLiveVotes("Skripping message from vote service: %v", fromVoteService) - } - } -} - -// Get is called when a key is not in the cache. -func (s *FlowVoteCount) Get(ctx context.Context, keys ...dskey.Key) (map[dskey.Key][]byte, error) { - select { - case <-s.ready: - case <-ctx.Done(): - return nil, ctx.Err() - } - - s.mu.Lock() - defer s.mu.Unlock() - - out := make(map[dskey.Key][]byte, len(keys)) - for _, key := range keys { - out[key] = nil - - switch key.Collection() { - case "poll": - if key.Field() != "live_votes" { - continue - } - - userID2Vote, ok := s.pollLiveVotes[key.ID()] - if !ok { - continue - } - - bytes, err := json.Marshal(userID2Vote) - if err != nil { - return nil, fmt.Errorf("converting userID2Vote to json: %w", err) - } - out[key] = bytes - - default: - continue - } - } - return out, nil -} - -// Update has to be called frequently. It blocks, until there is new data. -func (s *FlowVoteCount) Update(ctx context.Context, updateFn func(map[dskey.Key][]byte, error)) { - for { - var fromVoteService map[int]map[int]*string - select { - case <-ctx.Done(): - s.printDebugLiveVotes("Update exists after context is done: %v", ctx.Err()) - return // TODO: Should the error be returned? - - case fromVoteService = <-s.update: - } - - var keys []dskey.Key - for pollID := range fromVoteService { - pollKey, err := dskey.FromParts("poll", pollID, "live_votes") - if err != nil { - updateFn(nil, err) - s.printDebugLiveVotes("Update exists on error: %v", err) - return - } - keys = append(keys, pollKey) - } - - updateFn(s.Get(ctx, keys...)) - } -} diff --git a/datastore/flow_vote_test.go b/datastore/flow_vote_test.go deleted file mode 100644 index efabf48cc..000000000 --- a/datastore/flow_vote_test.go +++ /dev/null @@ -1,303 +0,0 @@ -package datastore_test - -import ( - "context" - "fmt" - "net/http" - "net/http/httptest" - "net/url" - "reflect" - "testing" - "time" - - "github.com/OpenSlides/openslides-go/datastore" - "github.com/OpenSlides/openslides-go/datastore/dskey" - "github.com/OpenSlides/openslides-go/environment" -) - -func TestVoteCountSourceGet(t *testing.T) { - sender := make(chan string) - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `{}`) - w.(http.Flusher).Flush() - for msg := range sender { - fmt.Fprintln(w, msg) - w.(http.Flusher).Flush() - } - })) - - ctx := t.Context() - - host, port, schema := parseURL(ts.URL) - env := environment.ForTests(map[string]string{ - "VOTE_HOST": host, - "VOTE_PORT": port, - "VOTE_PROTOCOL": schema, - }) - - flow := datastore.NewFlowVoteCount(env) - eventer := func() (<-chan time.Time, func() bool) { return make(chan time.Time), func() bool { return true } } - - waitForResponse(ctx, flow, func() { - go flow.Connect(ctx, eventer, func(error) {}) - }) - - key1 := dskey.MustKey("poll/1/live_votes") - - t.Run("no data from vote-service", func(t *testing.T) { - got, err := flow.Get(ctx, key1) - if err != nil { - t.Fatalf("Get: %v", err) - } - - if got[key1] != nil { - t.Errorf("Get() without any data returned %s, expected nil", got[key1]) - } - }) - - t.Run("first data from vote-service", func(t *testing.T) { - waitForResponse(ctx, flow, func() { - sender <- `{"1":{"42":null}}` - }) - - got, err := flow.Get(ctx, key1) - if err != nil { - t.Fatalf("Get: %v", err) - } - - if string(got[key1]) != `{"42":null}` { - t.Errorf(`Get() after first data returned %s, expected {"42":null}`, got[key1]) - } - }) - - t.Run("second data from vote-service", func(t *testing.T) { - waitForResponse(ctx, flow, func() { - sender <- `{"1":{"43":null}}` - }) - - got, err := flow.Get(ctx, key1) - if err != nil { - t.Fatalf("Get: %v", err) - } - - if string(got[key1]) != `{"42":null,"43":null}` { - t.Errorf("Get() after first data returned `%s`, expected `43`", got[key1]) - } - }) - - t.Run("again data from vote-service", func(t *testing.T) { - waitForResponse(ctx, flow, func() { - sender <- `{"1":{"44":null}}` - }) - - got, err := flow.Get(ctx, key1) - if err != nil { - t.Fatalf("Get: %v", err) - } - - if string(got[key1]) != `{"42":null,"43":null,"44":null}` { - t.Errorf("Get() after first data returned `%s`, expected `44`", got[key1]) - } - }) - - t.Run("receive null", func(t *testing.T) { - waitForResponse(ctx, flow, func() { - sender <- `{"1":null}` - }) - - got, err := flow.Get(ctx, key1) - if err != nil { - t.Fatalf("Get: %v", err) - } - - if got[key1] != nil { - t.Errorf("Get() after receiving 0 returned %s, expected nil", got[key1]) - } - }) -} - -func TestVoteCountSourceUpdate(t *testing.T) { - ctx := t.Context() - - sender := make(chan string) - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, `{}`) - w.(http.Flusher).Flush() - - for msg := range sender { - fmt.Fprintln(w, msg) - w.(http.Flusher).Flush() - } - })) - - host, port, schema := parseURL(ts.URL) - env := environment.ForTests(map[string]string{ - "VOTE_HOST": host, - "VOTE_PORT": port, - "VOTE_PROTOCOL": schema, - }) - - flow := datastore.NewFlowVoteCount(env) - eventer := func() (<-chan time.Time, func() bool) { return make(chan time.Time), func() bool { return true } } - - waitForResponse(ctx, flow, func() { - go flow.Connect(ctx, eventer, func(error) {}) - }) - - key1 := dskey.MustKey("poll/1/live_votes") - - t.Run("no data from vote-service", func(t *testing.T) { - ctxTimeout, cancel := context.WithTimeout(ctx, time.Millisecond) - defer cancel() - - flow.Update(ctxTimeout, func(map[dskey.Key][]byte, error) { - t.Fatalf("Update was called") - }) - }) - - t.Run("first data from vote-service", func(t *testing.T) { - got, err := updateResult(ctx, flow, func() { - sender <- `{"1":{"42":null}}` - }) - if err != nil { - t.Fatalf("Update: %v", err) - } - - expect := map[dskey.Key][]byte{key1: []byte(`{"42":null}`)} - if !reflect.DeepEqual(got, expect) { - t.Errorf("Update() returned %v, expected %v", got, expect) - } - }) - - t.Run("second data from vote-service", func(t *testing.T) { - got, err := updateResult(ctx, flow, func() { - sender <- `{"1":{"43":null}}` - }) - if err != nil { - t.Fatalf("Update: %v", err) - } - - expect := map[dskey.Key][]byte{key1: []byte(`{"42":null,"43":null}`)} - if !reflect.DeepEqual(got, expect) { - t.Errorf("Update() returned %v, expected %v", got, expect) - } - }) - - t.Run("receive null", func(t *testing.T) { - got, err := updateResult(ctx, flow, func() { - sender <- `{"1":null}` - }) - if err != nil { - t.Fatalf("Update: %v", err) - } - - expect := map[dskey.Key][]byte{key1: nil} - if !reflect.DeepEqual(got, expect) { - t.Errorf("Update() returned %v, expected %v", got, expect) - } - }) -} - -func TestReconnect(t *testing.T) { - msg := `{"1":[23]}` - sender := make(chan struct{}) - var counter int - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, msg) - w.(http.Flusher).Flush() - counter++ - <-sender - })) - - ctx := t.Context() - - event := make(chan time.Time) - close(event) - eventer := func() (<-chan time.Time, func() bool) { - return event, func() bool { return false } - } - - host, port, schema := parseURL(ts.URL) - env := environment.ForTests(map[string]string{ - "VOTE_HOST": host, - "VOTE_PORT": port, - "VOTE_PROTOCOL": schema, - }) - - flow := datastore.NewFlowVoteCount(env) - go flow.Connect(ctx, eventer, func(error) {}) - - sender <- struct{}{} // Close connection so there is a reconnect - sender <- struct{}{} // Close connection again - ts.Close() - - if counter < 2 { - t.Errorf("Got %d connections, expected 2", counter) - } -} - -func TestGetWithoutConnect(t *testing.T) { - sender := make(chan string) - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - for msg := range sender { - fmt.Fprintln(w, msg) - w.(http.Flusher).Flush() - } - })) - - host, port, schema := parseURL(ts.URL) - env := environment.ForTests(map[string]string{ - "VOTE_HOST": host, - "VOTE_PORT": port, - "VOTE_PROTOCOL": schema, - }) - - source := datastore.NewFlowVoteCount(env) - - key := dskey.MustKey("poll/1/live_votes") - - ctxTimeout, cancel := context.WithTimeout(t.Context(), time.Millisecond) - defer cancel() - - _, err := source.Get(ctxTimeout, key) - if err != context.DeadlineExceeded { - t.Fatalf("Update: %v, expected context.DeadlineExceeded", err) - } -} - -// waitForResponse calls the given function and waits until the data is -// processed. -func waitForResponse(ctx context.Context, flow *datastore.FlowVoteCount, fn func()) { - updateResult(ctx, flow, fn) -} - -// updateResult returns the return values from flow.Update after the given function is processed. -func updateResult(ctx context.Context, flow *datastore.FlowVoteCount, fn func()) (map[dskey.Key][]byte, error) { - type dataErr struct { - data map[dskey.Key][]byte - err error - } - - myCtx, cancel := context.WithCancel(ctx) - - got := dataErr{} - go flow.Update(myCtx, func(v map[dskey.Key][]byte, err error) { - got = dataErr{v, err} - cancel() - }) - - fn() - - <-myCtx.Done() - - return got.data, got.err -} - -func parseURL(raw string) (host, port, protocol string) { - parsed, err := url.Parse(raw) - if err != nil { - panic(fmt.Sprintf("parsing url %s: %v", raw, err)) - } - - return parsed.Hostname(), parsed.Port(), parsed.Scheme -} diff --git a/datastore/pgtest/sql/base_data.sql b/datastore/pgtest/sql/base_data.sql index 1917522f9..9b0930f4e 100644 --- a/datastore/pgtest/sql/base_data.sql +++ b/datastore/pgtest/sql/base_data.sql @@ -160,7 +160,7 @@ projector_t used_as_default_projector_for_countdown_in_meeting_id, used_as_default_projector_for_assignment_poll_in_meeting_id, used_as_default_projector_for_motion_poll_in_meeting_id, - used_as_default_projector_for_poll_in_meeting_id + used_as_default_projector_for_topic_poll_in_meeting_id ) VALUES (1, 1, 'main', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); SELECT nextval('projector_t_id_seq'); diff --git a/datastore/pgtest/sql/schema_relational.sql b/datastore/pgtest/sql/schema_relational.sql index b0ecac7c5..4bd162d7e 100644 --- a/datastore/pgtest/sql/schema_relational.sql +++ b/datastore/pgtest/sql/schema_relational.sql @@ -1,18 +1,26 @@ -- schema_relational.sql for initial database setup OpenSlides -- Code generated. DO NOT EDIT. --- MODELS_YML_CHECKSUM = '472dd223307f11a19a864edd93b78230' +-- MODELS_YML_CHECKSUM = '64c1db423c8901eecf1da9182f2a5543' -- ENUM definitions CREATE TYPE enum_languages AS ENUM ('en', 'de', 'it', 'es', 'ru', 'cs', 'fr'); -CREATE TYPE enum_ballot_paper_selection AS ENUM ('NUMBER_OF_DELEGATES', 'NUMBER_OF_ALL_PARTICIPANTS', 'CUSTOM_NUMBER'); +CREATE TYPE enum_onehundred_percent_bases AS ENUM ('no_general', 'yes_no', 'valid', 'cast', 'entitled', 'entitled_present', 'disabled'); -CREATE TYPE enum_poll_backends AS ENUM ('long', 'fast'); +CREATE TYPE enum_approval_onehundred_percent_bases AS ENUM ('yes_no', 'valid', 'cast', 'entitled', 'entitled_present', 'disabled'); -CREATE TYPE enum_onehundred_percent_bases AS ENUM ('Y', 'YN', 'YNA', 'N', 'valid', 'cast', 'entitled', 'entitled_present', 'disabled'); +CREATE TYPE enum_rating_approval_onehundred_percent_bases AS ENUM ('yes_no', 'valid', 'cast', 'entitled', 'entitled_present', 'disabled'); + +CREATE TYPE enum_rating_score_onehundred_percent_bases AS ENUM ('yes_no', 'valid', 'cast', 'entitled', 'entitled_present', 'disabled'); + +CREATE TYPE enum_selection_onehundred_percent_bases AS ENUM ('no_general', 'valid', 'cast', 'entitled', 'entitled_present', 'disabled'); + +CREATE TYPE enum_poll_visibility AS ENUM ('manually', 'named', 'open', 'secret'); + +CREATE TYPE enum_poll_methods AS ENUM ('approval', 'selection', 'rating_score', 'rating_approval', 'stv_scottish'); CREATE TYPE enum_action_worker_state AS ENUM ('running', 'end', 'aborted'); @@ -20,7 +28,7 @@ CREATE TYPE enum_agenda_item_type AS ENUM ('common', 'internal', 'hidden'); CREATE TYPE enum_assignment_phase AS ENUM ('search', 'voting', 'finished'); -CREATE TYPE enum_group_permissions AS ENUM ('agenda_item.can_manage', 'agenda_item.can_see', 'agenda_item.can_see_internal', 'assignment.can_manage', 'assignment.can_manage_polls', 'assignment.can_nominate_other', 'assignment.can_nominate_self', 'assignment.can_see', 'chat.can_manage', 'list_of_speakers.can_be_speaker', 'list_of_speakers.can_manage', 'list_of_speakers.can_see', 'list_of_speakers.can_manage_moderator_notes', 'list_of_speakers.can_see_moderator_notes', 'mediafile.can_manage', 'mediafile.can_see', 'meeting.can_manage_logos_and_fonts', 'meeting.can_manage_settings', 'meeting.can_see_autopilot', 'meeting.can_see_frontpage', 'meeting.can_see_history', 'meeting.can_see_livestream', 'motion.can_create', 'motion.can_create_amendments', 'motion.can_forward', 'motion.can_manage', 'motion.can_manage_metadata', 'motion.can_manage_polls', 'motion.can_see', 'motion.can_see_internal', 'motion.can_see_origin', 'motion.can_support', 'poll.can_manage', 'poll.can_see_progress', 'projector.can_manage', 'projector.can_see', 'tag.can_manage', 'user.can_manage', 'user.can_manage_presence', 'user.can_see_sensitive_data', 'user.can_see', 'user.can_update', 'user.can_edit_own_delegation'); +CREATE TYPE enum_group_permissions AS ENUM ('agenda_item.can_manage', 'agenda_item.can_manage_polls', 'agenda_item.can_see_polls', 'agenda_item.can_see', 'agenda_item.can_see_internal', 'assignment.can_manage', 'assignment.can_manage_polls', 'assignment.can_nominate_other', 'assignment.can_nominate_self', 'assignment.can_see_polls', 'assignment.can_see', 'chat.can_manage', 'list_of_speakers.can_be_speaker', 'list_of_speakers.can_manage', 'list_of_speakers.can_see', 'list_of_speakers.can_manage_moderator_notes', 'list_of_speakers.can_see_moderator_notes', 'mediafile.can_manage', 'mediafile.can_see', 'meeting.can_manage_logos_and_fonts', 'meeting.can_manage_settings', 'meeting.can_see_autopilot', 'meeting.can_see_frontpage', 'meeting.can_see_history', 'meeting.can_see_livestream', 'motion.can_create', 'motion.can_create_amendments', 'motion.can_forward', 'motion.can_manage', 'motion.can_manage_metadata', 'motion.can_manage_polls', 'motion.can_see_polls', 'motion.can_see', 'motion.can_see_internal', 'motion.can_see_origin', 'motion.can_support', 'poll.can_see_progress', 'projector.can_manage', 'projector.can_see', 'tag.can_manage', 'user.can_manage', 'user.can_manage_presence', 'user.can_see_sensitive_data', 'user.can_see', 'user.can_update', 'user.can_edit_own_delegation'); CREATE TYPE enum_import_preview_name AS ENUM ('account', 'participant', 'topic', 'committee', 'motion'); @@ -50,10 +58,10 @@ CREATE TYPE enum_meeting_motions_number_type AS ENUM ('per_category', 'serially_ CREATE TYPE enum_meeting_motions_amendments_text_mode AS ENUM ('freestyle', 'fulltext', 'paragraph'); -CREATE TYPE enum_meeting_motion_poll_projection_name_order_first AS ENUM ('first_name', 'last_name'); - CREATE TYPE enum_meeting_users_pdf_wlan_encryption AS ENUM ('', 'WEP', 'WPA', 'nopass'); +CREATE TYPE enum_meeting_poll_projection_name_order_first AS ENUM ('first_name', 'last_name'); + CREATE TYPE enum_motion_change_recommendation_type AS ENUM ('replacement', 'insertion', 'deletion', 'other'); CREATE TYPE enum_motion_state_css_class AS ENUM ('grey', 'red', 'green', 'lightblue', 'yellow'); @@ -62,11 +70,7 @@ CREATE TYPE enum_motion_state_restrictions AS ENUM ('motion.can_see_internal', ' CREATE TYPE enum_motion_state_merge_amendment_into_final AS ENUM ('do_not_merge', 'undefined', 'do_merge'); -CREATE TYPE enum_poll_type AS ENUM ('analog', 'named', 'pseudoanonymous', 'cryptographic'); - -CREATE TYPE enum_poll_pollmethod AS ENUM ('Y', 'YN', 'YNA', 'N'); - -CREATE TYPE enum_poll_state AS ENUM ('created', 'started', 'finished', 'published'); +CREATE TYPE enum_poll_state AS ENUM ('created', 'started', 'finished'); CREATE TYPE enum_speaker_speech_state AS ENUM ('contribution', 'pro', 'contra', 'intervention', 'interposed_question'); @@ -1044,10 +1048,6 @@ CREATE TABLE group_t ( CONSTRAINT required_group_name NOT NULL, permissions enum_group_permissions[], weight integer, - used_as_motion_poll_default_id integer, - used_as_assignment_poll_default_id integer, - used_as_topic_poll_default_id integer, - used_as_poll_default_id integer, meeting_id integer CONSTRAINT required_group_meeting_id NOT NULL, CONSTRAINT unique_group_meeting_id_external_id UNIQUE (meeting_id, external_id) @@ -1059,15 +1059,20 @@ CREATE TABLE group_t ( CREATE TABLE history_entry_t ( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, entries text[], + structured_information jsonb, original_model_id varchar(256), model_id varchar(100), - model_id_user_id integer - CONSTRAINT generated_always_as_history_entry_model_id_user_id GENERATED ALWAYS AS (CASE WHEN split_part(model_id, '/', 1) = 'user' THEN cast(split_part(model_id, '/', 2) AS INTEGER) ELSE null END) STORED, - model_id_motion_id integer - CONSTRAINT generated_always_as_history_entry_model_id_motion_id GENERATED ALWAYS AS (CASE WHEN split_part(model_id, '/', 1) = 'motion' THEN cast(split_part(model_id, '/', 2) AS INTEGER) ELSE null END) STORED, model_id_assignment_id integer CONSTRAINT generated_always_as_history_entry_model_id_assignment_id GENERATED ALWAYS AS (CASE WHEN split_part(model_id, '/', 1) = 'assignment' THEN cast(split_part(model_id, '/', 2) AS INTEGER) ELSE null END) STORED, - CONSTRAINT valid_history_entry_model_id_part1 CHECK (split_part(model_id, '/', 1) IN ('user','motion','assignment')), + model_id_meeting_user_id integer + CONSTRAINT generated_always_as_history_entry_model_id_meeting_user_id GENERATED ALWAYS AS (CASE WHEN split_part(model_id, '/', 1) = 'meeting_user' THEN cast(split_part(model_id, '/', 2) AS INTEGER) ELSE null END) STORED, + model_id_motion_id integer + CONSTRAINT generated_always_as_history_entry_model_id_motion_id GENERATED ALWAYS AS (CASE WHEN split_part(model_id, '/', 1) = 'motion' THEN cast(split_part(model_id, '/', 2) AS INTEGER) ELSE null END) STORED, + model_id_poll_id integer + CONSTRAINT generated_always_as_history_entry_model_id_poll_id GENERATED ALWAYS AS (CASE WHEN split_part(model_id, '/', 1) = 'poll' THEN cast(split_part(model_id, '/', 2) AS INTEGER) ELSE null END) STORED, + model_id_user_id integer + CONSTRAINT generated_always_as_history_entry_model_id_user_id GENERATED ALWAYS AS (CASE WHEN split_part(model_id, '/', 1) = 'user' THEN cast(split_part(model_id, '/', 2) AS INTEGER) ELSE null END) STORED, + CONSTRAINT valid_history_entry_model_id_part1 CHECK (split_part(model_id, '/', 1) IN ('assignment','meeting_user','motion','poll','user')), position_id integer CONSTRAINT required_history_entry_position_id NOT NULL, meeting_id integer @@ -1389,24 +1394,6 @@ CREATE TABLE meeting_t ( motions_enable_restricted_editor_for_manager boolean, motions_enable_restricted_editor_for_non_manager boolean CONSTRAINT default_meeting_motions_enable_restricted_editor_for_non493da85 DEFAULT True, - motion_poll_ballot_paper_selection enum_ballot_paper_selection - CONSTRAINT default_meeting_motion_poll_ballot_paper_selection DEFAULT 'CUSTOM_NUMBER', - motion_poll_ballot_paper_number integer - CONSTRAINT default_meeting_motion_poll_ballot_paper_number DEFAULT 8, - motion_poll_default_type varchar(256) - CONSTRAINT default_meeting_motion_poll_default_type DEFAULT 'pseudoanonymous', - motion_poll_default_method varchar(256) - CONSTRAINT default_meeting_motion_poll_default_method DEFAULT 'YNA', - motion_poll_default_onehundred_percent_base enum_onehundred_percent_bases - CONSTRAINT default_meeting_motion_poll_default_onehundred_percent_base DEFAULT 'YNA', - motion_poll_default_backend enum_poll_backends - CONSTRAINT default_meeting_motion_poll_default_backend DEFAULT 'fast', - motion_poll_projection_name_order_first enum_meeting_motion_poll_projection_name_order_first - CONSTRAINT required_meeting_motion_poll_projection_name_order_first NOT NULL - CONSTRAINT default_meeting_motion_poll_projection_name_order_first DEFAULT 'last_name', - motion_poll_projection_max_columns integer - CONSTRAINT required_meeting_motion_poll_projection_max_columns NOT NULL - CONSTRAINT default_meeting_motion_poll_projection_max_columns DEFAULT 6, users_enable_presence_view boolean CONSTRAINT default_meeting_users_enable_presence_view DEFAULT False, users_enable_vote_weight boolean @@ -1445,38 +1432,34 @@ This email was generated automatically.', assignments_export_title varchar(256) CONSTRAINT default_meeting_assignments_export_title DEFAULT 'Elections', assignments_export_preamble text, - assignment_poll_ballot_paper_selection enum_ballot_paper_selection - CONSTRAINT default_meeting_assignment_poll_ballot_paper_selection DEFAULT 'CUSTOM_NUMBER', - assignment_poll_ballot_paper_number integer - CONSTRAINT default_meeting_assignment_poll_ballot_paper_number DEFAULT 8, assignment_poll_add_candidates_to_list_of_speakers boolean CONSTRAINT default_meeting_assignment_poll_add_candidates_to_list_od04213d DEFAULT False, - assignment_poll_enable_max_votes_per_option boolean - CONSTRAINT default_meeting_assignment_poll_enable_max_votes_per_option DEFAULT False, - assignment_poll_sort_poll_result_by_votes boolean - CONSTRAINT default_meeting_assignment_poll_sort_poll_result_by_votes DEFAULT True, - assignment_poll_default_type varchar(256) - CONSTRAINT default_meeting_assignment_poll_default_type DEFAULT 'pseudoanonymous', - assignment_poll_default_method varchar(256) - CONSTRAINT default_meeting_assignment_poll_default_method DEFAULT 'Y', - assignment_poll_default_onehundred_percent_base enum_onehundred_percent_bases - CONSTRAINT default_meeting_assignment_poll_default_onehundred_percent_base DEFAULT 'valid', - assignment_poll_default_backend enum_poll_backends - CONSTRAINT default_meeting_assignment_poll_default_backend DEFAULT 'fast', - poll_ballot_paper_selection enum_ballot_paper_selection, - poll_ballot_paper_number integer, - poll_sort_poll_result_by_votes boolean, - poll_default_type varchar(256) - CONSTRAINT default_meeting_poll_default_type DEFAULT 'analog', - poll_default_method varchar(256), - poll_default_onehundred_percent_base enum_onehundred_percent_bases - CONSTRAINT default_meeting_poll_default_onehundred_percent_base DEFAULT 'YNA', - poll_default_backend enum_poll_backends - CONSTRAINT default_meeting_poll_default_backend DEFAULT 'fast', + assignment_poll_default_method enum_poll_methods + CONSTRAINT default_meeting_assignment_poll_default_method DEFAULT 'selection', + assignment_poll_config_id integer + CONSTRAINT unique_meeting_assignment_poll_config_id UNIQUE, + motion_poll_config_id integer + CONSTRAINT unique_meeting_motion_poll_config_id UNIQUE, + topic_poll_default_method enum_poll_methods + CONSTRAINT default_meeting_topic_poll_default_method DEFAULT 'selection', + topic_poll_config_id integer + CONSTRAINT unique_meeting_topic_poll_config_id UNIQUE, + poll_enable_max_votes_per_option boolean + CONSTRAINT default_meeting_poll_enable_max_votes_per_option DEFAULT False, poll_default_live_voting_enabled boolean CONSTRAINT default_meeting_poll_default_live_voting_enabled DEFAULT False, + poll_default_allow_invalid boolean + CONSTRAINT default_meeting_poll_default_allow_invalid DEFAULT False, + poll_default_allow_vote_split boolean + CONSTRAINT default_meeting_poll_default_allow_vote_split DEFAULT False, poll_couple_countdown boolean CONSTRAINT default_meeting_poll_couple_countdown DEFAULT True, + poll_projection_name_order_first enum_meeting_poll_projection_name_order_first + CONSTRAINT required_meeting_poll_projection_name_order_first NOT NULL + CONSTRAINT default_meeting_poll_projection_name_order_first DEFAULT 'last_name', + poll_projection_max_columns integer + CONSTRAINT required_meeting_poll_projection_max_columns NOT NULL + CONSTRAINT default_meeting_poll_projection_max_columns DEFAULT 6, logo_projector_main_id integer CONSTRAINT unique_meeting_logo_projector_main_id UNIQUE, logo_projector_header_id integer @@ -1533,7 +1516,9 @@ comment on column meeting_t.is_active_in_organization_id is 'Backrelation and bo comment on column meeting_t.is_archived_in_organization_id is 'Backrelation and boolean flag at once'; comment on column meeting_t.list_of_speakers_default_structure_level_time is '0 disables structure level countdowns.'; comment on column meeting_t.list_of_speakers_intervention_time is '0 disables intervention speakers.'; -comment on column meeting_t.poll_default_live_voting_enabled is 'Defines default "poll.live_voting_enabled" option suggested to user. Is not used in the validations.'; +comment on column meeting_t.poll_default_live_voting_enabled is 'Defines default "poll.published" before finished option suggested to user. Is not used in the validations.'; +comment on column meeting_t.poll_default_allow_invalid is 'Defines default `poll.allow_invalid` option suggested to user.'; +comment on column meeting_t.poll_default_allow_vote_split is 'Defines default `poll.allow_vote_split` option suggested to user.'; CREATE TABLE meeting_mediafile_t ( @@ -1552,6 +1537,27 @@ CREATE TABLE meeting_mediafile_t ( comment on column meeting_mediafile_t.is_public is 'Calculated in actions. Used to discern whether the (meeting-)mediafile can be seen by everyone, because, in the case of inherited_access_group_ids == [], it would otherwise not be clear. inherited_access_group_ids == [] can have two causes: cancelling access groups (=> is_public := false) or no access groups at all (=> is_public := true)'; +CREATE TABLE meeting_poll_default_t ( + id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + sort_result_by_votes boolean + CONSTRAINT default_meeting_poll_default_sort_result_by_votes DEFAULT True, + visibility enum_poll_visibility, + allow_abstain boolean + CONSTRAINT default_meeting_poll_default_allow_abstain DEFAULT True, + allow_nota boolean + CONSTRAINT default_meeting_poll_default_allow_nota DEFAULT False, + strike_out boolean + CONSTRAINT default_meeting_poll_default_strike_out DEFAULT False, + onehundred_percent_base varchar(256) + CONSTRAINT default_meeting_poll_default_onehundred_percent_base DEFAULT 'valid', + display_chart varchar(256), + meeting_id integer + CONSTRAINT required_meeting_poll_default_meeting_id NOT NULL +); + + + + CREATE TABLE meeting_user_t ( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, comment text, @@ -1840,32 +1846,6 @@ CREATE TABLE motion_working_group_speaker_t ( -CREATE TABLE option_t ( - id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, - weight integer - CONSTRAINT default_option_weight DEFAULT 10000, - text text, - yes decimal(16,6), - no decimal(16,6), - abstain decimal(16,6), - poll_id integer, - content_object_id varchar(100), - content_object_id_motion_id integer - CONSTRAINT generated_always_as_option_content_object_id_motion_id GENERATED ALWAYS AS (CASE WHEN split_part(content_object_id, '/', 1) = 'motion' THEN cast(split_part(content_object_id, '/', 2) AS INTEGER) ELSE null END) STORED, - content_object_id_user_id integer - CONSTRAINT generated_always_as_option_content_object_id_user_id GENERATED ALWAYS AS (CASE WHEN split_part(content_object_id, '/', 1) = 'user' THEN cast(split_part(content_object_id, '/', 2) AS INTEGER) ELSE null END) STORED, - content_object_id_poll_candidate_list_id integer - CONSTRAINT unique_option_content_object_id_poll_candidate_list_id UNIQUE - CONSTRAINT generated_always_as_option_content_object_id_poll_candidd7449d9 GENERATED ALWAYS AS (CASE WHEN split_part(content_object_id, '/', 1) = 'poll_candidate_list' THEN cast(split_part(content_object_id, '/', 2) AS INTEGER) ELSE null END) STORED, - CONSTRAINT valid_option_content_object_id_part1 CHECK (split_part(content_object_id, '/', 1) IN ('motion','user','poll_candidate_list')), - meeting_id integer - CONSTRAINT required_option_meeting_id NOT NULL, - CONSTRAINT unique_option_content_object_id_poll_id UNIQUE (content_object_id, poll_id) -); - - - - CREATE TABLE organization_t ( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, name varchar(256), @@ -1978,39 +1958,37 @@ CREATE TABLE poll_t ( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, title varchar(256) CONSTRAINT required_poll_title NOT NULL, - description varchar(256), - type enum_poll_type - CONSTRAINT required_poll_type NOT NULL, - backend enum_poll_backends - CONSTRAINT required_poll_backend NOT NULL - CONSTRAINT default_poll_backend DEFAULT 'fast', - is_pseudoanonymized boolean, - pollmethod enum_poll_pollmethod - CONSTRAINT required_poll_pollmethod NOT NULL, + config_id varchar(100) + CONSTRAINT required_poll_config_id NOT NULL, + config_id_poll_config_approval_id integer + CONSTRAINT unique_poll_config_id_poll_config_approval_id UNIQUE + CONSTRAINT generated_always_as_poll_config_id_poll_config_approval_id GENERATED ALWAYS AS (CASE WHEN split_part(config_id, '/', 1) = 'poll_config_approval' THEN cast(split_part(config_id, '/', 2) AS INTEGER) ELSE null END) STORED, + config_id_poll_config_selection_id integer + CONSTRAINT unique_poll_config_id_poll_config_selection_id UNIQUE + CONSTRAINT generated_always_as_poll_config_id_poll_config_selection_id GENERATED ALWAYS AS (CASE WHEN split_part(config_id, '/', 1) = 'poll_config_selection' THEN cast(split_part(config_id, '/', 2) AS INTEGER) ELSE null END) STORED, + config_id_poll_config_rating_score_id integer + CONSTRAINT unique_poll_config_id_poll_config_rating_score_id UNIQUE + CONSTRAINT generated_always_as_poll_config_id_poll_config_rating_score_id GENERATED ALWAYS AS (CASE WHEN split_part(config_id, '/', 1) = 'poll_config_rating_score' THEN cast(split_part(config_id, '/', 2) AS INTEGER) ELSE null END) STORED, + config_id_poll_config_rating_approval_id integer + CONSTRAINT unique_poll_config_id_poll_config_rating_approval_id UNIQUE + CONSTRAINT generated_always_as_poll_config_id_poll_config_rating_ap5cb0e6b GENERATED ALWAYS AS (CASE WHEN split_part(config_id, '/', 1) = 'poll_config_rating_approval' THEN cast(split_part(config_id, '/', 2) AS INTEGER) ELSE null END) STORED, + config_id_poll_config_stv_scottish_id integer + CONSTRAINT unique_poll_config_id_poll_config_stv_scottish_id UNIQUE + CONSTRAINT generated_always_as_poll_config_id_poll_config_stv_scottish_id GENERATED ALWAYS AS (CASE WHEN split_part(config_id, '/', 1) = 'poll_config_stv_scottish' THEN cast(split_part(config_id, '/', 2) AS INTEGER) ELSE null END) STORED, + CONSTRAINT valid_poll_config_id_part1 CHECK (split_part(config_id, '/', 1) IN ('poll_config_approval','poll_config_selection','poll_config_rating_score','poll_config_rating_approval','poll_config_stv_scottish')), + visibility enum_poll_visibility + CONSTRAINT required_poll_visibility NOT NULL, state enum_poll_state CONSTRAINT default_poll_state DEFAULT 'created', - min_votes_amount integer - CONSTRAINT minimum_poll_min_votes_amount CHECK (min_votes_amount >= 1) - CONSTRAINT default_poll_min_votes_amount DEFAULT 1, - max_votes_amount integer - CONSTRAINT minimum_poll_max_votes_amount CHECK (max_votes_amount >= 1) - CONSTRAINT default_poll_max_votes_amount DEFAULT 1, - max_votes_per_option integer - CONSTRAINT minimum_poll_max_votes_per_option CHECK (max_votes_per_option >= 1) - CONSTRAINT default_poll_max_votes_per_option DEFAULT 1, - global_yes boolean - CONSTRAINT default_poll_global_yes DEFAULT False, - global_no boolean - CONSTRAINT default_poll_global_no DEFAULT False, - global_abstain boolean - CONSTRAINT default_poll_global_abstain DEFAULT False, - onehundred_percent_base enum_onehundred_percent_bases - CONSTRAINT required_poll_onehundred_percent_base NOT NULL - CONSTRAINT default_poll_onehundred_percent_base DEFAULT 'disabled', - votesvalid decimal(16,6), - votesinvalid decimal(16,6), - votescast decimal(16,6), - entitled_users_at_stop jsonb, + result text, + published boolean + CONSTRAINT default_poll_published DEFAULT False, + anonymized boolean + CONSTRAINT default_poll_anonymized DEFAULT False, + allow_invalid boolean + CONSTRAINT default_poll_allow_invalid DEFAULT False, + allow_vote_split boolean + CONSTRAINT default_poll_allow_vote_split DEFAULT False, live_voting_enabled boolean CONSTRAINT default_poll_live_voting_enabled DEFAULT False, sequential_number integer @@ -2025,42 +2003,132 @@ CREATE TABLE poll_t ( content_object_id_topic_id integer CONSTRAINT generated_always_as_poll_content_object_id_topic_id GENERATED ALWAYS AS (CASE WHEN split_part(content_object_id, '/', 1) = 'topic' THEN cast(split_part(content_object_id, '/', 2) AS INTEGER) ELSE null END) STORED, CONSTRAINT valid_poll_content_object_id_part1 CHECK (split_part(content_object_id, '/', 1) IN ('motion','assignment','topic')), - global_option_id integer - CONSTRAINT unique_poll_global_option_id UNIQUE, meeting_id integer CONSTRAINT required_poll_meeting_id NOT NULL ); -comment on column poll_t.live_voting_enabled is 'If true, the vote service sends the votes of the users to the autoupdate service.'; +comment on column poll_t.result is 'Calculated result. The format depends on the value in poll/method. Can be manually set when visibility is set to manually.'; +comment on column poll_t.published is 'If true, users can see the result.'; +comment on column poll_t.anonymized is 'Set to true, after finished was called with anonymize.'; +comment on column poll_t.allow_invalid is 'If true, the vote service does not validate. This is always the case for secret polls.'; +comment on column poll_t.allow_vote_split is 'If true, users can split there vote.'; +comment on column poll_t.live_voting_enabled is 'If true, on start, publish will be set to true.'; comment on column poll_t.sequential_number is 'The (positive) serial number of this model in its meeting. This number is auto-generated and read-only.'; -/* - Fields without SQL definition for table poll - poll/live_votes: type:JSON is marked as a calculated field and not generated in schema +CREATE TABLE poll_ballot_t ( + id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + weight decimal(16,6) + CONSTRAINT default_poll_ballot_weight DEFAULT '1.000000', + split boolean + CONSTRAINT default_poll_ballot_split DEFAULT False, + value text, + poll_id integer + CONSTRAINT required_poll_ballot_poll_id NOT NULL, + poll_ballot_user_id integer + CONSTRAINT unique_poll_ballot_poll_ballot_user_id UNIQUE +); + -*/ -CREATE TABLE poll_candidate_t ( + +CREATE TABLE poll_ballot_user_t ( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, - poll_candidate_list_id integer - CONSTRAINT required_poll_candidate_poll_candidate_list_id NOT NULL, - user_id integer, - weight integer - CONSTRAINT required_poll_candidate_weight NOT NULL, - meeting_id integer - CONSTRAINT required_poll_candidate_meeting_id NOT NULL + poll_id integer + CONSTRAINT required_poll_ballot_user_poll_id NOT NULL, + acting_meeting_user_id integer + CONSTRAINT required_poll_ballot_user_acting_meeting_user_id NOT NULL, + represented_meeting_user_id integer + CONSTRAINT required_poll_ballot_user_represented_meeting_user_id NOT NULL, + CONSTRAINT unique_poll_ballot_user_poll_id_represented_meeting_user_id UNIQUE (poll_id, represented_meeting_user_id) ); -CREATE TABLE poll_candidate_list_t ( +CREATE TABLE poll_config_approval_t ( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, - meeting_id integer - CONSTRAINT required_poll_candidate_list_meeting_id NOT NULL + allow_abstain boolean + CONSTRAINT default_poll_config_approval_allow_abstain DEFAULT True, + onehundred_percent_base enum_approval_onehundred_percent_bases + CONSTRAINT required_poll_config_approval_onehundred_percent_base NOT NULL +); + + + + +CREATE TABLE poll_config_rating_approval_t ( + id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + max_options_amount integer + CONSTRAINT default_poll_config_rating_approval_max_options_amount DEFAULT 0, + min_options_amount integer + CONSTRAINT default_poll_config_rating_approval_min_options_amount DEFAULT 0, + max_yes_amount integer, + allow_abstain boolean + CONSTRAINT default_poll_config_rating_approval_allow_abstain DEFAULT True, + onehundred_percent_base enum_rating_approval_onehundred_percent_bases + CONSTRAINT required_poll_config_rating_approval_onehundred_percent_base NOT NULL +); + + + + +CREATE TABLE poll_config_rating_score_t ( + id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + max_options_amount integer + CONSTRAINT default_poll_config_rating_score_max_options_amount DEFAULT 0, + min_options_amount integer + CONSTRAINT default_poll_config_rating_score_min_options_amount DEFAULT 0, + max_votes_per_option integer + CONSTRAINT default_poll_config_rating_score_max_votes_per_option DEFAULT 0, + max_vote_sum integer + CONSTRAINT default_poll_config_rating_score_max_vote_sum DEFAULT 0, + min_vote_sum integer + CONSTRAINT default_poll_config_rating_score_min_vote_sum DEFAULT 0, + onehundred_percent_base enum_rating_score_onehundred_percent_bases + CONSTRAINT required_poll_config_rating_score_onehundred_percent_base NOT NULL +); + + + + +CREATE TABLE poll_config_selection_t ( + id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + max_options_amount integer + CONSTRAINT default_poll_config_selection_max_options_amount DEFAULT 0, + min_options_amount integer + CONSTRAINT default_poll_config_selection_min_options_amount DEFAULT 0, + allow_nota boolean + CONSTRAINT default_poll_config_selection_allow_nota DEFAULT False, + strike_out boolean + CONSTRAINT default_poll_config_selection_strike_out DEFAULT False, + onehundred_percent_base enum_selection_onehundred_percent_bases + CONSTRAINT required_poll_config_selection_onehundred_percent_base NOT NULL, + display_chart varchar(256) +); + + + + +CREATE TABLE poll_config_stv_scottish_t ( + id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + posts integer + CONSTRAINT minimum_poll_config_stv_scottish_posts CHECK (posts >= 1) + CONSTRAINT default_poll_config_stv_scottish_posts DEFAULT 1 +); + + + + +CREATE TABLE poll_option_t ( + id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + poll_id integer + CONSTRAINT required_poll_option_poll_id NOT NULL, + weight integer, + text varchar(256), + meeting_user_id integer ); @@ -2107,12 +2175,6 @@ CREATE TABLE projection_t ( -/* - Fields without SQL definition for table projection - - projection/content: type:JSON is marked as a calculated field and not generated in schema - -*/ CREATE TABLE projector_t ( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, @@ -2185,7 +2247,7 @@ CREATE TABLE projector_t ( used_as_default_projector_for_countdown_in_meeting_id integer, used_as_default_projector_for_assignment_poll_in_meeting_id integer, used_as_default_projector_for_motion_poll_in_meeting_id integer, - used_as_default_projector_for_poll_in_meeting_id integer, + used_as_default_projector_for_topic_poll_in_meeting_id integer, meeting_id integer CONSTRAINT required_projector_meeting_id NOT NULL ); @@ -2474,25 +2536,6 @@ comment on column user_t.saml_id is 'unique-key from IdP for SAML login'; comment on column user_t.organization_management_level is 'Hierarchical permission level for the whole organization.'; -CREATE TABLE vote_t ( - id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, - weight decimal(16,6) - CONSTRAINT required_vote_weight NOT NULL, - value varchar(256) - CONSTRAINT required_vote_value NOT NULL, - user_token varchar(256) - CONSTRAINT required_vote_user_token NOT NULL, - option_id integer - CONSTRAINT required_vote_option_id NOT NULL, - user_id integer, - delegated_user_id integer, - meeting_id integer - CONSTRAINT required_vote_meeting_id NOT NULL -); - - - - -- Intermediate table definitions @@ -2672,6 +2715,22 @@ CREATE TABLE nm_group_poll_ids_poll_t ( CREATE INDEX idx_nm_group_poll_ids_poll_t_group_id ON nm_group_poll_ids_poll_t (group_id); CREATE INDEX idx_nm_group_poll_ids_poll_t_poll_id ON nm_group_poll_ids_poll_t (poll_id); +CREATE TABLE nm_group_uimpdi_meeting_poll_default_t ( + group_id integer + CONSTRAINT required_nm_group_uimpdi_meeting_poll_default_t_group_id NOT NULL + CONSTRAINT fk_nm_group_uimpdi_meeting_poll_default_t_group_id_group_t_id REFERENCES group_t (id) + ON DELETE CASCADE + INITIALLY DEFERRED, + meeting_poll_default_id integer + CONSTRAINT required_nm_group_uimpdi_meeting_poll_default_t_meeting_3e3a74c NOT NULL + CONSTRAINT fk_nm_group_uimpdi_meeting_poll_default_t_meeting_poll_de89d9d1 REFERENCES meeting_poll_default_t (id) + ON DELETE CASCADE + INITIALLY DEFERRED, + CONSTRAINT pk_nm_group_uimpdi_meeting_poll_default_t PRIMARY KEY (group_id, meeting_poll_default_id) +); +CREATE INDEX idx_nm_group_uimpdi_meeting_poll_default_t_group_id ON nm_group_uimpdi_meeting_poll_default_t (group_id); +CREATE INDEX idx_nm_group_uimpdi_meeting_poll_default_t_meeting_poll_d4adef5 ON nm_group_uimpdi_meeting_poll_default_t (meeting_poll_default_id); + CREATE TABLE nm_meeting_present_user_ids_user_t ( meeting_id integer CONSTRAINT required_nm_meeting_present_user_ids_user_t_meeting_id NOT NULL @@ -2850,22 +2909,6 @@ CREATE INDEX idx_gm_organization_tag_tagged_ids_t_tagged_id ON gm_organization_t CREATE INDEX idx_gm_organization_tag_tagged_ids_t_tagged_id_committee_id ON gm_organization_tag_tagged_ids_t (tagged_id_committee_id); CREATE INDEX idx_gm_organization_tag_tagged_ids_t_tagged_id_meeting_id ON gm_organization_tag_tagged_ids_t (tagged_id_meeting_id); -CREATE TABLE nm_poll_voted_ids_user_t ( - poll_id integer - CONSTRAINT required_nm_poll_voted_ids_user_t_poll_id NOT NULL - CONSTRAINT fk_nm_poll_voted_ids_user_t_poll_id_poll_t_id REFERENCES poll_t (id) - ON DELETE CASCADE - INITIALLY DEFERRED, - user_id integer - CONSTRAINT required_nm_poll_voted_ids_user_t_user_id NOT NULL - CONSTRAINT fk_nm_poll_voted_ids_user_t_user_id_user_t_id REFERENCES user_t (id) - ON DELETE CASCADE - INITIALLY DEFERRED, - CONSTRAINT pk_nm_poll_voted_ids_user_t PRIMARY KEY (poll_id, user_id) -); -CREATE INDEX idx_nm_poll_voted_ids_user_t_poll_id ON nm_poll_voted_ids_user_t (poll_id); -CREATE INDEX idx_nm_poll_voted_ids_user_t_user_id ON nm_poll_voted_ids_user_t (user_id); - CREATE TABLE gm_tag_tagged_ids_t ( tag_id integer CONSTRAINT required_gm_tag_tagged_ids_t_tag_id NOT NULL @@ -2991,7 +3034,8 @@ CREATE VIEW "group" AS SELECT *, (select array_agg(n.motion_comment_section_id ORDER BY n.motion_comment_section_id) from nm_group_write_comment_section_ids_motion_comment_section_t n where n.group_id = g.id) as write_comment_section_ids, (select array_agg(n.chat_group_id ORDER BY n.chat_group_id) from nm_chat_group_read_group_ids_group_t n where n.group_id = g.id) as read_chat_group_ids, (select array_agg(n.chat_group_id ORDER BY n.chat_group_id) from nm_chat_group_write_group_ids_group_t n where n.group_id = g.id) as write_chat_group_ids, -(select array_agg(n.poll_id ORDER BY n.poll_id) from nm_group_poll_ids_poll_t n where n.group_id = g.id) as poll_ids +(select array_agg(n.poll_id ORDER BY n.poll_id) from nm_group_poll_ids_poll_t n where n.group_id = g.id) as poll_ids, +(select array_agg(n.meeting_poll_default_id ORDER BY n.meeting_poll_default_id) from nm_group_uimpdi_meeting_poll_default_t n where n.group_id = g.id) as used_in_meeting_poll_default_ids FROM group_t g; comment on column "group".meeting_mediafile_inherited_access_group_ids is 'Calculated field.'; @@ -3021,13 +3065,7 @@ FROM mediafile_t m; CREATE VIEW "meeting" AS SELECT *, -(select array_agg(g.id ORDER BY g.id) from group_t g where g.used_as_motion_poll_default_id = m.id) as motion_poll_default_group_ids, -(select array_agg(p.id ORDER BY p.id) from poll_candidate_list_t p where p.meeting_id = m.id) as poll_candidate_list_ids, -(select array_agg(p.id ORDER BY p.id) from poll_candidate_t p where p.meeting_id = m.id) as poll_candidate_ids, (select array_agg(mu.id ORDER BY mu.id) from meeting_user_t mu where mu.meeting_id = m.id) as meeting_user_ids, -(select array_agg(g.id ORDER BY g.id) from group_t g where g.used_as_assignment_poll_default_id = m.id) as assignment_poll_default_group_ids, -(select array_agg(g.id ORDER BY g.id) from group_t g where g.used_as_poll_default_id = m.id) as poll_default_group_ids, -(select array_agg(g.id ORDER BY g.id) from group_t g where g.used_as_topic_poll_default_id = m.id) as topic_poll_default_group_ids, (select array_agg(p.id ORDER BY p.id) from projector_t p where p.meeting_id = m.id) as projector_ids, (select array_agg(p.id ORDER BY p.id) from projection_t p where p.meeting_id = m.id) as all_projection_ids, (select array_agg(p.id ORDER BY p.id) from projector_message_t p where p.meeting_id = m.id) as projector_message_ids, @@ -3056,8 +3094,7 @@ CREATE VIEW "meeting" AS SELECT *, (select array_agg(mc.id ORDER BY mc.id) from motion_change_recommendation_t mc where mc.meeting_id = m.id) as motion_change_recommendation_ids, (select array_agg(ms.id ORDER BY ms.id) from motion_state_t ms where ms.meeting_id = m.id) as motion_state_ids, (select array_agg(p.id ORDER BY p.id) from poll_t p where p.meeting_id = m.id) as poll_ids, -(select array_agg(o.id ORDER BY o.id) from option_t o where o.meeting_id = m.id) as option_ids, -(select array_agg(v.id ORDER BY v.id) from vote_t v where v.meeting_id = m.id) as vote_ids, +(select array_agg(mp.id ORDER BY mp.id) from meeting_poll_default_t mp where mp.meeting_id = m.id) as poll_default_ids, (select array_agg(a.id ORDER BY a.id) from assignment_t a where a.meeting_id = m.id) as assignment_ids, (select array_agg(a.id ORDER BY a.id) from assignment_candidate_t a where a.meeting_id = m.id) as assignment_candidate_ids, (select array_agg(p.id ORDER BY p.id) from personal_note_t p where p.meeting_id = m.id) as personal_note_ids, @@ -3087,7 +3124,7 @@ CREATE VIEW "meeting" AS SELECT *, (select array_agg(p.id ORDER BY p.id) from projector_t p where p.used_as_default_projector_for_countdown_in_meeting_id = m.id) as default_projector_countdown_ids, (select array_agg(p.id ORDER BY p.id) from projector_t p where p.used_as_default_projector_for_assignment_poll_in_meeting_id = m.id) as default_projector_assignment_poll_ids, (select array_agg(p.id ORDER BY p.id) from projector_t p where p.used_as_default_projector_for_motion_poll_in_meeting_id = m.id) as default_projector_motion_poll_ids, -(select array_agg(p.id ORDER BY p.id) from projector_t p where p.used_as_default_projector_for_poll_in_meeting_id = m.id) as default_projector_poll_ids, +(select array_agg(p.id ORDER BY p.id) from projector_t p where p.used_as_default_projector_for_topic_poll_in_meeting_id = m.id) as default_projector_topic_poll_ids, (select array_agg(h.id ORDER BY h.id) from history_entry_t h where h.meeting_id = m.id) as relevant_history_entry_ids FROM meeting_t m; @@ -3119,6 +3156,14 @@ FROM meeting_mediafile_t m; comment on column "meeting_mediafile".inherited_access_group_ids is 'Calculated in actions. Shows what access group permissions are actually relevant. Calculated as the intersection of this meeting_mediafiles access_group_ids and the related mediafiles potential parent mediafiles inherited_access_group_ids. If the parent has no meeting_mediafile for this meeting, its inherited access group is assumed to be the meetings admin group. If there is no parent, the inherited_access_group_ids is equal to the access_group_ids. If the access_group_ids are empty, the interpretations is that every group has access rights, therefore the parent inherited_access_group_ids are used as-is.'; +CREATE VIEW "meeting_poll_default" AS SELECT *, +(select array_agg(n.group_id ORDER BY n.group_id) from nm_group_uimpdi_meeting_poll_default_t n where n.meeting_poll_default_id = m.id) as group_ids, +(select m1.id from meeting_t m1 where m1.assignment_poll_config_id = m.id) as used_as_assignment_poll_config_in_meeting_id, +(select m1.id from meeting_t m1 where m1.motion_poll_config_id = m.id) as used_as_motion_poll_config_in_meeting_id, +(select m1.id from meeting_t m1 where m1.topic_poll_config_id = m.id) as used_as_topic_poll_config_in_meeting_id +FROM meeting_poll_default_t m; + + CREATE VIEW "meeting_user" AS SELECT *, (select array_agg(p.id ORDER BY p.id) from personal_note_t p where p.meeting_user_id = m.id) as personal_note_ids, (select array_agg(s.id ORDER BY s.id) from speaker_t s where s.meeting_user_id = m.id) as speaker_ids, @@ -3128,9 +3173,13 @@ CREATE VIEW "meeting_user" AS SELECT *, (select array_agg(ms.id ORDER BY ms.id) from motion_submitter_t ms where ms.meeting_user_id = m.id) as motion_submitter_ids, (select array_agg(a.id ORDER BY a.id) from assignment_candidate_t a where a.meeting_user_id = m.id) as assignment_candidate_ids, (select array_agg(mu.id ORDER BY mu.id) from meeting_user_t mu where mu.vote_delegated_to_id = m.id) as vote_delegations_from_ids, +(select array_agg(p.id ORDER BY p.id) from poll_option_t p where p.meeting_user_id = m.id) as poll_option_ids, +(select array_agg(p.id ORDER BY p.id) from poll_ballot_user_t p where p.acting_meeting_user_id = m.id) as acting_ballot_ids, +(select array_agg(p.id ORDER BY p.id) from poll_ballot_user_t p where p.represented_meeting_user_id = m.id) as represented_ballot_ids, (select array_agg(c.id ORDER BY c.id) from chat_message_t c where c.meeting_user_id = m.id) as chat_message_ids, (select array_agg(n.group_id ORDER BY n.group_id) from nm_group_meeting_user_ids_meeting_user_t n where n.meeting_user_id = m.id) as group_ids, -(select array_agg(n.structure_level_id ORDER BY n.structure_level_id) from nm_meeting_user_structure_level_ids_structure_level_t n where n.meeting_user_id = m.id) as structure_level_ids +(select array_agg(n.structure_level_id ORDER BY n.structure_level_id) from nm_meeting_user_structure_level_ids_structure_level_t n where n.meeting_user_id = m.id) as structure_level_ids, +(select array_agg(h.id ORDER BY h.id) from history_entry_t h where h.model_id_meeting_user_id = m.id) as history_entry_ids FROM meeting_user_t m; @@ -3150,7 +3199,6 @@ CREATE VIEW "motion" AS SELECT *, (select array_agg(me.id ORDER BY me.id) from motion_editor_t me where me.motion_id = m.id) as editor_ids, (select array_agg(mw.id ORDER BY mw.id) from motion_working_group_speaker_t mw where mw.motion_id = m.id) as working_group_speaker_ids, (select array_agg(p.id ORDER BY p.id) from poll_t p where p.content_object_id_motion_id = m.id) as poll_ids, -(select array_agg(o.id ORDER BY o.id) from option_t o where o.content_object_id_motion_id = m.id) as option_ids, (select array_agg(mc.id ORDER BY mc.id) from motion_change_recommendation_t mc where mc.motion_id = m.id) as change_recommendation_ids, (select array_agg(mc.id ORDER BY mc.id) from motion_comment_t mc where mc.motion_id = m.id) as comment_ids, (select a.id from agenda_item_t a where a.content_object_id_motion_id = m.id) as agenda_item_id, @@ -3219,12 +3267,6 @@ FROM motion_workflow_t m; CREATE VIEW "motion_working_group_speaker" AS SELECT * FROM motion_working_group_speaker_t m; -CREATE VIEW "option" AS SELECT *, -(select p.id from poll_t p where p.global_option_id = o.id) as used_as_global_option_in_poll_id, -(select array_agg(v.id ORDER BY v.id) from vote_t v where v.option_id = o.id) as vote_ids -FROM option_t o; - - CREATE VIEW "organization" AS SELECT *, (select array_agg(g.id ORDER BY g.id) from gender_t g where g.organization_id = o.id) as gender_ids, (select array_agg(c.id ORDER BY c.id) from committee_t c where c.organization_id = o.id) as committee_ids, @@ -3253,20 +3295,49 @@ FROM point_of_order_category_t p; CREATE VIEW "poll" AS SELECT *, -(select array_agg(o.id ORDER BY o.id) from option_t o where o.poll_id = p.id) as option_ids, -(select array_agg(n.user_id ORDER BY n.user_id) from nm_poll_voted_ids_user_t n where n.poll_id = p.id) as voted_ids, +(select array_agg(po.id ORDER BY po.id) from poll_option_t po where po.poll_id = p.id) as option_ids, +(select array_agg(pb.id ORDER BY pb.id) from poll_ballot_t pb where pb.poll_id = p.id) as ballot_ids, +(select array_agg(pb.id ORDER BY pb.id) from poll_ballot_user_t pb where pb.poll_id = p.id) as ballot_user_ids, (select array_agg(n.group_id ORDER BY n.group_id) from nm_group_poll_ids_poll_t n where n.poll_id = p.id) as entitled_group_ids, -(select array_agg(pt.id ORDER BY pt.id) from projection_t pt where pt.content_object_id_poll_id = p.id) as projection_ids +(select array_agg(pt.id ORDER BY pt.id) from projection_t pt where pt.content_object_id_poll_id = p.id) as projection_ids, +(select array_agg(h.id ORDER BY h.id) from history_entry_t h where h.model_id_poll_id = p.id) as history_entry_ids FROM poll_t p; -CREATE VIEW "poll_candidate" AS SELECT * FROM poll_candidate_t p; +CREATE VIEW "poll_ballot" AS SELECT * FROM poll_ballot_t p; + + +CREATE VIEW "poll_ballot_user" AS SELECT *, +(select pb.id from poll_ballot_t pb where pb.poll_ballot_user_id = p.id) as poll_ballot_id +FROM poll_ballot_user_t p; + + +CREATE VIEW "poll_config_approval" AS SELECT *, +(select p1.id from poll_t p1 where p1.config_id_poll_config_approval_id = p.id) as poll_id +FROM poll_config_approval_t p; + +CREATE VIEW "poll_config_rating_approval" AS SELECT *, +(select p1.id from poll_t p1 where p1.config_id_poll_config_rating_approval_id = p.id) as poll_id +FROM poll_config_rating_approval_t p; -CREATE VIEW "poll_candidate_list" AS SELECT *, -(select array_agg(pc.id ORDER BY pc.id) from poll_candidate_t pc where pc.poll_candidate_list_id = p.id) as poll_candidate_ids, -(select o.id from option_t o where o.content_object_id_poll_candidate_list_id = p.id) as option_id -FROM poll_candidate_list_t p; + +CREATE VIEW "poll_config_rating_score" AS SELECT *, +(select p1.id from poll_t p1 where p1.config_id_poll_config_rating_score_id = p.id) as poll_id +FROM poll_config_rating_score_t p; + + +CREATE VIEW "poll_config_selection" AS SELECT *, +(select p1.id from poll_t p1 where p1.config_id_poll_config_selection_id = p.id) as poll_id +FROM poll_config_selection_t p; + + +CREATE VIEW "poll_config_stv_scottish" AS SELECT *, +(select p1.id from poll_t p1 where p1.config_id_poll_config_stv_scottish_id = p.id) as poll_id +FROM poll_config_stv_scottish_t p; + + +CREATE VIEW "poll_option" AS SELECT * FROM poll_option_t p; CREATE VIEW "projection" AS SELECT * FROM projection_t p; @@ -3354,11 +3425,6 @@ CREATE VIEW "user" AS SELECT *, , (select array_agg(n.committee_id ORDER BY n.committee_id) from nm_committee_manager_ids_user_t n where n.user_id = u.id) as committee_management_ids, (select array_agg(m.id ORDER BY m.id) from meeting_user_t m where m.user_id = u.id) as meeting_user_ids, -(select array_agg(n.poll_id ORDER BY n.poll_id) from nm_poll_voted_ids_user_t n where n.user_id = u.id) as poll_voted_ids, -(select array_agg(o.id ORDER BY o.id) from option_t o where o.content_object_id_user_id = u.id) as option_ids, -(select array_agg(v.id ORDER BY v.id) from vote_t v where v.user_id = u.id) as vote_ids, -(select array_agg(v.id ORDER BY v.id) from vote_t v where v.delegated_user_id = u.id) as delegated_vote_ids, -(select array_agg(p.id ORDER BY p.id) from poll_candidate_t p where p.user_id = u.id) as poll_candidate_ids, (select array_agg(h.id ORDER BY h.id) from history_position_t h where h.user_id = u.id) as history_position_ids, (select array_agg(h.id ORDER BY h.id) from history_entry_t h where h.model_id_user_id = u.id) as history_entry_ids, ( @@ -3372,9 +3438,6 @@ FROM user_t u; comment on column "user".committee_ids is 'Calculated field: Returns committee_ids, where the user is manager or member in a meeting'; comment on column "user".meeting_ids is 'Calculated. All ids from meetings calculated via meeting_user.'; -CREATE VIEW "vote" AS SELECT * FROM vote_t v; - - -- Alter table relations ALTER TABLE agenda_item_t ADD CONSTRAINT fk_agenda_item_t_content_object_id_motion_id_motion_t_id FOREIGN KEY(content_object_id_motion_id) REFERENCES motion_t(id) INITIALLY DEFERRED; @@ -3420,23 +3483,19 @@ CREATE INDEX idx_committee_t_organization_id ON committee_t (organization_id); ALTER TABLE gender_t ADD CONSTRAINT fk_gender_t_organization_id_organization_t_id FOREIGN KEY(organization_id) REFERENCES organization_t(id) INITIALLY DEFERRED; CREATE INDEX idx_gender_t_organization_id ON gender_t (organization_id); -ALTER TABLE group_t ADD CONSTRAINT fk_group_t_used_as_motion_poll_default_id_meeting_t_id FOREIGN KEY(used_as_motion_poll_default_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_group_t_used_as_motion_poll_default_id ON group_t (used_as_motion_poll_default_id); -ALTER TABLE group_t ADD CONSTRAINT fk_group_t_used_as_assignment_poll_default_id_meeting_t_id FOREIGN KEY(used_as_assignment_poll_default_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_group_t_used_as_assignment_poll_default_id ON group_t (used_as_assignment_poll_default_id); -ALTER TABLE group_t ADD CONSTRAINT fk_group_t_used_as_topic_poll_default_id_meeting_t_id FOREIGN KEY(used_as_topic_poll_default_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_group_t_used_as_topic_poll_default_id ON group_t (used_as_topic_poll_default_id); -ALTER TABLE group_t ADD CONSTRAINT fk_group_t_used_as_poll_default_id_meeting_t_id FOREIGN KEY(used_as_poll_default_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_group_t_used_as_poll_default_id ON group_t (used_as_poll_default_id); ALTER TABLE group_t ADD CONSTRAINT fk_group_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; CREATE INDEX idx_group_t_meeting_id ON group_t (meeting_id); -ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_model_id_user_id_user_t_id FOREIGN KEY(model_id_user_id) REFERENCES user_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_history_entry_t_model_id_user_id ON history_entry_t (model_id_user_id); -ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_model_id_motion_id_motion_t_id FOREIGN KEY(model_id_motion_id) REFERENCES motion_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_history_entry_t_model_id_motion_id ON history_entry_t (model_id_motion_id); ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_model_id_assignment_id_assignment_t_id FOREIGN KEY(model_id_assignment_id) REFERENCES assignment_t(id) INITIALLY DEFERRED; CREATE INDEX idx_history_entry_t_model_id_assignment_id ON history_entry_t (model_id_assignment_id); +ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_model_id_meeting_user_id_meeting_user_t_id FOREIGN KEY(model_id_meeting_user_id) REFERENCES meeting_user_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_history_entry_t_model_id_meeting_user_id ON history_entry_t (model_id_meeting_user_id); +ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_model_id_motion_id_motion_t_id FOREIGN KEY(model_id_motion_id) REFERENCES motion_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_history_entry_t_model_id_motion_id ON history_entry_t (model_id_motion_id); +ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_model_id_poll_id_poll_t_id FOREIGN KEY(model_id_poll_id) REFERENCES poll_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_history_entry_t_model_id_poll_id ON history_entry_t (model_id_poll_id); +ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_model_id_user_id_user_t_id FOREIGN KEY(model_id_user_id) REFERENCES user_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_history_entry_t_model_id_user_id ON history_entry_t (model_id_user_id); ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_position_id_history_position_t_id FOREIGN KEY(position_id) REFERENCES history_position_t(id) INITIALLY DEFERRED; CREATE INDEX idx_history_entry_t_position_id ON history_entry_t (position_id); ALTER TABLE history_entry_t ADD CONSTRAINT fk_history_entry_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; @@ -3477,6 +3536,12 @@ ALTER TABLE meeting_t ADD CONSTRAINT fk_meeting_t_motions_default_workflow_id_mo CREATE INDEX idx_meeting_t_motions_default_workflow_id ON meeting_t (motions_default_workflow_id); ALTER TABLE meeting_t ADD CONSTRAINT fk_meeting_t_motions_default_amendment_workflow_id_motio34ae2bf FOREIGN KEY(motions_default_amendment_workflow_id) REFERENCES motion_workflow_t(id) INITIALLY DEFERRED; CREATE INDEX idx_meeting_t_motions_default_amendment_workflow_id ON meeting_t (motions_default_amendment_workflow_id); +ALTER TABLE meeting_t ADD CONSTRAINT fk_meeting_t_assignment_poll_config_id_meeting_poll_defa20bd2b8 FOREIGN KEY(assignment_poll_config_id) REFERENCES meeting_poll_default_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_meeting_t_assignment_poll_config_id ON meeting_t (assignment_poll_config_id); +ALTER TABLE meeting_t ADD CONSTRAINT fk_meeting_t_motion_poll_config_id_meeting_poll_default_t_id FOREIGN KEY(motion_poll_config_id) REFERENCES meeting_poll_default_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_meeting_t_motion_poll_config_id ON meeting_t (motion_poll_config_id); +ALTER TABLE meeting_t ADD CONSTRAINT fk_meeting_t_topic_poll_config_id_meeting_poll_default_t_id FOREIGN KEY(topic_poll_config_id) REFERENCES meeting_poll_default_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_meeting_t_topic_poll_config_id ON meeting_t (topic_poll_config_id); ALTER TABLE meeting_t ADD CONSTRAINT fk_meeting_t_logo_projector_main_id_meeting_mediafile_t_id FOREIGN KEY(logo_projector_main_id) REFERENCES meeting_mediafile_t(id) INITIALLY DEFERRED; CREATE INDEX idx_meeting_t_logo_projector_main_id ON meeting_t (logo_projector_main_id); ALTER TABLE meeting_t ADD CONSTRAINT fk_meeting_t_logo_projector_header_id_meeting_mediafile_t_id FOREIGN KEY(logo_projector_header_id) REFERENCES meeting_mediafile_t(id) INITIALLY DEFERRED; @@ -3529,6 +3594,9 @@ CREATE INDEX idx_meeting_mediafile_t_mediafile_id ON meeting_mediafile_t (mediaf ALTER TABLE meeting_mediafile_t ADD CONSTRAINT fk_meeting_mediafile_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; CREATE INDEX idx_meeting_mediafile_t_meeting_id ON meeting_mediafile_t (meeting_id); +ALTER TABLE meeting_poll_default_t ADD CONSTRAINT fk_meeting_poll_default_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_meeting_poll_default_t_meeting_id ON meeting_poll_default_t (meeting_id); + ALTER TABLE meeting_user_t ADD CONSTRAINT fk_meeting_user_t_user_id_user_t_id FOREIGN KEY(user_id) REFERENCES user_t(id) INITIALLY DEFERRED; CREATE INDEX idx_meeting_user_t_user_id ON meeting_user_t (user_id); ALTER TABLE meeting_user_t ADD CONSTRAINT fk_meeting_user_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; @@ -3618,17 +3686,6 @@ CREATE INDEX idx_motion_working_group_speaker_t_motion_id ON motion_working_grou ALTER TABLE motion_working_group_speaker_t ADD CONSTRAINT fk_motion_working_group_speaker_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; CREATE INDEX idx_motion_working_group_speaker_t_meeting_id ON motion_working_group_speaker_t (meeting_id); -ALTER TABLE option_t ADD CONSTRAINT fk_option_t_poll_id_poll_t_id FOREIGN KEY(poll_id) REFERENCES poll_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_option_t_poll_id ON option_t (poll_id); -ALTER TABLE option_t ADD CONSTRAINT fk_option_t_content_object_id_motion_id_motion_t_id FOREIGN KEY(content_object_id_motion_id) REFERENCES motion_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_option_t_content_object_id_motion_id ON option_t (content_object_id_motion_id); -ALTER TABLE option_t ADD CONSTRAINT fk_option_t_content_object_id_user_id_user_t_id FOREIGN KEY(content_object_id_user_id) REFERENCES user_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_option_t_content_object_id_user_id ON option_t (content_object_id_user_id); -ALTER TABLE option_t ADD CONSTRAINT fk_option_t_content_object_id_poll_candidate_list_id_pold428251 FOREIGN KEY(content_object_id_poll_candidate_list_id) REFERENCES poll_candidate_list_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_option_t_content_object_id_poll_candidate_list_id ON option_t (content_object_id_poll_candidate_list_id); -ALTER TABLE option_t ADD CONSTRAINT fk_option_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_option_t_meeting_id ON option_t (meeting_id); - ALTER TABLE organization_t ADD CONSTRAINT fk_organization_t_theme_id_theme_t_id FOREIGN KEY(theme_id) REFERENCES theme_t(id) INITIALLY DEFERRED; CREATE INDEX idx_organization_t_theme_id ON organization_t (theme_id); @@ -3645,26 +3702,41 @@ CREATE INDEX idx_personal_note_t_meeting_id ON personal_note_t (meeting_id); ALTER TABLE point_of_order_category_t ADD CONSTRAINT fk_point_of_order_category_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; CREATE INDEX idx_point_of_order_category_t_meeting_id ON point_of_order_category_t (meeting_id); +ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_config_id_poll_config_approval_id_poll_config_f74c82e FOREIGN KEY(config_id_poll_config_approval_id) REFERENCES poll_config_approval_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_t_config_id_poll_config_approval_id ON poll_t (config_id_poll_config_approval_id); +ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_config_id_poll_config_selection_id_poll_config65f401f FOREIGN KEY(config_id_poll_config_selection_id) REFERENCES poll_config_selection_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_t_config_id_poll_config_selection_id ON poll_t (config_id_poll_config_selection_id); +ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_config_id_poll_config_rating_score_id_poll_conff3b6f0 FOREIGN KEY(config_id_poll_config_rating_score_id) REFERENCES poll_config_rating_score_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_t_config_id_poll_config_rating_score_id ON poll_t (config_id_poll_config_rating_score_id); +ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_config_id_poll_config_rating_approval_id_poll_6ff58a7 FOREIGN KEY(config_id_poll_config_rating_approval_id) REFERENCES poll_config_rating_approval_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_t_config_id_poll_config_rating_approval_id ON poll_t (config_id_poll_config_rating_approval_id); +ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_config_id_poll_config_stv_scottish_id_poll_con0ff7fb4 FOREIGN KEY(config_id_poll_config_stv_scottish_id) REFERENCES poll_config_stv_scottish_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_t_config_id_poll_config_stv_scottish_id ON poll_t (config_id_poll_config_stv_scottish_id); ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_content_object_id_motion_id_motion_t_id FOREIGN KEY(content_object_id_motion_id) REFERENCES motion_t(id) INITIALLY DEFERRED; CREATE INDEX idx_poll_t_content_object_id_motion_id ON poll_t (content_object_id_motion_id); ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_content_object_id_assignment_id_assignment_t_id FOREIGN KEY(content_object_id_assignment_id) REFERENCES assignment_t(id) INITIALLY DEFERRED; CREATE INDEX idx_poll_t_content_object_id_assignment_id ON poll_t (content_object_id_assignment_id); ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_content_object_id_topic_id_topic_t_id FOREIGN KEY(content_object_id_topic_id) REFERENCES topic_t(id) INITIALLY DEFERRED; CREATE INDEX idx_poll_t_content_object_id_topic_id ON poll_t (content_object_id_topic_id); -ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_global_option_id_option_t_id FOREIGN KEY(global_option_id) REFERENCES option_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_poll_t_global_option_id ON poll_t (global_option_id); ALTER TABLE poll_t ADD CONSTRAINT fk_poll_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; CREATE INDEX idx_poll_t_meeting_id ON poll_t (meeting_id); -ALTER TABLE poll_candidate_t ADD CONSTRAINT fk_poll_candidate_t_poll_candidate_list_id_poll_candidat7fec070 FOREIGN KEY(poll_candidate_list_id) REFERENCES poll_candidate_list_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_poll_candidate_t_poll_candidate_list_id ON poll_candidate_t (poll_candidate_list_id); -ALTER TABLE poll_candidate_t ADD CONSTRAINT fk_poll_candidate_t_user_id_user_t_id FOREIGN KEY(user_id) REFERENCES user_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_poll_candidate_t_user_id ON poll_candidate_t (user_id); -ALTER TABLE poll_candidate_t ADD CONSTRAINT fk_poll_candidate_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_poll_candidate_t_meeting_id ON poll_candidate_t (meeting_id); +ALTER TABLE poll_ballot_t ADD CONSTRAINT fk_poll_ballot_t_poll_id_poll_t_id FOREIGN KEY(poll_id) REFERENCES poll_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_ballot_t_poll_id ON poll_ballot_t (poll_id); +ALTER TABLE poll_ballot_t ADD CONSTRAINT fk_poll_ballot_t_poll_ballot_user_id_poll_ballot_user_t_id FOREIGN KEY(poll_ballot_user_id) REFERENCES poll_ballot_user_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_ballot_t_poll_ballot_user_id ON poll_ballot_t (poll_ballot_user_id); -ALTER TABLE poll_candidate_list_t ADD CONSTRAINT fk_poll_candidate_list_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_poll_candidate_list_t_meeting_id ON poll_candidate_list_t (meeting_id); +ALTER TABLE poll_ballot_user_t ADD CONSTRAINT fk_poll_ballot_user_t_poll_id_poll_t_id FOREIGN KEY(poll_id) REFERENCES poll_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_ballot_user_t_poll_id ON poll_ballot_user_t (poll_id); +ALTER TABLE poll_ballot_user_t ADD CONSTRAINT fk_poll_ballot_user_t_acting_meeting_user_id_meeting_user_t_id FOREIGN KEY(acting_meeting_user_id) REFERENCES meeting_user_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_ballot_user_t_acting_meeting_user_id ON poll_ballot_user_t (acting_meeting_user_id); +ALTER TABLE poll_ballot_user_t ADD CONSTRAINT fk_poll_ballot_user_t_represented_meeting_user_id_meetin7f0c82a FOREIGN KEY(represented_meeting_user_id) REFERENCES meeting_user_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_ballot_user_t_represented_meeting_user_id ON poll_ballot_user_t (represented_meeting_user_id); + +ALTER TABLE poll_option_t ADD CONSTRAINT fk_poll_option_t_poll_id_poll_t_id FOREIGN KEY(poll_id) REFERENCES poll_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_option_t_poll_id ON poll_option_t (poll_id); +ALTER TABLE poll_option_t ADD CONSTRAINT fk_poll_option_t_meeting_user_id_meeting_user_t_id FOREIGN KEY(meeting_user_id) REFERENCES meeting_user_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_poll_option_t_meeting_user_id ON poll_option_t (meeting_user_id); ALTER TABLE projection_t ADD CONSTRAINT fk_projection_t_current_projector_id_projector_t_id FOREIGN KEY(current_projector_id) REFERENCES projector_t(id) INITIALLY DEFERRED; CREATE INDEX idx_projection_t_current_projector_id ON projection_t (current_projector_id); @@ -3723,8 +3795,8 @@ ALTER TABLE projector_t ADD CONSTRAINT fk_projector_t_used_as_default_projector_ CREATE INDEX idx_projector_t_used_as_default_projector_for_assignment5a08584 ON projector_t (used_as_default_projector_for_assignment_poll_in_meeting_id); ALTER TABLE projector_t ADD CONSTRAINT fk_projector_t_used_as_default_projector_for_motion_poll5bff78e FOREIGN KEY(used_as_default_projector_for_motion_poll_in_meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; CREATE INDEX idx_projector_t_used_as_default_projector_for_motion_pol0605aa8 ON projector_t (used_as_default_projector_for_motion_poll_in_meeting_id); -ALTER TABLE projector_t ADD CONSTRAINT fk_projector_t_used_as_default_projector_for_poll_in_mee417a148 FOREIGN KEY(used_as_default_projector_for_poll_in_meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_projector_t_used_as_default_projector_for_poll_in_me446bdba ON projector_t (used_as_default_projector_for_poll_in_meeting_id); +ALTER TABLE projector_t ADD CONSTRAINT fk_projector_t_used_as_default_projector_for_topic_poll_b2f5888 FOREIGN KEY(used_as_default_projector_for_topic_poll_in_meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; +CREATE INDEX idx_projector_t_used_as_default_projector_for_topic_pollb4f5002 ON projector_t (used_as_default_projector_for_topic_poll_in_meeting_id); ALTER TABLE projector_t ADD CONSTRAINT fk_projector_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; CREATE INDEX idx_projector_t_meeting_id ON projector_t (meeting_id); @@ -3771,15 +3843,6 @@ CREATE INDEX idx_user_t_home_committee_id ON user_t (home_committee_id); ALTER TABLE user_t ADD CONSTRAINT fk_user_t_organization_id_organization_t_id FOREIGN KEY(organization_id) REFERENCES organization_t(id) INITIALLY DEFERRED; CREATE INDEX idx_user_t_organization_id ON user_t (organization_id); -ALTER TABLE vote_t ADD CONSTRAINT fk_vote_t_option_id_option_t_id FOREIGN KEY(option_id) REFERENCES option_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_vote_t_option_id ON vote_t (option_id); -ALTER TABLE vote_t ADD CONSTRAINT fk_vote_t_user_id_user_t_id FOREIGN KEY(user_id) REFERENCES user_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_vote_t_user_id ON vote_t (user_id); -ALTER TABLE vote_t ADD CONSTRAINT fk_vote_t_delegated_user_id_user_t_id FOREIGN KEY(delegated_user_id) REFERENCES user_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_vote_t_delegated_user_id ON vote_t (delegated_user_id); -ALTER TABLE vote_t ADD CONSTRAINT fk_vote_t_meeting_id_meeting_t_id FOREIGN KEY(meeting_id) REFERENCES meeting_t(id) INITIALLY DEFERRED; -CREATE INDEX idx_vote_t_meeting_id ON vote_t (meeting_id); - -- Create triggers generating partitioned sequences @@ -3861,12 +3924,44 @@ CREATE CONSTRAINT TRIGGER tr_ud_not_null_motion_block_list_of_speakers_id AFTER FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('motion_block', 'list_of_speakers_id', 'list_of_speakers', 'content_object_id_motion_block_id'); --- definition trigger not null for poll_candidate_list.option_id against option.content_object_id_poll_candidate_list_id -CREATE CONSTRAINT TRIGGER tr_i_not_null_poll_candidate_list_option_id AFTER INSERT ON poll_candidate_list_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_candidate_list', 'option_id'); +-- definition trigger not null for poll_config_approval.poll_id against poll.config_id_poll_config_approval_id +CREATE CONSTRAINT TRIGGER tr_i_not_null_poll_config_approval_poll_id AFTER INSERT ON poll_config_approval_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_approval', 'poll_id'); + +CREATE CONSTRAINT TRIGGER tr_ud_not_null_poll_config_approval_poll_id AFTER UPDATE OF config_id_poll_config_approval_id OR DELETE ON poll_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_approval', 'poll_id', 'poll', 'config_id_poll_config_approval_id'); + + +-- definition trigger not null for poll_config_rating_approval.poll_id against poll.config_id_poll_config_rating_approval_id +CREATE CONSTRAINT TRIGGER tr_i_not_null_poll_config_rating_approval_poll_id AFTER INSERT ON poll_config_rating_approval_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_rating_approval', 'poll_id'); + +CREATE CONSTRAINT TRIGGER tr_ud_not_null_poll_config_rating_approval_poll_id AFTER UPDATE OF config_id_poll_config_rating_approval_id OR DELETE ON poll_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_rating_approval', 'poll_id', 'poll', 'config_id_poll_config_rating_approval_id'); + + +-- definition trigger not null for poll_config_rating_score.poll_id against poll.config_id_poll_config_rating_score_id +CREATE CONSTRAINT TRIGGER tr_i_not_null_poll_config_rating_score_poll_id AFTER INSERT ON poll_config_rating_score_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_rating_score', 'poll_id'); + +CREATE CONSTRAINT TRIGGER tr_ud_not_null_poll_config_rating_score_poll_id AFTER UPDATE OF config_id_poll_config_rating_score_id OR DELETE ON poll_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_rating_score', 'poll_id', 'poll', 'config_id_poll_config_rating_score_id'); + -CREATE CONSTRAINT TRIGGER tr_ud_not_null_poll_candidate_list_option_id AFTER UPDATE OF content_object_id_poll_candidate_list_id OR DELETE ON option_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_candidate_list', 'option_id', 'option', 'content_object_id_poll_candidate_list_id'); +-- definition trigger not null for poll_config_selection.poll_id against poll.config_id_poll_config_selection_id +CREATE CONSTRAINT TRIGGER tr_i_not_null_poll_config_selection_poll_id AFTER INSERT ON poll_config_selection_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_selection', 'poll_id'); + +CREATE CONSTRAINT TRIGGER tr_ud_not_null_poll_config_selection_poll_id AFTER UPDATE OF config_id_poll_config_selection_id OR DELETE ON poll_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_selection', 'poll_id', 'poll', 'config_id_poll_config_selection_id'); + + +-- definition trigger not null for poll_config_stv_scottish.poll_id against poll.config_id_poll_config_stv_scottish_id +CREATE CONSTRAINT TRIGGER tr_i_not_null_poll_config_stv_scottish_poll_id AFTER INSERT ON poll_config_stv_scottish_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_stv_scottish', 'poll_id'); + +CREATE CONSTRAINT TRIGGER tr_ud_not_null_poll_config_stv_scottish_poll_id AFTER UPDATE OF config_id_poll_config_stv_scottish_id OR DELETE ON poll_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_1('poll_config_stv_scottish', 'poll_id', 'poll', 'config_id_poll_config_stv_scottish_id'); -- definition trigger not null for topic.agenda_item_id against agenda_item.content_object_id_topic_id @@ -3991,12 +4086,12 @@ CREATE CONSTRAINT TRIGGER tr_ud_not_null_meeting_default_projector_motion_poll_i FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_n('meeting_t', 'default_projector_motion_poll_ids', 'projector_t', 'used_as_default_projector_for_motion_poll_in_meeting_id'); --- definition trigger not null for meeting.default_projector_poll_ids against projector.used_as_default_projector_for_poll_in_meeting_id -CREATE CONSTRAINT TRIGGER tr_i_not_null_meeting_default_projector_poll_ids AFTER INSERT ON meeting_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_n('meeting_t', 'default_projector_poll_ids', 'projector_t', 'used_as_default_projector_for_poll_in_meeting_id'); +-- definition trigger not null for meeting.default_projector_topic_poll_ids against projector.used_as_default_projector_for_topic_poll_in_meeting_id +CREATE CONSTRAINT TRIGGER tr_i_not_null_meeting_default_projector_topic_poll_ids AFTER INSERT ON meeting_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_n('meeting_t', 'default_projector_topic_poll_ids', 'projector_t', 'used_as_default_projector_for_topic_poll_in_meeting_id'); -CREATE CONSTRAINT TRIGGER tr_ud_not_null_meeting_default_projector_poll_ids AFTER UPDATE OF used_as_default_projector_for_poll_in_meeting_id OR DELETE ON projector_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_n('meeting_t', 'default_projector_poll_ids', 'projector_t', 'used_as_default_projector_for_poll_in_meeting_id'); +CREATE CONSTRAINT TRIGGER tr_ud_not_null_meeting_default_projector_topic_poll_ids AFTER UPDATE OF used_as_default_projector_for_topic_poll_in_meeting_id OR DELETE ON projector_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_not_null_for_1_n('meeting_t', 'default_projector_topic_poll_ids', 'projector_t', 'used_as_default_projector_for_topic_poll_in_meeting_id'); @@ -4122,6 +4217,11 @@ CREATE TRIGGER tr_constant_meeting_mediafile_meeting_id BEFORE UPDATE OF meeting FOR EACH ROW EXECUTE FUNCTION prevent_updates('meeting_mediafile', 'meeting_id'); +-- definition trigger prevent_updates for meeting_poll_default.meeting_id +CREATE TRIGGER tr_constant_meeting_poll_default_meeting_id BEFORE UPDATE OF meeting_id ON meeting_poll_default_t +FOR EACH ROW EXECUTE FUNCTION prevent_updates('meeting_poll_default', 'meeting_id'); + + -- definition trigger prevent_updates for meeting_user.user_id CREATE TRIGGER tr_constant_meeting_user_user_id BEFORE UPDATE OF user_id ON meeting_user_t FOR EACH ROW EXECUTE FUNCTION prevent_updates('meeting_user', 'user_id'); @@ -4239,15 +4339,6 @@ CREATE TRIGGER tr_constant_motion_working_group_speaker_meeting_id BEFORE UPDATE FOR EACH ROW EXECUTE FUNCTION prevent_updates('motion_working_group_speaker', 'meeting_id'); --- definition trigger prevent_updates for option.poll_id -CREATE TRIGGER tr_constant_option_poll_id BEFORE UPDATE OF poll_id ON option_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('option', 'poll_id'); - --- definition trigger prevent_updates for option.meeting_id -CREATE TRIGGER tr_constant_option_meeting_id BEFORE UPDATE OF meeting_id ON option_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('option', 'meeting_id'); - - -- definition trigger prevent_updates for organization_tag.organization_id CREATE TRIGGER tr_constant_organization_tag_organization_id BEFORE UPDATE OF organization_id ON organization_tag_t FOR EACH ROW EXECUTE FUNCTION prevent_updates('organization_tag', 'organization_id'); @@ -4284,18 +4375,22 @@ CREATE TRIGGER tr_constant_poll_meeting_id BEFORE UPDATE OF meeting_id ON poll_t FOR EACH ROW EXECUTE FUNCTION prevent_updates('poll', 'meeting_id'); --- definition trigger prevent_updates for poll_candidate.poll_candidate_list_id -CREATE TRIGGER tr_constant_poll_candidate_poll_candidate_list_id BEFORE UPDATE OF poll_candidate_list_id ON poll_candidate_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('poll_candidate', 'poll_candidate_list_id'); +-- definition trigger prevent_updates for poll_ballot.weight +CREATE TRIGGER tr_constant_poll_ballot_weight BEFORE UPDATE OF weight ON poll_ballot_t +FOR EACH ROW EXECUTE FUNCTION prevent_updates('poll_ballot', 'weight'); + +-- definition trigger prevent_updates for poll_ballot.value +CREATE TRIGGER tr_constant_poll_ballot_value BEFORE UPDATE OF value ON poll_ballot_t +FOR EACH ROW EXECUTE FUNCTION prevent_updates('poll_ballot', 'value'); --- definition trigger prevent_updates for poll_candidate.meeting_id -CREATE TRIGGER tr_constant_poll_candidate_meeting_id BEFORE UPDATE OF meeting_id ON poll_candidate_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('poll_candidate', 'meeting_id'); +-- definition trigger prevent_updates for poll_ballot.poll_id +CREATE TRIGGER tr_constant_poll_ballot_poll_id BEFORE UPDATE OF poll_id ON poll_ballot_t +FOR EACH ROW EXECUTE FUNCTION prevent_updates('poll_ballot', 'poll_id'); --- definition trigger prevent_updates for poll_candidate_list.meeting_id -CREATE TRIGGER tr_constant_poll_candidate_list_meeting_id BEFORE UPDATE OF meeting_id ON poll_candidate_list_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('poll_candidate_list', 'meeting_id'); +-- definition trigger prevent_updates for poll_ballot_user.poll_id +CREATE TRIGGER tr_constant_poll_ballot_user_poll_id BEFORE UPDATE OF poll_id ON poll_ballot_user_t +FOR EACH ROW EXECUTE FUNCTION prevent_updates('poll_ballot_user', 'poll_id'); -- definition trigger prevent_updates for projection.content_object_id @@ -4369,23 +4464,6 @@ CREATE TRIGGER tr_constant_user_organization_id BEFORE UPDATE OF organization_id FOR EACH ROW EXECUTE FUNCTION prevent_updates('user', 'organization_id'); --- definition trigger prevent_updates for vote.value -CREATE TRIGGER tr_constant_vote_value BEFORE UPDATE OF value ON vote_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('vote', 'value'); - --- definition trigger prevent_updates for vote.user_token -CREATE TRIGGER tr_constant_vote_user_token BEFORE UPDATE OF user_token ON vote_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('vote', 'user_token'); - --- definition trigger prevent_updates for vote.option_id -CREATE TRIGGER tr_constant_vote_option_id BEFORE UPDATE OF option_id ON vote_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('vote', 'option_id'); - --- definition trigger prevent_updates for vote.meeting_id -CREATE TRIGGER tr_constant_vote_meeting_id BEFORE UPDATE OF meeting_id ON vote_t -FOR EACH ROW EXECUTE FUNCTION prevent_updates('vote', 'meeting_id'); - - -- Create triggers preventing mirrored duplicates in fields referencing themselves @@ -4558,14 +4636,11 @@ CREATE TRIGGER tr_log_nm_group_poll_ids_poll_t AFTER INSERT OR UPDATE OR DELETE FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('group','group_id','poll_ids','poll','poll_id','entitled_group_ids'); CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON nm_group_poll_ids_poll_t DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); -CREATE TRIGGER tr_log_group_t_used_as_motion_poll_default_id AFTER INSERT OR UPDATE OF used_as_motion_poll_default_id OR DELETE ON group_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'used_as_motion_poll_default_id', 'motion_poll_default_group_ids'); -CREATE TRIGGER tr_log_group_t_used_as_assignment_poll_default_id AFTER INSERT OR UPDATE OF used_as_assignment_poll_default_id OR DELETE ON group_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'used_as_assignment_poll_default_id', 'assignment_poll_default_group_ids'); -CREATE TRIGGER tr_log_group_t_used_as_topic_poll_default_id AFTER INSERT OR UPDATE OF used_as_topic_poll_default_id OR DELETE ON group_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'used_as_topic_poll_default_id', 'topic_poll_default_group_ids'); -CREATE TRIGGER tr_log_group_t_used_as_poll_default_id AFTER INSERT OR UPDATE OF used_as_poll_default_id OR DELETE ON group_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'used_as_poll_default_id', 'poll_default_group_ids'); + +CREATE TRIGGER tr_log_nm_group_uimpdi_meeting_poll_default_t AFTER INSERT OR UPDATE OR DELETE ON nm_group_uimpdi_meeting_poll_default_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('group','group_id','used_in_meeting_poll_default_ids','meeting_poll_default','meeting_poll_default_id','group_ids'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON nm_group_uimpdi_meeting_poll_default_t +DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); CREATE TRIGGER tr_log_group_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON group_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'group_ids'); @@ -4575,14 +4650,20 @@ CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELET DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); -CREATE TRIGGER tr_log_user_model_id_user_id AFTER INSERT OR UPDATE OF model_id_user_id OR DELETE ON history_entry_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('user','model_id_user_id','history_entry_ids'); +CREATE TRIGGER tr_log_assignment_model_id_assignment_id AFTER INSERT OR UPDATE OF model_id_assignment_id OR DELETE ON history_entry_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('assignment','model_id_assignment_id','history_entry_ids'); + +CREATE TRIGGER tr_log_meeting_user_model_id_meeting_user_id AFTER INSERT OR UPDATE OF model_id_meeting_user_id OR DELETE ON history_entry_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_user','model_id_meeting_user_id','history_entry_ids'); CREATE TRIGGER tr_log_motion_model_id_motion_id AFTER INSERT OR UPDATE OF model_id_motion_id OR DELETE ON history_entry_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('motion','model_id_motion_id','history_entry_ids'); -CREATE TRIGGER tr_log_assignment_model_id_assignment_id AFTER INSERT OR UPDATE OF model_id_assignment_id OR DELETE ON history_entry_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('assignment','model_id_assignment_id','history_entry_ids'); +CREATE TRIGGER tr_log_poll_model_id_poll_id AFTER INSERT OR UPDATE OF model_id_poll_id OR DELETE ON history_entry_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll','model_id_poll_id','history_entry_ids'); + +CREATE TRIGGER tr_log_user_model_id_user_id AFTER INSERT OR UPDATE OF model_id_user_id OR DELETE ON history_entry_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('user','model_id_user_id','history_entry_ids'); CREATE TRIGGER tr_log_history_entry_t_position_id AFTER INSERT OR UPDATE OF position_id OR DELETE ON history_entry_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('history_position', 'position_id', 'entry_ids'); CREATE TRIGGER tr_log_history_entry_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON history_entry_t @@ -4655,6 +4736,12 @@ CREATE TRIGGER tr_log_meeting_t_motions_default_workflow_id AFTER INSERT OR UPDA FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('motion_workflow', 'motions_default_workflow_id', 'default_workflow_meeting_id'); CREATE TRIGGER tr_log_meeting_t_motions_default_amendment_workflow_id AFTER INSERT OR UPDATE OF motions_default_amendment_workflow_id OR DELETE ON meeting_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('motion_workflow', 'motions_default_amendment_workflow_id', 'default_amendment_workflow_meeting_id'); +CREATE TRIGGER tr_log_meeting_t_assignment_poll_config_id AFTER INSERT OR UPDATE OF assignment_poll_config_id OR DELETE ON meeting_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_poll_default', 'assignment_poll_config_id', 'used_as_assignment_poll_config_in_meeting_id'); +CREATE TRIGGER tr_log_meeting_t_motion_poll_config_id AFTER INSERT OR UPDATE OF motion_poll_config_id OR DELETE ON meeting_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_poll_default', 'motion_poll_config_id', 'used_as_motion_poll_config_in_meeting_id'); +CREATE TRIGGER tr_log_meeting_t_topic_poll_config_id AFTER INSERT OR UPDATE OF topic_poll_config_id OR DELETE ON meeting_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_poll_default', 'topic_poll_config_id', 'used_as_topic_poll_config_in_meeting_id'); CREATE TRIGGER tr_log_meeting_t_logo_projector_main_id AFTER INSERT OR UPDATE OF logo_projector_main_id OR DELETE ON meeting_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_mediafile', 'logo_projector_main_id', 'used_as_logo_projector_main_in_meeting_id'); CREATE TRIGGER tr_log_meeting_t_logo_projector_header_id AFTER INSERT OR UPDATE OF logo_projector_header_id OR DELETE ON meeting_t @@ -4734,6 +4821,14 @@ FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_mediafile','m CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON gm_meeting_mediafile_attachment_ids_t DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); +CREATE TRIGGER tr_log_meeting_poll_default AFTER INSERT OR UPDATE OR DELETE ON meeting_poll_default_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('meeting_poll_default'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON meeting_poll_default_t +DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); + +CREATE TRIGGER tr_log_meeting_poll_default_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON meeting_poll_default_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'poll_default_ids'); + CREATE TRIGGER tr_log_meeting_user AFTER INSERT OR UPDATE OR DELETE ON meeting_user_t FOR EACH ROW EXECUTE FUNCTION log_modified_models('meeting_user'); CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON meeting_user_t @@ -4918,25 +5013,6 @@ FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('motion', 'motion_id', CREATE TRIGGER tr_log_motion_working_group_speaker_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON motion_working_group_speaker_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'motion_working_group_speaker_ids'); -CREATE TRIGGER tr_log_option AFTER INSERT OR UPDATE OR DELETE ON option_t -FOR EACH ROW EXECUTE FUNCTION log_modified_models('option'); -CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON option_t -DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); - -CREATE TRIGGER tr_log_option_t_poll_id AFTER INSERT OR UPDATE OF poll_id OR DELETE ON option_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll', 'poll_id', 'option_ids'); - -CREATE TRIGGER tr_log_motion_content_object_id_motion_id AFTER INSERT OR UPDATE OF content_object_id_motion_id OR DELETE ON option_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('motion','content_object_id_motion_id','option_ids'); - -CREATE TRIGGER tr_log_user_content_object_id_user_id AFTER INSERT OR UPDATE OF content_object_id_user_id OR DELETE ON option_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('user','content_object_id_user_id','option_ids'); - -CREATE TRIGGER tr_log_poll_candidate_list_content_object_id_poll_candidc235209 AFTER INSERT OR UPDATE OF content_object_id_poll_candidate_list_id OR DELETE ON option_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll_candidate_list','content_object_id_poll_candidate_list_id','option_id'); -CREATE TRIGGER tr_log_option_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON option_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'option_ids'); - CREATE TRIGGER tr_log_organization AFTER INSERT OR UPDATE OR DELETE ON organization_t FOR EACH ROW EXECUTE FUNCTION log_modified_models('organization'); CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON organization_t @@ -4988,6 +5064,21 @@ CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELET DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); +CREATE TRIGGER tr_log_poll_config_approval_config_id_poll_config_approval_id AFTER INSERT OR UPDATE OF config_id_poll_config_approval_id OR DELETE ON poll_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll_config_approval','config_id_poll_config_approval_id','poll_id'); + +CREATE TRIGGER tr_log_poll_config_selection_config_id_poll_config_selection_id AFTER INSERT OR UPDATE OF config_id_poll_config_selection_id OR DELETE ON poll_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll_config_selection','config_id_poll_config_selection_id','poll_id'); + +CREATE TRIGGER tr_log_poll_config_rating_score_config_id_poll_config_raf40fad3 AFTER INSERT OR UPDATE OF config_id_poll_config_rating_score_id OR DELETE ON poll_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll_config_rating_score','config_id_poll_config_rating_score_id','poll_id'); + +CREATE TRIGGER tr_log_poll_config_rating_approval_config_id_poll_config405bbee AFTER INSERT OR UPDATE OF config_id_poll_config_rating_approval_id OR DELETE ON poll_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll_config_rating_approval','config_id_poll_config_rating_approval_id','poll_id'); + +CREATE TRIGGER tr_log_poll_config_stv_scottish_config_id_poll_config_st0701463 AFTER INSERT OR UPDATE OF config_id_poll_config_stv_scottish_id OR DELETE ON poll_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll_config_stv_scottish','config_id_poll_config_stv_scottish_id','poll_id'); + CREATE TRIGGER tr_log_motion_content_object_id_motion_id AFTER INSERT OR UPDATE OF content_object_id_motion_id OR DELETE ON poll_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('motion','content_object_id_motion_id','poll_ids'); @@ -4996,35 +5087,65 @@ FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('assignment','content_ CREATE TRIGGER tr_log_topic_content_object_id_topic_id AFTER INSERT OR UPDATE OF content_object_id_topic_id OR DELETE ON poll_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('topic','content_object_id_topic_id','poll_ids'); -CREATE TRIGGER tr_log_poll_t_global_option_id AFTER INSERT OR UPDATE OF global_option_id OR DELETE ON poll_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('option', 'global_option_id', 'used_as_global_option_in_poll_id'); - -CREATE TRIGGER tr_log_nm_poll_voted_ids_user_t AFTER INSERT OR UPDATE OR DELETE ON nm_poll_voted_ids_user_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll','poll_id','voted_ids','user','user_id','poll_voted_ids'); -CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON nm_poll_voted_ids_user_t -DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); CREATE TRIGGER tr_log_poll_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON poll_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'poll_ids'); -CREATE TRIGGER tr_log_poll_candidate AFTER INSERT OR UPDATE OR DELETE ON poll_candidate_t -FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_candidate'); -CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_candidate_t +CREATE TRIGGER tr_log_poll_ballot AFTER INSERT OR UPDATE OR DELETE ON poll_ballot_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_ballot'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_ballot_t DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); -CREATE TRIGGER tr_log_poll_candidate_t_poll_candidate_list_id AFTER INSERT OR UPDATE OF poll_candidate_list_id OR DELETE ON poll_candidate_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll_candidate_list', 'poll_candidate_list_id', 'poll_candidate_ids'); -CREATE TRIGGER tr_log_poll_candidate_t_user_id AFTER INSERT OR UPDATE OF user_id OR DELETE ON poll_candidate_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('user', 'user_id', 'poll_candidate_ids'); -CREATE TRIGGER tr_log_poll_candidate_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON poll_candidate_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'poll_candidate_ids'); +CREATE TRIGGER tr_log_poll_ballot_t_poll_id AFTER INSERT OR UPDATE OF poll_id OR DELETE ON poll_ballot_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll', 'poll_id', 'ballot_ids'); +CREATE TRIGGER tr_log_poll_ballot_t_poll_ballot_user_id AFTER INSERT OR UPDATE OF poll_ballot_user_id OR DELETE ON poll_ballot_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll_ballot_user', 'poll_ballot_user_id', 'poll_ballot_id'); -CREATE TRIGGER tr_log_poll_candidate_list AFTER INSERT OR UPDATE OR DELETE ON poll_candidate_list_t -FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_candidate_list'); -CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_candidate_list_t +CREATE TRIGGER tr_log_poll_ballot_user AFTER INSERT OR UPDATE OR DELETE ON poll_ballot_user_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_ballot_user'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_ballot_user_t DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); -CREATE TRIGGER tr_log_poll_candidate_list_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON poll_candidate_list_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'poll_candidate_list_ids'); +CREATE TRIGGER tr_log_poll_ballot_user_t_poll_id AFTER INSERT OR UPDATE OF poll_id OR DELETE ON poll_ballot_user_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll', 'poll_id', 'ballot_user_ids'); +CREATE TRIGGER tr_log_poll_ballot_user_t_acting_meeting_user_id AFTER INSERT OR UPDATE OF acting_meeting_user_id OR DELETE ON poll_ballot_user_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_user', 'acting_meeting_user_id', 'acting_ballot_ids'); +CREATE TRIGGER tr_log_poll_ballot_user_t_represented_meeting_user_id AFTER INSERT OR UPDATE OF represented_meeting_user_id OR DELETE ON poll_ballot_user_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_user', 'represented_meeting_user_id', 'represented_ballot_ids'); + +CREATE TRIGGER tr_log_poll_config_approval AFTER INSERT OR UPDATE OR DELETE ON poll_config_approval_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_config_approval'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_config_approval_t +DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); + +CREATE TRIGGER tr_log_poll_config_rating_approval AFTER INSERT OR UPDATE OR DELETE ON poll_config_rating_approval_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_config_rating_approval'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_config_rating_approval_t +DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); + +CREATE TRIGGER tr_log_poll_config_rating_score AFTER INSERT OR UPDATE OR DELETE ON poll_config_rating_score_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_config_rating_score'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_config_rating_score_t +DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); + +CREATE TRIGGER tr_log_poll_config_selection AFTER INSERT OR UPDATE OR DELETE ON poll_config_selection_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_config_selection'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_config_selection_t +DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); + +CREATE TRIGGER tr_log_poll_config_stv_scottish AFTER INSERT OR UPDATE OR DELETE ON poll_config_stv_scottish_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_config_stv_scottish'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_config_stv_scottish_t +DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); + +CREATE TRIGGER tr_log_poll_option AFTER INSERT OR UPDATE OR DELETE ON poll_option_t +FOR EACH ROW EXECUTE FUNCTION log_modified_models('poll_option'); +CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON poll_option_t +DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); + +CREATE TRIGGER tr_log_poll_option_t_poll_id AFTER INSERT OR UPDATE OF poll_id OR DELETE ON poll_option_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('poll', 'poll_id', 'option_ids'); +CREATE TRIGGER tr_log_poll_option_t_meeting_user_id AFTER INSERT OR UPDATE OF meeting_user_id OR DELETE ON poll_option_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting_user', 'meeting_user_id', 'poll_option_ids'); CREATE TRIGGER tr_log_projection AFTER INSERT OR UPDATE OR DELETE ON projection_t FOR EACH ROW EXECUTE FUNCTION log_modified_models('projection'); @@ -5104,8 +5225,8 @@ CREATE TRIGGER tr_log_projector_t_used_as_default_projector_for_assignmf3a7b0f A FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'used_as_default_projector_for_assignment_poll_in_meeting_id', 'default_projector_assignment_poll_ids'); CREATE TRIGGER tr_log_projector_t_used_as_default_projector_for_motion_c48d3bb AFTER INSERT OR UPDATE OF used_as_default_projector_for_motion_poll_in_meeting_id OR DELETE ON projector_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'used_as_default_projector_for_motion_poll_in_meeting_id', 'default_projector_motion_poll_ids'); -CREATE TRIGGER tr_log_projector_t_used_as_default_projector_for_poll_inf6f7d63 AFTER INSERT OR UPDATE OF used_as_default_projector_for_poll_in_meeting_id OR DELETE ON projector_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'used_as_default_projector_for_poll_in_meeting_id', 'default_projector_poll_ids'); +CREATE TRIGGER tr_log_projector_t_used_as_default_projector_for_topic_p9aaf88b AFTER INSERT OR UPDATE OF used_as_default_projector_for_topic_poll_in_meeting_id OR DELETE ON projector_t +FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'used_as_default_projector_for_topic_poll_in_meeting_id', 'default_projector_topic_poll_ids'); CREATE TRIGGER tr_log_projector_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON projector_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'projector_ids'); @@ -5228,20 +5349,6 @@ FOR EACH ROW EXECUTE FUNCTION log_ud_modified_calculated_id_array_field('user', CREATE TRIGGER tr_log_user_t_organization_id AFTER INSERT OR UPDATE OF organization_id OR DELETE ON user_t FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('organization', 'organization_id', 'user_ids'); -CREATE TRIGGER tr_log_vote AFTER INSERT OR UPDATE OR DELETE ON vote_t -FOR EACH ROW EXECUTE FUNCTION log_modified_models('vote'); -CREATE CONSTRAINT TRIGGER notify_transaction_end AFTER INSERT OR UPDATE OR DELETE ON vote_t -DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION notify_transaction_end(); - -CREATE TRIGGER tr_log_vote_t_option_id AFTER INSERT OR UPDATE OF option_id OR DELETE ON vote_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('option', 'option_id', 'vote_ids'); -CREATE TRIGGER tr_log_vote_t_user_id AFTER INSERT OR UPDATE OF user_id OR DELETE ON vote_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('user', 'user_id', 'vote_ids'); -CREATE TRIGGER tr_log_vote_t_delegated_user_id AFTER INSERT OR UPDATE OF delegated_user_id OR DELETE ON vote_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('user', 'delegated_user_id', 'delegated_vote_ids'); -CREATE TRIGGER tr_log_vote_t_meeting_id AFTER INSERT OR UPDATE OF meeting_id OR DELETE ON vote_t -FOR EACH ROW EXECUTE FUNCTION log_modified_related_models('meeting', 'meeting_id', 'vote_ids'); - -- Create triggers checking equal_fields settings in relations @@ -5360,6 +5467,14 @@ CREATE CONSTRAINT TRIGGER equal_meeting_id_on_group_t_poll_ids_intermediate AFTE FOR EACH ROW EXECUTE FUNCTION check_equals_intermediate('group_id', 'group', 'poll_id', 'poll', 'meeting_id', 'poll_ids'); +CREATE CONSTRAINT TRIGGER equal_meeting_id_on_group_t_used_in_meeting_poll_default_ids AFTER INSERT ON group_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_equals_multi('nm_group_uimpdi_meeting_poll_default_t', 'group_id', 'group', 'meeting_poll_default_id', 'meeting_poll_default', 'meeting_id', 'used_in_meeting_poll_default_ids'); +CREATE CONSTRAINT TRIGGER equal_meeting_id_on_meeting_poll_default_t_group_ids AFTER INSERT ON meeting_poll_default_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_equals_multi('nm_group_uimpdi_meeting_poll_default_t', 'meeting_poll_default_id', 'meeting_poll_default', 'group_id', 'group', 'meeting_id', 'group_ids'); +CREATE CONSTRAINT TRIGGER equal_meeting_id_on_group_t_used_in_meeting_poll_defaultc54c442 AFTER INSERT ON nm_group_uimpdi_meeting_poll_default_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_equals_intermediate('group_id', 'group', 'meeting_poll_default_id', 'meeting_poll_default', 'meeting_id', 'used_in_meeting_poll_default_ids'); + + CREATE CONSTRAINT TRIGGER equal_meeting_id_on_list_of_speakers_t_content_object_id15e708c AFTER INSERT ON list_of_speakers_t INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION check_equals('list_of_speakers', 'motion', 'content_object_id_motion_id', 'meeting_id', FALSE); @@ -5613,25 +5728,6 @@ FOR EACH ROW EXECUTE FUNCTION check_equals('motion_working_group_speaker', 'moti -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_option_t_poll_id AFTER INSERT ON option_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('option', 'poll', 'poll_id', 'meeting_id', FALSE); -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_poll_t_option_ids AFTER INSERT ON poll_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('option', 'poll', 'poll_id', 'meeting_id', TRUE); - - -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_option_t_content_object_id_motion_id AFTER INSERT OR UPDATE OF content_object_id ON option_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('option', 'motion', 'content_object_id_motion_id', 'meeting_id', FALSE); -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_motion_t_option_ids AFTER INSERT ON motion_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('option', 'motion', 'content_object_id_motion_id', 'meeting_id', TRUE); - - -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_option_t_content_object_id_poll_cand57125c5 AFTER INSERT OR UPDATE OF content_object_id ON option_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('option', 'poll_candidate_list', 'content_object_id_poll_candidate_list_id', 'meeting_id', FALSE); -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_poll_candidate_list_t_option_id AFTER INSERT ON poll_candidate_list_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('option', 'poll_candidate_list', 'content_object_id_poll_candidate_list_id', 'meeting_id', TRUE); - - - CREATE CONSTRAINT TRIGGER equal_meeting_id_on_personal_note_t_meeting_user_id AFTER INSERT ON personal_note_t INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION check_equals('personal_note', 'meeting_user', 'meeting_user_id', 'meeting_id', FALSE); CREATE CONSTRAINT TRIGGER equal_meeting_id_on_meeting_user_t_personal_note_ids AFTER INSERT ON meeting_user_t INITIALLY DEFERRED @@ -5663,17 +5759,11 @@ CREATE CONSTRAINT TRIGGER equal_meeting_id_on_topic_t_poll_ids AFTER INSERT ON t FOR EACH ROW EXECUTE FUNCTION check_equals('poll', 'topic', 'content_object_id_topic_id', 'meeting_id', TRUE); -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_poll_t_global_option_id AFTER INSERT OR UPDATE OF global_option_id ON poll_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('poll', 'option', 'global_option_id', 'meeting_id', FALSE); -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_option_t_used_as_global_option_in_poll_id AFTER INSERT ON option_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('poll', 'option', 'global_option_id', 'meeting_id', TRUE); - - -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_poll_candidate_t_poll_candidate_list_id AFTER INSERT ON poll_candidate_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('poll_candidate', 'poll_candidate_list', 'poll_candidate_list_id', 'meeting_id', FALSE); -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_poll_candidate_list_t_poll_candidate_ids AFTER INSERT ON poll_candidate_list_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('poll_candidate', 'poll_candidate_list', 'poll_candidate_list_id', 'meeting_id', TRUE); +CREATE CONSTRAINT TRIGGER equal_poll_id_on_poll_ballot_t_poll_ballot_user_id AFTER INSERT OR UPDATE OF poll_ballot_user_id ON poll_ballot_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_equals('poll_ballot', 'poll_ballot_user', 'poll_ballot_user_id', 'poll_id', FALSE); +CREATE CONSTRAINT TRIGGER equal_poll_id_on_poll_ballot_user_t_poll_ballot_id AFTER INSERT ON poll_ballot_user_t INITIALLY DEFERRED +FOR EACH ROW EXECUTE FUNCTION check_equals('poll_ballot', 'poll_ballot_user', 'poll_ballot_user_id', 'poll_id', TRUE); @@ -5823,13 +5913,6 @@ FOR EACH ROW EXECUTE FUNCTION check_equals_intermediate('tag_id', 'tag', 'tagged -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_vote_t_option_id AFTER INSERT ON vote_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('vote', 'option', 'option_id', 'meeting_id', FALSE); -CREATE CONSTRAINT TRIGGER equal_meeting_id_on_option_t_vote_ids AFTER INSERT ON option_t INITIALLY DEFERRED -FOR EACH ROW EXECUTE FUNCTION check_equals('vote', 'option', 'option_id', 'meeting_id', TRUE); - - - /* Relation-list infos Generated: What will be generated for left field FIELD: a usual Database field @@ -5907,13 +5990,10 @@ SQL nt:nt => group/write_comment_section_ids:-> motion_comment_section/write_gro SQL nt:nt => group/read_chat_group_ids:-> chat_group/read_group_ids SQL nt:nt => group/write_chat_group_ids:-> chat_group/write_group_ids SQL nt:nt => group/poll_ids:-> poll/entitled_group_ids -FIELD 1r:nt => group/used_as_motion_poll_default_id:-> meeting/motion_poll_default_group_ids -FIELD 1r:nt => group/used_as_assignment_poll_default_id:-> meeting/assignment_poll_default_group_ids -FIELD 1r:nt => group/used_as_topic_poll_default_id:-> meeting/topic_poll_default_group_ids -FIELD 1r:nt => group/used_as_poll_default_id:-> meeting/poll_default_group_ids +SQL nt:nt => group/used_in_meeting_poll_default_ids:-> meeting_poll_default/group_ids FIELD 1rR:nt => group/meeting_id:-> meeting/group_ids -FIELD 1Gr:nt,nt,nt => history_entry/model_id:-> user/history_entry_ids,motion/history_entry_ids,assignment/history_entry_ids +FIELD 1Gr:nt,nt,nt,nt,nt => history_entry/model_id:-> assignment/history_entry_ids,meeting_user/history_entry_ids,motion/history_entry_ids,poll/history_entry_ids,user/history_entry_ids FIELD 1rR:nt => history_entry/position_id:-> history_position/entry_ids FIELD 1r:nt => history_entry/meeting_id:-> meeting/relevant_history_entry_ids @@ -5937,13 +6017,10 @@ FIELD 1r:nt => meeting/is_archived_in_organization_id:-> organization/archived_m FIELD 1r:nt => meeting/template_for_organization_id:-> organization/template_meeting_ids FIELD 1rR:1t => meeting/motions_default_workflow_id:-> motion_workflow/default_workflow_meeting_id FIELD 1rR:1t => meeting/motions_default_amendment_workflow_id:-> motion_workflow/default_amendment_workflow_meeting_id -SQL nt:1r => meeting/motion_poll_default_group_ids:-> group/used_as_motion_poll_default_id -SQL nr:1rR => meeting/poll_candidate_list_ids:-> poll_candidate_list/meeting_id -SQL nr:1rR => meeting/poll_candidate_ids:-> poll_candidate/meeting_id SQL nt:1rR => meeting/meeting_user_ids:-> meeting_user/meeting_id -SQL nt:1r => meeting/assignment_poll_default_group_ids:-> group/used_as_assignment_poll_default_id -SQL nt:1r => meeting/poll_default_group_ids:-> group/used_as_poll_default_id -SQL nt:1r => meeting/topic_poll_default_group_ids:-> group/used_as_topic_poll_default_id +FIELD 1r:1t => meeting/assignment_poll_config_id:-> meeting_poll_default/used_as_assignment_poll_config_in_meeting_id +FIELD 1r:1t => meeting/motion_poll_config_id:-> meeting_poll_default/used_as_motion_poll_config_in_meeting_id +FIELD 1r:1t => meeting/topic_poll_config_id:-> meeting_poll_default/used_as_topic_poll_config_in_meeting_id SQL nt:1rR => meeting/projector_ids:-> projector/meeting_id SQL nt:1rR => meeting/all_projection_ids:-> projection/meeting_id SQL nt:1rR => meeting/projector_message_ids:-> projector_message/meeting_id @@ -5972,8 +6049,7 @@ SQL nt:1rR => meeting/motion_working_group_speaker_ids:-> motion_working_group_s SQL nt:1rR => meeting/motion_change_recommendation_ids:-> motion_change_recommendation/meeting_id SQL nt:1rR => meeting/motion_state_ids:-> motion_state/meeting_id SQL nr:1rR => meeting/poll_ids:-> poll/meeting_id -SQL nr:1rR => meeting/option_ids:-> option/meeting_id -SQL nr:1rR => meeting/vote_ids:-> vote/meeting_id +SQL nt:1rR => meeting/poll_default_ids:-> meeting_poll_default/meeting_id SQL nt:1rR => meeting/assignment_ids:-> assignment/meeting_id SQL nt:1rR => meeting/assignment_candidate_ids:-> assignment_candidate/meeting_id SQL nt:1rR => meeting/personal_note_ids:-> personal_note/meeting_id @@ -6018,7 +6094,7 @@ SQL ntR:1r => meeting/default_projector_message_ids:-> projector/used_as_default SQL ntR:1r => meeting/default_projector_countdown_ids:-> projector/used_as_default_projector_for_countdown_in_meeting_id SQL ntR:1r => meeting/default_projector_assignment_poll_ids:-> projector/used_as_default_projector_for_assignment_poll_in_meeting_id SQL ntR:1r => meeting/default_projector_motion_poll_ids:-> projector/used_as_default_projector_for_motion_poll_in_meeting_id -SQL ntR:1r => meeting/default_projector_poll_ids:-> projector/used_as_default_projector_for_poll_in_meeting_id +SQL ntR:1r => meeting/default_projector_topic_poll_ids:-> projector/used_as_default_projector_for_topic_poll_in_meeting_id FIELD 1rR:1t => meeting/default_group_id:-> group/default_group_for_meeting_id FIELD 1r:1t => meeting/admin_group_id:-> group/admin_group_for_meeting_id FIELD 1r:1t => meeting/anonymous_group_id:-> group/anonymous_group_for_meeting_id @@ -6048,6 +6124,12 @@ SQL 1t:1r => meeting_mediafile/used_as_font_chyron_speaker_name_in_meeting_id:-> SQL 1t:1r => meeting_mediafile/used_as_font_projector_h1_in_meeting_id:-> meeting/font_projector_h1_id SQL 1t:1r => meeting_mediafile/used_as_font_projector_h2_in_meeting_id:-> meeting/font_projector_h2_id +SQL nt:nt => meeting_poll_default/group_ids:-> group/used_in_meeting_poll_default_ids +SQL 1t:1r => meeting_poll_default/used_as_assignment_poll_config_in_meeting_id:-> meeting/assignment_poll_config_id +SQL 1t:1r => meeting_poll_default/used_as_motion_poll_config_in_meeting_id:-> meeting/motion_poll_config_id +SQL 1t:1r => meeting_poll_default/used_as_topic_poll_config_in_meeting_id:-> meeting/topic_poll_config_id +FIELD 1rR:nt => meeting_poll_default/meeting_id:-> meeting/poll_default_ids + FIELD 1rR:nt => meeting_user/user_id:-> user/meeting_user_ids FIELD 1rR:nt => meeting_user/meeting_id:-> meeting/meeting_user_ids SQL nt:1rR => meeting_user/personal_note_ids:-> personal_note/meeting_user_id @@ -6059,9 +6141,13 @@ SQL nt:1r => meeting_user/motion_submitter_ids:-> motion_submitter/meeting_user_ SQL nt:1r => meeting_user/assignment_candidate_ids:-> assignment_candidate/meeting_user_id FIELD 1r:nt => meeting_user/vote_delegated_to_id:-> meeting_user/vote_delegations_from_ids SQL nt:1r => meeting_user/vote_delegations_from_ids:-> meeting_user/vote_delegated_to_id +SQL nr:1r => meeting_user/poll_option_ids:-> poll_option/meeting_user_id +SQL nt:1rR => meeting_user/acting_ballot_ids:-> poll_ballot_user/acting_meeting_user_id +SQL nt:1rR => meeting_user/represented_ballot_ids:-> poll_ballot_user/represented_meeting_user_id SQL nt:1r => meeting_user/chat_message_ids:-> chat_message/meeting_user_id SQL ntR:nt => meeting_user/group_ids:-> group/meeting_user_ids SQL nt:nt => meeting_user/structure_level_ids:-> structure_level/meeting_user_ids +SQL nt:1Gr => meeting_user/history_entry_ids:-> history_entry/model_id FIELD 1r:nt => motion/lead_motion_id:-> motion/amendment_ids SQL nt:1r => motion/amendment_ids:-> motion/lead_motion_id @@ -6086,7 +6172,6 @@ SQL nt:1rR => motion/supporter_ids:-> motion_supporter/motion_id SQL nt:1rR => motion/editor_ids:-> motion_editor/motion_id SQL nt:1rR => motion/working_group_speaker_ids:-> motion_working_group_speaker/motion_id SQL nt:1GrR => motion/poll_ids:-> poll/content_object_id -SQL nr:1Gr => motion/option_ids:-> option/content_object_id SQL nt:1rR => motion/change_recommendation_ids:-> motion_change_recommendation/motion_id SQL nt:1rR => motion/comment_ids:-> motion_comment/motion_id SQL 1t:1GrR => motion/agenda_item_id:-> agenda_item/content_object_id @@ -6153,12 +6238,6 @@ FIELD 1r:nt => motion_working_group_speaker/meeting_user_id:-> meeting_user/moti FIELD 1rR:nt => motion_working_group_speaker/motion_id:-> motion/working_group_speaker_ids FIELD 1rR:nt => motion_working_group_speaker/meeting_id:-> meeting/motion_working_group_speaker_ids -FIELD 1r:nr => option/poll_id:-> poll/option_ids -SQL 1t:1r => option/used_as_global_option_in_poll_id:-> poll/global_option_id -SQL nr:1rR => option/vote_ids:-> vote/option_id -FIELD 1Gr:nr,nr,1tR => option/content_object_id:-> motion/option_ids,user/option_ids,poll_candidate_list/option_id -FIELD 1rR:nr => option/meeting_id:-> meeting/option_ids - SQL nr:1rR => organization/gender_ids:-> gender/organization_id SQL nr:1rR => organization/committee_ids:-> committee/organization_id SQL nt:1r => organization/active_meeting_ids:-> meeting/is_active_in_organization_id @@ -6181,21 +6260,36 @@ FIELD 1rR:nt => personal_note/meeting_id:-> meeting/personal_note_ids FIELD 1rR:nt => point_of_order_category/meeting_id:-> meeting/point_of_order_category_ids SQL nt:1r => point_of_order_category/speaker_ids:-> speaker/point_of_order_category_id +FIELD 1GrR:1tR,1tR,1tR,1tR,1tR => poll/config_id:-> poll_config_approval/poll_id,poll_config_selection/poll_id,poll_config_rating_score/poll_id,poll_config_rating_approval/poll_id,poll_config_stv_scottish/poll_id +SQL nt:1rR => poll/option_ids:-> poll_option/poll_id FIELD 1GrR:nt,nt,nt => poll/content_object_id:-> motion/poll_ids,assignment/poll_ids,topic/poll_ids -SQL nr:1r => poll/option_ids:-> option/poll_id -FIELD 1r:1t => poll/global_option_id:-> option/used_as_global_option_in_poll_id -SQL nt:nt => poll/voted_ids:-> user/poll_voted_ids +SQL nr:1rR => poll/ballot_ids:-> poll_ballot/poll_id +SQL nr:1rR => poll/ballot_user_ids:-> poll_ballot_user/poll_id SQL nt:nt => poll/entitled_group_ids:-> group/poll_ids SQL nt:1GrR => poll/projection_ids:-> projection/content_object_id FIELD 1rR:nr => poll/meeting_id:-> meeting/poll_ids +SQL nt:1Gr => poll/history_entry_ids:-> history_entry/model_id + +FIELD 1rR:nr => poll_ballot/poll_id:-> poll/ballot_ids +FIELD 1r:1t => poll_ballot/poll_ballot_user_id:-> poll_ballot_user/poll_ballot_id + +FIELD 1rR:nr => poll_ballot_user/poll_id:-> poll/ballot_user_ids +SQL 1t:1r => poll_ballot_user/poll_ballot_id:-> poll_ballot/poll_ballot_user_id +FIELD 1rR:nt => poll_ballot_user/acting_meeting_user_id:-> meeting_user/acting_ballot_ids +FIELD 1rR:nt => poll_ballot_user/represented_meeting_user_id:-> meeting_user/represented_ballot_ids -FIELD 1rR:nr => poll_candidate/poll_candidate_list_id:-> poll_candidate_list/poll_candidate_ids -FIELD 1r:nr => poll_candidate/user_id:-> user/poll_candidate_ids -FIELD 1rR:nr => poll_candidate/meeting_id:-> meeting/poll_candidate_ids +SQL 1tR:1GrR => poll_config_approval/poll_id:-> poll/config_id -SQL nr:1rR => poll_candidate_list/poll_candidate_ids:-> poll_candidate/poll_candidate_list_id -FIELD 1rR:nr => poll_candidate_list/meeting_id:-> meeting/poll_candidate_list_ids -SQL 1tR:1Gr => poll_candidate_list/option_id:-> option/content_object_id +SQL 1tR:1GrR => poll_config_rating_approval/poll_id:-> poll/config_id + +SQL 1tR:1GrR => poll_config_rating_score/poll_id:-> poll/config_id + +SQL 1tR:1GrR => poll_config_selection/poll_id:-> poll/config_id + +SQL 1tR:1GrR => poll_config_stv_scottish/poll_id:-> poll/config_id + +FIELD 1rR:nt => poll_option/poll_id:-> poll/option_ids +FIELD 1r:nr => poll_option/meeting_user_id:-> meeting_user/poll_option_ids FIELD 1r:nt => projection/current_projector_id:-> projector/current_projection_ids FIELD 1r:nt => projection/preview_projector_id:-> projector/preview_projection_ids @@ -6220,7 +6314,7 @@ FIELD 1r:ntR => projector/used_as_default_projector_for_message_in_meeting_id:-> FIELD 1r:ntR => projector/used_as_default_projector_for_countdown_in_meeting_id:-> meeting/default_projector_countdown_ids FIELD 1r:ntR => projector/used_as_default_projector_for_assignment_poll_in_meeting_id:-> meeting/default_projector_assignment_poll_ids FIELD 1r:ntR => projector/used_as_default_projector_for_motion_poll_in_meeting_id:-> meeting/default_projector_motion_poll_ids -FIELD 1r:ntR => projector/used_as_default_projector_for_poll_in_meeting_id:-> meeting/default_projector_poll_ids +FIELD 1r:ntR => projector/used_as_default_projector_for_topic_poll_in_meeting_id:-> meeting/default_projector_topic_poll_ids FIELD 1rR:nt => projector/meeting_id:-> meeting/projector_ids SQL nt:1GrR => projector_countdown/projection_ids:-> projection/content_object_id @@ -6264,27 +6358,12 @@ SQL nt:nt => user/is_present_in_meeting_ids:-> meeting/present_user_ids SQL nts:nts => user/committee_ids:-> committee/user_ids SQL nt:nt => user/committee_management_ids:-> committee/manager_ids SQL nt:1rR => user/meeting_user_ids:-> meeting_user/user_id -SQL nt:nt => user/poll_voted_ids:-> poll/voted_ids -SQL nr:1Gr => user/option_ids:-> option/content_object_id -SQL nr:1r => user/vote_ids:-> vote/user_id -SQL nr:1r => user/delegated_vote_ids:-> vote/delegated_user_id -SQL nr:1r => user/poll_candidate_ids:-> poll_candidate/user_id FIELD 1r:nt => user/home_committee_id:-> committee/native_user_ids SQL nt:1r => user/history_position_ids:-> history_position/user_id SQL nt:1Gr => user/history_entry_ids:-> history_entry/model_id SQL nts:nts => user/meeting_ids:-> meeting/user_ids FIELD 1rR:nr => user/organization_id:-> organization/user_ids -FIELD 1rR:nr => vote/option_id:-> option/vote_ids -FIELD 1r:nr => vote/user_id:-> user/vote_ids -FIELD 1r:nr => vote/delegated_user_id:-> user/delegated_vote_ids -FIELD 1rR:nr => vote/meeting_id:-> meeting/vote_ids - -*/ -/* -There are 2 errors/warnings - poll/live_votes: type:JSON is marked as a calculated field and not generated in schema - projection/content: type:JSON is marked as a calculated field and not generated in schema */ /* Missing attribute handling for on_delete, constant_legacy, deferred */ \ No newline at end of file diff --git a/go.mod b/go.mod index 6a05697b7..0710c86a8 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,6 @@ require ( github.com/ostcar/topic v0.7.0 github.com/rs/zerolog v1.35.1 github.com/shopspring/decimal v1.4.0 - golang.org/x/sync v0.20.0 golang.org/x/sys v0.45.0 ) @@ -22,7 +21,7 @@ require ( github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/go-connections v0.7.0 // indirect + github.com/docker/go-connections v0.6.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.3 // indirect @@ -31,16 +30,17 @@ require ( github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.22 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/moby/api v1.54.2 // indirect - github.com/moby/moby/client v0.4.1 // indirect + github.com/moby/moby/api v1.54.1 // indirect + github.com/moby/moby/client v0.4.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect go.opentelemetry.io/otel v1.43.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/trace v1.43.0 // indirect - golang.org/x/text v0.37.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/text v0.35.0 // indirect ) diff --git a/go.sum b/go.sum index a3c5dfbd6..e413a9062 100644 --- a/go.sum +++ b/go.sum @@ -13,8 +13,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/go-connections v0.7.0 h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf0mN39c= -github.com/docker/go-connections v0.7.0/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= +github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= +github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -44,14 +44,14 @@ github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= -github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/moby/api v1.54.2 h1:wiat9QAhnDQjA7wk1kh/TqHz2I1uUA7M7t9SAl/JNXg= -github.com/moby/moby/api v1.54.2/go.mod h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs= -github.com/moby/moby/client v0.4.1 h1:DMQgisVoMkmMs7fp3ROSdiBnoAu8+vo3GggFl06M/wY= -github.com/moby/moby/client v0.4.1/go.mod h1:z52C9O2POPOsnxZAy//WtKcQ32P+jT/NGeXu/7nfjGQ= +github.com/moby/moby/api v1.54.1 h1:TqVzuJkOLsgLDDwNLmYqACUuTehOHRGKiPhvH8V3Nn4= +github.com/moby/moby/api v1.54.1/go.mod h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs= +github.com/moby/moby/client v0.4.0 h1:S+2XegzHQrrvTCvF6s5HFzcrywWQmuVnhOXe2kiWjIw= +github.com/moby/moby/client v0.4.0/go.mod h1:QWPbvWchQbxBNdaLSpoKpCdf5E+WxFAgNHogCWDoa7g= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= @@ -73,24 +73,25 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= +go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= +go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= +go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= +golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/history/history.go b/history/history.go new file mode 100644 index 000000000..4888e699c --- /dev/null +++ b/history/history.go @@ -0,0 +1,59 @@ +package history + +import ( + "context" + "fmt" + + "github.com/jackc/pgx/v5" +) + +// OneEntry is a helper that creates a new history position with one entry. +// +// Use NewPosition to create a position with more then one entry. +func OneEntry(ctx context.Context, tx pgx.Tx, userID int, modelID string, meetingID int, entryList ...string) error { + pos, err := NewPosition(ctx, tx, userID) + if err != nil { + return fmt.Errorf("creating new position: %w", err) + } + + if err := pos.NewEntry(ctx, modelID, meetingID, entryList...); err != nil { + return fmt.Errorf("write entry: %w", err) + } + + return nil +} + +// Position represents a position in the history for reading. +type Position struct { + ID int + tx pgx.Tx +} + +// NewPosition creates a new position in the history. +func NewPosition(ctx context.Context, tx pgx.Tx, userID int) (Position, error) { + sql := `INSERT INTO history_position_t (timestamp, original_user_id, user_id) + VALUES (NOW(), $1, $1) + RETURNING id` + + pos := Position{ + tx: tx, + } + if err := tx.QueryRow(ctx, sql, userID).Scan(&pos.ID); err != nil { + return Position{}, fmt.Errorf("insert new position: %w", err) + } + + return pos, nil +} + +// NewEntry adds a new entry to the history at this position. +func (p *Position) NewEntry(ctx context.Context, modelID string, meetingID int, entryList ...string) error { + sql := `INSERT INTO history_entry_t (entries, original_model_id, model_id, position_id, meeting_id) + VALUES ($1, $2, $2, $3, $4)` + + _, err := p.tx.Exec(ctx, sql, entryList, modelID, p.ID, meetingID) + if err != nil { + return fmt.Errorf("insert new entry: %w", err) + } + + return nil +} diff --git a/meta b/meta index d3b883cb2..6d54f6540 160000 --- a/meta +++ b/meta @@ -1 +1 @@ -Subproject commit d3b883cb2777153dc9a99fc325d62b777be0f220 +Subproject commit 6d54f6540a661842e1af030ca0199aa6c0b4adad diff --git a/metagen/field_def.go b/metagen/field_def.go index de146c293..f29fab45a 100644 --- a/metagen/field_def.go +++ b/metagen/field_def.go @@ -24,10 +24,6 @@ var RelationFields = map[string]string{ "group/anonymous_group_for_meeting_id": "meeting/anonymous_group_id", "group/default_group_for_meeting_id": "meeting/default_group_id", "group/meeting_id": "meeting/group_ids", - "group/used_as_assignment_poll_default_id": "meeting/assignment_poll_default_group_ids", - "group/used_as_motion_poll_default_id": "meeting/motion_poll_default_group_ids", - "group/used_as_poll_default_id": "meeting/poll_default_group_ids", - "group/used_as_topic_poll_default_id": "meeting/topic_poll_default_group_ids", "history_entry/meeting_id": "meeting/relevant_history_entry_ids", "history_entry/position_id": "history_position/entry_ids", "history_position/user_id": "user/history_position_ids", @@ -36,6 +32,7 @@ var RelationFields = map[string]string{ "mediafile/published_to_meetings_in_organization_id": "organization/published_mediafile_ids", "meeting/admin_group_id": "group/admin_group_for_meeting_id", "meeting/anonymous_group_id": "group/anonymous_group_for_meeting_id", + "meeting/assignment_poll_config_id": "meeting_poll_default/used_as_assignment_poll_config_in_meeting_id", "meeting/committee_id": "committee/meeting_ids", "meeting/default_group_id": "group/default_group_for_meeting_id", "meeting/default_meeting_for_committee_id": "committee/default_meeting_id", @@ -58,11 +55,13 @@ var RelationFields = map[string]string{ "meeting/logo_projector_header_id": "meeting_mediafile/used_as_logo_projector_header_in_meeting_id", "meeting/logo_projector_main_id": "meeting_mediafile/used_as_logo_projector_main_in_meeting_id", "meeting/logo_web_header_id": "meeting_mediafile/used_as_logo_web_header_in_meeting_id", + "meeting/motion_poll_config_id": "meeting_poll_default/used_as_motion_poll_config_in_meeting_id", "meeting/motions_default_amendment_workflow_id": "motion_workflow/default_amendment_workflow_meeting_id", "meeting/motions_default_workflow_id": "motion_workflow/default_workflow_meeting_id", "meeting/poll_countdown_id": "projector_countdown/used_as_poll_countdown_meeting_id", "meeting/reference_projector_id": "projector/used_as_reference_projector_meeting_id", "meeting/template_for_organization_id": "organization/template_meeting_ids", + "meeting/topic_poll_config_id": "meeting_poll_default/used_as_topic_poll_config_in_meeting_id", "meeting_mediafile/list_of_speakers_id": "list_of_speakers/content_object_id", "meeting_mediafile/mediafile_id": "mediafile/meeting_mediafile_ids", "meeting_mediafile/meeting_id": "meeting/meeting_mediafile_ids", @@ -82,6 +81,10 @@ var RelationFields = map[string]string{ "meeting_mediafile/used_as_logo_projector_header_in_meeting_id": "meeting/logo_projector_header_id", "meeting_mediafile/used_as_logo_projector_main_in_meeting_id": "meeting/logo_projector_main_id", "meeting_mediafile/used_as_logo_web_header_in_meeting_id": "meeting/logo_web_header_id", + "meeting_poll_default/meeting_id": "meeting/poll_default_ids", + "meeting_poll_default/used_as_assignment_poll_config_in_meeting_id": "meeting/assignment_poll_config_id", + "meeting_poll_default/used_as_motion_poll_config_in_meeting_id": "meeting/motion_poll_config_id", + "meeting_poll_default/used_as_topic_poll_config_in_meeting_id": "meeting/topic_poll_config_id", "meeting_user/meeting_id": "meeting/meeting_user_ids", "meeting_user/user_id": "user/meeting_user_ids", "meeting_user/vote_delegated_to_id": "meeting_user/vote_delegations_from_ids", @@ -127,21 +130,25 @@ var RelationFields = map[string]string{ "motion_working_group_speaker/meeting_id": "meeting/motion_working_group_speaker_ids", "motion_working_group_speaker/meeting_user_id": "meeting_user/motion_working_group_speaker_ids", "motion_working_group_speaker/motion_id": "motion/working_group_speaker_ids", - "option/meeting_id": "meeting/option_ids", - "option/poll_id": "poll/option_ids", - "option/used_as_global_option_in_poll_id": "poll/global_option_id", "organization/theme_id": "theme/theme_for_organization_id", "organization_tag/organization_id": "organization/organization_tag_ids", "personal_note/meeting_id": "meeting/personal_note_ids", "personal_note/meeting_user_id": "meeting_user/personal_note_ids", "point_of_order_category/meeting_id": "meeting/point_of_order_category_ids", - "poll/global_option_id": "option/used_as_global_option_in_poll_id", "poll/meeting_id": "meeting/poll_ids", - "poll_candidate/meeting_id": "meeting/poll_candidate_ids", - "poll_candidate/poll_candidate_list_id": "poll_candidate_list/poll_candidate_ids", - "poll_candidate/user_id": "user/poll_candidate_ids", - "poll_candidate_list/meeting_id": "meeting/poll_candidate_list_ids", - "poll_candidate_list/option_id": "option/content_object_id", + "poll_ballot/poll_ballot_user_id": "poll_ballot_user/poll_ballot_id", + "poll_ballot/poll_id": "poll/ballot_ids", + "poll_ballot_user/acting_meeting_user_id": "meeting_user/acting_ballot_ids", + "poll_ballot_user/poll_ballot_id": "poll_ballot/poll_ballot_user_id", + "poll_ballot_user/poll_id": "poll/ballot_user_ids", + "poll_ballot_user/represented_meeting_user_id": "meeting_user/represented_ballot_ids", + "poll_config_approval/poll_id": "poll/config_id", + "poll_config_rating_approval/poll_id": "poll/config_id", + "poll_config_rating_score/poll_id": "poll/config_id", + "poll_config_selection/poll_id": "poll/config_id", + "poll_config_stv_scottish/poll_id": "poll/config_id", + "poll_option/meeting_user_id": "meeting_user/poll_option_ids", + "poll_option/poll_id": "poll/option_ids", "projection/current_projector_id": "projector/current_projection_ids", "projection/history_projector_id": "projector/history_projection_ids", "projection/meeting_id": "meeting/all_projection_ids", @@ -159,8 +166,8 @@ var RelationFields = map[string]string{ "projector/used_as_default_projector_for_motion_block_in_meeting_id": "meeting/default_projector_motion_block_ids", "projector/used_as_default_projector_for_motion_in_meeting_id": "meeting/default_projector_motion_ids", "projector/used_as_default_projector_for_motion_poll_in_meeting_id": "meeting/default_projector_motion_poll_ids", - "projector/used_as_default_projector_for_poll_in_meeting_id": "meeting/default_projector_poll_ids", "projector/used_as_default_projector_for_topic_in_meeting_id": "meeting/default_projector_topic_ids", + "projector/used_as_default_projector_for_topic_poll_in_meeting_id": "meeting/default_projector_topic_poll_ids", "projector/used_as_reference_projector_meeting_id": "meeting/reference_projector_id", "projector_countdown/meeting_id": "meeting/projector_countdown_ids", "projector_countdown/used_as_list_of_speakers_countdown_meeting_id": "meeting/list_of_speakers_countdown_id", @@ -184,10 +191,6 @@ var RelationFields = map[string]string{ "user/gender_id": "gender/user_ids", "user/home_committee_id": "committee/native_user_ids", "user/organization_id": "organization/user_ids", - "vote/delegated_user_id": "user/delegated_vote_ids", - "vote/meeting_id": "meeting/vote_ids", - "vote/option_id": "option/vote_ids", - "vote/user_id": "user/vote_ids", } // RelationListFields is a map from all relation list fields to the fields, @@ -222,6 +225,7 @@ var RelationListFields = map[string]string{ "group/poll_ids": "poll/entitled_group_ids", "group/read_chat_group_ids": "chat_group/read_group_ids", "group/read_comment_section_ids": "motion_comment_section/read_group_ids", + "group/used_in_meeting_poll_default_ids": "meeting_poll_default/group_ids", "group/write_chat_group_ids": "chat_group/write_group_ids", "group/write_comment_section_ids": "motion_comment_section/write_group_ids", "history_position/entry_ids": "history_entry/position_id", @@ -234,7 +238,6 @@ var RelationListFields = map[string]string{ "meeting/all_projection_ids": "projection/meeting_id", "meeting/assignment_candidate_ids": "assignment_candidate/meeting_id", "meeting/assignment_ids": "assignment/meeting_id", - "meeting/assignment_poll_default_group_ids": "group/used_as_assignment_poll_default_id", "meeting/chat_group_ids": "chat_group/meeting_id", "meeting/chat_message_ids": "chat_message/meeting_id", "meeting/default_projector_agenda_item_list_ids": "projector/used_as_default_projector_for_agenda_item_list_in_meeting_id", @@ -249,8 +252,8 @@ var RelationListFields = map[string]string{ "meeting/default_projector_motion_block_ids": "projector/used_as_default_projector_for_motion_block_in_meeting_id", "meeting/default_projector_motion_ids": "projector/used_as_default_projector_for_motion_in_meeting_id", "meeting/default_projector_motion_poll_ids": "projector/used_as_default_projector_for_motion_poll_in_meeting_id", - "meeting/default_projector_poll_ids": "projector/used_as_default_projector_for_poll_in_meeting_id", "meeting/default_projector_topic_ids": "projector/used_as_default_projector_for_topic_in_meeting_id", + "meeting/default_projector_topic_poll_ids": "projector/used_as_default_projector_for_topic_poll_in_meeting_id", "meeting/forwarded_motion_ids": "motion/origin_meeting_id", "meeting/group_ids": "group/meeting_id", "meeting/list_of_speakers_ids": "list_of_speakers/meeting_id", @@ -264,19 +267,15 @@ var RelationListFields = map[string]string{ "meeting/motion_comment_section_ids": "motion_comment_section/meeting_id", "meeting/motion_editor_ids": "motion_editor/meeting_id", "meeting/motion_ids": "motion/meeting_id", - "meeting/motion_poll_default_group_ids": "group/used_as_motion_poll_default_id", "meeting/motion_state_ids": "motion_state/meeting_id", "meeting/motion_submitter_ids": "motion_submitter/meeting_id", "meeting/motion_supporter_ids": "motion_supporter/meeting_id", "meeting/motion_workflow_ids": "motion_workflow/meeting_id", "meeting/motion_working_group_speaker_ids": "motion_working_group_speaker/meeting_id", - "meeting/option_ids": "option/meeting_id", "meeting/organization_tag_ids": "organization_tag/tagged_ids", "meeting/personal_note_ids": "personal_note/meeting_id", "meeting/point_of_order_category_ids": "point_of_order_category/meeting_id", - "meeting/poll_candidate_ids": "poll_candidate/meeting_id", - "meeting/poll_candidate_list_ids": "poll_candidate_list/meeting_id", - "meeting/poll_default_group_ids": "group/used_as_poll_default_id", + "meeting/poll_default_ids": "meeting_poll_default/meeting_id", "meeting/poll_ids": "poll/meeting_id", "meeting/present_user_ids": "user/is_present_in_meeting_ids", "meeting/projection_ids": "projection/content_object_id", @@ -289,20 +288,23 @@ var RelationListFields = map[string]string{ "meeting/structure_level_list_of_speakers_ids": "structure_level_list_of_speakers/meeting_id", "meeting/tag_ids": "tag/meeting_id", "meeting/topic_ids": "topic/meeting_id", - "meeting/topic_poll_default_group_ids": "group/used_as_topic_poll_default_id", "meeting/user_ids": "user/meeting_ids", - "meeting/vote_ids": "vote/meeting_id", "meeting_mediafile/access_group_ids": "group/meeting_mediafile_access_group_ids", "meeting_mediafile/inherited_access_group_ids": "group/meeting_mediafile_inherited_access_group_ids", "meeting_mediafile/projection_ids": "projection/content_object_id", + "meeting_poll_default/group_ids": "group/used_in_meeting_poll_default_ids", + "meeting_user/acting_ballot_ids": "poll_ballot_user/acting_meeting_user_id", "meeting_user/assignment_candidate_ids": "assignment_candidate/meeting_user_id", "meeting_user/chat_message_ids": "chat_message/meeting_user_id", "meeting_user/group_ids": "group/meeting_user_ids", + "meeting_user/history_entry_ids": "history_entry/model_id", "meeting_user/motion_editor_ids": "motion_editor/meeting_user_id", "meeting_user/motion_submitter_ids": "motion_submitter/meeting_user_id", "meeting_user/motion_supporter_ids": "motion_supporter/meeting_user_id", "meeting_user/motion_working_group_speaker_ids": "motion_working_group_speaker/meeting_user_id", "meeting_user/personal_note_ids": "personal_note/meeting_user_id", + "meeting_user/poll_option_ids": "poll_option/meeting_user_id", + "meeting_user/represented_ballot_ids": "poll_ballot_user/represented_meeting_user_id", "meeting_user/speaker_ids": "speaker/meeting_user_id", "meeting_user/structure_level_ids": "structure_level/meeting_user_ids", "meeting_user/vote_delegations_from_ids": "meeting_user/vote_delegated_to_id", @@ -316,7 +318,6 @@ var RelationListFields = map[string]string{ "motion/editor_ids": "motion_editor/motion_id", "motion/history_entry_ids": "history_entry/model_id", "motion/identical_motion_ids": "motion/identical_motion_ids", - "motion/option_ids": "option/content_object_id", "motion/personal_note_ids": "personal_note/content_object_id", "motion/poll_ids": "poll/content_object_id", "motion/projection_ids": "projection/content_object_id", @@ -340,7 +341,6 @@ var RelationListFields = map[string]string{ "motion_state/previous_state_ids": "motion_state/next_state_ids", "motion_state/submitter_withdraw_back_ids": "motion_state/submitter_withdraw_state_id", "motion_workflow/state_ids": "motion_state/workflow_id", - "option/vote_ids": "vote/option_id", "organization/active_meeting_ids": "meeting/is_active_in_organization_id", "organization/archived_meeting_ids": "meeting/is_archived_in_organization_id", "organization/committee_ids": "committee/organization_id", @@ -352,11 +352,12 @@ var RelationListFields = map[string]string{ "organization/theme_ids": "theme/organization_id", "organization/user_ids": "user/organization_id", "point_of_order_category/speaker_ids": "speaker/point_of_order_category_id", + "poll/ballot_ids": "poll_ballot/poll_id", + "poll/ballot_user_ids": "poll_ballot_user/poll_id", "poll/entitled_group_ids": "group/poll_ids", - "poll/option_ids": "option/poll_id", + "poll/history_entry_ids": "history_entry/model_id", + "poll/option_ids": "poll_option/poll_id", "poll/projection_ids": "projection/content_object_id", - "poll/voted_ids": "user/poll_voted_ids", - "poll_candidate_list/poll_candidate_ids": "poll_candidate/poll_candidate_list_id", "projector/current_projection_ids": "projection/current_projector_id", "projector/history_projection_ids": "projection/history_projector_id", "projector/preview_projection_ids": "projection/preview_projector_id", @@ -370,27 +371,22 @@ var RelationListFields = map[string]string{ "topic/projection_ids": "projection/content_object_id", "user/committee_ids": "committee/user_ids", "user/committee_management_ids": "committee/manager_ids", - "user/delegated_vote_ids": "vote/delegated_user_id", "user/history_entry_ids": "history_entry/model_id", "user/history_position_ids": "history_position/user_id", "user/is_present_in_meeting_ids": "meeting/present_user_ids", "user/meeting_ids": "meeting/user_ids", "user/meeting_user_ids": "meeting_user/user_id", - "user/option_ids": "option/content_object_id", - "user/poll_candidate_ids": "poll_candidate/user_id", - "user/poll_voted_ids": "poll/voted_ids", - "user/vote_ids": "vote/user_id", } // GenericRelationFields is a map from are all (single) generic relation fields // to the fields, there relate to. var GenericRelationFields = map[string]map[string]string{ "agenda_item/content_object_id": {"assignment": "agenda_item_id", "motion": "agenda_item_id", "motion_block": "agenda_item_id", "topic": "agenda_item_id"}, - "history_entry/model_id": {"assignment": "history_entry_ids", "motion": "history_entry_ids", "user": "history_entry_ids"}, + "history_entry/model_id": {"assignment": "history_entry_ids", "meeting_user": "history_entry_ids", "motion": "history_entry_ids", "poll": "history_entry_ids", "user": "history_entry_ids"}, "list_of_speakers/content_object_id": {"assignment": "list_of_speakers_id", "meeting_mediafile": "list_of_speakers_id", "motion": "list_of_speakers_id", "motion_block": "list_of_speakers_id", "topic": "list_of_speakers_id"}, "mediafile/owner_id": {"meeting": "mediafile_ids", "organization": "mediafile_ids"}, - "option/content_object_id": {"motion": "option_ids", "poll_candidate_list": "option_id", "user": "option_ids"}, "personal_note/content_object_id": {"motion": "personal_note_ids"}, + "poll/config_id": {"poll_config_approval": "poll_id", "poll_config_rating_approval": "poll_id", "poll_config_rating_score": "poll_id", "poll_config_selection": "poll_id", "poll_config_stv_scottish": "poll_id"}, "poll/content_object_id": {"assignment": "poll_ids", "motion": "poll_ids", "topic": "poll_ids"}, "projection/content_object_id": {"agenda_item": "projection_ids", "assignment": "projection_ids", "list_of_speakers": "projection_ids", "meeting": "projection_ids", "meeting_mediafile": "projection_ids", "motion": "projection_ids", "motion_block": "projection_ids", "poll": "projection_ids", "projector_countdown": "projection_ids", "projector_message": "projection_ids", "topic": "projection_ids"}, } @@ -517,21 +513,19 @@ var RestrictionModes = map[string]string{ "group/poll_ids": "A", "group/read_chat_group_ids": "A", "group/read_comment_section_ids": "A", - "group/used_as_assignment_poll_default_id": "A", - "group/used_as_motion_poll_default_id": "A", - "group/used_as_poll_default_id": "A", - "group/used_as_topic_poll_default_id": "A", + "group/used_in_meeting_poll_default_ids": "A", "group/weight": "A", "group/write_chat_group_ids": "A", "group/write_comment_section_ids": "A", // history_entry - "history_entry/entries": "A", - "history_entry/id": "A", - "history_entry/meeting_id": "A", - "history_entry/model_id": "A", - "history_entry/original_model_id": "A", - "history_entry/position_id": "A", + "history_entry/entries": "A", + "history_entry/id": "A", + "history_entry/meeting_id": "A", + "history_entry/model_id": "A", + "history_entry/original_model_id": "A", + "history_entry/position_id": "A", + "history_entry/structured_information": "A", // history_position "history_position/entry_ids": "A", @@ -600,15 +594,8 @@ var RestrictionModes = map[string]string{ "meeting/assignment_candidate_ids": "B", "meeting/assignment_ids": "B", "meeting/assignment_poll_add_candidates_to_list_of_speakers": "B", - "meeting/assignment_poll_ballot_paper_number": "B", - "meeting/assignment_poll_ballot_paper_selection": "B", - "meeting/assignment_poll_default_backend": "B", - "meeting/assignment_poll_default_group_ids": "B", + "meeting/assignment_poll_config_id": "B", "meeting/assignment_poll_default_method": "B", - "meeting/assignment_poll_default_onehundred_percent_base": "B", - "meeting/assignment_poll_default_type": "B", - "meeting/assignment_poll_enable_max_votes_per_option": "B", - "meeting/assignment_poll_sort_poll_result_by_votes": "B", "meeting/assignments_export_preamble": "B", "meeting/assignments_export_title": "B", "meeting/chat_group_ids": "B", @@ -628,8 +615,8 @@ var RestrictionModes = map[string]string{ "meeting/default_projector_motion_block_ids": "B", "meeting/default_projector_motion_ids": "B", "meeting/default_projector_motion_poll_ids": "B", - "meeting/default_projector_poll_ids": "B", "meeting/default_projector_topic_ids": "B", + "meeting/default_projector_topic_poll_ids": "B", "meeting/description": "B", "meeting/export_csv_encoding": "B", "meeting/export_csv_separator": "B", @@ -688,15 +675,7 @@ var RestrictionModes = map[string]string{ "meeting/motion_comment_ids": "B", "meeting/motion_comment_section_ids": "B", "meeting/motion_editor_ids": "B", - "meeting/motion_poll_ballot_paper_number": "B", - "meeting/motion_poll_ballot_paper_selection": "B", - "meeting/motion_poll_default_backend": "B", - "meeting/motion_poll_default_group_ids": "B", - "meeting/motion_poll_default_method": "B", - "meeting/motion_poll_default_onehundred_percent_base": "B", - "meeting/motion_poll_default_type": "B", - "meeting/motion_poll_projection_max_columns": "B", - "meeting/motion_poll_projection_name_order_first": "B", + "meeting/motion_poll_config_id": "B", "meeting/motion_state_ids": "B", "meeting/motion_submitter_ids": "B", "meeting/motion_supporter_ids": "B", @@ -738,24 +717,19 @@ var RestrictionModes = map[string]string{ "meeting/motions_show_referring_motions": "B", "meeting/motions_show_sequential_number": "B", "meeting/motions_supporters_min_amount": "B", - "meeting/option_ids": "B", "meeting/organization_tag_ids": "B", "meeting/personal_note_ids": "B", "meeting/point_of_order_category_ids": "B", - "meeting/poll_ballot_paper_number": "B", - "meeting/poll_ballot_paper_selection": "B", - "meeting/poll_candidate_ids": "B", - "meeting/poll_candidate_list_ids": "B", "meeting/poll_countdown_id": "B", "meeting/poll_couple_countdown": "B", - "meeting/poll_default_backend": "B", - "meeting/poll_default_group_ids": "B", + "meeting/poll_default_allow_invalid": "B", + "meeting/poll_default_allow_vote_split": "B", + "meeting/poll_default_ids": "B", "meeting/poll_default_live_voting_enabled": "B", - "meeting/poll_default_method": "B", - "meeting/poll_default_onehundred_percent_base": "B", - "meeting/poll_default_type": "B", + "meeting/poll_enable_max_votes_per_option": "B", "meeting/poll_ids": "B", - "meeting/poll_sort_poll_result_by_votes": "B", + "meeting/poll_projection_max_columns": "B", + "meeting/poll_projection_name_order_first": "B", "meeting/present_user_ids": "B", "meeting/projection_ids": "B", "meeting/projector_countdown_default_time": "B", @@ -769,7 +743,8 @@ var RestrictionModes = map[string]string{ "meeting/structure_level_list_of_speakers_ids": "B", "meeting/template_for_organization_id": "B", "meeting/topic_ids": "B", - "meeting/topic_poll_default_group_ids": "B", + "meeting/topic_poll_config_id": "B", + "meeting/topic_poll_default_method": "B", "meeting/users_allow_self_set_present": "B", "meeting/users_email_body": "B", "meeting/users_email_replyto": "B", @@ -787,7 +762,6 @@ var RestrictionModes = map[string]string{ "meeting/users_pdf_wlan_encryption": "B", "meeting/users_pdf_wlan_password": "B", "meeting/users_pdf_wlan_ssid": "B", - "meeting/vote_ids": "B", "meeting/applause_enable": "C", "meeting/applause_max_amount": "C", "meeting/applause_min_amount": "C", @@ -848,17 +822,36 @@ var RestrictionModes = map[string]string{ "meeting_mediafile/used_as_logo_projector_main_in_meeting_id": "A", "meeting_mediafile/used_as_logo_web_header_in_meeting_id": "A", + // meeting_poll_default + "meeting_poll_default/allow_abstain": "A", + "meeting_poll_default/allow_nota": "A", + "meeting_poll_default/display_chart": "A", + "meeting_poll_default/group_ids": "A", + "meeting_poll_default/id": "A", + "meeting_poll_default/meeting_id": "A", + "meeting_poll_default/onehundred_percent_base": "A", + "meeting_poll_default/sort_result_by_votes": "A", + "meeting_poll_default/strike_out": "A", + "meeting_poll_default/used_as_assignment_poll_config_in_meeting_id": "A", + "meeting_poll_default/used_as_motion_poll_config_in_meeting_id": "A", + "meeting_poll_default/used_as_topic_poll_config_in_meeting_id": "A", + "meeting_poll_default/visibility": "A", + // meeting_user "meeting_user/about_me": "A", + "meeting_user/acting_ballot_ids": "A", "meeting_user/assignment_candidate_ids": "A", "meeting_user/chat_message_ids": "A", "meeting_user/group_ids": "A", + "meeting_user/history_entry_ids": "A", "meeting_user/id": "A", "meeting_user/motion_editor_ids": "A", "meeting_user/motion_submitter_ids": "A", "meeting_user/motion_supporter_ids": "A", "meeting_user/motion_working_group_speaker_ids": "A", "meeting_user/number": "A", + "meeting_user/poll_option_ids": "A", + "meeting_user/represented_ballot_ids": "A", "meeting_user/speaker_ids": "A", "meeting_user/structure_level_ids": "A", "meeting_user/vote_delegated_to_id": "A", @@ -901,7 +894,6 @@ var RestrictionModes = map[string]string{ "motion/list_of_speakers_id": "C", "motion/modified_final_version": "C", "motion/number": "C", - "motion/option_ids": "C", "motion/personal_note_ids": "C", "motion/poll_ids": "C", "motion/projection_ids": "C", @@ -1048,19 +1040,6 @@ var RestrictionModes = map[string]string{ "motion_working_group_speaker/motion_id": "A", "motion_working_group_speaker/weight": "A", - // option - "option/content_object_id": "A", - "option/id": "A", - "option/meeting_id": "A", - "option/poll_id": "A", - "option/text": "A", - "option/used_as_global_option_in_poll_id": "A", - "option/vote_ids": "A", - "option/weight": "A", - "option/abstain": "B", - "option/no": "B", - "option/yes": "B", - // organization "organization/active_meeting_ids": "A", "organization/default_language": "A", @@ -1126,51 +1105,90 @@ var RestrictionModes = map[string]string{ "point_of_order_category/text": "A", // poll - "poll/backend": "A", - "poll/content_object_id": "A", - "poll/description": "A", - "poll/entitled_group_ids": "A", - "poll/entitled_users_at_stop": "A", - "poll/global_abstain": "A", - "poll/global_no": "A", - "poll/global_option_id": "A", - "poll/global_yes": "A", - "poll/id": "A", - "poll/is_pseudoanonymized": "A", - "poll/live_voting_enabled": "A", - "poll/max_votes_amount": "A", - "poll/max_votes_per_option": "A", - "poll/meeting_id": "A", - "poll/min_votes_amount": "A", - "poll/onehundred_percent_base": "A", - "poll/option_ids": "A", - "poll/pollmethod": "A", - "poll/projection_ids": "A", - "poll/sequential_number": "A", - "poll/state": "A", - "poll/title": "A", - "poll/type": "A", - "poll/voted_ids": "A", - "poll/votesinvalid": "B", - "poll/votesvalid": "B", - "poll/live_votes": "C", - "poll/votescast": "D", + "poll/allow_invalid": "A", + "poll/allow_vote_split": "A", + "poll/anonymized": "A", + "poll/ballot_ids": "A", + "poll/ballot_user_ids": "A", + "poll/config_id": "A", + "poll/content_object_id": "A", + "poll/entitled_group_ids": "A", + "poll/history_entry_ids": "A", + "poll/id": "A", + "poll/live_voting_enabled": "A", + "poll/meeting_id": "A", + "poll/option_ids": "A", + "poll/projection_ids": "A", + "poll/published": "A", + "poll/sequential_number": "A", + "poll/state": "A", + "poll/title": "A", + "poll/visibility": "A", + "poll/result": "B", + + // poll_ballot + "poll_ballot/id": "A", + "poll_ballot/poll_ballot_user_id": "A", + "poll_ballot/poll_id": "A", + "poll_ballot/split": "A", + "poll_ballot/value": "A", + "poll_ballot/weight": "A", + + // poll_ballot_user + "poll_ballot_user/acting_meeting_user_id": "A", + "poll_ballot_user/id": "A", + "poll_ballot_user/poll_ballot_id": "A", + "poll_ballot_user/poll_id": "A", + "poll_ballot_user/represented_meeting_user_id": "A", + + // poll_config_approval + "poll_config_approval/allow_abstain": "A", + "poll_config_approval/id": "A", + "poll_config_approval/onehundred_percent_base": "A", + "poll_config_approval/poll_id": "A", - // poll_candidate - "poll_candidate/id": "A", - "poll_candidate/meeting_id": "A", - "poll_candidate/poll_candidate_list_id": "A", - "poll_candidate/user_id": "A", - "poll_candidate/weight": "A", + // poll_config_rating_approval + "poll_config_rating_approval/allow_abstain": "A", + "poll_config_rating_approval/id": "A", + "poll_config_rating_approval/max_options_amount": "A", + "poll_config_rating_approval/max_yes_amount": "A", + "poll_config_rating_approval/min_options_amount": "A", + "poll_config_rating_approval/onehundred_percent_base": "A", + "poll_config_rating_approval/poll_id": "A", - // poll_candidate_list - "poll_candidate_list/id": "A", - "poll_candidate_list/meeting_id": "A", - "poll_candidate_list/option_id": "A", - "poll_candidate_list/poll_candidate_ids": "A", + // poll_config_rating_score + "poll_config_rating_score/id": "A", + "poll_config_rating_score/max_options_amount": "A", + "poll_config_rating_score/max_vote_sum": "A", + "poll_config_rating_score/max_votes_per_option": "A", + "poll_config_rating_score/min_options_amount": "A", + "poll_config_rating_score/min_vote_sum": "A", + "poll_config_rating_score/onehundred_percent_base": "A", + "poll_config_rating_score/poll_id": "A", + + // poll_config_selection + "poll_config_selection/allow_nota": "A", + "poll_config_selection/display_chart": "A", + "poll_config_selection/id": "A", + "poll_config_selection/max_options_amount": "A", + "poll_config_selection/min_options_amount": "A", + "poll_config_selection/onehundred_percent_base": "A", + "poll_config_selection/poll_id": "A", + "poll_config_selection/strike_out": "A", + + // poll_config_stv_scottish + "poll_config_stv_scottish/id": "A", + "poll_config_stv_scottish/poll_id": "A", + "poll_config_stv_scottish/posts": "A", + + // poll_option + "poll_option/id": "A", + "poll_option/meeting_user_id": "A", + "poll_option/poll_id": "A", + "poll_option/text": "A", + "poll_option/weight": "A", // projection - "projection/content": "A", "projection/content_object_id": "A", "projection/current_projector_id": "A", "projection/history_projector_id": "A", @@ -1220,8 +1238,8 @@ var RestrictionModes = map[string]string{ "projector/used_as_default_projector_for_motion_block_in_meeting_id": "A", "projector/used_as_default_projector_for_motion_in_meeting_id": "A", "projector/used_as_default_projector_for_motion_poll_in_meeting_id": "A", - "projector/used_as_default_projector_for_poll_in_meeting_id": "A", "projector/used_as_default_projector_for_topic_in_meeting_id": "A", + "projector/used_as_default_projector_for_topic_poll_in_meeting_id": "A", "projector/used_as_reference_projector_meeting_id": "A", "projector/width": "A", @@ -1353,7 +1371,6 @@ var RestrictionModes = map[string]string{ // user "user/default_vote_weight": "A", - "user/delegated_vote_ids": "A", "user/first_name": "A", "user/gender_id": "A", "user/history_entry_ids": "A", @@ -1365,12 +1382,8 @@ var RestrictionModes = map[string]string{ "user/last_login": "A", "user/last_name": "A", "user/meeting_user_ids": "A", - "user/option_ids": "A", - "user/poll_candidate_ids": "A", - "user/poll_voted_ids": "A", "user/pronoun": "A", "user/title": "A", - "user/vote_ids": "A", "user/email": "B", "user/is_active": "B", "user/last_email_sent": "B", @@ -1387,14 +1400,4 @@ var RestrictionModes = map[string]string{ "user/organization_id": "F", "user/password": "G", "user/default_password": "H", - - // vote - "vote/delegated_user_id": "A", - "vote/id": "A", - "vote/meeting_id": "A", - "vote/option_id": "A", - "vote/user_id": "A", - "vote/value": "A", - "vote/weight": "A", - "vote/user_token": "B", } diff --git a/perm/generated.go b/perm/generated.go index 11a6e8440..e6c3ce29e 100644 --- a/perm/generated.go +++ b/perm/generated.go @@ -3,13 +3,16 @@ package perm const ( AgendaItemCanManage TPermission = "agenda_item.can_manage" + AgendaItemCanManagePolls TPermission = "agenda_item.can_manage_polls" AgendaItemCanSee TPermission = "agenda_item.can_see" AgendaItemCanSeeInternal TPermission = "agenda_item.can_see_internal" + AgendaItemCanSeePolls TPermission = "agenda_item.can_see_polls" AssignmentCanManage TPermission = "assignment.can_manage" AssignmentCanManagePolls TPermission = "assignment.can_manage_polls" AssignmentCanNominateOther TPermission = "assignment.can_nominate_other" AssignmentCanNominateSelf TPermission = "assignment.can_nominate_self" AssignmentCanSee TPermission = "assignment.can_see" + AssignmentCanSeePolls TPermission = "assignment.can_see_polls" ChatCanManage TPermission = "chat.can_manage" ListOfSpeakersCanBeSpeaker TPermission = "list_of_speakers.can_be_speaker" ListOfSpeakersCanManage TPermission = "list_of_speakers.can_manage" @@ -33,8 +36,8 @@ const ( MotionCanSee TPermission = "motion.can_see" MotionCanSeeInternal TPermission = "motion.can_see_internal" MotionCanSeeOrigin TPermission = "motion.can_see_origin" + MotionCanSeePolls TPermission = "motion.can_see_polls" MotionCanSupport TPermission = "motion.can_support" - PollCanManage TPermission = "poll.can_manage" PollCanSeeProgress TPermission = "poll.can_see_progress" ProjectorCanManage TPermission = "projector.can_manage" ProjectorCanSee TPermission = "projector.can_see" @@ -49,13 +52,16 @@ const ( var derivatePerms = map[TPermission][]TPermission{ "agenda_item.can_manage": {"agenda_item.can_see", "agenda_item.can_see_internal"}, + "agenda_item.can_manage_polls": {"agenda_item.can_see", "agenda_item.can_see_internal", "agenda_item.can_see_polls"}, "agenda_item.can_see": {}, "agenda_item.can_see_internal": {"agenda_item.can_see"}, + "agenda_item.can_see_polls": {"agenda_item.can_see", "agenda_item.can_see_internal"}, "assignment.can_manage": {"assignment.can_nominate_other", "assignment.can_see"}, - "assignment.can_manage_polls": {"assignment.can_see"}, + "assignment.can_manage_polls": {"assignment.can_see", "assignment.can_see_polls"}, "assignment.can_nominate_other": {"assignment.can_see"}, "assignment.can_nominate_self": {"assignment.can_see"}, "assignment.can_see": {}, + "assignment.can_see_polls": {"assignment.can_see"}, "chat.can_manage": {}, "list_of_speakers.can_be_speaker": {}, "list_of_speakers.can_manage": {"list_of_speakers.can_see"}, @@ -75,12 +81,12 @@ var derivatePerms = map[TPermission][]TPermission{ "motion.can_forward": {"motion.can_see"}, "motion.can_manage": {"motion.can_create", "motion.can_create_amendments", "motion.can_forward", "motion.can_manage_metadata", "motion.can_see", "motion.can_see", "motion.can_see", "motion.can_see", "motion.can_see", "motion.can_see_internal"}, "motion.can_manage_metadata": {"motion.can_see"}, - "motion.can_manage_polls": {"motion.can_see"}, + "motion.can_manage_polls": {"motion.can_see", "motion.can_see_polls"}, "motion.can_see": {}, "motion.can_see_internal": {"motion.can_see"}, "motion.can_see_origin": {"motion.can_see"}, + "motion.can_see_polls": {"motion.can_see"}, "motion.can_support": {"motion.can_see"}, - "poll.can_manage": {"poll.can_see_progress"}, "poll.can_see_progress": {}, "projector.can_manage": {"projector.can_see"}, "projector.can_see": {},