Skip to content

Commit 966cd8f

Browse files
committed
create admin users
1 parent 36198b6 commit 966cd8f

14 files changed

Lines changed: 176 additions & 23 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
REMOVE TABLE settings;
2+
DEFINE TABLE settings;
3+
4+
DEFINE FIELD identifier ON TABLE settings TYPE string;
5+
DEFINE FIELD setting_value ON TABLE settings TYPE string;
6+
DEFINE FIELD created_at ON TABLE settings TYPE datetime;
7+
DEFINE FIELD updated_at ON TABLE settings TYPE datetime;
8+
DEFINE FIELD created_by ON TABLE settings TYPE string;
9+
DEFINE FIELD updated_by ON TABLE settings TYPE string;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
REMOVE TABLE admin_users;
2+
DEFINE TABLE admin_users;
3+
4+
DEFINE FIELD full_name ON TABLE admin_users TYPE string;
5+
DEFINE FIELD email ON TABLE admin_users TYPE string;
6+
DEFINE FIELD password_hash ON TABLE admin_users TYPE string;
7+
DEFINE FIELD profile_image ON TABLE admin_users TYPE string;
8+
DEFINE FIELD is_super_admin ON TABLE admin_users TYPE bool;
9+
DEFINE FIELD created_by ON TABLE admin_users TYPE string;
10+
DEFINE FIELD updated_by ON TABLE admin_users TYPE string;
11+
DEFINE FIELD created_at ON TABLE admin_users TYPE datetime;
12+
DEFINE FIELD updated_at ON TABLE admin_users TYPE datetime;
13+
DEFINE INDEX admin_users_email_index ON TABLE admin_users COLUMNS email UNIQUE;

proto/misc.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ message HealthCheckResponse {
1111
}
1212

1313
message SetupRequest {
14+
string full_name = 1;
15+
string email = 2;
16+
string password = 3;
1417
}
1518

1619
message SetupResponse {

src/adapters/grpc_api/misc_api.rs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
use tonic::{Request, Response, Status};
33

44
use crate::{
5-
application::use_cases::misc_use_case::MiscUseCase,
6-
infra::grpc::misc::{
7-
misc_server::Misc, HealthCheckRequest, HealthCheckResponse, SetupRequest, SetupResponse,
8-
},
5+
application::use_cases::misc_use_case::MiscUseCase, domain::models::admin_user::StorableAdminUser, infra::grpc::misc::{
6+
HealthCheckRequest, HealthCheckResponse, SetupRequest, SetupResponse, misc_server::Misc
7+
}
98
};
109

1110

@@ -32,19 +31,33 @@ impl Misc for MiscGrpcApi {
3231
) -> Result<Response<HealthCheckResponse>, Status> {
3332
println!("Got a request: {:?}", request);
3433

35-
let request = HealthCheckResponse { status: true };
34+
let response = HealthCheckResponse { status: true };
3635

37-
Ok(Response::new(request))
36+
Ok(Response::new(response))
3837
}
3938

4039
async fn setup(
4140
&self,
4241
request: Request<SetupRequest>,
4342
) -> Result<Response<SetupResponse>, Status> {
44-
println!("Got a setup request: {:?}", request);
43+
let request = request.into_inner();
44+
45+
// validate the request and convert it to a storable admin user
46+
47+
let mut storable_admin_user: StorableAdminUser = match request.try_into() {
48+
Ok(req) => req,
49+
Err(e) => return Err(Status::invalid_argument(e.to_string())),
50+
};
51+
52+
storable_admin_user.logged_in_user = "ApplicationSetupProcess".to_string();
53+
storable_admin_user.is_super_admin = true;
54+
55+
// @todo hash the password
56+
57+
println!("Got a setup request: {:?}", storable_admin_user);
4558

4659
// Think of implementing a generic result handler
47-
let setup_result = match self.misc_use_case.setup().await {
60+
let setup_result = match self.misc_use_case.setup(storable_admin_user).await {
4861
Ok(result) => result,
4962
Err(e) => return Err(Status::internal(e.to_string())),
5063
};

src/adapters/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
pub mod grpc_api;
2+
pub mod requests;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
use crate::{domain::models::admin_user::StorableAdminUser, infra::grpc::misc::SetupRequest};
2+
use crate::error::Error;
3+
use crate::error::Result;
4+
5+
impl TryFrom<SetupRequest> for StorableAdminUser {
6+
type Error = Error;
7+
fn try_from(val: SetupRequest) -> Result<StorableAdminUser> {
8+
Ok(StorableAdminUser {
9+
full_name: val.full_name,
10+
email: val.email,
11+
password_hash: val.password,
12+
logged_in_user: String::from(""),
13+
profile_image: String::from(""),
14+
is_super_admin: false,
15+
})
16+
}
17+
}

src/adapters/requests/misc/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod misc_request;

src/adapters/requests/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod misc;

src/application/use_cases/misc_use_case.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::sync::Arc;
2+
use crate::domain::models::admin_user::StorableAdminUser;
23
use crate::error::Result;
34
use crate::infra::repositories::misc_repository::MiscRepository;
45

@@ -12,7 +13,7 @@ impl MiscUseCase {
1213
Self { misc_repository }
1314
}
1415

15-
pub async fn setup(&self) -> Result<bool> {
16-
self.misc_repository.setup().await
16+
pub async fn setup(&self, storable_admin_user: StorableAdminUser) -> Result<bool> {
17+
self.misc_repository.setup(storable_admin_user).await
1718
}
1819
}

src/domain/models/admin_user.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
use serde::{Deserialize, Serialize};
2+
3+
4+
5+
// id
6+
7+
8+
#[derive(Debug, Serialize, Deserialize)]
9+
pub struct StorableAdminUser {
10+
pub full_name: String,
11+
pub profile_image: String,
12+
pub is_super_admin: bool,
13+
pub email: String,
14+
pub password_hash: String,
15+
pub logged_in_user: String,
16+
}

0 commit comments

Comments
 (0)