Skip to content

Latest commit

Β 

History

History
562 lines (413 loc) Β· 14.2 KB

File metadata and controls

562 lines (413 loc) Β· 14.2 KB

ν•™κΈ° API

ν•™κΈ°(Season)λŠ” 학ꡐ λ‚΄μ˜ ꡐ윑 κΈ°κ°„ λ‹¨μœ„μž…λ‹ˆλ‹€. ν•™κΈ°μ—λŠ” κΈ°κ°„, ꡐ과λͺ©, κ°•μ˜μ‹€, 양식(μ‹œκ°„ν‘œ/κ°•μ˜κ³„νšμ„œ/평가), κΆŒν•œ μ„€μ •, AI μ„€μ • 등이 ν¬ν•¨λ©λ‹ˆλ‹€. ν•™κΈ°λ₯Ό ν™œμ„±ν™”ν•΄μ•Ό μˆ˜μ—… κ°œμ„€ 및 μˆ˜κ°•μ‹ μ²­μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

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


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

λ©”μ„œλ“œ 경둜 μ„€λͺ… κΆŒν•œ
POST /api/seasons ν•™κΈ° 생성 admin|manager
GET /api/seasons/:_id? ν•™κΈ° 쑰회 (λͺ©λ‘/상세) isLoggedIn
PUT /api/seasons/:_id/activate ν•™κΈ° ν™œμ„±ν™” admin|manager
PUT /api/seasons/:_id/inactivate ν•™κΈ° λΉ„ν™œμ„±ν™” admin|manager
PUT /api/seasons/:_id/period κΈ°κ°„ μ„€μ • admin|manager
PUT /api/seasons/:_id/classrooms κ°•μ˜μ‹€ μ„€μ • admin|manager
PUT /api/seasons/:_id/subjects ꡐ과λͺ© μ„€μ • admin|manager
PUT /api/seasons/:_id/form/timetable μ‹œκ°„ν‘œ 양식 μ„€μ • admin|manager
PUT /api/seasons/:_id/form/syllabus κ°•μ˜κ³„νšμ„œ 양식 μ„€μ • admin|manager
PUT /api/seasons/:_id/form/evaluation 평가 양식 μ„€μ • admin|manager
PUT /api/seasons/:_id/ai AI μ„€μ • admin|manager
POST /api/seasons/:_id/ai/reference/upload AI 참고자료 μ—…λ‘œλ“œ admin|manager
GET /api/seasons/:_id/ai/reference/:index/download AI 참고자료 λ‹€μš΄λ‘œλ“œ admin|manager
DELETE /api/seasons/:_id/ai/reference/:index AI 참고자료 μ‚­μ œ admin|manager
PUT /api/seasons/:_id/permission/:type κΆŒν•œ μ„€μ • admin|manager
POST /api/seasons/:_id/permission/:type/exceptions κΆŒν•œ μ˜ˆμ™Έ μΆ”κ°€ admin|manager
DELETE /api/seasons/:_id/permission/:type/exceptions κΆŒν•œ μ˜ˆμ™Έ μ‚­μ œ admin|manager
DELETE /api/seasons/:_id ν•™κΈ° μ‚­μ œ admin|manager

ν•™κΈ° 생성

μƒˆλ‘œμš΄ ν•™κΈ°λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 동일 학ꡐ λ‚΄μ—μ„œ 학년도(year)와 ν•™κΈ°(term)의 쑰합은 κ³ μœ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

POST /api/seasons

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
school string O 학ꡐ ObjectId
schoolId string O 학ꡐ ID
schoolName string O 학ꡐ 이름
year string O 학년도 (예: "2024학년도")
term string O ν•™κΈ° (예: "1ν•™κΈ°", "2ν•™κΈ°")

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

{
  "school": "507f1f77bcf86cd799439011",
  "schoolId": "highschool01",
  "schoolName": "ν…ŒμŠ€νŠΈ 고등학ꡐ",
  "year": "2024학년도",
  "term": "1ν•™κΈ°"
}

응닡 (200)

{
  "season": {
    "_id": "507f1f77bcf86cd799439021",
    "school": "507f1f77bcf86cd799439011",
    "schoolId": "highschool01",
    "schoolName": "ν…ŒμŠ€νŠΈ 고등학ꡐ",
    "year": "2024학년도",
    "term": "1ν•™κΈ°",
    "period": { "start": "", "end": "" },
    "classrooms": [],
    "subjects": { "label": [], "data": [] },
    "formTimetable": null,
    "formSyllabus": null,
    "formEvaluation": [],
    "permissionSyllabusV2": { "teacher": false, "student": false, "exceptions": [] },
    "permissionEnrollmentV2": { "teacher": false, "student": false, "exceptions": [] },
    "permissionEvaluationV2": { "teacher": false, "student": false, "exceptions": [] },
    "aiSettings": {
      "enabled": false,
      "permission": { "teacher": false, "student": false },
      "guidelines": "",
      "references": []
    },
    "isActivated": false,
    "isActivatedFirst": false,
    "createdAt": "2024-01-15T09:00:00.000Z",
    "updatedAt": "2024-01-15T09:00:00.000Z"
  }
}

μ—λŸ¬ 응닡

μƒνƒœ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
400 FIELD_REQUIRED(...) ν•„μˆ˜ ν•„λ“œ λˆ„λ½
409 쀑볡 인덱슀 μ—λŸ¬ 동일 학ꡐ/학년도/ν•™κΈ° 쑰합이 이미 쑴재

ν•™κΈ° 쑰회

ν•™κΈ°λ₯Ό λͺ©λ‘ λ˜λŠ” κ°œλ³„λ‘œ μ‘°νšŒν•©λ‹ˆλ‹€.

GET /api/seasons/:_id?

κΆŒν•œ: isLoggedIn

λͺ©λ‘ 쑰회

GET /api/seasons

쿼리 νŒŒλΌλ―Έν„°

νŒŒλΌλ―Έν„° νƒ€μž… ν•„μˆ˜ μ„€λͺ…
school string X 학ꡐ ObjectId둜 필터링
year string X ν•™λ…„λ„λ‘œ 필터링

응닡 (200)

{
  "seasons": [
    {
      "_id": "507f1f77bcf86cd799439021",
      "schoolName": "ν…ŒμŠ€νŠΈ 고등학ꡐ",
      "year": "2024학년도",
      "term": "1ν•™κΈ°",
      "isActivated": true,
      "period": { "start": "2024-03-04", "end": "2024-07-19" }
    }
  ]
}

상세 쑰회

GET /api/seasons/507f1f77bcf86cd799439021

응닡 (200)

전체 ν•™κΈ° 데이터가 λ°˜ν™˜λ©λ‹ˆλ‹€ (ꡐ과λͺ©, κ°•μ˜μ‹€, 양식, κΆŒν•œ λ“± 포함).


ν•™κΈ° ν™œμ„±ν™”/λΉ„ν™œμ„±ν™”

ν•™κΈ°λ₯Ό ν™œμ„±ν™”ν•˜λ©΄ μˆ˜μ—… κ°œμ„€, μˆ˜κ°•μ‹ μ²­ λ“±μ˜ κΈ°λŠ₯이 μ‚¬μš© κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

ν™œμ„±ν™”

PUT /api/seasons/:_id/activate

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

λΉ„ν™œμ„±ν™”

PUT /api/seasons/:_id/inactivate

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

응닡 (200)

{
  "season": {
    "_id": "507f1f77bcf86cd799439021",
    "isActivated": true,
    "isActivatedFirst": true
  }
}

μ°Έκ³ : 졜초 ν™œμ„±ν™” μ‹œ isActivatedFirstκ°€ true둜 μ„€μ •λ©λ‹ˆλ‹€. 이 값은 이후 λ³€κ²½λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


κΈ°κ°„ μ„€μ •

ν•™κΈ°μ˜ μ‹œμž‘μΌκ³Ό μ’…λ£ŒμΌμ„ μ„€μ •ν•©λ‹ˆλ‹€.

PUT /api/seasons/:_id/period

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
period object O κΈ°κ°„ 객체
period.start string O μ‹œμž‘μΌ (YYYY-MM-DD ν˜•μ‹)
period.end string O μ’…λ£ŒμΌ (YYYY-MM-DD ν˜•μ‹)

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

{
  "period": {
    "start": "2024-03-04",
    "end": "2024-07-19"
  }
}

κ°•μ˜μ‹€ μ„€μ •

ν•™κΈ°μ—μ„œ μ‚¬μš©ν•  κ°•μ˜μ‹€ λͺ©λ‘μ„ μ„€μ •ν•©λ‹ˆλ‹€.

PUT /api/seasons/:_id/classrooms

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
classrooms string[] O κ°•μ˜μ‹€ 이름 λ°°μ—΄

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

{
  "classrooms": ["101호", "102호", "κ³Όν•™μ‹€", "μŒμ•…μ‹€", "μ²΄μœ‘κ΄€"]
}

ꡐ과λͺ© μ„€μ •

ν•™κΈ°μ—μ„œ μ‚¬μš©ν•  ꡐ과λͺ© 체계λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. ꡐ과λͺ©μ€ 닀단계 λΆ„λ₯˜λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

PUT /api/seasons/:_id/subjects

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
subjects object O ꡐ과λͺ© 객체
subjects.label string[] O λΆ„λ₯˜ 라벨 (예: ["ꡐ과", "κ³Όλͺ©"])
subjects.data string[][] O ꡐ과λͺ© 데이터

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

{
  "subjects": {
    "label": ["ꡐ과", "κ³Όλͺ©"],
    "data": [
      ["κ΅­μ–΄", "ν˜„λŒ€λ¬Έν•™"],
      ["κ΅­μ–΄", "κ³ μ „λ¬Έν•™"],
      ["μˆ˜ν•™", "미적뢄"],
      ["μˆ˜ν•™", "ν™•λ₯ κ³Όν†΅κ³„"],
      ["μ˜μ–΄", "μ˜μ–΄νšŒν™”"],
      ["κ³Όν•™", "물리학"],
      ["κ³Όν•™", "ν™”ν•™"]
    ]
  }
}

양식 μ„€μ •

μ‹œκ°„ν‘œ 양식

PUT /api/seasons/:_id/form/timetable

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
formTimetable object O μ‹œκ°„ν‘œ 양식
formTimetable.title string O 양식 제λͺ©
formTimetable.data object[] O 에디터에 μ˜ν•΄ μ„€μ •λœ 양식 데이터

κ°•μ˜κ³„νšμ„œ 양식

PUT /api/seasons/:_id/form/syllabus

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
formSyllabus object O κ°•μ˜κ³„νšμ„œ 양식
formSyllabus.title string O 양식 제λͺ©
formSyllabus.data object[] O 에디터에 μ˜ν•΄ μ„€μ •λœ 양식 데이터

평가 양식

학생 평가 ν•­λͺ©μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

PUT /api/seasons/:_id/form/evaluation

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
formEvaluation object[] O 평가 ν•­λͺ© λ°°μ—΄

평가 ν•­λͺ© ꡬ쑰

ν•„λ“œ νƒ€μž… κΈ°λ³Έκ°’ μ„€λͺ…
label string - 평가 ν•­λͺ©λͺ… (예: "λ©˜ν† ν‰κ°€", "μžκΈ°ν‰κ°€")
type string "input" μž…λ ₯ νƒ€μž… (input, input-number, select)
options string[] [] 선택지 (type이 select인 경우)
combineBy string "term" 평가 동기화 λ‹¨μœ„ ("term": 학기별, "year": 학년도별)
authOption string "editByTeacher" κΆŒν•œ μ˜΅μ…˜

평가 κΆŒν•œ μ˜΅μ…˜ (authOption)

κ°’ μ„€λͺ…
"editByStudent" 학생이 직접 μž…λ ₯
"editByTeacher" κ΅μ‚¬λ§Œ μž…λ ₯
"editByTeacherAndStudentCanView" ꡐ사가 μž…λ ₯ν•˜κ³  학생은 μ—΄λžŒλ§Œ κ°€λŠ₯

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

{
  "formEvaluation": [
    {
      "label": "λ©˜ν† ν‰κ°€",
      "type": "input",
      "authOption": "editByTeacher",
      "combineBy": "term"
    },
    {
      "label": "μžκΈ°ν‰κ°€",
      "type": "input",
      "authOption": "editByStudent",
      "combineBy": "term"
    },
    {
      "label": "μΆœμ„λ“±κΈ‰",
      "type": "select",
      "options": ["A", "B", "C", "D", "F"],
      "authOption": "editByTeacher",
      "combineBy": "term"
    }
  ]
}

AI μ„€μ •

학기별 AI κΈ°λŠ₯을 μ„€μ •ν•©λ‹ˆλ‹€.

AI μ„€μ • μˆ˜μ •

PUT /api/seasons/:_id/ai

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
aiSettings object O AI μ„€μ • 객체
aiSettings.enabled boolean X AI ν™œμ„±ν™” μ—¬λΆ€
aiSettings.permission object X AI μ‚¬μš© κΆŒν•œ
aiSettings.permission.teacher boolean X ꡐ사 AI μ‚¬μš© ν—ˆμš©
aiSettings.permission.student boolean X 학생 AI μ‚¬μš© ν—ˆμš©
aiSettings.guidelines string X AI 생성 μ‹œ κΈ°λ³Έ μ§€μΉ¨
aiSettings.examples object X 양식 ν•„λ“œλ³„ λͺ¨λ²” λ‹΅μ•ˆ (ν•„λ“œλͺ… β†’ λ¬Έμž₯)

AI 참고자료 μ—…λ‘œλ“œ

POST /api/seasons/:_id/ai/reference/upload

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

AI 참고자료 λ‹€μš΄λ‘œλ“œ

GET /api/seasons/:_id/ai/reference/:index/download

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

AI 참고자료 μ‚­μ œ

DELETE /api/seasons/:_id/ai/reference/:index

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


κΆŒν•œ μ„€μ •

학기별 μˆ˜μ—… κ°œμ„€, μˆ˜κ°•μ‹ μ²­, 평가 κ΄€λ ¨ κΆŒν•œμ„ μ„€μ •ν•©λ‹ˆλ‹€.

κΆŒν•œ μ„€μ • μˆ˜μ •

PUT /api/seasons/:_id/permission/:type

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

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

νŒŒλΌλ―Έν„° νƒ€μž… μ„€λͺ…
_id string ν•™κΈ° ObjectId
type string κΆŒν•œ μœ ν˜• (syllabus, enrollment, evaluation)

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
teacher boolean X ꡐ사 μ—­ν•  ν—ˆμš© μ—¬λΆ€
student boolean X 학생 μ—­ν•  ν—ˆμš© μ—¬λΆ€

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

{
  "teacher": true,
  "student": false
}

κΆŒν•œ μœ ν˜•λ³„ μ„€λͺ…

type μ €μž₯ ν•„λ“œ μ„€λͺ…
syllabus permissionSyllabusV2 μˆ˜μ—… κ°œμ„€ κΆŒν•œ
enrollment permissionEnrollmentV2 μˆ˜κ°•μ‹ μ²­ κΆŒν•œ
evaluation permissionEvaluationV2 평가 μž…λ ₯ κΆŒν•œ

κΆŒν•œ μ˜ˆμ™Έ μΆ”κ°€

νŠΉμ • μ‚¬μš©μžμ— λŒ€ν•œ κΆŒν•œ μ˜ˆμ™Έλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

POST /api/seasons/:_id/permission/:type/exceptions

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
registration string O 등둝 ObjectId
role string O μ—­ν•  (student, teacher)
user string O μ‚¬μš©μž ObjectId
userId string O μ‚¬μš©μž ID
userName string O μ‚¬μš©μž 이름
isAllowed boolean O ν—ˆμš© μ—¬λΆ€

κΆŒν•œ μ˜ˆμ™Έ μ‚­μ œ

DELETE /api/seasons/:_id/permission/:type/exceptions

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


ν•™κΈ° μ‚­μ œ

ν•™κΈ°λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

DELETE /api/seasons/:_id

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

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

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

응닡 (200)

{}

주의: ν•™κΈ° μ‚­μ œ μ‹œ ν•΄λ‹Ή 학기에 μ—°κ²°λœ 등둝(Registration), κ°•μ˜κ³„νšμ„œ(Syllabus), μˆ˜κ°•(Enrollment) λ°μ΄ν„°μ˜ μ°Έμ‘°κ°€ λŠμ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.


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

ν•¨μˆ˜λͺ… λ©”μ„œλ“œ 경둜 μ„€λͺ…
CSeason POST /api/seasons ν•™κΈ° 생성
RSeasons GET /api/seasons ν•™κΈ° λͺ©λ‘ 쑰회
RSeason GET /api/seasons/:_id ν•™κΈ° 상세 쑰회
UActivateSeason PUT /api/seasons/:_id/activate ν•™κΈ° ν™œμ„±ν™”
UInactivateSeason PUT /api/seasons/:_id/inactivate ν•™κΈ° λΉ„ν™œμ„±ν™”
USeasonPeriod PUT /api/seasons/:_id/period κΈ°κ°„ μ„€μ •
USeasonClassrooms PUT /api/seasons/:_id/classrooms κ°•μ˜μ‹€ μ„€μ •
USeasonSubjects PUT /api/seasons/:_id/subjects ꡐ과λͺ© μ„€μ •
USeasonFormTimetable PUT /api/seasons/:_id/form/timetable μ‹œκ°„ν‘œ 양식
USeasonFormSyllabus PUT /api/seasons/:_id/form/syllabus κ°•μ˜κ³„νšμ„œ 양식
USeasonFormEvaluation PUT /api/seasons/:_id/form/evaluation 평가 양식
USeasonAiSettings PUT /api/seasons/:_id/ai AI μ„€μ •
USeasonPermission PUT /api/seasons/:_id/permission/:type κΆŒν•œ μ„€μ •
CSeasonPermissionException POST /api/seasons/:_id/permission/:type/exceptions κΆŒν•œ μ˜ˆμ™Έ μΆ”κ°€
DSeasonPermissionException DELETE /api/seasons/:_id/permission/:type/exceptions κΆŒν•œ μ˜ˆμ™Έ μ‚­μ œ
DSeason DELETE /api/seasons/:_id ν•™κΈ° μ‚­μ œ