mcaptcha/api/v1/account/
email.rs1use actix_identity::Identity;
7use actix_web::{web, HttpResponse, Responder};
8use db_core::UpdateEmail;
9use serde::{Deserialize, Serialize};
10
11use super::{AccountCheckPayload, AccountCheckResp};
12use crate::errors::*;
13use crate::AppData;
14
15#[derive(Clone, Debug, Deserialize, Serialize)]
16pub struct Email {
17 pub email: String,
18}
19
20#[my_codegen::post(path = "crate::V1_API_ROUTES.account.email_exists")]
21pub async fn email_exists(
22 payload: web::Json<AccountCheckPayload>,
23 data: AppData,
24) -> ServiceResult<impl Responder> {
25 let exists = data.db.email_exists(&payload.val).await?;
26
27 let resp = AccountCheckResp { exists };
28
29 Ok(HttpResponse::Ok().json(resp))
30}
31
32#[my_codegen::post(
34 path = "crate::V1_API_ROUTES.account.update_email",
35 wrap = "crate::api::v1::get_middleware()"
36)]
37async fn set_email(
38 id: Identity,
39 payload: web::Json<Email>,
40 data: AppData,
41) -> ServiceResult<impl Responder> {
42 let username = id.identity().unwrap();
43
44 data.creds.email(&payload.email)?;
45
46 let update_email = UpdateEmail {
47 username: &username,
48 new_email: &payload.email,
49 };
50
51 data.db.update_email(&update_email).await?;
52
53 Ok(HttpResponse::Ok())
54}
55
56pub fn services(cfg: &mut actix_web::web::ServiceConfig) {
57 cfg.service(email_exists);
58 cfg.service(set_email);
59}