from fastapi import APIRouter, HTTPException from typing import Optional import uuid from bd import Settings from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from bd.tables.poll import Poll from bd.tables.question import Question from bd.tables.choice import Choice router = APIRouter(tags=["polls"], prefix="/polls") PAIRS = [ ("инженер-техник", "инженер-контролер"), ("вязальщик", "санитарный врач"), ("повар", "наборщик"), ("фотограф", "зав. магазином"), ("чертежник", "дизайнер"), ("философ", "психиатр"), ("ученый-химик", "бухгалтер"), ("редактор научного журнала", "адвокат"), ("лингвист", "переводчик художественной литературы"), ("педиатр", "статистик"), ("организатор воспитательной работы", "председатель профсоюза"), ("спортивный врач", "фельетонист"), ("нотариус", "снабженец"), ("перфоратор", "карикатурист"), ("политический деятель", "писатель"), ("садовник", "метеоролог"), ("водитель", "медсестра"), ("инженер-электрик", "секретарь-машинистка"), ("маляр", "художник по металлу"), ("биолог", "главный врач"), ("телеоператор", "режиссер"), ("гидролог", "ревизор"), ("зоолог", "зоотехник"), ("математик", "архитектор"), ("работник ИДН", "счетовод"), ("учитель", "милиционер"), ("воспитатель", "художник по керамике"), ("экономист", "заведующий отделом"), ("корректор", "критик"), ("завхоз", "директор"), ("радиоинженер", "специалист по ядерной физике"), ("водопроводчик", "наборщик"), ("агроном", "председатель сельхозкооператива"), ("закройщик-модельер", "декоратор"), ("археолог", "эксперт"), ("работник музея", "консультант"), ("ученый", "актер"), ("логопед", "стенографист"), ("врач", "дипломат"), ("главный бухгалтер", "директор"), ("поэт", "психолог"), ("архивариус", "скульптор"), ] def get_session(): settings = Settings() engine = create_engine(settings.DATABASE_URL_syncpg, future=True) return sessionmaker(bind=engine, future=True) @router.post("/holland", status_code=201) def create_holland_poll(author_id: Optional[str] = None): Session = get_session() with Session() as session: poll = Poll(title="Тест Д. Голланда — определение типа личности", description="Тест Д. Голланда: выберите из каждой пары предпочитаемую профессию.") # polls are anonymous; ignore author_id session.add(poll) for idx, (a, b) in enumerate(PAIRS, start=1): q = Question(text=f"Вариант {idx}", position=idx, type="single", poll=poll) session.add(q) ch1 = Choice(question=q, text=f"а) {a}", position=1) ch2 = Choice(question=q, text=f"б) {b}", position=2) session.add(ch1) session.add(ch2) session.commit() session.refresh(poll) return {"id": str(poll.id), "questions": len(poll.questions)}