package postgres import ( "context" "git.dragse.it/anthrove/otter-space-sdk/pkg/models" "git.dragse.it/anthrove/otter-space-sdk/pkg/models/pgModels" log "github.com/sirupsen/logrus" "gorm.io/gorm" ) func EstablishAnthrovePostToSourceLink(ctx context.Context, db *gorm.DB, anthrovePostID models.AnthrovePostID, anthroveSourceDomain string) error { var source pgModels.Source var err error // Find the source err = db.WithContext(ctx).Where("domain = ?", anthroveSourceDomain).First(&source).Error if err != nil { return err } // Establish the relationship err = db.WithContext(ctx).Create(pgModels.PostReference{ PostID: string(anthrovePostID), SourceID: source.ID, }).Error if err != nil { return err } log.WithFields(log.Fields{ "anthrove_post_id": anthrovePostID, "anthrove_source_domain": anthroveSourceDomain, }).Trace("database: created anthrove post to source link") return nil } func EstablishUserToPostLink(ctx context.Context, db *gorm.DB, anthroveUserID models.AnthroveUserID, anthrovePostID models.AnthrovePostID) error { userFavorite := pgModels.UserFavorite{ UserID: string(anthroveUserID), PostID: string(anthrovePostID), } err := db.WithContext(ctx).Create(&userFavorite).Error if err != nil { return err } log.WithFields(log.Fields{ "anthrove_user_id": anthroveUserID, "anthrove_post_id": anthrovePostID, }).Trace("database: created user to post link") return nil } func CheckUserToPostLink(ctx context.Context, db *gorm.DB, anthroveUserID models.AnthroveUserID, anthrovePostID models.AnthrovePostID) (bool, error) { var count int64 err := db.WithContext(ctx).Model(&pgModels.UserFavorite{}).Where("user_id = ? AND post_id = ?", string(anthroveUserID), string(anthrovePostID)).Count(&count).Error if err != nil { return false, err } exists := count > 0 log.WithFields(log.Fields{ "relationship_exists": exists, "relationship_anthrove_user_id": anthroveUserID, "relationship_anthrove_post_id": anthrovePostID, }).Trace("database: checked user post relationship") return exists, nil }