.
This commit is contained in:
@@ -5,4 +5,5 @@ public interface IGenericDapper<T> : IDisposable
|
||||
{
|
||||
Task<T?> GetAsync(string sql, object? param = null);
|
||||
Task<IEnumerable<T>> GetAllAsync(string sql, object? param = null);
|
||||
Task<int> CountAsync(string schema,string tableName, string where, object? param = null, string? alias = null);
|
||||
}
|
||||
|
||||
@@ -9,18 +9,23 @@ public class GetAllLanguageQueryHandler(IGenericDapper<LanguageDTO> languageDapp
|
||||
{
|
||||
public async Task<GetAllLanguageDTO> Handle(GetAllLanguageQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
var where = $"@Search is null or lan.{nameof(LanguageDTO.Title)} like N'%@Search%' ";
|
||||
var result = new GetAllLanguageDTO();
|
||||
var sql = $"select " +
|
||||
$"lan.{nameof(Language.Title)} as {nameof(LanguageDTO.Title)}," +
|
||||
$"lan.{nameof(Language.Id)} as {nameof(LanguageDTO.Id)}," +
|
||||
$"m.FileId as {nameof(LanguageDTO.Icon)}" +
|
||||
$"CONVERT(nvarchar(max),m.FileId) as {nameof(LanguageDTO.Icon)}" +
|
||||
$" from Learning.Languages as lan " +
|
||||
$"inner join Learning.Medias as m on m.{nameof(Media.Id)} = lan.iconId " +
|
||||
$"where @Search is null or lan.{nameof(LanguageDTO.Title)} like N'%@Search%' " +
|
||||
$"order by lan.{nameof(Language.CreateOn)} OFFSET {request.Pagination.Skip()} ROWS FETCH NEXT {request.Pagination.Take()} ROWS ONLY;";
|
||||
$"where {where}" +
|
||||
$"order by lan.{nameof(Language.CreateOn)} OFFSET {request.Pagination.Skip()} ROWS FETCH NEXT {request.Pagination.Take()} ROWS ONLY";
|
||||
|
||||
var language = await languageDapper.GetAllAsync(sql, new { request.Pagination.Search });
|
||||
result.Languages.AddRange(language);
|
||||
result.TotalData = await languageDapper.CountAsync("Learning", "Languages",
|
||||
where,
|
||||
new { request.Pagination.Search },"lan");
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -31,10 +36,10 @@ public class GetLanguageByTitleQueryHandler(IGenericDapper<LanguageDTO> language
|
||||
var sql = $"select " +
|
||||
$"lan.{nameof(Language.Title)} as {nameof(LanguageDTO.Title)}," +
|
||||
$"lan.{nameof(Language.Id)} as {nameof(LanguageDTO.Id)}," +
|
||||
$"m.FileId as {nameof(LanguageDTO.Icon)}" +
|
||||
$" from Learning.Languages" +
|
||||
$" inner join Learning.Medias as m on {nameof(Media.Id)} = lan.iconId " +
|
||||
$" where Title = @{nameof(Language.Title)}";
|
||||
$"CONVERT(nvarchar(max),m.FileId) as {nameof(LanguageDTO.Icon)}" +
|
||||
$" from Learning.Languages as lan " +
|
||||
$"inner join Learning.Medias as m on m.{nameof(Media.Id)} = lan.iconId " +
|
||||
$"where lan.{nameof(Language.Title)} = @Title";
|
||||
|
||||
var language = await languageDapper.GetAsync(sql, new { request.Title });
|
||||
return language;
|
||||
|
||||
@@ -21,10 +21,18 @@ public class GenericDapper<T> : IGenericDapper<T>
|
||||
{
|
||||
return await connection.QueryAsync<T>(sql, param);
|
||||
}
|
||||
|
||||
public async Task<int> CountAsync(string schema,string tableName, string where, object? param = null, string? alias = null)
|
||||
{
|
||||
string query = $"select count(1) as count from {schema}.{tableName} " +
|
||||
(string.IsNullOrEmpty(alias) ? "" : $"as {alias}") +
|
||||
$" where {where}";
|
||||
return await connection.QueryFirstAsync<int>(query, param);
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
GC.SuppressFinalize(this);
|
||||
connection.Dispose();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using Grpc.Core.Interceptors;
|
||||
using Grpc.Core;
|
||||
|
||||
namespace VizhTalk.Learning.Presentation.Interceptors;
|
||||
|
||||
public class ExceptionInterceptor : Interceptor
|
||||
{
|
||||
public override async Task<TResponse> UnaryServerHandler<TRequest, TResponse>(
|
||||
TRequest request,
|
||||
ServerCallContext context,
|
||||
UnaryServerMethod<TRequest, TResponse> continuation)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await continuation(request, context);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new RpcException(
|
||||
new Status(StatusCode.Internal, "Unhandled exception: " + ex.Message)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using VizhTalk.Learning.Infrastructure;
|
||||
using VizhTalk.Learning.Presentation.Interceptors;
|
||||
using VizhTalk.Learning.Presentation.Services;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
@@ -9,9 +10,9 @@ builder.Services.AddGrpc(op =>
|
||||
{
|
||||
op.MaxReceiveMessageSize = 200 * 1024 * 1024;
|
||||
op.MaxSendMessageSize = 200 * 1024 * 1024;
|
||||
op.Interceptors.Add<ExceptionInterceptor>();
|
||||
});
|
||||
builder.Services.Initialize(connectionString);
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
|
||||
@@ -19,4 +20,5 @@ var app = builder.Build();
|
||||
app.MapGrpcService<LanguageService>();
|
||||
|
||||
app.UseLearningModule();
|
||||
|
||||
app.Run();
|
||||
|
||||
@@ -17,7 +17,6 @@ public class LanguageService(ILearningModule learningModule) : LanguageGrpc.Lang
|
||||
}
|
||||
public override async Task<LanguageDTO> GetByTitle(GetLanguageByTitleQuery request, ServerCallContext context)
|
||||
{
|
||||
await Task.Delay(10000);
|
||||
return await learningModule.Execute(request, context.CancellationToken);
|
||||
}
|
||||
public override async Task<GetAllLanguageDTO> GetAll(GetAllLanguageQuery request, ServerCallContext context)
|
||||
|
||||
Reference in New Issue
Block a user