package models // A relation between two accounts // There may be multiple relations from an account X to an account Y, // each describing a different aspect type UserToUserRelation struct { ID uint64 `gorm:"primarykey"` User User // The user X described in [RelationType] UserId string TargetUser User // The user Y described in [RelationType] TargetUserId string Relation string // `gorm:"type:relation_type"` } type IUserToUserRelation interface { // Get all inbox links for accounts following the user with the specified id // // SELECT u.inbox_link // FROM user_to_user_relations r // LEFT JOIN user_remote_links u // ON r.user_id = u.user_id // WHERE // r.target_user_id = @id AND // r.relation = 'follow' GetFollowerInboxesForId(id string) ([]string, error) // Get all Ids of the accounts following the user with the specified id // // SELECT u.ap_link // FROM user_to_user_relations r // LEFT JOIN user_remote_links u // ON r.user_id = u.user_id // WHERE // r.target_user_id = @id AND // r.relation = 'follow' // LIMIT 50 // OFFSET @page * 50 GetFollowerApLinksPagedForId(id string, page int) ([]string, error) // Get all Ids of the accounts followed by the user with the specified id // // SELECT u.ap_link // FROM user_to_user_relations r // LEFT JOIN user_remote_links u // ON r.user_id = u.user_id // WHERE // r.user_id = @id AND // r.relation = 'follow' // LIMIT 50 // OFFSET @page * 50 GetFollowingApLinksPagedForId(id string, page int) ([]string, error) // Count the accounts following the user with the specified id // // SELECT COUNT(*) // FROM user_to_user_relations r // WHERE // r.target_user_id = @id AND // r.relation = 'follow' CountFollowersForId(id string) (int, error) // Count the accounts following the user with the specified id // // SELECT COUNT(*) // FROM user_to_user_relations r // WHERE // r.user_id = @id AND // r.relation = 'follow' CountFollowingForId(id string) (int, error) // Get the ids of all local accounts following the user with the target id // // SELECT // r.user_id // FROM // user_to_user_relations r // LEFT JOIN users u ON r.user_id = u.id // LEFT JOIN remote_servers s ON u.server_id = s.id // WHERE // s.is_self = true // AND r.target_user_id = @id; GetLocalFollowerIdsOfId(id string) ([]string, error) }