feat: load billing adapters #125
5 changed files with 240 additions and 0 deletions
160
src/identity/adapters/input/web/employee.rs
Normal file
160
src/identity/adapters/input/web/employee.rs
Normal file
|
@ -0,0 +1,160 @@
|
|||
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
use actix_identity::Identity;
|
||||
use actix_web::{get, http::header::ContentType, post, web, HttpRequest, HttpResponse, Responder};
|
||||
use derive_builder::Builder;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use url::Url;
|
||||
use uuid::Uuid;
|
||||
|
||||
use super::errors::*;
|
||||
use super::types;
|
||||
//use crate::utils::uuid::WebGetUUIDInterfaceObj;
|
||||
|
||||
pub fn services(cfg: &mut web::ServiceConfig) {
|
||||
cfg.service(login_ui_handler);
|
||||
cfg.service(login_form_submission_handler);
|
||||
cfg.service(resend_login_otp_handler);
|
||||
|
||||
cfg.service(register_ui_handler);
|
||||
cfg.service(register_form_submission_handler);
|
||||
cfg.service(resend_verification_otp_handler);
|
||||
|
||||
cfg.service(exit_organization_ui_handler);
|
||||
cfg.service(exit_organization_form_submission_handler);
|
||||
}
|
||||
|
||||
// login handlers
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[get("/employee/login")]
|
||||
#[tracing::instrument(name = "login UI handler", skip())]
|
||||
async fn login_ui_handler() -> WebJsonRepsonse<impl Responder> {
|
||||
const LOGIN_PAGE: &str = include_str!("./employee_login.html");
|
||||
|
||||
Ok(HttpResponse::Ok()
|
||||
.insert_header(ContentType::html())
|
||||
.body(LOGIN_PAGE))
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)]
|
||||
struct EmployeeLoginPayload {
|
||||
country_code: usize,
|
||||
phone_number: u64,
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[post("/employee/login")]
|
||||
#[tracing::instrument(
|
||||
name = "Login form submission handler"
|
||||
skip(id, req, payload, identity_cqrs_exec)
|
||||
)]
|
||||
async fn login_form_submission_handler(
|
||||
identity_cqrs_exec: types::WebIdentityCqrsExec,
|
||||
req: HttpRequest,
|
||||
id: Identity,
|
||||
payload: web::Form<EmployeeLoginPayload>,
|
||||
) -> WebJsonRepsonse<impl Responder> {
|
||||
let store = "";
|
||||
|
||||
Ok(HttpResponse::Ok().json(store))
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[post("/employee/login/resend_otp")]
|
||||
#[tracing::instrument(
|
||||
name = "Resend login OTP handler",
|
||||
skip(req, identity_cqrs_exec, payload)
|
||||
)]
|
||||
async fn resend_login_otp_handler(
|
||||
identity_cqrs_exec: types::WebIdentityCqrsExec,
|
||||
req: HttpRequest,
|
||||
payload: web::Form<EmployeeLoginPayload>,
|
||||
) -> WebJsonRepsonse<impl Responder> {
|
||||
let store = "";
|
||||
|
||||
Ok(HttpResponse::Ok().json(store))
|
||||
}
|
||||
|
||||
// register handlers
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[get("/employee/register")]
|
||||
#[tracing::instrument(name = "register UI handler", skip())]
|
||||
async fn register_ui_handler() -> WebJsonRepsonse<impl Responder> {
|
||||
const REGISTER_PAGE: &str = include_str!("./employee_register.html");
|
||||
|
||||
Ok(HttpResponse::Ok()
|
||||
.insert_header(ContentType::html())
|
||||
.body(REGISTER_PAGE))
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)]
|
||||
struct EmployeeRegisterPayload {
|
||||
first_name: String,
|
||||
last_name: String,
|
||||
|
||||
country_code: usize,
|
||||
phone_number: u64,
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[post("/employee/register")]
|
||||
#[tracing::instrument(
|
||||
name = "Register form submission handler"
|
||||
skip(id, req, payload, identity_cqrs_exec)
|
||||
)]
|
||||
async fn register_form_submission_handler(
|
||||
identity_cqrs_exec: types::WebIdentityCqrsExec,
|
||||
req: HttpRequest,
|
||||
id: Identity,
|
||||
payload: web::Form<EmployeeRegisterPayload>,
|
||||
) -> WebJsonRepsonse<impl Responder> {
|
||||
let store = "";
|
||||
|
||||
Ok(HttpResponse::Ok().json(store))
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[post("/employee/phone/verify/resend_otp")]
|
||||
#[tracing::instrument(name = "Resend verification OTP", skip(id, req, identity_cqrs_exec))]
|
||||
async fn resend_verification_otp_handler(
|
||||
identity_cqrs_exec: types::WebIdentityCqrsExec,
|
||||
req: HttpRequest,
|
||||
id: Identity,
|
||||
) -> WebJsonRepsonse<impl Responder> {
|
||||
let store = "";
|
||||
|
||||
Ok(HttpResponse::Ok().json(store))
|
||||
}
|
||||
|
||||
// Delete user handlers
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[get("/employee/organization/exit")]
|
||||
#[tracing::instrument(name = "Exit organizationUI handler", skip())]
|
||||
async fn exit_organization_ui_handler() -> WebJsonRepsonse<impl Responder> {
|
||||
const EXIT_ORGANIZATION: &str = include_str!("./employee_exit_organization.html");
|
||||
|
||||
Ok(HttpResponse::Ok()
|
||||
.insert_header(ContentType::html())
|
||||
.body(EXIT_ORGANIZATION))
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
#[post("/employee/organization/exit")]
|
||||
#[tracing::instrument(
|
||||
name = "Exit organization form submission handler"
|
||||
skip(id, req, identity_cqrs_exec)
|
||||
)]
|
||||
async fn exit_organization_form_submission_handler(
|
||||
identity_cqrs_exec: types::WebIdentityCqrsExec,
|
||||
req: HttpRequest,
|
||||
id: Identity,
|
||||
) -> WebJsonRepsonse<impl Responder> {
|
||||
let store = "";
|
||||
|
||||
Ok(HttpResponse::Ok().json(store))
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Exit organization | Vanikam</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<form action="/owner/delete/user" method="post">
|
||||
<button type="submit">Exit organization</button>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
27
src/identity/adapters/input/web/employee_login.html
Normal file
27
src/identity/adapters/input/web/employee_login.html
Normal file
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Login | Vanikam</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<form action="/employee/login" method="post">
|
||||
<label for="country_code">
|
||||
Country Code
|
||||
<input type="number" name="country_code" id="country_code" value="91">
|
||||
</label>
|
||||
|
||||
<label for="number">
|
||||
Phone number
|
||||
<input type="number" name="number" id="number">
|
||||
</label>
|
||||
|
||||
<button type="submit">Login</button>
|
||||
</form>
|
||||
|
||||
<p>New here? Click <a href="/employee/register">here to register!</a></p>
|
||||
|
||||
</body>
|
||||
</html>
|
37
src/identity/adapters/input/web/employee_register.html
Normal file
37
src/identity/adapters/input/web/employee_register.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Register | Vanikam</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<form action="/employee/register" method="post">
|
||||
<label for="first_name">
|
||||
First Name
|
||||
<input type="text" name="first_name" id="first_name">
|
||||
</label>
|
||||
<label for="last_name">
|
||||
Last Name
|
||||
<input type="text" name="last_name" id="last_name">
|
||||
</label>
|
||||
|
||||
<label for="country_code">
|
||||
Country Code
|
||||
<input type="number" name="country_code" id="country_code" value="91">
|
||||
</label>
|
||||
|
||||
<label for="number">
|
||||
Phone number
|
||||
<input type="number" name="number" id="number">
|
||||
</label>
|
||||
|
||||
|
||||
<button type="submit">Register</button>
|
||||
</form>
|
||||
|
||||
<p>Already have an account? Click <a href="/employee/login">here to log in!</a></p>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -8,6 +8,7 @@ use actix_web::web;
|
|||
|
||||
use crate::identity::adapters::types;
|
||||
|
||||
mod employee;
|
||||
mod errors;
|
||||
mod owner;
|
||||
mod routes;
|
||||
|
@ -22,6 +23,7 @@ pub fn load_ctx() -> impl FnOnce(&mut web::ServiceConfig) {
|
|||
let f = move |cfg: &mut web::ServiceConfig| {
|
||||
cfg.app_data(routes);
|
||||
cfg.configure(owner::services);
|
||||
cfg.configure(employee::services);
|
||||
};
|
||||
|
||||
Box::new(f)
|
||||
|
|
Loading…
Reference in a new issue