|
@@ -33,16 +33,21 @@ type Student struct {
|
|
TutorID uint `schema:"tutor_id"`
|
|
TutorID uint `schema:"tutor_id"`
|
|
ClassID uint `schema:"class_id"`
|
|
ClassID uint `schema:"class_id"`
|
|
|
|
|
|
|
|
+ OperatorIDs []uint `schema:"operator_ids" gorm:"-"`
|
|
|
|
+ Operators []*Operator `gorm:"many2many:student_operators"`
|
|
|
|
+
|
|
Class *Class
|
|
Class *Class
|
|
Tutor *Teacher
|
|
Tutor *Teacher
|
|
Teachers []*Teacher
|
|
Teachers []*Teacher
|
|
Activities []*Activity
|
|
Activities []*Activity
|
|
|
|
|
|
- AllClasses []*Class `gorm:"-"`
|
|
|
|
- AllTeachers []*Teacher `gorm:"-"`
|
|
|
|
|
|
+ AllClasses []*Class `gorm:"-"`
|
|
|
|
+ AllTeachers []*Teacher `gorm:"-"`
|
|
|
|
+ AllOperators []*Operator `gorm:"-"`
|
|
|
|
|
|
- SelectedClass map[uint]string `gorm:"-"`
|
|
|
|
- SelectedTeacher map[uint]string `gorm:"-"`
|
|
|
|
|
|
+ SelectedClass map[uint]string `gorm:"-"`
|
|
|
|
+ SelectedTeacher map[uint]string `gorm:"-"`
|
|
|
|
+ SelectedOperator map[uint]string `gorm:"-"`
|
|
}
|
|
}
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -65,7 +70,9 @@ func (s *Student) Create(args map[string]string, r *http.Request) (interface{},
|
|
if err := DB().Find(&student.AllClasses).Error; err != nil {
|
|
if err := DB().Find(&student.AllClasses).Error; err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ if err := DB().Find(&student.AllOperators).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
return student, nil
|
|
return student, nil
|
|
} else {
|
|
} else {
|
|
student := new(Student)
|
|
student := new(Student)
|
|
@@ -87,7 +94,7 @@ func (s *Student) Read(args map[string]string, r *http.Request) (interface{}, er
|
|
|
|
|
|
id := args["id"]
|
|
id := args["id"]
|
|
|
|
|
|
- if err := DB().Preload("Class").Preload("Class.Coordinator").Where("id = ?", id).Find(&student).Error; err != nil {
|
|
|
|
|
|
+ if err := DB().Preload("Class").Preload("Class.Coordinator").Preload("Operators").Where("id = ?", id).Find(&student).Error; err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
|
|
@@ -131,12 +138,21 @@ func (s *Student) Update(args map[string]string, r *http.Request) (interface{},
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if err := DB().Find(&student.AllOperators).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
student.SelectedTeacher = make(map[uint]string)
|
|
student.SelectedTeacher = make(map[uint]string)
|
|
student.SelectedTeacher[student.TutorID] = "selected"
|
|
student.SelectedTeacher[student.TutorID] = "selected"
|
|
|
|
|
|
student.SelectedClass = make(map[uint]string)
|
|
student.SelectedClass = make(map[uint]string)
|
|
student.SelectedClass[student.ClassID] = "selected"
|
|
student.SelectedClass[student.ClassID] = "selected"
|
|
|
|
|
|
|
|
+ student.SelectedOperator = make(map[uint]string)
|
|
|
|
+ for _, o := range student.Operators {
|
|
|
|
+ student.SelectedOperator[o.ID] = "selected"
|
|
|
|
+ }
|
|
|
|
+
|
|
return student, nil
|
|
return student, nil
|
|
} else {
|
|
} else {
|
|
student, err := s.Read(args, r)
|
|
student, err := s.Read(args, r)
|
|
@@ -153,10 +169,24 @@ func (s *Student) Update(args map[string]string, r *http.Request) (interface{},
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
- _, err = SaveStudent(student)
|
|
|
|
|
|
+ if err := DB().
|
|
|
|
+ Where([]uint(student.(*Student).OperatorIDs)).
|
|
|
|
+ Find(&student.(*Student).Operators).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ _, err = SaveStudent(student.(*Student))
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if err := DB().
|
|
|
|
+ Model(student).
|
|
|
|
+ Association("Operators").
|
|
|
|
+ Replace(student.(*Student).Operators).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
student, err = s.Read(args, r)
|
|
student, err = s.Read(args, r)
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
@@ -177,7 +207,7 @@ func (s *Student) Delete(args map[string]string, r *http.Request) (interface{},
|
|
return student.(*Student), nil
|
|
return student.(*Student), nil
|
|
}
|
|
}
|
|
|
|
|
|
-func SaveStudent(student interface{}) (interface{}, error) {
|
|
|
|
|
|
+func SaveStudent(student *Student) (interface{}, error) {
|
|
if err := DB().Omit("Class", "Tutor", "Teachers", "Activities").Save(student).Error; err != nil {
|
|
if err := DB().Omit("Class", "Tutor", "Teachers", "Activities").Save(student).Error; err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
@@ -185,6 +215,9 @@ func SaveStudent(student interface{}) (interface{}, error) {
|
|
}
|
|
}
|
|
|
|
|
|
func CreateStudent(student *Student) (*Student, error) {
|
|
func CreateStudent(student *Student) (*Student, error) {
|
|
|
|
+ if err := DB().Where([]uint(student.OperatorIDs)).Find(&student.Operators).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
if err := DB().Create(student).Error; err != nil {
|
|
if err := DB().Create(student).Error; err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|