Commit Graph

110 Commits

Author SHA1 Message Date
david.nguyen 433b852a43 Refactor proto generation from source generator to MSBuild task
Publish NuGets / build (release) Successful in 40s
Replace ProtoFileSourceGenerator and WriteProtoFileTask with a new
GenerateProtoFileTask that creates its own Roslyn compilation. This
solves the timing issue where source generators run too late for
Grpc.Tools to process the generated proto files.

The new task runs after ResolveAssemblyReferences but before
_gRPC_GetProtoc and CoreCompile, ensuring the proto file exists
when Grpc.Tools needs it.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10.1.0-rc8
2026-01-26 14:35:56 -05:00
david.nguyen 03041721ca Preserve existing proto files instead of overwriting
Publish NuGets / build (release) Successful in 39s
If a proto file already exists (committed to repo), don't overwrite it
with a placeholder. This allows first-time builds to work correctly
when the proto file is already in the repository.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10.1.0-rc7
2026-01-22 12:05:45 -05:00
david.nguyen 05449b9a28 Add empty service definitions to placeholder proto
Grpc.Tools needs service definitions to generate the base classes
(CommandService+CommandServiceBase, etc.) that GrpcGenerator looks for.
Without these, the service bases wouldn't exist on first build.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 02:21:43 -05:00
david.nguyen dfbef9d161 Fix placeholder proto namespace to use project's actual namespace
The WriteProtoFileTask now receives RootNamespace and AssemblyName from
MSBuild and uses them for the placeholder proto's csharp_namespace instead
of hardcoded "Generated.Grpc". This ensures GrpcGenerator can find the
service base types on first build, enabling gRPC service registration
to work without requiring a second build.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 02:19:50 -05:00
david.nguyen 377977b080 Make GeneratedProtoFile class public for cross-assembly discovery
Publish NuGets / build (release) Successful in 34s
The generated proto file holder class was internal, preventing
reflection-based service registration from discovering it across
assembly boundaries.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10.1.0-rc6
2026-01-22 00:31:34 -05:00
david.nguyen 20147bfec7 Add diagnostic logging when gRPC generated code not found
Publish NuGets / build (release) Successful in 37s
When AddGrpcFromConfiguration method is not found via reflection,
logs detailed diagnostics to help identify the root cause:
- Entry assembly name and total type count
- All Grpc-related types with their IsClass/IsSealed/IsPublic flags
- Whether the target method exists on each type
- ReflectionTypeLoadException details if type loading fails

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10.1.0-rc5
2026-01-21 16:10:18 -05:00
david.nguyen 18f81a28e8 Add authorization checks to gRPC service implementations
Publish NuGets / build (release) Successful in 44s
- Add ICommandAuthorizationService check to CommandServiceImpl
- Add IQueryAuthorizationService check to QueryServiceImpl
- Add IQueryAuthorizationService check to DynamicQueryServiceImpl
- Return Unauthenticated/PermissionDenied gRPC status codes
- Use global:: prefix for Grpc.Core namespace to avoid conflicts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10.1.0-rc4
2026-01-21 14:18:07 -05:00
david.nguyen 201768e716 Revert AllowAnonymous endpoint propagation
Publish NuGets / build (release) Successful in 35s
Remove the WithAllowAnonymousIfAttributePresent helper method.
Authorization should be handled by IQueryAuthorizationService and
ICommandAuthorizationService implementations, not by ASP.NET Core
middleware.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10.1.0-rc3
2026-01-21 13:07:03 -05:00
david.nguyen 932ee6e632 add AllowAnonymous support for MinimalApi endpoints
Publish NuGets / build (release) Successful in 37s
Endpoints with [AllowAnonymous] attribute on query/command class
now bypass ASP.NET Core authorization middleware.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10.1.0-rc2
2026-01-21 12:29:26 -05:00
jp 4bf03446c0 docs: update .NET 8 references to .NET 10
Publish NuGets / build (release) Successful in 50s
Consolidated roadmap to show .NET 10 with C# 14 as current target.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
10.1.0-rc1
2026-01-17 09:22:27 -05:00
david.nguyen 227be70f95 Fix MinimalApi to resolve authorization services per-request
- Resolve ICommandAuthorizationService and IQueryAuthorizationService from request-scoped serviceProvider
- Allows Scoped authorization services that depend on DbContext
- Updated both MinimalApi and DynamicQuery.MinimalApi

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 15:56:31 -05:00
david.nguyen bd43bc9bde Fix gRPC source generator for complex nested types
- Add DateTime/Timestamp conversion in nested property mapping
- Add IsReadOnly property detection to skip computed properties
- Extract ElementNestedProperties for complex list element types
- Skip read-only properties in GenerateComplexObjectMapping and GenerateComplexListMapping

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 23:25:01 -05:00
david.nguyen 661f5b4b1c Fix GrpcGenerator type mapping for commands and nullable primitives
- Add proper complex type mapping for command results (same as queries already had)
- Handle nullable primitives (long?, int?, etc.) with default value fallback
- Fixes CS0029 and CS0266 compilation errors in generated gRPC service implementations

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 11:29:32 -05:00
david.nguyen 99aebcf314 Fix proto generation for collection types (NpgsqlPolygon, etc.)
- Add IsCollectionTypeByInterface() to detect types implementing IList<T>, ICollection<T>, IEnumerable<T>
- Add GetCollectionElementTypeByInterface() to extract element type from collection interfaces
- Add IsCollectionInternalProperty() to filter out Count, Capacity, IsReadOnly, etc.
- Update GenerateComplexTypeMessage to generate `repeated T items` for collection types
- Filter out indexers (!p.IsIndexer) and collection-internal properties from all property extraction

This fixes the invalid proto syntax where C# indexers (this[]) were being generated
as proto fields, causing proto compilation errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 10:33:55 -05:00
Mathias Beaulieu-Duncan f76dbb1a97 fix: add Guid to string conversion in gRPC source generator
The MapToProtoModel function was silently failing when mapping Guid
properties to proto string fields, causing IDs to be empty in gRPC
responses. Added explicit Guid → string conversion handling.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 19:06:18 -05:00
Mathias Beaulieu-Duncan 9b9e2cbdbe added domain events, fix IQueryalbeProvider abstraction, added support for sagas and RabbitMQ 2025-12-20 15:13:05 -05:00
mathias 4051800934 merge
Publish NuGets / build (release) Successful in 35s
10.0.0
2025-12-02 15:44:21 -05:00
mathias a312428093 update to .net 10 lts 2025-12-02 15:40:31 -05:00
mathias dea62c2434 added roadmap and plans 2025-11-08 13:29:03 -05:00
mathias e72cbe4319 update readme 2025-11-07 13:34:51 -05:00
mathias 467e700885 added nugets references in readme :) 2025-11-07 13:01:24 -05:00
mathias 898aca0905 fix nuget package for Generator assembly?
Publish NuGets / build (release) Successful in 46s
10.0.0-preview-rc2
2025-11-07 12:48:00 -05:00
mathias 9aed854b1b removed github workflow
Publish NuGets / build (release) Failing after 50s
10.0.0-preview-rc1
2025-11-07 12:05:32 -05:00
mathias b06acc7675 remove TestClient and update gitea workflow 2025-11-07 12:04:47 -05:00
mathias 24a08c314a prepare for publishing 2025-11-07 12:02:33 -05:00
mathias 26ed34cd66 yes 2025-11-07 11:39:08 -05:00
mathias 2ee65b8dad yes 2025-11-04 16:45:54 -05:00
mathias e19fad2baa checkpoint 2025-11-04 15:05:07 -05:00
mathias facc8d7851 mega cleanup :D 2025-11-03 16:00:13 -05:00
mathias ed01f58a0c checkpoint 2025-11-03 11:19:50 -05:00
mathias 5ba351de9c added dynamic queries for minimal api 2025-11-03 09:50:03 -05:00
mathias a0426aa0d1 yessir 2025-11-03 07:44:17 -05:00
mathias d2a4639c0e yes 2025-11-02 20:44:47 -05:00
mathias ccfaa35c1d wip proto file generation 2025-11-02 11:22:28 -05:00
mathias 6735261f21 update readme 2025-11-02 03:38:10 -05:00
mathias 4824c0d31d first grpc and minimal api preview :) 2025-11-02 03:14:38 -05:00
mathias f6dccf46d7 cat on a spaceship 2025-11-01 22:38:46 -04:00
mathias 747fa227a1 woawzies 2025-11-01 21:58:34 -04:00
mathias de6e1267dd update readme 2024-12-22 23:16:48 -05:00
mathias 7804f9ba09 fix symbols and pipeline 2024-12-22 13:47:30 -05:00
mathias b7b88bc258 added icon and readmy for nugets, added gitea pipeline, added AoT compatible for all projects that are not AspNetCore specific 2024-12-22 11:59:19 -05:00
mathias c6a28f352f update package icon for Dynamic Query AspNet 2024-11-13 11:14:53 -05:00
mathias edb84a792a fix random chars in project file 2024-09-03 04:31:32 -04:00
mathias e58b86c0fb fix DynamicQueryController removed Generic that shouldn't have been removed in the first place, causing run time issues with MakeGeneric 2024-09-02 21:28:27 -04:00
mathias c230d039f2 Update README.md 2024-08-25 12:42:54 -04:00
mathias 43bf6ebd6b Update README.md 2024-08-25 12:40:59 -04:00
Mathias Beaulieu-Duncan 2da25631bf update roadmap 2023-11-08 22:57:59 -05:00
Mathias Beaulieu-Duncan 5188785339 update roadmap 2023-11-08 22:57:29 -05:00
Mathias Beaulieu-Duncan d328782681 update roadmap 2023-11-08 22:56:22 -05:00
Mathias Beaulieu-Duncan 1a54c12114 Merge remote-tracking branch 'origin/main' 2023-11-08 22:54:36 -05:00