SoXX
3be16a9277
First implementation of the new algorithm that got proposed in issue #5 Reviewed-on: anthrove/e621-to-graph#20 Reviewed-by: Lennard Brinkhaus <lennard.brinkhaus@noreply.localhost> Reviewed-by: daskadse <daskadse@noreply.localhost> Co-authored-by: SoXX <soxx@fenpa.ws> Co-committed-by: SoXX <soxx@fenpa.ws>
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package neo4j
|
|
|
|
import (
|
|
"context"
|
|
"git.dragse.it/anthrove/e621-sdk-go/pkg/e621/model"
|
|
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
|
|
)
|
|
|
|
func CreateUserNode(ctx context.Context, driver neo4j.DriverWithContext, user model.User) error {
|
|
query := `
|
|
MERGE (u:e621User {e621ID: $id, e621Username: $name});
|
|
`
|
|
params := map[string]interface{}{
|
|
"id": user.ID,
|
|
"name": user.Name,
|
|
}
|
|
|
|
_, err := neo4j.ExecuteQuery(ctx, driver, query, params, neo4j.EagerResultTransformer)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func GetUserFavoritesCount(ctx context.Context, driver neo4j.DriverWithContext, userID model.UserID) (int64, error) {
|
|
var userFavoriteCount int64
|
|
|
|
query := `
|
|
MATCH (:e621User {e621ID: $userID})-[:IS_FAVORITE]->(:e621Post)
|
|
RETURN count(*) AS numberOfFavoritedPosts;
|
|
`
|
|
params := map[string]interface{}{
|
|
"userID": userID,
|
|
}
|
|
|
|
result, err := neo4j.ExecuteQuery(ctx, driver, query, params, neo4j.EagerResultTransformer)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
if len(result.Records) == 0 {
|
|
// no matches -> user does not exist, return count 0
|
|
return userFavoriteCount, err
|
|
}
|
|
|
|
record := result.Records[0]
|
|
|
|
userFavoriteCount, _, err = neo4j.GetRecordValue[int64](record, "numberOfFavoritedPosts")
|
|
if err != nil {
|
|
return userFavoriteCount, err
|
|
}
|
|
|
|
return userFavoriteCount, nil
|
|
}
|