diff --git a/assets/templates/marketplace/index.html b/assets/templates/marketplace/index.html
index d9ba644..8f509ec 100644
--- a/assets/templates/marketplace/index.html
+++ b/assets/templates/marketplace/index.html
@@ -4,20 +4,31 @@
Rzeczy wystawione na sprzedaż
{% for offer in offers %}
-
+
+
+ {% for contact in offer.contacts %}
+
+ {% endfor %}
+
+
{% endfor %}
{% endblock %}
diff --git a/src/model/view.rs b/src/model/view.rs
index 2d500cd..ed6251c 100644
--- a/src/model/view.rs
+++ b/src/model/view.rs
@@ -4,7 +4,6 @@ use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use crate::model::db;
-use crate::model::db::ContactInfo;
#[derive(Debug, Default, Serialize)]
pub enum Page {
@@ -261,5 +260,33 @@ pub struct Offer {
pub picture_url: String,
pub state: db::OfferState,
pub created_at: NaiveDateTime,
- pub contacts: Vec>,
+ pub contacts: Vec>,
+}
+
+impl From<(db::Offer, &Vec>)> for Offer {
+ fn from((offer, contacts): (db::Offer, &Vec>)) -> Self {
+ let db::Offer {
+ id,
+ owner_id,
+ price_range,
+ description,
+ picture_url,
+ state,
+ created_at,
+ } = offer;
+ Self {
+ id,
+ owner_id,
+ price_range,
+ description,
+ picture_url,
+ state,
+ created_at,
+ contacts: contacts
+ .iter()
+ .filter(|contact| contact.owner_id == owner_id)
+ .cloned()
+ .collect(),
+ }
+ }
}
diff --git a/src/routes/restricted/offers.rs b/src/routes/restricted/offers.rs
index cf4c7f7..198d044 100644
--- a/src/routes/restricted/offers.rs
+++ b/src/routes/restricted/offers.rs
@@ -1,3 +1,5 @@
+use std::sync::Arc;
+
use actix_web::web::{Data, Form, ServiceConfig};
use actix_web::{get, post, web, HttpResponse};
use askama::*;
@@ -6,6 +8,7 @@ use sqlx::PgPool;
use crate::model::db::{self, OfferState, PriceRange};
use crate::model::view;
use crate::model::view::Page;
+use crate::queries::T;
use crate::routes::{Identity, Result};
use crate::view::Helper;
use crate::{authorize, not_xss, ok_or_internal, queries};
@@ -17,7 +20,24 @@ struct AccountOffersTemplate {
error: Option,
page: Page,
h: Helper,
- offers: Vec,
+ offers: Vec,
+}
+
+async fn offers(t: &mut T<'_>, account_id: i32) -> Vec {
+ let offers = queries::account_offers(t, account_id)
+ .await
+ .unwrap_or_default();
+ let contacts = queries::all_contacts(t)
+ .await
+ .unwrap_or_default()
+ .into_iter()
+ .map(Arc::new)
+ .collect::>();
+
+ offers
+ .into_iter()
+ .map(|o| view::Offer::from((o, &contacts)))
+ .collect::>()
}
#[get("/account/offers")]
@@ -26,9 +46,7 @@ pub async fn account_offers(id: Identity, db: Data) -> Result {
dbg!(e);
- let offers = queries::account_offers(&mut t, account.id)
- .await
- .unwrap_or_default();
+
+ let offers = offers(&mut t, account.id).await;
+
t.rollback().await.ok();
Ok(HttpResponse::Ok().content_type("text/html").body(
AccountOffersTemplate {
@@ -133,9 +151,9 @@ async fn update_offer(
}
Err(e) => {
dbg!(e);
- let offers = queries::account_offers(&mut t, account.id)
- .await
- .unwrap_or_default();
+
+ let offers = offers(&mut t, account.id).await;
+
t.rollback().await.ok();
Ok(HttpResponse::Ok().content_type("text/html").body(
AccountOffersTemplate {
diff --git a/src/routes/unrestricted/marketplace.rs b/src/routes/unrestricted/marketplace.rs
index ae1a854..5c0c966 100644
--- a/src/routes/unrestricted/marketplace.rs
+++ b/src/routes/unrestricted/marketplace.rs
@@ -1,3 +1,5 @@
+use std::sync::Arc;
+
use actix_web::web::{self, Data, ServiceConfig};
use actix_web::{get, HttpRequest, HttpResponse};
use askama::*;
@@ -5,6 +7,7 @@ use serde::Serialize;
use sqlx::PgPool;
use crate::model::db::{self, PriceRange};
+use crate::model::view;
use crate::model::view::Page;
use crate::queries;
use crate::routes::{Identity, Result};
@@ -18,7 +21,7 @@ struct MarketplaceTemplate {
page: Page,
#[serde(skip)]
h: Helper,
- offers: Vec,
+ offers: Vec,
}
#[get("")]
@@ -31,6 +34,17 @@ async fn marketplace(req: HttpRequest, db: Data, id: Identity) -> Result
};
let offers = queries::visible_offers(&mut t).await.unwrap_or_default();
+ let contacts = queries::all_contacts(&mut t)
+ .await
+ .unwrap_or_default()
+ .into_iter()
+ .map(Arc::new)
+ .collect::>();
+
+ let offers = offers
+ .into_iter()
+ .map(|o| view::Offer::from((o, &contacts)))
+ .collect::>();
t.commit().await.ok();