server cleanup
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Grpc.AspNetCore" />
|
||||
<PackageReference Include="Grpc.AspNetCore.Server.Reflection" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\Core\Baya.Application\Baya.Application.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Protobuf Include="ProtoModels\UserGrpcServiceModels.proto" GrpcServices="Server" />
|
||||
<Protobuf Include="ProtoModels\OrderGrpcServiceModels.proto" GrpcServices="Server" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,39 @@
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Baya.Web.Plugins.Grpc.Services;
|
||||
|
||||
namespace Baya.Web.Plugins.Grpc;
|
||||
|
||||
public static class GrpcPluginStartup
|
||||
{
|
||||
public static IServiceCollection ConfigureGrpcPluginServices(this IServiceCollection services)
|
||||
{
|
||||
|
||||
|
||||
services.AddGrpc();
|
||||
services.AddGrpcReflection();
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
public static void ConfigureGrpcPipeline(this WebApplication app)
|
||||
{
|
||||
|
||||
app.MapGrpcService<UserGrpcServices>();
|
||||
app.MapGrpcService<OrderGrpcServices>();
|
||||
app.MapGrpcReflectionService();
|
||||
|
||||
app.MapGet("/GrpcUser", async context =>
|
||||
{
|
||||
await context.Response.WriteAsync(
|
||||
"Communication with this gRPC endpoint must be made through a gRPC client.");
|
||||
});
|
||||
|
||||
app.MapGet("/GrpcUserOrder", async context =>
|
||||
{
|
||||
await context.Response.WriteAsync(
|
||||
"Communication with this gRPC endpoint must be made through a gRPC client.");
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
syntax = "proto3";
|
||||
|
||||
option csharp_namespace = "Baya.Web.Plugins.Grpc.ProtoModels";
|
||||
import "google/protobuf/empty.proto";
|
||||
|
||||
package GrpcOrderController;
|
||||
|
||||
|
||||
service OrderServices {
|
||||
rpc GetUserOrders(google.protobuf.Empty) returns (stream GetUserOrdersModel);
|
||||
}
|
||||
|
||||
message GetUserOrdersModel{
|
||||
int32 OrderId=1;
|
||||
string OrderName=2;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
option csharp_namespace = "Baya.Web.Plugins.Grpc.ProtoModels";
|
||||
|
||||
package GrpcUserController;
|
||||
|
||||
service UserServices {
|
||||
rpc TokenRequest(UserTokenRequest) returns (TokenRequestResult);
|
||||
rpc GetUserToken(GetUserTokenRequestModel) returns (GetUserTokenRequestResult);
|
||||
}
|
||||
|
||||
message UserTokenRequest{
|
||||
string PhoneNumber=1;
|
||||
}
|
||||
|
||||
message TokenRequestResult{
|
||||
string Message=1;
|
||||
bool IsSuccess=2;
|
||||
TokenRequestResultModel UserTokenRequestResult=3;
|
||||
}
|
||||
|
||||
message TokenRequestResultModel{
|
||||
string UserKey=1;
|
||||
}
|
||||
|
||||
message GetUserTokenRequestModel
|
||||
{
|
||||
string UserKey=1;
|
||||
string Code=2;
|
||||
}
|
||||
|
||||
message GetUserTokenRequestResult{
|
||||
string Message=1;
|
||||
bool IsSuccess=2;
|
||||
UserToken Token=3;
|
||||
}
|
||||
|
||||
message UserToken{
|
||||
string AccessToken=1;
|
||||
string RefreshToken=2;
|
||||
string TokenType=3;
|
||||
int32 ExpiresIn=4;
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using Baya.Application.Features.Order.Queries.GetUserOrders;
|
||||
using Baya.SharedKernel.Extensions;
|
||||
using Baya.Web.Plugins.Grpc.ProtoModels;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using Grpc.Core;
|
||||
using Mediator;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
namespace Baya.Web.Plugins.Grpc.Services
|
||||
{
|
||||
[Authorize]
|
||||
public class OrderGrpcServices:OrderServices.OrderServicesBase
|
||||
{
|
||||
|
||||
|
||||
private readonly ISender _sender;
|
||||
|
||||
public OrderGrpcServices(ISender sender)
|
||||
{
|
||||
_sender = sender;
|
||||
}
|
||||
|
||||
public override async Task GetUserOrders(Empty request, IServerStreamWriter<GetUserOrdersModel> responseStream, ServerCallContext context)
|
||||
{
|
||||
var userId = int.Parse(context.GetHttpContext().User.Identity.GetUserId());
|
||||
|
||||
var query = await _sender.Send(new GetUserOrdersQueryModel(userId));
|
||||
|
||||
if (!query.IsSuccess)
|
||||
{
|
||||
context.Status = new Status(StatusCode.InvalidArgument, query.GetErrorMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var getUsersQueryResultModel in query.Result)
|
||||
{
|
||||
await responseStream.WriteAsync(new GetUserOrdersModel()
|
||||
{ OrderId = getUsersQueryResultModel.OrderId, OrderName = getUsersQueryResultModel.OrderName });
|
||||
|
||||
await Task.Delay(400);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
using Baya.Application.Features.Users.Queries.GenerateUserToken;
|
||||
using Baya.Application.Features.Users.Queries.TokenRequest;
|
||||
using Baya.Web.Plugins.Grpc.ProtoModels;
|
||||
using Grpc.Core;
|
||||
using Mediator;
|
||||
|
||||
namespace Baya.Web.Plugins.Grpc.Services;
|
||||
|
||||
public class UserGrpcServices : UserServices.UserServicesBase
|
||||
{
|
||||
private readonly IMediator _mediator;
|
||||
|
||||
public UserGrpcServices(IMediator mediator)
|
||||
{
|
||||
_mediator = mediator;
|
||||
}
|
||||
|
||||
public override async Task<TokenRequestResult> TokenRequest(UserTokenRequest request, ServerCallContext context)
|
||||
{
|
||||
if (request is null)
|
||||
{
|
||||
context.Status = new Status(StatusCode.InvalidArgument, "Required Arguments Not Found");
|
||||
|
||||
return new TokenRequestResult() { IsSuccess = false, Message = "Input Model Not Found" };
|
||||
}
|
||||
|
||||
var tokenQuery = await _mediator.Send(new UserTokenRequestQuery(request.PhoneNumber));
|
||||
|
||||
if (!tokenQuery.IsSuccess)
|
||||
{
|
||||
context.Status = new Status(StatusCode.InvalidArgument, "User not found");
|
||||
|
||||
return new TokenRequestResult()
|
||||
{ IsSuccess = false, Message = tokenQuery.GetErrorMessage(), UserTokenRequestResult = null };
|
||||
}
|
||||
|
||||
if (tokenQuery.IsNotFound)
|
||||
{
|
||||
context.Status = new Status(StatusCode.NotFound, "User Not Found");
|
||||
|
||||
return new TokenRequestResult()
|
||||
{ IsSuccess = false, Message = tokenQuery.GetErrorMessage(), UserTokenRequestResult = null };
|
||||
}
|
||||
|
||||
return new TokenRequestResult()
|
||||
{
|
||||
IsSuccess = true,
|
||||
Message = string.Empty,
|
||||
UserTokenRequestResult = new TokenRequestResultModel() { UserKey = tokenQuery.Result.UserKey }
|
||||
};
|
||||
}
|
||||
|
||||
public override async Task<GetUserTokenRequestResult> GetUserToken(GetUserTokenRequestModel request, ServerCallContext context)
|
||||
{
|
||||
|
||||
if (request is null)
|
||||
{
|
||||
context.Status = new Status(StatusCode.InvalidArgument, "Required Arguments Not Found");
|
||||
|
||||
return new GetUserTokenRequestResult() { IsSuccess = false, Message = "Input Model Not Found" };
|
||||
}
|
||||
|
||||
var tokenQuery = await _mediator.Send(new GenerateUserTokenQuery(request.UserKey, request.Code));
|
||||
|
||||
if (!tokenQuery.IsSuccess)
|
||||
{
|
||||
context.Status = new Status(StatusCode.InvalidArgument, tokenQuery.GetErrorMessage());
|
||||
|
||||
return new GetUserTokenRequestResult() { IsSuccess = false, Message = tokenQuery.GetErrorMessage() };
|
||||
}
|
||||
|
||||
|
||||
return new GetUserTokenRequestResult()
|
||||
{
|
||||
IsSuccess = true, Message = string.Empty,
|
||||
Token = new UserToken()
|
||||
{
|
||||
AccessToken = tokenQuery.Result.access_token, ExpiresIn = tokenQuery.Result.expires_in,
|
||||
RefreshToken = tokenQuery.Result.refresh_token, TokenType = tokenQuery.Result.token_type
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user