quivr/backend/models/sqlalchemy_repository.py
Zineb El Bachiri 9aaedcff51
Fix/requests limiting (#980)
* 🗃️ Rename users table into user_daily_usage

* 💥 replace User model with UserIdentity model

* 🗃️ New UserDailyUsage class for database interaction

* 🐛 fix daily requests rate limiting per user

* 🐛 fix user stats and properties update

* ✏️ add typing and linting

* 🚚 rename user_dialy_usage Class  into user_usage & requests_count into daily_requests_count

* 🚑 fix some rebase errors
2023-08-21 14:05:13 +02:00

74 lines
2.1 KiB
Python

from datetime import datetime
from uuid import uuid4
from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class User(Base):
__tablename__ = "users"
user_id = Column(String, primary_key=True)
email = Column(String)
date = Column(DateTime)
daily_requests_count = Column(Integer)
class Brain(Base):
__tablename__ = "brains"
brain_id = Column(Integer, primary_key=True)
name = Column(String)
users = relationship("BrainUser", back_populates="brain")
vectors = relationship("BrainVector", back_populates="brain")
class BrainUser(Base):
__tablename__ = "brains_users"
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey("users.user_id"))
brain_id = Column(Integer, ForeignKey("brains.brain_id"))
rights = Column(String)
user = relationship("User")
brain = relationship("Brain", back_populates="users")
class BrainVector(Base):
__tablename__ = "brains_vectors"
vector_id = Column(String, primary_key=True, default=lambda: str(uuid4()))
brain_id = Column(Integer, ForeignKey("brains.brain_id"))
file_sha1 = Column(String)
brain = relationship("Brain", back_populates="vectors")
class BrainSubscriptionInvitation(Base):
__tablename__ = "brain_subscription_invitations"
id = Column(Integer, primary_key=True) # Assuming an integer primary key named 'id'
brain_id = Column(String, ForeignKey("brains.brain_id"))
email = Column(String, ForeignKey("users.email"))
rights = Column(String)
brain = relationship("Brain")
user = relationship("User", foreign_keys=[email])
class ApiKey(Base):
__tablename__ = "api_keys"
key_id = Column(String, primary_key=True, default=lambda: str(uuid4()))
user_id = Column(Integer, ForeignKey("users.user_id"))
api_key = Column(String, unique=True)
creation_time = Column(DateTime, default=datetime.utcnow)
is_active = Column(Boolean, default=True)
deleted_time = Column(DateTime, nullable=True)
user = relationship("User")