11import datetime
22import json
33import os
4- from typing import Any , Dict , Optional
4+ from typing import Any , Dict , Optional , List , Tuple
55
66from src .config import Config
77
88
99class NikkeDatabase :
10+
1011 def __init__ (self ) -> None :
1112 self .config : Config = Config ()
1213 self .data_folder : str = str (self .config .USER_DATA_DIR )
1314 self .current_file : str = self ._generate_new_filename ()
14- self .data : Dict [str , Any ] = {}
15+ self .data : List [Dict [str , Any ]] = []
16+ self .added_nikkes : int = 0
1517
1618 def _generate_new_filename (self ) -> str :
1719 timestamp = datetime .datetime .now ().strftime ("%Y_%m_%d_%H_%M_%S" )
1820 return str (self .config .get_user_data_file (timestamp ))
1921
20- def load_data (self ) -> Dict [str , Any ]:
22+ def load_data (self ) -> List [ Dict [str , Any ] ]:
2123 if os .path .exists (self .current_file ):
2224 with open (self .current_file , "r" ) as f :
2325 return json .load (f )
24- return {}
26+ return []
2527
2628 def save_data (self ) -> None :
2729 os .makedirs (self .data_folder , exist_ok = True )
2830 with open (self .current_file , "w" ) as f :
2931 json .dump (self .data , f , indent = 4 )
3032
31- def add_or_update_character (self , name : str , nikke_info : Dict [str , Any ]) -> bool :
33+ def add_or_update_character (
34+ self , name : str , nikke_info : Dict [str , Any ]
35+ ) -> Tuple [bool , bool ]:
36+ # Validate combat_power
37+ try :
38+ combat_power = int (nikke_info .get ("combat_power" , "0" ))
39+ except ValueError :
40+ combat_power = 0
41+
3242 simplified_info = {
3343 "name" : name ,
3444 "manufacturer" : nikke_info .get ("manufacturer" ),
@@ -38,18 +48,34 @@ def add_or_update_character(self, name: str, nikke_info: Dict[str, Any]) -> bool
3848 "rarity" : nikke_info .get ("rarity" ),
3949 "weapon" : nikke_info .get ("weapon" ),
4050 "element" : nikke_info .get ("element" ),
41- "combat_power" : nikke_info . get ( " combat_power" ),
51+ "combat_power" : str ( combat_power ),
4252 "last_updated" : str (datetime .datetime .now ()),
4353 }
4454
45- self .data [name ] = simplified_info
55+ # Check if character already exists
56+ for i , character in enumerate (self .data ):
57+ if character ["name" ] == name :
58+ # Update existing character
59+ self .data [i ] = simplified_info
60+ self .save_data ()
61+ return True , False # Updated, but not added
62+
63+ # If character doesn't exist, add new one
64+ self .data .append (simplified_info )
65+ self .added_nikkes += 1
4666 self .save_data ()
47- return True
67+ return True , True # Added new character
4868
4969 def get_character (self , name : str ) -> Optional [Dict [str , Any ]]:
50- return self .data .get (name )
70+ for character in self .data :
71+ if character ["name" ] == name :
72+ return character
73+ return None
74+
75+ def get_added_nikkes_count (self ) -> int :
76+ return self .added_nikkes
5177
52- def get_all_characters (self ) -> Dict [str , Any ]:
78+ def get_all_characters (self ) -> List [ Dict [str , Any ] ]:
5379 return self .data
5480
5581 def close (self ) -> None :
0 commit comments