mapping.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from typing import List, Optional
  2. from datetime import datetime
  3. from pydantic import BaseModel
  4. from enum import Enum
  5. class MappingStrategy(str, Enum):
  6. SKIP = "SKIP"
  7. OVERWRITE = "OVERWRITE"
  8. class MappingRowStatus(str, Enum):
  9. NEW = "NEW" # User exists, no mapping exists -> Ready to insert
  10. UPDATE = "UPDATE" # User exists, mapping exists -> Ready to update (if overwrite)
  11. ERROR = "ERROR" # Invalid format or other error
  12. AUTO_CREATE_USER = "AUTO_CREATE_USER" # User does not exist -> Create User + Mapping
  13. class MappingRowPreview(BaseModel):
  14. row_index: int
  15. mobile: str
  16. mapped_key: str
  17. mapped_email: Optional[str] = None
  18. status: MappingRowStatus
  19. message: Optional[str] = None
  20. user_id: Optional[int] = None
  21. class MappingPreviewResponse(BaseModel):
  22. total_rows: int
  23. valid_count: int
  24. error_count: int
  25. new_count: int
  26. update_count: int
  27. preview_rows: List[MappingRowPreview]
  28. class MappingImportSummary(BaseModel):
  29. total_processed: int
  30. inserted: int
  31. updated: int
  32. failed: int
  33. class ImportLogItem(BaseModel):
  34. import_time: datetime
  35. mobile: str
  36. mapped_key: Optional[str]
  37. status: str # "Success" or "Failed"
  38. message: Optional[str] = None # Failure reason or success detail
  39. is_unified_account_created: bool = False
  40. generated_password: Optional[str] = None
  41. mapped_email: Optional[str] = None
  42. class ImportLogResponse(BaseModel):
  43. summary: MappingImportSummary
  44. logs: List[ImportLogItem]
  45. class MappingCreate(BaseModel):
  46. mobile: str
  47. mapped_key: Optional[str] = None
  48. mapped_email: Optional[str] = None
  49. password: str # Admin password for verification
  50. class MappingUpdate(BaseModel):
  51. mapped_key: Optional[str] = None
  52. mapped_email: Optional[str] = None
  53. password: str # Required for verification
  54. class MappingDelete(BaseModel):
  55. password: str
  56. class MappingResponse(BaseModel):
  57. id: int
  58. app_id: int
  59. user_id: int
  60. mapped_key: Optional[str] = None
  61. mapped_email: Optional[str] = None
  62. user_mobile: str # Convenient to have
  63. user_status: str # Added: Unified Account Status
  64. is_active: bool = True
  65. new_user_created: bool = False
  66. generated_password: Optional[str] = None
  67. class Config:
  68. from_attributes = True
  69. class MappingList(BaseModel):
  70. total: int
  71. items: List[MappingResponse]