54 lines
1.9 KiB
C#
54 lines
1.9 KiB
C#
using LCU.API.Internal.MemberPreferencesApiLib.Persistence;
|
|
using LCU.Library.Internal.MemberPreferencesApiModels.Entities;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace LCU.API.Internal.MemberPreferencesApiLib.Repositories;
|
|
|
|
public class MemberPreferenceRepository : BaseRepository, IMemberPreferenceRepository, IMemberPreferences
|
|
{
|
|
public MemberPreferenceRepository(IApplicationDbContext context) : base(context)
|
|
{
|
|
}
|
|
|
|
public async Task<int> SaveMemberPreferenceAsync(MemberPreference memberPreference)
|
|
{
|
|
await _context.MemberPreferences.AddAsync(memberPreference);
|
|
return memberPreference.Id;
|
|
}
|
|
|
|
public async Task BulkSaveMemberPreferenceAsync(List<MemberPreference> memberPreferences)
|
|
{
|
|
var relevantSettingsCache = await _context.MemberOptInSettings.Where(settings =>
|
|
memberPreferences.Select(x => x.UserId).Contains(settings.UserId)).ToListAsync();
|
|
|
|
foreach (var preference in memberPreferences)
|
|
{
|
|
var settings = relevantSettingsCache.FirstOrDefault(x => x.UserId == preference.UserId);
|
|
|
|
if (settings == null)
|
|
{
|
|
settings = new MemberOptInSettings()
|
|
{
|
|
UserId = preference.UserId
|
|
};
|
|
relevantSettingsCache.Add(settings);
|
|
}
|
|
|
|
settings.Apply(preference);
|
|
}
|
|
|
|
await _context.MemberPreferences.AddRangeAsync(memberPreferences);
|
|
_context.MemberOptInSettings.UpdateRange(relevantSettingsCache);
|
|
}
|
|
|
|
public async Task<IReadOnlyCollection<MemberPreference>> GetMemberPreferencesAsync(string userId)
|
|
{
|
|
return await _context.MemberPreferences
|
|
.Where(x => x.UserId.ToLower() == userId.ToLower())
|
|
.OrderBy(t => t.Id)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public Task Add(MemberPreference preferenceChange) => SaveMemberPreferenceAsync(preferenceChange);
|
|
}
|