init commit
This commit is contained in:
57
app/services/notifications/notification_service.py
Normal file
57
app/services/notifications/notification_service.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""Notification service"""
|
||||
|
||||
from typing import Optional
|
||||
from sqlalchemy.orm import Session
|
||||
from app.db.models import Family
|
||||
|
||||
|
||||
class NotificationService:
|
||||
"""Service for managing notifications"""
|
||||
|
||||
def __init__(self, session: Session):
|
||||
self.session = session
|
||||
|
||||
def should_notify(self, family: Family, notification_type: str) -> bool:
|
||||
"""Check if notification should be sent based on family settings"""
|
||||
if family.notification_level == "none":
|
||||
return False
|
||||
elif family.notification_level == "important":
|
||||
return notification_type in ["budget_exceeded", "goal_completed"]
|
||||
else: # all
|
||||
return True
|
||||
|
||||
def format_transaction_notification(
|
||||
self, user_name: str, amount: float, category: str, account: str
|
||||
) -> str:
|
||||
"""Format transaction notification message"""
|
||||
return (
|
||||
f"💰 {user_name} добавил запись:\n"
|
||||
f"Сумма: {amount}₽\n"
|
||||
f"Категория: {category}\n"
|
||||
f"Счет: {account}"
|
||||
)
|
||||
|
||||
def format_budget_warning(
|
||||
self, budget_name: str, spent: float, limit: float, percent: float
|
||||
) -> str:
|
||||
"""Format budget warning message"""
|
||||
return (
|
||||
f"⚠️ Внимание по бюджету!\n"
|
||||
f"Бюджет: {budget_name}\n"
|
||||
f"Потрачено: {spent}₽ из {limit}₽\n"
|
||||
f"Превышено на: {percent:.1f}%"
|
||||
)
|
||||
|
||||
def format_goal_progress(
|
||||
self, goal_name: str, current: float, target: float, percent: float
|
||||
) -> str:
|
||||
"""Format goal progress message"""
|
||||
return (
|
||||
f"🎯 Прогресс цели: {goal_name}\n"
|
||||
f"Накоплено: {current}₽ из {target}₽\n"
|
||||
f"Прогресс: {percent:.1f}%"
|
||||
)
|
||||
|
||||
def format_goal_completed(self, goal_name: str) -> str:
|
||||
"""Format goal completion message"""
|
||||
return f"✅ Цель достигнута! 🎉\n{goal_name}"
|
||||
Reference in New Issue
Block a user