0
0
mirror of https://github.com/alex289/CleanArchitecture.git synced 2025-06-29 18:21:08 +00:00
CleanArchitecture/CleanArchitecture.Application/gRPC/UsersApiImplementation.cs
2024-12-08 22:51:08 +01:00

55 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CleanArchitecture.Domain.Interfaces.Repositories;
using CleanArchitecture.Proto.Users;
using Grpc.Core;
using Microsoft.EntityFrameworkCore;
namespace CleanArchitecture.Application.gRPC;
public sealed class UsersApiImplementation : UsersApi.UsersApiBase
{
private readonly IUserRepository _userRepository;
public UsersApiImplementation(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public override async Task<GetUsersByIdsResult> GetByIds(
GetUsersByIdsRequest request,
ServerCallContext context)
{
var idsAsGuids = new List<Guid>(request.Ids.Count);
foreach (var id in request.Ids)
{
if (Guid.TryParse(id, out var parsed))
{
idsAsGuids.Add(parsed);
}
}
var users = await _userRepository
.GetAllNoTracking()
.IgnoreQueryFilters()
.Where(user => idsAsGuids.Contains(user.Id))
.Select(user => new GrpcUser
{
Id = user.Id.ToString(),
Email = user.Email,
FirstName = user.FirstName,
LastName = user.LastName,
DeletedAt = user.DeletedAt == null ? "": user.DeletedAt.ToString()
})
.ToListAsync();
var result = new GetUsersByIdsResult();
result.Users.AddRange(users);
return result;
}
}