214 lines
6.6 KiB
Go
214 lines
6.6 KiB
Go
|
|
package handlers
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"github.com/gorilla/mux"
|
||
|
|
"go_project/internal/configuration"
|
||
|
|
"go_project/internal/connection"
|
||
|
|
"go_project/internal/controllers"
|
||
|
|
"log"
|
||
|
|
"net/http"
|
||
|
|
"strconv"
|
||
|
|
)
|
||
|
|
|
||
|
|
func GetBookingById(response http.ResponseWriter, request *http.Request) {
|
||
|
|
log.Println("GetBookingById Serving:", request.URL.Path, "from", request.Host)
|
||
|
|
|
||
|
|
sqlHandler, err := connection.OpenDefault()
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error opening database connection:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer connection.MustClose(sqlHandler)
|
||
|
|
|
||
|
|
requestVars := mux.Vars(request)
|
||
|
|
bookingIdStringValue := requestVars["id"]
|
||
|
|
|
||
|
|
id, err := strconv.Atoi(bookingIdStringValue)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Current id string value of the booking record to get: \"" + bookingIdStringValue + "\"")
|
||
|
|
log.Println("Error parse id string value to int:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
booking, err := controllers.BookingById(sqlHandler, id)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error getting booking by id from database:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
bookingMarshaled, err := json.Marshal(booking)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error marshaling booking to json string format:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response.Header().Set("Content-Type", "application/json")
|
||
|
|
_, err = response.Write(bookingMarshaled)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error writing booking to response:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
response.WriteHeader(http.StatusOK)
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetAllBookings(response http.ResponseWriter, request *http.Request) {
|
||
|
|
log.Println("GetAllBookings Serving:", request.URL.Path, "from", request.Host)
|
||
|
|
|
||
|
|
sqlHandler, err := connection.OpenDefault()
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error opening database connection:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer connection.MustClose(sqlHandler)
|
||
|
|
|
||
|
|
limit, offset := configuration.GetRecordsLimit(), configuration.GetRecordsOffset()
|
||
|
|
listBookingParams := controllers.ListBookingParams{Limit: limit, Offset: offset}
|
||
|
|
|
||
|
|
allBookings, err := controllers.AllBookings(sqlHandler, listBookingParams)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error getting all bookings from database:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
allBookingsMarshaled, err := json.Marshal(allBookings)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error marshaling all bookings:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response.Header().Set("Content-Type", "application/json")
|
||
|
|
_, err = response.Write(allBookingsMarshaled)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error writing all bookings to response:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
response.WriteHeader(http.StatusOK)
|
||
|
|
}
|
||
|
|
|
||
|
|
func CreateBooking(response http.ResponseWriter, request *http.Request) {
|
||
|
|
log.Println("CreateBooking Serving:", request.URL.Path, "from", request.Host)
|
||
|
|
|
||
|
|
sqlHandler, err := connection.OpenDefault()
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error opening database connection:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer connection.MustClose(sqlHandler)
|
||
|
|
|
||
|
|
var createBookingParams controllers.CreateBookingParams
|
||
|
|
err = json.NewDecoder(request.Body).Decode(&createBookingParams)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("CreateBooking: Values of createBookingParams:", createBookingParams)
|
||
|
|
log.Println("Error unmarshaling booking from json string format:", err)
|
||
|
|
response.WriteHeader(http.StatusBadRequest)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
newBooking, err := controllers.CreateBooking(sqlHandler, createBookingParams)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error creating booking:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
newBookingMarshaled, err := json.Marshal(newBooking)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error marshaling booking to json string format:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response.Header().Set("Content-Type", "application/json")
|
||
|
|
_, err = response.Write(newBookingMarshaled)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error writing booking to response:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
response.WriteHeader(http.StatusOK)
|
||
|
|
}
|
||
|
|
|
||
|
|
func UpdateBooking(response http.ResponseWriter, request *http.Request) {
|
||
|
|
log.Println("UpdateBookingById Serving:", request.URL.Path, "from", request.Host)
|
||
|
|
|
||
|
|
sqlHandler, err := connection.OpenDefault()
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error opening database connection:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer connection.MustClose(sqlHandler)
|
||
|
|
|
||
|
|
var updateBookingParams controllers.UpdateBookingParams
|
||
|
|
err = json.NewDecoder(request.Body).Decode(&updateBookingParams)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("UpdateBooking: Values of updateBookingParams:", updateBookingParams)
|
||
|
|
log.Println("Error unmarshaling booking from json string format:", err)
|
||
|
|
response.WriteHeader(http.StatusBadRequest)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
newBooking, err := controllers.UpdateBooking(sqlHandler, updateBookingParams)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error updating booking by id from database:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
log.Println("SQL result: Updated booking record is:", newBooking)
|
||
|
|
|
||
|
|
response.WriteHeader(http.StatusOK)
|
||
|
|
}
|
||
|
|
|
||
|
|
func DeleteBookingById(response http.ResponseWriter, request *http.Request) {
|
||
|
|
log.Println("DeleteBookingById Serving:", request.URL.Path, "from", request.Host)
|
||
|
|
|
||
|
|
sqlHandler, err := connection.OpenDefault()
|
||
|
|
if err != err {
|
||
|
|
log.Println("Error opening database connection:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer connection.MustClose(sqlHandler)
|
||
|
|
|
||
|
|
requestVars := mux.Vars(request)
|
||
|
|
bookingIdStringValue := requestVars["id"]
|
||
|
|
|
||
|
|
id, err := strconv.Atoi(bookingIdStringValue)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Current id string value of the booking record to delete: \"" + bookingIdStringValue + "\"")
|
||
|
|
log.Println("Error parse id string value to int:", err)
|
||
|
|
response.WriteHeader(http.StatusBadRequest)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
sqlResult, err := controllers.DeleteBookingById(sqlHandler, id)
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error deleting booking by id from database:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
rowsAffected, err := sqlResult.RowsAffected()
|
||
|
|
if err != nil {
|
||
|
|
log.Println("Error getting number of rows affected by an delete:", err)
|
||
|
|
response.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
log.Println("SQL result: Number of rows affected by an delete:", rowsAffected)
|
||
|
|
|
||
|
|
response.WriteHeader(http.StatusOK)
|
||
|
|
}
|