diff --git a/BankServices/SenderService/app.py b/BankServices/SenderService/app.py index 38073a7..32890c5 100644 --- a/BankServices/SenderService/app.py +++ b/BankServices/SenderService/app.py @@ -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) diff --git a/BankServices/SeperatorService/.python-version b/BankServices/SeperatorService/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/BankServices/SeperatorService/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/BankServices/SeperatorService/README.md b/BankServices/SeperatorService/README.md new file mode 100644 index 0000000..e69de29 diff --git a/BankServices/SeperatorService/app.py b/BankServices/SeperatorService/app.py new file mode 100644 index 0000000..ecb1e37 --- /dev/null +++ b/BankServices/SeperatorService/app.py @@ -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() diff --git a/BankServices/SeperatorService/pyproject.toml b/BankServices/SeperatorService/pyproject.toml new file mode 100644 index 0000000..1aba0c5 --- /dev/null +++ b/BankServices/SeperatorService/pyproject.toml @@ -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", +] diff --git a/BankServices/WriterService/app.py b/BankServices/WriterService/app.py index ea9410f..7f17409 100644 --- a/BankServices/WriterService/app.py +++ b/BankServices/WriterService/app.py @@ -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: diff --git a/docker-compose.yml b/docker-compose.yml index e4ec68b..3d7b0d6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 diff --git a/pyproject.toml b/pyproject.toml index 196e707..a1bfd71 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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"]