|
@@ -1,20 +1,40 @@
|
|
package orm
|
|
package orm
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "fmt"
|
|
"net/http"
|
|
"net/http"
|
|
|
|
|
|
"github.com/jinzhu/gorm"
|
|
"github.com/jinzhu/gorm"
|
|
|
|
+ "gogs.carducci-dante.gov.it/karmen/core/renderer"
|
|
)
|
|
)
|
|
|
|
|
|
type Group struct {
|
|
type Group struct {
|
|
gorm.Model
|
|
gorm.Model
|
|
|
|
|
|
Name string
|
|
Name string
|
|
|
|
+
|
|
|
|
+ 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
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (g *Group) GetID() uint { return g.ID }
|
|
|
|
+
|
|
func GetGroupsAll(args map[string]string) (interface{}, error) {
|
|
func GetGroupsAll(args map[string]string) (interface{}, error) {
|
|
var groups []*Group
|
|
var groups []*Group
|
|
- if err := DB().Order("name").Find(&groups).Error; err != nil {
|
|
|
|
|
|
+ if err := DB().Debug().Preload("Teachers").Order("name").Find(&groups).Error; err != nil {
|
|
return nil, err
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
|
|
@@ -22,15 +42,46 @@ func GetGroupsAll(args map[string]string) (interface{}, error) {
|
|
}
|
|
}
|
|
|
|
|
|
func GetGroupAll(args map[string]string) (interface{}, error) {
|
|
func GetGroupAll(args map[string]string) (interface{}, error) {
|
|
- return nil, nil
|
|
|
|
|
|
+ var group Group
|
|
|
|
+
|
|
|
|
+ id := args["id"]
|
|
|
|
+
|
|
|
|
+ if err := DB().Preload("Teachers").Where("id = ?", id).Find(&group).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return group, nil
|
|
}
|
|
}
|
|
|
|
|
|
func GetGroupForUpdate(args map[string]string) (interface{}, error) {
|
|
func GetGroupForUpdate(args map[string]string) (interface{}, error) {
|
|
- return nil, nil
|
|
|
|
|
|
+ var data GroupForUpdate
|
|
|
|
+
|
|
|
|
+ id := args["id"]
|
|
|
|
+
|
|
|
|
+ if err := DB().Preload("Teachers").First(&data.Group, id).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := DB().Find(&data.AllTeachers).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) {
|
|
func GetGroupForAdd(args map[string]string) (interface{}, error) {
|
|
- return nil, nil
|
|
|
|
|
|
+ var data GroupForAdd
|
|
|
|
+
|
|
|
|
+ if err := DB().Find(&data.AllTeachers).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return data, nil
|
|
}
|
|
}
|
|
|
|
|
|
func GetGroup(args map[string]string) (interface{}, error) {
|
|
func GetGroup(args map[string]string) (interface{}, error) {
|
|
@@ -38,7 +89,24 @@ func GetGroup(args map[string]string) (interface{}, error) {
|
|
}
|
|
}
|
|
|
|
|
|
func UpdateGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
func UpdateGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
- return nil, nil
|
|
|
|
|
|
+ group, err := GetGroup(args)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ err = renderer.Decode(group, r)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ _, err = SaveGroup(group)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ group, err = GetGroup(args)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return group.(*Group), nil
|
|
}
|
|
}
|
|
|
|
|
|
func DeleteGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
func DeleteGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
@@ -46,5 +114,33 @@ func DeleteGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
}
|
|
}
|
|
|
|
|
|
func AddGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
func AddGroup(args map[string]string, r *http.Request) (IDer, error) {
|
|
- return nil, nil
|
|
|
|
|
|
+ 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
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func CreateGroup(group *Group) (*Group, error) {
|
|
|
|
+ var groups []*Group
|
|
|
|
+ if err := DB().Where("name=?", group.Name).Find(&groups).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ if len(groups) > 0 {
|
|
|
|
+ return nil, fmt.Errorf("Group %s already exists!", group.Name)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := DB().Where(group.TeacherIDs).Find(&group.Teachers).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := DB().Create(group).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return group, nil
|
|
}
|
|
}
|