Bladeren bron

Fix subject queries

Andrea Fazzi 6 jaren geleden
bovenliggende
commit
b90d6e7f64
2 gewijzigde bestanden met toevoegingen van 37 en 23 verwijderingen
  1. 31 17
      api/subjects.go
  2. 6 6
      templates/subjects_show.html.tpl

+ 31 - 17
api/subjects.go

@@ -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)
 		}
 		}
 	}
 	}

+ 6 - 6
templates/subjects_show.html.tpl

@@ -4,22 +4,22 @@
 
 
   <ol class="breadcrumb">
   <ol class="breadcrumb">
     <li><a href="/subjects">Materie</a></li>
     <li><a href="/subjects">Materie</a></li>
-    <li class="active"><a href="#">{{.Subject.Name}}</a></li>
+    <li class="active"><a href="#">{{.Name}}</a></li>
   </ol>
   </ol>
 
 
   <div class="karmen-info-header">
   <div class="karmen-info-header">
     <div class="row">
     <div class="row">
       <div class="col-md-8">
       <div class="col-md-8">
-	<h1>{{.Subject.Name}}</h1>
+	<h1>{{.Name}}</h1>
       </div>
       </div>
       <div class="col-md-4">
       <div class="col-md-4">
 	<div class="btn-group pull-right" role="group">
 	<div class="btn-group pull-right" role="group">
-	  <a href="/subjects/{{.Subject.ID}}/update" class="btn btn-primary">
+	  <a href="/subjects/{{.ID}}/update" class="btn btn-primary">
 	    <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
 	    <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
 	    Modifica
 	    Modifica
 	  </a>
 	  </a>
-	  <button href="/subjects/{{.Subject.ID}}/delete"
-		  data-url="/subjects/{{.Subject.ID}}/delete"
+	  <button href="/subjects/{{.ID}}/delete"
+		  data-url="/subjects/{{.ID}}/delete"
 		  class="btn btn-danger karmen-ajax-delete">
 		  class="btn btn-danger karmen-ajax-delete">
 	    <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
 	    <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
 	    Elimina
 	    Elimina
@@ -29,7 +29,7 @@
     </div>
     </div>
   </div>
   </div>
 
 
-  <h2 class="karmen-relation-header">Docenti di {{.Subject.Name}}</h2>
+  <h2 class="karmen-relation-header">Docenti di {{.Name}}</h2>
   <div class="list-group" id="materie_list_group">
   <div class="list-group" id="materie_list_group">
     {{if not .Teachers}}
     {{if not .Teachers}}
     <p>Alla materia non è associata alcuna attività
     <p>Alla materia non è associata alcuna attività