✨ Add grpc reflection
This commit is contained in:
@@ -21,6 +21,7 @@ public static class ApplicationConfiguration
|
|||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
|
||||||
app.MapGrpcService<CustomAppServiceGrpc>();
|
app.MapGrpcService<CustomAppServiceGrpc>();
|
||||||
|
app.MapGrpcReflectionService();
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public static class ServiceCollectionExtensions
|
|||||||
});
|
});
|
||||||
|
|
||||||
services.AddGrpc(options => { options.EnableDetailedErrors = true; });
|
services.AddGrpc(options => { options.EnableDetailedErrors = true; });
|
||||||
|
services.AddGrpcReflection();
|
||||||
|
|
||||||
services.Configure<RequestLocalizationOptions>(options =>
|
services.Configure<RequestLocalizationOptions>(options =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public static class ApplicationBuilderExtensions
|
|||||||
// Map your gRPC services here
|
// Map your gRPC services here
|
||||||
app.MapGrpcService<FileServiceGrpc>();
|
app.MapGrpcService<FileServiceGrpc>();
|
||||||
app.MapGrpcService<FileReferenceServiceGrpc>();
|
app.MapGrpcService<FileReferenceServiceGrpc>();
|
||||||
|
app.MapGrpcReflectionService();
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,7 @@ public static class ServiceCollectionExtensions
|
|||||||
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16MB
|
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16MB
|
||||||
options.MaxSendMessageSize = 16 * 1024 * 1024; // 16MB
|
options.MaxSendMessageSize = 16 * 1024 * 1024; // 16MB
|
||||||
});
|
});
|
||||||
|
services.AddGrpcReflection();
|
||||||
// Register gRPC reflection for service discovery
|
|
||||||
services.AddGrpc();
|
|
||||||
|
|
||||||
services.AddControllers().AddJsonOptions(options =>
|
services.AddControllers().AddJsonOptions(options =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,9 +26,7 @@ public static class ServiceCollectionExtensions
|
|||||||
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16MB
|
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16MB
|
||||||
options.MaxSendMessageSize = 16 * 1024 * 1024; // 16MB
|
options.MaxSendMessageSize = 16 * 1024 * 1024; // 16MB
|
||||||
});
|
});
|
||||||
|
services.AddGrpcReflection();
|
||||||
// Register gRPC reflection for service discovery
|
|
||||||
services.AddGrpc();
|
|
||||||
|
|
||||||
// Register gRPC services
|
// Register gRPC services
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ public static class ApplicationConfiguration
|
|||||||
app.MapGrpcService<WalletServiceGrpc>();
|
app.MapGrpcService<WalletServiceGrpc>();
|
||||||
app.MapGrpcService<PaymentServiceGrpc>();
|
app.MapGrpcService<PaymentServiceGrpc>();
|
||||||
app.MapGrpcService<RealmServiceGrpc>();
|
app.MapGrpcService<RealmServiceGrpc>();
|
||||||
|
app.MapGrpcReflectionService();
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ public static class ServiceCollectionExtensions
|
|||||||
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16MB
|
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16MB
|
||||||
options.MaxSendMessageSize = 16 * 1024 * 1024; // 16MB
|
options.MaxSendMessageSize = 16 * 1024 * 1024; // 16MB
|
||||||
});
|
});
|
||||||
|
services.AddGrpcReflection();
|
||||||
|
|
||||||
services.AddRingService();
|
services.AddRingService();
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public static class ApplicationConfiguration
|
|||||||
public static WebApplication ConfigureGrpcServices(this WebApplication app)
|
public static WebApplication ConfigureGrpcServices(this WebApplication app)
|
||||||
{
|
{
|
||||||
app.MapGrpcService<RingServiceGrpc>();
|
app.MapGrpcService<RingServiceGrpc>();
|
||||||
|
app.MapGrpcReflectionService();
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,7 @@ public static class ServiceCollectionExtensions
|
|||||||
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16MB
|
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16MB
|
||||||
options.MaxSendMessageSize = 16 * 1024 * 1024; // 16MB
|
options.MaxSendMessageSize = 16 * 1024 * 1024; // 16MB
|
||||||
});
|
});
|
||||||
|
services.AddGrpcReflection();
|
||||||
// Register gRPC reflection for service discovery
|
|
||||||
services.AddGrpc();
|
|
||||||
|
|
||||||
// Register gRPC services
|
// Register gRPC services
|
||||||
services.AddScoped<RingServiceGrpc>();
|
services.AddScoped<RingServiceGrpc>();
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
<PackageReference Include="Google.Protobuf.Tools" Version="3.33.0" />
|
<PackageReference Include="Google.Protobuf.Tools" Version="3.33.0" />
|
||||||
<PackageReference Include="Grpc" Version="2.46.6" />
|
<PackageReference Include="Grpc" Version="2.46.6" />
|
||||||
<PackageReference Include="Grpc.AspNetCore.Server.ClientFactory" Version="2.71.0" />
|
<PackageReference Include="Grpc.AspNetCore.Server.ClientFactory" Version="2.71.0" />
|
||||||
|
<PackageReference Include="Grpc.AspNetCore.Server.Reflection" Version="2.71.0" />
|
||||||
<PackageReference Include="Grpc.Net.Client" Version="2.71.0" />
|
<PackageReference Include="Grpc.Net.Client" Version="2.71.0" />
|
||||||
<PackageReference Include="Grpc.Tools" Version="2.72.0">
|
<PackageReference Include="Grpc.Tools" Version="2.72.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
|||||||
@@ -131,32 +131,27 @@ public class PostServiceGrpc(AppDatabase db, PostService ps) : Shared.Proto.Post
|
|||||||
.Where(p => p.DeletedAt == null)
|
.Where(p => p.DeletedAt == null)
|
||||||
.AsQueryable();
|
.AsQueryable();
|
||||||
|
|
||||||
|
query = request.Shuffle
|
||||||
|
? query.OrderBy(e => EF.Functions.Random())
|
||||||
|
: query.OrderByDescending(e => e.PublishedAt ?? e.CreatedAt);
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(request.PublisherId) && Guid.TryParse(request.PublisherId, out var pid))
|
if (!string.IsNullOrWhiteSpace(request.PublisherId) && Guid.TryParse(request.PublisherId, out var pid))
|
||||||
{
|
|
||||||
query = query.Where(p => p.PublisherId == pid);
|
query = query.Where(p => p.PublisherId == pid);
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(request.RealmId) && Guid.TryParse(request.RealmId, out var rid))
|
if (!string.IsNullOrWhiteSpace(request.RealmId) && Guid.TryParse(request.RealmId, out var rid))
|
||||||
{
|
|
||||||
query = query.Where(p => p.RealmId == rid);
|
query = query.Where(p => p.RealmId == rid);
|
||||||
}
|
|
||||||
|
|
||||||
if (request.Categories.Count > 0)
|
if (request.Categories.Count > 0)
|
||||||
{
|
|
||||||
query = query.Where(p => p.Categories.Any(c => request.Categories.Contains(c.Slug)));
|
query = query.Where(p => p.Categories.Any(c => request.Categories.Contains(c.Slug)));
|
||||||
}
|
|
||||||
|
|
||||||
if (request.Tags.Count > 0)
|
if (request.Tags.Count > 0)
|
||||||
{
|
|
||||||
query = query.Where(p => p.Tags.Any(c => request.Tags.Contains(c.Slug)));
|
query = query.Where(p => p.Tags.Any(c => request.Tags.Contains(c.Slug)));
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Add types filtering when proto is regenerated
|
if (request.Types_.Count > 0)
|
||||||
// if (request.Types.Count > 0)
|
{
|
||||||
// {
|
var types = request.Types_.Select(t => (Shared.Models.PostType)t).Distinct();
|
||||||
// var types = request.Types.Select(t => (Shared.Models.PostType)t).Distinct();
|
query = query.Where(p => types.Contains(p.Type));
|
||||||
// query = query.Where(p => types.Contains(p.Type));
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
if (request.OnlyMedia)
|
if (request.OnlyMedia)
|
||||||
{
|
{
|
||||||
@@ -175,11 +170,7 @@ public class PostServiceGrpc(AppDatabase db, PostService ps) : Shared.Proto.Post
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Include/exclude replies
|
// Include/exclude replies
|
||||||
if (request.IncludeReplies)
|
if (!request.IncludeReplies)
|
||||||
{
|
|
||||||
// Include both root and reply posts
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// Exclude reply posts, only root posts
|
// Exclude reply posts, only root posts
|
||||||
query = query.Where(e => e.RepliedPostId == null);
|
query = query.Where(e => e.RepliedPostId == null);
|
||||||
@@ -214,12 +205,7 @@ public class PostServiceGrpc(AppDatabase db, PostService ps) : Shared.Proto.Post
|
|||||||
var pageToken = request.PageToken;
|
var pageToken = request.PageToken;
|
||||||
var offset = string.IsNullOrEmpty(pageToken) ? 0 : int.Parse(pageToken);
|
var offset = string.IsNullOrEmpty(pageToken) ? 0 : int.Parse(pageToken);
|
||||||
|
|
||||||
// Ordering - TODO: Add shuffle when proto field is available
|
var posts = await query
|
||||||
var orderedQuery = request.Shuffle
|
|
||||||
? query.OrderBy(e => EF.Functions.Random())
|
|
||||||
: query.OrderByDescending(e => e.PublishedAt ?? e.CreatedAt);
|
|
||||||
|
|
||||||
var posts = await orderedQuery
|
|
||||||
.Skip(offset)
|
.Skip(offset)
|
||||||
.Take(pageSize)
|
.Take(pageSize)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public static class ApplicationConfiguration
|
|||||||
// Map gRPC services
|
// Map gRPC services
|
||||||
app.MapGrpcService<PostServiceGrpc>();
|
app.MapGrpcService<PostServiceGrpc>();
|
||||||
app.MapGrpcService<PublisherServiceGrpc>();
|
app.MapGrpcService<PublisherServiceGrpc>();
|
||||||
|
app.MapGrpcReflectionService();
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ public static class ServiceCollectionExtensions
|
|||||||
services.AddRazorPages();
|
services.AddRazorPages();
|
||||||
|
|
||||||
services.AddGrpc(options => { options.EnableDetailedErrors = true; });
|
services.AddGrpc(options => { options.EnableDetailedErrors = true; });
|
||||||
|
services.AddGrpcReflection();
|
||||||
|
|
||||||
services.Configure<RequestLocalizationOptions>(options =>
|
services.Configure<RequestLocalizationOptions>(options =>
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user