"""M02 내 기계 길(PLAN 821-1 · `M02_MyMachine`) — `/api/m02/layers/personal/my-machines`(?owner=). GET 목록(줄마다 시간당 · 쓰는곳수) · GET `/{키}` 하나(+시간당 · 쓰는곳 · 같은이름) · POST 만들기 몸 {줄?, 본뜬?: M01 · 내 기계 키(「비슷한 기계에서 시작」 · 「M01 기계 복사해 만들기」)} · PUT `/{키}` 몸 {줄} · DELETE `/{키}`(답 = 쓰는곳 — 그 단가산출은 사본의 마지막 값 그대로). 권한 = 층 권한 한 벌(`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.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 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.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)