1
0
mirror of https://github.com/bitwarden/server.git synced 2025-06-30 07:36:14 -05:00

[PM-17449] Add stored proc, EF query, and an integration test for them (#5413)

This commit is contained in:
Jimmy Vo
2025-02-20 15:08:06 -05:00
committed by GitHub
parent 93e5f7d0fe
commit 2f4d5283d3
6 changed files with 142 additions and 0 deletions

View File

@ -12,6 +12,7 @@ public interface IOrganizationDomainRepository : IRepository<OrganizationDomain,
Task<ICollection<OrganizationDomain>> GetManyByNextRunDateAsync(DateTime date);
Task<OrganizationDomainSsoDetailsData?> GetOrganizationDomainSsoDetailsAsync(string email);
Task<IEnumerable<VerifiedOrganizationDomainSsoDetail>> GetVerifiedOrganizationDomainSsoDetailsAsync(string email);
Task<IEnumerable<OrganizationDomain>> GetVerifiedDomainsByOrganizationIdsAsync(IEnumerable<Guid> organizationIds);
Task<OrganizationDomain?> GetDomainByIdOrganizationIdAsync(Guid id, Guid organizationId);
Task<OrganizationDomain?> GetDomainByOrgIdAndDomainNameAsync(Guid orgId, string domainName);
Task<ICollection<OrganizationDomain>> GetExpiredOrganizationDomainsAsync();

View File

@ -46,6 +46,20 @@ public class OrganizationDomainRepository : Repository<OrganizationDomain, Guid>
}
}
public async Task<IEnumerable<OrganizationDomain>> GetVerifiedDomainsByOrganizationIdsAsync(IEnumerable<Guid> organizationIds)
{
using (var connection = new SqlConnection(ConnectionString))
{
var results = await connection.QueryAsync<OrganizationDomain>(
$"[{Schema}].[OrganizationDomain_ReadByOrganizationIds]",
new { OrganizationIds = organizationIds.ToGuidIdArrayTVP() },
commandType: CommandType.StoredProcedure);
return results.ToList();
}
}
public async Task<ICollection<OrganizationDomain>> GetManyByNextRunDateAsync(DateTime date)
{
using var connection = new SqlConnection(ConnectionString);

View File

@ -157,4 +157,25 @@ public class OrganizationDomainRepository : Repository<Core.Entities.Organizatio
dbContext.OrganizationDomains.RemoveRange(expiredDomains);
return await dbContext.SaveChangesAsync() > 0;
}
public async Task<IEnumerable<Core.Entities.OrganizationDomain>> GetVerifiedDomainsByOrganizationIdsAsync(
IEnumerable<Guid> organizationIds)
{
using var scope = ServiceScopeFactory.CreateScope();
var dbContext = GetDatabaseContext(scope);
var verifiedDomains = await (from d in dbContext.OrganizationDomains
where organizationIds.Contains(d.OrganizationId) && d.VerifiedDate != null
select new OrganizationDomain
{
OrganizationId = d.OrganizationId,
DomainName = d.DomainName
})
.AsNoTracking()
.ToListAsync();
return Mapper.Map<List<OrganizationDomain>>(verifiedDomains);
}
}

View File

@ -0,0 +1,14 @@
CREATE PROCEDURE [dbo].[OrganizationDomain_ReadByOrganizationIds]
@OrganizationIds AS [dbo].[GuidIdArray] READONLY
AS
BEGIN
SET NOCOUNT ON
SELECT
d.OrganizationId,
d.DomainName
FROM dbo.OrganizationDomainView AS d
WHERE d.OrganizationId IN (SELECT [Id] FROM @OrganizationIds)
AND d.VerifiedDate IS NOT NULL;
END