|
@@ -20,48 +20,37 @@ type Group struct {
|
|
|
TeacherIDs []uint `schema:"teacher_ids" gorm:"-"`
|
|
|
|
|
|
Teachers []*Teacher `gorm:"many2many:group_teachers"`
|
|
|
-}
|
|
|
|
|
|
-type GroupForAdd struct {
|
|
|
- AllTeachers []*Teacher
|
|
|
-}
|
|
|
-
|
|
|
-type GroupForUpdate struct {
|
|
|
- Group Group
|
|
|
-
|
|
|
- AllTeachers []*Teacher
|
|
|
-
|
|
|
- SelectedTeacher map[uint]string
|
|
|
+ AllTeachers []*Teacher
|
|
|
+ SelectedTeacher map[uint]string `gorm:"-"`
|
|
|
}
|
|
|
|
|
|
func (g *Group) GetID() uint { return g.ID }
|
|
|
func (g *Group) String() string { return g.Name }
|
|
|
|
|
|
-func GetGroups(args map[string]string) (interface{}, error) {
|
|
|
- return GetGroupsAll(args)
|
|
|
-}
|
|
|
-
|
|
|
-func GetGroupsAll(args map[string]string) (interface{}, error) {
|
|
|
- var groups []*Group
|
|
|
-
|
|
|
- if err := DB().Preload("Teachers").Order("name").Find(&groups).Error; err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
-
|
|
|
- for _, group := range groups {
|
|
|
- if group.Query != "" {
|
|
|
- err := group.updateTeachersAssociation()
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
+func (g *Group) Create(args map[string]string, r *http.Request) (interface{}, error) {
|
|
|
+ if r.Method == "GET" {
|
|
|
+ group := new(Group)
|
|
|
+ if err := DB().Find(&group.AllTeachers).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return group, nil
|
|
|
+ } else {
|
|
|
+ group := new(Group)
|
|
|
+ err := renderer.Decode(group, r)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ group, err = CreateGroup(group)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
}
|
|
|
|
|
|
+ return group, nil
|
|
|
}
|
|
|
-
|
|
|
- return groups, nil
|
|
|
}
|
|
|
|
|
|
-func GetGroupAll(args map[string]string) (interface{}, error) {
|
|
|
+func (g *Group) Read(args map[string]string, r *http.Request) (interface{}, error) {
|
|
|
var group Group
|
|
|
|
|
|
id := args["id"]
|
|
@@ -77,95 +66,86 @@ func GetGroupAll(args map[string]string) (interface{}, error) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return group, nil
|
|
|
+ return &group, nil
|
|
|
}
|
|
|
|
|
|
-func GetGroupForUpdate(args map[string]string) (interface{}, error) {
|
|
|
- var data GroupForUpdate
|
|
|
-
|
|
|
- id := args["id"]
|
|
|
-
|
|
|
- if err := DB().Preload("Teachers").First(&data.Group, id).Error; err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
+func (g *Group) ReadAll(args map[string]string, r *http.Request) (interface{}, error) {
|
|
|
+ var groups []*Group
|
|
|
|
|
|
- if err := DB().Find(&data.AllTeachers).Error; err != nil {
|
|
|
+ if err := DB().Preload("Teachers").Order("name").Find(&groups).Error; err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- data.SelectedTeacher = make(map[uint]string)
|
|
|
- for _, t := range data.Group.Teachers {
|
|
|
- data.SelectedTeacher[t.ID] = "selected"
|
|
|
- }
|
|
|
-
|
|
|
- return data, nil
|
|
|
-}
|
|
|
-
|
|
|
-func GetGroupForAdd(args map[string]string) (interface{}, error) {
|
|
|
- var data GroupForAdd
|
|
|
+ for _, group := range groups {
|
|
|
+ if group.Query != "" {
|
|
|
+ err := group.updateTeachersAssociation()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- if err := DB().Find(&data.AllTeachers).Error; err != nil {
|
|
|
- return nil, err
|
|
|
}
|
|
|
|
|
|
- return data, nil
|
|
|
+ return groups, nil
|
|
|
}
|
|
|
|
|
|
-func GetGroup(args map[string]string) (interface{}, error) {
|
|
|
- var group Group
|
|
|
+func (g *Group) Update(args map[string]string, r *http.Request) (interface{}, error) {
|
|
|
+ if r.Method == "GET" {
|
|
|
+ result, err := g.Read(args, r)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
|
|
|
- id := args["id"]
|
|
|
+ group := result.(*Group)
|
|
|
|
|
|
- if err := DB().Preload("Teachers").Where("id = ?", id).Find(&group).Error; err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
+ if err := DB().Find(&group.AllTeachers).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
|
|
|
- return &group, nil
|
|
|
+ group.SelectedTeacher = make(map[uint]string)
|
|
|
+ for _, t := range group.Teachers {
|
|
|
+ group.SelectedTeacher[t.ID] = "selected"
|
|
|
+ }
|
|
|
|
|
|
-}
|
|
|
+ return group, nil
|
|
|
+ } else {
|
|
|
+ group, err := g.Read(args, r)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = renderer.Decode(group, r)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
|
|
|
-func UpdateGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
- group, err := GetGroup(args)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- err = renderer.Decode(group, r)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
+ if err := DB().Where(group.(*Group).TeacherIDs).Find(&group.(*Group).Teachers).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
|
|
|
- if err := DB().Where(group.(*Group).TeacherIDs).Find(&group.(*Group).Teachers).Error; err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
+ teachers, err := group.(*Group).executeTeacherQuery()
|
|
|
|
|
|
- teachers, err := group.(*Group).executeTeacherQuery()
|
|
|
+ group.(*Group).Teachers = append(group.(*Group).Teachers, teachers...)
|
|
|
|
|
|
- group.(*Group).Teachers = append(group.(*Group).Teachers, teachers...)
|
|
|
+ _, err = SaveGroup(group)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
|
|
|
- _, err = SaveGroup(group)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- if err := DB().Model(group).Association("Teachers").Replace(group.(*Group).Teachers).Error; err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
+ if err := DB().Model(group).Association("Teachers").Replace(group.(*Group).Teachers).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
|
|
|
- group, err = GetGroup(args)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- return group.(*Group), nil
|
|
|
-}
|
|
|
+ group, err = g.Read(args, r)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
|
|
|
-func SaveGroup(group interface{}) (interface{}, error) {
|
|
|
- if err := DB().Save(group).Error; err != nil {
|
|
|
- return nil, err
|
|
|
+ return group.(*Group), nil
|
|
|
}
|
|
|
- return group, nil
|
|
|
}
|
|
|
|
|
|
-func DeleteGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
- group, err := GetGroup(args)
|
|
|
+func (g *Group) Delete(args map[string]string, r *http.Request) (interface{}, error) {
|
|
|
+ group, err := g.Read(args, r)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
@@ -175,14 +155,8 @@ func DeleteGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
return group.(*Group), nil
|
|
|
}
|
|
|
|
|
|
-func AddGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
- group := new(Group)
|
|
|
- err := renderer.Decode(group, r)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
- }
|
|
|
- group, err = CreateGroup(group)
|
|
|
- if err != nil {
|
|
|
+func SaveGroup(group interface{}) (interface{}, error) {
|
|
|
+ if err := DB().Save(group).Error; err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
return group, nil
|
|
@@ -212,10 +186,6 @@ func CreateGroup(group *Group) (*Group, error) {
|
|
|
return group, nil
|
|
|
}
|
|
|
|
|
|
-func (group *Group) RestAPIPath() string {
|
|
|
- return "groupes"
|
|
|
-}
|
|
|
-
|
|
|
func (group *Group) updateTeachersAssociation() error {
|
|
|
teachers, err := group.executeTeacherQuery()
|
|
|
if err != nil {
|