quokka-admin 0.1.0

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

#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, sqlx::FromRow)]
pub struct Test {
    pub id: i32,
    pub name: String,
    pub age: i32,
    pub created_at: time::OffsetDateTime,
    pub updated_at: time::OffsetDateTime,
}

#[derive(Clone, FromState)]
pub struct TestRepository {
    database: Database,
}

impl BaseRepository for TestRepository {
    type Entity = Test;

    type PkType = i32;

    #[query_all(
        query = "SELECT * FROM test ORDER BY {#order_by} {#direction.to_string()} LIMIT {#page_size} OFFSET + {#page_size * page}"
    )]
    async fn get_entities(
        &self,
        page: i32,
        page_size: i32,
        order_by: &'static str,
        direction: quokka::helper::database::PaginationOrder,
    ) -> quokka::Result<Vec<Self::Entity>>;

    #[query_one(query = "SELECT * FROM test WHERE id = {pk}")]
    async fn get_entity(&self, pk: Self::PkType) -> quokka::Result<Self::Entity>;

    #[execute(
        query = "UPDATE test SET updated_at = NOW(), name = {entity.name}, age = {entity.age} WHERE id = {entity.id}",
        write
    )]
    async fn update_entity(&self, entity: Self::Entity) -> quokka::Result<u64>;

    #[query_one(
        query = "INSERT INTO test (name, age) VALUES ({entity.name}, {entity.age}) RETURNING *",
        write
    )]
    async fn create_entity(&self, entity: Self::Entity) -> quokka::Result<Self::Entity>;

    #[execute(query = "DELETE FROM test WHERE id = {pk}", write)]
    async fn delete_entity(&self, pk: Self::PkType) -> quokka::Result<u64>;
}