forked from ddrilling/AsbCloudServer
73 lines
2.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|