REFACTOR - Database logic

This commit is contained in:
Urtzi Alfaro
2025-08-08 09:08:41 +02:00
parent 0154365bfc
commit 488bb3ef93
113 changed files with 22842 additions and 6503 deletions

View File

@@ -4,7 +4,7 @@ User models for authentication service - FIXED
Removed tenant relationships to eliminate cross-service dependencies
"""
from sqlalchemy import Column, String, Boolean, DateTime, Text
from sqlalchemy import Column, String, Boolean, DateTime, Text, ForeignKey
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime, timezone
import uuid
@@ -56,18 +56,33 @@ class User(Base):
"last_login": self.last_login.isoformat() if self.last_login else None
}
class RefreshToken(Base):
"""Refresh token model for JWT authentication"""
"""Refresh token model for JWT token management"""
__tablename__ = "refresh_tokens"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id = Column(UUID(as_uuid=True), nullable=False, index=True) # No FK - cross-service
token = Column(Text, unique=True, nullable=False) # CHANGED FROM String(255) TO Text
user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
token = Column(String(500), unique=True, nullable=False)
expires_at = Column(DateTime(timezone=True), nullable=False)
is_revoked = Column(Boolean, default=False)
revoked_at = Column(DateTime(timezone=True), nullable=True)
# Timezone-aware datetime fields
created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc))
revoked_at = Column(DateTime(timezone=True))
updated_at = Column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc))
def __repr__(self):
return f"<RefreshToken(user_id={self.user_id}, expires_at={self.expires_at})>"
return f"<RefreshToken(id={self.id}, user_id={self.user_id}, is_revoked={self.is_revoked})>"
def to_dict(self):
"""Convert refresh token to dictionary"""
return {
"id": str(self.id),
"user_id": str(self.user_id),
"token": self.token,
"expires_at": self.expires_at.isoformat() if self.expires_at else None,
"is_revoked": self.is_revoked,
"created_at": self.created_at.isoformat() if self.created_at else None,
"updated_at": self.updated_at.isoformat() if self.updated_at else None
}