package orm import ( "net/http" "github.com/jinzhu/gorm" "gogs.carducci-dante.gov.it/karmen/core/renderer" ) type Activity struct { gorm.Model // Name string Class *Class Teacher *Teacher Subject *Subject ClassID uint `schema:"class_id"` TeacherID uint `schema:"teacher_id"` SubjectID uint `schema:"subject_id"` Hours int prevTeacherID uint } type ActivityForUpdate struct { Activity Activity AllClasses []*Class AllSubjects []*Subject AllTeachers []*Teacher SelectedTeacher map[uint]string SelectedSubject map[uint]string SelectedClass map[uint]string } type ActivityForAdd struct { AllClasses []*Class AllSubjects []*Subject AllTeachers []*Teacher } func (a *Activity) GetID() uint { return a.ID } func GetActivity(args map[string]string) (interface{}, error) { var activity Activity if err := DB().First(&activity, args["id"]).Error; err != nil { return nil, err } return &activity, nil } func GetActivityAll(args map[string]string) (interface{}, error) { var activity Activity id := args["id"] if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").First(&activity, id).Error; err != nil { return nil, err } return &activity, nil } func GetActivityForUpdate(args map[string]string) (interface{}, error) { var data ActivityForUpdate id := args["id"] if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").First(&data.Activity, id).Error; err != nil { return nil, err } if err := DB().Find(&data.AllClasses).Error; err != nil { return nil, err } if err := DB().Find(&data.AllSubjects).Error; err != nil { return nil, err } if err := DB().Find(&data.AllTeachers).Error; err != nil { return nil, err } data.SelectedTeacher = make(map[uint]string) data.SelectedTeacher[data.Activity.TeacherID] = "selected" data.SelectedClass = make(map[uint]string) data.SelectedClass[data.Activity.ClassID] = "selected" data.SelectedSubject = make(map[uint]string) data.SelectedSubject[data.Activity.SubjectID] = "selected" return data, nil } func GetActivityForAdd(args map[string]string) (interface{}, error) { var data ActivityForAdd if err := DB().Find(&data.AllClasses).Error; err != nil { return nil, err } if err := DB().Find(&data.AllSubjects).Error; err != nil { return nil, err } if err := DB().Find(&data.AllTeachers).Error; err != nil { return nil, err } return data, nil } func GetActivitiesAll(args map[string]string) (interface{}, error) { var activities []*Activity if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").Order("name").Find(&activities).Error; err != nil { return nil, err } return activities, nil } func GetActivities(args map[string]string) (interface{}, error) { var activities []*Activity if err := DB().Order("surname,name").Find(&activities).Error; err != nil { return nil, err } return activities, nil } func SaveActivity(activity interface{}) (interface{}, error) { if err := DB().Save(activity).Error; err != nil { return nil, err } return activity, nil } func UpdateActivity(args map[string]string, r *http.Request) (IDer, error) { activity, err := GetActivity(args) if err != nil { return nil, err } err = renderer.Decode(activity, r) if err != nil { return nil, err } _, err = SaveActivity(activity) if err != nil { return nil, err } activity, err = GetActivity(args) if err != nil { return nil, err } return activity.(*Activity), nil } func AddActivity(args map[string]string, r *http.Request) (IDer, error) { activity := new(Activity) err := renderer.Decode(activity, r) if err != nil { return nil, err } activity, err = CreateActivity(activity) if err != nil { return nil, err } return activity, nil } func CreateActivity(activity *Activity) (*Activity, error) { if err := DB().Create(activity).Error; err != nil { return nil, err } return activity, nil } func DeleteActivity(activity *Activity) error { if err := DB().Delete(activity).Error; err != nil { return err } return nil } // func (a *Activity) AfterSave(tx *gorm.DB) error { // var act Activity // if err := DB().Preload("Teacher").Preload("Subject").Preload("Class").First(&act, a.ID).Error; err != nil { // return err // } // log.Println(a.ID) // if err := tx.Model(a).Update("name", fmt.Sprintf("%s %s %dh", act.Class.Name, act.Subject.Name, act.Hours)).Error; err != nil { // return err // } // return nil // }