func ExerciseHistoryHandler(mapper *pgmapper.Mapper, extractor idextractor.Extractor) http.Handler { handlerFunc := func(w http.ResponseWriter, r *http.Request) int { pr, err := paginator.ParsePages(r.URL) if err != nil { return http.StatusInternalServerError } id, err := extractor(r) if err != nil { return http.StatusInternalServerError } limit := pr.Size skip := pr.Size * pr.Number if pr.Number == -1 || pr.Size == -1 { skip = -1 } var result []byte if ids, ok := r.URL.Query()["module_id"]; ok { result, err = mapper.PreparedQueryIntoBytes("SELECT get_exercise_history(%v)", id, limit, skip, ids[0]) } else { result, err = mapper.PreparedQueryIntoBytes("SELECT get_exercise_history(%v)", id, limit, skip) } if err != nil { return http.StatusNotFound } reader := bytes.NewReader(result) _, err = io.Copy(w, reader) if err != nil { log.Println(err) } return -1 } return jwtware.New(createHandler(handlerFunc)) }
func TopicCollectionHandler(mapper *pgmapper.Mapper) http.Handler { handlerFunc := func(w http.ResponseWriter, r *http.Request) int { pageRequest, err := paginator.ParsePages(r.URL) if err != nil { return http.StatusInternalServerError } result, err := mapper.PreparedQueryIntoBytes("SELECT * from query_topics(%v)", pageRequest.Number*pageRequest.Size, pageRequest.Size) if err != nil { log.Println(err) return http.StatusInternalServerError } reader := bytes.NewReader(result) _, err = io.Copy(w, reader) if err != nil { log.Println(err) } return -1 } return jwtware.New(createHandler(handlerFunc)) }