class.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package orm
  2. import (
  3. "errors"
  4. "github.com/jinzhu/gorm"
  5. )
  6. var (
  7. selectClassActivities = `
  8. SELECT activities.id AS activity_id,teachers.name,teachers.surname,subjects.name AS subject,activities.hours FROM activities
  9. INNER JOIN teachers ON teachers.id=activities.teacher_id
  10. INNER JOIN subjects ON subjects.id=activities.subject_id
  11. WHERE class_id=? AND activities.deleted_at IS NULL `
  12. selectUniqueClassTeachers = `
  13. SELECT surname FROM (SELECT activities.id as activity_id,teachers.name,teachers.surname,subjects.name as subject,activities.hours from activities
  14. inner join teachers on teachers.id=activities.teacher_id
  15. inner join subjects on subjects.id=activities.subject_id
  16. where class_id=?) as activities GROUP BY surname`
  17. )
  18. type Class struct {
  19. gorm.Model
  20. Name string
  21. CoordinatorID uint `schema:"coordinator_id"`
  22. MinuterID uint `schema:"minuter_id"`
  23. Coordinator Teacher
  24. Minuter Teacher
  25. Teachers []*Teacher
  26. Students []*Student
  27. }
  28. func GetClasses() ([]*Class, error) {
  29. var classes []*Class
  30. if err := DB().Order("name").Find(&classes).Error; err != nil {
  31. return nil, err
  32. }
  33. return classes, nil
  34. }
  35. func (c *Class) GetTeachers() ([]*Teacher, error) {
  36. if err := DB().Raw(selectUniqueClassTeachers, c.ID).Scan(&c.Teachers).Error; err != nil {
  37. return nil, err
  38. }
  39. return c.Teachers, nil
  40. }
  41. func GetClassesAll() ([]*Class, error) {
  42. var classes []*Class
  43. if err := DB().Order("name").Find(&classes).Error; err != nil {
  44. return nil, err
  45. }
  46. for _, class := range classes {
  47. class.GetTeachers()
  48. }
  49. return classes, nil
  50. }
  51. func GetClass(id string) (*Class, error) {
  52. var class Class
  53. if err := DB().First(&class, id).Error; err != nil {
  54. return nil, err
  55. }
  56. DB().Raw(selectUniqueClassTeachers, id).Scan(&class.Teachers)
  57. if class.CoordinatorID != 0 {
  58. if !DB().First(&class.Coordinator, class.CoordinatorID).RecordNotFound() {
  59. if err := DB().First(&class.Coordinator, class.CoordinatorID).Error; err != nil {
  60. return nil, err
  61. }
  62. }
  63. }
  64. if class.MinuterID != 0 {
  65. if !DB().First(&class.Minuter, class.MinuterID).RecordNotFound() {
  66. if err := DB().First(&class.Minuter, class.MinuterID).Error; err != nil {
  67. return nil, err
  68. }
  69. }
  70. }
  71. return &class, nil
  72. }
  73. func (t *Class) Create(db *gorm.DB, record map[string]interface{}) error {
  74. result := new(Class)
  75. if name := record["name"]; name == nil {
  76. return errors.New("Error in creating class: field name is empty")
  77. } else {
  78. result.Name = name.(string)
  79. }
  80. db.Create(result)
  81. return nil
  82. }