CompileAsyncQuery: AccountLinker
This commit is contained in:
parent
6add1d1b9e
commit
2a15974880
@ -86,11 +86,7 @@ public class AccountLinker
|
||||
public async Task<IEnumerable<string>> GetLinkedObjectsByHashIdAsync(string hashid)
|
||||
{
|
||||
using var accountLinkContext = _accountLinkContextManager.CreateDbContext();
|
||||
return await accountLinkContext.AccountLinks
|
||||
.Where(r => r.UId == hashid)
|
||||
.Where(r => r.Provider != string.Empty)
|
||||
.Select(r => r.Id)
|
||||
.ToListAsync();
|
||||
return await AccountLinkerQueries.GetLinkedObjectsByHashIdAsync(accountLinkContext, hashid).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<LoginProfile>> GetLinkedProfilesAsync(string obj, string provider)
|
||||
@ -145,19 +141,8 @@ public class AccountLinker
|
||||
{
|
||||
using var accountLinkContext = _accountLinkContextManager.CreateDbContext();
|
||||
|
||||
var accountLinkQuery = accountLinkContext.AccountLinks.Where(r => r.Id == obj);
|
||||
var accountLink = await AccountLinkerQueries.GetAccountLinkAsync(accountLinkContext, obj, provider, hashId);
|
||||
|
||||
if (!string.IsNullOrEmpty(provider))
|
||||
{
|
||||
accountLinkQuery = accountLinkQuery.Where(r => r.Provider == provider);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(hashId))
|
||||
{
|
||||
accountLinkQuery = accountLinkQuery.Where(r => r.UId == hashId);
|
||||
}
|
||||
|
||||
var accountLink = await accountLinkQuery.FirstOrDefaultAsync();
|
||||
accountLinkContext.AccountLinks.Remove(accountLink);
|
||||
await accountLinkContext.SaveChangesAsync();
|
||||
|
||||
@ -167,12 +152,8 @@ public class AccountLinker
|
||||
private async Task<List<LoginProfile>> GetLinkedProfilesFromDBAsync(string obj)
|
||||
{
|
||||
using var accountLinkContext = _accountLinkContextManager.CreateDbContext();
|
||||
|
||||
//Retrieve by uinque id
|
||||
return (await accountLinkContext.AccountLinks
|
||||
.Where(r => r.Id == obj)
|
||||
.Select(r => r.Profile)
|
||||
.ToListAsync())
|
||||
return (await AccountLinkerQueries.GetLinkedProfilesFromDBAsync(accountLinkContext, obj).ToListAsync())
|
||||
.ConvertAll(x => LoginProfile.CreateFromSerializedString(_signature, _instanceCrypto, x));
|
||||
}
|
||||
|
||||
@ -185,3 +166,27 @@ public class AccountLinker
|
||||
.ToDictionaryAsync(k => k.Id, v => LoginProfile.CreateFromSerializedString(_signature, _instanceCrypto, v.Profile));
|
||||
}
|
||||
}
|
||||
|
||||
file static class AccountLinkerQueries
|
||||
{
|
||||
public static readonly Func<AccountLinkContext, string, IAsyncEnumerable<string>> GetLinkedObjectsByHashIdAsync = Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
|
||||
(AccountLinkContext ctx, string hashid) =>
|
||||
ctx.AccountLinks
|
||||
.Where(r => r.UId == hashid)
|
||||
.Where(r => r.Provider != string.Empty)
|
||||
.Select(r => r.Id));
|
||||
|
||||
public static readonly Func<AccountLinkContext, string, string, string, Task<AccountLinks>> GetAccountLinkAsync = Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
|
||||
(AccountLinkContext ctx, string id, string provider, string hashId) =>
|
||||
ctx.AccountLinks
|
||||
.Where(r => r.Id == id)
|
||||
.Where(r => !string.IsNullOrEmpty(provider) && r.Provider == provider)
|
||||
.Where(r => !string.IsNullOrEmpty(hashId) && r.UId == hashId)
|
||||
.FirstOrDefault());
|
||||
|
||||
public static readonly Func<AccountLinkContext, string, IAsyncEnumerable<string>> GetLinkedProfilesFromDBAsync = Microsoft.EntityFrameworkCore.EF.CompileAsyncQuery(
|
||||
(AccountLinkContext ctx, string id) =>
|
||||
ctx.AccountLinks
|
||||
.Where(r => r.Id == id)
|
||||
.Select(r => r.Profile));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user