package members import ( "context" "galo/internal/models" ) // Repository is the persistence contract for the members domain. type Repository interface { Role(ctx context.Context, albumID, userID string) (string, error) List(ctx context.Context, albumID string) ([]models.AlbumMember, error) // Audience returns the ids of every user the album is visible to: the owner // plus all members. It resolves the set without joining users, so it stays // cheap enough to call for every published album event. Audience(ctx context.Context, albumID string) ([]string, error) Add(ctx context.Context, albumID, userID, role string, invitedBy *string) error UpdateRole(ctx context.Context, albumID, userID, role string) error Remove(ctx context.Context, albumID, userID string) error CreateInvite(ctx context.Context, inv *models.Invite) error GetInviteByToken(ctx context.Context, token string) (*models.Invite, error) IncrementUses(ctx context.Context, id string) error }