[AI] fix some modules, develop the big part of modules. TODO fix critical errors, update pipeline, test everything

This commit is contained in:
2026-05-16 19:16:50 +07:00
parent 0824033602
commit 1ef93c2025
42 changed files with 2780 additions and 786 deletions
+43 -12
View File
@@ -6,41 +6,72 @@ use axum::{
};
use serde::Deserialize;
use serde_json::{json, Value};
use uuid::Uuid;
use crate::{api::ApiState, db::models::User, error::AppError, modules::auth::guard::auth_guard};
#[derive(Deserialize)]
pub struct SubPayload {
pub struct InitiatePaymentPayload {
pub plan: String,
pub provider: String,
pub currency: String,
}
#[derive(Deserialize)]
pub struct ConfirmPaymentPayload {
pub invoice_id: Uuid,
pub external_tx_id: String,
}
pub fn router(state: ApiState) -> Router<ApiState> {
Router::new()
.route("/subscribe", post(buy_sub_api))
.route("/pay/initiate", post(initiate_payment_api))
.route("/pay/confirm", post(confirm_payment_api))
.route("/trial", post(activate_trial_api))
.route_layer(middleware::from_fn_with_state(state, auth_guard))
}
async fn buy_sub_api(
/// Шаг 1: Запрашиваем у провайдера данные для оплаты (адрес, ссылку и т.д.)
async fn initiate_payment_api(
Extension(user): Extension<User>,
State(state): State<ApiState>,
Json(payload): Json<SubPayload>,
Json(payload): Json<InitiatePaymentPayload>,
) -> Result<Json<Value>, AppError> {
let checkout_data = state
.billing_service
.initiate_payment(&user, &payload.plan, &payload.provider, &payload.currency)
.await?;
Ok(Json(json!({
"status": "success",
"checkout_data": checkout_data
})))
}
/// Шаг 2: Подтверждаем транзакцию после того как юзер её оплатил
async fn confirm_payment_api(
Extension(_user): Extension<User>, // В будущем можно сверять ID юзера с инвойсом
State(state): State<ApiState>,
Json(payload): Json<ConfirmPaymentPayload>,
) -> Result<Json<Value>, AppError> {
state
.billing_service
.buy_subscription(user.tg_id, &payload.plan)
.confirm_payment(payload.invoice_id, &payload.external_tx_id)
.await?;
Ok(Json(
json!({"status": "success", "message": format!("Mock payment for {} successful", payload.plan)}),
))
Ok(Json(json!({
"status": "success",
"message": "Payment verified. Uplink activated."
})))
}
async fn activate_trial_api(
Extension(user): Extension<User>,
State(state): State<ApiState>,
) -> Result<Json<Value>, AppError> {
state.billing_service.activate_trial(user.tg_id).await?;
Ok(Json(
json!({"status": "success", "message": "Trial Uplink Activated"}),
))
state.billing_service.activate_trial(&user).await?;
Ok(Json(json!({
"status": "success",
"message": "Trial Uplink Activated"
})))
}