schema.graphqls 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  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. password: String!
  8. roles: [Role!]!
  9. createdAt: String!
  10. updatedAt: String!
  11. }
  12. # Note belonging to a user and associated with a Service
  13. type Note {
  14. id: ID!
  15. title: String!
  16. content: String!
  17. userId: ID!
  18. user: User!
  19. serviceId: ID!
  20. service: Service!
  21. createdAt: String!
  22. updatedAt: String!
  23. }
  24. # Role for grouping permissions
  25. type Role {
  26. id: ID!
  27. name: String!
  28. description: String!
  29. permissions: [Permission!]!
  30. }
  31. # Permission for fine-grained access control
  32. type Permission {
  33. id: ID!
  34. code: String!
  35. description: String!
  36. }
  37. # Authentication payload returned on successful login
  38. type AuthPayload {
  39. token: String!
  40. user: User!
  41. }
  42. # Service entity that agents coordinate work around
  43. type Service {
  44. id: ID!
  45. name: String!
  46. description: String
  47. createdById: ID!
  48. createdBy: User!
  49. participants: [User!]!
  50. tasks: [Task!]!
  51. createdAt: String!
  52. updatedAt: String!
  53. }
  54. # Task management
  55. type Task {
  56. id: ID!
  57. title: String!
  58. content: String!
  59. createdById: ID!
  60. createdBy: User!
  61. updatedById: ID!
  62. updatedBy: User!
  63. assigneeId: ID
  64. assignee: User
  65. statusId: ID
  66. status: TaskStatus
  67. dueDate: String
  68. priority: String!
  69. createdAt: String!
  70. updatedAt: String!
  71. }
  72. # Task status for workflow steps
  73. type TaskStatus {
  74. id: ID!
  75. code: String!
  76. label: String!
  77. tasks: [Task!]!
  78. createdAt: String!
  79. updatedAt: String!
  80. }
  81. # Chat channel between users/agents
  82. type Channel {
  83. id: ID!
  84. participants: [User!]!
  85. createdAt: String!
  86. updatedAt: String!
  87. }
  88. # Message sent inside a conversation
  89. type Message {
  90. id: ID!
  91. conversationId: ID!
  92. senderId: ID!
  93. sender: User!
  94. content: String!
  95. sentAt: String!
  96. createdAt: String!
  97. updatedAt: String!
  98. }
  99. # Root Query type
  100. type Query {
  101. # Users
  102. users: [User!]!
  103. user(id: ID!): User
  104. # Notes
  105. notes: [Note!]!
  106. note(id: ID!): Note
  107. # Roles
  108. roles: [Role!]!
  109. role(id: ID!): Role
  110. # Permissions
  111. permissions: [Permission!]!
  112. permission(id: ID!): Permission
  113. # Services
  114. services: [Service!]!
  115. service(id: ID!): Service
  116. # Tasks
  117. tasks: [Task!]!
  118. task(id: ID!): Task
  119. # TaskStatuses
  120. taskStatuses: [TaskStatus!]!
  121. taskStatus(id: ID!): TaskStatus
  122. # Channels
  123. channels: [Channel!]!
  124. channel(id: ID!): Channel
  125. # Messages
  126. messages: [Message!]!
  127. message(id: ID!): Message
  128. }
  129. # Root Mutation type
  130. type Mutation {
  131. # Authentication
  132. login(email: String!, password: String!): AuthPayload!
  133. # Users
  134. createUser(input: NewUser!): User!
  135. updateUser(id: ID!, input: UpdateUserInput!): User!
  136. deleteUser(id: ID!): Boolean!
  137. # Notes
  138. createNote(input: NewNote!): Note!
  139. updateNote(id: ID!, input: UpdateNoteInput!): Note!
  140. deleteNote(id: ID!): Boolean!
  141. # Roles
  142. createRole(input: NewRole!): Role!
  143. updateRole(id: ID!, input: UpdateRoleInput!): Role!
  144. deleteRole(id: ID!): Boolean!
  145. # Permissions
  146. createPermission(input: NewPermission!): Permission!
  147. updatePermission(id: ID!, input: UpdatePermissionInput!): Permission!
  148. deletePermission(id: ID!): Boolean!
  149. # Services
  150. createService(input: NewService!): Service!
  151. updateService(id: ID!, input: UpdateServiceInput!): Service!
  152. deleteService(id: ID!): Boolean!
  153. # Tasks
  154. createTask(input: NewTask!): Task!
  155. updateTask(id: ID!, input: UpdateTaskInput!): Task!
  156. deleteTask(id: ID!): Boolean!
  157. # TaskStatuses
  158. createTaskStatus(input: NewTaskStatus!): TaskStatus!
  159. updateTaskStatus(id: ID!, input: UpdateTaskStatusInput!): TaskStatus!
  160. deleteTaskStatus(id: ID!): Boolean!
  161. # Channels
  162. createChannel(input: NewChannel!): Channel!
  163. updateChannel(id: ID!, input: UpdateChannelInput!): Channel!
  164. deleteChannel(id: ID!): Boolean!
  165. # Messages
  166. createMessage(input: NewMessage!): Message!
  167. updateMessage(id: ID!, input: UpdateMessageInput!): Message!
  168. deleteMessage(id: ID!): Boolean!
  169. }
  170. # Input types for mutations
  171. input NewUser {
  172. email: String!
  173. password: String!
  174. roles: [ID!]!
  175. }
  176. input UpdateUserInput {
  177. email: String
  178. password: String
  179. roles: [ID!]!
  180. }
  181. input NewNote {
  182. title: String!
  183. content: String!
  184. userId: ID!
  185. serviceId: ID!
  186. }
  187. input UpdateNoteInput {
  188. title: String
  189. content: String
  190. userId: ID
  191. serviceId: ID
  192. }
  193. input NewRole {
  194. name: String!
  195. description: String!
  196. permissions: [ID!]!
  197. }
  198. input UpdateRoleInput {
  199. name: String
  200. description: String
  201. permissions: [ID!]!
  202. }
  203. input NewPermission {
  204. code: String!
  205. description: String!
  206. }
  207. input UpdatePermissionInput {
  208. code: String
  209. description: String
  210. }
  211. input NewService {
  212. name: String!
  213. description: String
  214. createdById: ID!
  215. participants: [ID!]!
  216. }
  217. input UpdateServiceInput {
  218. name: String
  219. description: String
  220. createdById: ID
  221. participants: [ID!]!
  222. }
  223. input NewTask {
  224. title: String!
  225. content: String!
  226. createdById: ID!
  227. assigneeId: ID
  228. statusId: ID
  229. dueDate: String
  230. priority: String!
  231. }
  232. input UpdateTaskInput {
  233. title: String
  234. content: String
  235. createdById: ID
  236. assigneeId: ID
  237. statusId: ID
  238. dueDate: String
  239. priority: String
  240. }
  241. input NewTaskStatus {
  242. code: String!
  243. label: String!
  244. }
  245. input UpdateTaskStatusInput {
  246. code: String
  247. label: String
  248. }
  249. input NewChannel {
  250. participants: [ID!]!
  251. }
  252. input UpdateChannelInput {
  253. participants: [ID!]!
  254. }
  255. input NewMessage {
  256. conversationId: ID!
  257. senderId: ID!
  258. content: String!
  259. }
  260. input UpdateMessageInput {
  261. conversationId: ID
  262. senderId: ID
  263. content: String
  264. }
  265. # Subscriptions for real-time updates
  266. type Subscription {
  267. taskCreated: Task!
  268. taskUpdated: Task!
  269. taskDeleted: Task!
  270. messageAdded: Message!
  271. }