|
@@ -17,18 +17,32 @@ import (
|
|
"gogs.carducci-dante.gov.it/karmen/orm"
|
|
"gogs.carducci-dante.gov.it/karmen/orm"
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+var (
|
|
|
|
+ selectUniqueSubjectTeachers = `
|
|
|
|
+SELECT DISTINCT teachers.* FROM activities
|
|
|
|
+INNER JOIN subjects ON subjects.id=activities.subject_id
|
|
|
|
+INNER JOIN teachers on teachers.id=activities.teacher_id
|
|
|
|
+WHERE subject_id=2 GROUP BY activities.teacher_id;
|
|
|
|
+`
|
|
|
|
+)
|
|
|
|
+
|
|
func subjectsHandler() http.Handler {
|
|
func subjectsHandler() http.Handler {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
- var data struct {
|
|
|
|
- Subjects []orm.Subject
|
|
|
|
- }
|
|
|
|
- if err := orm.DB().Preload("Teachers").Find(&data.Subjects).Error; err != nil {
|
|
|
|
|
|
+ var subjects []*orm.Subject
|
|
|
|
+
|
|
|
|
+ if err := orm.DB().Find(&subjects).Error; err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
- sort.Slice(data.Subjects, func(i, j int) bool {
|
|
|
|
- return strings.ToLower(data.Subjects[i].Name) < strings.ToLower(data.Subjects[j].Name)
|
|
|
|
- })
|
|
|
|
- if err := renderer.Render(w, "base", "subjects", data); err != nil {
|
|
|
|
|
|
+
|
|
|
|
+ for _, subject := range subjects {
|
|
|
|
+ orm.DB().Raw(selectUniqueSubjectTeachers, subject.ID).Scan(&subject.Teachers)
|
|
|
|
+ sort.Slice(subject.Teachers, func(i, j int) bool {
|
|
|
|
+ return strings.ToLower(subject.Teachers[i].Surname) < strings.ToLower(subject.Teachers[j].Surname)
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := renderer.Render(w, "base", "subjects", subjects); err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -37,19 +51,19 @@ func subjectsHandler() http.Handler {
|
|
|
|
|
|
func subjectsShowHandler() http.Handler {
|
|
func subjectsShowHandler() http.Handler {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
- var data struct {
|
|
|
|
- Subject orm.Subject
|
|
|
|
- Teachers []orm.Teacher
|
|
|
|
- }
|
|
|
|
- if err := orm.DB().First(&data.Subject, mux.Vars(r)["id"]).Error; err != nil {
|
|
|
|
- panic(err)
|
|
|
|
- }
|
|
|
|
|
|
+ var subject orm.Subject
|
|
|
|
|
|
- if err := orm.DB().Model(&data.Subject).Related(&data.Teachers, "Teachers").Error; err != nil {
|
|
|
|
|
|
+ if err := orm.DB().First(&subject, mux.Vars(r)["id"]).Error; err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
|
|
- if err := renderer.Render(w, "base", "subjects_show", data); err != nil {
|
|
|
|
|
|
+ orm.DB().Raw(selectUniqueSubjectTeachers, mux.Vars(r)["id"]).Scan(&subject.Teachers)
|
|
|
|
+
|
|
|
|
+ sort.Slice(subject.Teachers, func(i, j int) bool {
|
|
|
|
+ return strings.ToLower(subject.Teachers[i].Name) < strings.ToLower(subject.Teachers[j].Name)
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ if err := renderer.Render(w, "base", "subjects_show", subject); err != nil {
|
|
panic(err)
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
}
|