νκΈ°(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νκΈ°"
}{
"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 | νλ λλ‘ νν°λ§ |
{
"seasons": [
{
"_id": "507f1f77bcf86cd799439021",
"schoolName": "ν
μ€νΈ κ³ λ±νκ΅",
"year": "2024νλ
λ",
"term": "1νκΈ°",
"isActivated": true,
"period": { "start": "2024-03-04", "end": "2024-07-19" }
}
]
}GET /api/seasons/507f1f77bcf86cd799439021
μ 체 νκΈ° λ°μ΄ν°κ° λ°νλ©λλ€ (κ΅κ³Όλͺ©, κ°μμ€, μμ, κΆν λ± ν¬ν¨).
νκΈ°λ₯Ό νμ±ννλ©΄ μμ κ°μ€, μκ°μ μ² λ±μ κΈ°λ₯μ΄ μ¬μ© κ°λ₯ν΄μ§λλ€.
PUT /api/seasons/:_id/activate
κΆν: admin λλ manager
PUT /api/seasons/:_id/inactivate
κΆν: admin λλ manager
{
"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" |
κΆν μ΅μ |
| κ° | μ€λͺ |
|---|---|
"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 κΈ°λ₯μ μ€μ ν©λλ€.
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 | μμ νλλ³ λͺ¨λ² λ΅μ (νλλͺ
β λ¬Έμ₯) |
POST /api/seasons/:_id/ai/reference/upload
κΆν: admin λλ manager
GET /api/seasons/:_id/ai/reference/:index/download
κΆν: admin λλ manager
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 |
{}μ£Όμ: νκΈ° μμ μ ν΄λΉ νκΈ°μ μ°κ²°λ λ±λ‘(Registration), κ°μκ³νμ(Syllabus), μκ°(Enrollment) λ°μ΄ν°μ μ°Έμ‘°κ° λμ΄μ§ μ μμ΅λλ€.
| ν¨μλͺ | λ©μλ | κ²½λ‘ | μ€λͺ |
|---|---|---|---|
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 |
νκΈ° μμ |