הראה קוד מקור ל database.models

import logging
from dataclasses import dataclass
from datetime import datetime, timezone
from typing import List, Optional

logger = logging.getLogger(__name__)


[תיעוד] @dataclass class CodeSnippet: """ייצוג קטע קוד הנשמר במסד הנתונים.""" user_id: int file_name: str code: str programming_language: str # שדות מועדפים is_favorite: bool = False favorited_at: Optional[datetime] = None # שדות נעיצה לדשבורד is_pinned: bool = False pinned_at: Optional[datetime] = None pin_order: int = 0 description: str = "" tags: Optional[List[str]] = None version: int = 1 created_at: Optional[datetime] = None updated_at: Optional[datetime] = None is_active: bool = True # שדות סל מיחזור: מתי נמחק ומתי יפוג התוקף למחיקה סופית deleted_at: Optional[datetime] = None deleted_expires_at: Optional[datetime] = None def __post_init__(self) -> None: if self.tags is None: self.tags = [] if self.created_at is None: self.created_at = datetime.now(timezone.utc) if self.updated_at is None: self.updated_at = datetime.now(timezone.utc)
# אם הפריט מוגדר כלא-פעיל אך אין timestamps למחיקה, השאר ריק — נקבע בזמן מחיקה
[תיעוד] @dataclass class LargeFile: """ייצוג מסמך עבור קובץ גדול הנשמר במסד הנתונים.""" user_id: int file_name: str content: str programming_language: str file_size: int lines_count: int description: str = "" tags: Optional[List[str]] = None created_at: Optional[datetime] = None updated_at: Optional[datetime] = None is_active: bool = True deleted_at: Optional[datetime] = None deleted_expires_at: Optional[datetime] = None def __post_init__(self) -> None: if self.tags is None: self.tags = [] if self.created_at is None: self.created_at = datetime.now(timezone.utc) if self.updated_at is None: self.updated_at = datetime.now(timezone.utc) if self.content: self.file_size = len(self.content.encode('utf-8')) self.lines_count = len(self.content.split('\n'))
[תיעוד] @dataclass class Snippet: """מודל עבור פריט ספריית הסניפטים הציבורית (עם תור אישור). מייצג הצעת סניפט שמוגשת ע"י משתמש, מאושרת ע"י אדמין, ונחשפת לציבור לאחר אישור. """ title: str description: str code: str language: str user_id: int # מזהה המגיש (created_by) # שדות סטטוס ואישור status: str = "pending" # pending | approved | rejected submitted_at: Optional[datetime] = None approved_at: Optional[datetime] = None approved_by: Optional[int] = None rejection_reason: Optional[str] = None def __post_init__(self) -> None: # ניקוי שדות טקסט בסיסי והגדרות זמנים self.title = (self.title or "").strip() self.description = (self.description or "").strip() self.code = self.code or "" self.language = (self.language or "").strip() if self.submitted_at is None: self.submitted_at = datetime.now(timezone.utc)