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, cena,
COALESCE('/images/' || obraz_url, '/images/placeholder.jpg') as obraz_url, COALESCE('/images/' || obraz_url, '/images/placeholder.jpg') as obraz_url,
COALESCE(opis, 'Brak opisu') as opis COALESCE(opis, 'Brak opisu') as opis
FROM ksiazki"; FROM ksiazki
ORDER BY tytul";
let sort_clause = match sort_by { let sort_clause = match sort_by {
"price_asc" => " ORDER BY cena ASC", "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!" COALESCE('/images/' || NULLIF(b.obraz_url, ''), '/images/placeholder.jpg') as "obraz_url!"
FROM koszyk k FROM koszyk k
JOIN ksiazki b ON k.book_id = b.id 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 user_id
) )
.fetch_all(pool.get_ref()) .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 pozycje_zamowienia pz ON z.id = pz.zamowienie_id
JOIN ksiazki k ON pz.book_id = k.id JOIN ksiazki k ON pz.book_id = k.id
WHERE z.user_id = $1 WHERE z.user_id = $1
ORDER BY z.data_zamowienia DESC ORDER BY z.id DESC, k.tytul ASC
"#, "#,
user_id user_id
) )

View file

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

View file

@ -50,7 +50,7 @@
<main class="container py-5"> <main class="container py-5">
<h2 class="text-center mb-5 neon-title">NOWOŚCI</h2> <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 --> <!-- Dynamicznie ładowane książki -->
<div class="col-12 text-center"> <div class="col-12 text-center">
<div class="spinner-border text-danger" role="status"> <div class="spinner-border text-danger" role="status">

View file

@ -128,25 +128,14 @@ function renderBooks(books) {
} }
container.innerHTML = books.map(book => ` container.innerHTML = books.map(book => `
<div class="col-md-4 mb-4"> <div class="col">
<div class="book-card card h-100"> <div class="book-card">
<a href="/book.html?id=${book.id}" class="book-link"> <a href="https://athenaeum.sykorax.eu/book.html?id=${book.id}">
<div class="book-cover"> <img src="${book.obraz_url}" class="book-cover" alt="${book.tytul}">
<img src="${book.obraz_url}" <div class="book-body">
class="card-img-top"
alt="${book.tytul}"
onerror="this.src='/images/placeholder.jpg'">
<div class="book-overlay">
<h5 class="book-title">${book.tytul}</h5> <h5 class="book-title">${book.tytul}</h5>
</div> </div>
</div>
</a> </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>
</div> </div>
`).join(''); `).join('');