| |
| const { gql } = require('graphql-tag'); |
|
|
| const typeDefs = gql` |
| |
| |
| |
| scalar Date |
| scalar JSON |
| scalar Upload |
| scalar FileUpload |
| |
| |
| |
| |
| input UserProfileInput { |
| nickname: String |
| avatar: String |
| coverImage: String |
| jobTitle: String |
| bio: String |
| phone: String |
| location: String |
| industry: String |
| gender: String |
| showGender: Boolean |
| isPublic: Boolean |
| avatarDisplayType: String |
| svgColor: String |
| status: String |
| portfolioName: String |
| pdfFormat: String |
| resumeUrl: String |
| showEmail: Boolean |
| socialLinks: SocialLinksInput |
| education: [EducationInput] |
| experience: [ExperienceInput] |
| certificates: [CertificateInput] |
| skills: [SkillInput] |
| projects: [ProjectInput] |
| interests: [String] |
| customSections: [CustomSectionInput] |
| |
| sectionNames: SectionNamesInput |
| sectionVisibility: SectionVisibilityInput |
| sectionOrder: [SectionOrderItemInput!] |
| sectionStyleSettings: SectionStyleSettingsInput |
| designSettings: DesignSettingsInput |
| aiBot: AIBotInput |
| |
| theme: ThemeInput |
| layout: LayoutInput |
| header: HeaderInput |
| footer: FooterInput |
| seo: SEOInput |
| schema: SchemaInput |
| audio: AudioInput |
| } |
| |
| input SocialLinksInput { |
| linkedin: String |
| github: String |
| behance: String |
| whatsapp: String |
| instagram: String |
| facebook: String |
| twitter: String |
| tiktok: String |
| youtube: String |
| telegram: String |
| } |
| |
| input EducationInput { |
| institution: String! |
| degree: String! |
| year: String! |
| grade: String |
| } |
| |
| input ExperienceInput { |
| company: String! |
| role: String! |
| duration: String! |
| } |
| |
| input CertificateInput { |
| name: String! |
| issuer: String! |
| year: String! |
| } |
| |
| input SkillInput { |
| name: String! |
| percentage: Int! |
| icon: String |
| } |
| |
| input ProjectInput { |
| _id: ID |
| title: String! |
| description: String |
| image: String |
| rating: String |
| stars: Int |
| links: [ProjectLinkInput!] |
| isPublic: Boolean |
| githubData: JSON |
| importedFrom: String |
| githubId: String |
| createdAt: Date |
| } |
| |
| input ProjectLinkInput { |
| option: String! |
| value: String! |
| isPrivate: Boolean |
| } |
| |
| input CustomSectionInput { |
| _id: ID |
| name: String! |
| type: String! |
| content: JSON! |
| isVisible: Boolean |
| settings: JSON |
| } |
| |
| input DesignSettingsInput { |
| primaryColor: String |
| secondaryColor: String |
| fontFamily: String |
| borderRadius: Int |
| zoomLevel: Int |
| shadowType: String |
| animationType: String |
| glassEffect: Boolean |
| backgroundType: String |
| backgroundValue: String |
| customCss: String |
| } |
| |
| input AIBotInput { |
| enabled: Boolean |
| provider: String |
| customApiKey: String |
| customModel: String |
| temperature: Float |
| maxTokens: Int |
| systemPrompt: String |
| } |
| |
| input AudioInput { |
| url: String |
| title: String |
| delay: Float |
| loop: Boolean |
| volume: Int |
| } |
| |
| |
| |
| |
| type User { |
| _id: ID! |
| username: String! |
| email: String! |
| isAdmin: Boolean! |
| emailVerified: Boolean! |
| profile: Profile! |
| interactionsSettings: InteractionsSettings |
| createdAt: Date! |
| updatedAt: Date! |
| |
| followersCount: Int |
| followingCount: Int |
| postsCount: Int |
| projectsCount: Int |
| jobsCount: Int |
| totalLikes: Int |
| |
| store: Store |
| subscription: UserSubscription |
| permissions: UserPermissions |
| hasStory: Boolean |
| } |
| |
| type UserPermissions { |
| canCreateStore: Boolean! |
| canCreateProducts: Boolean! |
| } |
| |
| type Profile { |
| nickname: String |
| avatar: String |
| coverImage: String |
| jobTitle: String |
| bio: String |
| phone: String |
| location: String |
| industry: String |
| gender: String |
| showGender: Boolean |
| isPublic: Boolean |
| avatarDisplayType: String |
| svgColor: String |
| status: String |
| portfolioName: String |
| pdfFormat: String |
| resumeUrl: String |
| showEmail: Boolean |
| socialLinks: SocialLinks! |
| education: [Education!]! |
| experience: [Experience!]! |
| certificates: [Certificate!]! |
| skills: [Skill!]! |
| projects: [Project!]! |
| interests: [String!]! |
| customSections: [CustomSection!]! |
| sectionNames: SectionNames |
| sectionVisibility: SectionVisibility |
| sectionOrder: [SectionOrderItem!]! |
| sectionStyleSettings: SectionStyleSettings |
| designSettings: DesignSettings |
| aiBot: AIBot |
| theme: Theme |
| layout: Layout |
| header: Header |
| footer: Footer |
| seo: SEO |
| schema: SchemaType |
| audio: Audio |
| storeEnabled: Boolean |
| averageRating: Float |
| totalRatings: Int |
| hasStory: Boolean |
| } |
| |
| |
| |
| |
| |
| |
| |
| type ProfilePageResult { |
| profile: User! |
| stats: UserStats! |
| ratings: RatingsResult! |
| interactions: [UserInteraction!]! |
| jobApplications: JobApplicationsResult! |
| contributionGraph: ContributionGraphResult! |
| notifications: NotificationsResult! |
| analytics: ProfileAnalytics |
| aiStatus: AIStatus! |
| followStatus: FollowStatus |
| alsoViewed: [User!]! |
| pageSuggestions: [PageSuggestion!]! |
| unreadCount: Int! |
| storeSettings: StoreSettingsResult |
| subscriptionStatus: SubscriptionStatus! |
| } |
| |
| type UserInteraction { |
| _id: ID! |
| commentId: ID |
| projectId: ID |
| projectTitle: String |
| projectNickname: String |
| projectImage: String |
| rating: Int! |
| text: String! |
| timestamp: Date! |
| replies: [UserInteraction!]! |
| likes: [String!]! |
| isEdited: Boolean! |
| parentCommentId: ID |
| visibility: String! |
| } |
| |
| type ContributionGraphResult { |
| total: Int! |
| weeks: [[ContributionDay!]!]! |
| year: Int! |
| months: [String!]! |
| weekDays: [String!]! |
| } |
| |
| type ContributionDay { |
| date: String! |
| count: Int! |
| level: Int! |
| activities: [ContributionActivity!]! |
| } |
| |
| type ContributionActivity { |
| type: String! |
| id: ID! |
| projectId: ID |
| postId: ID |
| jobId: ID |
| } |
| |
| type PageSuggestion { |
| _id: ID! |
| name: String! |
| logo: String |
| followersCount: Int! |
| isFollowing: Boolean! |
| url: String! |
| } |
| |
| type ProfileAnalytics { |
| views: Int! |
| uniqueViews: Int! |
| weeklyViews: Int! |
| impressions: Int! |
| searches: Int! |
| lastUpdated: Date! |
| } |
| |
| type SubscriptionStatus { |
| hasActiveSubscription: Boolean! |
| canCreateStore: Boolean! |
| message: String |
| planName: String |
| daysLeft: Int |
| } |
| |
| |
| |
| |
| type SectionNames { |
| about: String |
| experience: String |
| education: String |
| certificates: String |
| skills: String |
| projects: String |
| interests: String |
| contactInfo: String |
| activity: String |
| contributionGraph: String |
| alsoViewed: String |
| suggestions: String |
| pages: String |
| analytics: String |
| jobApplications: String |
| } |
| |
| type SectionVisibility { |
| about: Boolean! |
| experience: Boolean! |
| education: Boolean! |
| certificates: Boolean! |
| skills: Boolean! |
| projects: Boolean! |
| interests: Boolean! |
| contactInfo: Boolean! |
| socialLinks: Boolean! |
| stats: Boolean! |
| activity: Boolean! |
| contributionGraph: Boolean! |
| alsoViewed: Boolean! |
| suggestions: Boolean! |
| pages: Boolean! |
| jobApplications: Boolean! |
| analytics: Boolean! |
| } |
| |
| type SectionOrderItem { |
| id: String! |
| column: String |
| } |
| |
| type SectionStyleSettings { |
| padding: String |
| margin: String |
| background: String |
| textColor: String |
| borderRadius: String |
| shadow: String |
| } |
| |
| type Theme { |
| id: String! |
| primaryColor: String! |
| secondaryColor: String! |
| fontFamily: String! |
| borderRadius: String! |
| } |
| |
| type Layout { |
| type: String! |
| columns: Int! |
| showProjectImages: Boolean! |
| showProjectDescriptions: Boolean! |
| showProjectRatings: Boolean! |
| showProjectLinks: Boolean! |
| } |
| |
| type Header { |
| showAvatar: Boolean! |
| showJobTitle: Boolean! |
| showBio: Boolean! |
| showContactInfo: Boolean! |
| showSocialLinks: Boolean! |
| layout: String! |
| } |
| |
| type Footer { |
| showCopyright: Boolean! |
| customText: String! |
| } |
| |
| type SEO { |
| title: String |
| description: String |
| keywords: String |
| ogImage: String |
| ogTitle: String |
| ogDescription: String |
| twitterCard: String |
| twitterSite: String |
| canonicalUrl: String |
| noindex: Boolean |
| nofollow: Boolean |
| } |
| |
| type SchemaType { |
| type: String |
| name: String |
| description: String |
| image: String |
| sameAs: [String!]! |
| jobTitle: String |
| worksFor: String |
| alumniOf: [String!]! |
| knowsAbout: [String!]! |
| } |
| |
| type SocialLinks { |
| linkedin: String |
| github: String |
| behance: String |
| whatsapp: String |
| instagram: String |
| facebook: String |
| twitter: String |
| tiktok: String |
| youtube: String |
| telegram: String |
| } |
| |
| type Education { |
| _id: ID |
| institution: String |
| degree: String |
| year: String |
| grade: String |
| } |
| |
| type Experience { |
| _id: ID |
| company: String! |
| role: String! |
| duration: String! |
| } |
| |
| type Certificate { |
| _id: ID |
| name: String! |
| issuer: String! |
| year: String! |
| } |
| |
| type Skill { |
| _id: ID! |
| name: String! |
| percentage: Int! |
| icon: String |
| } |
| |
| type Project { |
| _id: ID! |
| title: String! |
| description: String |
| image: String |
| rating: String |
| stars: Int |
| links: [ProjectLink!]! |
| isPublic: Boolean |
| userId: User! |
| githubData: JSON |
| importedFrom: String |
| githubId: String |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type ProjectLink { |
| option: String! |
| value: String! |
| isPrivate: Boolean |
| } |
| |
| type CustomSection { |
| _id: ID! |
| name: String! |
| type: String! |
| content: JSON! |
| isVisible: Boolean! |
| settings: JSON |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| |
| |
| |
| |
| type StoryViewer { |
| userId: User! |
| viewedAt: Date! |
| } |
| |
| type StoryViewersResult { |
| data: [StoryViewer!]! |
| total: Int! |
| pagination: Pagination! |
| } |
| type DesignSettings { |
| primaryColor: String |
| secondaryColor: String |
| fontFamily: String |
| borderRadius: Int |
| zoomLevel: Int |
| shadowType: String |
| animationType: String |
| glassEffect: Boolean |
| backgroundType: String |
| backgroundValue: String |
| customCss: String |
| } |
| |
| type AIBot { |
| enabled: Boolean! |
| provider: String! |
| customModel: String |
| temperature: Float |
| maxTokens: Int |
| totalQueries: Int |
| lastQueryAt: Date |
| } |
| |
| type Audio { |
| url: String |
| title: String |
| delay: Float |
| loop: Boolean |
| volume: Int |
| } |
| |
| type InteractionsSettings { |
| showToPublic: Boolean! |
| showToLoggedIn: Boolean! |
| showOnlyToOwner: Boolean! |
| showToSpecificUsers: [String!]! |
| hideProjects: [String!]! |
| hideComments: [String!]! |
| } |
| |
| type UserStats { |
| posts: Int! |
| projects: Int! |
| jobs: Int! |
| followers: Int! |
| following: Int! |
| applications: Int! |
| savedPosts: Int! |
| savedJobs: Int! |
| totalLikes: Int! |
| } |
| |
| |
| |
| |
| type Post { |
| _id: ID! |
| userId: User! |
| content: String! |
| images: [PostImage!]! |
| video: PostVideo |
| likes: [Like!]! |
| comments: [Comment!]! |
| shares: [Share!]! |
| saves: [Save!]! |
| visibility: String! |
| tags: [String!]! |
| mentions: [Mention!]! |
| sharedFrom: SharedFrom |
| pinned: Boolean! |
| pinnedAt: Date |
| isEdited: Boolean! |
| editedAt: Date |
| createdAt: Date! |
| updatedAt: Date! |
| |
| likesCount: Int! |
| commentsCount: Int! |
| sharesCount: Int! |
| savesCount: Int! |
| isLiked: Boolean |
| isSaved: Boolean |
| } |
| |
| type PostImage { |
| url: String! |
| publicId: String |
| width: Int |
| height: Int |
| } |
| |
| type PostVideo { |
| url: String! |
| publicId: String |
| duration: Int |
| } |
| |
| type Like { |
| userId: User! |
| likedAt: Date! |
| } |
| |
| type Comment { |
| _id: ID! |
| userId: User! |
| text: String! |
| createdAt: Date! |
| likes: [User!]! |
| edited: Boolean! |
| editedAt: Date |
| reports: [Report!]! |
| reportCount: Int! |
| hidden: Boolean! |
| |
| |
| |
| projectId: Project! |
| projectOwnerId: User! |
| rating: Int! |
| timestamp: Date! |
| parentCommentId: Comment |
| replies: [Comment!]! |
| isEdited: Boolean! |
| visibility: String! |
| notified: Boolean! |
| updatedAt: Date! |
| |
| repliesCount: Int! |
| likesCount: Int! |
| isLiked: Boolean |
| } |
| |
| type CommentReport { |
| userId: User! |
| reporterUsername: String |
| reason: String! |
| reportedAt: Date! |
| resolved: Boolean! |
| resolvedAt: Date |
| resolvedBy: User |
| adminNote: String |
| } |
| |
| |
| |
| |
| |
| type PostComment { |
| _id: ID! |
| userId: User! |
| text: String! |
| createdAt: Date! |
| likes: [User!]! |
| edited: Boolean! |
| editedAt: Date |
| reports: [PostCommentReport!]! |
| reportCount: Int! |
| hidden: Boolean! |
| |
| likesCount: Int! |
| isLiked: Boolean |
| } |
| |
| type PostCommentReport { |
| userId: User! |
| reason: String! |
| reportedAt: Date! |
| } |
| |
| type Share { |
| userId: User! |
| sharedAt: Date! |
| } |
| |
| type Save { |
| userId: User! |
| savedAt: Date! |
| } |
| |
| type Mention { |
| userId: User! |
| username: String |
| position: Int |
| } |
| type SharedFrom { |
| originalPostId: ID |
| originalAuthorId: ID |
| originalAuthorName: String |
| originalAuthorAvatar: String |
| originalAuthorJobTitle: String |
| originalContent: String |
| originalImages: [PostImage!] |
| originalVideo: PostVideo |
| originalCreatedAt: Date |
| originalLikesCount: Int |
| originalCommentsCount: Int |
| originalSharesCount: Int |
| sharedAt: Date |
| } |
| |
| |
| |
| type Story { |
| _id: ID! |
| userId: User! |
| media: StoryMedia |
| text: String! |
| backgroundColor: String! |
| textColor: String! |
| textStyle: TextStyle! |
| views: [StoryView!]! |
| reactions: [StoryReaction!]! |
| visibility: String! |
| createdAt: Date! |
| expiresAt: Date! |
| |
| viewsCount: Int! |
| reactionsCount: Int! |
| hasViewed: Boolean |
| } |
| |
| type TextStyle { |
| fontSize: Int! |
| fontFamily: String! |
| fontWeight: String! |
| textAlign: String! |
| position: TextPosition! |
| rotation: Int! |
| opacity: Float! |
| textShadow: String! |
| background: String! |
| padding: String! |
| borderRadius: String! |
| maxWidth: Int! |
| } |
| |
| type TextPosition { |
| x: Int! |
| y: Int! |
| } |
| type StoryMedia { |
| url: String |
| publicId: String |
| type: String |
| } |
| |
| type StoryView { |
| userId: User! |
| viewedAt: Date! |
| } |
| |
| type StoryReaction { |
| userId: User! |
| type: String! |
| createdAt: Date! |
| } |
| |
| type StoryGroup { |
| user: User! |
| stories: [Story!]! |
| isFollowing: Boolean |
| isCurrentUser: Boolean |
| } |
| |
| type StoryStats { |
| totalStories: Int! |
| myStories: Int! |
| followingStories: Int! |
| discoverStories: Int! |
| followingCount: Int! |
| } |
| |
| |
| |
| |
| type Job { |
| _id: ID! |
| employerId: User! |
| title: String! |
| description: String! |
| requirements: String! |
| responsibilities: String |
| category: String! |
| jobType: String! |
| experienceLevel: String! |
| location: String! |
| isRemote: Boolean! |
| salaryMin: Float |
| salaryMax: Float |
| salaryCurrency: String! |
| isSalaryNegotiable: Boolean! |
| requiredSkills: [String!]! |
| educationLevel: String! |
| vacancies: Int! |
| postedAt: Date! |
| deadline: Date! |
| status: String! |
| views: Int! |
| applicationsCount: Int! |
| isFeatured: Boolean! |
| featuredUntil: Date |
| companyName: String |
| companyLogo: String |
| companyWebsite: String |
| createdAt: Date! |
| updatedAt: Date! |
| |
| hasApplied: Boolean |
| applicationStatus: String |
| isSaved: Boolean |
| } |
| |
| type JobApplication { |
| _id: ID! |
| jobId: Job! |
| applicantId: User! |
| fullName: String! |
| email: String! |
| phone: String |
| resume: FileUpload |
| coverLetter: String |
| portfolio: String |
| linkedin: String |
| github: String |
| answers: [JobAnswer!]! |
| status: String! |
| employerNotes: String |
| rating: Int |
| interviews: [Interview!]! |
| appliedAt: Date! |
| updatedAt: Date! |
| } |
| |
| type JobAnswer { |
| question: String! |
| answer: String! |
| } |
| |
| type Interview { |
| scheduledAt: Date! |
| type: String! |
| meetingLink: String |
| notes: String |
| status: String! |
| } |
| |
| type JobCategory { |
| _id: ID! |
| name: String! |
| nameAr: String |
| displayName: String |
| icon: String |
| color: String |
| order: Int! |
| isActive: Boolean! |
| count: Int |
| } |
| |
| type JobStats { |
| totalJobs: Int! |
| totalCompanies: Int! |
| remoteJobs: Int! |
| topCategories: [JobCategoryCount!]! |
| } |
| |
| type JobCategoryCount { |
| category: String! |
| count: Int! |
| } |
| |
| |
| |
| |
| type Store { |
| _id: ID! |
| userId: User! |
| storeName: String |
| storeLogo: String |
| storeBanner: String |
| storeDescription: String |
| contactEmail: String |
| enabled: Boolean! |
| currency: String! |
| currencySymbol: String! |
| productsCount: Int! |
| followersCount: Int! |
| averageRating: Float! |
| totalSales: Float! |
| totalOrders: Int! |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type StoreProduct { |
| _id: ID! |
| userId: User! |
| type: String! |
| title: String! |
| description: String! |
| price: Float! |
| currency: String! |
| fileUrl: String |
| fileSize: Int |
| deliveryTime: String |
| images: [String!]! |
| tags: [String!]! |
| isActive: Boolean! |
| salesCount: Int! |
| averageRating: Float! |
| reviews: [ProductReview!]! |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type ProductReview { |
| _id: ID! |
| userId: User! |
| rating: Int! |
| comment: String |
| createdAt: Date! |
| } |
| |
| type Order { |
| _id: ID! |
| orderNumber: String! |
| buyerId: User! |
| sellerId: User! |
| items: [OrderItem!]! |
| subtotal: Float! |
| totalAmount: Float! |
| currency: String! |
| status: String! |
| paymentMethod: String |
| paymentDetails: JSON |
| buyerNotes: String |
| sellerNotes: String |
| deliveredAt: Date |
| cancelledAt: Date |
| cancellationReason: String |
| downloadableFiles: [DownloadableFile!]! |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type OrderItem { |
| productId: ID! |
| productType: String! |
| title: String! |
| quantity: Int! |
| price: Float! |
| fileUrl: String |
| downloadCount: Int |
| fileName: String |
| fileSize: Int |
| fileType: String |
| uploadedAt: Date |
| } |
| |
| type DownloadableFile { |
| fileName: String! |
| fileUrl: String! |
| expiresAt: Date |
| downloadCount: Int! |
| } |
| |
| type Cart { |
| userId: User! |
| stores: [CartStore!]! |
| totalItems: Int! |
| totalStores: Int! |
| updatedAt: Date! |
| } |
| |
| type CartStore { |
| storeId: ID! |
| storeName: String! |
| storeLogo: String |
| items: [CartItem!]! |
| subtotal: Float! |
| itemCount: Int! |
| updatedAt: Date! |
| } |
| |
| type CartItem { |
| productId: ID! |
| title: String! |
| price: Float! |
| quantity: Int! |
| image: String |
| productType: String! |
| } |
| |
| type Coupon { |
| _id: ID! |
| code: String! |
| discountType: String! |
| discountValue: Float! |
| minPurchase: Float! |
| maxDiscount: Float |
| validFrom: Date! |
| validUntil: Date |
| usageLimit: Int |
| usageCount: Int! |
| isActive: Boolean! |
| applicableProducts: [ID!]! |
| createdAt: Date! |
| } |
| |
| type CouponValidation { |
| valid: Boolean! |
| discount: Float! |
| finalTotal: Float! |
| message: String |
| coupon: Coupon |
| } |
| |
| |
| |
| |
| type Page { |
| _id: ID! |
| storeId: User! |
| slug: String! |
| title: String! |
| content: String! |
| rawContent: String |
| css: String! |
| js: String! |
| type: String! |
| isDefault: Boolean! |
| isEnabled: Boolean! |
| order: Int! |
| uploadedFile: UploadedFile |
| thumbnail: String |
| hasShortcodes: Boolean! |
| shortcodesList: [ShortcodeUsage!]! |
| seo: PageSEO |
| structuredData: JSON |
| tags: [String!]! |
| visibility: String! |
| permissions: PagePermissions |
| settings: PageSettings |
| scheduledAt: Date |
| expiresAt: Date |
| schemaVersion: String |
| versions: [PageVersion!]! |
| lockedBy: User |
| lockedAt: Date |
| createdBy: User |
| updatedBy: User |
| stats: PageStats! |
| referrers: [PageReferrer!]! |
| uniqueVisitors: [UniqueVisitor!]! |
| createdAt: Date! |
| updatedAt: Date! |
| |
| url: String! |
| isLocked: Boolean! |
| } |
| |
| type UploadedFile { |
| filename: String! |
| originalName: String! |
| fileUrl: String |
| fileSize: Int |
| mimeType: String |
| uploadedAt: Date! |
| } |
| |
| type ShortcodeUsage { |
| name: String! |
| count: Int! |
| } |
| |
| type PageSEO { |
| title: String |
| description: String |
| keywords: String |
| ogImage: String |
| noindex: Boolean |
| nofollow: Boolean |
| } |
| |
| type PagePermissions { |
| canEdit: [User!]! |
| canView: [User!]! |
| } |
| |
| type PageSettings { |
| showInNav: Boolean! |
| showInFooter: Boolean! |
| openInNewTab: Boolean! |
| requireAuth: Boolean! |
| passwordProtected: Boolean! |
| } |
| |
| type PageVersion { |
| version: Int! |
| content: String! |
| css: String! |
| js: String! |
| createdAt: Date! |
| } |
| |
| type PageStats { |
| views: Int! |
| uniqueViews: Int! |
| lastViewedAt: Date |
| avgTimeOnPage: Float! |
| bounceRate: Float! |
| shares: Int! |
| } |
| |
| type PageReferrer { |
| source: String! |
| count: Int! |
| lastVisit: Date |
| } |
| |
| type UniqueVisitor { |
| ip: String! |
| timestamp: Date! |
| } |
| |
| |
| |
| |
| |
| |
| type VideoPost { |
| _id: ID! |
| userId: User! |
| content: String! |
| video: PostVideo! |
| images: [PostImage!]! |
| likes: [Like!]! |
| comments: [Comment!]! |
| shares: [Share!]! |
| saves: [Save!]! |
| visibility: String! |
| tags: [String!]! |
| createdAt: Date! |
| updatedAt: Date! |
| |
| likesCount: Int! |
| commentsCount: Int! |
| sharesCount: Int! |
| savesCount: Int! |
| viewsCount: Int! |
| isLiked: Boolean |
| isSaved: Boolean |
| isFollowing: Boolean |
| } |
| |
| type VideosResult { |
| data: [VideoPost!]! |
| pagination: Pagination! |
| trending: [VideoPost!]! |
| } |
| |
| |
| |
| type StoreTheme { |
| _id: ID! |
| userId: User! |
| name: String! |
| isActive: Boolean! |
| version: String! |
| layout: String! |
| customTemplates: CustomTemplates! |
| uploadedTheme: UploadedTheme |
| settings: ThemeSettings! |
| colors: ThemeColors! |
| typography: ThemeTypography! |
| customAssets: CustomAssets! |
| seo: ThemeSEO! |
| stats: ThemeStats! |
| isDeleted: Boolean! |
| deletedAt: Date |
| createdAt: Date! |
| updatedAt: Date! |
| |
| isCustomTheme: Boolean! |
| themeUrl: String! |
| } |
| |
| type CustomTemplates { |
| header: String |
| footer: String |
| sidebar: String |
| productCard: String |
| categoryCard: String |
| } |
| |
| type UploadedTheme { |
| filename: String |
| originalName: String |
| fileUrl: String |
| fileSize: Int |
| fileHash: String |
| mimeType: String |
| uploadedAt: Date |
| extractedFiles: ExtractedFiles |
| } |
| |
| type ExtractedFiles { |
| htmlFiles: [ExtractedFile!]! |
| cssFiles: [ExtractedFile!]! |
| jsFiles: [ExtractedFile!]! |
| imageFiles: [ExtractedImage!]! |
| } |
| |
| type ExtractedFile { |
| name: String! |
| size: Int! |
| } |
| |
| type ExtractedImage { |
| name: String! |
| size: Int! |
| url: String |
| } |
| |
| type ThemeSettings { |
| containerWidth: String! |
| containerPadding: String! |
| showBreadcrumb: Boolean! |
| stickyHeader: Boolean! |
| backToTop: Boolean! |
| showSearchBar: Boolean! |
| showCategories: Boolean! |
| productsPerRow: Int! |
| productsPerPage: Int! |
| enableLazyLoad: Boolean! |
| enableAnimations: Boolean! |
| } |
| |
| type ThemeColors { |
| primary: String! |
| secondary: String! |
| accent: String! |
| background: String! |
| text: String! |
| textLight: String! |
| border: String! |
| success: String! |
| error: String! |
| warning: String! |
| } |
| |
| type ThemeTypography { |
| fontFamily: String! |
| headingFont: String! |
| baseFontSize: String! |
| enableGoogleFonts: Boolean! |
| } |
| |
| type CustomAssets { |
| css: String |
| js: String |
| headHtml: String |
| bodyHtml: String |
| } |
| |
| type ThemeSEO { |
| metaTitle: String |
| metaDescription: String |
| metaKeywords: String |
| ogImage: String |
| twitterCard: String |
| canonicalUrl: String |
| structuredData: JSON |
| } |
| |
| type ThemeStats { |
| views: Int! |
| lastUsed: Date |
| templateChanges: Int! |
| lastChangeAt: Date |
| } |
| |
| |
| type StoreStatus { |
| enabled: Boolean! |
| } |
| |
| |
| |
| |
| type SubscriptionPlan { |
| _id: ID! |
| name: String! |
| nameAr: String |
| description: String |
| descriptionAr: String |
| price: Float! |
| currency: String! |
| currencySymbol: String! |
| duration: String! |
| durationDays: Int! |
| features: PlanFeatures! |
| hasFreeTrial: Boolean! |
| freeTrialDays: Int! |
| badge: String |
| badgeColor: String |
| icon: String! |
| isActive: Boolean! |
| order: Int! |
| customPermissions: JSON |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type PlanFeatures { |
| storeEnabled: Boolean! |
| maxProducts: Int! |
| maxDigitalProducts: Int! |
| maxProjects: Int! |
| maxServices: Int! |
| pageBuilderEnabled: Boolean! |
| customDomain: Boolean! |
| analyticsEnabled: Boolean! |
| prioritySupport: Boolean! |
| removeBranding: Boolean! |
| teamMembers: Int! |
| apiAccess: Boolean! |
| customCss: Boolean! |
| advancedAnalytics: Boolean! |
| exportData: Boolean! |
| } |
| |
| type UserSuggestion { |
| _id: ID! |
| username: String! |
| followersCount: Int! |
| profile: SuggestionProfile! |
| } |
| |
| type SuggestionProfile { |
| nickname: String |
| avatar: String |
| jobTitle: String |
| bio: String |
| } |
| |
| |
| type UserSubscription { |
| _id: ID! |
| userId: User! |
| planId: SubscriptionPlan! |
| status: String! |
| startDate: Date |
| endDate: Date |
| isTrial: Boolean! |
| trialEndDate: Date |
| paymentMethod: String |
| paymentDetails: JSON |
| paymentProof: String |
| amount: Float |
| currency: String |
| transactionId: String |
| adminNotes: String |
| approvedBy: User |
| approvedAt: Date |
| autoRenew: Boolean! |
| cancelledAt: Date |
| cancellationReason: String |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type SubscriptionStats { |
| total: Int! |
| active: Int! |
| pending: Int! |
| expired: Int! |
| cancelled: Int! |
| totalRevenue: Float! |
| monthlyEarnings: [MonthlyEarnings!]! |
| } |
| |
| type MonthlyEarnings { |
| month: String! |
| total: Float! |
| count: Int! |
| } |
| |
| |
| |
| |
| type Notification { |
| _id: ID! |
| userId: User! |
| type: String! |
| actorId: User |
| actorName: String |
| actorAvatar: String |
| targetId: String |
| targetType: String |
| content: String! |
| read: Boolean! |
| link: String |
| createdAt: Date! |
| } |
| |
| |
| |
| |
| type Follow { |
| _id: ID! |
| followerId: User! |
| followingId: User! |
| status: String! |
| createdAt: Date! |
| } |
| |
| type FollowRequest { |
| _id: ID! |
| requester: User! |
| requestedAt: Date! |
| } |
| |
| |
| |
| |
| type Report { |
| _id: ID! |
| reporterId: User! |
| targetType: String! |
| targetId: ID! |
| reason: String! |
| details: String |
| status: String! |
| adminNotes: String |
| resolvedBy: User |
| resolvedAt: Date |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| |
| |
| |
| type AIConversation { |
| _id: ID! |
| userId: User! |
| visitorIp: String |
| question: String! |
| answer: String! |
| provider: String! |
| language: String! |
| responseTime: Int! |
| timestamp: Date! |
| } |
| |
| type AIStats { |
| total: Int! |
| last7Days: [DailyAIStats!]! |
| providerStats: [ProviderAIStats!]! |
| avgResponseTime: Int! |
| enabled: Boolean! |
| provider: String! |
| totalQueries: Int! |
| lastQueryAt: Date |
| } |
| |
| type DailyAIStats { |
| date: String! |
| count: Int! |
| } |
| |
| type ProviderAIStats { |
| provider: String! |
| count: Int! |
| } |
| |
| |
| |
| |
| input CreatePostInput { |
| content: String! |
| visibility: String |
| tags: [String!] |
| mentions: [MentionInput!] |
| } |
| |
| input MentionInput { |
| userId: ID! |
| username: String |
| position: Int |
| } |
| |
| input CreateStoryInput { |
| text: String |
| backgroundColor: String |
| textColor: String |
| textStyle: TextStyleInput |
| visibility: String |
| } |
| |
| input TextStyleInput { |
| fontSize: Int |
| fontFamily: String |
| fontWeight: String |
| textAlign: String |
| position: TextPositionInput |
| rotation: Int |
| opacity: Float |
| textShadow: String |
| background: String |
| padding: String |
| borderRadius: String |
| maxWidth: Int |
| } |
| |
| input TextPositionInput { |
| x: Int! |
| y: Int! |
| } |
| |
| input CreateJobInput { |
| title: String! |
| description: String! |
| requirements: String! |
| responsibilities: String |
| category: String! |
| jobType: String! |
| experienceLevel: String! |
| location: String! |
| isRemote: Boolean |
| salaryMin: Float |
| salaryMax: Float |
| salaryCurrency: String |
| isSalaryNegotiable: Boolean |
| requiredSkills: [String!] |
| educationLevel: String |
| vacancies: Int |
| deadline: Date! |
| companyName: String |
| companyWebsite: String |
| } |
| |
| input ApplyJobInput { |
| fullName: String! |
| email: String! |
| phone: String |
| coverLetter: String |
| portfolio: String |
| linkedin: String |
| github: String |
| answers: [JobAnswerInput!] |
| } |
| |
| input JobAnswerInput { |
| question: String! |
| answer: String! |
| } |
| |
| input CreateProductInput { |
| type: String! |
| title: String! |
| description: String! |
| price: Float! |
| currency: String |
| deliveryTime: String |
| tags: [String!] |
| images: [String!] |
| isActive: Boolean |
| } |
| |
| input UpdateProductInput { |
| title: String |
| description: String |
| price: Float |
| type: String |
| currency: String |
| deliveryTime: String |
| tags: [String!] |
| images: [String!] |
| isActive: Boolean |
| } |
| |
| input CreateOrderInput { |
| storeId: ID! |
| items: [OrderItemInput!]! |
| buyerNotes: String |
| paymentMethod: String! |
| } |
| |
| input OrderItemInput { |
| productId: ID! |
| quantity: Int! |
| } |
| |
| input StoreSettingsInput { |
| storeName: String |
| storeLogo: String |
| storeBanner: String |
| storeDescription: String |
| contactEmail: String |
| currency: String |
| primaryColor: String |
| secondaryColor: String |
| fontFamily: String |
| borderRadius: Int |
| shadowType: String |
| animationType: String |
| glassEffect: Boolean |
| backgroundType: String |
| backgroundValue: String |
| customCss: String |
| productViewType: String |
| paymentMethods: [PaymentMethodInput!] |
| socialLinks: SocialLinksInput |
| pageBuilder: PageBuilderInput |
| } |
| |
| input PaymentMethodInput { |
| type: String! |
| label: String |
| details: JSON! |
| isActive: Boolean |
| } |
| |
| input PageBuilderInput { |
| sections: [PageSectionInput!]! |
| } |
| |
| input PageSectionInput { |
| id: String |
| type: String! |
| enabled: Boolean |
| order: Int |
| title: String |
| limit: Int |
| layout: String |
| content: JSON |
| settings: JSON |
| } |
| |
| input CreatePageInput { |
| slug: String! |
| title: String! |
| content: String |
| css: String |
| js: String |
| seo: PageSEOInput |
| visibility: String |
| settings: PageSettingsInput |
| order: Int |
| } |
| |
| input PageSEOInput { |
| title: String |
| description: String |
| keywords: String |
| ogImage: String |
| noindex: Boolean |
| nofollow: Boolean |
| } |
| |
| input PageSettingsInput { |
| showInNav: Boolean |
| showInFooter: Boolean |
| openInNewTab: Boolean |
| requireAuth: Boolean |
| } |
| |
| input UpdatePageInput { |
| title: String |
| content: String |
| css: String |
| js: String |
| seo: PageSEOInput |
| isEnabled: Boolean |
| visibility: String |
| settings: PageSettingsInput |
| order: Int |
| slug: String |
| } |
| |
| input CreateCouponInput { |
| code: String! |
| discountType: String! |
| discountValue: Float! |
| minPurchase: Float |
| maxDiscount: Float |
| validUntil: Date |
| usageLimit: Int |
| applicableProducts: [ID!] |
| } |
| |
| input ContactMessageInput { |
| name: String! |
| email: String! |
| message: String! |
| } |
| |
| |
| |
| |
| |
| |
| |
| type Query { |
| |
| me: User |
| user(id: ID!): User |
| userByNickname(nickname: String!): User |
| profile(nickname: String!): User |
| myProfile: User |
| userStats(userId: ID!): UserStats! |
| |
| profilePage(nickname: String!): ProfilePageResult! |
| contributionGraph(userId: ID!, year: Int): ContributionGraphResult! |
| userInteractions(nickname: String!, page: Int, limit: Int): [UserInteraction!]! |
| alsoViewed(userId: ID!): [User!]! |
| pageSuggestions(limit: Int): [PageSuggestion!]! |
| profileAnalytics: ProfileAnalytics! |
| |
| userSuggestions(limit: Int): [UserSuggestion!]! |
| storeStatus: StoreStatus! |
| |
| |
| |
| |
| searchUsers(query: String!, page: Int, limit: Int): SearchUsersResult! |
| searchGlobal(query: String!, limit: Int): GlobalSearchResult! |
| |
| |
| postsFeed(page: Int, limit: Int, type: String): PostsResult! |
| post(id: ID!): Post |
| userPosts(userId: ID!, page: Int, limit: Int): PostsResult! |
| savedPosts(page: Int, limit: Int): PostsResult! |
| suggestedPosts(limit: Int): [Post!]! |
| searchPosts(query: String!, page: Int, limit: Int): PostsResult! |
| |
| |
| comments(projectId: ID!, page: Int, limit: Int): CommentsResult! |
| comment(id: ID!): Comment |
| userComments(userId: ID!, page: Int, limit: Int): CommentsResult! |
| reportedComments: [Comment!]! |
| |
| getPostComments(postId: ID!, page: Int, limit: Int): CommentsResult! |
| |
| |
| storiesFeed(limit: Int): [StoryGroup!]! |
| storiesAll(page: Int, limit: Int): StoriesResult! |
| storiesDiscover(limit: Int): [StoryGroup!]! |
| storyStats: StoryStats! |
| userStories(userId: ID!): [Story!]! |
| story(id: ID!): Story |
| |
| storyViewers(storyId: ID!, page: Int, limit: Int): StoryViewersResult! |
| |
| |
| jobs(page: Int, limit: Int, search: String, category: String, jobType: String, location: String): JobsResult! |
| job(id: ID!): Job |
| myJobs(page: Int, limit: Int, status: String): JobsResult! |
| myJobApplications(page: Int, limit: Int, status: String): JobApplicationsResult! |
| jobApplications(jobId: ID!, page: Int, limit: Int, status: String): JobApplicationsResult! |
| jobApplication(id: ID!): JobApplication |
| savedJobs(page: Int, limit: Int): JobsResult! |
| jobCategories(lang: String): [JobCategory!]! |
| jobStats: JobStats! |
| |
| |
| myStore: Store! |
| store(username: String!): Store! |
| storeProducts(username: String!, tags: [String!], limit: Int): [StoreProduct!]! |
| storeProduct(id: ID!): StoreProduct |
| myProducts: [StoreProduct!]! |
| storePages(username: String!): [Page!]! |
| storePage(username: String!, slug: String!): Page |
| myPages: [Page!]! |
| page(id: ID!): Page |
| storeSettings: StoreSettingsResult! |
| storeAnalytics(username: String!): StoreAnalytics! |
| |
| |
| videosFeed(page: Int, limit: Int, type: String): VideosResult! |
| video(id: ID!): VideoPost! |
| |
| |
| cart: Cart! |
| cartSummary: CartSummary! |
| |
| |
| myOrders(as: String!, page: Int, limit: Int): OrdersResult! |
| order(id: ID!): Order |
| |
| |
| followers(userId: ID!, page: Int, limit: Int): FollowersResult! |
| following(userId: ID!, page: Int, limit: Int): FollowingResult! |
| myFollowers(page: Int, limit: Int): FollowersResult! |
| myFollowing(page: Int, limit: Int): FollowingResult! |
| followRequests: [FollowRequest!]! |
| followStatus(userId: ID!): FollowStatus! |
| |
| |
| notifications(page: Int, limit: Int): NotificationsResult! |
| unreadNotificationsCount: Int! |
| |
| |
| userRatings(userId: ID!, page: Int, limit: Int): RatingsResult! |
| myRating(targetUserId: ID!): Rating |
| |
| |
| aiConversations(page: Int, limit: Int): AIConversationsResult! |
| aiStats: AIStats! |
| aiStatus(nickname: String!): AIStatus! |
| |
| |
| adminUsers(page: Int, limit: Int, role: String): AdminUsersResult! |
| adminStores(page: Int, limit: Int): AdminStoresResult! |
| adminOrders(page: Int, limit: Int, status: String): AdminOrdersResult! |
| adminProducts(page: Int, limit: Int, type: String): AdminProductsResult! |
| adminReports(page: Int, limit: Int, status: String): AdminReportsResult! |
| adminMessageReports(page: Int, limit: Int, status: String): AdminMessageReportsResult! |
| adminSubscriptions(page: Int, limit: Int, status: String): AdminSubscriptionsResult! |
| adminSubscriptionStats: SubscriptionStats! |
| adminLogs(page: Int, limit: Int, type: String): AdminLogsResult! |
| adminPlans: [SubscriptionPlan!]! |
| adminPaymentMethods: [PlatformPaymentMethod!]! |
| |
| |
| templates(category: String, sort: String, limit: Int, offset: Int): TemplatesResult! |
| featuredTemplates(limit: Int): [Template!]! |
| popularTemplates(limit: Int): [Template!]! |
| template(id: ID!): Template! |
| templateCategories: [TemplateCategory!]! |
| myInstalledTemplates: [Template!]! |
| |
| |
| siteSettings: SiteSettings! |
| } |
| |
| |
| |
| |
| type Mutation { |
| |
| register(username: String!, email: String!, password: String!): AuthResult! |
| login(email: String!, password: String!): AuthResult! |
| verifyEmail(email: String!, otp: String!): AuthResult! |
| resendVerification(email: String!): Boolean! |
| forgotPassword(email: String!): Boolean! |
| resetPassword(email: String!, otp: String!, newPassword: String!): Boolean! |
| refreshToken(refreshToken: String!): AuthResult! |
| logout(refreshToken: String!): Boolean! |
| magicLink(email: String!): Boolean! |
| verifyMagicLink(token: String!): AuthResult! |
| |
| |
| updateProfile(input: UserProfileInput!): User! |
| updateAppearance(theme: JSON, layout: JSON, header: JSON, footer: JSON): User! |
| updateSEO(seo: JSON, schema: JSON): User! |
| checkNickname(nickname: String!): CheckNicknameResult! |
| uploadAvatar(file: Upload!): String! |
| uploadCover(file: Upload!): String! |
| deleteCover: Boolean! |
| addEducation(input: EducationInput!): [Education!]! |
| updateEducation(id: ID!, input: EducationInput!): [Education!]! |
| deleteEducation(id: ID!): Boolean! |
| addExperience(input: ExperienceInput!): [Experience!]! |
| updateExperience(id: ID!, input: ExperienceInput!): [Experience!]! |
| deleteExperience(id: ID!): Boolean! |
| addCertificate(input: CertificateInput!): [Certificate!]! |
| updateCertificate(id: ID!, input: CertificateInput!): [Certificate!]! |
| deleteCertificate(id: ID!): Boolean! |
| addSkill(input: SkillInput!): [Skill!]! |
| updateSkill(id: ID!, input: SkillInput!): [Skill!]! |
| deleteSkill(id: ID!): Boolean! |
| addProject(input: ProjectInput!): Project! |
| updateProject(id: ID!, input: ProjectInput!): Project! |
| deleteProject(id: ID!): Boolean! |
| addCustomSection(input: CustomSectionInput!): CustomSection! |
| updateCustomSection(id: ID!, input: CustomSectionInput!): CustomSection! |
| deleteCustomSection(id: ID!): Boolean! |
| toggleCustomSectionVisibility(id: ID!, isVisible: Boolean!): CustomSection! |
| updateSectionNames(names: JSON!): User! |
| updateSectionVisibility(visibility: JSON!): User! |
| updateSectionOrder(order: [String!]!): User! |
| updateDesignSettings(input: DesignSettingsInput!): DesignSettings! |
| resetDesignSettings: DesignSettings! |
| updateAIBot(input: AIBotInput!): AIBot! |
| updatePrivacySettings(input: InteractionsSettingsInput!): InteractionsSettings! |
| deleteAccount: Boolean! |
| |
| |
| |
| addComment(projectId: ID!, projectOwnerId: ID!, rating: Int!, text: String!): Comment! |
| addCommentReply(commentId: ID!, text: String!, rating: Int): Comment! |
| updateComment(id: ID!, text: String!): Comment! |
| deleteComment(id: ID!): Boolean! |
| likeComment(id: ID!): LikeResult! |
| reportComment(commentId: ID!, reason: String!): ReportResult! |
| resolveCommentReport(commentId: ID!, action: String!, adminNote: String): Comment! |
| updateCommentPrivacy(id: ID!, visibility: String!): Comment! |
| |
| |
| createPost(input: CreatePostInput!, files: [Upload!]): Post! |
| updatePost(id: ID!, input: CreatePostInput!): Post! |
| deletePost(id: ID!): Boolean! |
| likePost(id: ID!): LikeResult! |
| savePost(id: ID!): SaveResult! |
| pinPost(id: ID!): Post! |
| sharePost(id: ID!): ShareResult! |
| sharePostToProfile(originalPostId: ID!, content: String): Post! |
| addPostComment(postId: ID!, text: String!): Comment! |
| updatePostComment(postId: ID!, commentId: ID!, text: String!): Comment! |
| deletePostComment(postId: ID!, commentId: ID!): Boolean! |
| likePostComment(commentId: ID!): LikeResult! |
| reportPostComment(commentId: ID!, reason: String!): Boolean! |
| |
| |
| createStory(input: CreateStoryInput!, file: Upload): Story! |
| deleteStory(id: ID!): Boolean! |
| viewStory(id: ID!): Story! |
| reactToStory(id: ID!, type: String!): Story! |
| deleteExpiredStories: DeleteResult! |
| |
| |
| createJob(input: CreateJobInput!): Job! |
| updateJob(id: ID!, input: CreateJobInput!): Job! |
| deleteJob(id: ID!): Boolean! |
| duplicateJob(id: ID!): Job! |
| applyToJob(jobId: ID!, input: ApplyJobInput!, resume: Upload): JobApplication! |
| withdrawApplication(applicationId: ID!): JobApplication! |
| updateApplicationStatus(applicationId: ID!, status: String!, employerNotes: String): JobApplication! |
| scheduleInterview(applicationId: ID!, scheduledAt: Date!, type: String!, meetingLink: String): JobApplication! |
| saveJob(id: ID!): SaveResult! |
| adminCreateJobCategory(name: String!, nameAr: String, icon: String, color: String, order: Int): JobCategory! |
| adminUpdateJobCategory(id: ID!, name: String, nameAr: String, icon: String, color: String, isActive: Boolean, order: Int): JobCategory! |
| adminDeleteJobCategory(id: ID!): Boolean! |
| |
| |
| toggleStore(enabled: Boolean!): Boolean! |
| updateStoreSettings(input: StoreSettingsInput!): Store! |
| createProduct(input: CreateProductInput!, file: Upload): StoreProduct! |
| updateProduct(id: ID!, input: UpdateProductInput!): StoreProduct! |
| deleteProduct(id: ID!): Boolean! |
| toggleProduct(id: ID!, isActive: Boolean!): StoreProduct! |
| addProductReview(productId: ID!, rating: Int!, comment: String): ProductReview! |
| followStore(storeId: ID!): FollowStoreResult! |
| createCoupon(input: CreateCouponInput!): Coupon! |
| updateCoupon(id: ID!, input: CreateCouponInput!): Coupon! |
| deleteCoupon(id: ID!): Boolean! |
| validateCoupon(code: String!, cartTotal: Float!, storeId: ID!): CouponValidation! |
| contactStore(input: ContactMessageInput!, storeId: ID!): Boolean! |
| updatePagesOrder(pages: [PageOrderInput!]!): Boolean! |
| uploadPage(file: Upload!, slug: String, title: String): Page! |
| uploadPageZip(file: Upload!): [Page!]! |
| createPage(input: CreatePageInput!): Page! |
| updatePage(id: ID!, input: UpdatePageInput!): Page! |
| deletePage(id: ID!): Boolean! |
| duplicatePage(id: ID!): Page! |
| exportPage(id: ID!): String! |
| resetTemplate: Boolean! |
| applyTemplate(id: ID!): TemplateApplyResult! |
| uploadTheme(file: Upload!): StoreTheme! |
| updateTheme(input: ThemeInput!): StoreTheme! |
| resetTheme: StoreTheme! |
| updateLayoutTemplate(layout: String!, input: LayoutSettingsInput): Store! |
| resetLayoutTemplate: Store! |
| |
| |
| addToCart(productId: ID!, storeId: ID!, quantity: Int!): Cart! |
| updateCartItem(storeId: ID!, productId: ID!, quantity: Int!): Cart! |
| removeFromCart(storeId: ID!, productId: ID!): Cart! |
| clearStoreCart(storeId: ID!): Cart! |
| clearCart: Boolean! |
| |
| |
| createOrder(input: CreateOrderInput!): Order! |
| updateOrderStatus(id: ID!, status: String!, sellerNotes: String): Order! |
| cancelOrder(id: ID!, reason: String): Order! |
| uploadOrderFile(orderId: ID!, productId: ID!, file: Upload!): OrderItem! |
| addOrderFileUrl(orderId: ID!, productId: ID!, fileUrl: String!, fileName: String): OrderItem! |
| downloadOrderFile(orderId: ID!, productId: ID!): String! |
| |
| |
| followUser(userId: ID!): FollowResult! |
| unfollowUser(userId: ID!): FollowResult! |
| acceptFollowRequest(requestId: ID!): Boolean! |
| declineFollowRequest(requestId: ID!): Boolean! |
| |
| |
| markNotificationRead(id: ID!): Notification! |
| markAllNotificationsRead: Boolean! |
| deleteNotification(id: ID!): Boolean! |
| |
| |
| rateUser(targetUserId: ID!, rating: Int!, review: String): RatingResult! |
| |
| |
| askAI(nickname: String!, question: String!, language: String): AIResponse! |
| clearAICache: Boolean! |
| |
| |
| subscribe(planId: ID!, paymentMethodId: ID!, paymentDetails: JSON, autoRenew: Boolean, paymentProof: Upload): UserSubscription! |
| renewSubscription(planId: ID!, paymentMethodId: ID!, paymentDetails: JSON, paymentProof: Upload): UserSubscription! |
| cancelSubscription(reason: String): Boolean! |
| adminApproveSubscription(id: ID!, adminNotes: String): UserSubscription! |
| adminRejectSubscription(id: ID!, rejectionReason: String): Boolean! |
| adminCancelSubscription(id: ID!, reason: String): Boolean! |
| adminCreatePlan(input: CreatePlanInput!): SubscriptionPlan! |
| adminUpdatePlan(id: ID!, input: CreatePlanInput!): SubscriptionPlan! |
| adminDeletePlan(id: ID!): Boolean! |
| adminCreatePaymentMethod(input: CreatePaymentMethodInput!): PlatformPaymentMethod! |
| adminUpdatePaymentMethod(id: ID!, input: CreatePaymentMethodInput!): PlatformPaymentMethod! |
| adminDeletePaymentMethod(id: ID!): Boolean! |
| |
| |
| adminToggleStore(userId: ID!, enabled: Boolean!): Boolean! |
| adminDeleteStore(userId: ID!): Boolean! |
| adminToggleProduct(productId: ID!, isActive: Boolean!): StoreProduct! |
| adminDeleteProduct(productId: ID!): Boolean! |
| adminUpdateOrderStatus(orderId: ID!, status: String!, adminNotes: String): Order! |
| adminMakeUser(userId: ID!, isAdmin: Boolean!): User! |
| adminResolveReport(reportId: ID!, action: String!, adminNote: String): Report! |
| adminResolveMessageReport(reportId: ID!, action: String!, adminNote: String): Boolean! |
| adminCreatePlatformBank(input: PlatformBankInput!): PlatformBank! |
| adminUpdatePlatformBank(id: ID!, input: PlatformBankInput!): PlatformBank! |
| adminDeletePlatformBank(id: ID!): Boolean! |
| adminRegenerateSitemaps: Boolean! |
| adminExportUsers: String! |
| adminExportOrders: String! |
| adminCreateBackup: String! |
| |
| |
| reportContent(targetType: String!, targetId: ID!, reason: String!, details: String): Report! |
| reportMessage(messageId: ID!, reason: String!): Boolean! |
| } |
| |
| |
| |
| |
| type AuthResult { |
| success: Boolean! |
| token: String |
| refreshToken: String |
| user: User |
| requiresVerification: Boolean |
| email: String |
| message: String |
| } |
| |
| type CheckNicknameResult { |
| available: Boolean! |
| } |
| |
| type LikeResult { |
| success: Boolean! |
| likesCount: Int! |
| isLiked: Boolean! |
| } |
| |
| type SaveResult { |
| success: Boolean! |
| count: Int! |
| isSaved: Boolean! |
| } |
| |
| type ShareResult { |
| success: Boolean! |
| sharesCount: Int! |
| } |
| |
| type FollowResult { |
| success: Boolean! |
| isFollowing: Boolean! |
| } |
| |
| type FollowStoreResult { |
| success: Boolean! |
| isFollowing: Boolean! |
| followersCount: Int! |
| } |
| |
| type RatingResult { |
| success: Boolean! |
| averageRating: Float! |
| totalRatings: Int! |
| } |
| |
| type DeleteResult { |
| deletedCount: Int! |
| } |
| |
| type AIResponse { |
| answer: String! |
| language: String! |
| provider: String! |
| responseTime: Int! |
| isCommand: Boolean |
| } |
| |
| type AIStatus { |
| enabled: Boolean! |
| } |
| |
| type FollowStatus { |
| isFollowing: Boolean! |
| } |
| |
| |
| |
| |
| type Pagination { |
| page: Int! |
| limit: Int! |
| total: Int! |
| pages: Int! |
| hasNext: Boolean! |
| hasPrev: Boolean! |
| } |
| |
| type CommentsResult { |
| data: [Comment!]! |
| pagination: Pagination! |
| } |
| |
| type ReportResult { |
| success: Boolean! |
| reportCount: Int! |
| hidden: Boolean! |
| message: String! |
| } |
| |
| type PostsResult { |
| data: [Post!]! |
| pagination: Pagination! |
| } |
| |
| type StoriesResult { |
| data: [StoryGroup!]! |
| pagination: Pagination! |
| stats: StoryStats! |
| } |
| |
| type JobsResult { |
| data: [Job!]! |
| pagination: Pagination! |
| featured: [Job!]! |
| } |
| |
| type JobApplicationsResult { |
| data: [JobApplication!]! |
| pagination: Pagination! |
| } |
| |
| type OrdersResult { |
| data: [Order!]! |
| pagination: Pagination! |
| } |
| |
| type FollowersResult { |
| data: [User!]! |
| pagination: Pagination! |
| } |
| |
| type FollowingResult { |
| data: [User!]! |
| pagination: Pagination! |
| } |
| |
| type NotificationsResult { |
| data: [Notification!]! |
| pagination: Pagination! |
| unreadCount: Int! |
| } |
| |
| type RatingsResult { |
| data: [Rating!]! |
| pagination: Pagination! |
| averageRating: Float! |
| totalRatings: Int! |
| } |
| |
| type AIConversationsResult { |
| data: [AIConversation!]! |
| pagination: Pagination! |
| } |
| |
| type SearchUsersResult { |
| data: [User!]! |
| pagination: Pagination! |
| } |
| |
| type GlobalSearchResult { |
| products: [SearchProduct!]! |
| stores: [SearchStore!]! |
| users: [SearchUser!]! |
| jobs: [SearchJob!]! |
| posts: [SearchPost!]! |
| total: GlobalSearchTotal! |
| } |
| |
| type SearchProduct { |
| _id: ID! |
| title: String! |
| price: Float! |
| type: String! |
| image: String |
| storeNickname: String |
| url: String! |
| } |
| |
| type SearchStore { |
| _id: ID! |
| storeName: String! |
| storeLogo: String |
| nickname: String! |
| productsCount: Int! |
| followersCount: Int! |
| averageRating: Float! |
| url: String! |
| } |
| |
| type SearchUser { |
| _id: ID! |
| name: String! |
| avatar: String! |
| jobTitle: String! |
| bio: String |
| url: String! |
| } |
| |
| type SearchJob { |
| _id: ID! |
| title: String! |
| company: String |
| location: String! |
| jobType: String! |
| isRemote: Boolean! |
| salary: String |
| url: String! |
| } |
| |
| type SearchPost { |
| _id: ID! |
| content: String! |
| image: String |
| author: SearchAuthor! |
| likesCount: Int! |
| createdAt: Date! |
| url: String! |
| } |
| |
| type SearchAuthor { |
| name: String! |
| avatar: String! |
| } |
| |
| type GlobalSearchTotal { |
| products: Int! |
| stores: Int! |
| users: Int! |
| jobs: Int! |
| posts: Int! |
| } |
| |
| |
| |
| |
| type AdminUsersResult { |
| data: [AdminUser!]! |
| pagination: Pagination! |
| } |
| |
| type AdminUser { |
| _id: ID! |
| username: String! |
| email: String! |
| isAdmin: Boolean! |
| profile: AdminUserProfile! |
| createdAt: Date! |
| stats: AdminUserStats! |
| } |
| |
| type AdminUserProfile { |
| nickname: String |
| avatar: String |
| jobTitle: String |
| storeEnabled: Boolean |
| } |
| |
| type AdminUserStats { |
| productsCount: Int! |
| ordersCount: Int! |
| salesCount: Int! |
| } |
| |
| type AdminStoresResult { |
| data: [AdminStore!]! |
| pagination: Pagination! |
| } |
| |
| type AdminStore { |
| _id: ID! |
| userId: User! |
| storeName: String |
| storeLogo: String |
| enabled: Boolean! |
| productsCount: Int! |
| ordersCount: Int! |
| totalSales: Float! |
| currencySymbol: String! |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type AdminOrdersResult { |
| data: [Order!]! |
| pagination: Pagination! |
| } |
| |
| type AdminProductsResult { |
| data: [StoreProduct!]! |
| pagination: Pagination! |
| } |
| |
| type AdminReportsResult { |
| data: [Report!]! |
| pagination: Pagination! |
| } |
| |
| type AdminMessageReportsResult { |
| data: [MessageReport!]! |
| pagination: Pagination! |
| } |
| |
| type AdminSubscriptionsResult { |
| data: [UserSubscription!]! |
| pagination: Pagination! |
| } |
| |
| type AdminLogsResult { |
| data: [Notification!]! |
| pagination: Pagination! |
| } |
| |
| type MessageReport { |
| _id: ID! |
| messageId: Message! |
| reporterId: User! |
| reporterUsername: String |
| reportedUserId: User! |
| reason: String! |
| messageContent: String |
| messageAttachments: JSON |
| conversationId: Conversation |
| status: String! |
| resolution: String |
| adminNote: String |
| resolvedBy: User |
| resolvedAt: Date |
| reportedAt: Date! |
| } |
| |
| type Conversation { |
| _id: ID! |
| participants: [User!]! |
| lastMessage: ConversationLastMessage |
| unreadCount: Int! |
| updatedAt: Date! |
| createdAt: Date! |
| } |
| |
| type ConversationLastMessage { |
| text: String! |
| senderId: User! |
| readBy: [User!]! |
| createdAt: Date! |
| } |
| |
| type Message { |
| _id: ID! |
| conversationId: Conversation! |
| senderId: User! |
| text: String! |
| attachments: [MessageAttachment!]! |
| readBy: [MessageRead!]! |
| reactions: JSON |
| isPinned: Boolean! |
| isForwarded: Boolean! |
| originalMessageId: Message |
| replyTo: Message |
| hidden: Boolean! |
| isDeleted: Boolean! |
| deletedFor: [User!]! |
| createdAt: Date! |
| } |
| |
| type MessageAttachment { |
| type: String! |
| url: String! |
| publicId: String |
| name: String |
| size: Int |
| } |
| |
| type MessageRead { |
| userId: User! |
| readAt: Date! |
| } |
| |
| |
| |
| |
| type Template { |
| _id: ID! |
| name: String! |
| slug: String! |
| description: String |
| category: String! |
| previewImage: String |
| previewImages: [String!]! |
| demoUrl: String |
| themeData: ThemeData! |
| version: String! |
| rating: Float! |
| totalRatings: Int! |
| downloadsCount: Int! |
| viewsCount: Int! |
| installedBy: [TemplateInstall!]! |
| isActive: Boolean! |
| createdAt: Date! |
| installedAt: Date! |
| updatedAt: Date! |
| |
| templateUrl: String |
| } |
| |
| type ThemeData { |
| colors: ThemeColorsOutput |
| typography: ThemeTypographyOutput |
| layout: TemplateLayout |
| sections: [TemplateSection!]! |
| customCss: String |
| customJs: String |
| customHeaderFooter: CustomHeaderFooter |
| uploadedFiles: UploadedThemeFiles |
| templateUrl: String |
| storeInfo: TemplateStoreInfo |
| currency: String |
| paymentSettings: JSON |
| socialLinks: SocialLinks |
| seoSettings: TemplateSeoSettings |
| storeCoupons: [TemplateCoupon!] |
| shippingZones: [TemplateShippingZone!] |
| pagesOrder: JSON |
| performanceSettings: JSON |
| productsSettings: TemplateProductsSettings |
| borderRadius: Int |
| shadowType: String |
| animationType: String |
| glassEffect: Boolean |
| backgroundType: String |
| backgroundValue: String |
| pages: [TemplatePage!] |
| defaultPages: JSON |
| } |
| |
| input ThemeColorsInput { |
| primary: String |
| secondary: String |
| accent: String |
| background: String |
| text: String |
| textLight: String |
| border: String |
| success: String |
| error: String |
| warning: String |
| } |
| |
| input ThemeTypographyInput { |
| fontFamily: String |
| headingFont: String |
| baseFontSize: String |
| enableGoogleFonts: Boolean |
| } |
| |
| type TemplateLayout { |
| type: String |
| headerLayout: String |
| footerLayout: String |
| sidebarPosition: String |
| productsPerRow: Int |
| productsPerRowMobile: Int |
| productsPerRowTablet: Int |
| productsPerRowDesktop: Int |
| enableStickyAddToCart: Boolean |
| enableCompareProducts: Boolean |
| enableWishlist: Boolean |
| enableRecentlyViewed: Boolean |
| containerWidth: String |
| containerPadding: String |
| showBreadcrumb: Boolean |
| stickyHeader: Boolean |
| backToTop: Boolean |
| showSearchBar: Boolean |
| showCategories: Boolean |
| productsPerPage: Int |
| enableLazyLoad: Boolean |
| enableAnimations: Boolean |
| columns: Int |
| shadowType: String |
| } |
| |
| type TemplateSection { |
| id: String |
| type: String! |
| enabled: Boolean |
| order: Int |
| title: String |
| limit: Int |
| layout: String |
| content: JSON |
| settings: JSON |
| } |
| |
| type CustomHeaderFooter { |
| header: String |
| footer: String |
| sidebar: String |
| productCard: String |
| categoryCard: String |
| css: String |
| js: String |
| } |
| |
| type ThemeColorsOutput { |
| primary: String |
| secondary: String |
| accent: String |
| background: String |
| text: String |
| textLight: String |
| border: String |
| success: String |
| error: String |
| warning: String |
| } |
| |
| type ThemeTypographyOutput { |
| fontFamily: String |
| headingFont: String |
| baseFontSize: String |
| enableGoogleFonts: Boolean |
| } |
| type UploadedThemeFiles { |
| htmlFiles: [TemplateFile!]! |
| cssFiles: [TemplateFile!]! |
| jsFiles: [TemplateFile!]! |
| imageFiles: [TemplateFile!]! |
| fontFiles: [TemplateFile!]! |
| } |
| |
| type TemplateFile { |
| name: String! |
| url: String |
| size: Int |
| } |
| |
| type TemplateStoreInfo { |
| storeName: String |
| storeLogo: String |
| storeBanner: String |
| storeDescription: String |
| contactEmail: String |
| } |
| |
| type TemplateSeoSettings { |
| metaTitleTemplate: String |
| metaDescriptionTemplate: String |
| productTitleTemplate: String |
| enableBreadcrumbs: Boolean |
| sitemapEnabled: Boolean |
| robotsTxt: String |
| canonicalUrl: String |
| } |
| |
| type TemplateCoupon { |
| code: String! |
| discount: Float! |
| discountType: String! |
| minPurchase: Float |
| maxDiscount: Float |
| validUntil: Date |
| usageLimit: Int |
| } |
| |
| type TemplateShippingZone { |
| name: String! |
| countries: [String!]! |
| cities: [String!]! |
| cost: Float! |
| freeShippingAbove: Float |
| estimatedDays: String |
| } |
| |
| type TemplateProductsSettings { |
| productViewType: String |
| autoApproveReviews: Boolean |
| enableQuickView: Boolean |
| enableProductReviews: Boolean |
| productsPerRow: Int |
| } |
| |
| type TemplatePage { |
| slug: String! |
| title: String! |
| content: String |
| css: String |
| js: String |
| seo: PageSEO |
| isEnabled: Boolean |
| order: Int |
| type: String |
| } |
| |
| type TemplateInstall { |
| userId: User! |
| installedAt: Date! |
| } |
| |
| type TemplateCategory { |
| _id: String! |
| count: Int! |
| } |
| |
| type TemplatesResult { |
| data: [Template!]! |
| pagination: Pagination! |
| } |
| |
| type TemplateApplyResult { |
| success: Boolean! |
| message: String! |
| appliedSettings: TemplateAppliedSettings! |
| needsRefresh: Boolean! |
| redirectUrl: String! |
| } |
| |
| type TemplateAppliedSettings { |
| primaryColor: String |
| secondaryColor: String |
| fontFamily: String |
| borderRadius: Int |
| shadowType: String |
| animationType: String |
| glassEffect: Boolean |
| backgroundType: String |
| sectionsCount: Int |
| layout: String |
| productsPerRow: Int |
| hasCustomCss: Boolean |
| hasCustomHeader: Boolean |
| hasFullTemplate: Boolean |
| templateUrl: String |
| } |
| |
| |
| |
| |
| input InteractionsSettingsInput { |
| showToPublic: Boolean |
| showToLoggedIn: Boolean |
| showOnlyToOwner: Boolean |
| showToSpecificUsers: [String!] |
| hideProjects: [String!] |
| hideComments: [String!] |
| } |
| |
| input ThemeInput { |
| |
| |
| id: String |
| primaryColor: String |
| secondaryColor: String |
| fontFamily: String |
| borderRadius: String |
| |
| name: String |
| isActive: Boolean |
| version: String |
| layout: String |
| customTemplates: CustomTemplatesInput |
| settings: ThemeSettingsInput |
| colors: ThemeColorsInput |
| typography: ThemeTypographyInput |
| customAssets: CustomAssetsInput |
| seo: ThemeSEOInput |
| } |
| |
| input CustomTemplatesInput { |
| header: String |
| footer: String |
| sidebar: String |
| productCard: String |
| categoryCard: String |
| } |
| |
| input ThemeSettingsInput { |
| containerWidth: String |
| containerPadding: String |
| showBreadcrumb: Boolean |
| stickyHeader: Boolean |
| backToTop: Boolean |
| showSearchBar: Boolean |
| showCategories: Boolean |
| productsPerRow: Int |
| productsPerPage: Int |
| enableLazyLoad: Boolean |
| enableAnimations: Boolean |
| } |
| |
| input SectionNamesInput { |
| about: String |
| experience: String |
| education: String |
| certificates: String |
| skills: String |
| projects: String |
| interests: String |
| contactInfo: String |
| activity: String |
| contributionGraph: String |
| alsoViewed: String |
| suggestions: String |
| pages: String |
| analytics: String |
| jobApplications: String |
| } |
| |
| input SectionVisibilityInput { |
| about: Boolean |
| experience: Boolean |
| education: Boolean |
| certificates: Boolean |
| skills: Boolean |
| projects: Boolean |
| interests: Boolean |
| contactInfo: Boolean |
| socialLinks: Boolean |
| stats: Boolean |
| activity: Boolean |
| contributionGraph: Boolean |
| alsoViewed: Boolean |
| suggestions: Boolean |
| pages: Boolean |
| jobApplications: Boolean |
| analytics: Boolean |
| } |
| |
| input SectionOrderItemInput { |
| id: String! |
| column: String |
| } |
| |
| input SectionStyleSettingsInput { |
| padding: String |
| margin: String |
| background: String |
| textColor: String |
| borderRadius: String |
| shadow: String |
| } |
| |
| input LayoutInput { |
| type: String |
| columns: Int |
| showProjectImages: Boolean |
| showProjectDescriptions: Boolean |
| showProjectRatings: Boolean |
| showProjectLinks: Boolean |
| } |
| |
| input HeaderInput { |
| showAvatar: Boolean |
| showJobTitle: Boolean |
| showBio: Boolean |
| showContactInfo: Boolean |
| showSocialLinks: Boolean |
| layout: String |
| } |
| |
| input FooterInput { |
| showCopyright: Boolean |
| customText: String |
| } |
| |
| input SEOInput { |
| title: String |
| description: String |
| keywords: String |
| ogImage: String |
| ogTitle: String |
| ogDescription: String |
| twitterCard: String |
| twitterSite: String |
| canonicalUrl: String |
| noindex: Boolean |
| nofollow: Boolean |
| } |
| |
| input SchemaInput { |
| type: String |
| name: String |
| description: String |
| image: String |
| sameAs: [String!] |
| jobTitle: String |
| worksFor: String |
| alumniOf: [String!] |
| knowsAbout: [String!] |
| } |
| |
| input CustomAssetsInput { |
| css: String |
| js: String |
| headHtml: String |
| bodyHtml: String |
| } |
| |
| input ThemeSEOInput { |
| metaTitle: String |
| metaDescription: String |
| metaKeywords: String |
| ogImage: String |
| twitterCard: String |
| canonicalUrl: String |
| structuredData: JSON |
| } |
| |
| input LayoutSettingsInput { |
| headerLayout: String |
| footerLayout: String |
| sidebarPosition: String |
| productsPerRowDesktop: Int |
| productsPerRowTablet: Int |
| productsPerRowMobile: Int |
| enableStickyAddToCart: Boolean |
| enableQuickView: Boolean |
| enableCompareProducts: Boolean |
| enableWishlist: Boolean |
| enableRecentlyViewed: Boolean |
| enableProductReviews: Boolean |
| cardStyle: String |
| heroStyle: String |
| showStats: Boolean |
| showAnalytics: Boolean |
| showHero: Boolean |
| showFeatured: Boolean |
| showCategories: Boolean |
| theme: String |
| productViewType: String |
| compactMode: JSON |
| magazineMode: JSON |
| darkStoreMode: JSON |
| sectionsOrder: [String!] |
| advanced: JSON |
| } |
| |
| input PageOrderInput { |
| id: ID! |
| order: Int! |
| } |
| |
| input PlatformBankInput { |
| bankName: String! |
| accountName: String! |
| accountNumber: String! |
| iban: String |
| swiftCode: String |
| isActive: Boolean |
| order: Int |
| } |
| |
| input CreatePlanInput { |
| name: String! |
| nameAr: String |
| description: String |
| descriptionAr: String |
| price: Float! |
| currency: String |
| duration: String! |
| features: PlanFeaturesInput! |
| hasFreeTrial: Boolean |
| freeTrialDays: Int |
| badge: String |
| badgeColor: String |
| icon: String |
| isActive: Boolean |
| order: Int |
| customPermissions: JSON |
| } |
| |
| input PlanFeaturesInput { |
| storeEnabled: Boolean |
| maxProducts: Int |
| maxDigitalProducts: Int |
| maxProjects: Int |
| maxServices: Int |
| pageBuilderEnabled: Boolean |
| customDomain: Boolean |
| analyticsEnabled: Boolean |
| prioritySupport: Boolean |
| removeBranding: Boolean |
| teamMembers: Int |
| apiAccess: Boolean |
| customCss: Boolean |
| advancedAnalytics: Boolean |
| exportData: Boolean |
| } |
| |
| input CreatePaymentMethodInput { |
| name: String! |
| nameAr: String |
| type: String! |
| icon: String |
| instructions: String |
| instructionsAr: String |
| bankDetails: BankDetailsInput |
| mobileWalletDetails: MobileWalletDetailsInput |
| onlineDetails: OnlineDetailsInput |
| isActive: Boolean |
| order: Int |
| } |
| |
| input BankDetailsInput { |
| bankName: String |
| accountName: String |
| accountNumber: String |
| iban: String |
| swiftCode: String |
| branch: String |
| } |
| |
| input MobileWalletDetailsInput { |
| provider: String |
| phoneNumber: String |
| } |
| |
| input OnlineDetailsInput { |
| provider: String |
| apiKey: String |
| webhookSecret: String |
| isActive: Boolean |
| } |
| |
| |
| |
| |
| type StoreAnalytics { |
| totalViews: Int! |
| uniqueViews: Int! |
| followersCount: Int! |
| orders: OrderAnalytics! |
| products: ProductAnalytics! |
| topProducts: [TopProduct!]! |
| last7Days: [DailyAnalytics!]! |
| last6Months: [MonthlyAnalytics!]! |
| referralSources: ReferralSources! |
| recentViews: [RecentView!]! |
| } |
| |
| type OrderAnalytics { |
| total: Int! |
| completed: Int! |
| pending: Int! |
| totalRevenue: Float! |
| } |
| |
| type ProductAnalytics { |
| total: Int! |
| digital: Int! |
| projects: Int! |
| services: Int! |
| totalSales: Int! |
| } |
| |
| type TopProduct { |
| _id: ID! |
| title: String! |
| salesCount: Int! |
| price: Float! |
| image: String |
| } |
| |
| type DailyAnalytics { |
| date: String! |
| views: Int! |
| uniqueViews: Int! |
| orders: Int! |
| revenue: Float! |
| } |
| |
| type MonthlyAnalytics { |
| month: String! |
| views: Int! |
| uniqueViews: Int! |
| orders: Int! |
| revenue: Float! |
| } |
| |
| type ReferralSources { |
| direct: Int! |
| google: Int! |
| facebook: Int! |
| twitter: Int! |
| linkedin: Int! |
| instagram: Int! |
| github: Int! |
| mgzon: Int! |
| search: Int! |
| other: Int! |
| } |
| |
| type RecentView { |
| viewerName: String |
| deviceType: String! |
| browser: String! |
| timestamp: Date! |
| referer: String |
| } |
| |
| |
| |
| |
| type SiteSettings { |
| logo: String! |
| siteName: String! |
| primaryColor: String! |
| secondaryColor: String! |
| navbarLinks: [NavbarLink!]! |
| footerText: String! |
| updatedAt: Date! |
| } |
| |
| type NavbarLink { |
| label: String! |
| href: String! |
| order: Int! |
| } |
| |
| |
| |
| |
| type StoreSettingsResult { |
| settings: StoreSettingsType! |
| theme: StoreTheme! |
| } |
| |
| type StoreSettingsType { |
| userId: ID! |
| storeName: String |
| storeLogo: String |
| storeBanner: String |
| storeDescription: String |
| contactEmail: String |
| enabled: Boolean! |
| currency: String! |
| currencySymbol: String! |
| paymentMethods: [PaymentMethod!]! |
| primaryColor: String! |
| secondaryColor: String! |
| fontFamily: String! |
| borderRadius: Int! |
| shadowType: String! |
| animationType: String! |
| glassEffect: Boolean! |
| backgroundType: String! |
| backgroundValue: String! |
| customCss: String! |
| productViewType: String! |
| socialLinks: SocialLinks! |
| pageBuilder: PageBuilder! |
| layoutSettings: LayoutSettings! |
| appliedTemplate: AppliedTemplate |
| currentBackground: CurrentBackground |
| customBackgrounds: [CustomBackground!]! |
| backgroundHistory: [BackgroundHistory!]! |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type PaymentMethod { |
| type: String! |
| label: String |
| details: JSON! |
| isActive: Boolean! |
| createdAt: Date! |
| } |
| |
| type PageBuilder { |
| sections: [PageSection!]! |
| } |
| |
| type PageSection { |
| id: String! |
| type: String! |
| enabled: Boolean! |
| order: Int! |
| title: String |
| limit: Int |
| layout: String |
| content: JSON |
| settings: JSON |
| } |
| |
| type LayoutSettings { |
| layoutTemplate: String! |
| headerLayout: String! |
| footerLayout: String! |
| sidebarPosition: String! |
| productsPerRowDesktop: Int! |
| productsPerRowTablet: Int! |
| productsPerRowMobile: Int! |
| enableStickyAddToCart: Boolean! |
| enableQuickView: Boolean! |
| enableCompareProducts: Boolean! |
| enableWishlist: Boolean! |
| enableRecentlyViewed: Boolean! |
| enableProductReviews: Boolean! |
| cardStyle: String! |
| heroStyle: String! |
| showStats: Boolean! |
| showAnalytics: Boolean! |
| showHero: Boolean! |
| showFeatured: Boolean! |
| showCategories: Boolean! |
| theme: String! |
| productViewType: String! |
| } |
| |
| type AppliedTemplate { |
| slug: String! |
| name: String! |
| templateUrl: String |
| appliedAt: Date! |
| hasFullTemplate: Boolean! |
| path: String |
| } |
| |
| type CurrentBackground { |
| url: String! |
| name: String! |
| type: String! |
| appliedAt: Date! |
| } |
| |
| type CustomBackground { |
| id: ID! |
| name: String! |
| url: String! |
| category: String! |
| type: String! |
| uploadedAt: Date! |
| isActive: Boolean! |
| } |
| |
| type BackgroundHistory { |
| url: String! |
| name: String! |
| appliedAt: Date! |
| duration: Int! |
| } |
| |
| |
| |
| |
| type CartSummary { |
| totalItems: Int! |
| totalStores: Int! |
| stores: [CartStoreSummary!]! |
| } |
| |
| type CartStoreSummary { |
| storeId: ID! |
| storeName: String! |
| itemCount: Int! |
| subtotal: Float! |
| } |
| |
| |
| |
| |
| type Rating { |
| _id: ID! |
| targetUserId: User! |
| raterUserId: User! |
| rating: Int! |
| review: String |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| |
| |
| |
| type PlatformBank { |
| _id: ID! |
| bankName: String! |
| accountName: String! |
| accountNumber: String! |
| iban: String |
| swiftCode: String |
| isActive: Boolean! |
| order: Int! |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| |
| |
| type PlatformPaymentMethod { |
| _id: ID! |
| name: String! |
| nameAr: String |
| type: String! |
| icon: String! |
| instructions: String |
| instructionsAr: String |
| bankDetails: BankDetails |
| mobileWalletDetails: MobileWalletDetails |
| onlineDetails: OnlineDetails |
| isActive: Boolean! |
| order: Int! |
| createdAt: Date! |
| updatedAt: Date! |
| } |
| |
| type BankDetails { |
| bankName: String |
| accountName: String |
| accountNumber: String |
| iban: String |
| swiftCode: String |
| branch: String |
| } |
| |
| type MobileWalletDetails { |
| provider: String |
| phoneNumber: String |
| } |
| |
| type OnlineDetails { |
| provider: String |
| apiKey: String |
| webhookSecret: String |
| isActive: Boolean |
| } |
| `; |
|
|
| module.exports = typeDefs; |