"""add_sample_vacancies Revision ID: 7ffa784ab042 Revises: a694f7c9e766 Create Date: 2025-08-30 20:00:00.661534 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision: str = '7ffa784ab042' down_revision: Union[str, Sequence[str], None] = 'a694f7c9e766' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[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}'")