blastmud/blastmud_game/src/models/user.rs

92 lines
2.6 KiB
Rust
Raw Normal View History

use super::{
item::{SkillType, StatType},
journal::JournalState,
};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
2022-12-26 01:30:59 +11:00
use std::collections::BTreeMap;
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct UserTermData {
pub accepted_terms: BTreeMap<String, DateTime<Utc>>,
pub terms_complete: bool, // Recalculated on accept and login.
2022-12-26 01:30:59 +11:00
pub last_presented_term: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(default)]
2022-12-26 01:30:59 +11:00
pub struct UserExperienceData {
pub spent_xp: u64, // Since last chargen complete.
pub journals: JournalState,
2022-12-26 01:30:59 +11:00
pub xp_change_for_this_reroll: i64,
pub crafted_items: BTreeMap<String, u64>,
2022-12-26 01:30:59 +11:00
}
#[derive(Serialize, Deserialize, Clone, Debug)]
2023-01-20 23:08:40 +11:00
#[serde(default)]
2022-12-26 01:30:59 +11:00
pub struct User {
pub username: String,
pub password_hash: String, // bcrypted.
2022-12-27 16:08:27 +11:00
pub email: String,
pub player_item_id: i64,
2022-12-26 01:30:59 +11:00
pub registered_at: Option<DateTime<Utc>>,
pub banned_until: Option<DateTime<Utc>>,
pub abandoned_at: Option<DateTime<Utc>>,
pub chargen_last_completed_at: Option<DateTime<Utc>>,
2022-12-26 01:30:59 +11:00
pub terms: UserTermData,
pub experience: UserExperienceData,
2023-01-20 23:08:40 +11:00
pub raw_skills: BTreeMap<SkillType, f64>,
pub raw_stats: BTreeMap<StatType, f64>,
pub last_skill_improve: BTreeMap<SkillType, DateTime<Utc>>,
2023-02-26 17:01:05 +11:00
pub last_page_from: Option<String>,
2023-01-30 22:28:43 +11:00
pub credits: u64,
pub danger_code: Option<String>,
2023-01-30 22:28:43 +11:00
// Reminder: Consider backwards compatibility when updating this.
2022-12-26 01:30:59 +11:00
}
impl Default for UserTermData {
fn default() -> Self {
UserTermData {
accepted_terms: BTreeMap::new(),
terms_complete: false,
last_presented_term: None,
2022-12-26 01:30:59 +11:00
}
}
}
impl Default for UserExperienceData {
fn default() -> Self {
UserExperienceData {
spent_xp: 0,
journals: Default::default(),
2022-12-26 01:30:59 +11:00
xp_change_for_this_reroll: 0,
crafted_items: BTreeMap::new(),
}
}
}
impl Default for User {
fn default() -> Self {
User {
username: "unknown".to_owned(),
password_hash: "unknown".to_owned(),
2022-12-27 16:08:27 +11:00
email: "unknown".to_owned(),
2022-12-26 01:30:59 +11:00
player_item_id: 0,
registered_at: None,
banned_until: None,
abandoned_at: None,
chargen_last_completed_at: None,
2022-12-26 01:30:59 +11:00
terms: UserTermData::default(),
experience: UserExperienceData::default(),
raw_skills: BTreeMap::new(),
raw_stats: BTreeMap::new(),
2023-01-20 23:08:40 +11:00
last_skill_improve: BTreeMap::new(),
2023-02-26 17:01:05 +11:00
last_page_from: None,
credits: 500,
danger_code: None,
2022-12-26 01:30:59 +11:00
}
}
}