account.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. use actix_web::{post, web, HttpResponse, HttpRequest};
  2. use mongodb::Database;
  3. use crate::models::{account::Account, user::User};
  4. use crate::auth::user_auth;
  5. use crate::app_error::AppError;
  6. use crate::dto;
  7. #[post("/api/account")]
  8. pub async fn create_route(
  9. db: web::Data<Database>,
  10. req: HttpRequest,
  11. body: web::Json<dto::account::CreateInput>
  12. ) -> Result<HttpResponse, AppError> {
  13. let user = user_auth(&db, &req).await?;
  14. let account_collection = db.collection::<Account>("accounts");
  15. let account_id = Account::insert(&account_collection, body.into_inner(), user).await?;
  16. let account = Account::find_by_id(&account_collection, account_id).await?;
  17. Ok(HttpResponse::Ok().json(response_account(account)))
  18. }
  19. fn validate_account_ownership(account: &Account, user: &User) -> Result<(), AppError>{
  20. if user._id.as_ref() == Some(&account.user) {
  21. Ok(())
  22. } else {
  23. Err(AppError::Auth)
  24. }
  25. }
  26. fn response_account(account: Account) -> dto::account::ResponseAccount {
  27. dto::account::ResponseAccount {
  28. data: account.data,
  29. created_at: account.created_at.timestamp_millis()
  30. }
  31. }