diff --git 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
@@ -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)