From eb05ea5994157d728ebe02d400c2f6a170f0ccc1 Mon Sep 17 00:00:00 2001 From: Maulana Sodiqin Date: Mon, 7 Apr 2025 00:50:57 +0700 Subject: [PATCH] feat: add gacha service --- .../src/v1/analytics/.gitkeep | 0 .../src/v1/articles/.gitkeep | 0 .../src/v1/courses/.gitkeep | 0 imphnen-dimentorin-service/src/v2/.gitkeep | 0 .../src/v1/gacha/gacha_dto.rs | 93 ------------------- .../src/v1/gacha/gacha_schema.rs | 92 ------------------ imphnen-gacha-service/src/v1/gacha/mod.rs | 6 -- .../v1/gacha_claim/gacha_claim_controller.rs | 0 .../src/v1/gacha_claim/gacha_claim_dto.rs | 33 +++++++ .../v1/gacha_claim/gacha_claim_repository.rs | 42 +++++++++ .../src/v1/gacha_claim/gacha_claim_schema.rs | 35 +++++++ .../src/v1/gacha_claim/gacha_claim_service.rs | 0 .../src/v1/gacha_claim/mod.rs | 7 ++ .../v1/gacha_item/gacha_item_controller.rs | 0 .../src/v1/gacha_item/gacha_item_dto.rs | 30 ++++++ .../gacha_item_repository.rs} | 61 +----------- .../src/v1/gacha_item/gacha_item_schema.rs | 29 ++++++ .../src/v1/gacha_item/gacha_item_service.rs | 0 .../src/v1/gacha_item/mod.rs | 7 ++ .../v1/gacha_roll/gacha_roll_controller.rs | 0 .../src/v1/gacha_roll/gacha_roll_dto.rs | 38 ++++++++ .../v1/gacha_roll/gacha_roll_repository.rs | 39 ++++++++ .../src/v1/gacha_roll/gacha_roll_schema.rs | 34 +++++++ .../src/v1/gacha_roll/gacha_roll_service.rs | 0 .../src/v1/gacha_roll/mod.rs | 7 ++ imphnen-gacha-service/src/v1/mod.rs | 9 +- imphnen-gacha-service/src/v2/.gitkeep | 0 imphnen-gateway-service/src/middleware.rs | 7 +- .../src/v1/roles/roles_enum.rs | 2 + imphnen-iam-service/src/v2/.gitkeep | 0 30 files changed, 319 insertions(+), 252 deletions(-) rename imphnen-gacha-service/src/v1/gacha/gacha_controller.rs => imphnen-dimentorin-service/src/v1/analytics/.gitkeep (100%) rename imphnen-gacha-service/src/v1/gacha/gacha_service.rs => imphnen-dimentorin-service/src/v1/articles/.gitkeep (100%) create mode 100644 imphnen-dimentorin-service/src/v1/courses/.gitkeep create mode 100644 imphnen-dimentorin-service/src/v2/.gitkeep delete mode 100644 imphnen-gacha-service/src/v1/gacha/gacha_dto.rs delete mode 100644 imphnen-gacha-service/src/v1/gacha/gacha_schema.rs delete mode 100644 imphnen-gacha-service/src/v1/gacha/mod.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_controller.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_dto.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_repository.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_schema.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_service.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_claim/mod.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_item/gacha_item_controller.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_item/gacha_item_dto.rs rename imphnen-gacha-service/src/v1/{gacha/gacha_repository.rs => gacha_item/gacha_item_repository.rs} (62%) create mode 100644 imphnen-gacha-service/src/v1/gacha_item/gacha_item_schema.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_item/gacha_item_service.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_item/mod.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_controller.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_dto.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_repository.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_schema.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_service.rs create mode 100644 imphnen-gacha-service/src/v1/gacha_roll/mod.rs create mode 100644 imphnen-gacha-service/src/v2/.gitkeep create mode 100644 imphnen-iam-service/src/v2/.gitkeep diff --git a/imphnen-gacha-service/src/v1/gacha/gacha_controller.rs b/imphnen-dimentorin-service/src/v1/analytics/.gitkeep similarity index 100% rename from imphnen-gacha-service/src/v1/gacha/gacha_controller.rs rename to imphnen-dimentorin-service/src/v1/analytics/.gitkeep diff --git a/imphnen-gacha-service/src/v1/gacha/gacha_service.rs b/imphnen-dimentorin-service/src/v1/articles/.gitkeep similarity index 100% rename from imphnen-gacha-service/src/v1/gacha/gacha_service.rs rename to imphnen-dimentorin-service/src/v1/articles/.gitkeep diff --git a/imphnen-dimentorin-service/src/v1/courses/.gitkeep b/imphnen-dimentorin-service/src/v1/courses/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-dimentorin-service/src/v2/.gitkeep b/imphnen-dimentorin-service/src/v2/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-gacha-service/src/v1/gacha/gacha_dto.rs b/imphnen-gacha-service/src/v1/gacha/gacha_dto.rs deleted file mode 100644 index f3fe2a1..0000000 --- a/imphnen-gacha-service/src/v1/gacha/gacha_dto.rs +++ /dev/null @@ -1,93 +0,0 @@ -use serde::{Deserialize, Serialize}; -use surrealdb::sql::Thing; -use utoipa::ToSchema; -use validator::Validate; - -#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] -pub struct GachaItemRequestDto { - #[validate(length(min = 1, message = "Item name must not be empty"))] - pub name: String, - #[validate(length(min = 1, message = "Image URL must not be empty"))] - pub image_url: String, -} - -#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] -pub struct GachaClaimRequestDto { - #[validate(length(min = 1, message = "User ID must not be empty"))] - pub user_id: String, - - #[validate(length(min = 1, message = "Item ID must not be empty"))] - pub item_id: String, -} - -#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] -pub struct GachaRollRequestDto { - #[validate(length(min = 1, message = "Item ID must not be empty"))] - pub item_id: String, - - #[validate(range(min = 1, message = "Weight must be greater than zero"))] - pub weight: f32, - - #[validate(range(min = 1, message = "Quantity must be at least 1"))] - pub quantity: i32, -} - -#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] -pub struct GachaItemDto { - pub id: String, - pub name: String, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct GachaItemDtoRaw { - pub id: Thing, - pub name: String, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] -pub struct GachaClaimDto { - pub id: String, - pub user: String, - pub item: String, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct GachaClaimDtoRaw { - pub id: Thing, - pub user: Thing, - pub item: Thing, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] -pub struct GachaRollDto { - pub id: String, - pub item: String, - pub weight: String, - pub quantity: i32, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct GachaRollDtoRaw { - pub id: Thing, - pub item: Thing, - pub weight: String, - pub quantity: i32, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} diff --git a/imphnen-gacha-service/src/v1/gacha/gacha_schema.rs b/imphnen-gacha-service/src/v1/gacha/gacha_schema.rs deleted file mode 100644 index 5f8e50f..0000000 --- a/imphnen-gacha-service/src/v1/gacha/gacha_schema.rs +++ /dev/null @@ -1,92 +0,0 @@ -use crate::{make_thing, ResourceEnum}; -use serde::{Deserialize, Serialize}; -use surrealdb::{sql::Thing, Uuid}; - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct GachaItemSchema { - pub id: Thing, - pub name: String, - pub image_url: String, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} - -impl Default for GachaItemSchema { - fn default() -> Self { - GachaItemSchema { - id: make_thing( - &ResourceEnum::GachaItems.to_string(), - &Uuid::new_v4().to_string(), - ), - name: String::new(), - image_url: String::new(), - is_deleted: false, - created_at: None, - updated_at: None, - } - } -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct GachaClaimSchema { - pub id: Thing, - pub user: Thing, - pub item: Thing, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} - -impl Default for GachaClaimSchema { - fn default() -> Self { - GachaClaimSchema { - id: make_thing( - &ResourceEnum::GachaClaims.to_string(), - &Uuid::new_v4().to_string(), - ), - user: make_thing( - &ResourceEnum::Users.to_string(), - &Uuid::new_v4().to_string(), - ), - item: make_thing( - &ResourceEnum::GachaItems.to_string(), - &Uuid::new_v4().to_string(), - ), - is_deleted: false, - created_at: None, - updated_at: None, - } - } -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct GachaRollSchema { - pub id: Thing, - pub item: Thing, - pub weight: f32, - pub quantity: i32, - pub is_deleted: bool, - pub created_at: Option, - pub updated_at: Option, -} - -impl Default for GachaRollSchema { - fn default() -> Self { - GachaRollSchema { - id: make_thing( - &ResourceEnum::GachaRolls.to_string(), - &Uuid::new_v4().to_string(), - ), - item: make_thing( - &ResourceEnum::GachaItems.to_string(), - &Uuid::new_v4().to_string(), - ), - weight: 0.2, - quantity: 2, - is_deleted: false, - created_at: None, - updated_at: None, - } - } -} diff --git a/imphnen-gacha-service/src/v1/gacha/mod.rs b/imphnen-gacha-service/src/v1/gacha/mod.rs deleted file mode 100644 index 6d8e216..0000000 --- a/imphnen-gacha-service/src/v1/gacha/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod gacha_dto; -pub mod gacha_repository; -pub mod gacha_schema; - -pub use gacha_repository::*; -pub use gacha_schema::*; diff --git a/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_controller.rs b/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_controller.rs new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_dto.rs b/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_dto.rs new file mode 100644 index 0000000..d39ed2a --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_dto.rs @@ -0,0 +1,33 @@ +use serde::{Deserialize, Serialize}; +use surrealdb::sql::Thing; +use utoipa::ToSchema; +use validator::Validate; + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] +pub struct GachaClaimRequestDto { + #[validate(length(min = 1, message = "User ID must not be empty"))] + pub user_id: String, + + #[validate(length(min = 1, message = "Item ID must not be empty"))] + pub item_id: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] +pub struct GachaClaimDto { + pub id: String, + pub user: String, + pub item: String, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct GachaClaimDtoRaw { + pub id: Thing, + pub user: Thing, + pub item: Thing, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} diff --git a/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_repository.rs b/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_repository.rs new file mode 100644 index 0000000..749bfec --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_repository.rs @@ -0,0 +1,42 @@ +use super::GachaClaimSchema; +use crate::{AppState, ResourceEnum}; +use anyhow::{Result, bail}; + +pub struct GachaClaimRepository<'a> { + state: &'a AppState, +} + +impl<'a> GachaClaimRepository<'a> { + pub fn new(state: &'a AppState) -> Self { + Self { state } + } + + pub async fn query_gacha_claim_by_id( + &self, + id: String, + ) -> Result { + let db = &self.state.surrealdb_ws; + let result: Option = db + .select((ResourceEnum::GachaClaims.to_string(), id.clone())) + .await?; + match result { + Some(claim) if !claim.is_deleted => Ok(claim), + _ => bail!("Gacha Claim not found"), + } + } + + pub async fn query_create_gacha_claim( + &self, + data: GachaClaimSchema, + ) -> Result { + let db = &self.state.surrealdb_ws; + let record: Option = db + .create(ResourceEnum::GachaClaims.to_string()) + .content(data) + .await?; + match record { + Some(_) => Ok("Success create Gacha Claim".into()), + None => bail!("Failed to create Gacha Claim"), + } + } +} diff --git a/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_schema.rs b/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_schema.rs new file mode 100644 index 0000000..ce2fb1e --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_schema.rs @@ -0,0 +1,35 @@ +use crate::{ResourceEnum, make_thing}; +use serde::{Deserialize, Serialize}; +use surrealdb::{Uuid, sql::Thing}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct GachaClaimSchema { + pub id: Thing, + pub user: Thing, + pub item: Thing, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} + +impl Default for GachaClaimSchema { + fn default() -> Self { + GachaClaimSchema { + id: make_thing( + &ResourceEnum::GachaClaims.to_string(), + &Uuid::new_v4().to_string(), + ), + user: make_thing( + &ResourceEnum::Users.to_string(), + &Uuid::new_v4().to_string(), + ), + item: make_thing( + &ResourceEnum::GachaItems.to_string(), + &Uuid::new_v4().to_string(), + ), + is_deleted: false, + created_at: None, + updated_at: None, + } + } +} diff --git a/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_service.rs b/imphnen-gacha-service/src/v1/gacha_claim/gacha_claim_service.rs new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-gacha-service/src/v1/gacha_claim/mod.rs b/imphnen-gacha-service/src/v1/gacha_claim/mod.rs new file mode 100644 index 0000000..bede441 --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_claim/mod.rs @@ -0,0 +1,7 @@ +pub mod gacha_claim_dto; +pub mod gacha_claim_repository; +pub mod gacha_claim_schema; + +pub use gacha_claim_dto::*; +pub use gacha_claim_repository::*; +pub use gacha_claim_schema::*; diff --git a/imphnen-gacha-service/src/v1/gacha_item/gacha_item_controller.rs b/imphnen-gacha-service/src/v1/gacha_item/gacha_item_controller.rs new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-gacha-service/src/v1/gacha_item/gacha_item_dto.rs b/imphnen-gacha-service/src/v1/gacha_item/gacha_item_dto.rs new file mode 100644 index 0000000..62665ca --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_item/gacha_item_dto.rs @@ -0,0 +1,30 @@ +use serde::{Deserialize, Serialize}; +use surrealdb::sql::Thing; +use utoipa::ToSchema; +use validator::Validate; + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] +pub struct GachaItemRequestDto { + #[validate(length(min = 1, message = "Item name must not be empty"))] + pub name: String, + #[validate(length(min = 1, message = "Image URL must not be empty"))] + pub image_url: String, +} + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] +pub struct GachaItemDto { + pub id: String, + pub name: String, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct GachaItemDtoRaw { + pub id: Thing, + pub name: String, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} diff --git a/imphnen-gacha-service/src/v1/gacha/gacha_repository.rs b/imphnen-gacha-service/src/v1/gacha_item/gacha_item_repository.rs similarity index 62% rename from imphnen-gacha-service/src/v1/gacha/gacha_repository.rs rename to imphnen-gacha-service/src/v1/gacha_item/gacha_item_repository.rs index bb8dd01..5c608cb 100644 --- a/imphnen-gacha-service/src/v1/gacha/gacha_repository.rs +++ b/imphnen-gacha-service/src/v1/gacha_item/gacha_item_repository.rs @@ -1,15 +1,15 @@ -use super::{GachaClaimSchema, GachaItemSchema, GachaRollSchema}; +use super::GachaItemSchema; use crate::{ AppState, MetaRequestDto, ResourceEnum, ResponseListSuccessDto, get_id, make_thing, query_list_with_meta, }; use anyhow::{Result, bail}; -pub struct GachaRepository<'a> { +pub struct GachaItemRepository<'a> { state: &'a AppState, } -impl<'a> GachaRepository<'a> { +impl<'a> GachaItemRepository<'a> { pub fn new(state: &'a AppState) -> Self { Self { state } } @@ -97,59 +97,4 @@ impl<'a> GachaRepository<'a> { None => bail!("Failed to delete Gacha Item"), } } - - pub async fn query_gacha_claim_by_id( - &self, - id: String, - ) -> Result { - let db = &self.state.surrealdb_ws; - let result: Option = db - .select((ResourceEnum::GachaClaims.to_string(), id.clone())) - .await?; - match result { - Some(claim) if !claim.is_deleted => Ok(claim), - _ => bail!("Gacha Claim not found"), - } - } - - pub async fn query_create_gacha_claim( - &self, - data: GachaClaimSchema, - ) -> Result { - let db = &self.state.surrealdb_ws; - let record: Option = db - .create(ResourceEnum::GachaClaims.to_string()) - .content(data) - .await?; - match record { - Some(_) => Ok("Success create Gacha Claim".into()), - None => bail!("Failed to create Gacha Claim"), - } - } - - pub async fn query_gacha_roll_by_id(&self, id: String) -> Result { - let db = &self.state.surrealdb_ws; - let result: Option = db - .select((ResourceEnum::GachaRolls.to_string(), id.clone())) - .await?; - match result { - Some(roll) if !roll.is_deleted => Ok(roll), - _ => bail!("Gacha Roll not found"), - } - } - - pub async fn query_create_gacha_roll( - &self, - data: GachaRollSchema, - ) -> Result { - let db = &self.state.surrealdb_ws; - let record: Option = db - .create(ResourceEnum::GachaRolls.to_string()) - .content(data) - .await?; - match record { - Some(_) => Ok("Success create Gacha Roll".into()), - None => bail!("Failed to create Gacha Roll"), - } - } } diff --git a/imphnen-gacha-service/src/v1/gacha_item/gacha_item_schema.rs b/imphnen-gacha-service/src/v1/gacha_item/gacha_item_schema.rs new file mode 100644 index 0000000..7e8a613 --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_item/gacha_item_schema.rs @@ -0,0 +1,29 @@ +use crate::{ResourceEnum, make_thing}; +use serde::{Deserialize, Serialize}; +use surrealdb::{Uuid, sql::Thing}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct GachaItemSchema { + pub id: Thing, + pub name: String, + pub image_url: String, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} + +impl Default for GachaItemSchema { + fn default() -> Self { + GachaItemSchema { + id: make_thing( + &ResourceEnum::GachaItems.to_string(), + &Uuid::new_v4().to_string(), + ), + name: String::new(), + image_url: String::new(), + is_deleted: false, + created_at: None, + updated_at: None, + } + } +} diff --git a/imphnen-gacha-service/src/v1/gacha_item/gacha_item_service.rs b/imphnen-gacha-service/src/v1/gacha_item/gacha_item_service.rs new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-gacha-service/src/v1/gacha_item/mod.rs b/imphnen-gacha-service/src/v1/gacha_item/mod.rs new file mode 100644 index 0000000..68c22fd --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_item/mod.rs @@ -0,0 +1,7 @@ +pub mod gacha_item_dto; +pub mod gacha_item_repository; +pub mod gacha_item_schema; + +pub use gacha_item_dto::*; +pub use gacha_item_repository::*; +pub use gacha_item_schema::*; diff --git a/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_controller.rs b/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_controller.rs new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_dto.rs b/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_dto.rs new file mode 100644 index 0000000..b6d5981 --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_dto.rs @@ -0,0 +1,38 @@ +use serde::{Deserialize, Serialize}; +use surrealdb::sql::Thing; +use utoipa::ToSchema; +use validator::Validate; + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] +pub struct GachaRollRequestDto { + #[validate(length(min = 1, message = "Item ID must not be empty"))] + pub item_id: String, + + #[validate(range(min = 1, message = "Weight must be greater than zero"))] + pub weight: f32, + + #[validate(range(min = 1, message = "Quantity must be at least 1"))] + pub quantity: i32, +} + +#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] +pub struct GachaRollDto { + pub id: String, + pub item: String, + pub weight: String, + pub quantity: i32, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct GachaRollDtoRaw { + pub id: Thing, + pub item: Thing, + pub weight: String, + pub quantity: i32, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} diff --git a/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_repository.rs b/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_repository.rs new file mode 100644 index 0000000..04df5d6 --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_repository.rs @@ -0,0 +1,39 @@ +use super::GachaRollSchema; +use crate::{AppState, ResourceEnum}; +use anyhow::{Result, bail}; + +pub struct GachaRollRepository<'a> { + state: &'a AppState, +} + +impl<'a> GachaRollRepository<'a> { + pub fn new(state: &'a AppState) -> Self { + Self { state } + } + + pub async fn query_gacha_roll_by_id(&self, id: String) -> Result { + let db = &self.state.surrealdb_ws; + let result: Option = db + .select((ResourceEnum::GachaRolls.to_string(), id.clone())) + .await?; + match result { + Some(roll) if !roll.is_deleted => Ok(roll), + _ => bail!("Gacha Roll not found"), + } + } + + pub async fn query_create_gacha_roll( + &self, + data: GachaRollSchema, + ) -> Result { + let db = &self.state.surrealdb_ws; + let record: Option = db + .create(ResourceEnum::GachaRolls.to_string()) + .content(data) + .await?; + match record { + Some(_) => Ok("Success create Gacha Roll".into()), + None => bail!("Failed to create Gacha Roll"), + } + } +} diff --git a/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_schema.rs b/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_schema.rs new file mode 100644 index 0000000..eebf2a5 --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_schema.rs @@ -0,0 +1,34 @@ +use crate::{ResourceEnum, make_thing}; +use serde::{Deserialize, Serialize}; +use surrealdb::{Uuid, sql::Thing}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct GachaRollSchema { + pub id: Thing, + pub item: Thing, + pub weight: f32, + pub quantity: i32, + pub is_deleted: bool, + pub created_at: Option, + pub updated_at: Option, +} + +impl Default for GachaRollSchema { + fn default() -> Self { + GachaRollSchema { + id: make_thing( + &ResourceEnum::GachaRolls.to_string(), + &Uuid::new_v4().to_string(), + ), + item: make_thing( + &ResourceEnum::GachaItems.to_string(), + &Uuid::new_v4().to_string(), + ), + weight: 0.2, + quantity: 2, + is_deleted: false, + created_at: None, + updated_at: None, + } + } +} diff --git a/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_service.rs b/imphnen-gacha-service/src/v1/gacha_roll/gacha_roll_service.rs new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-gacha-service/src/v1/gacha_roll/mod.rs b/imphnen-gacha-service/src/v1/gacha_roll/mod.rs new file mode 100644 index 0000000..e223926 --- /dev/null +++ b/imphnen-gacha-service/src/v1/gacha_roll/mod.rs @@ -0,0 +1,7 @@ +pub mod gacha_roll_dto; +pub mod gacha_roll_repository; +pub mod gacha_roll_schema; + +pub use gacha_roll_dto::*; +pub use gacha_roll_repository::*; +pub use gacha_roll_schema::*; diff --git a/imphnen-gacha-service/src/v1/mod.rs b/imphnen-gacha-service/src/v1/mod.rs index 5bf0546..9c2ebec 100644 --- a/imphnen-gacha-service/src/v1/mod.rs +++ b/imphnen-gacha-service/src/v1/mod.rs @@ -1,2 +1,7 @@ -pub mod gacha; -pub use gacha::*; +pub mod gacha_claim; +pub mod gacha_item; +pub mod gacha_roll; + +pub use gacha_claim::*; +pub use gacha_item::*; +pub use gacha_roll::*; diff --git a/imphnen-gacha-service/src/v2/.gitkeep b/imphnen-gacha-service/src/v2/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/imphnen-gateway-service/src/middleware.rs b/imphnen-gateway-service/src/middleware.rs index 855c621..6da33a4 100644 --- a/imphnen-gateway-service/src/middleware.rs +++ b/imphnen-gateway-service/src/middleware.rs @@ -52,12 +52,17 @@ pub fn cors_middleware() -> CorsLayer { let cors_origins = match env.rust_env.as_str() { "development" => vec!["http://localhost:3000"], "production" => { - vec!["https://gacha.imphnen.dev", "https://imphnen.dev"] + vec![ + "https://gacha.imphnen.dev", + "https://imphnen.dev", + "https://dimentorin.imphnen.dev", + ] } _ => vec![ "http://localhost:3000", "https://gacha.imphnen.dev", "https://imphnen.dev", + "https://dimentorin.imphnen.dev", ], }; let allowed_origins: Vec = cors_origins diff --git a/imphnen-iam-service/src/v1/roles/roles_enum.rs b/imphnen-iam-service/src/v1/roles/roles_enum.rs index f28a49b..d377243 100644 --- a/imphnen-iam-service/src/v1/roles/roles_enum.rs +++ b/imphnen-iam-service/src/v1/roles/roles_enum.rs @@ -4,6 +4,7 @@ use std::fmt; pub enum RolesEnum { Admin, User, + Student, Staf, } @@ -12,6 +13,7 @@ impl fmt::Display for RolesEnum { let roles_str = match self { RolesEnum::Admin => "Admin", RolesEnum::User => "User", + RolesEnum::Student => "Student", RolesEnum::Staf => "Staf", }; write!(f, "{}", roles_str) diff --git a/imphnen-iam-service/src/v2/.gitkeep b/imphnen-iam-service/src/v2/.gitkeep new file mode 100644 index 0000000..e69de29