using Google.Protobuf.WellKnownTypes; using Grpc.Core; using IdentityService.WebApi.Applications.User; using IM.Protocols.Grpc.User; namespace IdentityService.WebApi.Services { public class UserService:UserInternal.UserInternalBase { private readonly Applications.User.UserService service; public UserService(Applications.User.UserService service) { this.service = service; } public override async Task GetUserInfoAsync(GetUserInfoRequest request, ServerCallContext context) { var res = await service.GetUserInfoAsync(Guid.Parse(request.UserId)); if (!res.Succeeded) { throw new RpcException(new Status(StatusCode.NotFound, res.Message)); } return new UserResponse() { Avatar = res.Data.Avatar ?? "", CreationTime = res.Data.CreationTime.ToUniversalTime().ToTimestamp(), Deletion = res.Data.Deletion is null ? DateTime.MinValue.ToUniversalTime().ToTimestamp() : res.Data.Deletion.Value.ToUniversalTime().ToTimestamp(), Description = res.Data.Description, Email = res.Data.Email ?? "", Id = res.Data.Id.ToString(), NickName = res.Data.NickName, Phone = res.Data.Phone ?? "", Region = res.Data.Region, UserName = res.Data.UserName }; } public override async Task GetUserListAsync( GetUserListRequest request, ServerCallContext context) { var ids = request.UserIds .Select(Guid.Parse) .ToList(); var res = await service.GetUsersByIdsAsync(ids); if (!res.Succeeded) { throw new RpcException(new Status(StatusCode.NotFound, res.Message)); } var response = new GetUserListResponse(); response.Users.AddRange(res.Data.Select(user => { var item = new UserResponse { Avatar = user.Avatar ?? "", CreationTime = user.CreationTime.ToUniversalTime().ToTimestamp(), Description = user.Description, Email = user.Email ?? "", Id = user.Id.ToString(), NickName = user.NickName, Phone = user.Phone ?? "", Region = user.Region, UserName = user.UserName }; if (user.Deletion.HasValue) { item.Deletion = user.Deletion.Value.ToUniversalTime().ToTimestamp(); } return item; })); return response; } } }