feat: implemented post exists check
This commit is contained in:
parent
c9f88ffb5d
commit
6930f05e0f
@ -30,3 +30,87 @@ func CreateAnthrovePostNode(ctx context.Context, driver neo4j.DriverWithContext,
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CheckIfAnthrovePostNodeExistsByAnthroveID(ctx context.Context, driver neo4j.DriverWithContext, anthrovePost *models.AnthrovePost) (*models.AnthrovePost, bool, error) {
|
||||||
|
query := `
|
||||||
|
OPTIONAL MATCH (postNode:AnthrovePost {post_id: $anthrove_post_id})
|
||||||
|
RETURN postNode.post_id AS AnthrovePostID
|
||||||
|
`
|
||||||
|
|
||||||
|
params := map[string]any{
|
||||||
|
"anthrove_post_id": anthrovePost.PostID,
|
||||||
|
}
|
||||||
|
|
||||||
|
anthrovePost, exists, err := executeCheckQuery(ctx, driver, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return anthrovePost, exists, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CheckIfAnthrovePostNodeExistsBySourceURl(ctx context.Context, driver neo4j.DriverWithContext, sourceUrl string) (*models.AnthrovePost, bool, error) {
|
||||||
|
query := `
|
||||||
|
OPTIONAL MATCH (postNode:AnthrovePost)<-[:REFERENCE {url: $source_url}]-()
|
||||||
|
RETURN postNode.post_id AS AnthrovePostID
|
||||||
|
`
|
||||||
|
|
||||||
|
params := map[string]any{
|
||||||
|
"source_url": sourceUrl,
|
||||||
|
}
|
||||||
|
anthrovePost, exists, err := executeCheckQuery(ctx, driver, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return anthrovePost, exists, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CheckIfAnthrovePostNodeExistsBySourceID(ctx context.Context, driver neo4j.DriverWithContext, sourcePostID string) (*models.AnthrovePost, bool, error) {
|
||||||
|
query := `
|
||||||
|
OPTIONAL MATCH (postNode:AnthrovePost)<-[:REFERENCE {source_post_id: $source_post_id}]-()
|
||||||
|
RETURN postNode.post_id AS AnthrovePostID
|
||||||
|
`
|
||||||
|
|
||||||
|
params := map[string]any{
|
||||||
|
"source_post_id": sourcePostID,
|
||||||
|
}
|
||||||
|
|
||||||
|
anthrovePost, exists, err := executeCheckQuery(ctx, driver, query, params)
|
||||||
|
if err != nil {
|
||||||
|
return nil, false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return anthrovePost, exists, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func executeCheckQuery(ctx context.Context, driver neo4j.DriverWithContext, query string, params map[string]any) (*models.AnthrovePost, bool, error) {
|
||||||
|
|
||||||
|
var anthrovePost models.AnthrovePost
|
||||||
|
|
||||||
|
result, err := neo4j.ExecuteQuery(ctx, driver, query, params, neo4j.EagerResultTransformer)
|
||||||
|
if err != nil {
|
||||||
|
return &anthrovePost, false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
record := result.Records
|
||||||
|
|
||||||
|
anthrovePostID, isNil, err := neo4j.GetRecordValue[string](record[0], "AnthrovePostID")
|
||||||
|
exists := !isNil
|
||||||
|
if err != nil {
|
||||||
|
return &anthrovePost, exists, err
|
||||||
|
}
|
||||||
|
|
||||||
|
anthrovePost.PostID = models.AnthrovePostID(anthrovePostID)
|
||||||
|
|
||||||
|
log.WithFields(log.Fields{
|
||||||
|
"anthrove_post_id": anthrovePost.PostID,
|
||||||
|
"anthrove_post_exists": exists,
|
||||||
|
}).Trace("graph: checked if post exists")
|
||||||
|
|
||||||
|
if !exists {
|
||||||
|
return nil, exists, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &anthrovePost, exists, nil
|
||||||
|
}
|
||||||
|
@ -32,13 +32,13 @@ type Graph interface {
|
|||||||
CheckUserPostLink(ctx context.Context, anthroveUserID models.AnthroveUserID, sourcePostID string, sourcePostUrl string) (bool, error)
|
CheckUserPostLink(ctx context.Context, anthroveUserID models.AnthroveUserID, sourcePostID string, sourcePostUrl string) (bool, error)
|
||||||
|
|
||||||
// CheckPostNodeExistsByAnthroveID checks if an Anthrove post node exists in the graph by its Anthrove ID
|
// CheckPostNodeExistsByAnthroveID checks if an Anthrove post node exists in the graph by its Anthrove ID
|
||||||
CheckPostNodeExistsByAnthroveID(ctx context.Context, anthrovePost *models.AnthrovePost) (bool, error)
|
CheckPostNodeExistsByAnthroveID(ctx context.Context, anthrovePost *models.AnthrovePost) (*models.AnthrovePost, bool, error)
|
||||||
|
|
||||||
// CheckPostNodeExistsBySourceURL checks if an Anthrove post node exists in the graph by its source URL
|
// CheckPostNodeExistsBySourceURL checks if an Anthrove post node exists in the graph by its source URL
|
||||||
CheckPostNodeExistsBySourceURL(ctx context.Context, anthroveSource *models.AnthroveSource) (bool, error)
|
CheckPostNodeExistsBySourceURL(ctx context.Context, sourceUrl string) (*models.AnthrovePost, bool, error)
|
||||||
|
|
||||||
// CheckPostNodeExistsBySourceID checks if an Anthrove post node exists in the graph by its source ID
|
// CheckPostNodeExistsBySourceID checks if an Anthrove post node exists in the graph by its source ID
|
||||||
CheckPostNodeExistsBySourceID(ctx context.Context, anthroveSource *models.AnthroveSource) (bool, error)
|
CheckPostNodeExistsBySourceID(ctx context.Context, sourcePostID string) (*models.AnthrovePost, bool, error)
|
||||||
|
|
||||||
// GetUserFavoriteCount retrieves the count of user's favorite posts
|
// GetUserFavoriteCount retrieves the count of user's favorite posts
|
||||||
GetUserFavoriteCount(ctx context.Context, anthroveUser *models.AnthroveUser) (int64, error)
|
GetUserFavoriteCount(ctx context.Context, anthroveUser *models.AnthroveUser) (int64, error)
|
||||||
|
15
pkg/impl.go
15
pkg/impl.go
@ -64,19 +64,16 @@ func (g *graphConnection) CheckUserPostLink(ctx context.Context, anthroveUserID
|
|||||||
return internal.CheckUserToPostLink(ctx, g.driver, anthroveUserID, sourcePostID, sourcePostUrl)
|
return internal.CheckUserToPostLink(ctx, g.driver, anthroveUserID, sourcePostID, sourcePostUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *graphConnection) CheckPostNodeExistsByAnthroveID(ctx context.Context, anthrovePost *models.AnthrovePost) (bool, error) {
|
func (g *graphConnection) CheckPostNodeExistsByAnthroveID(ctx context.Context, anthrovePost *models.AnthrovePost) (*models.AnthrovePost, bool, error) {
|
||||||
//TODO implement me
|
return internal.CheckIfAnthrovePostNodeExistsByAnthroveID(ctx, g.driver, anthrovePost)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *graphConnection) CheckPostNodeExistsBySourceURL(ctx context.Context, anthroveSource *models.AnthroveSource) (bool, error) {
|
func (g *graphConnection) CheckPostNodeExistsBySourceURL(ctx context.Context, sourceUrl string) (*models.AnthrovePost, bool, error) {
|
||||||
//TODO implement me
|
return internal.CheckIfAnthrovePostNodeExistsBySourceURl(ctx, g.driver, sourceUrl)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *graphConnection) CheckPostNodeExistsBySourceID(ctx context.Context, anthroveSource *models.AnthroveSource) (bool, error) {
|
func (g *graphConnection) CheckPostNodeExistsBySourceID(ctx context.Context, sourcePostID string) (*models.AnthrovePost, bool, error) {
|
||||||
//TODO implement me
|
return internal.CheckIfAnthrovePostNodeExistsBySourceID(ctx, g.driver, sourcePostID)
|
||||||
panic("implement me")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *graphConnection) GetUserFavoriteCount(ctx context.Context, anthroveUser *models.AnthroveUser) (int64, error) {
|
func (g *graphConnection) GetUserFavoriteCount(ctx context.Context, anthroveUser *models.AnthroveUser) (int64, error) {
|
||||||
|
Reference in New Issue
Block a user