44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
import asyncio
|
|
|
|
from django.core.management import BaseCommand
|
|
from vacancies.main.vector_store import search_similarities
|
|
from vacancies.main.models import CustomerCV, RecommendedVacancy
|
|
from vacancies.main.bot import application
|
|
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
|
|
from qdrant_client.models import Filter, HasIdCondition
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Generates new recommended vacancies"
|
|
|
|
def handle(self, *args, **options):
|
|
asyncio.run(self.ahandle(*args, **options))
|
|
|
|
async def ahandle(self, *args, **options):
|
|
customer_cvs = CustomerCV.objects.all()
|
|
|
|
for customer_cv in customer_cvs:
|
|
recommended_vacancy_ids = RecommendedVacancy.objects.filter(
|
|
customer=customer_cv.customer,
|
|
).values_list('vacancy_id', flat=True)
|
|
|
|
query_filter = Filter(must_not=[HasIdCondition(has_id=recommended_vacancy_ids)])
|
|
result = search_similarities(query_filter, customer_cv.id)
|
|
if not result:
|
|
continue
|
|
|
|
search_result_id, vacancy_content, link = result
|
|
|
|
recommendation = RecommendedVacancy.objects.create(
|
|
customer=customer_cv.customer,
|
|
vacancy_id=search_result_id,
|
|
)
|
|
|
|
await application.bot.send_message(
|
|
chat_id=recommendation.customer.chat_id,
|
|
text=vacancy_content,
|
|
reply_markup=InlineKeyboardMarkup([[
|
|
InlineKeyboardButton("Откликнуться", url=link),
|
|
]]),
|
|
)
|