quokka-admin 0.1.0

An admin panel for quokka
Documentation
use quokka::{helper::database::BaseRepository, state::FromState};

use crate::entity::user::{User, UserRepository};

#[derive(Clone, FromState)]
pub struct UserService {
    user_repository: UserRepository,
}

pub struct UserRegistration {
    pub username: String,
    pub password: String,
    pub email: String,
}

impl UserService {
    pub async fn register_user(
        &self,
        UserRegistration {
            username,
            mut password,
            email,
        }: UserRegistration,
    ) -> quokka::Result<User> {
        use argon2::PasswordHasher;
        let salt = argon2::password_hash::SaltString::generate(
            &mut argon2::password_hash::rand_core::OsRng,
        );
        password = argon2::Argon2::default()
            .hash_password(password.as_bytes(), &salt)
            .map_err(quokka::Error::wrap_error("Unable to hash password", 500))?
            .to_string();

        self.user_repository
            .create_entity(User {
                id: -1,
                username,
                password,
                email,
                created_at: time::OffsetDateTime::now_utc(),
                updated_at: time::OffsetDateTime::now_utc(),
            })
            .await
    }
}