2024-04-09 11:59:43 +02:00
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Umbraco.Cms.Core.Events;
|
2021-09-30 13:09:04 +02:00
|
|
|
using Umbraco.Cms.Core.Models;
|
2024-04-09 11:59:43 +02:00
|
|
|
using Umbraco.Cms.Core.Models.Membership;
|
|
|
|
|
using Umbraco.Cms.Core.Persistence.Repositories;
|
|
|
|
|
using Umbraco.Cms.Core.Scoping;
|
|
|
|
|
using Umbraco.Cms.Core.Services.OperationStatus;
|
|
|
|
|
using Umbraco.Cms.Infrastructure.Persistence.Querying;
|
2021-09-30 13:09:04 +02:00
|
|
|
|
2022-06-07 15:28:38 +02:00
|
|
|
namespace Umbraco.Cms.Core.Services;
|
|
|
|
|
|
2024-04-09 11:59:43 +02:00
|
|
|
public class UserDataService : RepositoryService, IUserDataService
|
2021-09-30 13:09:04 +02:00
|
|
|
{
|
2024-04-09 11:59:43 +02:00
|
|
|
private readonly IUserDataRepository _userDataRepository;
|
|
|
|
|
private readonly IUserService _userService;
|
2021-10-04 11:38:33 +02:00
|
|
|
|
2024-04-09 11:59:43 +02:00
|
|
|
public UserDataService(
|
|
|
|
|
ICoreScopeProvider provider,
|
|
|
|
|
ILoggerFactory loggerFactory,
|
|
|
|
|
IEventMessagesFactory eventMessagesFactory,
|
|
|
|
|
IUserDataRepository userDataRepository,
|
|
|
|
|
IUserService userService)
|
|
|
|
|
: base(provider, loggerFactory, eventMessagesFactory)
|
2022-06-07 15:28:38 +02:00
|
|
|
{
|
2024-04-09 11:59:43 +02:00
|
|
|
_userDataRepository = userDataRepository;
|
|
|
|
|
_userService = userService;
|
2022-06-07 15:28:38 +02:00
|
|
|
}
|
2022-04-19 15:06:10 +02:00
|
|
|
|
2024-04-09 11:59:43 +02:00
|
|
|
public async Task<IUserData?> GetAsync(Guid key)
|
|
|
|
|
{
|
|
|
|
|
using ICoreScope scope = ScopeProvider.CreateCoreScope();
|
|
|
|
|
IUserData? userData = await _userDataRepository.GetAsync(key);
|
|
|
|
|
scope.Complete();
|
|
|
|
|
return userData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task<PagedModel<IUserData>> GetAsync(int skip, int take, IUserDataFilter? filter = null)
|
|
|
|
|
{
|
|
|
|
|
using ICoreScope scope = ScopeProvider.CreateCoreScope();
|
|
|
|
|
PagedModel<IUserData> pagedUserData = await _userDataRepository.GetAsync(skip, take, filter);
|
|
|
|
|
scope.Complete();
|
|
|
|
|
return pagedUserData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async Task<Attempt<IUserData, UserDataOperationStatus>> CreateAsync(IUserData userData)
|
|
|
|
|
{
|
|
|
|
|
using ICoreScope scope = ScopeProvider.CreateCoreScope();
|
|
|
|
|
IUserData? existingUserData = await _userDataRepository.GetAsync(userData.Key);
|
|
|
|
|
if (existingUserData is not null)
|
|
|
|
|
{
|
|
|
|
|
return Attempt<IUserData, UserDataOperationStatus>.Fail(UserDataOperationStatus.AlreadyExists, userData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (await ReferencedUserExits(userData) is false)
|
|
|
|
|
{
|
|
|
|
|
return Attempt<IUserData, UserDataOperationStatus>.Fail(UserDataOperationStatus.UserNotFound, userData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await _userDataRepository.Save(userData);
|
2023-11-30 14:29:16 +01:00
|
|
|
|
2024-04-09 11:59:43 +02:00
|
|
|
scope.Complete();
|
|
|
|
|
return Attempt<IUserData, UserDataOperationStatus>.Succeed(UserDataOperationStatus.Success, userData);
|
|
|
|
|
}
|
2021-09-30 13:09:04 +02:00
|
|
|
|
2024-04-09 11:59:43 +02:00
|
|
|
public async Task<Attempt<IUserData, UserDataOperationStatus>> UpdateAsync(IUserData userData)
|
2022-06-07 15:28:38 +02:00
|
|
|
{
|
2024-04-09 11:59:43 +02:00
|
|
|
using ICoreScope scope = ScopeProvider.CreateCoreScope();
|
|
|
|
|
IUserData? existingUserData = await _userDataRepository.GetAsync(userData.Key);
|
|
|
|
|
if (existingUserData is null)
|
|
|
|
|
{
|
|
|
|
|
return Attempt<IUserData, UserDataOperationStatus>.Fail(UserDataOperationStatus.NotFound, userData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (await ReferencedUserExits(userData) is false)
|
2021-09-30 13:09:04 +02:00
|
|
|
{
|
2024-04-09 11:59:43 +02:00
|
|
|
return Attempt<IUserData, UserDataOperationStatus>.Fail(UserDataOperationStatus.UserNotFound, userData);
|
2021-09-30 13:09:04 +02:00
|
|
|
}
|
2022-06-07 15:28:38 +02:00
|
|
|
|
2024-04-09 11:59:43 +02:00
|
|
|
await _userDataRepository.Update(userData);
|
|
|
|
|
|
|
|
|
|
scope.Complete();
|
|
|
|
|
return Attempt<IUserData, UserDataOperationStatus>.Succeed(UserDataOperationStatus.Success, userData);
|
2021-09-30 13:09:04 +02:00
|
|
|
}
|
2024-04-09 11:59:43 +02:00
|
|
|
|
|
|
|
|
public async Task<Attempt<UserDataOperationStatus>> DeleteAsync(Guid key)
|
|
|
|
|
{
|
|
|
|
|
using ICoreScope scope = ScopeProvider.CreateCoreScope();
|
|
|
|
|
IUserData? existingUserData = await _userDataRepository.GetAsync(key);
|
|
|
|
|
if (existingUserData is null)
|
|
|
|
|
{
|
|
|
|
|
return Attempt<UserDataOperationStatus>.Fail(UserDataOperationStatus.NotFound);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await _userDataRepository.Delete(existingUserData);
|
|
|
|
|
|
|
|
|
|
scope.Complete();
|
|
|
|
|
return Attempt<UserDataOperationStatus>.Succeed(UserDataOperationStatus.Success);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task<bool> ReferencedUserExits(IUserData userData)
|
|
|
|
|
=> await _userService.GetAsync(userData.UserKey) is not null;
|
2021-09-30 13:09:04 +02:00
|
|
|
}
|