updated SenderService updated

This commit is contained in:
berkay 2025-03-24 18:14:03 +03:00
parent 3e1ba4cb67
commit 77893e1d95
8 changed files with 146 additions and 38 deletions

View File

@ -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)

View File

@ -0,0 +1 @@
3.12

View File

View File

@ -0,0 +1,9 @@
def main():
print("Hello from seperatorservice!")
# todo Separates account records to decision book and and other details
if __name__ == "__main__":
main()

View File

@ -0,0 +1,13 @@
[project]
name = "seperatorservice"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"arrow>=1.3.0",
"fastapi>=0.115.11",
"psycopg2-binary>=2.9.10",
"pymongo>=4.11.3",
"sqlalchemy-mixins>=2.0.5",
]

View File

@ -56,6 +56,7 @@ def write_parsed_data_to_account_records(
if __name__ == "__main__":
print("Writer Service is running")
while True:
with MongoProvider.mongo_client() as mongo_client:

View File

@ -51,37 +51,37 @@ services:
# volumes:
# - wag_postgres_commercial_data:/bitnami/postgresql
email_service:
container_name: email_service
build:
context: .
dockerfile: BankServices/EmailService/Dockerfile
networks:
- network_store_services
parser_service:
container_name: parser_service
build:
context: .
dockerfile: BankServices/ParserService/Dockerfile
networks:
- network_store_services
writer_service:
container_name: writer_service
build:
context: .
dockerfile: BankServices/WriterService/Dockerfile
networks:
- network_store_services
routine_email_service:
container_name: routine_email_service
build:
context: .
dockerfile: BankServices/RoutineEmailService/Dockerfile
networks:
- network_store_services
# email_service:
# container_name: email_service
# build:
# context: .
# dockerfile: BankServices/EmailService/Dockerfile
# networks:
# - network_store_services
#
# parser_service:
# container_name: parser_service
# build:
# context: .
# dockerfile: BankServices/ParserService/Dockerfile
# networks:
# - network_store_services
#
# writer_service:
# container_name: writer_service
# build:
# context: .
# dockerfile: BankServices/WriterService/Dockerfile
# networks:
# - network_store_services
#
# routine_email_service:
# container_name: routine_email_service
# build:
# context: .
# dockerfile: BankServices/RoutineEmailService/Dockerfile
# networks:
# - network_store_services
sender_service:
container_name: sender_service

View File

@ -23,4 +23,4 @@ dependencies = [
]
[tool.uv.workspace]
members = ["BankServices/EmailService", "BankServices/ParserService", "BankServices/ReaderService", "BankServices/SenderService", "BankServices/RoutineEmailService"]
members = ["BankServices/EmailService", "BankServices/ParserService", "BankServices/ReaderService", "BankServices/SenderService", "BankServices/RoutineEmailService", "BankServices/SeperatorService"]