|
@@ -10,27 +10,40 @@ import (
|
|
type Student struct {
|
|
type Student struct {
|
|
Credential
|
|
Credential
|
|
|
|
|
|
- // Handicap bool `schema:"Handicap" sql:"default: false"`
|
|
|
|
- // DSA bool `schema:"DSA" sql:"default: false"`
|
|
|
|
- // BES bool `schema:"BES" sql:"default: false"`
|
|
|
|
-
|
|
|
|
Handicap bool
|
|
Handicap bool
|
|
DSA bool
|
|
DSA bool
|
|
BES bool
|
|
BES bool
|
|
|
|
|
|
|
|
+ FatherLastname string
|
|
|
|
+ FatherFirstname string
|
|
|
|
+ FatherEmail string
|
|
|
|
+
|
|
|
|
+ MotherLastname string
|
|
|
|
+ MotherFirstname string
|
|
|
|
+ MotherEmail string
|
|
|
|
+
|
|
|
|
+ LegalGuardianLastname string
|
|
|
|
+ LegalGuardianFirstname string
|
|
|
|
+ LegalGuardianEmail string
|
|
|
|
+
|
|
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 (
|
|
@@ -53,7 +66,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)
|
|
@@ -75,7 +90,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
|
|
}
|
|
}
|
|
|
|
|
|
@@ -89,7 +104,7 @@ func (s *Student) Read(args map[string]string, r *http.Request) (interface{}, er
|
|
func (s *Student) ReadAll(args map[string]string, r *http.Request) (interface{}, error) {
|
|
func (s *Student) ReadAll(args map[string]string, r *http.Request) (interface{}, error) {
|
|
var students []*Student
|
|
var students []*Student
|
|
|
|
|
|
- if err := DB().Preload("Class").Preload("Class.Coordinator").Preload("Tutor").Order("surname,name").Find(&students).Error; err != nil {
|
|
|
|
|
|
+ if err := DB().Preload("Operators").Preload("Class").Preload("Class.Coordinator").Preload("Tutor").Order("surname,name").Find(&students).Error; err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
for _, student := range students {
|
|
for _, student := range students {
|
|
@@ -119,12 +134,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)
|
|
@@ -141,10 +165,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
|
|
@@ -165,7 +203,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
|
|
}
|
|
}
|
|
@@ -173,6 +211,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
|
|
}
|
|
}
|