"""사용자 — 프론트 `types/api.ts` UserPayload/UserResponse 모양으로 내보냄. 로그인 키는 email. username 은 email 과 같은 값으로 채움(Django 필수 칸이라).""" from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): email = models.EmailField("이메일", unique=True) user_name = models.CharField("표시 이름", max_length=40, blank=True) employee_id = models.CharField("사번", max_length=40, blank=True) department = models.CharField("부서", max_length=80, blank=True) class Meta: verbose_name = "사용자" verbose_name_plural = "사용자" @property def role(self) -> str: return "ADMIN" if self.is_superuser else "USER" def as_payload(self) -> dict: """UserPayload — 로그인 응답 안의 user.""" return { "id": str(self.id), "email": self.email, "userName": self.user_name or None, "role": self.role, "employeeId": self.employee_id or None, "department": self.department or None, "authProvider": "local", } def as_response(self) -> dict: """UserResponse — GET /users/me.""" return { **self.as_payload(), "isActive": self.is_active, "createdAt": self.date_joined.isoformat(), "updatedAt": (self.last_login or self.date_joined).isoformat(), }