From 5feb91a22f214ad2bf89f3ca49e8db394f5c8f89 Mon Sep 17 00:00:00 2001 From: Bastian Rihm Date: Wed, 22 Jan 2025 16:07:53 +0100 Subject: [PATCH] Subscription updates --- cmd/modelgen/model_struct.go.tmpl | 15 + pkg/datastore/query.go | 4 +- pkg/datastore/redis.go | 11 +- pkg/datastore/subscribe.go | 94 +++- pkg/models/action_worker.go | 6 + pkg/models/agenda_item.go | 33 ++ pkg/models/assignment.go | 45 ++ pkg/models/assignment_candidate.go | 15 + pkg/models/chat_group.go | 29 ++ pkg/models/chat_message.go | 15 + pkg/models/committee.go | 51 +++ pkg/models/gender.go | 17 + pkg/models/group.go | 73 +++ pkg/models/import_preview.go | 6 + pkg/models/list_of_speakers.go | 31 ++ pkg/models/mediafile.go | 27 ++ pkg/models/meeting.go | 421 ++++++++++++++++++ pkg/models/meeting_mediafile.go | 65 +++ pkg/models/meeting_user.go | 81 ++++ pkg/models/model.go | 2 + pkg/models/motion.go | 151 +++++++ pkg/models/motion_block.go | 27 ++ pkg/models/motion_category.go | 25 ++ pkg/models/motion_change_recommendation.go | 13 + pkg/models/motion_comment.go | 15 + pkg/models/motion_comment_section.go | 29 ++ pkg/models/motion_editor.go | 15 + pkg/models/motion_state.go | 47 ++ pkg/models/motion_statute_paragraph.go | 191 -------- pkg/models/motion_submitter.go | 15 + pkg/models/motion_workflow.go | 23 + pkg/models/motion_working_group_speaker.go | 15 + pkg/models/option.go | 23 + pkg/models/organization.go | 71 +++ pkg/models/organization_tag.go | 11 + pkg/models/personal_note.go | 15 + pkg/models/point_of_order_category.go | 17 + pkg/models/poll.go | 39 ++ pkg/models/poll_candidate.go | 15 + pkg/models/poll_candidate_list.go | 19 + pkg/models/projection.go | 19 + pkg/models/projector.go | 59 +++ pkg/models/projector_countdown.go | 21 + pkg/models/projector_message.go | 17 + pkg/models/speaker.go | 19 + pkg/models/structure_level.go | 23 + .../structure_level_list_of_speakers.go | 21 + pkg/models/tag.go | 11 + pkg/models/theme.go | 13 + pkg/models/topic.go | 33 ++ pkg/models/user.go | 73 +++ pkg/models/vote.go | 17 + 52 files changed, 1946 insertions(+), 197 deletions(-) delete mode 100644 pkg/models/motion_statute_paragraph.go diff --git a/cmd/modelgen/model_struct.go.tmpl b/cmd/modelgen/model_struct.go.tmpl index 937add3..c438ab2 100644 --- a/cmd/modelgen/model_struct.go.tmpl +++ b/cmd/modelgen/model_struct.go.tmpl @@ -29,6 +29,19 @@ func (m *{{.GoName}}) CollectionName() string { } {{end}} +func (m *{{.GoName}}) GetRelated(field string, id int) *RelatedModelsAccessor { {{if .HasRelations}} + switch field { {{range .Relations}} + case "{{.IdField}}":{{if .List}} + for _, r := range m.{{.PropNameLc}} { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + }{{else}} + return m.{{.PropNameLc}}.GetRelatedModelsAccessor(){{end}}{{end}} + } + {{end}} + return nil} + func (m *{{.GoName}}) SetRelated(field string, content interface{}) { {{if .HasRelations}} if content != nil { switch field { {{range .Relations}} @@ -142,7 +155,9 @@ func (m *{{.GoName}}) Update(data map[string]string) error { {{range .Fields}} func (m *{{.GoName}}) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/datastore/query.go b/pkg/datastore/query.go index 09d75b4..9e30c0b 100644 --- a/pkg/datastore/query.go +++ b/pkg/datastore/query.go @@ -18,6 +18,7 @@ type baseModelPtr[T any] interface { type recursiveSubqueryList struct { subquerys map[string]*recursiveSubqueryList Fields []string + fqids []string } func (q *recursiveSubqueryList) With(idField string, fields []string) *recursiveSubqueryList { @@ -165,7 +166,8 @@ func (q *query[T, PT]) resultStructs() (map[string]PT, error) { } func (q *query[T, PT]) recursiveLoadSubqueries(el *models.RelatedModelsAccessor, field string, subQuery *recursiveSubqueryList) error { - subDsResult, err := q.datastore.getFull(el.GetFqids(field)) + subQuery.fqids = el.GetFqids(field) + subDsResult, err := q.datastore.getFull(subQuery.fqids) if err != nil { return err } diff --git a/pkg/datastore/redis.go b/pkg/datastore/redis.go index 2752c76..470835e 100644 --- a/pkg/datastore/redis.go +++ b/pkg/datastore/redis.go @@ -61,11 +61,16 @@ func (ds *Datastore) setupRedisListener() { for _, listener := range listeners { listenerChanged := map[string]map[string]string{} - for _, fqid := range listener.fqids { - if val, ok := changeMap[fqid]; ok { - listenerChanged[fqid] = val + if len(listener.fqids) != 0 { + for _, fqid := range listener.fqids { + if val, ok := changeMap[fqid]; ok { + listenerChanged[fqid] = val + } } + } else { + listenerChanged = changeMap } + if len(listenerChanged) > 0 { listener.channel <- listenerChanged } diff --git a/pkg/datastore/subscribe.go b/pkg/datastore/subscribe.go index b30e896..3cc2427 100644 --- a/pkg/datastore/subscribe.go +++ b/pkg/datastore/subscribe.go @@ -6,7 +6,10 @@ import ( "maps" "reflect" "slices" + "strconv" + "strings" + "github.com/OpenSlides/openslides-projector-service/pkg/models" "github.com/rs/zerolog/log" ) @@ -70,10 +73,18 @@ func (q *query[T, PT]) SubscribeOne(model PT) (*subscription[<-chan []string], e fields: q.Fields, channel: updateChannel, } + if len(q.subquerys) != 0 { + listener.fqids = []string{} + } + q.datastore.change.AddListener <- &listener load := func() error { - listener.fqids = q.fqids + if len(q.subquerys) != 0 { + listener.fqids = []string{} + } else { + listener.fqids = q.fqids + } data, err := q.GetOne() if err != nil { @@ -98,6 +109,7 @@ func (q *query[T, PT]) SubscribeOne(model PT) (*subscription[<-chan []string], e continue } + updatedAny := false if obj, ok := update[q.fqids[0]]; ok { if obj == nil { close(notifyChannel) @@ -107,7 +119,22 @@ func (q *query[T, PT]) SubscribeOne(model PT) (*subscription[<-chan []string], e if err := model.Update(obj); err != nil { log.Error().Err(err).Msg("updating subscribed model failed") } - notifyChannel <- slices.Collect(maps.Keys(obj)) + + updatedAny = true + } + + for field, subQuery := range q.subquerys { + println(field) + update, err := q.recursiveUpdateSubqueries(model.GetRelatedModelsAccessor(), field, subQuery, update) + updatedAny = updatedAny || update + if err != nil { + log.Err(err).Msg("Could not update subscribed subqueries") + continue + } + } + + if updatedAny { + notifyChannel <- slices.Collect(maps.Keys(update[q.fqids[0]])) } } @@ -119,6 +146,69 @@ func (q *query[T, PT]) SubscribeOne(model PT) (*subscription[<-chan []string], e }}, nil } +func (q *query[T, PT]) recursiveUpdateSubqueries(el *models.RelatedModelsAccessor, field string, subQuery *recursiveSubqueryList, update map[string]map[string]string) (bool, error) { + subQuery.fqids = slices.DeleteFunc(subQuery.fqids, func(fqid string) bool { + return !slices.Contains(el.GetFqids(field), fqid) + }) + + added := []string{} + updatedAny := false + for _, fqid := range el.GetFqids(field) { + if !slices.Contains(subQuery.fqids, fqid) { + added = append(added, fqid) + } else { + p := strings.Split(fqid, "/") + id, err := strconv.Atoi(p[1]) + if err != nil { + return false, err + } + + model := el.GetRelated(field, id) + if model != nil { + if obj, ok := update[fqid]; ok { + updatedAny = true + err := model.Update(obj) + if err != nil { + return false, err + } + } + + for sField, nextSubQuery := range subQuery.subquerys { + updated, err := q.recursiveUpdateSubqueries(model, sField, nextSubQuery, update) + updatedAny = updated || updatedAny + if err != nil { + return false, err + } + } + } + } + } + + subDsResult, err := q.datastore.getFull(added) + if err != nil { + return false, err + } + + if len(subDsResult) != 0 { + updatedAny = true + for _, dsResult := range subDsResult { + model, err := el.SetRelatedJSON(field, dsResult) + if err != nil { + log.Err(err).Msgf("Failed to parse JSON (%s)", string(dsResult)) + } else if model != nil { + for sField, nextSubQuery := range subQuery.subquerys { + err := q.recursiveLoadSubqueries(model, sField, nextSubQuery) + if err != nil { + return false, err + } + } + } + } + } + + return len(subDsResult) != 0 || updatedAny, nil +} + func (q *query[T, PT]) SubscribeField(field interface{}) (*subscription[<-chan struct{}], error) { notifyChannel := make(chan struct{}) updateChannel := make(chan map[string]map[string]string) diff --git a/pkg/models/action_worker.go b/pkg/models/action_worker.go index 1e035ef..49550e7 100644 --- a/pkg/models/action_worker.go +++ b/pkg/models/action_worker.go @@ -18,6 +18,10 @@ func (m *ActionWorker) CollectionName() string { return "action_worker" } +func (m *ActionWorker) GetRelated(field string, id int) *RelatedModelsAccessor { + return nil +} + func (m *ActionWorker) SetRelated(field string, content interface{}) {} func (m *ActionWorker) SetRelatedJSON(field string, content []byte) (*RelatedModelsAccessor, error) { @@ -105,7 +109,9 @@ func (m *ActionWorker) Update(data map[string]string) error { func (m *ActionWorker) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/agenda_item.go b/pkg/models/agenda_item.go index f231948..7ea2963 100644 --- a/pkg/models/agenda_item.go +++ b/pkg/models/agenda_item.go @@ -88,6 +88,37 @@ func (m *AgendaItem) Tags() []*Tag { return m.tags } +func (m *AgendaItem) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "child_ids": + for _, r := range m.childs { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "content_object_id": + return m.contentObject.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "parent_id": + return m.parent.GetRelatedModelsAccessor() + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "tag_ids": + for _, r := range m.tags { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *AgendaItem) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -435,7 +466,9 @@ func (m *AgendaItem) Update(data map[string]string) error { func (m *AgendaItem) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/assignment.go b/pkg/models/assignment.go index 67ec52d..79774ec 100644 --- a/pkg/models/assignment.go +++ b/pkg/models/assignment.go @@ -105,6 +105,49 @@ func (m *Assignment) Tags() []*Tag { return m.tags } +func (m *Assignment) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "agenda_item_id": + return m.agendaItem.GetRelatedModelsAccessor() + case "attachment_meeting_mediafile_ids": + for _, r := range m.attachmentMeetingMediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "candidate_ids": + for _, r := range m.candidates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "list_of_speakers_id": + return m.listOfSpeakers.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "poll_ids": + for _, r := range m.polls { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "tag_ids": + for _, r := range m.tags { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Assignment) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -468,7 +511,9 @@ func (m *Assignment) Update(data map[string]string) error { func (m *Assignment) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/assignment_candidate.go b/pkg/models/assignment_candidate.go index 3e4c6fa..b10d64a 100644 --- a/pkg/models/assignment_candidate.go +++ b/pkg/models/assignment_candidate.go @@ -48,6 +48,19 @@ func (m *AssignmentCandidate) MeetingUser() *MeetingUser { return m.meetingUser } +func (m *AssignmentCandidate) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "assignment_id": + return m.assignment.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_user_id": + return m.meetingUser.GetRelatedModelsAccessor() + } + + return nil +} + func (m *AssignmentCandidate) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -187,7 +200,9 @@ func (m *AssignmentCandidate) Update(data map[string]string) error { func (m *AssignmentCandidate) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/chat_group.go b/pkg/models/chat_group.go index 5ee5a86..fcc0ae1 100644 --- a/pkg/models/chat_group.go +++ b/pkg/models/chat_group.go @@ -60,6 +60,33 @@ func (m *ChatGroup) WriteGroups() []*Group { return m.writeGroups } +func (m *ChatGroup) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "chat_message_ids": + for _, r := range m.chatMessages { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "read_group_ids": + for _, r := range m.readGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "write_group_ids": + for _, r := range m.writeGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *ChatGroup) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -260,7 +287,9 @@ func (m *ChatGroup) Update(data map[string]string) error { func (m *ChatGroup) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/chat_message.go b/pkg/models/chat_message.go index 4c4d9b6..bbf226a 100644 --- a/pkg/models/chat_message.go +++ b/pkg/models/chat_message.go @@ -49,6 +49,19 @@ func (m *ChatMessage) MeetingUser() *MeetingUser { return m.meetingUser } +func (m *ChatMessage) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "chat_group_id": + return m.chatGroup.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_user_id": + return m.meetingUser.GetRelatedModelsAccessor() + } + + return nil +} + func (m *ChatMessage) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -197,7 +210,9 @@ func (m *ChatMessage) Update(data map[string]string) error { func (m *ChatMessage) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/committee.go b/pkg/models/committee.go index 2a1a2d7..e3a113a 100644 --- a/pkg/models/committee.go +++ b/pkg/models/committee.go @@ -111,6 +111,55 @@ func (m *Committee) Users() []*User { return m.users } +func (m *Committee) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "default_meeting_id": + return m.defaultMeeting.GetRelatedModelsAccessor() + case "forward_to_committee_ids": + for _, r := range m.forwardToCommittees { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "forwarding_user_id": + return m.forwardingUser.GetRelatedModelsAccessor() + case "manager_ids": + for _, r := range m.managers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_ids": + for _, r := range m.meetings { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "organization_id": + return m.organization.GetRelatedModelsAccessor() + case "organization_tag_ids": + for _, r := range m.organizationTags { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "receive_forwardings_from_committee_ids": + for _, r := range m.receiveForwardingsFromCommittees { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "user_ids": + for _, r := range m.users { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Committee) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -474,7 +523,9 @@ func (m *Committee) Update(data map[string]string) error { func (m *Committee) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/gender.go b/pkg/models/gender.go index 05ef375..f949226 100644 --- a/pkg/models/gender.go +++ b/pkg/models/gender.go @@ -39,6 +39,21 @@ func (m *Gender) Users() []*User { return m.users } +func (m *Gender) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "organization_id": + return m.organization.GetRelatedModelsAccessor() + case "user_ids": + for _, r := range m.users { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Gender) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -162,7 +177,9 @@ func (m *Gender) Update(data map[string]string) error { func (m *Gender) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/group.go b/pkg/models/group.go index af46a8b..a093fe5 100644 --- a/pkg/models/group.go +++ b/pkg/models/group.go @@ -182,6 +182,77 @@ func (m *Group) WriteCommentSections() []*MotionCommentSection { return m.writeCommentSections } +func (m *Group) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "admin_group_for_meeting_id": + return m.adminGroupForMeeting.GetRelatedModelsAccessor() + case "anonymous_group_for_meeting_id": + return m.anonymousGroupForMeeting.GetRelatedModelsAccessor() + case "default_group_for_meeting_id": + return m.defaultGroupForMeeting.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_mediafile_access_group_ids": + for _, r := range m.meetingMediafileAccessGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_mediafile_inherited_access_group_ids": + for _, r := range m.meetingMediafileInheritedAccessGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_user_ids": + for _, r := range m.meetingUsers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "poll_ids": + for _, r := range m.polls { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "read_chat_group_ids": + for _, r := range m.readChatGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "read_comment_section_ids": + for _, r := range m.readCommentSections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "used_as_assignment_poll_default_id": + return m.usedAsAssignmentPollDefault.GetRelatedModelsAccessor() + case "used_as_motion_poll_default_id": + return m.usedAsMotionPollDefault.GetRelatedModelsAccessor() + case "used_as_poll_default_id": + return m.usedAsPollDefault.GetRelatedModelsAccessor() + case "used_as_topic_poll_default_id": + return m.usedAsTopicPollDefault.GetRelatedModelsAccessor() + case "write_chat_group_ids": + for _, r := range m.writeChatGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "write_comment_section_ids": + for _, r := range m.writeCommentSections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Group) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -752,7 +823,9 @@ func (m *Group) Update(data map[string]string) error { func (m *Group) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/import_preview.go b/pkg/models/import_preview.go index 1b84081..9216c31 100644 --- a/pkg/models/import_preview.go +++ b/pkg/models/import_preview.go @@ -16,6 +16,10 @@ func (m *ImportPreview) CollectionName() string { return "import_preview" } +func (m *ImportPreview) GetRelated(field string, id int) *RelatedModelsAccessor { + return nil +} + func (m *ImportPreview) SetRelated(field string, content interface{}) {} func (m *ImportPreview) SetRelatedJSON(field string, content []byte) (*RelatedModelsAccessor, error) { @@ -85,7 +89,9 @@ func (m *ImportPreview) Update(data map[string]string) error { func (m *ImportPreview) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/list_of_speakers.go b/pkg/models/list_of_speakers.go index bdbd446..6e70ebe 100644 --- a/pkg/models/list_of_speakers.go +++ b/pkg/models/list_of_speakers.go @@ -72,6 +72,35 @@ func (m *ListOfSpeakers) StructureLevelListOfSpeakerss() []*StructureLevelListOf return m.structureLevelListOfSpeakerss } +func (m *ListOfSpeakers) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "content_object_id": + return m.contentObject.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "speaker_ids": + for _, r := range m.speakers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "structure_level_list_of_speakers_ids": + for _, r := range m.structureLevelListOfSpeakerss { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *ListOfSpeakers) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -348,7 +377,9 @@ func (m *ListOfSpeakers) Update(data map[string]string) error { func (m *ListOfSpeakers) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/mediafile.go b/pkg/models/mediafile.go index e3180eb..c6f8b1b 100644 --- a/pkg/models/mediafile.go +++ b/pkg/models/mediafile.go @@ -77,6 +77,31 @@ func (m *Mediafile) PublishedToMeetingsInOrganization() *Organization { return m.publishedToMeetingsInOrganization } +func (m *Mediafile) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "child_ids": + for _, r := range m.childs { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_mediafile_ids": + for _, r := range m.meetingMediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "owner_id": + return m.owner.GetRelatedModelsAccessor() + case "parent_id": + return m.parent.GetRelatedModelsAccessor() + case "published_to_meetings_in_organization_id": + return m.publishedToMeetingsInOrganization.GetRelatedModelsAccessor() + } + + return nil +} + func (m *Mediafile) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -365,7 +390,9 @@ func (m *Mediafile) Update(data map[string]string) error { func (m *Mediafile) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/meeting.go b/pkg/models/meeting.go index 17f9bda..cea2ce8 100644 --- a/pkg/models/meeting.go +++ b/pkg/models/meeting.go @@ -1044,6 +1044,425 @@ func (m *Meeting) Votes() []*Vote { return m.votes } +func (m *Meeting) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "admin_group_id": + return m.adminGroup.GetRelatedModelsAccessor() + case "agenda_item_ids": + for _, r := range m.agendaItems { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "all_projection_ids": + for _, r := range m.allProjections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "anonymous_group_id": + return m.anonymousGroup.GetRelatedModelsAccessor() + case "assignment_candidate_ids": + for _, r := range m.assignmentCandidates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "assignment_poll_default_group_ids": + for _, r := range m.assignmentPollDefaultGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "assignment_ids": + for _, r := range m.assignments { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "chat_group_ids": + for _, r := range m.chatGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "chat_message_ids": + for _, r := range m.chatMessages { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "committee_id": + return m.committee.GetRelatedModelsAccessor() + case "default_group_id": + return m.defaultGroup.GetRelatedModelsAccessor() + case "default_meeting_for_committee_id": + return m.defaultMeetingForCommittee.GetRelatedModelsAccessor() + case "default_projector_agenda_item_list_ids": + for _, r := range m.defaultProjectorAgendaItemLists { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_amendment_ids": + for _, r := range m.defaultProjectorAmendments { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_assignment_poll_ids": + for _, r := range m.defaultProjectorAssignmentPolls { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_assignment_ids": + for _, r := range m.defaultProjectorAssignments { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_countdown_ids": + for _, r := range m.defaultProjectorCountdowns { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_current_list_of_speakers_ids": + for _, r := range m.defaultProjectorCurrentListOfSpeakerss { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_list_of_speakers_ids": + for _, r := range m.defaultProjectorListOfSpeakerss { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_mediafile_ids": + for _, r := range m.defaultProjectorMediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_message_ids": + for _, r := range m.defaultProjectorMessages { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_motion_block_ids": + for _, r := range m.defaultProjectorMotionBlocks { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_motion_poll_ids": + for _, r := range m.defaultProjectorMotionPolls { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_motion_ids": + for _, r := range m.defaultProjectorMotions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_poll_ids": + for _, r := range m.defaultProjectorPolls { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "default_projector_topic_ids": + for _, r := range m.defaultProjectorTopics { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "font_bold_id": + return m.fontBold.GetRelatedModelsAccessor() + case "font_bold_italic_id": + return m.fontBoldItalic.GetRelatedModelsAccessor() + case "font_chyron_speaker_name_id": + return m.fontChyronSpeakerName.GetRelatedModelsAccessor() + case "font_italic_id": + return m.fontItalic.GetRelatedModelsAccessor() + case "font_monospace_id": + return m.fontMonospace.GetRelatedModelsAccessor() + case "font_projector_h1_id": + return m.fontProjectorH1.GetRelatedModelsAccessor() + case "font_projector_h2_id": + return m.fontProjectorH2.GetRelatedModelsAccessor() + case "font_regular_id": + return m.fontRegular.GetRelatedModelsAccessor() + case "forwarded_motion_ids": + for _, r := range m.forwardedMotions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "group_ids": + for _, r := range m.groups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "is_active_in_organization_id": + return m.isActiveInOrganization.GetRelatedModelsAccessor() + case "is_archived_in_organization_id": + return m.isArchivedInOrganization.GetRelatedModelsAccessor() + case "list_of_speakers_countdown_id": + return m.listOfSpeakersCountdown.GetRelatedModelsAccessor() + case "list_of_speakers_ids": + for _, r := range m.listOfSpeakerss { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "logo_pdf_ballot_paper_id": + return m.logoPdfBallotPaper.GetRelatedModelsAccessor() + case "logo_pdf_footer_l_id": + return m.logoPdfFooterL.GetRelatedModelsAccessor() + case "logo_pdf_footer_r_id": + return m.logoPdfFooterR.GetRelatedModelsAccessor() + case "logo_pdf_header_l_id": + return m.logoPdfHeaderL.GetRelatedModelsAccessor() + case "logo_pdf_header_r_id": + return m.logoPdfHeaderR.GetRelatedModelsAccessor() + case "logo_projector_header_id": + return m.logoProjectorHeader.GetRelatedModelsAccessor() + case "logo_projector_main_id": + return m.logoProjectorMain.GetRelatedModelsAccessor() + case "logo_web_header_id": + return m.logoWebHeader.GetRelatedModelsAccessor() + case "mediafile_ids": + for _, r := range m.mediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_mediafile_ids": + for _, r := range m.meetingMediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_user_ids": + for _, r := range m.meetingUsers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_block_ids": + for _, r := range m.motionBlocks { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_category_ids": + for _, r := range m.motionCategorys { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_change_recommendation_ids": + for _, r := range m.motionChangeRecommendations { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_comment_section_ids": + for _, r := range m.motionCommentSections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_comment_ids": + for _, r := range m.motionComments { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_editor_ids": + for _, r := range m.motionEditors { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_poll_default_group_ids": + for _, r := range m.motionPollDefaultGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_state_ids": + for _, r := range m.motionStates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_submitter_ids": + for _, r := range m.motionSubmitters { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_workflow_ids": + for _, r := range m.motionWorkflows { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_working_group_speaker_ids": + for _, r := range m.motionWorkingGroupSpeakers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_ids": + for _, r := range m.motions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motions_default_amendment_workflow_id": + return m.motionsDefaultAmendmentWorkflow.GetRelatedModelsAccessor() + case "motions_default_workflow_id": + return m.motionsDefaultWorkflow.GetRelatedModelsAccessor() + case "option_ids": + for _, r := range m.options { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "organization_tag_ids": + for _, r := range m.organizationTags { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "personal_note_ids": + for _, r := range m.personalNotes { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "point_of_order_category_ids": + for _, r := range m.pointOfOrderCategorys { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "poll_candidate_list_ids": + for _, r := range m.pollCandidateLists { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "poll_candidate_ids": + for _, r := range m.pollCandidates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "poll_countdown_id": + return m.pollCountdown.GetRelatedModelsAccessor() + case "poll_default_group_ids": + for _, r := range m.pollDefaultGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "poll_ids": + for _, r := range m.polls { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "present_user_ids": + for _, r := range m.presentUsers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projector_countdown_ids": + for _, r := range m.projectorCountdowns { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projector_message_ids": + for _, r := range m.projectorMessages { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projector_ids": + for _, r := range m.projectors { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "reference_projector_id": + return m.referenceProjector.GetRelatedModelsAccessor() + case "speaker_ids": + for _, r := range m.speakers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "structure_level_list_of_speakers_ids": + for _, r := range m.structureLevelListOfSpeakerss { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "structure_level_ids": + for _, r := range m.structureLevels { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "tag_ids": + for _, r := range m.tags { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "template_for_organization_id": + return m.templateForOrganization.GetRelatedModelsAccessor() + case "topic_poll_default_group_ids": + for _, r := range m.topicPollDefaultGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "topic_ids": + for _, r := range m.topics { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "vote_ids": + for _, r := range m.votes { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Meeting) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -5164,7 +5583,9 @@ func (m *Meeting) Update(data map[string]string) error { func (m *Meeting) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/meeting_mediafile.go b/pkg/models/meeting_mediafile.go index f620409..9c2b0af 100644 --- a/pkg/models/meeting_mediafile.go +++ b/pkg/models/meeting_mediafile.go @@ -240,6 +240,69 @@ func (m *MeetingMediafile) UsedAsLogoWebHeaderInMeeting() *Meeting { return m.usedAsLogoWebHeaderInMeeting } +func (m *MeetingMediafile) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "access_group_ids": + for _, r := range m.accessGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "inherited_access_group_ids": + for _, r := range m.inheritedAccessGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "list_of_speakers_id": + return m.listOfSpeakers.GetRelatedModelsAccessor() + case "mediafile_id": + return m.mediafile.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "used_as_font_bold_in_meeting_id": + return m.usedAsFontBoldInMeeting.GetRelatedModelsAccessor() + case "used_as_font_bold_italic_in_meeting_id": + return m.usedAsFontBoldItalicInMeeting.GetRelatedModelsAccessor() + case "used_as_font_chyron_speaker_name_in_meeting_id": + return m.usedAsFontChyronSpeakerNameInMeeting.GetRelatedModelsAccessor() + case "used_as_font_italic_in_meeting_id": + return m.usedAsFontItalicInMeeting.GetRelatedModelsAccessor() + case "used_as_font_monospace_in_meeting_id": + return m.usedAsFontMonospaceInMeeting.GetRelatedModelsAccessor() + case "used_as_font_projector_h1_in_meeting_id": + return m.usedAsFontProjectorH1InMeeting.GetRelatedModelsAccessor() + case "used_as_font_projector_h2_in_meeting_id": + return m.usedAsFontProjectorH2InMeeting.GetRelatedModelsAccessor() + case "used_as_font_regular_in_meeting_id": + return m.usedAsFontRegularInMeeting.GetRelatedModelsAccessor() + case "used_as_logo_pdf_ballot_paper_in_meeting_id": + return m.usedAsLogoPdfBallotPaperInMeeting.GetRelatedModelsAccessor() + case "used_as_logo_pdf_footer_l_in_meeting_id": + return m.usedAsLogoPdfFooterLInMeeting.GetRelatedModelsAccessor() + case "used_as_logo_pdf_footer_r_in_meeting_id": + return m.usedAsLogoPdfFooterRInMeeting.GetRelatedModelsAccessor() + case "used_as_logo_pdf_header_l_in_meeting_id": + return m.usedAsLogoPdfHeaderLInMeeting.GetRelatedModelsAccessor() + case "used_as_logo_pdf_header_r_in_meeting_id": + return m.usedAsLogoPdfHeaderRInMeeting.GetRelatedModelsAccessor() + case "used_as_logo_projector_header_in_meeting_id": + return m.usedAsLogoProjectorHeaderInMeeting.GetRelatedModelsAccessor() + case "used_as_logo_projector_main_in_meeting_id": + return m.usedAsLogoProjectorMainInMeeting.GetRelatedModelsAccessor() + case "used_as_logo_web_header_in_meeting_id": + return m.usedAsLogoWebHeaderInMeeting.GetRelatedModelsAccessor() + } + + return nil +} + func (m *MeetingMediafile) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -906,7 +969,9 @@ func (m *MeetingMediafile) Update(data map[string]string) error { func (m *MeetingMediafile) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/meeting_user.go b/pkg/models/meeting_user.go index c9aa6dd..d44e94d 100644 --- a/pkg/models/meeting_user.go +++ b/pkg/models/meeting_user.go @@ -163,6 +163,85 @@ func (m *MeetingUser) VoteDelegationsFroms() []*MeetingUser { return m.voteDelegationsFroms } +func (m *MeetingUser) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "assignment_candidate_ids": + for _, r := range m.assignmentCandidates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "chat_message_ids": + for _, r := range m.chatMessages { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "group_ids": + for _, r := range m.groups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "motion_editor_ids": + for _, r := range m.motionEditors { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_submitter_ids": + for _, r := range m.motionSubmitters { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_working_group_speaker_ids": + for _, r := range m.motionWorkingGroupSpeakers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "personal_note_ids": + for _, r := range m.personalNotes { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "speaker_ids": + for _, r := range m.speakers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "structure_level_ids": + for _, r := range m.structureLevels { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "supported_motion_ids": + for _, r := range m.supportedMotions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "user_id": + return m.user.GetRelatedModelsAccessor() + case "vote_delegated_to_id": + return m.voteDelegatedTo.GetRelatedModelsAccessor() + case "vote_delegations_from_ids": + for _, r := range m.voteDelegationsFroms { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *MeetingUser) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -712,7 +791,9 @@ func (m *MeetingUser) Update(data map[string]string) error { func (m *MeetingUser) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/model.go b/pkg/models/model.go index dcb582b..2e6ced9 100644 --- a/pkg/models/model.go +++ b/pkg/models/model.go @@ -12,6 +12,8 @@ type IBaseModel interface { type RelatedModelsAccessor struct { GetFqids func(field string) []string + GetRelated func(string, int) *RelatedModelsAccessor SetRelated func(string, interface{}) SetRelatedJSON func(string, []byte) (*RelatedModelsAccessor, error) + Update func(data map[string]string) error } diff --git a/pkg/models/motion.go b/pkg/models/motion.go index 75ee4e7..d3275d8 100644 --- a/pkg/models/motion.go +++ b/pkg/models/motion.go @@ -349,6 +349,155 @@ func (m *Motion) WorkingGroupSpeakers() []*MotionWorkingGroupSpeaker { return m.workingGroupSpeakers } +func (m *Motion) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "agenda_item_id": + return m.agendaItem.GetRelatedModelsAccessor() + case "all_derived_motion_ids": + for _, r := range m.allDerivedMotions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "all_origin_ids": + for _, r := range m.allOrigins { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "amendment_ids": + for _, r := range m.amendments { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "attachment_meeting_mediafile_ids": + for _, r := range m.attachmentMeetingMediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "block_id": + return m.block.GetRelatedModelsAccessor() + case "category_id": + return m.category.GetRelatedModelsAccessor() + case "change_recommendation_ids": + for _, r := range m.changeRecommendations { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "comment_ids": + for _, r := range m.comments { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "derived_motion_ids": + for _, r := range m.derivedMotions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "editor_ids": + for _, r := range m.editors { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "identical_motion_ids": + for _, r := range m.iDenticalMotions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "lead_motion_id": + return m.leadMotion.GetRelatedModelsAccessor() + case "list_of_speakers_id": + return m.listOfSpeakers.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "option_ids": + for _, r := range m.options { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "origin_id": + return m.origin.GetRelatedModelsAccessor() + case "origin_meeting_id": + return m.originMeeting.GetRelatedModelsAccessor() + case "personal_note_ids": + for _, r := range m.personalNotes { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "poll_ids": + for _, r := range m.polls { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "recommendation_id": + return m.recommendation.GetRelatedModelsAccessor() + case "referenced_in_motion_recommendation_extension_ids": + for _, r := range m.referencedInMotionRecommendationExtensions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "referenced_in_motion_state_extension_ids": + for _, r := range m.referencedInMotionStateExtensions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "sort_child_ids": + for _, r := range m.sortChilds { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "sort_parent_id": + return m.sortParent.GetRelatedModelsAccessor() + case "state_id": + return m.state.GetRelatedModelsAccessor() + case "submitter_ids": + for _, r := range m.submitters { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "supporter_meeting_user_ids": + for _, r := range m.supporterMeetingUsers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "tag_ids": + for _, r := range m.tags { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "working_group_speaker_ids": + for _, r := range m.workingGroupSpeakers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Motion) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -1554,7 +1703,9 @@ func (m *Motion) Update(data map[string]string) error { func (m *Motion) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_block.go b/pkg/models/motion_block.go index fb7d15c..73058e6 100644 --- a/pkg/models/motion_block.go +++ b/pkg/models/motion_block.go @@ -71,6 +71,31 @@ func (m *MotionBlock) Projections() []*Projection { return m.projections } +func (m *MotionBlock) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "agenda_item_id": + return m.agendaItem.GetRelatedModelsAccessor() + case "list_of_speakers_id": + return m.listOfSpeakers.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "motion_ids": + for _, r := range m.motions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *MotionBlock) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -296,7 +321,9 @@ func (m *MotionBlock) Update(data map[string]string) error { func (m *MotionBlock) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_category.go b/pkg/models/motion_category.go index ad5b1a0..310481a 100644 --- a/pkg/models/motion_category.go +++ b/pkg/models/motion_category.go @@ -63,6 +63,29 @@ func (m *MotionCategory) Parent() *MotionCategory { return m.parent } +func (m *MotionCategory) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "child_ids": + for _, r := range m.childs { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "motion_ids": + for _, r := range m.motions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "parent_id": + return m.parent.GetRelatedModelsAccessor() + } + + return nil +} + func (m *MotionCategory) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -282,7 +305,9 @@ func (m *MotionCategory) Update(data map[string]string) error { func (m *MotionCategory) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_change_recommendation.go b/pkg/models/motion_change_recommendation.go index e8c894c..959e773 100644 --- a/pkg/models/motion_change_recommendation.go +++ b/pkg/models/motion_change_recommendation.go @@ -45,6 +45,17 @@ func (m *MotionChangeRecommendation) Motion() Motion { return *m.motion } +func (m *MotionChangeRecommendation) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "motion_id": + return m.motion.GetRelatedModelsAccessor() + } + + return nil +} + func (m *MotionChangeRecommendation) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -221,7 +232,9 @@ func (m *MotionChangeRecommendation) Update(data map[string]string) error { func (m *MotionChangeRecommendation) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_comment.go b/pkg/models/motion_comment.go index b54ff77..2e2c026 100644 --- a/pkg/models/motion_comment.go +++ b/pkg/models/motion_comment.go @@ -48,6 +48,19 @@ func (m *MotionComment) Section() MotionCommentSection { return *m.section } +func (m *MotionComment) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "motion_id": + return m.motion.GetRelatedModelsAccessor() + case "section_id": + return m.section.GetRelatedModelsAccessor() + } + + return nil +} + func (m *MotionComment) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -185,7 +198,9 @@ func (m *MotionComment) Update(data map[string]string) error { func (m *MotionComment) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_comment_section.go b/pkg/models/motion_comment_section.go index bbab454..084d22c 100644 --- a/pkg/models/motion_comment_section.go +++ b/pkg/models/motion_comment_section.go @@ -62,6 +62,33 @@ func (m *MotionCommentSection) WriteGroups() []*Group { return m.writeGroups } +func (m *MotionCommentSection) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "comment_ids": + for _, r := range m.comments { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "read_group_ids": + for _, r := range m.readGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "write_group_ids": + for _, r := range m.writeGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *MotionCommentSection) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -280,7 +307,9 @@ func (m *MotionCommentSection) Update(data map[string]string) error { func (m *MotionCommentSection) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_editor.go b/pkg/models/motion_editor.go index baa4409..58bd14d 100644 --- a/pkg/models/motion_editor.go +++ b/pkg/models/motion_editor.go @@ -48,6 +48,19 @@ func (m *MotionEditor) Motion() Motion { return *m.motion } +func (m *MotionEditor) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_user_id": + return m.meetingUser.GetRelatedModelsAccessor() + case "motion_id": + return m.motion.GetRelatedModelsAccessor() + } + + return nil +} + func (m *MotionEditor) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -185,7 +198,9 @@ func (m *MotionEditor) Update(data map[string]string) error { func (m *MotionEditor) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_state.go b/pkg/models/motion_state.go index 5241dc0..8f8a53f 100644 --- a/pkg/models/motion_state.go +++ b/pkg/models/motion_state.go @@ -123,6 +123,51 @@ func (m *MotionState) Workflow() MotionWorkflow { return *m.workflow } +func (m *MotionState) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "first_state_of_workflow_id": + return m.firstStateOfWorkflow.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "motion_recommendation_ids": + for _, r := range m.motionRecommendations { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "motion_ids": + for _, r := range m.motions { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "next_state_ids": + for _, r := range m.nextStates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "previous_state_ids": + for _, r := range m.previousStates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "submitter_withdraw_back_ids": + for _, r := range m.submitterWithdrawBacks { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "submitter_withdraw_state_id": + return m.submitterWithdrawState.GetRelatedModelsAccessor() + case "workflow_id": + return m.workflow.GetRelatedModelsAccessor() + } + + return nil +} + func (m *MotionState) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -584,7 +629,9 @@ func (m *MotionState) Update(data map[string]string) error { func (m *MotionState) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_statute_paragraph.go b/pkg/models/motion_statute_paragraph.go deleted file mode 100644 index ab15c57..0000000 --- a/pkg/models/motion_statute_paragraph.go +++ /dev/null @@ -1,191 +0,0 @@ -package models - -import ( - "encoding/json" - "fmt" - "strconv" - - "github.com/rs/zerolog/log" -) - -type MotionStatuteParagraph struct { - ID int `json:"id"` - MeetingID int `json:"meeting_id"` - MotionIDs []int `json:"motion_ids"` - SequentialNumber int `json:"sequential_number"` - Text *string `json:"text"` - Title string `json:"title"` - Weight *int `json:"weight"` - loadedRelations map[string]struct{} - motions []*Motion - meeting *Meeting -} - -func (m *MotionStatuteParagraph) CollectionName() string { - return "motion_statute_paragraph" -} - -func (m *MotionStatuteParagraph) Motions() []*Motion { - if _, ok := m.loadedRelations["motion_ids"]; !ok { - log.Panic().Msg("Tried to access Motions relation of MotionStatuteParagraph which was not loaded.") - } - - return m.motions -} - -func (m *MotionStatuteParagraph) Meeting() Meeting { - if _, ok := m.loadedRelations["meeting_id"]; !ok { - log.Panic().Msg("Tried to access Meeting relation of MotionStatuteParagraph which was not loaded.") - } - - return *m.meeting -} - -func (m *MotionStatuteParagraph) SetRelated(field string, content interface{}) { - if content != nil { - switch field { - case "motion_ids": - m.motions = content.([]*Motion) - case "meeting_id": - m.meeting = content.(*Meeting) - default: - return - } - } - - if m.loadedRelations == nil { - m.loadedRelations = map[string]struct{}{} - } - m.loadedRelations[field] = struct{}{} -} - -func (m *MotionStatuteParagraph) SetRelatedJSON(field string, content []byte) (*RelatedModelsAccessor, error) { - var result *RelatedModelsAccessor - switch field { - case "motion_ids": - var entry Motion - err := json.Unmarshal(content, &entry) - if err != nil { - return nil, err - } - - m.motions = append(m.motions, &entry) - - result = entry.GetRelatedModelsAccessor() - case "meeting_id": - var entry Meeting - err := json.Unmarshal(content, &entry) - if err != nil { - return nil, err - } - - m.meeting = &entry - - result = entry.GetRelatedModelsAccessor() - default: - return nil, fmt.Errorf("set related field json on not existing field") - } - - if m.loadedRelations == nil { - m.loadedRelations = map[string]struct{}{} - } - m.loadedRelations[field] = struct{}{} - return result, nil -} - -func (m *MotionStatuteParagraph) Get(field string) interface{} { - switch field { - case "id": - return m.ID - case "meeting_id": - return m.MeetingID - case "motion_ids": - return m.MotionIDs - case "sequential_number": - return m.SequentialNumber - case "text": - return m.Text - case "title": - return m.Title - case "weight": - return m.Weight - } - - return nil -} - -func (m *MotionStatuteParagraph) GetFqids(field string) []string { - switch field { - case "motion_ids": - r := make([]string, len(m.MotionIDs)) - for i, id := range m.MotionIDs { - r[i] = "motion/" + strconv.Itoa(id) - } - return r - - case "meeting_id": - return []string{"meeting/" + strconv.Itoa(m.MeetingID)} - } - return []string{} -} - -func (m *MotionStatuteParagraph) Update(data map[string]string) error { - if val, ok := data["id"]; ok { - err := json.Unmarshal([]byte(val), &m.ID) - if err != nil { - return err - } - } - - if val, ok := data["meeting_id"]; ok { - err := json.Unmarshal([]byte(val), &m.MeetingID) - if err != nil { - return err - } - } - - if val, ok := data["motion_ids"]; ok { - err := json.Unmarshal([]byte(val), &m.MotionIDs) - if err != nil { - return err - } - } - - if val, ok := data["sequential_number"]; ok { - err := json.Unmarshal([]byte(val), &m.SequentialNumber) - if err != nil { - return err - } - } - - if val, ok := data["text"]; ok { - err := json.Unmarshal([]byte(val), &m.Text) - if err != nil { - return err - } - } - - if val, ok := data["title"]; ok { - err := json.Unmarshal([]byte(val), &m.Title) - if err != nil { - return err - } - } - - if val, ok := data["weight"]; ok { - err := json.Unmarshal([]byte(val), &m.Weight) - if err != nil { - return err - } - } - - return nil -} - -func (m *MotionStatuteParagraph) GetRelatedModelsAccessor() *RelatedModelsAccessor { - return &RelatedModelsAccessor{ - m.GetFqids, - m.SetRelated, - m.SetRelatedJSON, - } -} diff --git a/pkg/models/motion_submitter.go b/pkg/models/motion_submitter.go index 4a7f784..10a992c 100644 --- a/pkg/models/motion_submitter.go +++ b/pkg/models/motion_submitter.go @@ -48,6 +48,19 @@ func (m *MotionSubmitter) Motion() Motion { return *m.motion } +func (m *MotionSubmitter) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_user_id": + return m.meetingUser.GetRelatedModelsAccessor() + case "motion_id": + return m.motion.GetRelatedModelsAccessor() + } + + return nil +} + func (m *MotionSubmitter) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -185,7 +198,9 @@ func (m *MotionSubmitter) Update(data map[string]string) error { func (m *MotionSubmitter) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_workflow.go b/pkg/models/motion_workflow.go index 19723dc..92aa18b 100644 --- a/pkg/models/motion_workflow.go +++ b/pkg/models/motion_workflow.go @@ -70,6 +70,27 @@ func (m *MotionWorkflow) States() []*MotionState { return m.states } +func (m *MotionWorkflow) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "default_amendment_workflow_meeting_id": + return m.defaultAmendmentWorkflowMeeting.GetRelatedModelsAccessor() + case "default_workflow_meeting_id": + return m.defaultWorkflowMeeting.GetRelatedModelsAccessor() + case "first_state_id": + return m.firstState.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "state_ids": + for _, r := range m.states { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *MotionWorkflow) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -278,7 +299,9 @@ func (m *MotionWorkflow) Update(data map[string]string) error { func (m *MotionWorkflow) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/motion_working_group_speaker.go b/pkg/models/motion_working_group_speaker.go index 6180e75..44d0c59 100644 --- a/pkg/models/motion_working_group_speaker.go +++ b/pkg/models/motion_working_group_speaker.go @@ -48,6 +48,19 @@ func (m *MotionWorkingGroupSpeaker) Motion() Motion { return *m.motion } +func (m *MotionWorkingGroupSpeaker) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_user_id": + return m.meetingUser.GetRelatedModelsAccessor() + case "motion_id": + return m.motion.GetRelatedModelsAccessor() + } + + return nil +} + func (m *MotionWorkingGroupSpeaker) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -185,7 +198,9 @@ func (m *MotionWorkingGroupSpeaker) Update(data map[string]string) error { func (m *MotionWorkingGroupSpeaker) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/option.go b/pkg/models/option.go index 31acdd3..45f1544 100644 --- a/pkg/models/option.go +++ b/pkg/models/option.go @@ -74,6 +74,27 @@ func (m *Option) Votes() []*Vote { return m.votes } +func (m *Option) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "content_object_id": + return m.contentObject.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "poll_id": + return m.poll.GetRelatedModelsAccessor() + case "used_as_global_option_in_poll_id": + return m.usedAsGlobalOptionInPoll.GetRelatedModelsAccessor() + case "vote_ids": + for _, r := range m.votes { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Option) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -339,7 +360,9 @@ func (m *Option) Update(data map[string]string) error { func (m *Option) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/organization.go b/pkg/models/organization.go index e92b385..9247658 100644 --- a/pkg/models/organization.go +++ b/pkg/models/organization.go @@ -153,6 +153,75 @@ func (m *Organization) Users() []*User { return m.users } +func (m *Organization) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "active_meeting_ids": + for _, r := range m.activeMeetings { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "archived_meeting_ids": + for _, r := range m.archivedMeetings { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "committee_ids": + for _, r := range m.committees { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "gender_ids": + for _, r := range m.genders { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "mediafile_ids": + for _, r := range m.mediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "organization_tag_ids": + for _, r := range m.organizationTags { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "published_mediafile_ids": + for _, r := range m.publishedMediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "template_meeting_ids": + for _, r := range m.templateMeetings { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "theme_id": + return m.theme.GetRelatedModelsAccessor() + case "theme_ids": + for _, r := range m.themes { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "user_ids": + for _, r := range m.users { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Organization) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -798,7 +867,9 @@ func (m *Organization) Update(data map[string]string) error { func (m *Organization) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/organization_tag.go b/pkg/models/organization_tag.go index 6929c1c..a26be70 100644 --- a/pkg/models/organization_tag.go +++ b/pkg/models/organization_tag.go @@ -30,6 +30,15 @@ func (m *OrganizationTag) Organization() Organization { return *m.organization } +func (m *OrganizationTag) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "organization_id": + return m.organization.GetRelatedModelsAccessor() + } + + return nil +} + func (m *OrganizationTag) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -137,7 +146,9 @@ func (m *OrganizationTag) Update(data map[string]string) error { func (m *OrganizationTag) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/personal_note.go b/pkg/models/personal_note.go index 57c3880..5bd0c53 100644 --- a/pkg/models/personal_note.go +++ b/pkg/models/personal_note.go @@ -50,6 +50,19 @@ func (m *PersonalNote) MeetingUser() MeetingUser { return *m.meetingUser } +func (m *PersonalNote) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "content_object_id": + return m.contentObject.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_user_id": + return m.meetingUser.GetRelatedModelsAccessor() + } + + return nil +} + func (m *PersonalNote) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -208,7 +221,9 @@ func (m *PersonalNote) Update(data map[string]string) error { func (m *PersonalNote) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/point_of_order_category.go b/pkg/models/point_of_order_category.go index b5707da..ec4357b 100644 --- a/pkg/models/point_of_order_category.go +++ b/pkg/models/point_of_order_category.go @@ -40,6 +40,21 @@ func (m *PointOfOrderCategory) Speakers() []*Speaker { return m.speakers } +func (m *PointOfOrderCategory) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "speaker_ids": + for _, r := range m.speakers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *PointOfOrderCategory) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -172,7 +187,9 @@ func (m *PointOfOrderCategory) Update(data map[string]string) error { func (m *PointOfOrderCategory) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/poll.go b/pkg/models/poll.go index ca1f36d..12513b8 100644 --- a/pkg/models/poll.go +++ b/pkg/models/poll.go @@ -113,6 +113,43 @@ func (m *Poll) Voteds() []*User { return m.voteds } +func (m *Poll) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "content_object_id": + return m.contentObject.GetRelatedModelsAccessor() + case "entitled_group_ids": + for _, r := range m.entitledGroups { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "global_option_id": + return m.globalOption.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "option_ids": + for _, r := range m.options { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "voted_ids": + for _, r := range m.voteds { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Poll) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -620,7 +657,9 @@ func (m *Poll) Update(data map[string]string) error { func (m *Poll) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/poll_candidate.go b/pkg/models/poll_candidate.go index df51025..8b1cb2b 100644 --- a/pkg/models/poll_candidate.go +++ b/pkg/models/poll_candidate.go @@ -48,6 +48,19 @@ func (m *PollCandidate) User() *User { return m.user } +func (m *PollCandidate) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "poll_candidate_list_id": + return m.pollCandidateList.GetRelatedModelsAccessor() + case "user_id": + return m.user.GetRelatedModelsAccessor() + } + + return nil +} + func (m *PollCandidate) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -187,7 +200,9 @@ func (m *PollCandidate) Update(data map[string]string) error { func (m *PollCandidate) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/poll_candidate_list.go b/pkg/models/poll_candidate_list.go index 2d81358..a6be8ea 100644 --- a/pkg/models/poll_candidate_list.go +++ b/pkg/models/poll_candidate_list.go @@ -48,6 +48,23 @@ func (m *PollCandidateList) PollCandidates() []*PollCandidate { return m.pollCandidates } +func (m *PollCandidateList) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "option_id": + return m.option.GetRelatedModelsAccessor() + case "poll_candidate_ids": + for _, r := range m.pollCandidates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *PollCandidateList) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -186,7 +203,9 @@ func (m *PollCandidateList) Update(data map[string]string) error { func (m *PollCandidateList) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/projection.go b/pkg/models/projection.go index 0bece35..bbdc714 100644 --- a/pkg/models/projection.go +++ b/pkg/models/projection.go @@ -73,6 +73,23 @@ func (m *Projection) PreviewProjector() *Projector { return m.previewProjector } +func (m *Projection) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "content_object_id": + return m.contentObject.GetRelatedModelsAccessor() + case "current_projector_id": + return m.currentProjector.GetRelatedModelsAccessor() + case "history_projector_id": + return m.historyProjector.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "preview_projector_id": + return m.previewProjector.GetRelatedModelsAccessor() + } + + return nil +} + func (m *Projection) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -397,7 +414,9 @@ func (m *Projection) Update(data map[string]string) error { func (m *Projection) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/projector.go b/pkg/models/projector.go index 6e935db..f9664c9 100644 --- a/pkg/models/projector.go +++ b/pkg/models/projector.go @@ -229,6 +229,63 @@ func (m *Projector) UsedAsReferenceProjectorMeeting() *Meeting { return m.usedAsReferenceProjectorMeeting } +func (m *Projector) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "current_projection_ids": + for _, r := range m.currentProjections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "history_projection_ids": + for _, r := range m.historyProjections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "preview_projection_ids": + for _, r := range m.previewProjections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "used_as_default_projector_for_agenda_item_list_in_meeting_id": + return m.usedAsDefaultProjectorForAgendaItemListInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_amendment_in_meeting_id": + return m.usedAsDefaultProjectorForAmendmentInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_assignment_in_meeting_id": + return m.usedAsDefaultProjectorForAssignmentInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_assignment_poll_in_meeting_id": + return m.usedAsDefaultProjectorForAssignmentPollInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_countdown_in_meeting_id": + return m.usedAsDefaultProjectorForCountdownInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_current_list_of_speakers_in_meeting_id": + return m.usedAsDefaultProjectorForCurrentListOfSpeakersInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_list_of_speakers_in_meeting_id": + return m.usedAsDefaultProjectorForListOfSpeakersInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_mediafile_in_meeting_id": + return m.usedAsDefaultProjectorForMediafileInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_message_in_meeting_id": + return m.usedAsDefaultProjectorForMessageInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_motion_block_in_meeting_id": + return m.usedAsDefaultProjectorForMotionBlockInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_motion_in_meeting_id": + return m.usedAsDefaultProjectorForMotionInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_motion_poll_in_meeting_id": + return m.usedAsDefaultProjectorForMotionPollInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_poll_in_meeting_id": + return m.usedAsDefaultProjectorForPollInMeeting.GetRelatedModelsAccessor() + case "used_as_default_projector_for_topic_in_meeting_id": + return m.usedAsDefaultProjectorForTopicInMeeting.GetRelatedModelsAccessor() + case "used_as_reference_projector_meeting_id": + return m.usedAsReferenceProjectorMeeting.GetRelatedModelsAccessor() + } + + return nil +} + func (m *Projector) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -990,7 +1047,9 @@ func (m *Projector) Update(data map[string]string) error { func (m *Projector) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/projector_countdown.go b/pkg/models/projector_countdown.go index 21df864..3a8afce 100644 --- a/pkg/models/projector_countdown.go +++ b/pkg/models/projector_countdown.go @@ -63,6 +63,25 @@ func (m *ProjectorCountdown) UsedAsPollCountdownMeeting() *Meeting { return m.usedAsPollCountdownMeeting } +func (m *ProjectorCountdown) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "used_as_list_of_speakers_countdown_meeting_id": + return m.usedAsListOfSpeakersCountdownMeeting.GetRelatedModelsAccessor() + case "used_as_poll_countdown_meeting_id": + return m.usedAsPollCountdownMeeting.GetRelatedModelsAccessor() + } + + return nil +} + func (m *ProjectorCountdown) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -274,7 +293,9 @@ func (m *ProjectorCountdown) Update(data map[string]string) error { func (m *ProjectorCountdown) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/projector_message.go b/pkg/models/projector_message.go index 2377da9..0f937b2 100644 --- a/pkg/models/projector_message.go +++ b/pkg/models/projector_message.go @@ -39,6 +39,21 @@ func (m *ProjectorMessage) Projections() []*Projection { return m.projections } +func (m *ProjectorMessage) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *ProjectorMessage) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -162,7 +177,9 @@ func (m *ProjectorMessage) Update(data map[string]string) error { func (m *ProjectorMessage) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/speaker.go b/pkg/models/speaker.go index 3ec2ab1..d077c0a 100644 --- a/pkg/models/speaker.go +++ b/pkg/models/speaker.go @@ -76,6 +76,23 @@ func (m *Speaker) StructureLevelListOfSpeakers() *StructureLevelListOfSpeakers { return m.structureLevelListOfSpeakers } +func (m *Speaker) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "list_of_speakers_id": + return m.listOfSpeakers.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_user_id": + return m.meetingUser.GetRelatedModelsAccessor() + case "point_of_order_category_id": + return m.pointOfOrderCategory.GetRelatedModelsAccessor() + case "structure_level_list_of_speakers_id": + return m.structureLevelListOfSpeakers.GetRelatedModelsAccessor() + } + + return nil +} + func (m *Speaker) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -339,7 +356,9 @@ func (m *Speaker) Update(data map[string]string) error { func (m *Speaker) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/structure_level.go b/pkg/models/structure_level.go index 00627c2..dc8f83a 100644 --- a/pkg/models/structure_level.go +++ b/pkg/models/structure_level.go @@ -51,6 +51,27 @@ func (m *StructureLevel) StructureLevelListOfSpeakerss() []*StructureLevelListOf return m.structureLevelListOfSpeakerss } +func (m *StructureLevel) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "meeting_user_ids": + for _, r := range m.meetingUsers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "structure_level_list_of_speakers_ids": + for _, r := range m.structureLevelListOfSpeakerss { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *StructureLevel) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -226,7 +247,9 @@ func (m *StructureLevel) Update(data map[string]string) error { func (m *StructureLevel) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/structure_level_list_of_speakers.go b/pkg/models/structure_level_list_of_speakers.go index ab733a0..f4e8f2d 100644 --- a/pkg/models/structure_level_list_of_speakers.go +++ b/pkg/models/structure_level_list_of_speakers.go @@ -62,6 +62,25 @@ func (m *StructureLevelListOfSpeakers) StructureLevel() StructureLevel { return *m.structureLevel } +func (m *StructureLevelListOfSpeakers) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "list_of_speakers_id": + return m.listOfSpeakers.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "speaker_ids": + for _, r := range m.speakers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "structure_level_id": + return m.structureLevel.GetRelatedModelsAccessor() + } + + return nil +} + func (m *StructureLevelListOfSpeakers) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -260,7 +279,9 @@ func (m *StructureLevelListOfSpeakers) Update(data map[string]string) error { func (m *StructureLevelListOfSpeakers) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/tag.go b/pkg/models/tag.go index 899b813..0ac26cb 100644 --- a/pkg/models/tag.go +++ b/pkg/models/tag.go @@ -29,6 +29,15 @@ func (m *Tag) Meeting() Meeting { return *m.meeting } +func (m *Tag) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + } + + return nil +} + func (m *Tag) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -127,7 +136,9 @@ func (m *Tag) Update(data map[string]string) error { func (m *Tag) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/theme.go b/pkg/models/theme.go index 76a7242..2e0318d 100644 --- a/pkg/models/theme.go +++ b/pkg/models/theme.go @@ -84,6 +84,17 @@ func (m *Theme) ThemeForOrganization() *Organization { return m.themeForOrganization } +func (m *Theme) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "organization_id": + return m.organization.GetRelatedModelsAccessor() + case "theme_for_organization_id": + return m.themeForOrganization.GetRelatedModelsAccessor() + } + + return nil +} + func (m *Theme) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -613,7 +624,9 @@ func (m *Theme) Update(data map[string]string) error { func (m *Theme) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/topic.go b/pkg/models/topic.go index 9211b0c..efaa361 100644 --- a/pkg/models/topic.go +++ b/pkg/models/topic.go @@ -81,6 +81,37 @@ func (m *Topic) Projections() []*Projection { return m.projections } +func (m *Topic) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "agenda_item_id": + return m.agendaItem.GetRelatedModelsAccessor() + case "attachment_meeting_mediafile_ids": + for _, r := range m.attachmentMeetingMediafiles { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "list_of_speakers_id": + return m.listOfSpeakers.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "poll_ids": + for _, r := range m.polls { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "projection_ids": + for _, r := range m.projections { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *Topic) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -338,7 +369,9 @@ func (m *Topic) Update(data map[string]string) error { func (m *Topic) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/user.go b/pkg/models/user.go index 64dc0c6..cd1606d 100644 --- a/pkg/models/user.go +++ b/pkg/models/user.go @@ -157,6 +157,77 @@ func (m *User) Votes() []*Vote { return m.votes } +func (m *User) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "committee_management_ids": + for _, r := range m.committeeManagements { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "committee_ids": + for _, r := range m.committees { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "delegated_vote_ids": + for _, r := range m.delegatedVotes { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "forwarding_committee_ids": + for _, r := range m.forwardingCommittees { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "gender_id": + return m.gender.GetRelatedModelsAccessor() + case "is_present_in_meeting_ids": + for _, r := range m.isPresentInMeetings { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "meeting_user_ids": + for _, r := range m.meetingUsers { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "option_ids": + for _, r := range m.options { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "organization_id": + return m.organization.GetRelatedModelsAccessor() + case "poll_candidate_ids": + for _, r := range m.pollCandidates { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "poll_voted_ids": + for _, r := range m.pollVoteds { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + case "vote_ids": + for _, r := range m.votes { + if r.ID == id { + return r.GetRelatedModelsAccessor() + } + } + } + + return nil +} + func (m *User) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -774,7 +845,9 @@ func (m *User) Update(data map[string]string) error { func (m *User) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } } diff --git a/pkg/models/vote.go b/pkg/models/vote.go index 5c46d06..2a2a0f2 100644 --- a/pkg/models/vote.go +++ b/pkg/models/vote.go @@ -60,6 +60,21 @@ func (m *Vote) User() *User { return m.user } +func (m *Vote) GetRelated(field string, id int) *RelatedModelsAccessor { + switch field { + case "delegated_user_id": + return m.delegatedUser.GetRelatedModelsAccessor() + case "meeting_id": + return m.meeting.GetRelatedModelsAccessor() + case "option_id": + return m.option.GetRelatedModelsAccessor() + case "user_id": + return m.user.GetRelatedModelsAccessor() + } + + return nil +} + func (m *Vote) SetRelated(field string, content interface{}) { if content != nil { switch field { @@ -243,7 +258,9 @@ func (m *Vote) Update(data map[string]string) error { func (m *Vote) GetRelatedModelsAccessor() *RelatedModelsAccessor { return &RelatedModelsAccessor{ m.GetFqids, + m.GetRelated, m.SetRelated, m.SetRelatedJSON, + m.Update, } }