using Nocr.Users.Api.Contracts.Users.Dto; using Nocr.Users.AppServices.Users.Repositories; namespace Nocr.Users.AppServices.Users.Services; public sealed class UsersService : IUsersService { private readonly IUsersRepository _repository; public UsersService(IUsersRepository repository) { _repository = repository ?? throw new ArgumentNullException(nameof(repository)); } public async Task Create(string username, string? telegramUsername, string? email, long? telegramId, CancellationToken cancellationToken = default) { var identities = new List(); if (!string.IsNullOrWhiteSpace(email)) identities.Add(UserIdentity.Email(email)); if (!string.IsNullOrWhiteSpace(telegramUsername)) identities.Add(UserIdentity.TelegramUsername(telegramUsername)); if (telegramId.HasValue) identities.Add(UserIdentity.TelegramId(telegramId.Value.ToString())); // TODO: ToArray = грубо var user = User.Initialize(username, identities.ToArray()); return await _repository.Create(user, cancellationToken); } public async Task GetById(long id, CancellationToken cancellationToken = default) { var user = await _repository.GetUserById(id, cancellationToken); if (user == null) return null; return new UserData { Id = user.Id, Username = user.Username, }; } }