diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2fb6565..cf8b9fb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,7 +41,7 @@ jobs: username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} port: ${{ secrets.VPS_PORT }} - source: ./target/release/imphnen-backend-service + source: ./target/release/* target: /opt/imphnen-backend-service/imphnen-backend-service rm: true overwrite: true diff --git a/src/apps/v1/auth/auth_service.rs b/src/apps/v1/auth/auth_service.rs index 2a722e5..7c09629 100644 --- a/src/apps/v1/auth/auth_service.rs +++ b/src/apps/v1/auth/auth_service.rs @@ -120,7 +120,7 @@ impl AuthService { let auth_repo = AuthRepository::new(state); let role_repo = RolesRepository::new(state); let role = match role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await { Ok(role) => role, diff --git a/src/apps/v1/gacha/gacha_dto.rs b/src/apps/v1/gacha/gacha_dto.rs index e69de29..95af73c 100644 --- a/src/apps/v1/gacha/gacha_dto.rs +++ b/src/apps/v1/gacha/gacha_dto.rs @@ -0,0 +1,91 @@ +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, +} + +#[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/src/apps/v1/gacha/gacha_repository.rs b/src/apps/v1/gacha/gacha_repository.rs index e69de29..1b6d908 100644 --- a/src/apps/v1/gacha/gacha_repository.rs +++ b/src/apps/v1/gacha/gacha_repository.rs @@ -0,0 +1,155 @@ +use super::{GachaClaimSchema, GachaItemSchema, GachaRollSchema}; +use crate::{ + get_id, make_thing, query_list_with_meta, AppState, MetaRequestDto, ResourceEnum, + ResponseListSuccessDto, +}; +use anyhow::{bail, Result}; + +pub struct GachaRepository<'a> { + state: &'a AppState, +} + +impl<'a> GachaRepository<'a> { + pub fn new(state: &'a AppState) -> Self { + Self { state } + } + + pub async fn query_gacha_item_list( + &self, + meta: MetaRequestDto, + ) -> Result>> { + let mut conditions = vec!["is_deleted = false".into()]; + if meta.search.is_some() { + conditions.push("string::contains(name, $search)".into()); + } + query_list_with_meta( + &self.state.surrealdb_ws, + &ResourceEnum::GachaItems.to_string(), + &meta, + conditions, + None, + ) + .await + } + + pub async fn query_gacha_item_by_id(&self, id: String) -> Result { + let db = &self.state.surrealdb_ws; + let result: Option = db + .select((ResourceEnum::GachaItems.to_string(), id.clone())) + .await?; + match result { + Some(item) if !item.is_deleted => Ok(item), + _ => bail!("Gacha Item not found"), + } + } + + pub async fn query_create_gacha_item( + &self, + data: GachaItemSchema, + ) -> Result { + let db = &self.state.surrealdb_ws; + let record: Option = db + .create(ResourceEnum::GachaItems.to_string()) + .content(data) + .await?; + match record { + Some(_) => Ok("Success create Gacha Item".into()), + None => bail!("Failed to create Gacha Item"), + } + } + + pub async fn query_update_gacha_item( + &self, + data: GachaItemSchema, + ) -> Result { + let db = &self.state.surrealdb_ws; + let record_key = get_id(&data.id)?; + let existing = self.query_gacha_item_by_id(data.id.id.to_raw()).await?; + if existing.is_deleted { + bail!("Gacha Item already deleted"); + } + let merged = GachaItemSchema { + created_at: existing.created_at, + ..data.clone() + }; + let record: Option = + db.update(record_key).merge(merged).await?; + match record { + Some(_) => Ok("Success update Gacha Item".into()), + None => bail!("Failed to update Gacha Item"), + } + } + + pub async fn query_delete_gacha_item(&self, id: String) -> Result { + let db = &self.state.surrealdb_ws; + let item_id = make_thing(&ResourceEnum::GachaItems.to_string(), &id); + let item = self.query_gacha_item_by_id(item_id.id.to_raw()).await?; + if item.is_deleted { + bail!("Gacha Item already deleted"); + } + let record_key = get_id(&item.id)?; + let record: Option = db + .update(record_key) + .merge(serde_json::json!({ "is_deleted": true })) + .await?; + match record { + Some(_) => Ok("Success delete Gacha Item".into()), + 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/src/apps/v1/gacha/gacha_schema.rs b/src/apps/v1/gacha/gacha_schema.rs index e69de29..bdd8de1 100644 --- a/src/apps/v1/gacha/gacha_schema.rs +++ b/src/apps/v1/gacha/gacha_schema.rs @@ -0,0 +1,90 @@ +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 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(), + 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::GachaClaims.to_string(), + &Uuid::new_v4().to_string(), + ), + item: make_thing( + &ResourceEnum::GachaRolls.to_string(), + &Uuid::new_v4().to_string(), + ), + weight: 0.2, + quantity: 2, + is_deleted: false, + created_at: None, + updated_at: None, + } + } +} diff --git a/src/apps/v1/gacha/mod.rs b/src/apps/v1/gacha/mod.rs new file mode 100644 index 0000000..6d8e216 --- /dev/null +++ b/src/apps/v1/gacha/mod.rs @@ -0,0 +1,6 @@ +pub mod gacha_dto; +pub mod gacha_repository; +pub mod gacha_schema; + +pub use gacha_repository::*; +pub use gacha_schema::*; diff --git a/src/apps/v1/mod.rs b/src/apps/v1/mod.rs index b767c94..27c98df 100644 --- a/src/apps/v1/mod.rs +++ b/src/apps/v1/mod.rs @@ -1,6 +1,7 @@ use axum::{middleware::from_fn, Router}; pub mod auth; pub mod docs; +pub mod gacha; pub mod permissions; pub mod roles; pub mod users; diff --git a/src/apps/v1/permissions/permissions_enum.rs b/src/apps/v1/permissions/permissions_enum.rs index 63a15dd..f544e0e 100644 --- a/src/apps/v1/permissions/permissions_enum.rs +++ b/src/apps/v1/permissions/permissions_enum.rs @@ -17,16 +17,6 @@ pub enum PermissionsEnum { CreatePermissions, DeletePermissions, UpdatePermissions, - ReadListSessions, - ReadDetailSessions, - CreateSessions, - UpdateSessions, - DeleteSessions, - ReadListTests, - ReadDetailTests, - CreateTests, - UpdateTests, - DeleteTests, } impl fmt::Display for PermissionsEnum { @@ -47,16 +37,6 @@ impl fmt::Display for PermissionsEnum { PermissionsEnum::CreatePermissions => "Create Permissions", PermissionsEnum::DeletePermissions => "Delete Permissions", PermissionsEnum::UpdatePermissions => "Update Permissions", - PermissionsEnum::ReadListSessions => "Read List Sessions", - PermissionsEnum::ReadDetailSessions => "Read Detail Sessions", - PermissionsEnum::CreateSessions => "Create Sessions", - PermissionsEnum::UpdateSessions => "Update Sessions", - PermissionsEnum::DeleteSessions => "Delete Sessions", - PermissionsEnum::ReadListTests => "Read List Tests", - PermissionsEnum::ReadDetailTests => "Read Detail Tests", - PermissionsEnum::CreateTests => "Create Tests", - PermissionsEnum::UpdateTests => "Update Tests", - PermissionsEnum::DeleteTests => "Delete Tests", }; write!(f, "{}", permission_str) } diff --git a/src/apps/v1/permissions/permissions_schema.rs b/src/apps/v1/permissions/permissions_schema.rs index 35ee545..ba08b3a 100644 --- a/src/apps/v1/permissions/permissions_schema.rs +++ b/src/apps/v1/permissions/permissions_schema.rs @@ -1,9 +1,6 @@ -use crate::ResourceEnum; +use crate::{make_thing, ResourceEnum}; use serde::{Deserialize, Serialize}; -use surrealdb::{ - sql::{Id, Thing}, - Uuid, -}; +use surrealdb::{sql::Thing, Uuid}; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct PermissionsSchema { @@ -17,10 +14,10 @@ pub struct PermissionsSchema { impl Default for PermissionsSchema { fn default() -> Self { PermissionsSchema { - id: Thing::from(( - ResourceEnum::Permissions.to_string(), - Id::String(Uuid::new_v4().to_string()), - )), + id: make_thing( + &ResourceEnum::Permissions.to_string(), + &Uuid::new_v4().to_string(), + ), name: String::new(), is_deleted: false, created_at: None, diff --git a/src/apps/v1/roles/roles_enum.rs b/src/apps/v1/roles/roles_enum.rs index bbdfe47..f28a49b 100644 --- a/src/apps/v1/roles/roles_enum.rs +++ b/src/apps/v1/roles/roles_enum.rs @@ -3,7 +3,7 @@ use std::fmt; #[derive(Debug, Clone, PartialEq, Eq)] pub enum RolesEnum { Admin, - Student, + User, Staf, } @@ -11,7 +11,7 @@ impl fmt::Display for RolesEnum { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let roles_str = match self { RolesEnum::Admin => "Admin", - RolesEnum::Student => "Student", + RolesEnum::User => "User", RolesEnum::Staf => "Staf", }; write!(f, "{}", roles_str) diff --git a/src/apps/v1/roles/roles_schema.rs b/src/apps/v1/roles/roles_schema.rs index dbfa978..d5ae49d 100644 --- a/src/apps/v1/roles/roles_schema.rs +++ b/src/apps/v1/roles/roles_schema.rs @@ -1,10 +1,7 @@ use serde::{Deserialize, Serialize}; -use surrealdb::{ - sql::{Id, Thing}, - Uuid, -}; +use surrealdb::{sql::Thing, Uuid}; -use crate::ResourceEnum; +use crate::{make_thing, ResourceEnum}; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct RolesSchema { @@ -19,14 +16,14 @@ pub struct RolesSchema { impl Default for RolesSchema { fn default() -> Self { RolesSchema { - id: Thing::from(( - ResourceEnum::Roles.to_string(), - Id::String(Uuid::new_v4().to_string()), - )), - permissions: vec![Thing::from(( - ResourceEnum::Permissions.to_string(), - Id::String(Uuid::new_v4().to_string()), - ))], + id: make_thing( + &ResourceEnum::Roles.to_string(), + &Uuid::new_v4().to_string(), + ), + permissions: vec![make_thing( + &ResourceEnum::Permissions.to_string(), + &Uuid::new_v4().to_string(), + )], name: String::new(), is_deleted: false, created_at: None, diff --git a/src/apps/v1/users/users_controller_test.rs b/src/apps/v1/users/users_controller_test.rs index 4d96238..ad4eaed 100644 --- a/src/apps/v1/users/users_controller_test.rs +++ b/src/apps/v1/users/users_controller_test.rs @@ -106,7 +106,7 @@ async fn test_create_user_should_return_201() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id; @@ -131,7 +131,7 @@ async fn test_get_user_detail_should_return_200() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id; @@ -160,7 +160,7 @@ async fn test_delete_user_should_return_200() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .expect("Failed to get role"); let repo = UsersRepository::new(&state); @@ -193,7 +193,7 @@ async fn test_activate_user_should_return_200() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id; @@ -228,7 +228,7 @@ async fn test_update_user_should_return_200() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id.clone(); @@ -274,7 +274,7 @@ async fn test_create_user_should_fail_if_email_taken() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id.clone(); @@ -317,7 +317,7 @@ async fn test_delete_user_should_fail_if_already_deleted() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id.clone(); @@ -350,7 +350,7 @@ async fn test_update_user_should_fail_if_user_not_found() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id.clone(); @@ -481,7 +481,7 @@ async fn test_user_detail_should_fail_if_user_is_soft_deleted() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id.clone(); @@ -514,7 +514,7 @@ async fn test_update_user_should_fail_if_user_is_deleted() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id.clone(); @@ -559,7 +559,7 @@ async fn test_update_user_should_fail_if_payload_invalid() { let state = create_mock_app_state().await; let role_repo = RolesRepository::new(&state); let role = role_repo - .query_role_by_name(RolesEnum::Student.to_string()) + .query_role_by_name(RolesEnum::User.to_string()) .await .unwrap(); let role_id = role.id.clone(); diff --git a/src/bin/seed_permissions.rs b/src/bin/seed_permissions.rs index a94dae1..8e95b71 100644 --- a/src/bin/seed_permissions.rs +++ b/src/bin/seed_permissions.rs @@ -58,24 +58,12 @@ async fn main() -> Result<(), Box> { Some("2025-02-01T12:38:09.741726+00"), Some("2025-02-01T12:38:09.741727+00"), ), - ( - "529fe4da-7e20-4c76-8bc1-d7f7c121218f", - "Create Tests", - Some("2025-02-24T16:52:27.316909+00"), - Some("2025-02-24T16:52:27.316918+00"), - ), ( "73888d18-b3e9-4f62-95a5-ba2c0d69fccb", "Read Detail Roles", Some("2025-01-29T05:13:06.445925+00"), Some("2025-01-29T10:31:46.408564+00"), ), - ( - "79dfe6dc-748c-4b9c-9535-b896b391d676", - "Delete Tests", - Some("2025-02-24T16:52:27.455878+00"), - Some("2025-02-24T16:52:27.455888+00"), - ), ( "7c15e31d-36e2-49f9-97db-138c03fb0cf6", "Read List Users", @@ -88,12 +76,6 @@ async fn main() -> Result<(), Box> { Some("2025-02-24T16:52:26.886664+00"), Some("2025-02-24T16:52:26.886673+00"), ), - ( - "811d386b-e5f0-4e00-a164-f3d885197e30", - "Update Tests", - Some("2025-02-24T16:52:27.385216+00"), - Some("2025-02-24T16:52:27.385225+00"), - ), ( "8195eeb8-e64f-4172-aa57-596492c84a72", "Read List Permissions", @@ -106,12 +88,6 @@ async fn main() -> Result<(), Box> { Some("2025-02-24T16:52:27.179542+00"), Some("2025-02-24T16:52:27.179551+00"), ), - ( - "8cfd3b4d-0a41-456d-88e5-6c21cef1766a", - "Delete Sessions", - Some("2025-02-24T16:52:27.111123+00"), - Some("2025-02-24T16:52:27.111132+00"), - ), ( "9164ca6e-c7e3-4238-a15f-f36ab9577e7e", "Read List Roles", @@ -142,36 +118,12 @@ async fn main() -> Result<(), Box> { Some("2025-01-29T05:14:22.511084+00"), Some("2025-01-29T05:14:22.511085+00"), ), - ( - "b70733db-b1c8-4aa3-a10f-b7cf773d896b", - "Create Sessions", - Some("2025-02-24T16:52:26.974279+00"), - Some("2025-02-24T16:52:26.97429+00"), - ), - ( - "c0a31b2c-3f0c-4e82-b018-e60ba8674112", - "Update Sessions", - Some("2025-02-24T16:52:27.042858+00"), - Some("2025-02-24T16:52:27.042866+00"), - ), - ( - "cab6aff5-e9c6-4ed3-afe9-93ef927e1f92", - "Read List Sessions", - Some("2025-02-22T15:38:09.521014+00"), - Some("2025-02-22T15:38:25.964821+00"), - ), ( "dad435cf-042c-41bd-a946-cea61ed2ffbc", "Read Detail Permissions", Some("2025-01-28T15:07:10.990214+00"), Some("2025-01-28T15:07:10.990214+00"), ), - ( - "f768aff5-8011-4439-b901-d8793c60d841", - "Read Detail Tests", - Some("2025-02-24T16:52:27.2483+00"), - Some("2025-02-24T16:52:27.248308+00"), - ), ]; for (id, name, _created_at, _updated_at) in permissions { db.query("CREATE type::thing('app_permissions', $id) CONTENT $data") diff --git a/src/bin/seed_roles.rs b/src/bin/seed_roles.rs index 598ca4c..111e00f 100644 --- a/src/bin/seed_roles.rs +++ b/src/bin/seed_roles.rs @@ -25,7 +25,7 @@ async fn main() -> Result<(), Box> { ), ( "5713cb37-dc02-4e87-8048-d7a41d352059", - "Student", + "User", None, Some("2025-02-28T14:53:58.576688+00"), ), @@ -41,18 +41,6 @@ async fn main() -> Result<(), Box> { Some("2025-01-29T05:39:28.562667+00"), Some("2025-03-12T22:56:29.597416+00"), ), - ( - "aec758fc-3d54-4c6f-8bcb-44368dd81c07", - "Admin Management Soal", - Some("2025-01-29T11:03:40.308934+00"), - Some("2025-01-29T11:03:40.308935+00"), - ), - ( - "de29943b-ed94-451e-a91f-bcf496bd1849", - "Admin Penilaian", - Some("2025-01-29T11:04:03.499272+00"), - Some("2025-01-29T16:14:09.715234+00"), - ), ( "f6b03f25-e416-4893-ac88-caaa690afb07", "Admin", diff --git a/src/bin/seed_users.rs b/src/bin/seed_users.rs index f0783ee..31f431f 100644 --- a/src/bin/seed_users.rs +++ b/src/bin/seed_users.rs @@ -54,8 +54,8 @@ async fn main() -> Result<(), Box> { ), ( "d5e89c12-72af-4b1a-abc3-ff1234567890", - "student@example.com", - "Student", + "user@example.com", + "User", "5713cb37-dc02-4e87-8048-d7a41d352059", ), ];