νκ΅λ μμΉ΄λ°λ―Έ λ΄μ κ΅μ‘ κΈ°κ΄ λ¨μμ λλ€. νκ΅ μλμ νκΈ°(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": "ν
μ€νΈ κ³ λ±νκ΅"
}{
"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
{
"schools": [
{
"_id": "507f1f77bcf86cd799439011",
"schoolId": "highschool01",
"schoolName": "ν
μ€νΈ κ³ λ±νκ΅",
"formArchive": [...],
"links": [...]
},
{
"_id": "507f1f77bcf86cd799439012",
"schoolId": "middleschool01",
"schoolName": "ν
μ€νΈ μ€νκ΅",
"formArchive": [...],
"links": [...]
}
]
}GET /api/schools/507f1f77bcf86cd799439011
| νλΌλ―Έν° | νμ | μ€λͺ |
|---|---|---|
_id |
string |
νκ΅ ObjectId |
{
"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 |
{}μ£Όμ: νκ΅ μμ μ ν΄λΉ νκ΅μ μ°κ²°λ νκΈ°, μμ , λ±λ‘ μ 보 λ±μ μ°Έμ‘°κ° λμ΄μ§ μ μμ΅λλ€.
| ν¨μλͺ | λ©μλ | κ²½λ‘ | μ€λͺ |
|---|---|---|---|
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 |
νκ΅ μμ |