updated SenderService updated
This commit is contained in:
@@ -1,19 +1,103 @@
|
||||
import time
|
||||
from jinja2 import Template
|
||||
import arrow
|
||||
import os
|
||||
|
||||
from Services.MongoService.provider import MongoProvider
|
||||
from Configs.mongo import MongoConfig
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
from Services.EmailService.provider import send_email
|
||||
|
||||
|
||||
mongo_prefix = "CollectedData"
|
||||
delimiter = "|"
|
||||
|
||||
|
||||
# todo Check if postgres is_email_send === False then send email
|
||||
# todo Trigger @mongo email_send = False then send email
|
||||
def app():
|
||||
print("Hello from sender service!")
|
||||
|
||||
send_to = "karatay@mehmetkaratay.com.tr"
|
||||
|
||||
|
||||
def check_any_written_stage_in_mongo_database(mongo_provider) -> bool:
|
||||
return mongo_provider.find_one(filter_query={"stage": "written", "send": None})
|
||||
def check_any_written_stage_in_mongo_database(mongo_provider) -> list:
|
||||
return mongo_provider.find_many(filter_query={"stage": "written", "send": None})
|
||||
|
||||
|
||||
def render_email_template(
|
||||
headers: list, rows: list, balance_error: bool, bank_balance: float
|
||||
):
|
||||
template_dir = os.path.join(os.path.dirname(__file__), "templates")
|
||||
env = Environment(
|
||||
loader=FileSystemLoader(template_dir)
|
||||
) # Load templates from the directory
|
||||
template = env.get_template(
|
||||
"template_accounts.html"
|
||||
) # Load the specific template file
|
||||
# Render template with variables
|
||||
return template.render(
|
||||
headers=headers,
|
||||
rows=rows,
|
||||
bank_balance=f"{bank_balance:.4f}",
|
||||
balance_error=balance_error,
|
||||
today=str(arrow.now().date()),
|
||||
)
|
||||
|
||||
|
||||
def send_email_to_given_address(to: str, html_template: str) -> bool:
|
||||
today = arrow.now()
|
||||
subject = f"{str(today.date())} Gunes Apt. Cari Durum Bilgilendirme Raporu"
|
||||
try:
|
||||
send_email(subject=subject, receivers=[to], html=html_template)
|
||||
print(f"Email is sent to : {send_to}. BB")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
print("Email is not sent")
|
||||
return False
|
||||
|
||||
|
||||
def send_email_and_update_mongo_database(mongo_provider, email_data) -> bool:
|
||||
parsed_list = email_data.get("parsed")
|
||||
if not parsed_list:
|
||||
return False
|
||||
|
||||
list_of_rows = list()
|
||||
for parsed in parsed_list:
|
||||
bank_date = arrow.get(str(parsed.get("bank_date")))
|
||||
process_comment = parsed.get("process_comment")
|
||||
currency_value = f"{parsed.get('currency_value'):.4f}"
|
||||
list_of_rows.append(
|
||||
[bank_date, process_comment, currency_value]
|
||||
)
|
||||
|
||||
html_template = render_email_template(
|
||||
headers=["Ulaştığı Tarih", "Banka Transaksiyonu Ek Bilgi", "Aktarım Değeri"],
|
||||
rows=list_of_rows,
|
||||
balance_error=False,
|
||||
bank_balance=0,
|
||||
)
|
||||
if send_email_to_given_address(to=send_to, html_template=html_template):
|
||||
mongo_provider.update_one(
|
||||
filter_query={"filename": email_data.get("filename")},
|
||||
update_data={"$set": {"send": True}},
|
||||
)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
while True:
|
||||
app()
|
||||
print("Sender service is running...")
|
||||
with MongoProvider.mongo_client() as mongo_client:
|
||||
provider = MongoProvider(
|
||||
client=mongo_client,
|
||||
database=MongoConfig.DATABASE_NAME,
|
||||
storage_reason=[mongo_prefix, str(arrow.now().date())],
|
||||
)
|
||||
results = check_any_written_stage_in_mongo_database(mongo_provider=provider)
|
||||
for result in results:
|
||||
send_email_and_update_mongo_database(
|
||||
mongo_provider=provider,
|
||||
email_data=result,
|
||||
)
|
||||
time.sleep(5)
|
||||
|
||||
Reference in New Issue
Block a user