| 
					
				 | 
			
			
				@@ -17,18 +17,32 @@ import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"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 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,19 +51,19 @@ func subjectsHandler() http.Handler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func subjectsShowHandler() http.Handler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 |