Files
monorepo/LCU.API.Internal.MemberPreferencesApi/LCU.API.Internal.MemberPreferencesApiLib/Repositories/MemberPreferenceRepository.cs
T
2026-03-31 16:43:12 -05:00

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);
}