package neo4jAPI import ( "context" "e621_to_neo4j/neo4jAPI/models" "github.com/neo4j/neo4j-go-driver/v5/neo4j" ) func CreateTagNode(ctx context.Context, driver neo4j.DriverWithContext, name string, tagType string) error { query := ` MERGE (u:e621Tag {e621Tag: $name, e621TagType: $tagType}) RETURN u ` params := map[string]interface{}{ "name": name, "tagType": tagType, } _, err := neo4j.ExecuteQuery(ctx, driver, query, params, neo4j.EagerResultTransformer) if err != nil { return err } return nil } func CreateTagNode2(ctx context.Context, driver neo4j.DriverWithContext, name string, tagType string) error { session := driver.NewSession(ctx, neo4j.SessionConfig{AccessMode: neo4j.AccessModeWrite}) defer session.Close(ctx) query := ` MERGE (u:e621Tag {e621Tag: $name, e621TagType: $tagType}) RETURN u ` params := map[string]interface{}{ "name": name, "tagType": tagType, } _, err := session.ExecuteWrite(ctx, func(tx neo4j.ManagedTransaction) (any, error) { result, err := tx.Run(ctx, query, params) if err != nil { return nil, err } return result.Consume(ctx) }) return err } func GetAllTagNodes(ctx context.Context, driver neo4j.DriverWithContext, tagType string) ([]string, error) { query := ` MATCH (u:e621Tag {e621TagType: $tagType}) RETURN u.e621Tag as eTag ` params := map[string]interface{}{ "tagType": tagType, } result, err := neo4j.ExecuteQuery(ctx, driver, query, params, neo4j.EagerResultTransformer) if err != nil { return nil, err } var tags []string for _, record := range result.Records { tag, _, _ := neo4j.GetRecordValue[string](record, "eTag") tags = append(tags, tag) } return tags, nil } func GetTagNode(ctx context.Context, driver neo4j.DriverWithContext, name string) (models.DBTag, bool, error) { var tag models.DBTag query := ` MATCH (u:e621Tag {e621Tag: $name}) RETURN u.e621Tag as e621Tag, u.e621TagType as e621TagType ` params := map[string]interface{}{ "name": name, } result, err := neo4j.ExecuteQuery(ctx, driver, query, params, neo4j.EagerResultTransformer) if err != nil { return tag, false, err } if len(result.Records) > 0 { record := result.Records[0] e621Tag, _, _ := neo4j.GetRecordValue[string](record, "e621Tag") e621TagType, _, _ := neo4j.GetRecordValue[string](record, "e621TagType") tag = models.DBTag{ Tag: e621Tag, TagType: e621TagType, } if e621Tag != name { return tag, false, nil } return tag, true, nil } return tag, false, err }