Skip to content

Latest commit

Β 

History

History
366 lines (276 loc) Β· 9.04 KB

File metadata and controls

366 lines (276 loc) Β· 9.04 KB

학ꡐ API

ν•™κ΅λŠ” 아카데미 λ‚΄μ˜ ꡐ윑 κΈ°κ΄€ λ‹¨μœ„μž…λ‹ˆλ‹€. 학ꡐ μ•„λž˜μ— ν•™κΈ°(Season)κ°€ κ΅¬μ„±λ˜κ³ , 기둝 양식(FormArchive)κ³Ό μ™ΈλΆ€ 링크λ₯Ό 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

라우트 파일: backend/src/routes/schools.js 컨트둀러 파일: backend/src/controllers/schools.js λͺ¨λΈ 파일: backend/src/models/School.js


μ—”λ“œν¬μΈνŠΈ μš”μ•½

λ©”μ„œλ“œ 경둜 μ„€λͺ… κΆŒν•œ
POST /api/schools 학ꡐ 생성 admin
GET /api/schools/:_id? 학ꡐ 쑰회 (λͺ©λ‘/상세) isLoggedIn
PUT /api/schools/:_id/formArchive 기둝 양식 μˆ˜μ • admin|manager
PUT /api/schools/:_id/links 링크 μˆ˜μ • admin|manager
PUT /api/schools/:_id/deletedFormArchive/:label/restore μ‚­μ œλœ 양식 볡원 admin|manager
DELETE /api/schools/:_id/deletedFormArchive/:label μ‚­μ œλœ 양식 영ꡬ μ‚­μ œ admin|manager
DELETE /api/schools/:_id 학ꡐ μ‚­μ œ admin

학ꡐ 생성

μƒˆλ‘œμš΄ 학ꡐλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

POST /api/schools

κΆŒν•œ: admin

μš”μ²­ λ³Έλ¬Έ

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
schoolId string O 학ꡐ 고유 ID (영문, 숫자)
schoolName string O 학ꡐ 이름

μš”μ²­ μ˜ˆμ‹œ

{
  "schoolId": "highschool01",
  "schoolName": "ν…ŒμŠ€νŠΈ 고등학ꡐ"
}

응닡 (200)

{
  "school": {
    "_id": "507f1f77bcf86cd799439011",
    "schoolId": "highschool01",
    "schoolName": "ν…ŒμŠ€νŠΈ 고등학ꡐ",
    "formArchive": [],
    "deletedFormArchive": [],
    "links": [],
    "createdAt": "2024-01-15T09:00:00.000Z",
    "updatedAt": "2024-01-15T09:00:00.000Z"
  }
}

μ—λŸ¬ 응닡

μƒνƒœ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
400 FIELD_REQUIRED(...) ν•„μˆ˜ ν•„λ“œ λˆ„λ½
400 FIELD_INVALID(...) μœ νš¨μ„± 검사 μ‹€νŒ¨
409 FIELD_IN_USE(schoolId) 이미 μ‚¬μš© 쀑인 학ꡐ ID

학ꡐ 쑰회

학ꡐλ₯Ό λͺ©λ‘ λ˜λŠ” κ°œλ³„λ‘œ μ‘°νšŒν•©λ‹ˆλ‹€. 경둜 νŒŒλΌλ―Έν„° _id μœ λ¬΄μ— 따라 λ™μž‘μ΄ λ‹¬λΌμ§‘λ‹ˆλ‹€.

GET /api/schools/:_id?

κΆŒν•œ: isLoggedIn

λͺ©λ‘ 쑰회

GET /api/schools

응닡 (200)

{
  "schools": [
    {
      "_id": "507f1f77bcf86cd799439011",
      "schoolId": "highschool01",
      "schoolName": "ν…ŒμŠ€νŠΈ 고등학ꡐ",
      "formArchive": [...],
      "links": [...]
    },
    {
      "_id": "507f1f77bcf86cd799439012",
      "schoolId": "middleschool01",
      "schoolName": "ν…ŒμŠ€νŠΈ 쀑학ꡐ",
      "formArchive": [...],
      "links": [...]
    }
  ]
}

상세 쑰회

GET /api/schools/507f1f77bcf86cd799439011

경둜 νŒŒλΌλ―Έν„°

νŒŒλΌλ―Έν„° νƒ€μž… μ„€λͺ…
_id string 학ꡐ ObjectId

응닡 (200)

{
  "school": {
    "_id": "507f1f77bcf86cd799439011",
    "schoolId": "highschool01",
    "schoolName": "ν…ŒμŠ€νŠΈ 고등학ꡐ",
    "formArchive": [
      {
        "label": "인적 사항",
        "dataType": "object",
        "fields": [
          { "label": "이름", "type": "input", "options": [] },
          { "label": "ν•™λ…„", "type": "select", "options": ["1ν•™λ…„", "2ν•™λ…„", "3ν•™λ…„"] }
        ],
        "authTeacher": "viewAndEditStudents",
        "authStudent": "view",
        "authManager": "viewAndEdit"
      },
      {
        "label": "성적 기둝",
        "dataType": "array",
        "fields": [
          { "label": "κ³Όλͺ©", "type": "input", "options": [] },
          { "label": "점수", "type": "input-number", "options": [], "runningTotal": false, "total": true }
        ],
        "authTeacher": "viewAndEditMyStudents",
        "authStudent": "view",
        "authManager": "viewAndEdit"
      }
    ],
    "deletedFormArchive": [],
    "links": [
      { "url": "https://www.example.com", "title": "학ꡐ ν™ˆνŽ˜μ΄μ§€" }
    ]
  }
}

기둝 양식 μˆ˜μ •

ν•™κ΅μ˜ 기둝 양식(FormArchive)을 μˆ˜μ •ν•©λ‹ˆλ‹€. 기둝 양식은 학생 기둝(Archive)의 ꡬ쑰λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

PUT /api/schools/:_id/formArchive

κΆŒν•œ: admin λ˜λŠ” manager

경둜 νŒŒλΌλ―Έν„°

νŒŒλΌλ―Έν„° νƒ€μž… μ„€λͺ…
_id string 학ꡐ ObjectId

μš”μ²­ λ³Έλ¬Έ

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
formArchive object[] O 기둝 양식 λ°°μ—΄

기둝 양식 ν•­λͺ© ꡬ쑰

ν•„λ“œ νƒ€μž… κΈ°λ³Έκ°’ μ„€λͺ…
label string - 양식 이름 (예: "인적 사항", "성적 기둝")
dataType string "array" 데이터 νƒ€μž… ("array": ν–‰ λ°°μ—΄, "object": 단일 객체)
fields object[] - ν•„λ“œ μ •μ˜ λ°°μ—΄
authTeacher string "undefined" ꡐ사 κΆŒν•œ
authStudent string "undefined" 학생 κΆŒν•œ
authManager string "undefined" 운영자 κΆŒν•œ

ν•„λ“œ μ •μ˜ ꡬ쑰

ν•„λ“œ νƒ€μž… κΈ°λ³Έκ°’ μ„€λͺ…
label string - ν•„λ“œ 이름
type string "input" ν•„λ“œ νƒ€μž… (input, input-number, select, file, file-image)
options string[] [] 선택지 (type이 select인 경우)
runningTotal boolean false λˆ„μ  합계 ν‘œμ‹œ μ—¬λΆ€
total boolean false 합계 ν‘œμ‹œ μ—¬λΆ€

κΆŒν•œ μ˜΅μ…˜

ꡐ사 κΆŒν•œ (authTeacher):

κ°’ μ„€λͺ…
"undefined" κΆŒν•œ μ—†μŒ
"viewAndEditStudents" λͺ¨λ“  학생 μ—΄λžŒ 및 μˆ˜μ •
"viewAndEditMyStudents" λ‹΄λ‹Ή ν•™μƒλ§Œ μ—΄λžŒ 및 μˆ˜μ •

학생 κΆŒν•œ (authStudent):

κ°’ μ„€λͺ…
"undefined" κΆŒν•œ μ—†μŒ
"view" 본인 기둝 μ—΄λžŒλ§Œ κ°€λŠ₯
"viewAndEdit" 본인 기둝 μ—΄λžŒ 및 μˆ˜μ • κ°€λŠ₯

운영자 κΆŒν•œ (authManager):

κ°’ μ„€λͺ…
"undefined" κΆŒν•œ μ—†μŒ
"viewAndEdit" λͺ¨λ“  학생 μ—΄λžŒ 및 μˆ˜μ •

μš”μ²­ μ˜ˆμ‹œ

{
  "formArchive": [
    {
      "label": "인적 사항",
      "dataType": "object",
      "fields": [
        { "label": "이름", "type": "input" },
        { "label": "생년월일", "type": "input" },
        { "label": "ν•™λ…„", "type": "select", "options": ["1ν•™λ…„", "2ν•™λ…„", "3ν•™λ…„"] }
      ],
      "authTeacher": "viewAndEditStudents",
      "authStudent": "view",
      "authManager": "viewAndEdit"
    }
  ]
}

링크 μˆ˜μ •

학ꡐ에 μ—°κ΄€λœ μ™ΈλΆ€ 링크 λͺ©λ‘μ„ μˆ˜μ •ν•©λ‹ˆλ‹€.

PUT /api/schools/:_id/links

κΆŒν•œ: admin λ˜λŠ” manager

μš”μ²­ λ³Έλ¬Έ

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
links object[] O 링크 λ°°μ—΄
links[].url string O URL (예: https://www.example.com)
links[].title string O 링크 제λͺ© (예: "학ꡐ ν™ˆνŽ˜μ΄μ§€")

μš”μ²­ μ˜ˆμ‹œ

{
  "links": [
    { "url": "https://www.school.ac.kr", "title": "학ꡐ ν™ˆνŽ˜μ΄μ§€" },
    { "url": "https://lms.school.ac.kr", "title": "ν•™μŠ΅κ΄€λ¦¬μ‹œμŠ€ν…œ" }
  ]
}

μ‚­μ œλœ 기둝 양식 관리

기둝 양식을 μ‚­μ œν•˜λ©΄ νœ΄μ§€ν†΅(deletedFormArchive)으둜 μ΄λ™ν•©λ‹ˆλ‹€. νœ΄μ§€ν†΅μ—μ„œ λ³΅μ›ν•˜κ±°λ‚˜ 영ꡬ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚­μ œλœ 양식 볡원

PUT /api/schools/:_id/deletedFormArchive/:label/restore

κΆŒν•œ: admin λ˜λŠ” manager

경둜 νŒŒλΌλ―Έν„°

νŒŒλΌλ―Έν„° νƒ€μž… μ„€λͺ…
_id string 학ꡐ ObjectId
label string 볡원할 μ–‘μ‹μ˜ 라벨

μ‚­μ œλœ 양식 영ꡬ μ‚­μ œ

DELETE /api/schools/:_id/deletedFormArchive/:label

κΆŒν•œ: admin λ˜λŠ” manager

경둜 νŒŒλΌλ―Έν„°

νŒŒλΌλ―Έν„° νƒ€μž… μ„€λͺ…
_id string 학ꡐ ObjectId
label string 영ꡬ μ‚­μ œν•  μ–‘μ‹μ˜ 라벨

학ꡐ μ‚­μ œ

학ꡐλ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

DELETE /api/schools/:_id

κΆŒν•œ: admin

경둜 νŒŒλΌλ―Έν„°

νŒŒλΌλ―Έν„° νƒ€μž… μ„€λͺ…
_id string μ‚­μ œν•  학ꡐ ObjectId

응닡 (200)

{}

주의: 학ꡐ μ‚­μ œ μ‹œ ν•΄λ‹Ή 학ꡐ에 μ—°κ²°λœ ν•™κΈ°, μˆ˜μ—…, 등둝 정보 λ“±μ˜ μ°Έμ‘°κ°€ λŠμ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.


ν”„λ‘ νŠΈμ—”λ“œ API ν•¨μˆ˜ (useAPIv2)

ν•¨μˆ˜λͺ… λ©”μ„œλ“œ 경둜 μ„€λͺ…
CSchool POST /api/schools 학ꡐ 생성
RSchools GET /api/schools 학ꡐ λͺ©λ‘ 쑰회
RSchool GET /api/schools/:_id 학ꡐ 상세 쑰회
USchoolFormArchive PUT /api/schools/:_id/formArchive 기둝 양식 μˆ˜μ •
USchoolLinks PUT /api/schools/:_id/links 링크 μˆ˜μ •
URestoreFormArchive PUT /api/schools/:_id/deletedFormArchive/:label/restore 양식 볡원
DFormArchive DELETE /api/schools/:_id/deletedFormArchive/:label 양식 영ꡬ μ‚­μ œ
DSchool DELETE /api/schools/:_id 학ꡐ μ‚­μ œ