Browse Source

Maintenance: Change IsModelObject concern to always return UserType for created_by and updated_by.

Martin Gruner 2 years ago
parent
commit
dcd8997ae8

+ 2 - 2
app/frontend/shared/graphql/types.ts

@@ -1249,7 +1249,7 @@ export type User = ObjectAttributeValueInterface & {
   /** Create date/time of the record */
   createdAt: Scalars['ISO8601DateTime'];
   /** User that created this record */
-  createdById: Scalars['Int'];
+  createdBy?: Maybe<User>;
   email?: Maybe<Scalars['String']>;
   fax?: Maybe<Scalars['String']>;
   firstname?: Maybe<Scalars['String']>;
@@ -1278,7 +1278,7 @@ export type User = ObjectAttributeValueInterface & {
   /** Last update date/time of the record */
   updatedAt: Scalars['ISO8601DateTime'];
   /** Last user that updated this record */
-  updatedById: Scalars['Int'];
+  updatedBy?: Maybe<User>;
   verified?: Maybe<Scalars['Boolean']>;
   vip?: Maybe<Scalars['Boolean']>;
   web?: Maybe<Scalars['String']>;

+ 11 - 2
app/graphql/gql/concerns/is_model_object.rb

@@ -10,8 +10,17 @@ module Gql::Concerns::IsModelObject
     field :updated_at, GraphQL::Types::ISO8601DateTime, null: false, description: 'Last update date/time of the record'
 
     if name.eql? 'Gql::Types::UserType'
-      field :created_by_id, Integer, null: false, description: 'User that created this record'
-      field :updated_by_id, Integer, null: false, description: 'Last user that updated this record'
+      # User model does not have relations for created_by and updated_by, so use a resolver for it.
+      field :created_by, Gql::Types::UserType, description: 'User that created this record'
+      field :updated_by, Gql::Types::UserType, description: 'Last user that updated this record'
+
+      def created_by
+        User.find_by(id: @object.created_by_id)
+      end
+
+      def updated_by
+        User.find_by(id: @object.updated_by_id)
+      end
     else
       belongs_to :created_by, Gql::Types::UserType, null: false, description: 'User that created this record'
       belongs_to :updated_by, Gql::Types::UserType, null: false, description: 'Last user that updated this record'

+ 10 - 0
spec/graphql/gql/queries/current_user_spec.rb

@@ -35,6 +35,12 @@ RSpec.describe Gql::Queries::CurrentUser, type: :graphql do
             permissions {
               names
             }
+            createdBy {
+              firstname
+            }
+            updatedBy {
+              firstname
+            }
           }
         }
       QUERY
@@ -62,6 +68,10 @@ RSpec.describe Gql::Queries::CurrentUser, type: :graphql do
       it 'has permission data' do
         expect(gql.result.data['permissions']['names']).to eq(agent.permissions_with_child_names)
       end
+
+      it 'has updatedBy data' do
+        expect(gql.result.data['updatedBy']['firstname']).to eq(User.first.firstname)
+      end
     end
 
     it_behaves_like 'graphql responds with error if unauthenticated'