From c772df34f343b872d58d8a6ee408afad05f68451 Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Sun, 2 Jun 2024 16:12:05 +0200 Subject: [PATCH] can insert accepted appointment to db --- db/mongo_manager.py | 8 +++++ models/AcceptedResultPojo.py | 57 ++++++++++++------------------ workers/find_infos_from_results.py | 48 +++++++++++++++++++++++-- 3 files changed, 76 insertions(+), 37 deletions(-) diff --git a/db/mongo_manager.py b/db/mongo_manager.py index 06586e7..999d3f5 100755 --- a/db/mongo_manager.py +++ b/db/mongo_manager.py @@ -4,6 +4,7 @@ import time from pymongo import MongoClient +from models.AcceptedResultPojo import AcceptedResultPojo from models.LinkPojo import LinkPojo from models.ReserveResultPojo import ReserveResultPojo from models.contact_pojo import ContactPojo @@ -132,6 +133,13 @@ class MongoDbManager: print(error) return email_list + def insert_accepted_reserve(self, accepted_pojo: AcceptedResultPojo): + try: + collection_to_use = self.db[ACCEPTED_APPOINTMENT_LIST] + collection_to_use.insert_one(accepted_pojo.to_firestore_dict()) + except Exception as Error: + self.logger.info(Error) + def get_links_to_validate(self) -> list: collection_name = LINKS_TO_VALIDATE link_list = [] diff --git a/models/AcceptedResultPojo.py b/models/AcceptedResultPojo.py index 6718913..3d3f13d 100644 --- a/models/AcceptedResultPojo.py +++ b/models/AcceptedResultPojo.py @@ -2,22 +2,21 @@ from dataclasses import dataclass from dataclasses_json import dataclass_json -from db.mongo_manager import MongoDbManager -from models import ReserveResultPojo - -@dataclass_json -@dataclass class AcceptedResultPojo: - def __init__(self, msg: str, slot_position, sim_position, passport, email, name, phone, ccid: str, url, + def __init__(self, id, msg: str, slot_position, sim_position, passport, email, name, firstName, lastName, phone, + ccid: str, url, created_at: str, validated_at: str): self.message = msg + self.id = id self.slot_position = slot_position self.sim_position = sim_position self.passport = "{}".format(passport) self.email = email self.name = name + self.firstName = firstName + self.lastName = lastName self.phone = phone self.ccid = ccid self.url = url @@ -31,31 +30,21 @@ class AcceptedResultPojo: def __repr__(self): return str(self.__dict__) - -def get_accepted_result_from(reserve_pojo: ReserveResultPojo, mongo_db_manager: MongoDbManager, - all_contact_list) -> AcceptedResultPojo: - if reserve_pojo.lastName is None or len(reserve_pojo.lastName) == 0: - for _contact in all_contact_list: - if _contact.mail == reserve_pojo.mail: - reserve_pojo.lastName = _contact.last_name - reserve_pojo.firstName = _contact.first_name - reserve_pojo.phone = _contact.phone - reserve_pojo.passport = _contact.passport - - if reserve_pojo is None: - # send email even there are no reserve info - return AcceptedResultPojo("", slot_position=0, sim_position=0, - passport="", email="", phone="", - name="", ccid="", - url="", created_at="", validated_at="") - else: - toReturn = AcceptedResultPojo(reserve_pojo.message, slot_position=reserve_pojo.slot_position, - sim_position=reserve_pojo.sim_position, - passport=reserve_pojo.passport, email=reserve_pojo.email, - phone=reserve_pojo.phone, - name="{} {}".format(reserve_pojo.lastName, reserve_pojo.firstName), - ccid=reserve_pojo.ccid, - url=reserve_pojo.url, created_at=reserve_pojo.created_at, - validated_at=reserve_pojo.validated_at) - toReturn.mail_password = mongo_db_manager.get_code_for_email(reserve_pojo.email) - return toReturn + def to_firestore_dict(self): + dest = { + u'id': self.id, + u'phone': self.phone, + u'firstName': self.firstName, + u'lastName': self.lastName, + u'message': self.message, + u'email': self.email, + u'passport': self.passport, + u'url': self.url, + u'ccid': self.ccid, + u'store_type': self.store, + u'accepted': 'ACCEPTED', + u'created_at': self.created_at, + u'appointment_time': self.time, + u'validated_at': self.validated_at, + } + return dest diff --git a/workers/find_infos_from_results.py b/workers/find_infos_from_results.py index a187ac5..ed94a0e 100644 --- a/workers/find_infos_from_results.py +++ b/workers/find_infos_from_results.py @@ -1,8 +1,10 @@ +import datetime import glob import re -from db.mongo_manager import MONGO_STORE_MANAGER -from models import AcceptedResultPojo +from db.mongo_manager import MONGO_STORE_MANAGER, MongoDbManager +from models.AcceptedResultPojo import AcceptedResultPojo +from models.ReserveResultPojo import ReserveResultPojo CONFIRMATION_SENTENCE = "Nous avons le plaisir de vous confirmer votre rendez-vous" TIME_REGEX = "([0-1]?[0-9]|2[0-3]):[0-5][0-9]" @@ -44,7 +46,7 @@ def get_appointment_info_from_id(info_list: list): for _item in _all_items: for _info in info_list: if _item.id == _info[0]: - _accepted = AcceptedResultPojo.get_accepted_result_from(_item, MONGO_STORE_MANAGER, _all_contact_list) + _accepted = get_accepted_result_from(_item, MONGO_STORE_MANAGER, _all_contact_list) _accepted.store = _info[1][0] _accepted.time = _info[1][1] accepted_appointments.append(_accepted) @@ -55,8 +57,48 @@ def get_appointment_info_from_id(info_list: list): return accepted_appointments +def get_accepted_result_from(reserve_pojo: ReserveResultPojo, mongo_db_manager: MongoDbManager, + all_contact_list) -> AcceptedResultPojo: + if reserve_pojo.lastName is None or len(reserve_pojo.lastName) == 0: + for _contact in all_contact_list: + if _contact.mail == reserve_pojo.email: + reserve_pojo.lastName = _contact.last_name + reserve_pojo.firstName = _contact.first_name + reserve_pojo.phone = _contact.phone + reserve_pojo.passport = _contact.passport + + if reserve_pojo is None: + # send email even there are no reserve info + return AcceptedResultPojo(id="", msg="", slot_position=0, sim_position=0, + passport="", email="", phone="", + name="", ccid="", + url="", created_at="", validated_at="") + else: + toReturn = AcceptedResultPojo(id=reserve_pojo.id, msg=reserve_pojo.message, + slot_position=reserve_pojo.slot_position, + sim_position=reserve_pojo.sim_position, + passport=reserve_pojo.passport, email=reserve_pojo.email, + phone=reserve_pojo.phone, + name="{} {}".format(reserve_pojo.lastName, reserve_pojo.firstName), + firstName=reserve_pojo.firstName, lastName=reserve_pojo.lastName, + ccid=reserve_pojo.ccid, + url=reserve_pojo.url, created_at=reserve_pojo.created_at, + validated_at=reserve_pojo.validated_at) + toReturn.mail_password = mongo_db_manager.get_code_for_email(reserve_pojo.email) + return toReturn + + +def migre_accepted_appointment(day: str, accepted_appointments: list): + # get successful item from firestore + for accepted_pojo in accepted_appointments: + accepted_pojo.day = day + accepted_pojo.accepted_at = datetime.datetime.strptime(day, '%Y-%m-%d').timestamp() + MONGO_STORE_MANAGER.insert_accepted_reserve(accepted_pojo) + + if __name__ == '__main__': accepted_appointments = get_appointment_info_from_id(find_ids_from_results()) + migre_accepted_appointment("2024-06-01", accepted_appointments) for _accepted in accepted_appointments: print(""" 姓名:{} ({} {})