- 줄 쌓기 기계 줄 이름 단추 = 기계 창(왼쪽 찾기 · 오른쪽 공통 기계 양식 읽기 전용 · 지금 줄 = 사본 값 · 새 값 표시) - [이 기계로 바꾸기] = repick 그대로(823-1 · 되돌리기) · M01 목록도 시간당(machine-rows) - [고쳐 쓰기](개인 층 SK) = 서버 확인(쓰기 없음) → 문서 칸 내기계초안 · 줄 입력 개인 EQP초안-N - [저장] 한 번에 서버가 초안 만들기 · 고침 → 키 바꿈 → 사본 박기 · 실패 = 만든 파일 지움 · 고친 줄 되돌림 - 미리 셈 = 초안을 그 요청 안만 셈 색인에 얹음 · 브라우저 = 셈 꼴 값을 캐시에 - 회사 · 마스터 층 · M01 기초 = 조회 · 바꾸기만(까닭 한 줄) · 옵션 가로 곁 [조회] - 걷음: 줄 옆 「복사해 내 기계로」(line_stack_mine.ts) · 찾기 창 [새 기계 만들기] · 개인관리 › 기계 만들기 · 고치기(보기 · 쓰는 곳 · 지우기만) - 내 기계 쓰는 곳 = 수식 길 사본도 셈 - 시험 test_827_1_machine_window(8) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
"""M02 단가산출(SK) 수식 길(PLAN 802-4a 4) — `M02_Doc_Sk_Path` 를 층 권한 안에서.
|
|
|
|
GET /api/m02/layers/{층}/sangeun/{키}/doc 읽기(층 읽기) → {문서, 부름, 끊음, 셈, 사본, 판}
|
|
POST /api/m02/layers/{층}/sangeun/{키}/doc/preview 미리 셈(층 쓰기) {문서?, 끊음?, 할일?}
|
|
→ {…, 전, 후, 바뀐자원?, 버림?}
|
|
POST /api/m02/layers/{층}/sangeun/{키}/doc/save 저장(층 쓰기) {문서?, 끊음?, 할일?, 판} → 읽기 꼴
|
|
GET /api/m02/layers/{층}/sangeun/{키}/doc/machine?no= 기계 창(827-1 · 층 읽기) → {사본, 지금, 새값}
|
|
옛 별칭 장부 쓰기(812-9) · 연결 찾기 길(810-4)은 걷음(815-2 · 요구 762-1 · 765).
|
|
⚠ 등록은 `main.py`(로그인만 · 층 권한은 길 안에서).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from pydantic import BaseModel
|
|
|
|
from common_util.common_util_auth import verify_session
|
|
from M02_MasterTemplete import M02_Doc_Sk_Path as path
|
|
from M02_MasterTemplete.M02_MasterTemplete_Router_Items import Layer, Session, _call, _root
|
|
|
|
router = APIRouter(prefix="/api/m02", tags=["M02 MasterTemplete Sangeun Doc"])
|
|
|
|
|
|
class DocBody(BaseModel):
|
|
문서: dict[str, Any] | None = None
|
|
끊음: dict[str, Any] | None = None
|
|
할일: str | None = None
|
|
판: str | None = None
|
|
단가기준: str | None = None # 가져온 식만(807-1 · 엑셀 | 우리)
|
|
|
|
|
|
@router.get("/layers/{layer}/sangeun/{key}/doc")
|
|
def read_doc(
|
|
layer: Layer, key: str, owner: str | None = None, session: Session = Depends(verify_session)
|
|
) -> dict:
|
|
return _call(_root(session, layer, owner), path.read, key)
|
|
|
|
|
|
@router.get("/layers/{layer}/sangeun/{key}/doc/machine")
|
|
def machine_doc(
|
|
layer: Layer,
|
|
key: str,
|
|
no: str,
|
|
owner: str | None = None,
|
|
session: Session = Depends(verify_session),
|
|
) -> dict:
|
|
return _call(_root(session, layer, owner), path.machine, key, no)
|
|
|
|
|
|
@router.post("/layers/{layer}/sangeun/{key}/doc/preview")
|
|
def preview_doc(
|
|
layer: Layer,
|
|
key: str,
|
|
body: DocBody,
|
|
owner: str | None = None,
|
|
session: Session = Depends(verify_session),
|
|
) -> dict:
|
|
folder = _root(session, layer, owner, write=True)
|
|
return _call(folder, path.preview, key, body.model_dump(exclude_none=True))
|
|
|
|
|
|
@router.post("/layers/{layer}/sangeun/{key}/doc/save")
|
|
def save_doc(
|
|
layer: Layer,
|
|
key: str,
|
|
body: DocBody,
|
|
owner: str | None = None,
|
|
session: Session = Depends(verify_session),
|
|
) -> dict:
|
|
folder = _root(session, layer, owner, write=True)
|
|
return _call(folder, path.save, key, body.model_dump(exclude_none=True))
|