|
@@ -1,25 +1,159 @@
|
|
|
package orm
|
|
|
|
|
|
import (
|
|
|
- "errors"
|
|
|
+ "net/http"
|
|
|
|
|
|
"github.com/jinzhu/gorm"
|
|
|
+ "gogs.carducci-dante.gov.it/karmen/core/renderer"
|
|
|
)
|
|
|
|
|
|
+var selectUniqueSubjectTeachers = `
|
|
|
+SELECT teachers.* FROM activities
|
|
|
+INNER JOIN teachers on teachers.id=activities.subject_id
|
|
|
+WHERE subject_id=?
|
|
|
+`
|
|
|
+
|
|
|
type Subject struct {
|
|
|
gorm.Model
|
|
|
Name string
|
|
|
DepartmentId uint
|
|
|
- Teachers []Teacher `gorm:"many2many:teacher_subjects;"`
|
|
|
+ Teachers []*Teacher
|
|
|
+ Activities []*Activity
|
|
|
+}
|
|
|
+
|
|
|
+type SubjectForUpdate struct {
|
|
|
+ Subject Subject
|
|
|
+}
|
|
|
+
|
|
|
+type SubjectForAdd struct{}
|
|
|
+
|
|
|
+func (s *Subject) GetID() uint { return s.ID }
|
|
|
+
|
|
|
+func GetSubject(args map[string]string) (interface{}, error) {
|
|
|
+ var subject Subject
|
|
|
+ if err := DB().First(&subject, args["id"]).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return &subject, nil
|
|
|
+}
|
|
|
+
|
|
|
+func GetSubjectAll(args map[string]string) (interface{}, error) {
|
|
|
+ var subject Subject
|
|
|
+
|
|
|
+ id := args["id"]
|
|
|
+
|
|
|
+ if err := DB().First(&subject, id).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := DB().Raw(selectUniqueSubjectTeachers, id).Scan(&subject.Teachers).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").Where("subject_id=?", id).Find(&subject.Activities).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return &subject, nil
|
|
|
+}
|
|
|
+
|
|
|
+func GetSubjects(args map[string]string) (interface{}, error) {
|
|
|
+ var subjects []*Subject
|
|
|
+ if err := DB().Order("name").Find(&subjects).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return subjects, nil
|
|
|
+}
|
|
|
+
|
|
|
+func GetSubjectsAll(args map[string]string) (interface{}, error) {
|
|
|
+ var subjects []*Subject
|
|
|
+ if err := DB().Order("name").Find(&subjects).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ for _, subject := range subjects {
|
|
|
+ subject.GetTeachers()
|
|
|
+ }
|
|
|
+
|
|
|
+ return subjects, nil
|
|
|
+}
|
|
|
+
|
|
|
+func SaveSubject(subject interface{}) (interface{}, error) {
|
|
|
+ if err := DB().Save(subject).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return subject, nil
|
|
|
+}
|
|
|
+
|
|
|
+func UpdateSubject(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
+ subject, err := GetSubject(args)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = renderer.Decode(subject, r)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ _, err = SaveSubject(subject)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ subject, err = GetSubject(args)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return subject.(*Subject), nil
|
|
|
}
|
|
|
|
|
|
-func (s *Subject) Create(db *gorm.DB, record map[string]interface{}) error {
|
|
|
- result := new(Subject)
|
|
|
- if name := record["name"]; name == nil {
|
|
|
- return errors.New("Error in updating subject: field name is empty")
|
|
|
- } else {
|
|
|
- result.Name = name.(string)
|
|
|
+func AddSubject(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
+ subject := new(Subject)
|
|
|
+ err := renderer.Decode(subject, r)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ subject, err = CreateSubject(subject)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
}
|
|
|
- db.Create(result)
|
|
|
- return nil
|
|
|
+ return subject, nil
|
|
|
+}
|
|
|
+
|
|
|
+func CreateSubject(subject *Subject) (*Subject, error) {
|
|
|
+ if err := DB().Create(subject).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return subject, nil
|
|
|
+}
|
|
|
+
|
|
|
+func DeleteSubject(args map[string]string, r *http.Request) (IDer, error) {
|
|
|
+ subject, err := GetSubject(args)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if err := DB().Unscoped().Delete(subject.(*Subject)).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return subject.(*Subject), nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Subject) GetTeachers() ([]*Teacher, error) {
|
|
|
+ if err := DB().Raw(selectUniqueSubjectTeachers, c.ID).Scan(&c.Teachers).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return c.Teachers, nil
|
|
|
+}
|
|
|
+
|
|
|
+func GetSubjectForUpdate(args map[string]string) (interface{}, error) {
|
|
|
+ var data SubjectForUpdate
|
|
|
+
|
|
|
+ id := args["id"]
|
|
|
+
|
|
|
+ if err := DB().First(&data.Subject, id).Error; err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return data, nil
|
|
|
+}
|
|
|
+
|
|
|
+func GetSubjectForAdd(args map[string]string) (interface{}, error) {
|
|
|
+ return nil, nil
|
|
|
}
|