mapping.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from typing import List, Optional
  2. from pydantic import BaseModel
  3. from enum import Enum
  4. class MappingStrategy(str, Enum):
  5. SKIP = "SKIP"
  6. OVERWRITE = "OVERWRITE"
  7. class MappingRowStatus(str, Enum):
  8. NEW = "NEW" # User exists, no mapping exists -> Ready to insert
  9. UPDATE = "UPDATE" # User exists, mapping exists -> Ready to update (if overwrite)
  10. ERROR = "ERROR" # User does not exist, or format error
  11. class MappingRowPreview(BaseModel):
  12. row_index: int
  13. mobile: str
  14. mapped_key: str
  15. mapped_email: Optional[str] = None
  16. status: MappingRowStatus
  17. message: Optional[str] = None
  18. user_id: Optional[int] = None
  19. class MappingPreviewResponse(BaseModel):
  20. total_rows: int
  21. valid_count: int
  22. error_count: int
  23. new_count: int
  24. update_count: int
  25. preview_rows: List[MappingRowPreview]
  26. class MappingImportSummary(BaseModel):
  27. total_processed: int
  28. inserted: int
  29. updated: int
  30. failed: int
  31. class MappingCreate(BaseModel):
  32. mobile: str
  33. mapped_key: Optional[str] = None
  34. mapped_email: Optional[str] = None
  35. class MappingResponse(BaseModel):
  36. id: int
  37. app_id: int
  38. user_id: int
  39. mapped_key: Optional[str] = None
  40. mapped_email: Optional[str] = None
  41. user_mobile: str # Convenient to have
  42. is_active: bool = True
  43. class Config:
  44. from_attributes = True
  45. class MappingList(BaseModel):
  46. total: int
  47. items: List[MappingResponse]