11from datetime import datetime
2+ from typing import List
23
34from fastapi import Depends
5+ from sqlalchemy import delete
46from sqlalchemy import select
57from sqlalchemy .orm import Session
68
@@ -22,20 +24,24 @@ def get_history(self) -> list[History]:
2224 query = select (History )
2325 return list (self .session .execute (query ).scalars ().all ())
2426
25- def update_history (self , history : History ) -> History :
26- history_key = history .history_key
27- history_value = history .history_value
28-
29- with self .transaction :
30- query = select (History ).where (History .history_key == history_key )
31- result = self .session .execute (query ).scalar_one_or_none ()
32- if result :
33- result .history_value = history_value
27+ def update_history (self , history_list : List [History ]) -> List [History ]:
28+ keys = [h .history_key for h in history_list ]
29+ existing_key = (
30+ self .session .query (History ).filter (History .history_key .in_ (keys )).all ()
31+ )
32+ existing_map = {r .history_key : r for r in existing_key }
33+
34+ for item in history_list :
35+ if item .history_key in existing_map :
36+ # if existed, update
37+ existing = existing_map [item .history_key ]
38+ existing .history_value = item .history_value
39+ existing .history_unit = item .history_unit
3440 else :
35- result = History ( history_key = history_key , history_value = history_value )
36- self .session .add (result )
41+ # if not existed, insert
42+ self .session .add (item )
3743
38- return history
44+ return history_list
3945
4046 def get_start_date (self ) -> datetime | None :
4147 query = select (History ).where (History .history_key == "start_date" )
@@ -44,3 +50,10 @@ def get_start_date(self) -> datetime | None:
4450 if result is None :
4551 return None
4652 return datetime .strptime (result .history_value , "%Y-%m-%d" )
53+
54+ def delete_history (self , history_key : str ) -> bool :
55+ history = self .session .query (History ).filter_by (history_key = history_key ).first ()
56+ if not history :
57+ return False
58+ self .session .delete (history )
59+ return True
0 commit comments