using Modules.User.Application.Gateways; using Modules.User.Application.Models; using Modules.User.Database.Repositories; namespace Modules.User.Database.GatewaysImplementations; public class AccountGateway(SessionRepository repository) : IAccountGateway { public async Task> GetAccountSessions(Guid accountId) { var sessions = await repository.GetAll(accountId); return sessions.Select(q => new Session { Id = q.Id, RefreshToken = q.RefreshToken, ClientInfo = new() { UserAgent = q.ClientInfo.UserAgent, Location = new() { Country = q.ClientInfo.Country, Region = q.ClientInfo.Region, }, }, AccountId = q.AccountId, ExpiredDate = q.ExpiredDate, }).ToList(); } public async Task TryGetSession(string refreshToken) { var session = await repository.GetFirstOrDefaultWhere(q => q.RefreshToken == refreshToken.Trim() && q.ExpiredDate > DateTime.UtcNow); return session == null ? null : new Session { Id = session.Id, RefreshToken = session.RefreshToken, ClientInfo = new() { UserAgent = session.ClientInfo.UserAgent, Location = new() { Country = session.ClientInfo.Country, Region = session.ClientInfo.Region, }, }, AccountId = session.AccountId, ExpiredDate = session.ExpiredDate, }; } public async Task UpdateSessions(Guid accountId, IEnumerable sessions) { return await repository.SyncSessions(accountId, sessions.Select(q => new Database.Entities.Session { Id = q.Id != Guid.Empty ? q.Id : Guid.NewGuid(), RefreshToken = q.RefreshToken, ClientInfo = new() { UserAgent = q.ClientInfo.UserAgent, Country = q.ClientInfo.Location.Country, Region = q.ClientInfo.Location.Region, }, AccountId = q.AccountId, ExpiredDate = q.ExpiredDate, })); } }