sj030 / Tooktak

산학협력프로젝트 과목 (3230) 팀프로젝트입니다.
0 stars 4 forks source link

파일 업로드 API 구현 요청 #86

Open window9u opened 1 month ago

window9u commented 1 month ago

프론트엔드에서 파일과 관련 메타데이터를 함께 업로드할 수 있도록 백엔드 API 업데이트가 필요합니다. 다음은 요청에 필요한 세부 사항입니다.

API 엔드포인트 상세 정보 엔드포인트 URL: /file/upload 메소드: POST Content-Type: multipart/form-data 요청 본문 구성 file (필수): 업로드할 파일. 폼 데이터의 일부로 전송됩니다. attributes (필수): 파일과 관련된 메타데이터 또는 속성을 포함하는 JSON 문자열. 엔드포인트 설명 이 API는 파일을 바이너리 데이터로 직접 포함하여 전송하고, 관련 메타데이터는 'attributes' 키 아래 JSON 문자열로 전송되도록 합니다. 이 멀티파트 폼 데이터는 서버에서 파싱되어 각각의 컴포넌트가 추출되어야 합니다.

예상 사용 예제 (cURL)

curl -X POST http://localhost:3001/file/upload \
     -F "file=@/path/to/file.jpg" \
     -F "attributes={\"key1\": \"value1\", \"key2\": \"value2\"}" \
     -H "Content-Type: multipart/form-data"
sj030 commented 1 month ago

네넵 확인했습니다. 엔드포인트라는 단어가 걸려서 그런데, 지금 구현하고 있는 API와 동일하다고 이해해도 될까요?

attribute 에 patient의 id 속성도 필요할 것 같습니다. (현재 patient schema는 {id, attribute}로 구성되어 있습니다!)

추가로 patient schema 병원 정보를 포함하게끔 변경하여 구현하고자 합니다. patient를 {p_id, attribute, hos_name} 로 바꾸려하는데 혹시 괜찮은 생각일지 말씀 부탁드립니다! patient 마다 병원 구별이 필요해보이기 때문입니다.

만약 바뀐다면 요청주실 때, meta = {"p_id":1, "attribute":{"성명":"홍길동"...}, "hos_name":"건국대병원"} 형식으로 가능할까요?

window9u commented 1 month ago
  1. 엔드포인트라는 맥락상 백엔드랑 거의 같아요
  2. attribute에서 patient에 대한건 모르고 못보내죠. 프론트에서 attribute보내는 과정이 엑셀파일에 있는 데이터를 파싱해서 json으로 만들어 주는건데 사용자가 엑셀에 patient 스키마를 입력하진 않을 것 같네요. 환자 명하고 병원으로 찾아 주세요
  3. 병원 정보는 attributes에 hospital: '떙땡병원' 형식으로 들어갑니다
window9u commented 1 month ago

attribute 데이터가 어디서 나오는지 생각해 보면 좋을 것 같습니다

sj030 commented 1 month ago

네넵 환자명과 병원으로 환자를 찾는다면 patient schema의 id 는 불필요할 것 같습니다. patient DB 속성을 {id, attribute} -> {attribute} 으로 수정하였습니다. 혹여나 DB 규칙 또는 서버 환경 구동에서 적절치 못한 부분이라면 말씀부탁드립니다!

dldyou commented 1 month ago

@sj030 patient DB 에서 id가 없으면 파일과 join연산이 불가능합니다

window9u commented 1 month ago

데이터를 생성하는 것이니, 기존의 patient가 있는지 확인하고 없다면 추가해줘야죠

window9u commented 1 month ago

산협프 과제까지를 위해선 적당히 메타데이터를 저장하는것만으로도 발표는 할 수 있을 것 같습니다. 일단 어려우시면 데이터를 저장하지 않더라도, 데이터의 저장과 상관없이 요청에 대하여 response를 보내는것으로 괜찮을 것 같네요.