Add grpc reflection

This commit is contained in:
2025-10-26 11:38:18 +08:00
parent cdfc3f6571
commit 29c5971554
13 changed files with 23 additions and 34 deletions

View File

@@ -21,6 +21,7 @@ public static class ApplicationConfiguration
app.MapControllers(); app.MapControllers();
app.MapGrpcService<CustomAppServiceGrpc>(); app.MapGrpcService<CustomAppServiceGrpc>();
app.MapGrpcReflectionService();
return app; return app;
} }

View File

@@ -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 =>
{ {

View File

@@ -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;
} }

View File

@@ -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 =>
{ {

View File

@@ -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

View File

@@ -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;
} }

View File

@@ -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();

View File

@@ -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;
} }

View File

@@ -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>();

View File

@@ -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>

View File

@@ -130,33 +130,28 @@ public class PostServiceGrpc(AppDatabase db, PostService ps) : Shared.Proto.Post
.Include(p => p.FeaturedRecords) .Include(p => p.FeaturedRecords)
.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();

View File

@@ -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;
} }

View File

@@ -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 =>
{ {