ai-hackaton-backend/app/models/session.py
2025-08-31 00:23:15 +05:00

47 lines
1.5 KiB
Python

from sqlmodel import SQLModel, Field
from typing import Optional
from datetime import datetime, timedelta
import uuid
class SessionBase(SQLModel):
session_id: str = Field(max_length=255, unique=True, index=True)
user_agent: Optional[str] = Field(max_length=512)
ip_address: Optional[str] = Field(max_length=45)
is_active: bool = Field(default=True)
expires_at: datetime = Field(default_factory=lambda: datetime.utcnow() + timedelta(days=30))
last_activity: datetime = Field(default_factory=datetime.utcnow)
class Session(SessionBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
@classmethod
def create_new_session(cls, user_agent: Optional[str] = None, ip_address: Optional[str] = None) -> "Session":
"""Create a new session with a unique session_id"""
return cls(
session_id=str(uuid.uuid4()),
user_agent=user_agent,
ip_address=ip_address
)
def is_expired(self) -> bool:
"""Check if session is expired"""
return datetime.utcnow() > self.expires_at
def extend_session(self, days: int = 30) -> None:
"""Extend session expiration"""
self.expires_at = datetime.utcnow() + timedelta(days=days)
self.last_activity = datetime.utcnow()
class SessionCreate(SessionBase):
pass
class SessionRead(SessionBase):
id: int
created_at: datetime
updated_at: datetime