schema.graphqls 5.4 KB

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