From 282e5ba2d8c3c927613762976aa3418c4c47a4ef Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Mon, 6 Mar 2023 12:37:28 +0100 Subject: [PATCH] feat: Implement getUsageData graphQL query --- .../src/graphql/queries/get-usage-data.ee.ts | 29 +++++++++++++++++++ .../backend/src/graphql/query-resolvers.ts | 2 ++ packages/backend/src/graphql/schema.graphql | 8 +++++ packages/backend/src/models/usage-data.ee.ts | 2 +- packages/backend/src/models/user.ts | 10 +++++++ 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/graphql/queries/get-usage-data.ee.ts diff --git a/packages/backend/src/graphql/queries/get-usage-data.ee.ts b/packages/backend/src/graphql/queries/get-usage-data.ee.ts new file mode 100644 index 00000000..de67d52d --- /dev/null +++ b/packages/backend/src/graphql/queries/get-usage-data.ee.ts @@ -0,0 +1,29 @@ +import appConfig from '../../config/app'; +import Context from '../../types/express/context'; + +const getUsageData = async ( + _parent: unknown, + _params: unknown, + context: Context +) => { + if (!appConfig.isCloud) return; + + const usageData = await context.currentUser + .$relatedQuery('usageData') + .throwIfNotFound(); + + const paymentPlan = await context.currentUser + .$relatedQuery('paymentPlan') + .throwIfNotFound(); + + const computedUsageData = { + allowedTaskCount: paymentPlan.taskCount, + consumedTaskCount: usageData.consumedTaskCount, + remainingTaskCount: paymentPlan.taskCount - usageData.consumedTaskCount, + nextResetAt: usageData.nextResetAt, + }; + + return computedUsageData; +}; + +export default getUsageData; diff --git a/packages/backend/src/graphql/query-resolvers.ts b/packages/backend/src/graphql/query-resolvers.ts index d1d3a903..ffb6f1e5 100644 --- a/packages/backend/src/graphql/query-resolvers.ts +++ b/packages/backend/src/graphql/query-resolvers.ts @@ -11,6 +11,7 @@ import getExecutionSteps from './queries/get-execution-steps'; import getDynamicData from './queries/get-dynamic-data'; import getDynamicFields from './queries/get-dynamic-fields'; import getCurrentUser from './queries/get-current-user'; +import getUsageData from './queries/get-usage-data.ee'; import getAutomatischInfo from './queries/get-automatisch-info'; import healthcheck from './queries/healthcheck'; @@ -28,6 +29,7 @@ const queryResolvers = { getDynamicData, getDynamicFields, getCurrentUser, + getUsageData, getAutomatischInfo, healthcheck, }; diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql index 97ee91f6..6c5da74a 100644 --- a/packages/backend/src/graphql/schema.graphql +++ b/packages/backend/src/graphql/schema.graphql @@ -34,6 +34,7 @@ type Query { parameters: JSONObject ): [SubstepArgument] getCurrentUser: User + getUsageData: GetUsageData getAutomatischInfo: GetAutomatischInfo healthcheck: AppHealth } @@ -467,6 +468,13 @@ type GetAutomatischInfo { isCloud: String } +type GetUsageData { + allowedTaskCount: Int + consumedTaskCount: Int + remainingTaskCount: Int + nextResetAt: String +} + schema { query: Query mutation: Mutation diff --git a/packages/backend/src/models/usage-data.ee.ts b/packages/backend/src/models/usage-data.ee.ts index 50f8ea8a..50e6c84f 100644 --- a/packages/backend/src/models/usage-data.ee.ts +++ b/packages/backend/src/models/usage-data.ee.ts @@ -26,7 +26,7 @@ class UsageData extends Base { relation: Base.BelongsToOneRelation, modelClass: User, join: { - from: 'payment_plans.user_id', + from: 'usage_data.user_id', to: 'users.id', }, }, diff --git a/packages/backend/src/models/user.ts b/packages/backend/src/models/user.ts index 32ca83e5..57b07e89 100644 --- a/packages/backend/src/models/user.ts +++ b/packages/backend/src/models/user.ts @@ -7,6 +7,7 @@ import Execution from './execution'; import bcrypt from 'bcrypt'; import crypto from 'crypto'; import PaymentPlan from './payment-plan.ee'; +import UsageData from './usage-data.ee'; class User extends Base { id!: string; @@ -21,6 +22,7 @@ class User extends Base { steps?: Step[]; executions?: Execution[]; paymentPlan?: PaymentPlan; + usageData?: UsageData; static tableName = 'users'; @@ -86,6 +88,14 @@ class User extends Base { to: 'users.id', }, }, + usageData: { + relation: Base.HasOneRelation, + modelClass: UsageData, + join: { + from: 'usage_data.user_id', + to: 'users.id', + }, + }, }); login(password: string) {