linkedin2/utils/search.py

69 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'model')))
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
from sqlalchemy.orm import joinedload
from sqlalchemy import or_
from sqlalchemy.exc import IntegrityError
from model.database import Client, AppliedJob, Job
def get_filtered_jobs(session: AsyncSession, user_job_titles, minimum_annual_salary, salary_currency,
user_location_type, user_locations, user_levels, user_job_types):
# Строим фильтры для каждого из параметров пользователя
filters = []
# Фильтрация по job_title (примерное совпадение)
if user_job_titles:
filters.append(Job.job_title.in_(user_job_titles))
# Фильтрация по minimum_annual_salary (если указано)
if minimum_annual_salary is not None:
filters.append(Job.minimum_annual_salary >= minimum_annual_salary)
# Фильтрация по salary_currency (если указано)
if salary_currency is not None:
filters.append(Job.salary_currency == salary_currency)
# Фильтрация по location_type (если указано)
if user_location_type:
filters.append(Job.location_type == user_location_type)
# Фильтрация по location (разделяем по каждому городу)
if user_locations:
location_filters = [Job.location.ilike(location) for location in user_locations]
filters.append(or_(*location_filters))
# Фильтрация по job_level (если указаны)
if user_levels:
filters.append(Job.job_level.in_(user_levels))
# Фильтрация по job_type (если указаны)
if user_job_types:
filters.append(Job.job_type.in_(user_job_types))
# Выполняем запрос с применением всех фильтров
query = session.query(Job).filter(*filters)
# Получаем все результаты
jobs = query.all()
return jobs
# Пример использования функции
jobs = get_filtered_jobs(
session=session,
user_job_titles=["Electronics Engineer", "Hardware Engineer"],
minimum_annual_salary=None,
salary_currency=None,
user_location_type=None,
user_locations=["Burnaby, Canada", "Vancouver, Canada", "Toronto, Canada"],
user_levels=["Mid", "Senior", "Manager"],
user_job_types=["Full-time", "Permanent"]
)
# Выводим вакансии
for job in jobs:
print(job.job_title, job.location, job.job_level, job.job_type)