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 } """