Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import { channelMutations } from '@/inbox/graphql/resolvers/mutations/channels';
import { conversationMutations } from '@/inbox/graphql/resolvers/mutations/conversations';
import { integrationMutations } from '@/inbox/graphql/resolvers/mutations/integrations';
import { facebookMutations } from '@/integrations/facebook/graphql/resolvers/mutations';
import { ticketMutations } from '~/modules/tickets/graphql/resolvers/mutations';

export const mutations = {
...channelMutations,
...conversationMutations,
...integrationMutations,
...facebookMutations
...facebookMutations,
...ticketMutations,
};
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import { channelQueries } from '@/inbox/graphql/resolvers/queries/channels';
import { conversationQueries } from '@/inbox/graphql/resolvers/queries/conversations';
import { integrationQueries } from '@/inbox/graphql/resolvers/queries/integrations';
import { facebookQueries } from '@/integrations/facebook/graphql/resolvers/queries';
import { queries as ticketQueries } from '~/modules/tickets/graphql/resolvers/queries';

export const queries = {
...channelQueries,
...conversationQueries,
...integrationQueries,
...facebookQueries
...facebookQueries,
...ticketQueries,
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import inboxResolvers from '@/inbox/graphql/resolvers/customResolvers';
import ticketResolvers from '~/modules/tickets/graphql/resolvers/customResolvers';

export const customResolvers = {
...inboxResolvers,
...ticketResolvers,
};
31 changes: 31 additions & 0 deletions backend/plugins/frontline_api/src/apollo/schema/extensions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
export const TypeExtensions = `
extend type User @key(fields: "_id") {
_id: String @external,
conversations: [Conversation]
}

extend type Branch @key(fields: "_id") {
_id: String @external
}

extend type Department @key(fields: "_id") {
_id: String @external
}

extend type Company @key(fields: "_id") {
_id: String @external
}

extend type Customer @key(fields: "_id") {
_id: String @external
conversations: [Conversation]
}

extend type Tag @key(fields: "_id") {
_id: String @external
}

extend type Brand @key(fields: "_id") {
_id: String @external
}
`;
12 changes: 11 additions & 1 deletion backend/plugins/frontline_api/src/apollo/schema/schema.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// import { TypeExtensions } from '../../modules/inbox/graphql/schemas/extensions';
import {
mutations as ChannelsMutations,
queries as ChannelsQueries,
types as ChannelsTypes,
} from '@/inbox/graphql/schemas/channel';
import { TypeExtensions } from './extensions';

import {
mutations as ConversationsMutations,
Expand All @@ -23,23 +23,33 @@ import {
types as FacebookTypes,
} from '@/integrations/facebook/graphql/schema/facebook';

import {
mutations as TicketsMutations,
queries as TicketsQueries,
types as TicketsTypes,
} from '~/modules/tickets/graphql/schemas';

export const types = `
${TypeExtensions}
${ChannelsTypes}
${ConversationsTypes}
${IntegrationsTypes}
${FacebookTypes}
${TicketsTypes}
`;
export const queries = `
${ChannelsQueries}
${ConversationsQueries}
${IntegrationsQueries}
${FacebookQueries}
${TicketsQueries}
`;

export const mutations = `
${ChannelsMutations}
${ConversationsMutations}
${IntegrationsMutations}
${FacebookMutations}
${TicketsMutations}
`;
export default { types, queries, mutations };
105 changes: 64 additions & 41 deletions backend/plugins/frontline_api/src/connectionResolvers.ts
Original file line number Diff line number Diff line change
@@ -1,53 +1,30 @@
import { createGenerateModels } from 'erxes-api-shared/utils';
import { IMainContext } from 'erxes-api-shared/core-types';
import mongoose from 'mongoose';
import { IChannelDocument } from '@/inbox/@types/channels';
import { IIntegrationDocument } from '@/inbox/@types/integrations';
import { IConversationDocument } from '@/inbox/@types/conversations';
import { IMessageDocument } from '@/inbox/@types/conversationMessages';
import { IFacebookIntegrationDocument } from '@/integrations/facebook/@types/integrations';
import { IFacebookLogDocument } from '@/integrations/facebook/@types/logs';
import { IFacebookAccountDocument } from '@/integrations/facebook/@types/accounts';
import { IFacebookCustomerDocument } from '@/integrations/facebook/@types/customers';
import { IFacebookConversationDocument } from '@/integrations/facebook/@types/conversations';
import { IFacebookConversationMessageDocument } from '@/integrations/facebook/@types/conversationMessages';
import { IFacebookCommentConversationDocument } from '@/integrations/facebook/@types/comment_conversations';
import { IFacebookCommentConversationReplyDocument } from '@/integrations/facebook/@types/comment_conversations_reply';
import { IFacebookPostConversationDocument } from '@/integrations/facebook/@types/postConversations';
import { IFacebookConfigDocument } from '@/integrations/facebook/@types/config';
import { IConversationDocument } from '@/inbox/@types/conversations';
import { IIntegrationDocument } from '@/inbox/@types/integrations';
import { IChannelModel, loadChannelClass } from '@/inbox/db/models/Channels';
import {
IIntegrationModel,
loadClass as loadIntegrationClass,
} from '~/modules/inbox/db/models/Integrations';
import {
IConversationModel,
loadClass as loadConversationClass,
} from '@/inbox/db/models/Conversations';
import {
IMessageModel,
loadClass as loadMessageClass,
} from '@/inbox/db/models/ConversationMessages';
import {
IFacebookIntegrationModel,
loadFacebookIntegrationClass,
} from '@/integrations/facebook/db/models/Integrations';
IConversationModel,
loadClass as loadConversationClass,
} from '@/inbox/db/models/Conversations';
import { IFacebookAccountDocument } from '@/integrations/facebook/@types/accounts';
import { IFacebookCommentConversationDocument } from '@/integrations/facebook/@types/comment_conversations';
import { IFacebookCommentConversationReplyDocument } from '@/integrations/facebook/@types/comment_conversations_reply';
import { IFacebookConfigDocument } from '@/integrations/facebook/@types/config';
import { IFacebookConversationMessageDocument } from '@/integrations/facebook/@types/conversationMessages';
import { IFacebookConversationDocument } from '@/integrations/facebook/@types/conversations';
import { IFacebookCustomerDocument } from '@/integrations/facebook/@types/customers';
import { IFacebookIntegrationDocument } from '@/integrations/facebook/@types/integrations';
import { IFacebookLogDocument } from '@/integrations/facebook/@types/logs';
import { IFacebookPostConversationDocument } from '@/integrations/facebook/@types/postConversations';
import {
IFacebookAccountModel,
loadFacebookAccountClass,
} from '@/integrations/facebook/db/models/Accounts';
import {
IFacebookCustomerModel,
loadFacebookCustomerClass,
} from '@/integrations/facebook/db/models/Customers';
import {
IFacebookConversationModel,
loadFacebookConversationClass,
} from '@/integrations/facebook/db/models/Conversations';
import {
IFacebookConversationMessageModel,
loadFacebookConversationMessageClass,
} from '@/integrations/facebook/db/models/ConversationMessages';
import {
IFacebookCommentConversationModel,
loadFacebookCommentConversationClass,
Expand All @@ -56,6 +33,26 @@ import {
IFacebookCommentConversationReplyModel,
loadFacebookCommentConversationReplyClass,
} from '@/integrations/facebook/db/models/Comment_conversations_reply';
import {
IFacebookConfigModel,
loadFacebookConfigClass,
} from '@/integrations/facebook/db/models/Config';
import {
IFacebookConversationMessageModel,
loadFacebookConversationMessageClass,
} from '@/integrations/facebook/db/models/ConversationMessages';
import {
IFacebookConversationModel,
loadFacebookConversationClass,
} from '@/integrations/facebook/db/models/Conversations';
import {
IFacebookCustomerModel,
loadFacebookCustomerClass,
} from '@/integrations/facebook/db/models/Customers';
import {
IFacebookIntegrationModel,
loadFacebookIntegrationClass,
} from '@/integrations/facebook/db/models/Integrations';
import {
IFacebookLogModel,
loadFacebookLogClass,
Expand All @@ -64,10 +61,24 @@ import {
IFacebookPostConversationModel,
loadFacebookPostConversationClass,
} from '@/integrations/facebook/db/models/PostConversations';
import { IMainContext } from 'erxes-api-shared/core-types';
import { createGenerateModels } from 'erxes-api-shared/utils';
import mongoose from 'mongoose';
import {
IFacebookConfigModel,
loadFacebookConfigClass,
} from '@/integrations/facebook/db/models/Config';
IIntegrationModel,
loadClass as loadIntegrationClass,
} from '~/modules/inbox/db/models/Integrations';
import { IBoardModel } from '~/modules/tickets/db/models/Boards';
import {
IChecklistItemModel,
IChecklistModel,
} from '~/modules/tickets/db/models/Checklists';
import { ICommentModel } from '~/modules/tickets/db/models/Comments';
import { IPipelineLabelModel } from '~/modules/tickets/db/models/Labels';
import { IPipelineModel } from '~/modules/tickets/db/models/Pipelines';
import { IStageModel } from '~/modules/tickets/db/models/Stages';
import { ITicketModel } from '~/modules/tickets/db/models/Tickets';
import { loadClasses as loadTicketClasses } from '~/modules/tickets/resolver';

export interface IModels {
Channels: IChannelModel;
Expand All @@ -84,6 +95,15 @@ export interface IModels {
FacebookLogs: IFacebookLogModel;
FacebookPostConversations: IFacebookPostConversationModel;
FacebookConfigs: IFacebookConfigModel;

Boards: IBoardModel;
Pipelines: IPipelineModel;
Stages: IStageModel;
Tickets: ITicketModel;
PipelineLabels: IPipelineLabelModel;
CheckLists: IChecklistModel;
CheckListItems: IChecklistItemModel;
Comments: ICommentModel;
}

export interface IContext extends IMainContext {
Expand Down Expand Up @@ -163,6 +183,9 @@ export const loadClasses = (
IFacebookConfigDocument,
IFacebookConfigModel
>('facebook_configs', loadFacebookConfigClass(models));

loadTicketClasses(models, db);

return models;
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,6 @@
import { GQL_CURSOR_PARAM_DEFS } from 'erxes-api-shared/utils';

export const types = `
extend type User @key(fields: "_id") {
_id: String @external
}

extend type Customer @key(fields: "_id") {
_id: String @external
conversations: [Conversation]
}
extend type Brand @key(fields: "_id") {
_id: String @external
}

extend type Tag @key(fields: "_id") {
_id: String @external
}

type Conversation {
_id: String!
content: String
Expand Down
16 changes: 16 additions & 0 deletions backend/plugins/frontline_api/src/modules/tickets/@types/board.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Document } from 'mongoose';
import { IPipeline } from '~/modules/tickets/@types/pipeline';

export interface IBoard {
name?: string;
order?: number;
userId?: string;
type: string;
}
Comment on lines +4 to +9
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add type constraints for consistency.

Similar to the pipeline interface, the type field should have enum constraints to prevent invalid values.

+export enum BoardType {
+  TICKET = 'ticket',
+  TASK = 'task',
+  DEAL = 'deal'
+}

export interface IBoard {
  name?: string;
  order?: number;
  userId?: string;
-  type: string;
+  type: BoardType;
}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export interface IBoard {
name?: string;
order?: number;
userId?: string;
type: string;
}
export enum BoardType {
TICKET = 'ticket',
TASK = 'task',
DEAL = 'deal'
}
export interface IBoard {
name?: string;
order?: number;
userId?: string;
type: BoardType;
}
🤖 Prompt for AI Agents
In backend/plugins/frontline_api/src/modules/tickets/@types/board.ts between
lines 4 and 9, the IBoard interface's type field lacks enum constraints, which
can lead to invalid values. Define an enum for allowed type values similar to
the pipeline interface and update the type field to use this enum, ensuring only
valid predefined values are assignable.


export interface IBoardDocument extends IBoard, Document {
_id: string;

pipelines?: IPipeline[];
createdAt: Date;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Document } from 'mongoose';

export interface IChecklist {
contentType: string;
contentTypeId: string;
title: string;
}

export interface IChecklistDocument extends IChecklist, Document {
_id: string;
createdUserId: string;
createdDate: Date;
}

export interface IChecklistItem {
checklistId: string;
content: string;
isChecked: boolean;
}

export interface IChecklistItemDocument extends IChecklistItem, Document {
_id: string;
order: number;
createdUserId: string;
createdDate: Date;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Document } from 'mongoose';

export interface IComment {
typeId: string;
type: string;

content: string;
parentId?: string;

userId?: string;
userType?: string;
}

export interface ICommentDocument extends IComment, Document {
_id: string;
createdAt?: Date;
}
14 changes: 14 additions & 0 deletions backend/plugins/frontline_api/src/modules/tickets/@types/label.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Document } from 'mongoose';

export interface IPipelineLabel {
name: string;
colorCode: string;
pipelineId: string;
createdBy?: string;
}

export interface IPipelineLabelDocument extends IPipelineLabel, Document {
_id: string;

createdAt?: Date;
}
Loading