Expand character model with additional attributes and advanced customization options

- Added fields such as `nickname`, `age`, `gender`, `species`, `nationality`, `status`, and others to enhance character customization.
- Modified localization files to include new field labels and placeholders.
- Updated `CharacterComponent` and `CharacterDetail` components with UI elements for the newly added attributes.
- Introduced "Advanced Mode" toggle to manage visibility of extended customization options.
- Refactored database models and repository methods (`addNewCharacter`, `updateCharacter`, and `fetchCharacters`) to handle the extended schema.
- Improved data encryption and decryption workflows for secure storage of added attributes.
- Enhanced user experience by reorganizing character customization layouts.
This commit is contained in:
natreex
2026-01-23 20:49:57 -05:00
parent 57bf0c6ec3
commit 0fbd3743e7
11 changed files with 806 additions and 211 deletions

View File

@@ -13,13 +13,26 @@ type Database = sqlite3.Database;
// MIGRATIONS
// =============================================================================
const schemaVersion = 1;
const schemaVersion = 2;
/**
* DEV ONLY - S'exécute à chaque refresh, pas besoin de version
* Mets ta query, test, efface après
*/
const devQueries: string[] = [];
const devQueries: string[] = [
// Nouveaux champs de personnages
`ALTER TABLE book_characters ADD COLUMN nickname TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN age TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN gender TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN species TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN nationality TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN status TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN speech_pattern TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN catchphrase TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN residence TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN notes TEXT DEFAULT NULL`,
`ALTER TABLE book_characters ADD COLUMN color TEXT DEFAULT NULL`,
];
const isDev:boolean = !app.isPackaged;
@@ -86,6 +99,19 @@ function migrateFromOldSystem(db: Database): void {
// Add spells_enabled column to book_tools if missing
addColumn(db, 'book_tools', 'spells_enabled', 'INTEGER NOT NULL DEFAULT 0');
// Add new character fields if missing
addColumn(db, 'book_characters', 'nickname', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'age', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'gender', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'species', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'nationality', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'status', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'speech_pattern', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'catchphrase', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'residence', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'notes', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'color', 'TEXT DEFAULT NULL');
// Create book_spell_tags table if missing
db.exec(`
CREATE TABLE IF NOT EXISTS book_spell_tags (
@@ -208,6 +234,21 @@ export function runMigrations(db: Database): void {
db.exec(`CREATE INDEX IF NOT EXISTS idx_spells_user ON book_spells(user_id)`);
}
// v2 - Add new character fields (nickname, age, gender, species, nationality, status, etc.)
if (currentVersion < 2) {
addColumn(db, 'book_characters', 'nickname', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'age', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'gender', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'species', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'nationality', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'status', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'speech_pattern', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'catchphrase', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'residence', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'notes', 'TEXT DEFAULT NULL');
addColumn(db, 'book_characters', 'color', 'TEXT DEFAULT NULL');
}
setDbVersion(db, schemaVersion);
}
@@ -346,12 +387,23 @@ export function initializeSchema(db: Database): void {
user_id TEXT NOT NULL,
first_name TEXT NOT NULL,
last_name TEXT,
nickname TEXT,
age TEXT,
gender TEXT,
species TEXT,
nationality TEXT,
status TEXT,
category TEXT NOT NULL,
title TEXT,
image TEXT,
role TEXT,
biography TEXT,
history TEXT,
speech_pattern TEXT,
catchphrase TEXT,
residence TEXT,
notes TEXT,
color TEXT,
last_update INTEGER DEFAULT 0,
FOREIGN KEY (book_id) REFERENCES erit_books(book_id) ON DELETE CASCADE
);