Files

40 lines
870 B
Go

package membership
import (
"context"
"database/sql"
"errors"
"proxui/backend/internal/rbac"
)
type Repository struct {
db *sql.DB
}
func NewRepository(db *sql.DB) Repository {
return Repository{db: db}
}
func (r Repository) ResolveTenantMembership(ctx context.Context, profileID string, tenantID string) (Membership, bool, error) {
var membership Membership
var role string
err := r.db.QueryRowContext(ctx, `
select m.tenant_id::text, m.role::text
from public.memberships m
join public.tenants t on t.id = m.tenant_id
where m.profile_id = $1
and m.tenant_id = $2
and t.status = 'active'
`, profileID, tenantID).Scan(&membership.TenantID, &role)
if errors.Is(err, sql.ErrNoRows) {
return Membership{}, false, nil
}
if err != nil {
return Membership{}, false, err
}
membership.Role = rbac.Role(role)
return membership, true, nil
}