feat: implemented getting entire anthrove user
This commit is contained in:
parent
02733498b9
commit
8d8ee83180
@ -3,6 +3,7 @@ package internal
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"git.dragse.it/anthrove/anthrove-graph-sdk.git/internal/utils"
|
||||||
|
|
||||||
"git.dragse.it/anthrove/anthrove-graph-sdk.git/pkg/models"
|
"git.dragse.it/anthrove/anthrove-graph-sdk.git/pkg/models"
|
||||||
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
|
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
|
||||||
@ -144,3 +145,67 @@ func GetUserSourceLink(ctx context.Context, driver neo4j.DriverWithContext, anth
|
|||||||
|
|
||||||
return userSource, nil
|
return userSource, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetAnthroveUser(ctx context.Context, driver neo4j.DriverWithContext, anthroveUserID models.AnthroveUserID) (*models.AnthroveUser, error) {
|
||||||
|
var err error
|
||||||
|
var anthroveUser models.AnthroveUser
|
||||||
|
var userSources models.AnthroveSource
|
||||||
|
userRelationships := make([]models.AnthroveUserRelationship, 0)
|
||||||
|
|
||||||
|
query := `
|
||||||
|
MATCH (user:User{user_id: $anthrove_user_id})-[relation:HAS_ACCOUNT_AT]->(source:Source)
|
||||||
|
RETURN user as User, relation as Relation, source as Source;
|
||||||
|
`
|
||||||
|
params := map[string]any{
|
||||||
|
"anthrove_user_id": anthroveUserID,
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := neo4j.ExecuteQuery(ctx, driver, query, params, neo4j.EagerResultTransformer)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(result.Records) == 0 {
|
||||||
|
return nil, fmt.Errorf("user has no relations")
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range result.Records {
|
||||||
|
record := result.Records[i]
|
||||||
|
|
||||||
|
user, _, err := neo4j.GetRecordValue[neo4j.Node](record, "User")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
relation, _, err := neo4j.GetRecordValue[neo4j.Relationship](record, "Relation")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
source, _, err := neo4j.GetRecordValue[neo4j.Node](record, "Source")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
userRelationships = append(userRelationships, models.AnthroveUserRelationship{
|
||||||
|
UserID: fmt.Sprintf("%v", utils.GetOrDefault(relation.Props, "user_id", "")),
|
||||||
|
Username: utils.GetOrDefault(relation.Props, "username", "").(string),
|
||||||
|
ScrapeTimeInterval: utils.GetOrDefault(relation.Props, "scrape_time_interval", "").(string),
|
||||||
|
})
|
||||||
|
|
||||||
|
userSources = models.AnthroveSource{
|
||||||
|
DisplayName: utils.GetOrDefault(source.Props, "display_name", "").(string),
|
||||||
|
Domain: utils.GetOrDefault(source.Props, "domain", "").(string),
|
||||||
|
Icon: utils.GetOrDefault(source.Props, "icon", "").(string),
|
||||||
|
}
|
||||||
|
|
||||||
|
anthroveUser.UserID = models.AnthroveUserID(utils.GetOrDefault(user.Props, "user_id", "").(string))
|
||||||
|
anthroveUser.Relationship = userRelationships
|
||||||
|
|
||||||
|
for j := range userRelationships {
|
||||||
|
anthroveUser.Relationship[j].Source = userSources
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return &anthroveUser, nil
|
||||||
|
|
||||||
|
}
|
||||||
|
11
internal/utils/slices.go
Normal file
11
internal/utils/slices.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
func GetOrDefault(data map[string]any, key string, defaultVal any) any {
|
||||||
|
val, ok := data[key]
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
|
|
||||||
|
return val
|
||||||
|
}
|
@ -47,7 +47,7 @@ type Graph interface {
|
|||||||
GetUserSourceLinks(ctx context.Context, anthroveUserID models.AnthroveUserID) (map[string]models.AnthroveUserRelationship, error)
|
GetUserSourceLinks(ctx context.Context, anthroveUserID models.AnthroveUserID) (map[string]models.AnthroveUserRelationship, error)
|
||||||
|
|
||||||
// GetAnthroveUser retrieves an Anthrove user from the graph by their ID
|
// GetAnthroveUser retrieves an Anthrove user from the graph by their ID
|
||||||
GetAnthroveUser(ctx context.Context, anthroveUser *models.AnthroveUser) (*models.AnthroveUser, error)
|
GetAnthroveUser(ctx context.Context, anthroveUserID models.AnthroveUserID) (*models.AnthroveUser, error)
|
||||||
|
|
||||||
// GetAllAnthroveUserIDs retrieves all Anthrove user IDs from the graph
|
// GetAllAnthroveUserIDs retrieves all Anthrove user IDs from the graph
|
||||||
GetAllAnthroveUserIDs(ctx context.Context) ([]models.AnthroveUserID, error)
|
GetAllAnthroveUserIDs(ctx context.Context) ([]models.AnthroveUserID, error)
|
||||||
|
@ -84,9 +84,8 @@ func (g *graphConnection) GetUserSourceLinks(ctx context.Context, anthroveUserID
|
|||||||
return internal.GetUserSourceLink(ctx, g.driver, anthroveUserID)
|
return internal.GetUserSourceLink(ctx, g.driver, anthroveUserID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *graphConnection) GetAnthroveUser(ctx context.Context, anthroveUser *models.AnthroveUser) (*models.AnthroveUser, error) {
|
func (g *graphConnection) GetAnthroveUser(ctx context.Context, anthroveUserID models.AnthroveUserID) (*models.AnthroveUser, error) {
|
||||||
//TODO implement me
|
return internal.GetAnthroveUser(ctx, g.driver, anthroveUserID)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *graphConnection) GetAllAnthroveUserIDs(ctx context.Context) ([]models.AnthroveUserID, error) {
|
func (g *graphConnection) GetAllAnthroveUserIDs(ctx context.Context) ([]models.AnthroveUserID, error) {
|
||||||
|
Reference in New Issue
Block a user