department.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package orm
  2. import (
  3. "net/http"
  4. "github.com/jinzhu/gorm"
  5. "gogs.carducci-dante.gov.it/karmen/core/renderer"
  6. )
  7. type Department struct {
  8. gorm.Model
  9. Name string
  10. Subjects []*Subject
  11. Teachers []*Teacher
  12. }
  13. var (
  14. selectUniqueDepartmentTeachers = `
  15. SELECT DISTINCT classes.* FROM activities
  16. INNER JOIN classes on classes.id=activities.class_id
  17. WHERE teacher_id=?`
  18. selectUniqueDepartmentSubjects = `
  19. SELECT DISTINCT subjects.* FROM activities
  20. INNER JOIN subjects on subjects.id=activities.subject_id
  21. WHERE activities.teacher_id=?`
  22. )
  23. func (d *Department) GetID() uint { return d.ID }
  24. func GetDepartment(args map[string]string) (interface{}, error) {
  25. var department Department
  26. if err := DB().First(&department, args["id"]).Error; err != nil {
  27. return nil, err
  28. }
  29. return &department, nil
  30. }
  31. func GetDepartmentAll(args map[string]string) (interface{}, error) {
  32. var department Department
  33. id := args["id"]
  34. if err := DB().Where("id = ?", id).Find(&department).Error; err != nil {
  35. return nil, err
  36. }
  37. if err := DB().Raw(selectUniqueDepartmentTeachers, id).Scan(&department.Teachers).Error; err != nil {
  38. return nil, err
  39. }
  40. if err := DB().Raw(selectUniqueDepartmentSubjects, id).Scan(&department.Subjects).Error; err != nil {
  41. return nil, err
  42. }
  43. return &department, nil
  44. }
  45. func GetDepartments(args map[string]string) (interface{}, error) {
  46. var departments []*Department
  47. if err := DB().Order("name").Find(&departments).Error; err != nil {
  48. return nil, err
  49. }
  50. return departments, nil
  51. }
  52. func GetDepartmentsAll(args map[string]string) (interface{}, error) {
  53. var departments []*Department
  54. if err := DB().Order("name").Find(&departments).Error; err != nil {
  55. return nil, err
  56. }
  57. for _, department := range departments {
  58. department.GetTeachers()
  59. }
  60. for _, department := range departments {
  61. department.GetSubjects()
  62. }
  63. return departments, nil
  64. }
  65. func SaveDepartment(department interface{}) (interface{}, error) {
  66. if err := DB().Omit("Teachers", "Subjects").Save(department).Error; err != nil {
  67. return nil, err
  68. }
  69. return department, nil
  70. }
  71. func UpdateDepartment(args map[string]string, r *http.Request) (IDer, error) {
  72. department, err := GetDepartment(args)
  73. if err != nil {
  74. return nil, err
  75. }
  76. err = renderer.Decode(department, r)
  77. if err != nil {
  78. return nil, err
  79. }
  80. _, err = SaveDepartment(department)
  81. if err != nil {
  82. return nil, err
  83. }
  84. department, err = GetDepartment(args)
  85. if err != nil {
  86. return nil, err
  87. }
  88. return department.(*Department), nil
  89. }
  90. func AddDepartment(args map[string]string, r *http.Request) (IDer, error) {
  91. department := new(Department)
  92. err := renderer.Decode(department, r)
  93. if err != nil {
  94. return nil, err
  95. }
  96. department, err = CreateDepartment(department)
  97. if err != nil {
  98. return nil, err
  99. }
  100. return department, nil
  101. }
  102. func CreateDepartment(department *Department) (*Department, error) {
  103. if err := DB().Create(department).Error; err != nil {
  104. return nil, err
  105. }
  106. return department, nil
  107. }
  108. func DeleteDepartment(args map[string]string, r *http.Request) (IDer, error) {
  109. department, err := GetDepartment(args)
  110. if err != nil {
  111. return nil, err
  112. }
  113. if err := DB().Unscoped().Delete(department.(*Department)).Error; err != nil {
  114. return nil, err
  115. }
  116. return department.(*Department), nil
  117. }
  118. func (t *Department) GetTeachers() ([]*Teacher, error) {
  119. if err := DB().Raw(selectUniqueDepartmentTeachers, t.ID).Scan(&t.Teachers).Error; err != nil {
  120. return nil, err
  121. }
  122. return t.Teachers, nil
  123. }
  124. func (t *Department) GetSubjects() ([]*Subject, error) {
  125. if err := DB().Raw(selectUniqueDepartmentSubjects, t.ID).Scan(&t.Subjects).Error; err != nil {
  126. return nil, err
  127. }
  128. return t.Subjects, nil
  129. }