"""공용 스니펫 — 로컬 SQLite(snippets/usage) 를 그대로 서버 PostgreSQL 로. 전원 읽기, 사용 기록은 사람별.""" from django.conf import settings from django.db import models class Snippet(models.Model): name = models.CharField(max_length=200, primary_key=True) # 대문자·공백→_ 정규화된 이름(옛 DB 와 동일) desc = models.CharField(max_length=500, blank=True, default="") body = models.TextField() category = models.CharField(max_length=100, default="코드") created_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL, related_name="+") updated_at = models.DateTimeField(auto_now=True) class Meta: ordering = ["name"] def as_dto(self, usage: "SnippetUsage | None" = None) -> dict: return { "name": self.name, "desc": self.desc, "body": self.body, "category": self.category, "usageCount": usage.count if usage else 0, "lastUsed": int(usage.last_used.timestamp()) if usage and usage.last_used else 0, } class SnippetUsage(models.Model): """사람별 사용 횟수 — 랭킹은 내 기준으로.""" snippet = models.ForeignKey(Snippet, on_delete=models.CASCADE, related_name="usages") user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="+") count = models.IntegerField(default=0) last_used = models.DateTimeField(null=True) class Meta: unique_together = [("snippet", "user")]