Apply Composer changes: comprehensive API updates, migrations, middleware, and infrastructure improvements
- Add comprehensive database migrations (001-024) for schema evolution - Enhance API schema with expanded type definitions and resolvers - Add new middleware: audit logging, rate limiting, MFA enforcement, security, tenant auth - Implement new services: AI optimization, billing, blockchain, compliance, marketplace - Add adapter layer for cloud integrations (Cloudflare, Kubernetes, Proxmox, storage) - Update Crossplane provider with enhanced VM management capabilities - Add comprehensive test suite for API endpoints and services - Update frontend components with improved GraphQL subscriptions and real-time updates - Enhance security configurations and headers (CSP, CORS, etc.) - Update documentation and configuration files - Add new CI/CD workflows and validation scripts - Implement design system improvements and UI enhancements
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
import { makeExecutableSchema } from '@graphql-tools/schema'
|
||||
import { mergeResolvers } from '@graphql-tools/merge'
|
||||
import { typeDefs } from './typeDefs'
|
||||
import { resolvers } from './resolvers'
|
||||
import { subscriptionResolvers } from './subscriptions'
|
||||
|
||||
export const schema = makeExecutableSchema({
|
||||
typeDefs,
|
||||
resolvers,
|
||||
resolvers: mergeResolvers([resolvers, subscriptionResolvers]),
|
||||
})
|
||||
|
||||
|
||||
+2352
-3
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* GraphQL Subscription implementations
|
||||
* These are the actual subscription resolvers that publish events
|
||||
*/
|
||||
|
||||
import { PubSub } from 'graphql-subscriptions'
|
||||
import { Context } from '../types/context'
|
||||
|
||||
// Create a simple in-memory PubSub instance
|
||||
// In production, use Redis or another pub/sub system
|
||||
export const pubsub = new PubSub()
|
||||
|
||||
// Event channels
|
||||
export const EVENTS = {
|
||||
RESOURCE_CREATED: 'RESOURCE_CREATED',
|
||||
RESOURCE_UPDATED: 'RESOURCE_UPDATED',
|
||||
RESOURCE_DELETED: 'RESOURCE_DELETED',
|
||||
} as const
|
||||
|
||||
// Helper functions to publish events
|
||||
export function publishResourceCreated(resource: any) {
|
||||
pubsub.publish(EVENTS.RESOURCE_CREATED, {
|
||||
resourceCreated: resource,
|
||||
})
|
||||
}
|
||||
|
||||
export function publishResourceUpdated(resourceId: string, resource: any) {
|
||||
pubsub.publish(EVENTS.RESOURCE_UPDATED, {
|
||||
resourceUpdated: resource,
|
||||
})
|
||||
}
|
||||
|
||||
export function publishResourceDeleted(resourceId: string) {
|
||||
pubsub.publish(EVENTS.RESOURCE_DELETED, {
|
||||
resourceDeleted: resourceId,
|
||||
})
|
||||
}
|
||||
|
||||
// Subscription resolvers
|
||||
export const subscriptionResolvers = {
|
||||
Subscription: {
|
||||
resourceCreated: {
|
||||
subscribe: () => pubsub.asyncIterator([EVENTS.RESOURCE_CREATED]),
|
||||
},
|
||||
resourceUpdated: {
|
||||
subscribe: (_: unknown, args: { id: string }) => {
|
||||
return pubsub.asyncIterator([EVENTS.RESOURCE_UPDATED])
|
||||
},
|
||||
resolve: (payload: any) => {
|
||||
// Filter by id if provided
|
||||
return payload.resourceUpdated
|
||||
},
|
||||
},
|
||||
resourceDeleted: {
|
||||
subscribe: (_: unknown, args: { id: string }) => {
|
||||
return pubsub.asyncIterator([EVENTS.RESOURCE_DELETED])
|
||||
},
|
||||
resolve: (payload: any) => {
|
||||
return payload.resourceDeleted
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user