Customizing Tenant Queries
Example: Overriding GetTenantsQuery
GetTenantsQueryusing Bloqs.Api.Engine.DataAccess;
using Bloqs.App.Engine;
using Bloqs.App.Engine.Queries;
using Bloqs.App.Engine.Queries.AccessControl;
using Bloqs.App.Engine.Queries.Query;
using Templates.SampleApp.Models.Global;
namespace Templates.SampleApp.Api.Queries.AccessControl;
public class GetTenants(IDataServiceCreator dataServiceCreator)
: IQueryHandler<GetTenantsQuery, GetTenantsQueryResult>
{
public async Task<GetTenantsQueryResult> HandleAsync(
GetTenantsQuery query,
CancellationToken cancellationToken = default
)
{
var dataService = dataServiceCreator.GetDataService<Tenant>(
DataServiceCreatorArgs.Create<Tenant>(query.AppName, Constants.Tenant.NoTenantName)
);
// Example: filter tenants by OrganizationId (could come from user claims)
var currentUserOrgId = Guid.Parse("8a5a49b0-7f35-4f52-8e6b-d3a1cbead2b7");
var tenants = await dataService.QueryAsync(t => t.OrganizationId == currentUserOrgId) ?? [];
if (!tenants.Any(x => x.Name == Constants.Tenant.DefaultTenantName))
{
// Ensure the default tenant always exists
tenants = tenants.Concat(
[new Tenant() { Name = Constants.Tenant.DefaultTenantName }]
);
}
return new GetTenantsQueryResult() { Tenants = tenants };
}
}Key Points
Custom Models
Tenant
Organization
Why Customize?
Last updated