40 lines
870 B
Go
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
|
|
}
|