d5939db
use axum::extract::State;
use jwt::extractor::AuthUser;
use crate::error::AuthError;
use crate::features::AuthService;
use export::auth::agreement::{AcceptAgreementCmd, AcceptAgreementResp};
use export::data::{AppRequest, AppRequestData, AppResponseData};
#[utoipa::path(
post,
path = "/auth/agreements/accept",
tag = "auth",
request_body = AppRequestData<AcceptAgreementCmd>,
responses(
(status = 200, description = "Agreement acceptance recorded.", body = AppResponseData<AcceptAgreementResp>),
(status = 400, description = "Unknown agreement key or version mismatch.", body = super::super::openapi::ErrorBody),
(status = 401, description = "Missing or invalid access token.", body = super::super::openapi::ErrorBody),
(status = 404, description = "User not found.", body = super::super::openapi::ErrorBody),
),
security(
("bearer_auth" = []),
),
)]
pub(crate) async fn handler(
State(svc): State<AuthService>,
AuthUser { claims: _claims }: AuthUser,
cmd: AppRequest<AcceptAgreementCmd>,
) -> Result<AppResponseData<AcceptAgreementResp>, AuthError> {
let resp = svc
.accept_agreement(cmd.user_id, &cmd.agreement_key, &cmd.agreement_version)
.await?;
Ok(AppResponseData::ok(resp))
}