1
0

schema.graphqls 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. # GraphQL schema for ARP (Agent-native ERP)
  2. # Based on models defined in arp_spec.md
  3. # User account
  4. type User {
  5. id: ID!
  6. email: String!
  7. roles: [Role!]!
  8. createdAt: String!
  9. updatedAt: String!
  10. }
  11. # Note belonging to a user and associated with a Service
  12. type Note {
  13. id: ID!
  14. title: String!
  15. content: String!
  16. userId: ID!
  17. user: User!
  18. serviceId: ID!
  19. service: Service!
  20. createdAt: String!
  21. updatedAt: String!
  22. }
  23. # Role for grouping permissions
  24. type Role {
  25. id: ID!
  26. name: String!
  27. description: String!
  28. permissions: [Permission!]!
  29. }
  30. # Permission for fine-grained access control
  31. type Permission {
  32. id: ID!
  33. code: String!
  34. description: String!
  35. }
  36. # Authentication payload returned on successful login
  37. type AuthPayload {
  38. token: String!
  39. user: User!
  40. }
  41. # Service entity that agents coordinate work around
  42. type Service {
  43. id: ID!
  44. name: String!
  45. description: String
  46. createdById: ID!
  47. createdBy: User!
  48. participants: [User!]!
  49. tasks: [Task!]!
  50. createdAt: String!
  51. updatedAt: String!
  52. }
  53. # Task management
  54. type Task {
  55. id: ID!
  56. title: String!
  57. content: String!
  58. createdById: ID!
  59. createdBy: User!
  60. updatedById: ID!
  61. updatedBy: User!
  62. assigneeId: ID
  63. assignee: User
  64. statusId: ID
  65. status: TaskStatus
  66. dueDate: String
  67. priority: String!
  68. createdAt: String!
  69. updatedAt: String!
  70. }
  71. # Task status for workflow steps
  72. type TaskStatus {
  73. id: ID!
  74. code: String!
  75. label: String!
  76. tasks: [Task!]!
  77. createdAt: String!
  78. updatedAt: String!
  79. }
  80. # Message sent inside a conversation
  81. type Message {
  82. id: ID!
  83. senderId: ID!
  84. sender: User!
  85. content: String!
  86. sentAt: String!
  87. receivers: [ID!]!
  88. receiverObjects: [User!]!
  89. createdAt: String!
  90. updatedAt: String!
  91. }
  92. # Workflow types
  93. type WorkflowTemplate {
  94. id: ID!
  95. name: String!
  96. description: String
  97. definition: String!
  98. isActive: Boolean!
  99. createdBy: User!
  100. createdAt: String!
  101. updatedAt: String!
  102. }
  103. type WorkflowInstance {
  104. id: ID!
  105. template: WorkflowTemplate!
  106. status: String!
  107. context: String
  108. service: Service
  109. createdAt: String!
  110. updatedAt: String!
  111. completedAt: String
  112. }
  113. type WorkflowNode {
  114. id: ID!
  115. nodeKey: String!
  116. nodeType: String!
  117. status: String!
  118. task: Task
  119. inputData: String
  120. outputData: String
  121. createdAt: String!
  122. updatedAt: String!
  123. startedAt: String
  124. completedAt: String
  125. }
  126. # Root Query type
  127. type Query {
  128. # Users
  129. users: [User!]!
  130. user(id: ID!): User
  131. # Notes
  132. notes: [Note!]!
  133. note(id: ID!): Note
  134. # Roles
  135. roles: [Role!]!
  136. role(id: ID!): Role
  137. # Permissions
  138. permissions: [Permission!]!
  139. permission(id: ID!): Permission
  140. # Services
  141. services: [Service!]!
  142. service(id: ID!): Service
  143. # Tasks
  144. tasks: [Task!]!
  145. task(id: ID!): Task
  146. # TaskStatuses
  147. taskStatuses: [TaskStatus!]!
  148. taskStatus(id: ID!): TaskStatus
  149. # Messages
  150. messages: [Message!]!
  151. message(id: ID!): Message
  152. # Workflows
  153. workflowTemplates: [WorkflowTemplate!]!
  154. workflowTemplate(id: ID!): WorkflowTemplate
  155. workflowInstances: [WorkflowInstance!]!
  156. workflowInstance(id: ID!): WorkflowInstance
  157. }
  158. # Input types for workflow mutations
  159. input NewWorkflowTemplate {
  160. name: String!
  161. description: String
  162. definition: String!
  163. isActive: Boolean
  164. }
  165. input UpdateWorkflowTemplateInput {
  166. name: String
  167. description: String
  168. definition: String
  169. isActive: Boolean
  170. }
  171. input StartWorkflowInput {
  172. serviceId: ID
  173. context: String
  174. }
  175. # Root Mutation type
  176. type Mutation {
  177. # Authentication
  178. login(email: String!, password: String!): AuthPayload!
  179. # Users
  180. createUser(input: NewUser!): User!
  181. updateUser(id: ID!, input: UpdateUserInput!): User!
  182. deleteUser(id: ID!): Boolean!
  183. # Notes
  184. createNote(input: NewNote!): Note!
  185. updateNote(id: ID!, input: UpdateNoteInput!): Note!
  186. deleteNote(id: ID!): Boolean!
  187. # Roles
  188. createRole(input: NewRole!): Role!
  189. updateRole(id: ID!, input: UpdateRoleInput!): Role!
  190. deleteRole(id: ID!): Boolean!
  191. # Permissions
  192. createPermission(input: NewPermission!): Permission!
  193. updatePermission(id: ID!, input: UpdatePermissionInput!): Permission!
  194. deletePermission(id: ID!): Boolean!
  195. # Services
  196. createService(input: NewService!): Service!
  197. updateService(id: ID!, input: UpdateServiceInput!): Service!
  198. deleteService(id: ID!): Boolean!
  199. # Tasks
  200. createTask(input: NewTask!): Task!
  201. updateTask(id: ID!, input: UpdateTaskInput!): Task!
  202. deleteTask(id: ID!): Boolean!
  203. # TaskStatuses
  204. createTaskStatus(input: NewTaskStatus!): TaskStatus!
  205. updateTaskStatus(id: ID!, input: UpdateTaskStatusInput!): TaskStatus!
  206. deleteTaskStatus(id: ID!): Boolean!
  207. # Messages
  208. createMessage(input: NewMessage!): Message!
  209. updateMessage(id: ID!, input: UpdateMessageInput!): Message!
  210. deleteMessage(id: ID!): Boolean!
  211. # Workflows
  212. createWorkflowTemplate(input: NewWorkflowTemplate!): WorkflowTemplate!
  213. updateWorkflowTemplate(id: ID!, input: UpdateWorkflowTemplateInput!): WorkflowTemplate!
  214. deleteWorkflowTemplate(id: ID!): Boolean!
  215. startWorkflow(templateId: ID!, input: StartWorkflowInput!): WorkflowInstance!
  216. cancelWorkflow(id: ID!): WorkflowInstance!
  217. retryWorkflowNode(nodeId: ID!): WorkflowNode!
  218. }
  219. # Input types for mutations
  220. input NewUser {
  221. email: String!
  222. password: String!
  223. roles: [ID!]!
  224. }
  225. input UpdateUserInput {
  226. email: String
  227. password: String
  228. roles: [ID!]!
  229. }
  230. input NewNote {
  231. title: String!
  232. content: String!
  233. userId: ID!
  234. serviceId: ID!
  235. }
  236. input UpdateNoteInput {
  237. title: String
  238. content: String
  239. userId: ID
  240. serviceId: ID
  241. }
  242. input NewRole {
  243. name: String!
  244. description: String!
  245. permissions: [ID!]!
  246. }
  247. input UpdateRoleInput {
  248. name: String
  249. description: String
  250. permissions: [ID!]!
  251. }
  252. input NewPermission {
  253. code: String!
  254. description: String!
  255. }
  256. input UpdatePermissionInput {
  257. code: String
  258. description: String
  259. }
  260. input NewService {
  261. name: String!
  262. description: String
  263. createdById: ID!
  264. participants: [ID!]!
  265. }
  266. input UpdateServiceInput {
  267. name: String
  268. description: String
  269. createdById: ID
  270. participants: [ID!]!
  271. }
  272. input NewTask {
  273. title: String!
  274. content: String!
  275. createdById: ID!
  276. assigneeId: ID
  277. statusId: ID
  278. dueDate: String
  279. priority: String!
  280. }
  281. input UpdateTaskInput {
  282. title: String
  283. content: String
  284. createdById: ID
  285. assigneeId: ID
  286. statusId: ID
  287. dueDate: String
  288. priority: String
  289. }
  290. input NewTaskStatus {
  291. code: String!
  292. label: String!
  293. }
  294. input UpdateTaskStatusInput {
  295. code: String
  296. label: String
  297. }
  298. input NewMessage {
  299. content: String!
  300. receivers: [ID!]!
  301. }
  302. input UpdateMessageInput {
  303. content: String
  304. receivers: [ID!]
  305. }
  306. # Subscriptions for real-time updates
  307. type Subscription {
  308. taskCreated: Task!
  309. taskUpdated: Task!
  310. taskDeleted: Task!
  311. messageAdded: Message!
  312. }