mapping.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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" # Invalid format or other error
  11. AUTO_CREATE_USER = "AUTO_CREATE_USER" # User does not exist -> Create User + Mapping
  12. class MappingRowPreview(BaseModel):
  13. row_index: int
  14. mobile: str
  15. mapped_key: str
  16. mapped_email: Optional[str] = None
  17. status: MappingRowStatus
  18. message: Optional[str] = None
  19. user_id: Optional[int] = None
  20. class MappingPreviewResponse(BaseModel):
  21. total_rows: int
  22. valid_count: int
  23. error_count: int
  24. new_count: int
  25. update_count: int
  26. preview_rows: List[MappingRowPreview]
  27. class MappingImportSummary(BaseModel):
  28. total_processed: int
  29. inserted: int
  30. updated: int
  31. failed: int
  32. class MappingCreate(BaseModel):
  33. mobile: str
  34. mapped_key: Optional[str] = None
  35. mapped_email: Optional[str] = None
  36. password: str # Admin password for verification
  37. class MappingUpdate(BaseModel):
  38. mapped_key: Optional[str] = None
  39. mapped_email: Optional[str] = None
  40. password: str # Required for verification
  41. class MappingDelete(BaseModel):
  42. password: str
  43. class MappingResponse(BaseModel):
  44. id: int
  45. app_id: int
  46. user_id: int
  47. mapped_key: Optional[str] = None
  48. mapped_email: Optional[str] = None
  49. user_mobile: str # Convenient to have
  50. is_active: bool = True
  51. new_user_created: bool = False
  52. generated_password: Optional[str] = None
  53. class Config:
  54. from_attributes = True
  55. class MappingList(BaseModel):
  56. total: int
  57. items: List[MappingResponse]