This commit is contained in:
Lheorvine 2025-05-26 17:36:01 +02:00
parent 4fbbff2c12
commit 9567290f0d
5 changed files with 30 additions and 41 deletions

View file

@ -0,0 +1,3 @@
ALTER TABLE ksiazki
ALTER COLUMN cena TYPE DECIMAL(10,2),
ALTER COLUMN cena SET NOT NULL;

View file

@ -182,7 +182,8 @@ async fn get_ksiazki(
cena,
COALESCE('/images/' || obraz_url, '/images/placeholder.jpg') as obraz_url,
COALESCE(opis, 'Brak opisu') as opis
FROM ksiazki";
FROM ksiazki
ORDER BY tytul";
let sort_clause = match sort_by {
"price_asc" => " ORDER BY cena ASC",
@ -294,7 +295,8 @@ async fn get_cart(
COALESCE('/images/' || NULLIF(b.obraz_url, ''), '/images/placeholder.jpg') as "obraz_url!"
FROM koszyk k
JOIN ksiazki b ON k.book_id = b.id
WHERE k.user_id = $1"#,
WHERE k.user_id = $1
ORDER BY b.tytul"#,
user_id
)
.fetch_all(pool.get_ref())
@ -359,7 +361,7 @@ async fn get_order_history(
JOIN pozycje_zamowienia pz ON z.id = pz.zamowienie_id
JOIN ksiazki k ON pz.book_id = k.id
WHERE z.user_id = $1
ORDER BY z.data_zamowienia DESC
ORDER BY z.id DESC, k.tytul ASC
"#,
user_id
)

View file

@ -76,28 +76,23 @@ footer {
}
.book-card {
aspect-ratio: 5/8;
position: relative;
transition: transform 0.3s;
}
.book-cover img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 5px;
}
.book-cover {
height: 100%;
width: 100%;
border-radius: 2px;
overflow: hidden;
display: flex;
flex-direction: column;
background: #1a1a1a;
border: 1px solid #343434;
transition: transform 0.3s ease;
}
.book-card:hover {
transform: scale(1.05);
z-index: 1;
transform: translateY(-5px);
}
.book-cover {
width: 100%;
height: 300px;
object-fit: contain;
padding: 15px;
}
.book-overlay {

View file

@ -50,7 +50,7 @@
<main class="container py-5">
<h2 class="text-center mb-5 neon-title">NOWOŚCI</h2>
<div class="row row-cols-1 row-cols-md-3 row-cols-lg-4 g-4" id="books-container">
<div class="row row-cols-2 row-cols-md-3 row-cols-lg-5 g-4" id="books-container">
<!-- Dynamicznie ładowane książki -->
<div class="col-12 text-center">
<div class="spinner-border text-danger" role="status">

View file

@ -128,25 +128,14 @@ function renderBooks(books) {
}
container.innerHTML = books.map(book => `
<div class="col-md-4 mb-4">
<div class="book-card card h-100">
<a href="/book.html?id=${book.id}" class="book-link">
<div class="book-cover">
<img src="${book.obraz_url}"
class="card-img-top"
alt="${book.tytul}"
onerror="this.src='/images/placeholder.jpg'">
<div class="book-overlay">
<div class="col">
<div class="book-card">
<a href="https://athenaeum.sykorax.eu/book.html?id=${book.id}">
<img src="${book.obraz_url}" class="book-cover" alt="${book.tytul}">
<div class="book-body">
<h5 class="book-title">${book.tytul}</h5>
</div>
</div>
</a>
<div class="card-body">
<h5 class="card-title">${book.tytul}</h5>
<p class="card-text">${book.autor}</p>
<p class="card-text">${book.cena} PLN</p>
<button class="btn btn-gothic add-to-cart" data-book-id="${book.id}">Dodaj do koszyka</button>
</div>
</div>
</div>
`).join('');