From 8c9886ab342c92c9b5f144e0eab88e989431e774 Mon Sep 17 00:00:00 2001 From: Abdulsamad Sheikh <abdulsas@stud.ntnu.no> Date: Thu, 7 Mar 2024 06:10:25 +0000 Subject: [PATCH] Added logs for ReadershipHandler --- handlers/handlers.go | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/handlers/handlers.go b/handlers/handlers.go index 940fe1e..47d87f8 100644 --- a/handlers/handlers.go +++ b/handlers/handlers.go @@ -2,12 +2,14 @@ package handlers import ( "encoding/json" + "log" "net/http" "assignment1/models" "assignment1/services" "fmt" ) + // BookCountHandler handles requests to the /librarystats/v1/bookcount/ endpoint. func BookCountHandler(w http.ResponseWriter, r *http.Request) { // Extract query parameters for language @@ -40,37 +42,41 @@ func BookCountHandler(w http.ResponseWriter, r *http.Request) { } func ReadershipHandler(w http.ResponseWriter, r *http.Request) { - // Extract the language code from the URL path language := r.URL.Path[len("/librarystats/v1/readership/"):] + log.Printf("ReadershipHandler: Processing language: %s", language) + // Optional: Parse query parameters for limit if present query := r.URL.Query() limitParam := query.Get("limit") var limit int if limitParam != "" { fmt.Sscanf(limitParam, "%d", &limit) + log.Printf("ReadershipHandler: Limit set to %d", limit) } - // Fetch book data from the Gutendex API books, err := services.FetchBooksByLanguage(language) if err != nil { + log.Printf("ReadershipHandler: Error fetching books: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } + log.Printf("ReadershipHandler: Fetched %d books", len(books.Results)) - // Fetch countries for the given language - countries, err := services.FetchCountriesByLanguage(language) + countries, err := services.FetchCountriesByLanguage(language) if err != nil { + log.Printf("ReadershipHandler: Error fetching countries: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } + log.Printf("ReadershipHandler: Fetched %d countries", len(countries)) - // Fetch population data for each country and calculate total readership var readershipDetails []models.ReadershipDetail var totalReadership int64 = 0 - for _, country := range countries { // Directly range over countries + for _, country := range countries { population, err := services.FetchPopulationByCountryCode(country.ISO3166_1_Alpha_2) if err != nil { + log.Printf("ReadershipHandler: Error fetching population for country %s: %v", country.ISO3166_1_Alpha_2, err) http.Error(w, err.Error(), http.StatusInternalServerError) return } @@ -78,25 +84,30 @@ func ReadershipHandler(w http.ResponseWriter, r *http.Request) { readershipDetail := models.ReadershipDetail{ Country: country.Official_Name, - ISOCode: country.ISO3166_1_Alpha_2, // Corrected field access + ISOCode: country.ISO3166_1_Alpha_2, Books: len(books.Results), Authors: services.CalculateUniqueAuthors(books.Results), Readership: population, } readershipDetails = append(readershipDetails, readershipDetail) - // Apply limit if specified if limit > 0 && len(readershipDetails) >= limit { + log.Printf("ReadershipHandler: Limit reached, stopping processing") break } } - // Create and send the response + log.Printf("ReadershipHandler: Total readership calculated: %d", totalReadership) + w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(readershipDetails) + if err := json.NewEncoder(w).Encode(readershipDetails); err != nil { + log.Printf("ReadershipHandler: Error encoding response: %v", err) + http.Error(w, "Failed to encode response: "+err.Error(), http.StatusInternalServerError) + } else { + log.Printf("ReadershipHandler: Response successfully sent") + } } - func StatusHandler(w http.ResponseWriter, r *http.Request) { status := models.ServiceStatus{ GutendexAPI: services.CheckServiceAvailability("http://129.241.150.113:8000/books/"), -- GitLab