From dc2c7025dabc806dced649d52d7c869922c21f3d Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Sun, 17 Aug 2025 14:57:55 -0400 Subject: [PATCH] Remove `IApiTransformable` and add missing `ILegacyApiTransformable` to `PermissionSet` --- .../Authority/UserAuthority.cs | 8 +++++-- .../Controllers/ApiController.cs | 8 ++++--- .../IApiTransformable{TModel,TApiModel}.cs | 24 ------------------- .../Models/OAuthConnection.cs | 3 +-- .../Models/OidcConnection.cs | 3 +-- .../Models/PermissionSet.cs | 2 +- .../Models/UpdatedUser.cs | 6 +---- src/Tgstation.Server.Host/Models/User.cs | 5 +--- src/Tgstation.Server.Host/Models/UserGroup.cs | 2 +- 9 files changed, 17 insertions(+), 44 deletions(-) delete mode 100644 src/Tgstation.Server.Host/Models/IApiTransformable{TModel,TApiModel}.cs diff --git a/src/Tgstation.Server.Host/Authority/UserAuthority.cs b/src/Tgstation.Server.Host/Authority/UserAuthority.cs index 5784dbd07b..6830de8f81 100644 --- a/src/Tgstation.Server.Host/Authority/UserAuthority.cs +++ b/src/Tgstation.Server.Host/Authority/UserAuthority.cs @@ -609,13 +609,17 @@ namespace Tgstation.Server.Host.Authority /// The that was created or updated. /// A representing the running operation. ValueTask SendUserUpdatedTopics(User user) - => ValueTaskExtensions.WhenAll( + { + var transformed = new GraphQL.Transformers.UserTransformer() + .CompiledExpression(user); + return ValueTaskExtensions.WhenAll( GraphQL.Subscriptions.UserSubscriptions.UserUpdatedTopics( user.Require(x => x.Id)) .Select(topic => topicEventSender.SendAsync( topic, - ((IApiTransformable)user).ToApi(), + transformed, CancellationToken.None))); // DCT: Operation should always run + } /// /// Gets all registered s. diff --git a/src/Tgstation.Server.Host/Controllers/ApiController.cs b/src/Tgstation.Server.Host/Controllers/ApiController.cs index dd61412501..d5030fa3f1 100644 --- a/src/Tgstation.Server.Host/Controllers/ApiController.cs +++ b/src/Tgstation.Server.Host/Controllers/ApiController.cs @@ -275,16 +275,18 @@ namespace Tgstation.Server.Host.Controllers int? pageQuery, int? pageSizeQuery, CancellationToken cancellationToken) - where TModel : IApiTransformable where TApiModel : notnull where TTransformer : ITransformer, new() - => PaginatedImpl( + { + var transformer = new TTransformer(); + return PaginatedImpl( queryGenerator, - model => model.ToApi(), + model => transformer.CompiledExpression(model), null, pageQuery, pageSizeQuery, cancellationToken); + } /// /// Generates a paginated response. diff --git a/src/Tgstation.Server.Host/Models/IApiTransformable{TModel,TApiModel}.cs b/src/Tgstation.Server.Host/Models/IApiTransformable{TModel,TApiModel}.cs deleted file mode 100644 index 8b75aa418b..0000000000 --- a/src/Tgstation.Server.Host/Models/IApiTransformable{TModel,TApiModel}.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; - -namespace Tgstation.Server.Host.Models -{ - /// - /// Represents a host-side model that may be transformed into a . - /// - /// The internal model . - /// The API model . - public interface IApiTransformable - where TApiModel : notnull - where TModel : IApiTransformable - { - /// - /// Convert the to it's . - /// - /// The . - /// A new based on the . - TApiModel ToApi() - where TTransformer : ITransformer, new() - => new TTransformer() - .CompiledExpression((TModel)this); - } -} diff --git a/src/Tgstation.Server.Host/Models/OAuthConnection.cs b/src/Tgstation.Server.Host/Models/OAuthConnection.cs index e04a20e442..c5979cbaf6 100644 --- a/src/Tgstation.Server.Host/Models/OAuthConnection.cs +++ b/src/Tgstation.Server.Host/Models/OAuthConnection.cs @@ -4,8 +4,7 @@ namespace Tgstation.Server.Host.Models { /// public sealed class OAuthConnection : Api.Models.OAuthConnection, - ILegacyApiTransformable, - IApiTransformable + ILegacyApiTransformable { /// /// The row Id. diff --git a/src/Tgstation.Server.Host/Models/OidcConnection.cs b/src/Tgstation.Server.Host/Models/OidcConnection.cs index 7eeff69a26..c76f81b0f9 100644 --- a/src/Tgstation.Server.Host/Models/OidcConnection.cs +++ b/src/Tgstation.Server.Host/Models/OidcConnection.cs @@ -4,8 +4,7 @@ namespace Tgstation.Server.Host.Models { /// public sealed class OidcConnection : Api.Models.OidcConnection, - ILegacyApiTransformable, - IApiTransformable + ILegacyApiTransformable { /// /// The row Id. diff --git a/src/Tgstation.Server.Host/Models/PermissionSet.cs b/src/Tgstation.Server.Host/Models/PermissionSet.cs index 3530c2f407..1160ca0e4f 100644 --- a/src/Tgstation.Server.Host/Models/PermissionSet.cs +++ b/src/Tgstation.Server.Host/Models/PermissionSet.cs @@ -3,7 +3,7 @@ namespace Tgstation.Server.Host.Models { /// - public sealed class PermissionSet : Api.Models.PermissionSet, IApiTransformable + public sealed class PermissionSet : Api.Models.PermissionSet, ILegacyApiTransformable { /// /// The of . diff --git a/src/Tgstation.Server.Host/Models/UpdatedUser.cs b/src/Tgstation.Server.Host/Models/UpdatedUser.cs index 99d7384982..c91ca3cf60 100644 --- a/src/Tgstation.Server.Host/Models/UpdatedUser.cs +++ b/src/Tgstation.Server.Host/Models/UpdatedUser.cs @@ -1,15 +1,11 @@ using System; -using Tgstation.Server.Api.Models.Response; - namespace Tgstation.Server.Host.Models { /// /// Represents a that has been updated. /// - public sealed class UpdatedUser : - IApiTransformable, - IApiTransformable + public sealed class UpdatedUser { /// /// The 's . diff --git a/src/Tgstation.Server.Host/Models/User.cs b/src/Tgstation.Server.Host/Models/User.cs index fcf92eebdb..11f7da469b 100644 --- a/src/Tgstation.Server.Host/Models/User.cs +++ b/src/Tgstation.Server.Host/Models/User.cs @@ -8,10 +8,7 @@ using Tgstation.Server.Api.Models.Response; namespace Tgstation.Server.Host.Models { /// - public sealed class User : Api.Models.Internal.UserModelBase, - IApiTransformable, - IApiTransformable, - IApiTransformable + public sealed class User : Api.Models.Internal.UserModelBase { /// /// Username used when creating jobs automatically. diff --git a/src/Tgstation.Server.Host/Models/UserGroup.cs b/src/Tgstation.Server.Host/Models/UserGroup.cs index 7b0bbd6882..c8fa3efa79 100644 --- a/src/Tgstation.Server.Host/Models/UserGroup.cs +++ b/src/Tgstation.Server.Host/Models/UserGroup.cs @@ -11,7 +11,7 @@ namespace Tgstation.Server.Host.Models /// /// Represents a group of s. /// - public sealed class UserGroup : NamedEntity, ILegacyApiTransformable, IApiTransformable + public sealed class UserGroup : NamedEntity, ILegacyApiTransformable { /// /// The the has.