Move another step towards full DB-driven server

This commit is contained in:
Nobody 2022-01-26 21:47:18 +05:00
parent d36f469e81
commit efafc2a60b
17 changed files with 578 additions and 44 deletions

View File

@ -0,0 +1,26 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "avatar_fight_prop")]
pub struct Model {
#[sea_orm(primary_key)]
pub guid: i64,
pub prop_id: u32,
pub value: f32,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -9,7 +9,7 @@ pub struct Model {
pub uid: u32, pub uid: u32,
pub character_id: u32, pub character_id: u32,
pub avatar_type: u8, pub avatar_type: u8,
pub guid: u64, pub guid: i64,
pub born_time: u32, pub born_time: u32,
} }

View File

@ -0,0 +1,26 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "avatar_prop")]
pub struct Model {
#[sea_orm(primary_key)]
pub guid: i64,
pub prop_id: u32,
pub prop_value: i64,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -8,7 +8,7 @@ pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]
pub uid: u32, pub uid: u32,
pub team_id: u8, pub team_id: u8,
pub guid: u64, pub guid: i64,
} }
#[derive(Copy, Clone, Debug, EnumIter)] #[derive(Copy, Clone, Debug, EnumIter)]

View File

@ -3,6 +3,9 @@ use std::collections::HashMap;
use sea_orm::{entity::*, error::*, query::*, DbConn, FromQueryResult, Database}; use sea_orm::{entity::*, error::*, query::*, DbConn, FromQueryResult, Database};
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use crate::JsonManager;
use crate::server::AuthManager;
use crate::utils::IdManager;
pub use super::player_info::Model as PlayerInfo; pub use super::player_info::Model as PlayerInfo;
use super::player_info::Entity as PlayerInfoEntity; use super::player_info::Entity as PlayerInfoEntity;
@ -22,6 +25,40 @@ use super::avatar_team_info::Entity as AvatarTeamInfoEntity;
pub use super::team_selection_info::Model as TeamSelectionInfo; pub use super::team_selection_info::Model as TeamSelectionInfo;
use super::team_selection_info::Entity as TeamSelectionInfoEntity; use super::team_selection_info::Entity as TeamSelectionInfoEntity;
pub use super::player_prop::Model as PlayerProp;
use super::player_prop::Entity as PlayerPropEntity;
pub use super::avatar_prop::Model as AvatarProp;
use super::avatar_prop::Entity as AvatarPropEntity;
pub use super::avatar_fight_prop::Model as AvatarFightProp;
use super::avatar_fight_prop::Entity as AvatarFightPropEntity;
pub use super::open_state::Model as OpenState;
use super::open_state::Entity as OpenStateEntity;
/* Inventory */
pub use super::material_info::Model as MaterialInfo;
use super::material_info::Entity as MaterialInfoEntity;
pub use super::reliquary_info::Model as ReliquaryInfo;
use super::reliquary_info::Entity as ReliquaryInfoEntity;
pub use super::equip_info::Model as EquipInfo;
use super::equip_info::Entity as EquipInfoEntity;
pub use super::item_info::Model as ItemInfo;
use super::item_info::Entity as ItemInfoEntity;
pub use super::weapon_affix_info::Model as WeaponAffixInfo;
use super::weapon_affix_info::Entity as WeaponAffixInfoEntity;
pub use super::reliquary_prop::Model as ReliquaryProp;
use super::reliquary_prop::Entity as ReliquaryPropEntity;
pub use super::furniture_info::Model as FurnitureInfo;
use super::furniture_info::Entity as FurnitureInfoEntity;
macro_rules! collection { macro_rules! collection {
// map-like // map-like
($($k:expr => $v:expr),* $(,)?) => {{ ($($k:expr => $v:expr),* $(,)?) => {{
@ -58,65 +95,91 @@ impl DatabaseManager {
}; };
} }
pub fn _get_player_info(&self, uid: u32) -> Option<PlayerInfo> { pub fn get_player_info(&self, uid: u32) -> Option<PlayerInfo> {
match PlayerInfoEntity::find_by_id(uid).one(&self.db).wait() { match PlayerInfoEntity::find_by_id(uid).one(&self.db).wait() {
Err(_) => { println!("DB ERROR!"); None }, Err(_) => { println!("DB ERROR!"); None },
Ok(p_info) => p_info, Ok(p_info) => p_info,
} }
} }
/*
pub fn get_player_info(&self, uid: u32) -> Option<PlayerInfo> { pub fn _get_player_info(&self, uid: u32) -> Option<PlayerInfo> {
Some(PlayerInfo { Some(PlayerInfo {
uid: uid, uid: uid,
nick_name: "Fapper".into(), nick_name: "Fapper".into(),
level: 56,
signature: "Hello world!".into(), signature: "Hello world!".into(),
birthday: 0, birthday: 0,
world_level: 8,
namecard_id: 210051, namecard_id: 210051,
finish_achievement_num: 42, finish_achievement_num: 42,
tower_floor_index: 1, tower_floor_index: 1,
tower_level_index: 1, tower_level_index: 1,
avatar_id: 10000007, avatar_id: 10000007,
}) })
} }*/
/*
pub fn _get_player_props(&self, uid: u32) -> Option<HashMap<u32, i64>> {
Some(collection! {
//proto::PropType::PropIsSpringAutoUse as u32 => 1,
//proto::PropType::PropIsFlyable as u32 => 1,
//proto::PropType::PropIsTransferable as u32 => 1,
//proto::PropType::PropPlayerLevel as u32 => 56,
//proto::PropType::PropPlayerExp as u32 => 1337,
//proto::PropType::PropPlayerHcoin as u32 => 9001,
//proto::PropType::PropPlayerScoin as u32 => 9002,
//proto::PropType::PropPlayerWorldLevel as u32 => 8,
//proto::PropType::PropPlayerResin as u32 => 159,
//proto::PropType::PropPlayerMcoin as u32 => 9003,
//proto::PropType::PropMaxStamina as u32 => 12000,
//proto::PropType::PropCurPersistStamina as u32 => 12000,
})
}*/
pub fn get_player_props(&self, uid: u32) -> Option<HashMap<u32, i64>> { pub fn get_player_props(&self, uid: u32) -> Option<HashMap<u32, i64>> {
Some(collection! { let props = match PlayerPropEntity::find_by_id(uid).all(&self.db).wait() {
proto::PropType::PropIsSpringAutoUse as u32 => 1, Err(_) => { panic!("DB ERROR!") },
proto::PropType::PropIsFlyable as u32 => 1, Ok(p_info) => p_info,
proto::PropType::PropIsTransferable as u32 => 1, };
proto::PropType::PropPlayerLevel as u32 => 56,
proto::PropType::PropPlayerExp as u32 => 1337,
proto::PropType::PropPlayerHcoin as u32 => 9001,
proto::PropType::PropPlayerScoin as u32 => 9002,
proto::PropType::PropPlayerWorldLevel as u32 => 8,
proto::PropType::PropPlayerResin as u32 => 159,
proto::PropType::PropPlayerMcoin as u32 => 9003,
proto::PropType::PropMaxStamina as u32 => 120,
proto::PropType::PropCurPersistStamina as u32 => 120,
})
}
pub fn get_avatar_props(&self, guid: u64) -> Option<HashMap<u32, i64>> { let props = props
.into_iter()
.map(|p| (p.prop_id, p.prop_value))
.collect();
return Some(props);
}
/*
pub fn _get_avatar_props(&self, guid: u64) -> Option<HashMap<u32, i64>> {
let map = collection! { let map = collection! {
proto::PropType::PropExp as u32 => 0, //proto::PropType::PropExp as u32 => 0,
proto::PropType::PropLevel as u32 => 80, //proto::PropType::PropLevel as u32 => 80,
proto::PropType::PropBreakLevel as u32 => 5, //proto::PropType::PropBreakLevel as u32 => 5,
proto::PropType::PropSatiationVal as u32 => 0, //proto::PropType::PropSatiationVal as u32 => 0,
proto::PropType::PropSatiationPenaltyTime as u32 => 0, //proto::PropType::PropSatiationPenaltyTime as u32 => 0,
}; };
return Some(map); return Some(map);
}*/
pub fn get_avatar_props(&self, guid: i64) -> Option<HashMap<u32, i64>> {
let props = match AvatarPropEntity::find_by_id(guid).all(&self.db).wait() {
Err(_) => { panic!("DB ERROR!") },
Ok(p_info) => p_info,
};
let props = props
.into_iter()
.map(|p| (p.prop_id, p.prop_value))
.collect();
return Some(props);
} }
pub fn get_avatar_equip(&self, guid: u64) -> Option<Vec<u64>> { pub fn get_avatar_equip(&self, guid: i64) -> Option<Vec<i64>> {
let equip = vec![Self::SPOOFED_WEAPON_GUID]; let equip = vec![Self::SPOOFED_WEAPON_GUID];
return Some(equip); return Some(equip);
} }
pub fn get_skill_levels(&self, guid: u64) -> Option<HashMap<u32,u32>> { pub fn get_skill_levels(&self, guid: i64) -> Option<HashMap<u32,u32>> {
let map = collection! { let map = collection! {
10068 => 3, 10068 => 3,
100553 => 3, 100553 => 3,
@ -126,7 +189,8 @@ impl DatabaseManager {
return Some(map); return Some(map);
} }
pub fn get_avatar_fight_props(&self, guid: u64) -> Option<HashMap<u32, f32>> { pub fn get_avatar_fight_props(&self, guid: i64) -> Option<HashMap<u32, f32>> {
/*
let map = collection! { let map = collection! {
proto::FightPropType::FightPropBaseHp as u32 => 9000.0, proto::FightPropType::FightPropBaseHp as u32 => 9000.0,
proto::FightPropType::FightPropHp as u32 => 3000.0, proto::FightPropType::FightPropHp as u32 => 3000.0,
@ -181,9 +245,23 @@ impl DatabaseManager {
}; };
return Some(map); return Some(map);
*/
let props = match AvatarFightPropEntity::find_by_id(guid).all(&self.db).wait() {
Err(e) => { panic!("DB ERROR {}: {}!", guid, e) },
Ok(props) => props,
};
let props = props
.into_iter()
.map(|p| (p.prop_id, p.value))
.collect();
return Some(props);
} }
pub fn get_open_state(&self, uid: u32) -> Option<HashMap<u32, u32>> { pub fn get_open_state(&self, uid: u32) -> Option<HashMap<u32, u32>> {
/*
Some(collection! { Some(collection! {
proto::OpenStateType::OpenStatePaimon as u32 => 1, proto::OpenStateType::OpenStatePaimon as u32 => 1,
@ -217,9 +295,23 @@ impl DatabaseManager {
proto::OpenStateType::OpenStateLiyueInfusedcrystal as u32 => 1, proto::OpenStateType::OpenStateLiyueInfusedcrystal as u32 => 1,
proto::OpenStateType::OpenStateInazumaMainquestFinished as u32 => 1, proto::OpenStateType::OpenStateInazumaMainquestFinished as u32 => 1,
}) })
*/
let states = match OpenStateEntity::find_by_id(uid).all(&self.db).wait() {
Err(_) => { panic!("DB ERROR!") },
Ok(states) => states,
};
let states = states
.into_iter()
.map(|s| (s.state_id, s.value))
.collect();
return Some(states);
} }
pub fn get_inventory(&self, uid: u32) -> Option<Vec<proto::Item>> { pub fn get_inventory(&self, uid: u32) -> Option<Vec<proto::Item>> {
let mut weapon = proto::Weapon::default(); let mut weapon = proto::Weapon::default();
weapon.level = 70; weapon.level = 70;
weapon.promote_level = 4; weapon.promote_level = 4;
@ -231,13 +323,68 @@ impl DatabaseManager {
let mut item = proto::Item::default(); let mut item = proto::Item::default();
item.item_id = 11406; item.item_id = 11406;
item.guid = Self::SPOOFED_WEAPON_GUID; item.guid = Self::SPOOFED_WEAPON_GUID as u64; // FIXME
item.detail = Some(proto::item::Detail::Equip(equip)); item.detail = Some(proto::item::Detail::Equip(equip));
return Some(vec![item]); return Some(vec![item]);
/*
Inventory item can be of three types: material, equip and furniture
Equip is further divided into relic and weapon
Sp we need to get:
1) Materials
2) Furniture
3) Relics (+their properties)
4) Weapons (+their affices)
*/
/*
let items = match ItemInfoEntity::find_by_id(uid).all(&self.db).wait() {
Err(e) => { panic!("DB ERROR: {}!", e) },
Ok(items) => items,
};
let materials: Vec<(ItemInfo, MaterialInfo)> = self.find_related_to_items(&items, MaterialInfoEntity);
let furniture: Vec<(ItemInfo, FurnitureInfo)> = self.find_related_to_items(&items, FurnitureInfoEntity);
let equip: Vec<(ItemInfo, EquipInfo)> = self.find_related_to_items(&items, EquipInfoEntity);
return None;*/
}
fn find_related_to_items<T: sea_orm::EntityTrait>(&self, items: &Vec<ItemInfo>, entity_type: T) -> Vec<(ItemInfo, T::Model)>
where
ItemInfoEntity: sea_orm::Related<T>
{
return items.into_iter()
.map(|item| {
let ret = match item.find_related(entity_type).one(&self.db).wait() {
Err(e) => { panic!("DB ERROR: {}!", e) },
Ok(data) => data,
};
match ret {
None => None,
Some(data) => Some( (item.clone(), data) ),
}
})
.filter(|x| !x.is_none())
.map(|x| x.unwrap())
.collect();
} }
pub fn get_avatars(&self, uid: u32) -> Option<Vec<AvatarInfo>> { pub fn get_avatars(&self, uid: u32) -> Option<Vec<AvatarInfo>> {
let avatars = match AvatarInfoEntity::find_by_id(uid).all(&self.db).wait() {
Err(_) => { panic!("DB ERROR!") },
Ok(avatars) => avatars,
};
return Some(avatars);
}
/*
pub fn _get_avatars(&self, uid: u32) -> Option<Vec<AvatarInfo>> {
let ai = AvatarInfo { let ai = AvatarInfo {
uid: uid, uid: uid,
character_id: 7, character_id: 7,
@ -247,23 +394,55 @@ impl DatabaseManager {
}; };
return Some(vec![ai]); return Some(vec![ai]);
}
pub fn get_player_scene_info(&self, uid: u32) -> Option<SceneInfo> {
}*/
pub fn get_avatar(&self, guid: i64) -> Option<AvatarInfo> {
let avatar = match AvatarInfoEntity::find().filter(super::avatar_info::Column::Guid.eq(guid)).one(&self.db).wait() {
Err(_) => { panic!("DB ERROR!") },
Ok(avatar) => avatar,
};
return avatar;
}
/*
pub fn _get_avatar(&self, guid: u64) -> Option<AvatarInfo> {
let ai = AvatarInfo {
uid: AuthManager::SPOOFED_PLAYER_UID, // TODO!
character_id: 7,
avatar_type: 1,
guid: Self::SPOOFED_AVATAR_GUID,
born_time: 1633790000,
};
return Some(ai);
}*/
/*
pub fn _get_player_scene_info(&self, uid: u32) -> Option<SceneInfo> {
let si = SceneInfo { let si = SceneInfo {
uid: uid, uid: uid,
scene_id: Self::SPOOFED_SCENE_ID, scene_id: Self::SPOOFED_SCENE_ID,
scene_token: Self::SPOOFED_SCENE_TOKEN, scene_token: Self::SPOOFED_SCENE_TOKEN,
pos_x: -3400.0, pos_x: -3400.0,
pos_y: 233.0, pos_y: 233.0,
pos_z: 3427.6, pos_z: -3427.6,
}; };
return Some(si); return Some(si);
} }
*/
pub fn get_player_scene_info(&self, uid: u32) -> Option<SceneInfo> {
let scene_info = match SceneInfoEntity::find_by_id(uid).one(&self.db).wait() {
Err(_) => { panic!("DB ERROR!") },
Ok(info) => info,
};
return scene_info;
}
pub fn get_player_teams(&self, uid: u32) -> Option<Vec<TeamInfo>> { pub fn get_player_teams(&self, uid: u32) -> Option<Vec<TeamInfo>> {
let t1 = TeamInfo { /*let t1 = TeamInfo {
uid: uid.clone(), uid: uid.clone(),
id: 1, id: 1,
name: "Team 1".to_string(), name: "Team 1".to_string(),
@ -288,9 +467,17 @@ impl DatabaseManager {
}; };
return Some(vec![t1, t2, t3, t4]); return Some(vec![t1, t2, t3, t4]);
*/
let teams = match TeamInfoEntity::find_by_id(uid).all(&self.db).wait() {
Err(_) => panic!("Failed to retrieve teams for user {}!", uid),
Ok(teams) => teams,
};
return Some(teams);
} }
pub fn get_player_teams_avatars(&self, uid: u32) -> Option<Vec<AvatarTeamInfo>> { pub fn get_player_teams_avatars(&self, uid: u32) -> Option<Vec<AvatarTeamInfo>> {
/*
let a1 = AvatarTeamInfo { let a1 = AvatarTeamInfo {
uid: uid.clone(), uid: uid.clone(),
team_id: 1, team_id: 1,
@ -316,9 +503,17 @@ impl DatabaseManager {
}; };
return Some(vec![a1, a2, a3, a4]); return Some(vec![a1, a2, a3, a4]);
*/
let teams = match AvatarTeamInfoEntity::find_by_id(uid).all(&self.db).wait() {
Err(_) => panic!("Failed to retrieve avatar teams for user {}!", uid),
Ok(teams) => teams,
};
return Some(teams);
} }
pub fn get_player_team_selection(&self, uid: u32) -> Option<TeamSelectionInfo> { pub fn get_player_team_selection(&self, uid: u32) -> Option<TeamSelectionInfo> {
/*
let tsi = TeamSelectionInfo { let tsi = TeamSelectionInfo {
uid: uid.clone(), uid: uid.clone(),
avatar: Self::SPOOFED_AVATAR_GUID, avatar: Self::SPOOFED_AVATAR_GUID,
@ -326,11 +521,18 @@ impl DatabaseManager {
}; };
return Some(tsi); return Some(tsi);
*/
let tsi = match TeamSelectionInfoEntity::find_by_id(uid).one(&self.db).wait() {
Err(_) => { panic!("DB ERROR!") },
Ok(info) => info,
};
return tsi;
} }
const BASE_GUID: u64 = 0x2400000000000000; const BASE_GUID: i64 = 0x2400000000000000;
const SPOOFED_AVATAR_GUID: u64 = Self::BASE_GUID + 1; const SPOOFED_AVATAR_GUID: i64 = Self::BASE_GUID + 1;
const SPOOFED_WEAPON_GUID: u64 = Self::BASE_GUID + 2; const SPOOFED_WEAPON_GUID: i64 = Self::BASE_GUID + 2;
const SPOOFED_SCENE_ID: u32 = 3; const SPOOFED_SCENE_ID: u32 = 3;
const SPOOFED_SCENE_TOKEN: u32 = 0x1234; const SPOOFED_SCENE_TOKEN: u32 = 0x1234;
} }

View File

@ -0,0 +1,33 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "equip_info")]
pub struct Model {
#[sea_orm(primary_key)]
pub guid: i64,
pub is_locked: bool,
pub level: u32,
pub exp: u32,
pub promote_level: u32,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
Item,
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
Self::Item => Entity::belongs_to(super::item_info::Entity)
.from(Column::Guid)
.to(super::item_info::Column::Guid)
.into(),
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -0,0 +1,30 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "furniture_info")]
pub struct Model {
#[sea_orm(primary_key)]
pub guid: i64,
pub count: u32,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
Item,
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
Self::Item => Entity::belongs_to(super::item_info::Entity)
.from(Column::Guid)
.to(super::item_info::Column::Guid)
.into(),
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -0,0 +1,47 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "item_info")]
pub struct Model {
#[sea_orm(primary_key)]
pub uid: u32,
pub guid: i64,
pub item_id: u32,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
Material,
Equip,
Furniture,
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
_ => panic!("Unknown relation type!"),
}
}
}
impl Related<super::material_info::Entity> for Entity {
fn to() -> RelationDef {
Relation::Material.def()
}
}
impl Related<super::equip_info::Entity> for Entity {
fn to() -> RelationDef {
Relation::Equip.def()
}
}
impl Related<super::furniture_info::Entity> for Entity {
fn to() -> RelationDef {
Relation::Furniture.def()
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -0,0 +1,32 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "material_info")]
pub struct Model {
#[sea_orm(primary_key)]
pub guid: i64,
pub count: u32,
pub has_delete_config: bool,
// TODO: Add MaterialDeleteInfo!
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
Item,
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
Self::Item => Entity::belongs_to(super::item_info::Entity)
.from(Column::Guid)
.to(super::item_info::Column::Guid)
.into(),
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -8,3 +8,14 @@ mod scene_info;
mod avatar_team_info; mod avatar_team_info;
mod team_info; mod team_info;
mod team_selection_info; mod team_selection_info;
mod avatar_prop;
mod avatar_fight_prop;
mod player_prop;
mod open_state;
mod material_info;
mod reliquary_info;
mod equip_info;
mod item_info;
mod weapon_affix_info;
mod reliquary_prop;
mod furniture_info;

View File

@ -0,0 +1,26 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "open_state")]
pub struct Model {
#[sea_orm(primary_key)]
pub uid: u32,
pub state_id: u32,
pub value: u32,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -1,6 +1,7 @@
// Database Manager // Database Manager
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use chrono::NaiveDate;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "player_info")] #[sea_orm(table_name = "player_info")]
@ -8,10 +9,8 @@ pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]
pub uid: u32, pub uid: u32,
pub nick_name: String, pub nick_name: String,
pub level: u8,
pub signature: String, pub signature: String,
pub birthday: u32, pub birthday: NaiveDate,
pub world_level: u8,
pub namecard_id: u32, pub namecard_id: u32,
pub finish_achievement_num: u32, pub finish_achievement_num: u32,
pub tower_floor_index: u8, pub tower_floor_index: u8,

View File

@ -0,0 +1,26 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "player_prop")]
pub struct Model {
#[sea_orm(primary_key)]
pub uid: u32,
pub prop_id: u32,
pub prop_value: i64,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -0,0 +1,25 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "reliquary_info")]
pub struct Model {
#[sea_orm(primary_key)]
pub guid: i64,
pub main_prop_id: u32,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -0,0 +1,25 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "reliquary_prop")]
pub struct Model {
#[sea_orm(primary_key)]
pub guid: i64,
pub prop_id: u32,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -7,7 +7,7 @@ use sea_orm::entity::prelude::*;
pub struct Model { pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]
pub uid: u32, pub uid: u32,
pub avatar: u64, pub avatar: i64,
pub team: u8, pub team: u8,
} }

View File

@ -0,0 +1,26 @@
// Database Manager
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "weapon_affix_info")]
pub struct Model {
#[sea_orm(primary_key)]
pub guid: i64,
pub affix_id: u32,
pub affix_value: u32,
}
#[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {
}
impl RelationTrait for Relation {
fn def(&self) -> RelationDef {
match self {
_ => panic!("Unknown relation type!"),
}
}
}
impl ActiveModelBehavior for ActiveModel {}