Auth: JWT tokens (sb-auth) with argon2 password hashing, login/register endpoints, Bearer token middleware protecting all routes except auth. Authorization checks ensure users can only access their own characters. Persistence: SQLite via rusqlite (sb-db) with write-through on all mutations. Optional via SB_DB_PATH env var; falls back to in-memory. Typed responses: ~20 response DTOs in sb-shared replacing ad-hoc JSON. Combat: Injectable RNG via &mut impl Rng for deterministic tests. Clean Architecture: Combat types and response DTOs in sb-shared; domain services in sb-core; auth in sb-auth; persistence in sb-db.
59 lines
1.8 KiB
Rust
59 lines
1.8 KiB
Rust
use serde::Serialize;
|
|
|
|
#[derive(Debug, Clone, Serialize)]
|
|
pub struct SongDef {
|
|
pub id: &'static str,
|
|
pub name: &'static str,
|
|
pub description: &'static str,
|
|
pub combat_effect: &'static str,
|
|
pub required_level: i32,
|
|
}
|
|
|
|
pub const BARD_SONGS: &[SongDef] = &[
|
|
SongDef {
|
|
id: "seekers_ballad",
|
|
name: "The Seeker's Ballad",
|
|
description: "Produces light while exploring and increases the party's chance to hit in combat.",
|
|
combat_effect: "accuracy",
|
|
required_level: 1,
|
|
},
|
|
SongDef {
|
|
id: "travellers_tune",
|
|
name: "The Traveller's Tune",
|
|
description: "Makes the party more dexterous and agile, harder to hit.",
|
|
combat_effect: "defense",
|
|
required_level: 1,
|
|
},
|
|
SongDef {
|
|
id: "badhr_kilnfest",
|
|
name: "Badh'r Kilnfest",
|
|
description: "An ancient Elven melody that heals wounds during combat and while traveling.",
|
|
combat_effect: "heal",
|
|
required_level: 1,
|
|
},
|
|
SongDef {
|
|
id: "waylands_watch",
|
|
name: "Wayland's Watch",
|
|
description: "Soothes foes, reducing the damage they deal in combat.",
|
|
combat_effect: "weaken",
|
|
required_level: 2,
|
|
},
|
|
SongDef {
|
|
id: "falkentyne_fury",
|
|
name: "Falkentyne's Fury",
|
|
description: "Drives the party into a berserker rage, increasing melee damage.",
|
|
combat_effect: "damage",
|
|
required_level: 3,
|
|
},
|
|
SongDef {
|
|
id: "lucklaran",
|
|
name: "Lucklaran",
|
|
description: "Sets up a partial anti-magic field, increasing protection against spells.",
|
|
combat_effect: "magic_resist",
|
|
required_level: 4,
|
|
},
|
|
];
|
|
|
|
pub fn available_songs(level: i32) -> Vec<&'static SongDef> {
|
|
BARD_SONGS.iter().filter(|s| s.required_level <= level).collect()
|
|
}
|