linstrom/storage-new/models/UserToUserRelation.go

87 lines
2.5 KiB
Go

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 {
// FIXME: Include local users in these queries
// Currently local users don't have an entry in user_remote_links
// causing them to be ignored by these functions as of now
// 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)
}