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.