diff --git a/app/db/crud.py b/app/db/crud.py index f846ebc..963a3bd 100644 --- a/app/db/crud.py +++ b/app/db/crud.py @@ -439,6 +439,16 @@ def update_user( if modify.expire_strategy is not None: dbuser.expire_strategy = modify.expire_strategy or None + if modify.expire_strategy == UserExpireStrategy.FIXED_DATE: + dbuser.usage_duration = None + dbuser.activation_deadline = None + elif modify.expire_strategy == UserExpireStrategy.START_ON_FIRST_USE: + dbuser.expire_date = None + elif modify.expire_strategy == UserExpireStrategy.NEVER: + dbuser.expire_date = None + dbuser.usage_duration = None + dbuser.activation_deadline = None + if modify.expire_date is not None: dbuser.expire_date = modify.expire_date or None diff --git a/app/models/user.py b/app/models/user.py index 1da44de..60a8048 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -61,6 +61,35 @@ class User(BaseModel): model_config = ConfigDict(from_attributes=True) + @model_validator(mode="after") + def validate_expiry(self): + if self.expire_strategy == UserExpireStrategy.START_ON_FIRST_USE: + if not self.usage_duration: + raise ValueError( + "User expire_strategy cannot be start_on_first_use without a valid usage_duration." + ) + + # Set expire_date to None if expire_strategy is START_ON_FIRST_USE + self.expire_date = None + + elif self.expire_strategy == UserExpireStrategy.FIXED_DATE: + if not self.expire_date: + raise ValueError( + "User expire_strategy cannot be fixed_date without a valid expire date." + ) + + # Set usage_duration and activation_deadline to None if expire_strategy is START_ON_FIRST_USE + self.usage_duration = None + self.activation_deadline = None + + elif self.expire_strategy == UserExpireStrategy.NEVER: + # Set expire_date, usage_duration and activation_deadline to None if expire_strategy is NEVER + self.expire_date = None + self.usage_duration = None + self.activation_deadline = None + + return self + class UserCreate(User): service_ids: list[int] = Field([]) @@ -79,22 +108,6 @@ class UserCreate(User): } ) - @model_validator(mode="after") - def validate_expiry(self): - if self.expire_strategy == UserExpireStrategy.START_ON_FIRST_USE: - if not self.usage_duration: - raise ValueError( - "User expire_strategy can not be start_on_first_use without a valid usage_duration." - ) - elif ( - self.expire_strategy == UserExpireStrategy.FIXED_DATE - and not self.expire_date - ): - raise ValueError( - "User expire_strategy can not be fixed_date without a valid expire date." - ) - return self - class UserModify(UserCreate): service_ids: list[int] | None = Field(None)