Поменяли на email и еще че то сделали, но на самом деле просто комичу, чтобы если вдруг что то сломается вернуиться обратно
This commit is contained in:
parent
1f5bd6bdbf
commit
6ccd3343e9
@ -1,6 +1,9 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
|
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
|
||||||
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
||||||
|
from sqlalchemy import Column, DateTime
|
||||||
|
from sqlalchemy.sql import func
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
engine = create_async_engine("sqlite+aiosqlite:///questions.db")
|
engine = create_async_engine("sqlite+aiosqlite:///questions.db")
|
||||||
new_session = async_sessionmaker(engine, expire_on_commit=False)
|
new_session = async_sessionmaker(engine, expire_on_commit=False)
|
||||||
@ -12,10 +15,11 @@ class QuestionOrm(Model):
|
|||||||
__tablename__ = "questions"
|
__tablename__ = "questions"
|
||||||
|
|
||||||
id: Mapped[int] = mapped_column(primary_key=True)
|
id: Mapped[int] = mapped_column(primary_key=True)
|
||||||
id_user: Mapped[int]
|
email_user: Mapped[str]
|
||||||
type_question: Mapped[bool]
|
type_question: Mapped[bool]
|
||||||
question: Mapped[str]
|
question: Mapped[str]
|
||||||
answer: Mapped[Optional[str]]
|
answer: Mapped[Optional[str]]
|
||||||
|
question_time: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
|
||||||
|
|
||||||
async def create_tables():
|
async def create_tables():
|
||||||
async with engine.begin() as conn:
|
async with engine.begin() as conn:
|
||||||
|
4
model.py
4
model.py
@ -8,11 +8,11 @@ from keras.src.utils import pad_sequences
|
|||||||
model = tf.keras.models.load_model('.//neural_network/models/model/best_model_lstm_negative.keras')
|
model = tf.keras.models.load_model('.//neural_network/models/model/best_model_lstm_negative.keras')
|
||||||
|
|
||||||
# Загрузка токенизатора
|
# Загрузка токенизатора
|
||||||
with open('neural_network/models/tokenization/tokenizer_lstm_lstm_negative.pickle', 'rb') as handle:
|
with open('.//neural_network/tokenization/tokenizer_negative.pickle', 'rb') as handle:
|
||||||
tokenizer = pickle.load(handle)
|
tokenizer = pickle.load(handle)
|
||||||
|
|
||||||
# Загрузка названий классов
|
# Загрузка названий классов
|
||||||
with open('neural_network/models/classification/class_names_lstm_negative.txt', 'r', encoding='utf-8') as file:
|
with open('.//neural_network/classification/class_names_negative.txt', 'r', encoding='utf-8') as file:
|
||||||
class_names = [line.strip() for line in file.readlines()]
|
class_names = [line.strip() for line in file.readlines()]
|
||||||
|
|
||||||
def preprocess_text(text: str):
|
def preprocess_text(text: str):
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
from sqlalchemy import select
|
from sqlalchemy import select, delete
|
||||||
|
from sqlalchemy.orm import joinedload
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from database import new_session, QuestionOrm
|
from database import new_session, QuestionOrm
|
||||||
from schemas import SQuestionAdd, SQuestion
|
from schemas import SQuestionAdd, SQuestion
|
||||||
from model import predict_answer
|
from model import predict_answer
|
||||||
|
|
||||||
|
|
||||||
class QuestionRepository:
|
class QuestionRepository:
|
||||||
@classmethod
|
@classmethod
|
||||||
async def add_one(cls, data: SQuestionAdd) -> int:
|
async def add_one(cls, data: SQuestionAdd) -> int:
|
||||||
@ -15,8 +16,19 @@ class QuestionRepository:
|
|||||||
answer = predict_answer(question_dict["question"])
|
answer = predict_answer(question_dict["question"])
|
||||||
|
|
||||||
question_dict["answer"] = answer
|
question_dict["answer"] = answer
|
||||||
|
question_dict["question_time"] = datetime.now()
|
||||||
question = QuestionOrm(**question_dict)
|
question = QuestionOrm(**question_dict)
|
||||||
session.add(question)
|
session.add(question)
|
||||||
|
|
||||||
|
# Проверка количества записей для email_user
|
||||||
|
query = select(QuestionOrm).where(QuestionOrm.email_user == data.email_user)
|
||||||
|
result = await session.execute(query)
|
||||||
|
user_questions = result.scalars().all()
|
||||||
|
if len(user_questions) > 10:
|
||||||
|
# Удаление самой старой записи
|
||||||
|
oldest_question = min(user_questions, key=lambda q: q.question_time)
|
||||||
|
await session.delete(oldest_question)
|
||||||
|
|
||||||
await session.flush()
|
await session.flush()
|
||||||
await session.commit()
|
await session.commit()
|
||||||
return question.id
|
return question.id
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
from pydantic import BaseModel, ConfigDict
|
from pydantic import BaseModel, ConfigDict
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
class SQuestionAdd(BaseModel):
|
class SQuestionAdd(BaseModel):
|
||||||
id_user: int
|
email_user: str
|
||||||
type_question: bool
|
type_question: bool
|
||||||
question: str
|
question: str
|
||||||
|
|
||||||
class SQuestion(SQuestionAdd):
|
class SQuestion(SQuestionAdd):
|
||||||
id: int
|
id: int
|
||||||
answer: Optional[str] = None
|
answer: Optional[str] = None
|
||||||
|
question_time: datetime
|
||||||
|
|
||||||
model_config = ConfigDict(from_attributes=True)
|
model_config = ConfigDict(from_attributes=True)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user