1
0

converters.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. package graph
  2. import (
  3. "strconv"
  4. "time"
  5. "gogs.dmsc.dev/arp/graph/model"
  6. "gogs.dmsc.dev/arp/models"
  7. )
  8. // ID helpers for converting between string IDs (GraphQL) and uint IDs (database)
  9. func toID(s string) (uint, error) {
  10. id, err := strconv.ParseUint(s, 10, 32)
  11. return uint(id), err
  12. }
  13. // convertUser converts models.User to model.User
  14. func convertUser(u models.User) *model.User {
  15. roles := make([]*model.Role, len(u.Roles))
  16. for i, r := range u.Roles {
  17. roles[i] = &model.Role{
  18. ID: strconv.FormatUint(uint64(r.ID), 10),
  19. Name: r.Name,
  20. Description: r.Description,
  21. Permissions: convertPermissions(r.Permissions),
  22. }
  23. }
  24. return &model.User{
  25. ID: strconv.FormatUint(uint64(u.ID), 10),
  26. Email: u.Email,
  27. Password: u.Password,
  28. Roles: roles,
  29. CreatedAt: u.CreatedAt.String(),
  30. UpdatedAt: u.UpdatedAt.String(),
  31. }
  32. }
  33. // convertUsers converts []models.User to []*model.User
  34. func convertUsers(users []models.User) []*model.User {
  35. result := make([]*model.User, len(users))
  36. for i, u := range users {
  37. result[i] = convertUser(u)
  38. }
  39. return result
  40. }
  41. // convertNote converts models.Note to model.Note
  42. func convertNote(n models.Note) *model.Note {
  43. userID := strconv.FormatUint(uint64(n.UserID), 10)
  44. serviceID := strconv.FormatUint(uint64(n.ServiceID), 10)
  45. return &model.Note{
  46. ID: strconv.FormatUint(uint64(n.ID), 10),
  47. Title: n.Title,
  48. Content: n.Content,
  49. UserID: userID,
  50. ServiceID: serviceID,
  51. CreatedAt: n.CreatedAt.String(),
  52. UpdatedAt: n.UpdatedAt.String(),
  53. }
  54. }
  55. // convertNotes converts []models.Note to []*model.Note
  56. func convertNotes(notes []models.Note) []*model.Note {
  57. result := make([]*model.Note, len(notes))
  58. for i, n := range notes {
  59. result[i] = convertNote(n)
  60. }
  61. return result
  62. }
  63. // convertRole converts models.Role to model.Role
  64. func convertRole(r models.Role) *model.Role {
  65. permissions := make([]*model.Permission, len(r.Permissions))
  66. for i, p := range r.Permissions {
  67. permissions[i] = &model.Permission{
  68. ID: strconv.FormatUint(uint64(p.ID), 10),
  69. Code: p.Code,
  70. Description: p.Description,
  71. }
  72. }
  73. return &model.Role{
  74. ID: strconv.FormatUint(uint64(r.ID), 10),
  75. Name: r.Name,
  76. Description: r.Description,
  77. Permissions: permissions,
  78. }
  79. }
  80. // convertRoles converts []models.Role to []*model.Role
  81. func convertRoles(roles []models.Role) []*model.Role {
  82. result := make([]*model.Role, len(roles))
  83. for i, r := range roles {
  84. result[i] = convertRole(r)
  85. }
  86. return result
  87. }
  88. // convertPermission converts models.Permission to model.Permission
  89. func convertPermission(p models.Permission) *model.Permission {
  90. return &model.Permission{
  91. ID: strconv.FormatUint(uint64(p.ID), 10),
  92. Code: p.Code,
  93. Description: p.Description,
  94. }
  95. }
  96. // convertPermissions converts []models.Permission to []*model.Permission
  97. func convertPermissions(perms []models.Permission) []*model.Permission {
  98. result := make([]*model.Permission, len(perms))
  99. for i, p := range perms {
  100. result[i] = convertPermission(p)
  101. }
  102. return result
  103. }
  104. // convertService converts models.Service to model.Service
  105. func convertService(s models.Service) *model.Service {
  106. var desc *string
  107. if s.Description != "" {
  108. desc = &s.Description
  109. }
  110. createdByID := strconv.FormatUint(uint64(s.CreatedByID), 10)
  111. participants := make([]*model.User, len(s.Participants))
  112. for i, u := range s.Participants {
  113. participants[i] = convertUser(u)
  114. }
  115. tasks := make([]*model.Task, len(s.Tasks))
  116. for i, t := range s.Tasks {
  117. tasks[i] = convertTask(t)
  118. }
  119. return &model.Service{
  120. ID: strconv.FormatUint(uint64(s.ID), 10),
  121. Name: s.Name,
  122. Description: desc,
  123. CreatedByID: createdByID,
  124. CreatedBy: convertUser(s.CreatedBy),
  125. Participants: participants,
  126. Tasks: tasks,
  127. CreatedAt: s.CreatedAt.String(),
  128. UpdatedAt: s.UpdatedAt.String(),
  129. }
  130. }
  131. // convertServices converts []models.Service to []*model.Service
  132. func convertServices(services []models.Service) []*model.Service {
  133. result := make([]*model.Service, len(services))
  134. for i, s := range services {
  135. result[i] = convertService(s)
  136. }
  137. return result
  138. }
  139. // convertTaskStatus converts models.TaskStatus to model.TaskStatus
  140. func convertTaskStatus(ts models.TaskStatus) *model.TaskStatus {
  141. tasks := make([]*model.Task, len(ts.Tasks))
  142. for i, t := range ts.Tasks {
  143. tasks[i] = convertTask(t)
  144. }
  145. return &model.TaskStatus{
  146. ID: strconv.FormatUint(uint64(ts.ID), 10),
  147. Code: ts.Code,
  148. Label: ts.Label,
  149. Tasks: tasks,
  150. CreatedAt: ts.CreatedAt.String(),
  151. UpdatedAt: ts.UpdatedAt.String(),
  152. }
  153. }
  154. // convertTaskStatuses converts []models.TaskStatus to []*model.TaskStatus
  155. func convertTaskStatuses(statuses []models.TaskStatus) []*model.TaskStatus {
  156. result := make([]*model.TaskStatus, len(statuses))
  157. for i, ts := range statuses {
  158. result[i] = convertTaskStatus(ts)
  159. }
  160. return result
  161. }
  162. // convertTask converts models.Task to model.Task
  163. func convertTask(t models.Task) *model.Task {
  164. var dueDate *string
  165. if t.DueDate != nil {
  166. formatted := t.DueDate.Format(time.RFC3339)
  167. dueDate = &formatted
  168. }
  169. var statusID *string
  170. var status *model.TaskStatus
  171. if t.Status.ID > 0 {
  172. sid := strconv.FormatUint(uint64(t.StatusID), 10)
  173. statusID = &sid
  174. status = convertTaskStatus(t.Status)
  175. }
  176. var assigneeID *string
  177. var assignee *model.User
  178. if t.AssigneeID != nil && t.Assignee != nil {
  179. aid := strconv.FormatUint(uint64(*t.AssigneeID), 10)
  180. assigneeID = &aid
  181. assignee = convertUser(*t.Assignee)
  182. }
  183. return &model.Task{
  184. ID: strconv.FormatUint(uint64(t.ID), 10),
  185. Title: t.Title,
  186. Content: t.Content,
  187. CreatedByID: strconv.FormatUint(uint64(t.CreatedByID), 10),
  188. CreatedBy: convertUser(t.CreatedBy),
  189. UpdatedByID: strconv.FormatUint(uint64(t.UpdatedByID), 10),
  190. UpdatedBy: convertUser(t.UpdatedBy),
  191. AssigneeID: assigneeID,
  192. Assignee: assignee,
  193. StatusID: statusID,
  194. Status: status,
  195. DueDate: dueDate,
  196. Priority: t.Priority,
  197. CreatedAt: t.CreatedAt.String(),
  198. UpdatedAt: t.UpdatedAt.String(),
  199. }
  200. }
  201. // convertTasks converts []models.Task to []*model.Task
  202. func convertTasks(tasks []models.Task) []*model.Task {
  203. result := make([]*model.Task, len(tasks))
  204. for i, t := range tasks {
  205. result[i] = convertTask(t)
  206. }
  207. return result
  208. }
  209. // convertChannel converts models.Channel to model.Channel
  210. func convertChannel(c models.Channel) *model.Channel {
  211. participants := make([]*model.User, len(c.Participants))
  212. for i, u := range c.Participants {
  213. participants[i] = convertUser(u)
  214. }
  215. return &model.Channel{
  216. ID: strconv.FormatUint(uint64(c.ID), 10),
  217. Participants: participants,
  218. CreatedAt: c.CreatedAt.String(),
  219. UpdatedAt: c.UpdatedAt.String(),
  220. }
  221. }
  222. // convertChannels converts []models.Channel to []*model.Channel
  223. func convertChannels(channels []models.Channel) []*model.Channel {
  224. result := make([]*model.Channel, len(channels))
  225. for i, c := range channels {
  226. result[i] = convertChannel(c)
  227. }
  228. return result
  229. }
  230. // convertMessage converts models.Message to model.Message
  231. func convertMessage(m models.Message) *model.Message {
  232. return &model.Message{
  233. ID: strconv.FormatUint(uint64(m.ID), 10),
  234. ConversationID: strconv.FormatUint(uint64(m.ConversationID), 10),
  235. SenderID: strconv.FormatUint(uint64(m.SenderID), 10),
  236. Sender: convertUser(m.Sender),
  237. Content: m.Content,
  238. SentAt: m.SentAt.String(),
  239. CreatedAt: m.CreatedAt.String(),
  240. UpdatedAt: m.UpdatedAt.String(),
  241. }
  242. }
  243. // convertMessages converts []models.Message to []*model.Message
  244. func convertMessages(messages []models.Message) []*model.Message {
  245. result := make([]*model.Message, len(messages))
  246. for i, m := range messages {
  247. result[i] = convertMessage(m)
  248. }
  249. return result
  250. }