Add API method for checking invoice status
This commit is contained in:
parent
383fc13059
commit
86fe717a77
4 changed files with 67 additions and 2 deletions
|
@ -773,6 +773,26 @@ paths:
|
||||||
description: Sender or recipient not found.
|
description: Sender or recipient not found.
|
||||||
418:
|
418:
|
||||||
description: Blockchain integration is not enabled.
|
description: Blockchain integration is not enabled.
|
||||||
|
/api/v1/subscriptions/invoices/{invoice_id}:
|
||||||
|
get:
|
||||||
|
summary: View information about an invoice.
|
||||||
|
parameters:
|
||||||
|
- name: invoice_id
|
||||||
|
in: path
|
||||||
|
description: Invoice ID
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
format: uuid
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Successful operation
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/Invoice'
|
||||||
|
404:
|
||||||
|
description: Invoice not found
|
||||||
/api/v1/timelines/public:
|
/api/v1/timelines/public:
|
||||||
get:
|
get:
|
||||||
summary: View local public posts.
|
summary: View local public posts.
|
||||||
|
@ -1052,6 +1072,14 @@ components:
|
||||||
payment_address:
|
payment_address:
|
||||||
description: Payment address.
|
description: Payment address.
|
||||||
type: string
|
type: string
|
||||||
|
status:
|
||||||
|
description: Invoice status.
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- open
|
||||||
|
- paid
|
||||||
|
- forwarded
|
||||||
|
- timeout
|
||||||
Mention:
|
Mention:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
|
|
@ -2,7 +2,7 @@ use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::models::invoices::types::DbInvoice;
|
use crate::models::invoices::types::{DbInvoice, InvoiceStatus};
|
||||||
use crate::models::profiles::types::PaymentOption;
|
use crate::models::profiles::types::PaymentOption;
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
|
@ -17,15 +17,23 @@ pub struct Invoice {
|
||||||
pub sender_id: Uuid,
|
pub sender_id: Uuid,
|
||||||
pub recipient_id: Uuid,
|
pub recipient_id: Uuid,
|
||||||
pub payment_address: String,
|
pub payment_address: String,
|
||||||
|
pub status: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<DbInvoice> for Invoice {
|
impl From<DbInvoice> for Invoice {
|
||||||
fn from(value: DbInvoice) -> Self {
|
fn from(value: DbInvoice) -> Self {
|
||||||
|
let status = match value.invoice_status {
|
||||||
|
InvoiceStatus::Open => "open",
|
||||||
|
InvoiceStatus::Paid => "paid",
|
||||||
|
InvoiceStatus::Forwarded => "forwarded",
|
||||||
|
InvoiceStatus::Timeout => "timeout",
|
||||||
|
};
|
||||||
Self {
|
Self {
|
||||||
id: value.id,
|
id: value.id,
|
||||||
sender_id: value.sender_id,
|
sender_id: value.sender_id,
|
||||||
recipient_id: value.recipient_id,
|
recipient_id: value.recipient_id,
|
||||||
payment_address: value.payment_address,
|
payment_address: value.payment_address,
|
||||||
|
status: status.to_string(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use actix_web::{get, post, web, HttpResponse, Scope};
|
use actix_web::{get, post, web, HttpResponse, Scope};
|
||||||
use actix_web_httpauth::extractors::bearer::BearerAuth;
|
use actix_web_httpauth::extractors::bearer::BearerAuth;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::activitypub::builders::update_person::prepare_update_person;
|
use crate::activitypub::builders::update_person::prepare_update_person;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
|
@ -12,7 +13,7 @@ use crate::ethereum::subscriptions::{
|
||||||
};
|
};
|
||||||
use crate::mastodon_api::accounts::types::Account;
|
use crate::mastodon_api::accounts::types::Account;
|
||||||
use crate::mastodon_api::oauth::auth::get_current_user;
|
use crate::mastodon_api::oauth::auth::get_current_user;
|
||||||
use crate::models::invoices::queries::create_invoice;
|
use crate::models::invoices::queries::{create_invoice, get_invoice_by_id};
|
||||||
use crate::models::profiles::queries::{
|
use crate::models::profiles::queries::{
|
||||||
get_profile_by_id,
|
get_profile_by_id,
|
||||||
update_profile,
|
update_profile,
|
||||||
|
@ -193,6 +194,17 @@ async fn create_invoice_view(
|
||||||
Ok(HttpResponse::Ok().json(invoice))
|
Ok(HttpResponse::Ok().json(invoice))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[get("/invoices/{invoice_id}")]
|
||||||
|
async fn get_invoice(
|
||||||
|
db_pool: web::Data<Pool>,
|
||||||
|
invoice_id: web::Path<Uuid>,
|
||||||
|
) -> Result<HttpResponse, HttpError> {
|
||||||
|
let db_client = &**get_database_client(&db_pool).await?;
|
||||||
|
let db_invoice = get_invoice_by_id(db_client, &invoice_id).await?;
|
||||||
|
let invoice = Invoice::from(db_invoice);
|
||||||
|
Ok(HttpResponse::Ok().json(invoice))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn subscription_api_scope() -> Scope {
|
pub fn subscription_api_scope() -> Scope {
|
||||||
web::scope("/api/v1/subscriptions")
|
web::scope("/api/v1/subscriptions")
|
||||||
.route("/authorize", web::get().to(authorize_subscription))
|
.route("/authorize", web::get().to(authorize_subscription))
|
||||||
|
@ -200,4 +212,5 @@ pub fn subscription_api_scope() -> Scope {
|
||||||
.route("/enable", web::post().to(subscriptions_enabled))
|
.route("/enable", web::post().to(subscriptions_enabled))
|
||||||
.service(find_subscription)
|
.service(find_subscription)
|
||||||
.service(create_invoice_view)
|
.service(create_invoice_view)
|
||||||
|
.service(get_invoice)
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,22 @@ pub async fn create_invoice(
|
||||||
Ok(invoice)
|
Ok(invoice)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_invoice_by_id(
|
||||||
|
db_client: &impl GenericClient,
|
||||||
|
invoice_id: &Uuid,
|
||||||
|
) -> Result<DbInvoice, DatabaseError> {
|
||||||
|
let maybe_row = db_client.query_opt(
|
||||||
|
"
|
||||||
|
SELECT invoice
|
||||||
|
FROM invoice WHERE id = $1
|
||||||
|
",
|
||||||
|
&[&invoice_id],
|
||||||
|
).await?;
|
||||||
|
let row = maybe_row.ok_or(DatabaseError::NotFound("invoice"))?;
|
||||||
|
let invoice = row.try_get("invoice")?;
|
||||||
|
Ok(invoice)
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn get_invoice_by_address(
|
pub async fn get_invoice_by_address(
|
||||||
db_client: &impl GenericClient,
|
db_client: &impl GenericClient,
|
||||||
chain_id: &ChainId,
|
chain_id: &ChainId,
|
||||||
|
|
Loading…
Reference in a new issue