DD.WellWorkover.Cloud/AsbCloudInfrastructure/Services/UserSettingsRepository.cs
2022-07-27 18:14:07 +05:00

73 lines
2.3 KiB
C#

using AsbCloudApp.Services;
using AsbCloudDb.Model;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudInfrastructure.Services
{
public class UserSettingsRepository : IUserSettingsRepository
{
private readonly IAsbCloudDbContext context;
public UserSettingsRepository(IAsbCloudDbContext context)
{
this.context = context;
}
public Task<object> GetOrDefaultAsync(int userId, string key, CancellationToken token)
=> context.Set<UserSetting>()
.Where(s => s.IdUser == userId && s.Key == key)
.Select(s=>s.Value)
.FirstOrDefaultAsync(token);
public async Task<int> InsertAsync(int userId, string key, object value, CancellationToken token)
{
var set = context.Set<UserSetting>();
if (await set.AnyAsync(s=>s.IdUser == userId && s.Key == key, token))
return IUserSettingsRepository.ErrorKeyIsUsed;
var entity = new UserSetting
{
IdUser = userId,
Key = key,
Value = value,
};
context.Set<UserSetting>()
.Add(entity);
return await context.SaveChangesAsync(token);
}
public async Task<int> UpdateAsync(int userId, string key, object value, CancellationToken token)
{
var set = context.Set<UserSetting>();
var updatingItem = await set
.FirstOrDefaultAsync(s => s.IdUser == userId && s.Key == key, token);
if (updatingItem is null)
return IUserSettingsRepository.ErrorKeyNotFound;
updatingItem.Value = value;
set.Update(updatingItem);
return await context.SaveChangesAsync(token);
}
public async Task<int> DeleteAsync(int userId, string key, CancellationToken token)
{
var set = context.Set<UserSetting>();
var removingItem = await set
.FirstOrDefaultAsync(s=>s.IdUser == userId && s.Key ==key, token);
if(removingItem is null)
return IUserSettingsRepository.ErrorKeyNotFound;
set.Remove(removingItem);
return await context.SaveChangesAsync(token);
}
}
}