"""add_sample_vacancies Revision ID: 7ffa784ab042 Revises: a694f7c9e766 Create Date: 2025-08-30 20:00:00.661534 """ from collections.abc import Sequence from alembic import op # revision identifiers, used by Alembic. revision: str = "7ffa784ab042" down_revision: str | Sequence[str] | None = "a694f7c9e766" branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None def upgrade() -> None: """Add sample vacancies.""" # Create sample vacancies data vacancies_data = [ { "title": "Senior Python Developer", "description": """Мы ищем опытного Python-разработчика для работы в команде разработки высоконагруженного веб-сервиса. Обязанности: • Разработка и поддержка API на Python (FastAPI/Django) • Оптимизация производительности приложений • Проектирование архитектуры микросервисов • Код-ревью и менторство младших разработчиков • Участие в планировании и декомпозиции задач Требования: • Опыт разработки на Python от 5 лет • Глубокие знания Django/FastAPI, SQLAlchemy, PostgreSQL • Опыт работы с Redis, RabbitMQ/Kafka • Знание Docker, Kubernetes • Опыт работы с микросервисной архитектурой • Понимание принципов SOLID, DRY, KISS Будет плюсом: • Опыт работы с облачными сервисами (AWS/GCP) • Знание Go или Node.js • Опыт ведения технических интервью""", "key_skills": "Python, FastAPI, Django, PostgreSQL, Redis, Docker, Kubernetes, Микросервисы, REST API, Git", "employment_type": "FULL_TIME", "experience": "MORE_THAN_6", "schedule": "REMOTE", "salary_from": 250000, "salary_to": 400000, "salary_currency": "RUR", "gross_salary": False, "company_name": "TechCorp Solutions", "company_description": "Компания-разработчик инновационных решений в области fintech. У нас работает более 500 специалистов, офисы в Москве и Санкт-Петербурге.", "area_name": "Москва", "metro_stations": "Сокольники, Красносельская", "address": "г. Москва, ул. Русаковская, д. 13", "professional_roles": "Программист, разработчик", "contacts_name": "Анна Петрова", "contacts_email": "hr@techcorp.ru", "contacts_phone": "+7 (495) 123-45-67", "is_archived": False, "premium": True, "url": "https://techcorp.ru/careers/senior-python", }, { "title": "Frontend React Developer", "description": """Приглашаем талантливого фронтенд-разработчика для создания современных веб-приложений. Задачи: • Разработка пользовательских интерфейсов на React • Интеграция с REST API • Оптимизация производительности приложений • Написание unit-тестов • Участие в планировании UX/UI решений Требования: • Опыт работы с React от 3 лет • Знание TypeScript, HTML5, CSS3, SASS/SCSS • Опыт работы с Redux/MobX • Знание современных инструментов сборки (Webpack, Vite) • Понимание принципов responsive design • Опыт работы с Git Мы предлагаем: • Интересные задачи и современный стек технологий • Гибкий график работы • Медицинское страхование • Обучение за счет компании • Дружная команда профессионалов""", "key_skills": "React, TypeScript, JavaScript, HTML5, CSS3, SASS, Redux, Webpack, Git, REST API", "employment_type": "FULL_TIME", "experience": "BETWEEN_3_AND_6", "schedule": "FLEXIBLE", "salary_from": 150000, "salary_to": 250000, "salary_currency": "RUR", "gross_salary": False, "company_name": "Digital Agency Pro", "company_description": "Креативное digital-агентство, специализирующееся на разработке веб-приложений и мобильных решений для крупных брендов.", "area_name": "Санкт-Петербург", "metro_stations": "Технологический институт, Пушкинская", "address": "г. Санкт-Петербург, ул. Правды, д. 10", "professional_roles": "Программист, разработчик", "contacts_name": "Михаил Сидоров", "contacts_email": "jobs@digitalagency.ru", "contacts_phone": "+7 (812) 987-65-43", "is_archived": False, "premium": False, "url": "https://digitalagency.ru/vacancy/react-dev", }, { "title": "DevOps Engineer", "description": """Ищем DevOps-инженера для автоматизации процессов CI/CD и управления облачной инфраструктурой. Основные задачи: • Проектирование и поддержка CI/CD pipeline • Управление Kubernetes кластерами • Мониторинг и логирование приложений • Автоматизация deployment процессов • Обеспечение отказоустойчивости сервисов • Оптимизация затрат на инфраструктуру Требования: • Опыт работы DevOps от 4 лет • Глубокие знания Docker, Kubernetes • Опыт работы с облачными платформами (AWS/Azure/GCP) • Знание Terraform, Ansible • Опыт с Jenkins, GitLab CI/CD • Знание мониторинга (Prometheus, Grafana, ELK) • Понимание сетевых технологий Условия: • Официальное трудоустройство • Компенсация обучения и сертификации • Современное оборудование • Возможность работы из дома""", "key_skills": "Docker, Kubernetes, AWS, Terraform, Ansible, Jenkins, GitLab CI/CD, Prometheus, Grafana, Linux", "employment_type": "FULL_TIME", "experience": "BETWEEN_3_AND_6", "schedule": "REMOTE", "salary_from": 200000, "salary_to": 350000, "salary_currency": "RUR", "gross_salary": False, "company_name": "CloudTech Systems", "company_description": "Системный интегратор, специализирующийся на внедрении облачных решений и автоматизации IT-процессов для корпоративных клиентов.", "area_name": "Москва", "metro_stations": "Белорусская, Маяковская", "address": "г. Москва, Тверская ул., д. 25", "professional_roles": "Системный администратор, DevOps", "contacts_name": "Елена Васильева", "contacts_email": "hr@cloudtech.ru", "contacts_phone": "+7 (495) 555-12-34", "is_archived": False, "premium": True, "url": "https://cloudtech.ru/careers/devops", }, { "title": "Junior Java Developer", "description": """Приглашаем начинающего Java-разработчика для участия в крупных enterprise-проектах. Обязанности: • Разработка backend-сервисов на Java • Написание unit и integration тестов • Участие в code review • Изучение и применение лучших практик разработки • Работа в команде по Agile методологии Требования: • Знание Java Core, ООП принципов • Базовое понимание Spring Framework • Опыт работы с SQL базами данных • Знание Git • Желание развиваться и изучать новые технологии • Понимание принципов REST API Мы предлагаем: • Менторство от senior разработчиков • Обучающие курсы и конференции • Карьерный рост • Стабильную зарплату • Молодая и амбициозная команда • Интересные проекты в финтех сфере""", "key_skills": "Java, Spring Framework, SQL, Git, REST API, JUnit, Maven, PostgreSQL", "employment_type": "FULL_TIME", "experience": "BETWEEN_1_AND_3", "schedule": "FULL_DAY", "salary_from": 80000, "salary_to": 120000, "salary_currency": "RUR", "gross_salary": False, "company_name": "FinTech Innovations", "company_description": "Быстро развивающийся стартап в области финансовых технологий. Создаем инновационные решения для банков и финансовых институтов.", "area_name": "Екатеринбург", "metro_stations": "Площадь 1905 года, Динамо", "address": "г. Екатеринбург, ул. Ленина, д. 33", "professional_roles": "Программист, разработчик", "contacts_name": "Дмитрий Козлов", "contacts_email": "recruitment@fintech-inn.ru", "contacts_phone": "+7 (343) 456-78-90", "is_archived": False, "premium": False, "url": "https://fintech-inn.ru/jobs/java-junior", }, { "title": "Product Manager IT", "description": """Ищем опытного продуктового менеджера для управления развитием digital-продуктов. Основные задачи: • Управление продуктовой стратегией и roadmap • Анализ потребностей пользователей и рынка • Координация работы команд разработки • A/B тестирование и анализ метрик • Планирование релизов и feature delivery • Взаимодействие с stakeholders • Управление product backlog Требования: • Опыт работы Product Manager от 4 лет • Знание методологий Agile/Scrum • Опыт работы с аналитическими системами • Понимание UX/UI принципов • Навыки работы с Jira, Confluence • Опыт проведения интервью с пользователями • Аналитическое мышление и data-driven подход Что мы предлагаем: • Высокую степень влияния на продукт • Работу с топ-менеджментом компании • Современные инструменты и методики • Конкурентную заработную плату • Полный соц. пакет и ДМС""", "key_skills": "Product Management, Agile, Scrum, Аналитика, UX/UI, Jira, A/B тестирование, User Research", "employment_type": "FULL_TIME", "experience": "BETWEEN_3_AND_6", "schedule": "FLEXIBLE", "salary_from": 180000, "salary_to": 280000, "salary_currency": "RUR", "gross_salary": False, "company_name": "Marketplace Solutions", "company_description": "Один из лидеров российского e-commerce рынка. Развиваем крупнейшую онлайн-платформу с миллионами пользователей.", "area_name": "Москва", "metro_stations": "Парк культуры, Сокольники", "address": "г. Москва, Садовая-Триумфальная ул., д. 4/10", "professional_roles": "Менеджер продукта, Product Manager", "contacts_name": "Ольга Смирнова", "contacts_email": "pm-jobs@marketplace.ru", "contacts_phone": "+7 (495) 777-88-99", "is_archived": False, "premium": True, "url": "https://marketplace.ru/career/product-manager", }, ] # Insert vacancies using raw SQL with proper enum casting for vacancy_data in vacancies_data: op.execute(f""" INSERT INTO vacancy ( title, description, key_skills, employment_type, experience, schedule, salary_from, salary_to, salary_currency, gross_salary, company_name, company_description, area_name, metro_stations, address, professional_roles, contacts_name, contacts_email, contacts_phone, is_archived, premium, published_at, url, created_at, updated_at ) VALUES ( '{vacancy_data["title"]}', '{vacancy_data["description"].replace("'", "''")}', '{vacancy_data["key_skills"]}', '{vacancy_data["employment_type"]}'::employmenttype, '{vacancy_data["experience"]}'::experience, '{vacancy_data["schedule"]}'::schedule, {vacancy_data["salary_from"]}, {vacancy_data["salary_to"]}, '{vacancy_data["salary_currency"]}', {vacancy_data["gross_salary"]}, '{vacancy_data["company_name"]}', '{vacancy_data["company_description"].replace("'", "''")}', '{vacancy_data["area_name"]}', '{vacancy_data["metro_stations"]}', '{vacancy_data["address"]}', '{vacancy_data["professional_roles"]}', '{vacancy_data["contacts_name"]}', '{vacancy_data["contacts_email"]}', '{vacancy_data["contacts_phone"]}', {vacancy_data["is_archived"]}, {vacancy_data["premium"]}, NOW(), '{vacancy_data["url"]}', NOW(), NOW() ) """) def downgrade() -> None: """Remove sample vacancies.""" # Remove the sample vacancies by their unique titles sample_titles = [ "Senior Python Developer", "Frontend React Developer", "DevOps Engineer", "Junior Java Developer", "Product Manager IT", ] for title in sample_titles: op.execute(f"DELETE FROM vacancy WHERE title = '{title}'")