Skip to content

Commit

Permalink
Cleanup relation lists on model update
Browse files Browse the repository at this point in the history
  • Loading branch information
bastianjoel committed Jan 22, 2025
1 parent ab21b9a commit f97f7ea
Show file tree
Hide file tree
Showing 31 changed files with 1,095 additions and 5 deletions.
13 changes: 9 additions & 4 deletions cmd/modelgen/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func parse(r io.Reader) ([]collection, error) {

relCollection := strings.Split(modelField.To, "/")[0]
relCollectionName := goName(relCollection)
relations = append(relations, relation{
rel := relation{
GoName: goName(collectionName),
PropName: propName,
PropNameLc: string(propNameLc),
Expand All @@ -127,7 +127,9 @@ func parse(r io.Reader) ([]collection, error) {
IdFieldGo: goName(fieldName),
Required: modelField.Required,
List: modelField.Type == "relation-list",
})
}
f.Relation = &rel
relations = append(relations, rel)
}

if modelField.Type == "generic-relation" {
Expand All @@ -140,7 +142,7 @@ func parse(r io.Reader) ([]collection, error) {
toCollections[c.Collection] = goName(c.Collection)
}

relations = append(relations, relation{
rel := relation{
GoName: goName(collectionName),
PropName: propName,
PropNameLc: string(propNameLc),
Expand All @@ -152,7 +154,9 @@ func parse(r io.Reader) ([]collection, error) {
List: false,
Generic: true,
ToCollections: toCollections,
})
}
f.Relation = &rel
relations = append(relations, rel)
}

fields = append(fields, f)
Expand Down Expand Up @@ -194,6 +198,7 @@ type field struct {
FieldName string
Required bool
SingleRelation bool
Relation *relation
}

type relation struct {
Expand Down
8 changes: 7 additions & 1 deletion cmd/modelgen/model_struct.go.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,13 @@ func (m *{{.GoName}}) Update(data map[string]string) error { {{range .Fields}}
if err != nil {
return err
}
}
{{if .Relation}}{{if .Relation.List}}
if _, ok := m.loadedRelations["{{ .Relation.IdField }}"]; ok {
m.{{ .Relation.PropNameLc }} = slices.DeleteFunc(m.{{ .Relation.PropNameLc }}, func (r *{{ .Relation.CollectionName }}) bool {
return !slices.Contains(m.{{ .Relation.IdFieldGo }}, r.ID)
})
}
{{end}}{{end}} }
{{end}}

return nil
Expand Down
19 changes: 19 additions & 0 deletions pkg/models/agenda_item.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package models
import (
"encoding/json"
"fmt"
"slices"
"strconv"
"strings"

Expand Down Expand Up @@ -303,6 +304,12 @@ func (m *AgendaItem) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["child_ids"]; ok {
m.childs = slices.DeleteFunc(m.childs, func(r *AgendaItem) bool {
return !slices.Contains(m.ChildIDs, r.ID)
})
}
}

if val, ok := data["closed"]; ok {
Expand Down Expand Up @@ -387,13 +394,25 @@ func (m *AgendaItem) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["projection_ids"]; ok {
m.projections = slices.DeleteFunc(m.projections, func(r *Projection) bool {
return !slices.Contains(m.ProjectionIDs, r.ID)
})
}
}

if val, ok := data["tag_ids"]; ok {
err := json.Unmarshal([]byte(val), &m.TagIDs)
if err != nil {
return err
}

if _, ok := m.loadedRelations["tag_ids"]; ok {
m.tags = slices.DeleteFunc(m.tags, func(r *Tag) bool {
return !slices.Contains(m.TagIDs, r.ID)
})
}
}

if val, ok := data["type"]; ok {
Expand Down
31 changes: 31 additions & 0 deletions pkg/models/assignment.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package models
import (
"encoding/json"
"fmt"
"slices"
"strconv"

"github.com/rs/zerolog/log"
Expand Down Expand Up @@ -331,13 +332,25 @@ func (m *Assignment) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["attachment_meeting_mediafile_ids"]; ok {
m.attachmentMeetingMediafiles = slices.DeleteFunc(m.attachmentMeetingMediafiles, func(r *MeetingMediafile) bool {
return !slices.Contains(m.AttachmentMeetingMediafileIDs, r.ID)
})
}
}

if val, ok := data["candidate_ids"]; ok {
err := json.Unmarshal([]byte(val), &m.CandidateIDs)
if err != nil {
return err
}

if _, ok := m.loadedRelations["candidate_ids"]; ok {
m.candidates = slices.DeleteFunc(m.candidates, func(r *AssignmentCandidate) bool {
return !slices.Contains(m.CandidateIDs, r.ID)
})
}
}

if val, ok := data["default_poll_description"]; ok {
Expand Down Expand Up @@ -401,13 +414,25 @@ func (m *Assignment) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["poll_ids"]; ok {
m.polls = slices.DeleteFunc(m.polls, func(r *Poll) bool {
return !slices.Contains(m.PollIDs, r.ID)
})
}
}

if val, ok := data["projection_ids"]; ok {
err := json.Unmarshal([]byte(val), &m.ProjectionIDs)
if err != nil {
return err
}

if _, ok := m.loadedRelations["projection_ids"]; ok {
m.projections = slices.DeleteFunc(m.projections, func(r *Projection) bool {
return !slices.Contains(m.ProjectionIDs, r.ID)
})
}
}

if val, ok := data["sequential_number"]; ok {
Expand All @@ -422,6 +447,12 @@ func (m *Assignment) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["tag_ids"]; ok {
m.tags = slices.DeleteFunc(m.tags, func(r *Tag) bool {
return !slices.Contains(m.TagIDs, r.ID)
})
}
}

if val, ok := data["title"]; ok {
Expand Down
19 changes: 19 additions & 0 deletions pkg/models/chat_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package models
import (
"encoding/json"
"fmt"
"slices"
"strconv"

"github.com/rs/zerolog/log"
Expand Down Expand Up @@ -191,6 +192,12 @@ func (m *ChatGroup) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["chat_message_ids"]; ok {
m.chatMessages = slices.DeleteFunc(m.chatMessages, func(r *ChatMessage) bool {
return !slices.Contains(m.ChatMessageIDs, r.ID)
})
}
}

if val, ok := data["id"]; ok {
Expand Down Expand Up @@ -219,6 +226,12 @@ func (m *ChatGroup) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["read_group_ids"]; ok {
m.readGroups = slices.DeleteFunc(m.readGroups, func(r *Group) bool {
return !slices.Contains(m.ReadGroupIDs, r.ID)
})
}
}

if val, ok := data["weight"]; ok {
Expand All @@ -233,6 +246,12 @@ func (m *ChatGroup) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["write_group_ids"]; ok {
m.writeGroups = slices.DeleteFunc(m.writeGroups, func(r *Group) bool {
return !slices.Contains(m.WriteGroupIDs, r.ID)
})
}
}

return nil
Expand Down
37 changes: 37 additions & 0 deletions pkg/models/committee.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package models
import (
"encoding/json"
"fmt"
"slices"
"strconv"

"github.com/rs/zerolog/log"
Expand Down Expand Up @@ -366,6 +367,12 @@ func (m *Committee) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["forward_to_committee_ids"]; ok {
m.forwardToCommittees = slices.DeleteFunc(m.forwardToCommittees, func(r *Committee) bool {
return !slices.Contains(m.ForwardToCommitteeIDs, r.ID)
})
}
}

if val, ok := data["forwarding_user_id"]; ok {
Expand All @@ -387,13 +394,25 @@ func (m *Committee) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["manager_ids"]; ok {
m.managers = slices.DeleteFunc(m.managers, func(r *User) bool {
return !slices.Contains(m.ManagerIDs, r.ID)
})
}
}

if val, ok := data["meeting_ids"]; ok {
err := json.Unmarshal([]byte(val), &m.MeetingIDs)
if err != nil {
return err
}

if _, ok := m.loadedRelations["meeting_ids"]; ok {
m.meetings = slices.DeleteFunc(m.meetings, func(r *Meeting) bool {
return !slices.Contains(m.MeetingIDs, r.ID)
})
}
}

if val, ok := data["name"]; ok {
Expand All @@ -415,20 +434,38 @@ func (m *Committee) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["organization_tag_ids"]; ok {
m.organizationTags = slices.DeleteFunc(m.organizationTags, func(r *OrganizationTag) bool {
return !slices.Contains(m.OrganizationTagIDs, r.ID)
})
}
}

if val, ok := data["receive_forwardings_from_committee_ids"]; ok {
err := json.Unmarshal([]byte(val), &m.ReceiveForwardingsFromCommitteeIDs)
if err != nil {
return err
}

if _, ok := m.loadedRelations["receive_forwardings_from_committee_ids"]; ok {
m.receiveForwardingsFromCommittees = slices.DeleteFunc(m.receiveForwardingsFromCommittees, func(r *Committee) bool {
return !slices.Contains(m.ReceiveForwardingsFromCommitteeIDs, r.ID)
})
}
}

if val, ok := data["user_ids"]; ok {
err := json.Unmarshal([]byte(val), &m.UserIDs)
if err != nil {
return err
}

if _, ok := m.loadedRelations["user_ids"]; ok {
m.users = slices.DeleteFunc(m.users, func(r *User) bool {
return !slices.Contains(m.UserIDs, r.ID)
})
}
}

return nil
Expand Down
7 changes: 7 additions & 0 deletions pkg/models/gender.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package models
import (
"encoding/json"
"fmt"
"slices"
"strconv"

"github.com/rs/zerolog/log"
Expand Down Expand Up @@ -147,6 +148,12 @@ func (m *Gender) Update(data map[string]string) error {
if err != nil {
return err
}

if _, ok := m.loadedRelations["user_ids"]; ok {
m.users = slices.DeleteFunc(m.users, func(r *User) bool {
return !slices.Contains(m.UserIDs, r.ID)
})
}
}

return nil
Expand Down
Loading

0 comments on commit f97f7ea

Please sign in to comment.