1
0

converters.go 7.1 KB

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