40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
from datetime import datetime
|
|
from sqlalchemy import Column, Integer, String, DateTime, Text, Boolean, ForeignKey
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.orm import relationship
|
|
|
|
Base = declarative_base()
|
|
|
|
class Document(Base):
|
|
__tablename__ = 'documents'
|
|
id = Column(Integer, primary_key=True)
|
|
file_id = Column(String(255), unique=True)
|
|
title = Column(Text)
|
|
category = Column(String(100))
|
|
gis_upload_date = Column(DateTime)
|
|
scraped_at = Column(DateTime, default=datetime.utcnow)
|
|
file_path = Column(Text)
|
|
screenshot_path = Column(Text)
|
|
is_downloaded = Column(Boolean, default=False)
|
|
file_hash = Column(String(64))
|
|
contract_id = Column(Integer, ForeignKey('contracts.id'))
|
|
|
|
class Contract(Base):
|
|
__tablename__ = 'contracts'
|
|
id = Column(Integer, primary_key=True)
|
|
gis_id = Column(String(255), unique=True) # Внутренний ID договора в ГИС
|
|
name = Column(Text) # Название/номер договора
|
|
status = Column(String(50)) # Текущий статус обработки
|
|
found_at = Column(DateTime, default=datetime.utcnow)
|
|
processed_at = Column(DateTime, nullable=True)
|
|
screenshot_main = Column(Text) # Скриншот страницы договора
|
|
|
|
documents = relationship("Document", backref="contract")
|
|
|
|
class ScraperLog(Base):
|
|
__tablename__ = 'logs'
|
|
id = Column(Integer, primary_key=True)
|
|
timestamp = Column(DateTime, default=datetime.utcnow)
|
|
action = Column(String(255))
|
|
status = Column(String(50))
|
|
message = Column(Text)
|