瀏覽代碼

Finish off the webhook

Lee Morgan 1 月之前
父節點
當前提交
605ddff5b0
共有 3 個文件被更改,包括 7 次插入4 次删除
  1. 2 1
      src/controllers/webhook/stripe.rs
  2. 4 2
      src/models/purchase.rs
  3. 1 1
      src/models/user.rs

+ 2 - 1
src/controllers/webhook/stripe.rs

@@ -47,7 +47,8 @@ async fn handle_success(event: Event, db: &PgPool) -> Result<(), HttpError> {
         _ => {return Err(HttpError::InvalidInput("No payment intent ID".into()))}
     };
 
-    let purchase = Purchase::update_status(db, id, Status::Succeeded).await?;
+    let p = Purchase::update_status(db, id, Status::Succeeded).await?;
+    User::add_tokens(db, p.user_id, p.pack_count * p.tokens_per_pack).await?;
 
     Ok(())
 }

+ 4 - 2
src/models/purchase.rs

@@ -1,6 +1,6 @@
 use uuid::Uuid;
 use chrono::{DateTime, Utc};
-use sqlx::{PgPool, FromRow};
+use sqlx::{PgPool, FromRow, Type};
 use crate::{
     http_error::HttpError
 };
@@ -17,6 +17,8 @@ pub struct Purchase {
     pub created_at: DateTime<Utc>
 }
 
+#[derive(Type)]
+#[sqlx(type_name = "status")]
 pub enum Status {
     Pending,
     Succeeded,
@@ -98,7 +100,7 @@ impl Purchase {
         Ok(())
     }
 
-    pub async fn update_status(db: &PgPool, stripe_id: String, status: Status) -> Result<(), HttpError> {
+    pub async fn update_status(db: &PgPool, stripe_id: String, status: Status) -> Result<Purchase, HttpError> {
         let purchase = sqlx::query_as::<_, Purchase>(
             "UPDATE purchases
             SET status = $1

+ 1 - 1
src/models/user.rs

@@ -1,6 +1,6 @@
 use uuid::Uuid;
 use chrono::{DateTime, Utc};
-use sqlx::{PgPool, FromRow, QueryBuilder};
+use sqlx::{PgPool, FromRow};
 use serde::Serialize;
 use crate::http_error::HttpError;