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 SaveMemberPreferenceAsync(MemberPreference memberPreference) { await _context.MemberPreferences.AddAsync(memberPreference); return memberPreference.Id; } public async Task BulkSaveMemberPreferenceAsync(List 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> 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); }