server cleanup

This commit is contained in:
hamid
2026-06-16 01:46:53 +03:30
parent 69bbd28bb0
commit 5b4c0d183f
205 changed files with 641 additions and 628 deletions
@@ -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
}
};
}
}