From 64539ae83541a8bfc979adbf05e7f446892c53ee Mon Sep 17 00:00:00 2001 From: kpenfound Date: Mon, 14 Jul 2025 23:35:26 -0400 Subject: [PATCH 1/4] Creating farewells.json with farewell messages in different languages --- farewells.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 farewells.json diff --git a/farewells.json b/farewells.json new file mode 100644 index 0000000..9c0389f --- /dev/null +++ b/farewells.json @@ -0,0 +1,19 @@ +[ + { "language": "english", "farewell": "Goodbye, World!" }, + { "language": "british", "farewell": "Goodbye, World! Cheerio!" }, + { "language": "french", "farewell": "Au revoir, Monde !" }, + { "language": "italian", "farewell": "Arrivederci, Mondo!" }, + { "language": "spanish", "farewell": "¡Adiós, Mundo!" }, + { "language": "german", "farewell": "Auf Wiedersehen, Welt!" }, + { "language": "mandarin", "farewell": "再见,世界!" }, + { "language": "hindi", "farewell": "अलविदा दुनिया!" }, + { "language": "arabic", "farewell": "وداعا أيها العالم!" }, + { "language": "bengali", "farewell": "বিদায় বিশ্ব!" }, + { "language": "russian", "farewell": "До свидания, мир!" }, + { "language": "portuguese", "farewell": "Tchau, Mundo!" }, + { "language": "urdu", "farewell": "الوداع، دنیا!" }, + { "language": "indonesian", "farewell": "Selamat tinggal Dunia!" }, + { "language": "japanese", "farewell": "さようなら世界!" }, + { "language": "marathi", "farewell": "निरोप जग!" }, + { "language": "telugu", "farewell": "వీడ్కోలు ప్రపంచం!" } +] From c6394cd85b2bc95a9598f7c121ab5b20396986f7 Mon Sep 17 00:00:00 2001 From: kpenfound Date: Mon, 14 Jul 2025 23:35:51 -0400 Subject: [PATCH 2/4] Adding farewell endpoints to the API --- main.go | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index f3dd57c..6e375dd 100644 --- a/main.go +++ b/main.go @@ -16,11 +16,19 @@ import ( //go:embed greetings.json var greetingsJson []byte +//go:embed farewells.json +var farewellsJson []byte + type Greeting struct { Language string `json:"language"` Greeting string `json:"greeting"` } +type Farewell struct { + Language string `json:"language"` + Farewell string `json:"farewell"` +} + func main() { var greetings []*Greeting err := json.Unmarshal(greetingsJson, &greetings) @@ -28,6 +36,14 @@ func main() { fmt.Printf("error loading greetings: %s\n", err) os.Exit(1) } + + var farewells []*Farewell + err = json.Unmarshal(farewellsJson, &farewells) + if err != nil { + fmt.Printf("error loading farewells: %s\n", err) + os.Exit(1) + } + router := mux.NewRouter() router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { @@ -37,7 +53,7 @@ func main() { if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) } - _, err = w.Write([]byte(FormatResponse(greeting))) + _, err = w.Write([]byte(FormatGreetingResponse(greeting))) if err != nil { panic(err) } @@ -51,7 +67,37 @@ func main() { if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) } - _, err = w.Write([]byte(FormatResponse(greeting))) + _, err = w.Write([]byte(FormatGreetingResponse(greeting))) + if err != nil { + panic(err) + } + }).Methods("GET") + + // New farewell endpoints + router.HandleFunc("/farewell", func(w http.ResponseWriter, r *http.Request) { + fmt.Printf("got /farewell request from %s\n", r.RemoteAddr) + w.Header().Set("Content-Type", "application/json") + farewell, err := SelectFarewell(farewells, "random") + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + _, err = w.Write([]byte(FormatFarewellResponse(farewell))) + if err != nil { + panic(err) + } + }).Methods("GET") + + router.HandleFunc("/farewell/{language}", func(w http.ResponseWriter, r *http.Request) { + language := mux.Vars(r)["language"] + fmt.Printf("got /farewell/{language} request from %s\n", r.RemoteAddr) + w.Header().Set("Content-Type", "application/json") + farewell, err := SelectFarewell(farewells, language) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + _, err = w.Write([]byte(FormatFarewellResponse(farewell))) if err != nil { panic(err) } @@ -74,10 +120,14 @@ func main() { } } -func FormatResponse(greeting *Greeting) string { +func FormatGreetingResponse(greeting *Greeting) string { return fmt.Sprintf("{\"greeting\":\"%s\"}", greeting.Greeting) } +func FormatFarewellResponse(farewell *Farewell) string { + return fmt.Sprintf("{\"farewell\":\"%s\"}", farewell.Farewell) +} + func SelectGreeting(greetings []*Greeting, language string) (*Greeting, error) { if len(greetings) == 0 { return nil, errors.New("no greetings available") @@ -97,3 +147,23 @@ func SelectGreeting(greetings []*Greeting, language string) (*Greeting, error) { return nil, fmt.Errorf("no greeting found for language '%s'", language) } + +func SelectFarewell(farewells []*Farewell, language string) (*Farewell, error) { + if len(farewells) == 0 { + return nil, errors.New("no farewells available") + } + + if language == "random" { + // Get random item from farewells slice + randomIndex := rand.Intn(len(farewells)) + return farewells[randomIndex], nil + } + + for _, farewell := range farewells { + if farewell.Language == language { + return farewell, nil + } + } + + return nil, fmt.Errorf("no farewell found for language '%s'", language) +} From aa894ed5bbc4161db1ef9fdb246bc77f9055010e Mon Sep 17 00:00:00 2001 From: kpenfound Date: Mon, 14 Jul 2025 23:37:46 -0400 Subject: [PATCH 3/4] Fixing the missing return statements and adding farewell endpoints. --- main.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.go b/main.go index 6e375dd..0c2500c 100644 --- a/main.go +++ b/main.go @@ -52,6 +52,7 @@ func main() { greeting, err := SelectGreeting(greetings, "random") if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) + return } _, err = w.Write([]byte(FormatGreetingResponse(greeting))) if err != nil { @@ -66,6 +67,7 @@ func main() { greeting, err := SelectGreeting(greetings, language) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) + return } _, err = w.Write([]byte(FormatGreetingResponse(greeting))) if err != nil { From 81ff19d72735789a3112acc17ce9069d56f28689 Mon Sep 17 00:00:00 2001 From: kpenfound Date: Mon, 14 Jul 2025 23:38:39 -0400 Subject: [PATCH 4/4] Fixed routing order to prevent conflicts between farewell and language endpoints --- main.go | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/main.go b/main.go index 0c2500c..b306f5f 100644 --- a/main.go +++ b/main.go @@ -60,26 +60,26 @@ func main() { } }).Methods("GET") - router.HandleFunc("/{language}", func(w http.ResponseWriter, r *http.Request) { - language := mux.Vars(r)["language"] - fmt.Printf("got /{language} request from %s\n", r.RemoteAddr) + // Farewell endpoints - must be defined before /{language} to avoid conflicts + router.HandleFunc("/farewell", func(w http.ResponseWriter, r *http.Request) { + fmt.Printf("got /farewell request from %s\n", r.RemoteAddr) w.Header().Set("Content-Type", "application/json") - greeting, err := SelectGreeting(greetings, language) + farewell, err := SelectFarewell(farewells, "random") if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } - _, err = w.Write([]byte(FormatGreetingResponse(greeting))) + _, err = w.Write([]byte(FormatFarewellResponse(farewell))) if err != nil { panic(err) } }).Methods("GET") - // New farewell endpoints - router.HandleFunc("/farewell", func(w http.ResponseWriter, r *http.Request) { - fmt.Printf("got /farewell request from %s\n", r.RemoteAddr) + router.HandleFunc("/farewell/{language}", func(w http.ResponseWriter, r *http.Request) { + language := mux.Vars(r)["language"] + fmt.Printf("got /farewell/{language} request from %s\n", r.RemoteAddr) w.Header().Set("Content-Type", "application/json") - farewell, err := SelectFarewell(farewells, "random") + farewell, err := SelectFarewell(farewells, language) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return @@ -90,16 +90,17 @@ func main() { } }).Methods("GET") - router.HandleFunc("/farewell/{language}", func(w http.ResponseWriter, r *http.Request) { + // Language-specific greeting endpoint - must be last to avoid conflicts + router.HandleFunc("/{language}", func(w http.ResponseWriter, r *http.Request) { language := mux.Vars(r)["language"] - fmt.Printf("got /farewell/{language} request from %s\n", r.RemoteAddr) + fmt.Printf("got /{language} request from %s\n", r.RemoteAddr) w.Header().Set("Content-Type", "application/json") - farewell, err := SelectFarewell(farewells, language) + greeting, err := SelectGreeting(greetings, language) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } - _, err = w.Write([]byte(FormatFarewellResponse(farewell))) + _, err = w.Write([]byte(FormatGreetingResponse(greeting))) if err != nil { panic(err) }