Spaces:
Runtime error
Runtime error
from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey, Float, Text | |
from sqlalchemy.orm import relationship | |
from datetime import datetime | |
from database import Base | |
import json | |
class Notification(Base): | |
__tablename__ = 'notifications' | |
id = Column(Integer, primary_key=True) | |
user_id = Column(Integer, ForeignKey('users.id'),nullable=True) | |
user = relationship("User", back_populates="notifications") | |
template_key = Column(String, ForeignKey('notification_templates.key')) # ํ ํ๋ฆฟ ํค ์ฐธ์กฐ | |
template = relationship("NotificationTemplate") | |
created_at = Column(DateTime, default=datetime.utcnow) | |
data = Column(String) | |
# 'type' ํ๋๋ฅผ ํตํด ๋ค์ํ ์๋ฆผ ํ์ ์ ๊ตฌ๋ถํ ์ ์์ต๋๋ค. | |
type = Column(String) | |
is_read = Column(Boolean, default=False) | |
deleted = Column(Boolean, default=False) | |
ko_template = Column(String, default=None) # ํ๊ตญ์ด ๋ฉ์์ง ํ ํ๋ฆฟ | |
ko_status_template = Column(String, default=None) | |
en_template = Column(String, default=None) # | |
en_status_template = Column(String, default=None) | |
def get_message(self, lang): | |
template = self.template | |
if lang == 'ko': | |
if not self.ko_template or not self.ko_status_template: # ์ฒ๋ฆฌํด๋๊ฒ ์์ผ๋ฉด ํด๋น template์ ๋ง๊ฒ ๊ณ์ฐํฉ๋๋ค | |
template_string = template.ko_template | |
template_status = template.ko_status_template | |
data_dict = json.loads(self.data) | |
result = template_string.format(**data_dict) | |
self.ko_template = result | |
self.ko_status_template = template_status | |
else: # # ์ฒ๋ฆฌํด๋๊ฒ ์์ผ๋ฉด ๊ทธ๋ฅ ๊ฐ์ ธ์ต๋๋ค. | |
result = self.ko_template | |
template_status = self.ko_status_template | |
elif lang == 'en': | |
if not self.en_template or not self.en_status_template: | |
template_string = template.en_template | |
template_status = template.en_status_template | |
data_dict = json.loads(self.data) | |
result = template_string.format(**data_dict) | |
self.en_template = result | |
self.en_status_template = template_status | |
else: | |
result = self.en_template | |
template_status = self.en_status_template | |
else: | |
raise ValueError(f"Unsupported language: {lang}") | |
return result, template_status | |
class NotificationTemplate(Base): | |
__tablename__ = 'notification_templates' | |
id = Column(Integer, primary_key=True) | |
key = Column(String, unique=True) | |
ko_template = Column(String) # ํ๊ตญ์ด ๋ฉ์์ง ํ ํ๋ฆฟ | |
ko_status_template = Column(String) | |
en_template = Column(String) # | |
en_status_template = Column(String) | |
""" ์ฌ๊ธฐ๋ ์ฌ์ฉ ์์ | |
template = NotificationTemplate( | |
key='music_test_complete', | |
ko_template='์์ ๊ฒ์ฌ๊ฐ ์๋ฃ๋์์ต๋๋ค! ํ์ ๋ฅ ์ {rate}% ์ ๋๋ค.', | |
en_template='Music Test Complete! The Plagiarism Rate is {rate}%.' | |
) | |
session.add(template) | |
session.commit() -> ์ด๋ ๊ฒ ์๋ฉ ๋ฃ์ด๋๊ณ ์ฐ๋ผ๋๊ฑฐ ์๋ .. | |
alert = Notification( | |
user_id=1, | |
template_key='music_test_complete', | |
data=json.dumps({'rate': 30}) # ํฌ๋งทํ ์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ๋ฅผ JSON ๋ฌธ์์ด๋ก ์ ์ฅ | |
) | |
session.add(alert) | |
session.commit() | |
# ์๋ฆผ ๋ฉ์์ง ์กฐํ | |
alert = session.query(Notification).first() | |
print(alert.get_message('ko')) # ํ๊ตญ์ด ๋ฉ์์ง ์ถ๋ ฅ | |
print(alert.get_message('en')) # ์์ด ๋ฉ์์ง ์ถ๋ ฅ | |
""" | |
""" ์ฌ๊ธฐ๋ key์ ํฌ๋งทํ ๋ฐ์ดํฐ ๋ชจ์. ๊ผด์ Dict๋ก ์จ๋๊ธด ํ๋๋ฐ 'key' : 'format' ๋๋์ผ๋ก ๊ฑ ๋ณด๊ณ ์ฐ๋ฉด ๋๋๊ฑฐ์ | |
keys_and_formattings={ | |
'music_test_complete' : {'rate': float.2f} | |
'update_notice_templage' : {'date': String} # YYYY-MM-DD | |
} | |
""" |