hfs-virtual-drive 0.2.0
HyperFUSE Search Virtual Drive Lib

# hfs-virtual-drive

## Introduction

HFS-virtual-drive 라이브러리를 활용하여 MinGo에 고객사 시스템의 데이터베이스를 연결할 수 있습니다.
고객사 데이터베이스에 맞춰 MinGo의 파일 분류 체계인 QDOS 형태로 간편하게 구현이 가능합니다.

**HFS(Hyper FUSE Search)**
HFS는 레거시 시스템의 데이터베이스를 MINGO에 연결하고 가상화합니다. 이 가상화된 구성은 네트워크 드라이브와 유사하게 작동합니다. 마치 PC에 USB를 연결하는 것처럼, 고객사 데이터를 MINGO 시스템에 쉽게 마운트할 수 있습니다.

사용자 입장에서는 MINGO 시스템을 일반 클라우드 서비스를 이용하는 것과 크게 다르지 않습니다.
****
**QDOS(Quad-Level Document Organization System)**
QDOS는 4단계 계층 구조를 활용해 문서와 정보를 체계적으로 분류하고 관리하는 논리적인 시스템입니다. 이 계층 구조는 MINGO 사용자에게 정보에 정형화된 방법으로 접근할 수 있는 기능을 제공합니다. 각 계층은 다음과 같습니다.
| 계층 번호 | 계층 이름 | 설명 |
| --- | --- | --- |
| 1 | Box | 여러 개의 바인더(Binder)를 보관할 수 있는 큰 저장 공간입니다. |
| 2 | Binder | 문서들을 주제별로 분류하고 정리할 수 있는 여러 개의 구분자(Divider)를 포함합니다. |
| 3 | Divider | 바인더 내에서 문서를 세부적으로 분류하는 데 사용되는 구체 또는 카테고리 입니다. |
| 4 | Item | 실제 문서나 정보를 담고 있으며, 구분자 내에서 개별적으로 저장됩니다. |

## pip package setup & upload
```shell
# pip package setup and upload (version 0.1.0, 0.2.0 available)
./build.sh {version}
```

### example
```shell
./build.sh 0.1.0
```

# Quick Start
## v0.1.x
```python
from hfs_vd_lib.core.qdos import QDOS
from hfs_vd_lib import run_as
from typing import List

qdos = QDOS()

@qdos.get_boxes()
def get_boxes() -> List[str]:
    pass

@qdos.get_binders()
def get_binders(box_number: str)-> List[str]:
    pass

@qdos.get_dividers()
def get_dividers(box_number: str, binder_number: str) -> List[str]:
    pass

@qdos.get_items()
def get_items(box_number: str, binder_number: str, divider_number:str) -> List[str]:
    pass

@qdos.get_item()
def get_item(box_number: str, binder_number: str, divider_number:str, item_number: str) -> bytes:
    pass

run_as(qdos=qdos)
```
## v0.2.x

### Box 정의 방법
```python
from hfs_vd_lib.core.qdos import Box
from typing import List
from hfs_vd_lib.core.qdos import QdosUserConfiguration

box = Box(QdosUserConfiguration())

@box.read()
async def read_box() -> List[str]:
    return []

@box.create()
async def create_box(box_name: str) -> bool:
    return True

@box.delete()
async def delete_box(box_name: str) -> bool:
    return True
```

### Binder 정의 방법
```python
from hfs_vd_lib.core.qdos import Binder
from typing import List
from hfs_vd_lib.core.qdos import QdosUserConfiguration

binder = Binder(QdosUserConfiguration())

@binder.read()
async def read_binder(box_name: str) -> List[str]:
    return []

@binder.create()
async def create_binder(box_name: str, binder_name: str) -> bool:
    return True

@binder.delete()
async def delete_binder(box_name: str, binder_name: str) -> bool:
    return True
```
### Divider 정의 방법
```python
from hfs_vd_lib.core.qdos import Divider
from typing import List
from hfs_vd_lib.core.qdos import QdosUserConfiguration

divider = Divider(QdosUserConfiguration())

@divider.read()
async def read_divdier(box_name: str, binder_name: str) -> List[str]:
    return []

@divider.create()
async def create_divider(box_name: str, binder_name: str, divider_name: str) -> bool:
    return True

@divider.delete()
async def delete_divider(box_name: str, binder_name: str, divider_name: str) -> bool:
    return True
```
### Item 정의 방법
```python
# Item
from hfs_vd_lib.core.qdos import Item
from typing import List
from hfs_vd_lib.core.qdos import QdosUserConfiguration

item = Item(QdosUserConfiguration())

@item.read()
async def read_items(box_name: str, binder_name: str, divider_name: str) -> List[str]:
    return []

@item.get()
async def get_item(box_name: str, binder_name: str, divider_name: str, item_name: str) -> bytes:
    return bytes()

@item.create()
async def get_binder(box_name: str, binder_name: str, divider_name: str, item_name: str, file_contents: bytes) -> bool:
    return True

@item.delete()
async def get_binder(box_name: str, binder_name: str, divider_name: str, item_name: str) -> bool:
    return True
```

### QDOS FastAPI 실행
```python
from hfs_vd_lib.vdserver import run_as

run_as(box, binder, item, divider)
```

HFS를 이용한 MinGo 연계 시나리오 Demo 영상을 포함한 자세한 내용은 [이 문서](https://akuodigital.atlassian.net/l/cp/T1u7y0My)를 참고하세요.