"""M02 내 기계 길(PLAN 821-1 · `M02_MyMachine`) — `/api/m02/layers/personal/my-machines`(?owner=). GET 목록(줄마다 시간당 · 쓰는곳수) · GET `/{키}` 하나(+시간당 · 쓰는곳 · 같은이름) · POST 만들기 몸 {줄?, 본뜬?: M01 · 내 기계 키(「비슷한 기계에서 시작」 · 「M01 기계 복사해 만들기」)} · PUT `/{키}` 몸 {줄} · DELETE `/{키}`(답 = 쓰는곳 — 그 단가산출은 사본의 마지막 값 그대로) · POST `/draft` 몸 {줄, 키?, 본뜬?} = 단가산출 기계 창 [확인](827-1 · 쓰기 없음 · 층 쓰기 권한) → {줄, 셈값, 시간당}. 권한 = 층 권한 한 벌(`Router_Items._root` — 본인 개인 층 · 맡은 회사 관리자) · 개인 층만(그 밖 404). ⚠ 등록은 `main.py`(로그인만). """ from __future__ import annotations from typing import Any from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from common_util.common_util_auth import verify_session from M02_MasterTemplete import M02_MyMachine as mym from M02_MasterTemplete import M02_MyMachine_Draft as draft from M02_MasterTemplete.M02_MasterTemplete_Router_Items import Session, _call, _root router = APIRouter(prefix="/api/m02", tags=["M02 My Machine"]) PATH = "/layers/{layer}/my-machines" class MachineBody(BaseModel): 줄: dict[str, Any] | None = None 본뜬: str | None = None 키: str | None = None # 초안 확인(827-1) — 고칠 내 기계 표지: str | None = None # 초안 확인(827-1) — 화면이 정한 표지(셈 기록 열쇠) def _folder(session: Session, layer: str, owner: str | None, write: bool = False): if layer != "personal": raise HTTPException(status_code=404, detail="내 기계는 개인 층만") return _root(session, layer, owner, write=write) @router.get(PATH) def my_machines(layer: str, owner: str | None = None, session: Session = Depends(verify_session)): return _call(_folder(session, layer, owner), mym.listing) @router.post(PATH + "/draft") def my_machine_draft( layer: str, body: MachineBody, owner: str | None = None, session: Session = Depends(verify_session), ): return _call(_folder(session, layer, owner, True), draft.check, body.model_dump()) @router.get(PATH + "/{key}") def my_machine( layer: str, key: str, owner: str | None = None, session: Session = Depends(verify_session) ): return _call(_folder(session, layer, owner), mym.one, key) @router.post(PATH) def my_machine_create( layer: str, body: MachineBody, owner: str | None = None, session: Session = Depends(verify_session), ): return _call(_folder(session, layer, owner, True), mym.create, body.줄, body.본뜬) @router.put(PATH + "/{key}") def my_machine_update( layer: str, key: str, body: MachineBody, owner: str | None = None, session: Session = Depends(verify_session), ): return _call(_folder(session, layer, owner, True), mym.update, key, body.줄) @router.delete(PATH + "/{key}") def my_machine_delete( layer: str, key: str, owner: str | None = None, session: Session = Depends(verify_session) ): return _call(_folder(session, layer, owner, True), mym.delete, key)