|
@@ -0,0 +1,152 @@
|
|
|
|
+package orm
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "net/http"
|
|
|
|
+
|
|
|
|
+ "github.com/jinzhu/gorm"
|
|
|
|
+ "gogs.carducci-dante.gov.it/karmen/core/renderer"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+type Department struct {
|
|
|
|
+ gorm.Model
|
|
|
|
+ Name string
|
|
|
|
+ Subjects []*Subject
|
|
|
|
+ Teachers []*Teacher
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var (
|
|
|
|
+ selectUniqueDepartmentTeachers = `
|
|
|
|
+SELECT DISTINCT classes.* FROM activities
|
|
|
|
+INNER JOIN classes on classes.id=activities.class_id
|
|
|
|
+WHERE teacher_id=?`
|
|
|
|
+
|
|
|
|
+ selectUniqueDepartmentSubjects = `
|
|
|
|
+SELECT DISTINCT subjects.* FROM activities
|
|
|
|
+INNER JOIN subjects on subjects.id=activities.subject_id
|
|
|
|
+WHERE activities.teacher_id=?`
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+func (d *Department) GetID() uint { return d.ID }
|
|
|
|
+
|
|
|
|
+func GetDepartment(args map[string]string) (interface{}, error) {
|
|
|
|
+ var department Department
|
|
|
|
+ if err := DB().First(&department, args["id"]).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return &department, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func GetDepartmentAll(args map[string]string) (interface{}, error) {
|
|
|
|
+ var department Department
|
|
|
|
+
|
|
|
|
+ id := args["id"]
|
|
|
|
+
|
|
|
|
+ if err := DB().Where("id = ?", id).Find(&department).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := DB().Raw(selectUniqueDepartmentTeachers, id).Scan(&department.Teachers).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := DB().Raw(selectUniqueDepartmentSubjects, id).Scan(&department.Subjects).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return &department, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func GetDepartments(args map[string]string) (interface{}, error) {
|
|
|
|
+ var departments []*Department
|
|
|
|
+ if err := DB().Order("name").Find(&departments).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return departments, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func GetDepartmentsAll(args map[string]string) (interface{}, error) {
|
|
|
|
+ var departments []*Department
|
|
|
|
+ if err := DB().Order("name").Find(&departments).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ for _, department := range departments {
|
|
|
|
+ department.GetTeachers()
|
|
|
|
+ }
|
|
|
|
+ for _, department := range departments {
|
|
|
|
+ department.GetSubjects()
|
|
|
|
+ }
|
|
|
|
+ return departments, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func SaveDepartment(department interface{}) (interface{}, error) {
|
|
|
|
+ if err := DB().Omit("Teachers", "Subjects").Save(department).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return department, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func UpdateDepartment(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
|
+ department, err := GetDepartment(args)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ err = renderer.Decode(department, r)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ _, err = SaveDepartment(department)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ department, err = GetDepartment(args)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return department.(*Department), nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func AddDepartment(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
|
+ department := new(Department)
|
|
|
|
+ err := renderer.Decode(department, r)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ department, err = CreateDepartment(department)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return department, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func CreateDepartment(department *Department) (*Department, error) {
|
|
|
|
+ if err := DB().Create(department).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return department, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func DeleteDepartment(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
|
+ department, err := GetDepartment(args)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ if err := DB().Unscoped().Delete(department.(*Department)).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return department.(*Department), nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (t *Department) GetTeachers() ([]*Teacher, error) {
|
|
|
|
+ if err := DB().Raw(selectUniqueDepartmentTeachers, t.ID).Scan(&t.Teachers).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return t.Teachers, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (t *Department) GetSubjects() ([]*Subject, error) {
|
|
|
|
+ if err := DB().Raw(selectUniqueDepartmentSubjects, t.ID).Scan(&t.Subjects).Error; err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ return t.Subjects, nil
|
|
|
|
+}
|