@@ -3,3 +3,4 @@ CREATE DATABASE chatrpg;
\c chatrpg
\ir users.sql
+\ir purchases.sql
@@ -0,0 +1,14 @@
+CREATE TABLE IF NOT EXISTS purchases(
+ id UUID PRIMARY KEY,
+
+ user_id UUID NOT NULL REFERENCES users(id),
+ stripe_id TEXT NOT NULL,
+ status TEXT NOT NULL,
+ token_packs INT NOT NULL,
+ cost_per_token INT NOT NULL,
+ tokens_purchased INT NOT NULL,
+ cost INT NOT NULL,
+ created_at TIMESTAMPTZ NOT NULL
+);
+CREATE INDEX idx_token_purchases_user_id ON purchases(user_id);
@@ -7,4 +7,4 @@ CREATE TABLE IF NOT EXISTS users(
pass_hash TEXT NOT NULL,
tokens BIGINT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
-)
@@ -73,10 +73,13 @@ impl User {
)
.bind(user_id)
.bind(session_token)
- .fetch_one(db)
+ .fetch_optional(db)
.await?;
- Ok(user)
+ match user {
+ Some(u) => Ok(u),
+ _ => Err(HttpError::Auth)
+ }
}
pub async fn find_one_by_email(db: &PgPool, user_email: String) -> Result<User, HttpError> {