package store import "context" // List row caps keep hunt/profile/admin pages bounded. const ( HuntListLimit = 100 ProfileListLimit = 50 AdminUsersLimit = 50 ) // ListUsersQuery is a paginated admin user search. type ListUsersQuery struct { Search string CursorCreated string CursorID string Limit int } // Store is the application persistence API used by the web layer. type Store interface { CreateUser(ctx context.Context, u *User) error UserByID(ctx context.Context, id string) (*User, error) UserByUsername(ctx context.Context, username string) (*User, error) ListUsers(ctx context.Context, q ListUsersQuery) (users []User, nextCursorCreated, nextCursorID string, err error) CountAdmins(ctx context.Context) (int, error) SetUserRole(ctx context.Context, id string, role Role) error SaveUserProfile(ctx context.Context, u *User) error CreatePost(ctx context.Context, post *Post) error GetPost(ctx context.Context, id string) (*Post, error) GetPostThread(ctx context.Context, rootID string) (*Post, error) GetPostThreadForViewer(ctx context.Context, rootID, viewerID string) (*Post, error) UpdatePost(ctx context.Context, post *Post) error ListRootPosts(ctx context.Context, postDate, viewerID string) ([]Post, error) ListRootPostsByAuthor(ctx context.Context, authorID string) ([]Post, error) ListRootPostsAnsweredBy(ctx context.Context, adminID string) ([]Post, error) SetRootPostState(ctx context.Context, id string, state PostState) error VotePost(ctx context.Context, userID, postID string, value int) error }