| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- # GraphQL schema for ARP (Agent-native ERP)
- # Based on models defined in arp_spec.md
- # User account
- type User {
- id: ID!
- email: String!
- password: String!
- roles: [Role!]!
- createdAt: String!
- updatedAt: String!
- }
- # Note belonging to a user and associated with a Service
- type Note {
- id: ID!
- title: String!
- content: String!
- userId: ID!
- user: User!
- serviceId: ID!
- service: Service!
- createdAt: String!
- updatedAt: String!
- }
- # Role for grouping permissions
- type Role {
- id: ID!
- name: String!
- description: String!
- permissions: [Permission!]!
- }
- # Permission for fine-grained access control
- type Permission {
- id: ID!
- code: String!
- description: String!
- }
- # Authentication payload returned on successful login
- type AuthPayload {
- token: String!
- user: User!
- }
- # Service entity that agents coordinate work around
- type Service {
- id: ID!
- name: String!
- description: String
- createdById: ID!
- createdBy: User!
- participants: [User!]!
- tasks: [Task!]!
- createdAt: String!
- updatedAt: String!
- }
- # Task management
- type Task {
- id: ID!
- title: String!
- content: String!
- createdById: ID!
- createdBy: User!
- assigneeId: ID
- assignee: User
- statusId: ID
- status: TaskStatus
- dueDate: String
- priority: String!
- createdAt: String!
- updatedAt: String!
- }
- # Task status for workflow steps
- type TaskStatus {
- id: ID!
- code: String!
- label: String!
- tasks: [Task!]!
- createdAt: String!
- updatedAt: String!
- }
- # Chat channel between users/agents
- type Channel {
- id: ID!
- participants: [User!]!
- createdAt: String!
- updatedAt: String!
- }
- # Message sent inside a conversation
- type Message {
- id: ID!
- conversationId: ID!
- senderId: ID!
- sender: User!
- content: String!
- sentAt: String!
- createdAt: String!
- updatedAt: String!
- }
- # Root Query type
- type Query {
- # Users
- users: [User!]!
- user(id: ID!): User
- # Notes
- notes: [Note!]!
- note(id: ID!): Note
- # Roles
- roles: [Role!]!
- role(id: ID!): Role
- # Permissions
- permissions: [Permission!]!
- permission(id: ID!): Permission
- # Services
- services: [Service!]!
- service(id: ID!): Service
- # Tasks
- tasks: [Task!]!
- task(id: ID!): Task
- # TaskStatuses
- taskStatuses: [TaskStatus!]!
- taskStatus(id: ID!): TaskStatus
- # Channels
- channels: [Channel!]!
- channel(id: ID!): Channel
- # Messages
- messages: [Message!]!
- message(id: ID!): Message
- }
- # Root Mutation type
- type Mutation {
- # Authentication
- login(email: String!, password: String!): AuthPayload!
- # Users
- createUser(input: NewUser!): User!
- updateUser(id: ID!, input: UpdateUserInput!): User!
- deleteUser(id: ID!): Boolean!
- # Notes
- createNote(input: NewNote!): Note!
- updateNote(id: ID!, input: UpdateNoteInput!): Note!
- deleteNote(id: ID!): Boolean!
- # Roles
- createRole(input: NewRole!): Role!
- updateRole(id: ID!, input: UpdateRoleInput!): Role!
- deleteRole(id: ID!): Boolean!
- # Permissions
- createPermission(input: NewPermission!): Permission!
- updatePermission(id: ID!, input: UpdatePermissionInput!): Permission!
- deletePermission(id: ID!): Boolean!
- # Services
- createService(input: NewService!): Service!
- updateService(id: ID!, input: UpdateServiceInput!): Service!
- deleteService(id: ID!): Boolean!
- # Tasks
- createTask(input: NewTask!): Task!
- updateTask(id: ID!, input: UpdateTaskInput!): Task!
- deleteTask(id: ID!): Boolean!
- # TaskStatuses
- createTaskStatus(input: NewTaskStatus!): TaskStatus!
- updateTaskStatus(id: ID!, input: UpdateTaskStatusInput!): TaskStatus!
- deleteTaskStatus(id: ID!): Boolean!
- # Channels
- createChannel(input: NewChannel!): Channel!
- updateChannel(id: ID!, input: UpdateChannelInput!): Channel!
- deleteChannel(id: ID!): Boolean!
- # Messages
- createMessage(input: NewMessage!): Message!
- updateMessage(id: ID!, input: UpdateMessageInput!): Message!
- deleteMessage(id: ID!): Boolean!
- }
- # Input types for mutations
- input NewUser {
- email: String!
- password: String!
- roles: [ID!]!
- }
- input UpdateUserInput {
- email: String
- password: String
- roles: [ID!]!
- }
- input NewNote {
- title: String!
- content: String!
- userId: ID!
- serviceId: ID!
- }
- input UpdateNoteInput {
- title: String
- content: String
- userId: ID
- serviceId: ID
- }
- input NewRole {
- name: String!
- description: String!
- permissions: [ID!]!
- }
- input UpdateRoleInput {
- name: String
- description: String
- permissions: [ID!]!
- }
- input NewPermission {
- code: String!
- description: String!
- }
- input UpdatePermissionInput {
- code: String
- description: String
- }
- input NewService {
- name: String!
- description: String
- createdById: ID!
- participants: [ID!]!
- }
- input UpdateServiceInput {
- name: String
- description: String
- createdById: ID
- participants: [ID!]!
- }
- input NewTask {
- title: String!
- content: String!
- createdById: ID!
- assigneeId: ID
- statusId: ID
- dueDate: String
- priority: String!
- }
- input UpdateTaskInput {
- title: String
- content: String
- createdById: ID
- assigneeId: ID
- statusId: ID
- dueDate: String
- priority: String
- }
- input NewTaskStatus {
- code: String!
- label: String!
- }
- input UpdateTaskStatusInput {
- code: String
- label: String
- }
- input NewChannel {
- participants: [ID!]!
- }
- input UpdateChannelInput {
- participants: [ID!]!
- }
- input NewMessage {
- conversationId: ID!
- senderId: ID!
- content: String!
- }
- input UpdateMessageInput {
- conversationId: ID
- senderId: ID
- content: String
- }
- # Subscriptions for real-time updates
- type Subscription {
- taskCreated: Task!
- taskUpdated: Task!
- taskDeleted: Task!
- messageAdded: Message!
- }
|