Files
Umbraco-CMS/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ExternalLoginRepository.cs

163 lines
4.9 KiB
C#
Raw Normal View History

2017-07-20 11:21:28 +02:00
using System;
using System.Collections.Generic;
using System.Linq;
2020-09-17 09:42:55 +02:00
using Microsoft.Extensions.Logging;
using NPoco;
using Umbraco.Core.Cache;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Models.Identity;
2017-12-28 09:06:33 +01:00
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.Persistence.Factories;
using Umbraco.Core.Persistence.Querying;
2017-12-12 15:04:13 +01:00
using Umbraco.Core.Scoping;
2017-12-07 16:45:25 +01:00
namespace Umbraco.Core.Persistence.Repositories.Implement
{
internal class ExternalLoginRepository : NPocoRepositoryBase<int, IIdentityUserLogin>, IExternalLoginRepository
{
2020-09-17 09:42:55 +02:00
public ExternalLoginRepository(IScopeAccessor scopeAccessor, AppCaches cache, ILogger<ExternalLoginRepository> logger)
2017-12-14 17:04:44 +01:00
: base(scopeAccessor, cache, logger)
2017-12-12 15:04:13 +01:00
{ }
public void DeleteUserLogins(int memberId)
{
Database.Execute("DELETE FROM ExternalLogins WHERE UserId=@userId", new { userId = memberId });
}
public void SaveUserLogins(int memberId, IEnumerable<IUserLoginInfo> logins)
{
//clear out logins for member
Database.Execute("DELETE FROM umbracoExternalLogin WHERE userId=@userId", new { userId = memberId });
//add them all
foreach (var l in logins)
{
Database.Insert(new ExternalLoginDto
{
LoginProvider = l.LoginProvider,
ProviderKey = l.ProviderKey,
UserId = memberId,
CreateDate = DateTime.Now
});
}
}
protected override IIdentityUserLogin PerformGet(int id)
{
var sql = GetBaseQuery(false);
2019-04-02 23:00:08 -04:00
sql.Where(GetBaseWhereClause(), new { id = id });
var dto = Database.Fetch<ExternalLoginDto>(SqlSyntax.SelectTop(sql, 1)).FirstOrDefault();
if (dto == null)
return null;
var entity = ExternalLoginFactory.BuildEntity(dto);
2017-11-10 11:27:12 +01:00
// reset dirty initial properties (U4-1946)
entity.ResetDirtyProperties(false);
return entity;
}
protected override IEnumerable<IIdentityUserLogin> PerformGetAll(params int[] ids)
{
if (ids.Any())
{
return PerformGetAllOnIds(ids);
}
var sql = GetBaseQuery(false);
return ConvertFromDtos(Database.Fetch<ExternalLoginDto>(sql))
.ToArray();// we don't want to re-iterate again!
}
private IEnumerable<IIdentityUserLogin> PerformGetAllOnIds(params int[] ids)
{
if (ids.Any() == false) yield break;
foreach (var id in ids)
{
yield return Get(id);
}
}
private IEnumerable<IIdentityUserLogin> ConvertFromDtos(IEnumerable<ExternalLoginDto> dtos)
{
foreach (var entity in dtos.Select(ExternalLoginFactory.BuildEntity))
{
2017-11-10 11:27:12 +01:00
// reset dirty initial properties (U4-1946)
((BeingDirtyBase)entity).ResetDirtyProperties(false);
yield return entity;
}
}
protected override IEnumerable<IIdentityUserLogin> PerformGetByQuery(IQuery<IIdentityUserLogin> query)
{
var sqlClause = GetBaseQuery(false);
var translator = new SqlTranslator<IIdentityUserLogin>(sqlClause, query);
var sql = translator.Translate();
var dtos = Database.Fetch<ExternalLoginDto>(sql);
foreach (var dto in dtos)
{
yield return Get(dto.Id);
}
}
2017-09-22 18:48:58 +02:00
protected override Sql<ISqlContext> GetBaseQuery(bool isCount)
{
var sql = Sql();
if (isCount)
sql.SelectCount();
else
sql.SelectAll();
sql.From<ExternalLoginDto>();
return sql;
}
protected override string GetBaseWhereClause()
{
2017-11-10 11:27:12 +01:00
return "umbracoExternalLogin.id = @id";
}
protected override IEnumerable<string> GetDeleteClauses()
{
var list = new List<string>
{
2017-11-10 11:27:12 +01:00
"DELETE FROM umbracoExternalLogin WHERE id = @id"
};
return list;
}
protected override Guid NodeObjectTypeId
{
get { throw new NotImplementedException(); }
}
protected override void PersistNewItem(IIdentityUserLogin entity)
{
entity.AddingEntity();
var dto = ExternalLoginFactory.BuildDto(entity);
var id = Convert.ToInt32(Database.Insert(dto));
entity.Id = id;
entity.ResetDirtyProperties();
}
protected override void PersistUpdatedItem(IIdentityUserLogin entity)
{
entity.UpdatingEntity();
var dto = ExternalLoginFactory.BuildDto(entity);
2017-07-20 11:21:28 +02:00
Database.Update(dto);
entity.ResetDirtyProperties();
}
}
2017-07-20 11:21:28 +02:00
}