using System.Collections.Concurrent; namespace Backend.Data.InMemory; /// /// Default implementation so the skeleton runs with no database. State is per-process /// and lost on restart. /// public sealed class InMemoryUserRepository : IUserRepository { private readonly ConcurrentDictionary _users = new(); public Task> GetAllAsync(CancellationToken cancellationToken = default) { IReadOnlyList users = _users.Values .OrderBy(user => user.CreatedAt) .ToList(); return Task.FromResult(users); } public Task GetByIdAsync(Guid id, CancellationToken cancellationToken = default) { _users.TryGetValue(id, out var user); return Task.FromResult(user); } public Task GetByEmailAsync(string email, CancellationToken cancellationToken = default) { var user = _users.Values .FirstOrDefault(candidate => string.Equals(candidate.Email, email, StringComparison.OrdinalIgnoreCase)); return Task.FromResult(user); } public Task AddAsync(User user, CancellationToken cancellationToken = default) { _users[user.Id] = user; return Task.FromResult(user); } public Task UpdateAsync(User user, CancellationToken cancellationToken = default) { if (!_users.ContainsKey(user.Id)) { return Task.FromResult(null); } _users[user.Id] = user; return Task.FromResult(user); } public Task DeleteAsync(Guid id, CancellationToken cancellationToken = default) => Task.FromResult(_users.TryRemove(id, out _)); }