VRJ6XA2ZRV5MP6UVYCFFWOVHXFFVOMNXZP4LZ5EYYPYKSDHJYCGAC UGT3GABDAFKEMPYA2G2ATTGHAITHWLOMCVSI5NLGXZNZ7BDFKONQC VKL4K7RIU44ELZLG3LGWMKODNVJMVZ5GGDITMPE4Z2TTQGXCVJBAC EENZ7HLU65AN4LHPLQNAFIZ37IFO6BC7G4R4PJEYXATK5BOJD42AC WERHVZ4ICVQTQOJZ4CJJNCG74CUGAQ5U7FSYQD4EEWHAAU43ETTQC GIKW7G7ZCEUPTGDPUV236VJCPM7UGNKI6LI2T5KMIUWVNB4PICQQC VWSECUK44FH5GMLGZV4OQJWD4VGQOSLDNMGLMQPUP2QQWU5VKMUAC ND46Z5YJFEA6V6OKCASQIVLXY65HDT7NQAEMCY3CUNR34FTOZB2QC LDIXCKQYULG3U5QU3A4PNASUPKU6E5MFAH3XZXWPLFYX6ABE4ASAC async def start_project_timer(project_id: int):pass
async def start_project_timer(project_id: str):available_project_ids = [str(p["_id"]) for p in ProjectManager.list()]if project_id not in available_project_ids:return {"project_id": "This project id does not exist"}logs = list(TimeLogManager.list({"project_id": project_id, "end": None}))if logs:raise ProjectAlreadyStartedlog = TimeLog(project_id=project_id)TimeLogManager.create(log.dict(exclude_none=True))return log
async def end_project_timer(project_id: int):pass
async def end_project_timer(project_id: str):logs = list(TimeLogManager.list({"project_id": project_id, "end": None}))if not logs:raise ProjectWasNotStartedif len(logs) > 1:raise MoreThanOneLogOpenForProjectlog = serialize_from_document(logs[0])logger.info(f"We got log {log}")log = TimeLog(**log)logger.info(f"Validated log: {log.dict()}")log.stop_timer()TimeLogManager.update(serialize_to_document(log.dict()))return log
class LogIsStopped(Exception):passclass ProjectWasNotStarted(Exception):passclass MoreThanOneLogOpenForProject(Exception):passclass ProjectAlreadyStarted(Exception):pass
from bson.objectid import ObjectIddef serialize_from_document(document: dict) -> dict:document["id"] = str(document.pop("_id"))return documentdef serialize_to_document(document: dict) -> dict:document["_id"] = ObjectId(document.pop("id"))return document