add: economy api

This commit is contained in:
trisua 2025-08-07 00:22:37 -04:00
parent 0a3ce3e9fe
commit 3c4ce1fae5
6 changed files with 51 additions and 16 deletions

View file

@ -0,0 +1,28 @@
use crate::{get_user_from_token, State, cookie::CookieJar};
use axum::{response::IntoResponse, Extension, Json};
use tetratto_core::model::{economy::CoinTransfer, oauth, ApiReturn, Error};
use super::CreateCoinTransfer;
pub async fn create_request(
jar: CookieJar,
Extension(data): Extension<State>,
Json(req): Json<CreateCoinTransfer>,
) -> impl IntoResponse {
let data = &(data.read().await).0;
let user = match get_user_from_token!(jar, data, oauth::AppScope::UserSendCoins) {
Some(ua) => ua,
None => return Json(Error::NotAllowed.into()),
};
match data
.create_transfer(CoinTransfer::new(user.id, req.receiver, req.amount))
.await
{
Ok(s) => Json(ApiReturn {
ok: true,
message: "Stack created".to_string(),
payload: s.id.to_string(),
}),
Err(e) => Json(e.into()),
}
}

View file

@ -4,6 +4,7 @@ pub mod auth;
pub mod channels;
pub mod communities;
pub mod domains;
pub mod economy;
pub mod journals;
pub mod letters;
pub mod notes;
@ -705,6 +706,8 @@ pub fn routes() -> Router {
.route("/letters/{id}/read", post(letters::add_read_request))
.route("/letters/sent", get(letters::list_sent_request))
.route("/letters/received", get(letters::list_received_request))
// economy
.route("/transfers", post(economy::create_request))
}
pub fn lw_routes() -> Router {
@ -1212,3 +1215,9 @@ pub struct CreateLetter {
pub content: String,
pub replying_to: String,
}
#[derive(Deserialize)]
pub struct CreateCoinTransfer {
pub receiver: usize,
pub amount: i32,
}