reviews + UI
This commit is contained in:
@@ -3,7 +3,6 @@ package main
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
@@ -65,12 +64,65 @@ func createTable() {
|
||||
log.Fatal("Ошибка создания таблицы:", err)
|
||||
}
|
||||
}
|
||||
func addReview(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
productID, err := strconv.Atoi(vars["product_id"])
|
||||
if err != nil {
|
||||
http.Error(w, "Некорректный product_id", http.StatusBadRequest)
|
||||
log.Println("Ошибка преобразования product_id:", err)
|
||||
return
|
||||
}
|
||||
|
||||
var review Review
|
||||
if err := json.NewDecoder(r.Body).Decode(&review); err != nil {
|
||||
http.Error(w, "Некорректный JSON", http.StatusBadRequest)
|
||||
log.Println("Ошибка декодирования JSON:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Игнорируем переданный в JSON product_id и устанавливаем его из URL
|
||||
review.ProductID = productID
|
||||
log.Printf("Добавление отзыва для товара %d: %+v", productID, review)
|
||||
|
||||
stmt, err := db.Prepare(`
|
||||
INSERT INTO reviews (product_id, username, rating, comment, created_at)
|
||||
VALUES (?, ?, ?, ?, datetime('now'))
|
||||
`)
|
||||
if err != nil {
|
||||
http.Error(w, "Ошибка при подготовке SQL-запроса", http.StatusInternalServerError)
|
||||
log.Println("Ошибка при подготовке запроса:", err)
|
||||
return
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
result, err := stmt.Exec(review.ProductID, review.Username, review.Rating, review.Comment)
|
||||
if err != nil {
|
||||
http.Error(w, "Ошибка при добавлении отзыва", http.StatusInternalServerError)
|
||||
log.Println("Ошибка при выполнении SQL-запроса:", err)
|
||||
return
|
||||
}
|
||||
|
||||
rowsAffected, _ := result.RowsAffected()
|
||||
log.Printf("Добавлено строк: %d для товара %d", rowsAffected, productID)
|
||||
|
||||
// Возвращаем созданный отзыв
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
json.NewEncoder(w).Encode(review)
|
||||
}
|
||||
|
||||
func getReviews(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
productID := vars["product_id"]
|
||||
|
||||
rows, err := db.Query("SELECT id, product_id, username, rating, comment, created_at FROM reviews WHERE product_id = ?", productID)
|
||||
log.Printf("Получение отзывов для товара %s", productID)
|
||||
|
||||
rows, err := db.Query(`
|
||||
SELECT id, product_id, username, rating, comment, created_at
|
||||
FROM reviews
|
||||
WHERE product_id = ?
|
||||
ORDER BY created_at DESC
|
||||
`, productID)
|
||||
if err != nil {
|
||||
http.Error(w, "Ошибка при получении отзывов", http.StatusInternalServerError)
|
||||
log.Println("Ошибка при запросе отзывов:", err)
|
||||
@@ -89,55 +141,9 @@ func getReviews(w http.ResponseWriter, r *http.Request) {
|
||||
reviews = append(reviews, review)
|
||||
}
|
||||
|
||||
// Log the reviews being returned
|
||||
log.Printf("Reviews fetched: %+v", reviews)
|
||||
|
||||
if len(reviews) == 0 {
|
||||
http.Error(w, "Нет отзывов", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
log.Printf("Найдено %d отзывов для товара %s", len(reviews), productID)
|
||||
|
||||
// Всегда возвращаем JSON массив, даже если он пустой
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(reviews)
|
||||
}
|
||||
|
||||
func addReview(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
productID, err := strconv.Atoi(vars["product_id"])
|
||||
if err != nil {
|
||||
http.Error(w, "Некорректный product_id", http.StatusBadRequest)
|
||||
log.Println("Ошибка преобразования product_id:", err)
|
||||
return
|
||||
}
|
||||
|
||||
var review Review
|
||||
if err := json.NewDecoder(r.Body).Decode(&review); err != nil {
|
||||
http.Error(w, "Некорректный JSON", http.StatusBadRequest)
|
||||
log.Println("Ошибка декодирования JSON:", err)
|
||||
return
|
||||
}
|
||||
|
||||
review.ProductID = productID
|
||||
log.Printf("Попытка добавить отзыв: %+v", review)
|
||||
|
||||
stmt, err := db.Prepare("INSERT INTO reviews (product_id, username, rating, comment, created_at) VALUES (?, ?, ?, ?, datetime('now'))")
|
||||
if err != nil {
|
||||
http.Error(w, "Ошибка при подготовке SQL-запроса", http.StatusInternalServerError)
|
||||
log.Println("Ошибка при подготовке запроса:", err)
|
||||
return
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
result, err := stmt.Exec(review.ProductID, review.Username, review.Rating, review.Comment)
|
||||
if err != nil {
|
||||
http.Error(w, "Ошибка при добавлении отзыва", http.StatusInternalServerError)
|
||||
log.Println("Ошибка при выполнении SQL-запроса:", err)
|
||||
return
|
||||
}
|
||||
|
||||
rowsAffected, _ := result.RowsAffected()
|
||||
log.Println("Добавлено строк:", rowsAffected)
|
||||
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
fmt.Fprintln(w, "Отзыв успешно добавлен")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user