mirror of
https://github.com/imartinez/privateGPT.git
synced 2025-07-31 23:16:58 +00:00
Added makerchecker model
This commit is contained in:
parent
e2bad96854
commit
35527620c0
@ -1,8 +1,10 @@
|
||||
from datetime import datetime
|
||||
from sqlalchemy import Boolean, event, select, func, update
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Table
|
||||
from sqlalchemy import Boolean, event, select, func, update, insert
|
||||
from sqlalchemy.orm import relationship, backref
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime
|
||||
|
||||
from private_gpt.users.models.department import Department
|
||||
from private_gpt.users.models.makerchecker import MakerChecker
|
||||
from private_gpt.users.db.base_class import Base
|
||||
|
||||
from private_gpt.users.models.document_department import document_department_association
|
||||
@ -28,11 +30,19 @@ class Document(Base):
|
||||
"User", back_populates="uploaded_documents")
|
||||
is_enabled = Column(Boolean, default=True)
|
||||
# Use document_department_association as the secondary for the relationship
|
||||
verified = Column(Boolean, default=False) # Added verified column
|
||||
departments = relationship(
|
||||
"Department",
|
||||
secondary=document_department_association,
|
||||
back_populates="documents"
|
||||
)
|
||||
# Relationship with MakerChecker
|
||||
maker_checker_entry = relationship(
|
||||
"MakerChecker",
|
||||
backref=backref("document", uselist=False),
|
||||
foreign_keys="[MakerChecker.record_id]",
|
||||
primaryjoin="and_(MakerChecker.table_name=='document', MakerChecker.record_id==Document.id)",
|
||||
)
|
||||
|
||||
# Event listeners for updating total_documents in Department
|
||||
@event.listens_for(Document, 'after_insert')
|
||||
|
34
private_gpt/users/models/makerchecker.py
Normal file
34
private_gpt/users/models/makerchecker.py
Normal file
@ -0,0 +1,34 @@
|
||||
from datetime import datetime
|
||||
from sqlalchemy import Boolean, event, select, func, update
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime
|
||||
from private_gpt.users.db.base_class import Base
|
||||
from sqlalchemy import Enum
|
||||
from enum import Enum as PythonEnum
|
||||
|
||||
class MakerCheckerStatus(PythonEnum):
|
||||
PENDING = 'pending'
|
||||
APPROVED = 'approved'
|
||||
REJECTED = 'rejected'
|
||||
|
||||
|
||||
class MakerCheckerActionType(PythonEnum):
|
||||
INSERT = 'insert'
|
||||
UPDATE = 'update'
|
||||
|
||||
|
||||
class MakerChecker(Base):
|
||||
"""Models a maker-checker table"""
|
||||
__tablename__ = "maker_checker"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
table_name = Column(String(50), nullable=False)
|
||||
record_id = Column(Integer, nullable=False)
|
||||
action_type = Column(Enum(MakerCheckerActionType), nullable=False, default=MakerCheckerActionType.INSERT) # 'insert' or 'update'
|
||||
status = Column(Enum(MakerCheckerStatus), nullable=False, default=MakerCheckerStatus.PENDING) # 'pending', 'approved', or 'rejected'
|
||||
created_at = Column(DateTime, default=datetime.datetime.utcnow)
|
||||
verified_at = Column(DateTime, nullable=True)
|
||||
verified_by = Column(Integer, ForeignKey("users.id"), nullable=True)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<MakerChecker {self.table_name} {self.record_id}>"
|
@ -9,10 +9,13 @@ from sqlalchemy import (
|
||||
DateTime,
|
||||
ForeignKey
|
||||
)
|
||||
from sqlalchemy import event, func, select, update
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.orm import relationship, backref
|
||||
from sqlalchemy import event, func, select, update, insert
|
||||
|
||||
from private_gpt.users.db.base_class import Base
|
||||
from private_gpt.users.models.department import Department
|
||||
from private_gpt.users.models.makerchecker import MakerChecker
|
||||
|
||||
|
||||
class User(Base):
|
||||
"""Models a user table"""
|
||||
@ -51,6 +54,13 @@ class User(Base):
|
||||
"departments.id"), nullable=False)
|
||||
department = relationship("Department", back_populates="users")
|
||||
|
||||
maker_checker_entry = relationship(
|
||||
"MakerChecker",
|
||||
backref=backref("user", uselist=False),
|
||||
foreign_keys="[MakerChecker.record_id]",
|
||||
primaryjoin="and_(MakerChecker.table_name=='users', MakerChecker.record_id==User.id)",
|
||||
)
|
||||
|
||||
def __repr__(self):
|
||||
"""Returns string representation of model instance"""
|
||||
return "<User {fullname!r}>".format(fullname=self.fullname)
|
||||
@ -60,16 +70,29 @@ class User(Base):
|
||||
)
|
||||
|
||||
|
||||
@event.listens_for(User, 'after_insert')
|
||||
def create_maker_checker_entry(mapper, connection, target):
|
||||
# Create a MakerChecker entry for the new User record
|
||||
connection.execute(
|
||||
insert(MakerChecker).values(
|
||||
table_name='users',
|
||||
record_id=target.id,
|
||||
action_type='insert',
|
||||
status='pending',
|
||||
verified_at=None,
|
||||
verified_by=None,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@event.listens_for(User, 'after_insert')
|
||||
@event.listens_for(User, 'after_delete')
|
||||
def update_total_users(mapper, connection, target):
|
||||
department_id = target.department_id
|
||||
print(f"Department ID is: {department_id}")
|
||||
total_users = connection.execute(
|
||||
select([func.count()]).select_from(User).where(
|
||||
User.department_id == department_id)
|
||||
).scalar()
|
||||
print(f"Total users is: {total_users}")
|
||||
connection.execute(
|
||||
update(Department).values(total_users=total_users).where(
|
||||
Department.id == department_id)
|
||||
|
Loading…
Reference in New Issue
Block a user