1
0

schema.graphqls 5.0 KB

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