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 createHandler(handlerFunc) }
func HintHistoryHandler(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 } var result []byte ids, ok := r.URL.Query()["exercise_id"] if ok { result, err = mapper.PreparedQueryIntoBytes("SELECT get_hint_purchase_history(%v)", id, pr.Size, pr.Size*pr.Number, ids[0]) } else { result, err = mapper.PreparedQueryIntoBytes("SELECT get_hint_purchase_history(%v)", id, pr.Size, pr.Size*pr.Number) } if err != nil { log.Println(err) return http.StatusNotFound } reader := bytes.NewReader(result) _, err = io.Copy(w, reader) if err != nil { log.Println(err) } return -1 } return 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($1,$2)`, 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 createHandler(handlerFunc) }