updated SenderService updated
This commit is contained in:
parent
3e1ba4cb67
commit
77893e1d95
|
|
@ -1,19 +1,103 @@
|
||||||
import time
|
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 Check if postgres is_email_send === False then send email
|
||||||
# todo Trigger @mongo 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:
|
def check_any_written_stage_in_mongo_database(mongo_provider) -> list:
|
||||||
return mongo_provider.find_one(filter_query={"stage": "written", "send": None})
|
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__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
while True:
|
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)
|
time.sleep(5)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
3.12
|
||||||
|
|
@ -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()
|
||||||
|
|
@ -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",
|
||||||
|
]
|
||||||
|
|
@ -56,6 +56,7 @@ def write_parsed_data_to_account_records(
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
print("Writer Service is running")
|
print("Writer Service is running")
|
||||||
while True:
|
while True:
|
||||||
with MongoProvider.mongo_client() as mongo_client:
|
with MongoProvider.mongo_client() as mongo_client:
|
||||||
|
|
|
||||||
|
|
@ -51,37 +51,37 @@ services:
|
||||||
# volumes:
|
# volumes:
|
||||||
# - wag_postgres_commercial_data:/bitnami/postgresql
|
# - wag_postgres_commercial_data:/bitnami/postgresql
|
||||||
|
|
||||||
email_service:
|
# email_service:
|
||||||
container_name: email_service
|
# container_name: email_service
|
||||||
build:
|
# build:
|
||||||
context: .
|
# context: .
|
||||||
dockerfile: BankServices/EmailService/Dockerfile
|
# dockerfile: BankServices/EmailService/Dockerfile
|
||||||
networks:
|
# networks:
|
||||||
- network_store_services
|
# - network_store_services
|
||||||
|
#
|
||||||
parser_service:
|
# parser_service:
|
||||||
container_name: parser_service
|
# container_name: parser_service
|
||||||
build:
|
# build:
|
||||||
context: .
|
# context: .
|
||||||
dockerfile: BankServices/ParserService/Dockerfile
|
# dockerfile: BankServices/ParserService/Dockerfile
|
||||||
networks:
|
# networks:
|
||||||
- network_store_services
|
# - network_store_services
|
||||||
|
#
|
||||||
writer_service:
|
# writer_service:
|
||||||
container_name: writer_service
|
# container_name: writer_service
|
||||||
build:
|
# build:
|
||||||
context: .
|
# context: .
|
||||||
dockerfile: BankServices/WriterService/Dockerfile
|
# dockerfile: BankServices/WriterService/Dockerfile
|
||||||
networks:
|
# networks:
|
||||||
- network_store_services
|
# - network_store_services
|
||||||
|
#
|
||||||
routine_email_service:
|
# routine_email_service:
|
||||||
container_name: routine_email_service
|
# container_name: routine_email_service
|
||||||
build:
|
# build:
|
||||||
context: .
|
# context: .
|
||||||
dockerfile: BankServices/RoutineEmailService/Dockerfile
|
# dockerfile: BankServices/RoutineEmailService/Dockerfile
|
||||||
networks:
|
# networks:
|
||||||
- network_store_services
|
# - network_store_services
|
||||||
|
|
||||||
sender_service:
|
sender_service:
|
||||||
container_name: sender_service
|
container_name: sender_service
|
||||||
|
|
|
||||||
|
|
@ -23,4 +23,4 @@ dependencies = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.uv.workspace]
|
[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"]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue