From 6b41ce5f49fa6dfccdcb8d42ce39a928e1e69d7e Mon Sep 17 00:00:00 2001 From: Vargha Csongor Date: Sun, 30 Mar 2025 21:59:41 +0200 Subject: [PATCH] rm old stuff --- .../internal/memgraph/delete_person.go | 27 -- apps/db-adapter/internal/memgraph/model.go | 272 ------------------ .../internal/memgraph/model_test.go | 77 ----- .../internal/memgraph/update_person.go | 30 -- 4 files changed, 406 deletions(-) delete mode 100644 apps/db-adapter/internal/memgraph/delete_person.go delete mode 100644 apps/db-adapter/internal/memgraph/model.go delete mode 100644 apps/db-adapter/internal/memgraph/model_test.go delete mode 100644 apps/db-adapter/internal/memgraph/update_person.go diff --git a/apps/db-adapter/internal/memgraph/delete_person.go b/apps/db-adapter/internal/memgraph/delete_person.go deleted file mode 100644 index 19dd24e..0000000 --- a/apps/db-adapter/internal/memgraph/delete_person.go +++ /dev/null @@ -1,27 +0,0 @@ -package memgraph - -import ( - "fmt" - "time" - - "github.com/neo4j/neo4j-go-driver/v5/neo4j" - "golang.org/x/net/context" -) - -func (p *Person) DeletePerson(driver neo4j.DriverWithContext) error { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - session := driver.NewSession(ctx, neo4j.SessionConfig{AccessMode: neo4j.AccessModeWrite}) - defer session.Close(ctx) - - if err := p.Verify(); err != nil { - return err - } - - query := fmt.Sprintf("MATCH (n:Person {id: '%s'}) DELETE n;", p.ID) - - _, err := session.Run(ctx, query, nil) - - return err -} diff --git a/apps/db-adapter/internal/memgraph/model.go b/apps/db-adapter/internal/memgraph/model.go deleted file mode 100644 index 4a6c039..0000000 --- a/apps/db-adapter/internal/memgraph/model.go +++ /dev/null @@ -1,272 +0,0 @@ -package memgraph - -import ( - "fmt" - "time" -) - -var RelationshipTypes = []string{ - "Parent", - "Child", - "Spouse", - "Sibling", -} - -type Person struct { - ID string `json:"id"` - Firstname string `json:"first_name"` - Middlename string `json:"middle_name"` - Lastname string `json:"last_name"` - Titles []string `json:"titles"` // e.g. Jr., Sr., III - Suffixes []string `json:"suffixes"` // e.g. Ph.D., M.D. - ExtraNames []string `json:"extra_names"` - Aliases []string `json:"aliases"` - MothersFirstname string `json:"mothers_first_name"` - MothersLastname string `json:"mothers_last_name"` - Born time.Time `json:"born"` - Birthplace string `json:"birthplace"` - Residence string `json:"residence"` - Death time.Time `json:"death"` - Deathplace string `json:"deathplace"` - LifeEvents []map[string]string `json:"life_events"` - Occupations []string `json:"occupation"` - OccupationToDisplay string `json:"occupation_to_display"` - OthersSaid map[string]string `json:"others_said"` - Photos map[string]string `json:"photos"` - ProfilePicture string `json:"profile_picture"` - verified bool -} - -func (p *Person) ToString() string { - result := fmt.Sprintf("id: '%s'", p.ID) - if p.Firstname != "" { - result = fmt.Sprintf("%s, first_name: '%s'", result, p.Firstname) - } - if p.Lastname != "" { - result = fmt.Sprintf("%s, last_name: '%s'", result, p.Lastname) - } - if p.Middlename != "" { - result = fmt.Sprintf("%s, middle_name: '%s'", result, p.Middlename) - } - if p.MothersFirstname != "" { - result = fmt.Sprintf("%s, mothers_first_name: '%s'", result, p.MothersFirstname) - } - if p.MothersLastname != "" { - result = fmt.Sprintf("%s, mothers_last_name: '%s'", result, p.MothersLastname) - } - if !p.Born.IsZero() { - result = fmt.Sprintf("%s, born: date({year:%d, month:%d, day:%d})", result, p.Born.Year(), p.Born.Month(), p.Born.Day()) - } - if !p.Death.IsZero() { - result = fmt.Sprintf("%s, death: date({year:%d, month:%d, day:%d})", result, p.Death.Year(), p.Death.Month(), p.Death.Day()) - } - if p.Birthplace != "" { - result = fmt.Sprintf("%s, birthplace: '%s'", result, p.Birthplace) - } - if p.Residence != "" { - result = fmt.Sprintf("%s, residence: '%s'", result, p.Residence) - } - if p.Deathplace != "" { - result = fmt.Sprintf("%s, deathplace: '%s'", result, p.Deathplace) - } - if p.OccupationToDisplay != "" { - result = fmt.Sprintf("%s, occupation_to_display: '%s'", result, p.OccupationToDisplay) - } - if p.ProfilePicture != "" { - result = fmt.Sprintf("%s, profile_picture: '%s'", result, p.ProfilePicture) - } - - if p.Titles != nil && len(p.Titles) > 0 { - result = fmt.Sprintf("%s, titles: [", result) - for _, title := range p.Titles { - result = fmt.Sprintf("%s'%s', ", result, title) - } - result = fmt.Sprintf("%s]", result[:len(result)-2]) - } - - if p.Suffixes != nil && len(p.Suffixes) > 0 { - result = fmt.Sprintf("%s, suffixes: [", result) - for _, suffix := range p.Suffixes { - result = fmt.Sprintf("%s'%s', ", result, suffix) - } - result = fmt.Sprintf("%s]", result[:len(result)-2]) - } - - if p.ExtraNames != nil && len(p.ExtraNames) > 0 { - result = fmt.Sprintf("%s, extra_names: [", result) - for _, extraName := range p.ExtraNames { - result = fmt.Sprintf("%s'%s', ", result, extraName) - } - result = fmt.Sprintf("%s]", result[:len(result)-2]) - } - - if p.Aliases != nil && len(p.Aliases) > 0 { - result = fmt.Sprintf("%s, aliases: [", result) - for _, alias := range p.Aliases { - result = fmt.Sprintf("%s'%s', ", result, alias) - } - result = fmt.Sprintf("%s]", result[:len(result)-2]) - } - - if p.LifeEvents != nil && len(p.LifeEvents) > 0 { - result = fmt.Sprintf("%s, life_events: [", result) - for i := 0; i < len(p.LifeEvents); i++ { - date, dok := p.LifeEvents[i]["date"] - event, eok := p.LifeEvents[i]["event"] - if dok && eok { - result = fmt.Sprintf("%s{date: '%s', event: '%s'}, ", result, date, event) - } - } - result = fmt.Sprintf("%s]", result[:len(result)-2]) - } - - if p.Occupations != nil && len(p.Occupations) > 0 { - result = fmt.Sprintf("%s, occupations: [", result) - - for _, occupation := range p.Occupations { - result = fmt.Sprintf("%s'%s', ", result, occupation) - } - - result = fmt.Sprintf("%s]", result[:len(result)-2]) - } - - if p.OthersSaid != nil { - result = fmt.Sprintf("%s, others_said: {", result) - for key, value := range p.OthersSaid { - result = fmt.Sprintf("%s%s: '%s', ", result, key, value) - } - result = fmt.Sprintf("%s}", result[:len(result)-2]) - } - - if p.Photos != nil && len(p.Photos) > 0 { - result = fmt.Sprintf("%s, photos: {", result) - for key, value := range p.Photos { - result = fmt.Sprintf("%s%s: '%s', ", result, key, value) - } - result = fmt.Sprintf("%s}", result[:len(result)-2]) - } - - return result -} - -// Verify checks if the person is valid and does not contain cypher injection it also escapes the delimiters contained in any of the strings -func (p *Person) Verify() error { - if p.verified { - return nil - } - if err := VerifyString(p.ID); err != nil { - return fmt.Errorf("invalid ID type %s", err) - } - - p.Firstname = EscapeString(p.Firstname) - p.Middlename = EscapeString(p.Middlename) - p.Lastname = EscapeString(p.Lastname) - p.MothersFirstname = EscapeString(p.MothersFirstname) - p.MothersLastname = EscapeString(p.MothersLastname) - p.Birthplace = EscapeString(p.Birthplace) - p.Residence = EscapeString(p.Residence) - p.Deathplace = EscapeString(p.Deathplace) - p.OccupationToDisplay = EscapeString(p.OccupationToDisplay) - p.ProfilePicture = EscapeString(p.ProfilePicture) - - for i, title := range p.Titles { - p.Titles[i] = EscapeString(title) - } - - for i, suffix := range p.Suffixes { - p.Suffixes[i] = EscapeString(suffix) - } - - for i, extraName := range p.ExtraNames { - p.ExtraNames[i] = EscapeString(extraName) - } - - for i, alias := range p.Aliases { - p.Aliases[i] = EscapeString(alias) - } - - for i, lifeEvent := range p.LifeEvents { - for key, value := range lifeEvent { - if key != "date" && key != "event" { - return fmt.Errorf("invalid key in life event") - } - p.LifeEvents[i][key] = EscapeString(value) - } - } - - for i, occupation := range p.Occupations { - p.Occupations[i] = EscapeString(occupation) - } - - for key, value := range p.OthersSaid { - if err := VerifyString(key); err != nil { - return fmt.Errorf("invalid key in others said %s", err) - } - p.OthersSaid[key] = EscapeString(value) - } - - for key, value := range p.Photos { - if err := VerifyString(key); err != nil { - return fmt.Errorf("invalid key in photos %s", err) - } - p.Photos[key] = EscapeString(value) - } - - p.verified = true - - return nil -} - -type Relationship struct { - FirstPersonID string `json:"first_person_id"` - SecondPersonID string `json:"second_person_id"` - Relationship string `json:"relationship"` - Direction string `json:"direction"` -} - -// Verify checks if the relationship is valid and does not contain cypher injection -func (r *Relationship) Verify() error { - if r.Direction != "->" && r.Direction != "<-" && r.Direction != "-" { - return fmt.Errorf("invalid direction for relationship") - } - - // Check if the relationship is in the list of valid relationships - found := false - for _, relationship := range RelationshipTypes { - if r.Relationship == relationship { - found = true - - break - } - } - if !found { - return fmt.Errorf("invalid relationship type") - } - - if err := VerifyString(r.FirstPersonID); err != nil { - return fmt.Errorf("invalid FirstPersonID type %s", err) - } - - if err := VerifyString(r.SecondPersonID); err != nil { - return fmt.Errorf("invalid SecondPersonID type %s", err) - } - - return nil -} - -type RelationshipAndPerson struct { - Relationship Relationship `json:"relationship"` - Person Person `json:"person"` -} - -func (r *RelationshipAndPerson) Verify() error { - if err := r.Relationship.Verify(); err != nil { - return err - } - - if err := r.Person.Verify(); err != nil { - return err - } - - return nil -} diff --git a/apps/db-adapter/internal/memgraph/model_test.go b/apps/db-adapter/internal/memgraph/model_test.go deleted file mode 100644 index 0b47c0a..0000000 --- a/apps/db-adapter/internal/memgraph/model_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package memgraph - -import ( - "testing" - "time" -) - -func TestPerson_ToString(t *testing.T) { - tests := []struct { - name string - p *Person - want string - }{ - { - name: "Test with nil values", - p: &Person{ - ID: "1", - Firstname: "John", - Lastname: "Doe", - MothersFirstname: "Jane", - MothersLastname: "Doe", - Born: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), - Birthplace: "New York", - Residence: "New York", - Death: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), - Deathplace: "New York", - }, - want: "ID: '1', Firstname: 'John', Lastname: 'Doe', MothersFirstname: 'Jane', MothersLastname: 'Doe', Born: date({year:2021, month:1, day:1}), Death: date({year:2021, month:1, day:1}), Birthplace: 'New York', Residence: 'New York', Deathplace: 'New York', OccupationToDisplay: '', ProfilePicture: ''", - }, { - name: "Test with All values", - p: &Person{ - ID: "1", - Firstname: "John", - Lastname: "Doe", - MothersFirstname: "Jane", - MothersLastname: "Doe", - Born: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), - Birthplace: "New York", - Residence: "New York", - Death: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), - Deathplace: "New York", - LifeEvents: []map[string]string{ - { - "date": "2021-01-01", - "event": "Event 1", - }, - { - "date": "2021-01-02", - "event": "Event 2", - }, - }, - Occupations: []string{ - "Welder", - "Plumber", - }, - OccupationToDisplay: "Welder", - OthersSaid: map[string]string{ - "Beni": "He is a good person", - "Jani": "He is a bad person", - }, - Photos: map[string]string{ - "Profile": "profile.jpg", - "Family": "family.jpg", - }, - ProfilePicture: "profile.jpg", - }, - want: "ID: '1', Firstname: 'John', Lastname: 'Doe', MothersFirstname: 'Jane', MothersLastname: 'Doe', Born: date({year:2021, month:1, day:1}), Death: date({year:2021, month:1, day:1}), Birthplace: 'New York', Residence: 'New York', Deathplace: 'New York', OccupationToDisplay: 'Welder', ProfilePicture: 'profile.jpg', LifeEvents: [{date: '2021-01-01', event: 'Event 1'}, {date: '2021-01-02', event: 'Event 2'}], Occupations: ['Welder', 'Plumber'], OthersSaid: {Beni: 'He is a good person', Jani: 'He is a bad person'}, Photos: {Profile: 'profile.jpg', Family: 'family.jpg'}", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := tt.p.ToString(); got != tt.want { - t.Errorf("Person.ToString() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/apps/db-adapter/internal/memgraph/update_person.go b/apps/db-adapter/internal/memgraph/update_person.go deleted file mode 100644 index 94fb9e4..0000000 --- a/apps/db-adapter/internal/memgraph/update_person.go +++ /dev/null @@ -1,30 +0,0 @@ -package memgraph - -import ( - "fmt" - "time" - - "github.com/neo4j/neo4j-go-driver/v5/neo4j" - "golang.org/x/net/context" -) - -func (p *Person) UpdatePerson(driver neo4j.DriverWithContext) (*neo4j.Record, error) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - session := driver.NewSession(ctx, neo4j.SessionConfig{AccessMode: neo4j.AccessModeWrite}) - defer session.Close(ctx) - - if err := p.Verify(); err != nil { - return nil, err - } - - query := fmt.Sprintf("MATCH (n:Person {id: '%s'}) SET n += {%s} RETURN n;", p.ID, p.ToString()) - - result, err := session.Run(ctx, query, nil) - if err != nil { - return nil, err - } - - return result.Single(ctx) -}