feat: add gacha and init cms

This commit is contained in:
Maulana Sodiqin
2025-05-20 10:45:01 +07:00
parent f4b0ed0a4a
commit e63658c082
35 changed files with 976 additions and 171 deletions
@@ -18,6 +18,16 @@ pub enum PermissionsEnum {
CreatePermissions,
DeletePermissions,
UpdatePermissions,
CreateGachaClaims,
ReadDetailGachaClaims,
ReadListGachaItems,
ReadDetailGachaItems,
CreateGachaItems,
DeleteGachaItems,
UpdateGachaItems,
ReadDetailGachaRolls,
CreateGachaRolls,
ExecuteGachaRolls,
}
impl fmt::Display for PermissionsEnum {
@@ -39,6 +49,16 @@ impl fmt::Display for PermissionsEnum {
PermissionsEnum::CreatePermissions => "Create Permissions",
PermissionsEnum::DeletePermissions => "Delete Permissions",
PermissionsEnum::UpdatePermissions => "Update Permissions",
PermissionsEnum::CreateGachaClaims => "Create Gacha Claims",
PermissionsEnum::ReadDetailGachaClaims => "Read Detail Gacha Claims",
PermissionsEnum::ReadListGachaItems => "Read List Gacha Items",
PermissionsEnum::ReadDetailGachaItems => "Read Detail Gacha Items",
PermissionsEnum::CreateGachaItems => "Create Gacha Items",
PermissionsEnum::DeleteGachaItems => "Delete Gacha Items",
PermissionsEnum::UpdateGachaItems => "Update Gacha Items",
PermissionsEnum::ReadDetailGachaRolls => "Read Detail Gacha Rolls",
PermissionsEnum::CreateGachaRolls => "Create Gacha Rolls",
PermissionsEnum::ExecuteGachaRolls => "Execute Gacha Rolls",
};
write!(f, "{}", permission_str)
}
@@ -4,7 +4,7 @@ use crate::{
make_thing, query_list_with_meta,
};
use anyhow::{Result, bail};
use imphnen_utils::extract_id;
use imphnen_utils::{DetailQueryBuilder, extract_id};
pub struct PermissionsRepository<'a> {
state: &'a AppState,
@@ -19,23 +19,15 @@ impl<'a> PermissionsRepository<'a> {
&self,
meta: MetaRequestDto,
) -> Result<ResponseListSuccessDto<Vec<PermissionsItemDto>>> {
let mut conditions = vec!["is_deleted = false".into()];
if meta.search.is_some() {
conditions.push("string::contains(name, $search)".into());
}
if meta.filter_by.is_some() && meta.filter.is_some() {
let filter_by = meta.filter_by.as_ref().unwrap();
conditions.push(format!("{} = $filter", filter_by));
}
let raw_result: ResponseListSuccessDto<Vec<PermissionsSchema>> =
query_list_with_meta(
&self.state.surrealdb_ws,
&ResourceEnum::Permissions.to_string(),
&meta,
conditions,
vec!["is_deleted = false".into()],
None,
"name",
None,
Some(vec!["*"]),
None,
)
.await?;
@@ -83,16 +75,16 @@ impl<'a> PermissionsRepository<'a> {
name: String,
) -> Result<PermissionsSchema> {
let db = &self.state.surrealdb_ws;
let sql = format!(
"SELECT * FROM {} WHERE name = $name AND is_deleted = false",
ResourceEnum::Permissions.to_string()
);
let result: Vec<PermissionsSchema> =
db.query(sql).bind(("name", name.clone())).await?.take(0)?;
if let Some(permission) = result.into_iter().next() {
Ok(permission.into())
} else {
bail!("Permission not found")
let builder = DetailQueryBuilder::new(ResourceEnum::Permissions.to_string())
.with_where("name")
.where_value(name.clone())
.with_select_fields(vec!["*"]);
let sql = builder.build();
let result: Option<PermissionsSchema> =
builder.apply_bindings(db.query(sql)).await?.take(0)?;
match result {
Some(permission) => Ok(permission),
None => bail!("Permission not found"),
}
}