- 기계 보기 부품(A00_Common/line_stack_machine_sheet) — 836-1 제어 구역 그대로(기계 표 꼴 훅 sheet · 잠금 lock) + 기본 정보 · 손료 근거 접이 카드 + 비슷한 기계에서 시작 · 값 바꾸면 브라우저 계산기로 즉시 - 서버 POST /api/m02/machine-sheet(M02_MyMachine_Sheet) — 식 고름 + 식 문서 + 처음 줄 값 + 연결 기록 · 쓰기 없음 · 파이썬 bind ↔ TS bindDoc 짝 - 덮음 ↔ 기계 줄(common_util_machine_sheet) — 고침 없음 = 줄 바이트 같음 · 내 기계 바로 · 직접 자리 맞춤 - 내 기계 = M01 에 없는 기계만 — 화면 만들기 · 고치기에서 M01 과 같은 이름 · 규격 409(불러오기 자동 생성은 그대로) · [새 기계] · 고침 열림 - 옛 기계 양식 부품(ui_template_machine_form) 지움 — 쓰는 곳 0(부품 모음 견본 줄도 걷음) - 낡은 시험 test_821_3 test_stack_line_copy — 836-2 자동 따라옴(내 기계 고치면 SK 금액 따라감 · 갱신 할 것 없음)에 맞춤 - 지킴 시험 test_840_2 — M01 기계 655 대 박은 식 셈 = 요소 셈 · 줄 그대로 · 굴착기 덮음 · 내 기계 꼴 · M01 같은 이름 막음 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
88 lines
3.2 KiB
Python
88 lines
3.2 KiB
Python
"""M02 내 기계 길(PLAN 821-1 · `M02_MyMachine`) — `/api/m02/layers/personal/my-machines`(?owner=).
|
|
|
|
GET 목록(줄마다 시간당 · 쓰는곳수) · GET `/{키}` 하나(+시간당 · 쓰는곳 · 같은이름) ·
|
|
POST 만들기 몸 {줄?, 본뜬?: M01 · 내 기계 키(「비슷한 기계에서 시작」)} · 만들기 · 고치기 = M01 과 같은 이름 · 규격 409(840-2) ·
|
|
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_own, 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_own, 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)
|