Distinguish auth/lookup failures, make votes idempotent on visible questions, bound shutdown, page admin users, LRU throttle, trusted-proxy CIDRs, avatar cleanup, versioned migrations, and session cleanup logging.
43 lines
1.6 KiB
Go
43 lines
1.6 KiB
Go
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
|
|
|
|
CreateQuestion(ctx context.Context, q *RankedQuestion) error
|
|
GetQuestion(ctx context.Context, id, viewerID string) (*RankedQuestion, error)
|
|
ListHunt(ctx context.Context, huntDate, viewerID string) ([]RankedQuestion, error)
|
|
ListQuestionsByAuthor(ctx context.Context, authorID string) ([]RankedQuestion, error)
|
|
ListQuestionsAnsweredBy(ctx context.Context, adminID string) ([]RankedQuestion, error)
|
|
HideQuestion(ctx context.Context, id string) error
|
|
|
|
GetAnswer(ctx context.Context, questionID string) (*Answer, error)
|
|
UpsertAnswer(ctx context.Context, a *Answer) error
|
|
|
|
// Vote sets the vote to 1, -1, or 0 (clear) on a visible question.
|
|
Vote(ctx context.Context, userID, questionID string, value int) error
|
|
}
|