1
0

converters.go 7.2 KB

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