Enforce at least one owner

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2026-01-05 16:15:48 +01:00
parent 9936df64d9
commit 5c64e304e8
4 changed files with 69 additions and 0 deletions

View File

@@ -21,6 +21,8 @@ import (
type MembershipFilter struct {
email *mail.Addr
role *MembershipRole
state *MembershipState
}
func NewMembershipFilter() *MembershipFilter {
@@ -36,9 +38,29 @@ func (f *MembershipFilter) Email() *mail.Addr {
return f.email
}
func (f *MembershipFilter) WithRole(role MembershipRole) *MembershipFilter {
f.role = &role
return f
}
func (f *MembershipFilter) Role() *MembershipRole {
return f.role
}
func (f *MembershipFilter) WithState(state MembershipState) *MembershipFilter {
f.state = &state
return f
}
func (f *MembershipFilter) State() *MembershipState {
return f.state
}
func (f *MembershipFilter) SQLArguments() pgx.StrictNamedArgs {
return pgx.StrictNamedArgs{
"filter_email": f.email,
"filter_role": f.role,
"filter_state": f.state,
}
}
@@ -50,5 +72,19 @@ func (f *MembershipFilter) SQLFragment() string {
i.email_address = @filter_email::text
ELSE TRUE
END
)
AND (
CASE
WHEN @filter_role::text IS NOT NULL THEN
m.role = @filter_role::authz_role
ELSE TRUE
END
)
AND (
CASE
WHEN @filter_state::text IS NOT NULL THEN
m.state = @filter_state::membership_state
ELSE TRUE
END
)`
}