schema.graphqls 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  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. createdAt: String!
  89. updatedAt: String!
  90. }
  91. # Root Query type
  92. type Query {
  93. # Users
  94. users: [User!]!
  95. user(id: ID!): User
  96. # Notes
  97. notes: [Note!]!
  98. note(id: ID!): Note
  99. # Roles
  100. roles: [Role!]!
  101. role(id: ID!): Role
  102. # Permissions
  103. permissions: [Permission!]!
  104. permission(id: ID!): Permission
  105. # Services
  106. services: [Service!]!
  107. service(id: ID!): Service
  108. # Tasks
  109. tasks: [Task!]!
  110. task(id: ID!): Task
  111. # TaskStatuses
  112. taskStatuses: [TaskStatus!]!
  113. taskStatus(id: ID!): TaskStatus
  114. # Messages
  115. messages: [Message!]!
  116. message(id: ID!): Message
  117. }
  118. # Root Mutation type
  119. type Mutation {
  120. # Authentication
  121. login(email: String!, password: String!): AuthPayload!
  122. # Users
  123. createUser(input: NewUser!): User!
  124. updateUser(id: ID!, input: UpdateUserInput!): User!
  125. deleteUser(id: ID!): Boolean!
  126. # Notes
  127. createNote(input: NewNote!): Note!
  128. updateNote(id: ID!, input: UpdateNoteInput!): Note!
  129. deleteNote(id: ID!): Boolean!
  130. # Roles
  131. createRole(input: NewRole!): Role!
  132. updateRole(id: ID!, input: UpdateRoleInput!): Role!
  133. deleteRole(id: ID!): Boolean!
  134. # Permissions
  135. createPermission(input: NewPermission!): Permission!
  136. updatePermission(id: ID!, input: UpdatePermissionInput!): Permission!
  137. deletePermission(id: ID!): Boolean!
  138. # Services
  139. createService(input: NewService!): Service!
  140. updateService(id: ID!, input: UpdateServiceInput!): Service!
  141. deleteService(id: ID!): Boolean!
  142. # Tasks
  143. createTask(input: NewTask!): Task!
  144. updateTask(id: ID!, input: UpdateTaskInput!): Task!
  145. deleteTask(id: ID!): Boolean!
  146. # TaskStatuses
  147. createTaskStatus(input: NewTaskStatus!): TaskStatus!
  148. updateTaskStatus(id: ID!, input: UpdateTaskStatusInput!): TaskStatus!
  149. deleteTaskStatus(id: ID!): Boolean!
  150. # Messages
  151. createMessage(input: NewMessage!): Message!
  152. updateMessage(id: ID!, input: UpdateMessageInput!): Message!
  153. deleteMessage(id: ID!): Boolean!
  154. }
  155. # Input types for mutations
  156. input NewUser {
  157. email: String!
  158. password: String!
  159. roles: [ID!]!
  160. }
  161. input UpdateUserInput {
  162. email: String
  163. password: String
  164. roles: [ID!]!
  165. }
  166. input NewNote {
  167. title: String!
  168. content: String!
  169. userId: ID!
  170. serviceId: ID!
  171. }
  172. input UpdateNoteInput {
  173. title: String
  174. content: String
  175. userId: ID
  176. serviceId: ID
  177. }
  178. input NewRole {
  179. name: String!
  180. description: String!
  181. permissions: [ID!]!
  182. }
  183. input UpdateRoleInput {
  184. name: String
  185. description: String
  186. permissions: [ID!]!
  187. }
  188. input NewPermission {
  189. code: String!
  190. description: String!
  191. }
  192. input UpdatePermissionInput {
  193. code: String
  194. description: String
  195. }
  196. input NewService {
  197. name: String!
  198. description: String
  199. createdById: ID!
  200. participants: [ID!]!
  201. }
  202. input UpdateServiceInput {
  203. name: String
  204. description: String
  205. createdById: ID
  206. participants: [ID!]!
  207. }
  208. input NewTask {
  209. title: String!
  210. content: String!
  211. createdById: ID!
  212. assigneeId: ID
  213. statusId: ID
  214. dueDate: String
  215. priority: String!
  216. }
  217. input UpdateTaskInput {
  218. title: String
  219. content: String
  220. createdById: ID
  221. assigneeId: ID
  222. statusId: ID
  223. dueDate: String
  224. priority: String
  225. }
  226. input NewTaskStatus {
  227. code: String!
  228. label: String!
  229. }
  230. input UpdateTaskStatusInput {
  231. code: String
  232. label: String
  233. }
  234. input NewMessage {
  235. content: String!
  236. receivers: [ID!]!
  237. }
  238. input UpdateMessageInput {
  239. content: String
  240. receivers: [ID!]
  241. }
  242. # Subscriptions for real-time updates
  243. type Subscription {
  244. taskCreated: Task!
  245. taskUpdated: Task!
  246. taskDeleted: Task!
  247. messageAdded: Message!
  248. }