νμ κΈ°λ‘(Archive) APIμ λλ€. νκ΅λ³ νμμ κ°μΈ κΈ°λ‘ λ°μ΄ν°λ₯Ό μ‘°ννκ³ μμ νλ κΈ°λ₯μ μ 곡ν©λλ€. κΈ°λ‘ λ°μ΄ν°λ νκ΅ κ΄λ¦¬μκ° μ μν μμ(formArchive)μ λ°λΌ ꡬ쑰νλ©λλ€.
λΌμ°νΈ νμΌ:
backend/src/routes/archives.js컨νΈλ‘€λ¬ νμΌ:backend/src/controllers/archives.jsλͺ¨λΈ νμΌ:backend/src/models/Archive.js
| λ©μλ | κ²½λ‘ | μ€λͺ | κΆν |
|---|---|---|---|
GET |
/api/archives |
νμ κΈ°λ‘ μ‘°ν | isLoggedIn |
PUT |
/api/archives/:_id |
νμ κΈ°λ‘ μμ | isLoggedIn |
νμμ κΈ°λ‘μ μ‘°νν©λλ€. label νλΌλ―Έν° μ 무μ λ°λΌ μ 체 κΈ°λ‘ λλ νΉμ μμ μΉμ
μ μ‘°νν©λλ€. ν΄λΉ νμμ κΈ°λ‘μ΄ μ‘΄μ¬νμ§ μμΌλ©΄ μλμΌλ‘ μμ±ν©λλ€.
GET /api/archives
κΆν: isLoggedIn
| νλΌλ―Έν° | νμ | νμ | μ€λͺ |
|---|---|---|---|
registration |
string |
O | νμ λ±λ‘(Registration)μ ObjectId |
label |
string |
X | μ‘°νν μμ μΉμ
λΌλ²¨ (μ: "μΈμ μ¬ν") |
label νλΌλ―Έν°κ° μ 곡λ κ²½μ°, νκ΅μ formArchive μ€μ μ λ°λΌ μΈλΆνλ κΆν κ²μ¬κ° μνλ©λλ€.
| μν | 쑰건 | μ€λͺ |
|---|---|---|
κ΄λ¦¬μ (manager) |
authManager === "viewAndEdit" |
ν΄λΉ μμ μΉμ μ λν κ΄λ¦¬μ μ κ·Ό νμ© |
| νμ (λ³ΈμΈ) | authStudent === "view" λλ "viewAndEdit" |
λ³ΈμΈμ κΈ°λ‘λ§ μ‘°ν κ°λ₯ |
| κ΅μ¬ (μ 체) | authTeacher === "viewAndEditStudents" |
κ°μ νκΈ°μ κ΅μ¬λ‘ λ±λ‘λ κ²½μ° λͺ¨λ νμ κΈ°λ‘ μ‘°ν κ°λ₯ |
| κ΅μ¬ (λ΄λΉ) | authTeacher === "viewAndEditMyStudents" |
λ±λ‘(Registration)μ teacher λλ subTeacherλ‘ μ§μ λ νμλ§ μ‘°ν κ°λ₯ |
label νλΌλ―Έν°κ° μλ κ²½μ°, λ³ΈμΈμ κΈ°λ‘μ΄κ±°λ κ°μ νκΈ°μ κ΅μ¬λ‘ λ±λ‘λ κ²½μ° μ 체 κΈ°λ‘μ μ‘°νν μ μμ΅λλ€.
νμ λ³ΈμΈ λλ ν΄λΉ νκΈ°μ κ΅μ¬κ° μ 체 κΈ°λ‘μ μ‘°νν©λλ€.
GET /api/archives?registration=507f1f77bcf86cd799439011
{
"archive": {
"_id": "60a7b2c3d4e5f6a7b8c9d0e1",
"user": "507f1f77bcf86cd799439022",
"school": "507f1f77bcf86cd799439033",
"schoolId": "school01",
"schoolName": "νκ΅κ³ λ±νκ΅",
"userId": "student01",
"userName": "νκΈΈλ",
"data": {
"μΈμ μ¬ν": {
"μ΄λ¦": { "value": "νκΈΈλ" },
"μ£Όλ―Όλ±λ‘λ²νΈ": { "value": "010101-3123456" },
"μ£Όμ": { "value": "μμΈνΉλ³μ κ°λ¨κ΅¬" },
"μ±λͺ
(λΆ)": { "value": "νμλ²μ§" },
"μλ
μμΌ(λΆ)": { "value": "1975λ
03μ15μΌ" },
"μ±λͺ
(λͺ¨)": { "value": "κΉμ΄λ¨Έλ" },
"μλ
μμΌ(λͺ¨)": { "value": "1978λ
07μ22μΌ" }
},
"νμ
κΈ°λ‘": {
"λΉκ³ ": { "value": "μ°μ νμ" }
}
}
}
}νΉμ μμ μΉμ λ§ μ‘°νν©λλ€. κΆν λͺ¨λΈμ λ°λΌ μ κ·Όμ΄ μ νλ©λλ€.
GET /api/archives?registration=507f1f77bcf86cd799439011&label=μΈμ μ¬ν
{
"archive": {
"_id": "60a7b2c3d4e5f6a7b8c9d0e1",
"user": "507f1f77bcf86cd799439022",
"data": {
"μΈμ μ¬ν": {
"μ΄λ¦": { "value": "νκΈΈλ" },
"μ£Όλ―Όλ±λ‘λ²νΈ": { "value": "010101-3123456" },
"μ£Όμ": { "value": "μμΈνΉλ³μ κ°λ¨κ΅¬" },
"μ±λͺ
(λΆ)": { "value": "νμλ²μ§" },
"μλ
μμΌ(λΆ)": { "value": "1975λ
03μ15μΌ" },
"μ±λͺ
(λͺ¨)": { "value": "κΉμ΄λ¨Έλ" },
"μλ
μμΌ(λͺ¨)": { "value": "1978λ
07μ22μΌ" }
}
}
}
}| μν μ½λ | λ©μμ§ | μ€λͺ |
|---|---|---|
400 |
FIELD_REQUIRED(registration) |
registration νλΌλ―Έν° λλ½ |
400 |
(λΉ μλ΅) | registration ObjectId νμ μ€λ₯ |
403 |
PERMISSION_DENIED |
ν΄λΉ μμ μΉμ μ λν μ κ·Ό κΆν μμ |
404 |
__NOT_FOUND(registration(student)) |
νμ λ±λ‘ μ 보λ₯Ό μ°Ύμ μ μμ |
404 |
__NOT_FOUND(registration(teacher)) |
κ΅μ¬ λ±λ‘ μ 보λ₯Ό μ°Ύμ μ μμ (label μμ΄ μ‘°ν μ) |
404 |
__NOT_FOUND(school) |
νκ΅λ₯Ό μ°Ύμ μ μμ |
404 |
__NOT_FOUND(formArchive_item) |
ν΄λΉ λΌλ²¨μ μμ νλͺ©μ μ°Ύμ μ μμ |
νμ κΈ°λ‘μ νΉμ μμ μΉμ λ°μ΄ν°λ₯Ό μμ ν©λλ€. κΈ°μ‘΄ λ°μ΄ν°μ μλ‘μ΄ λ°μ΄ν°λ₯Ό λ³ν©(merge)ν©λλ€.
PUT /api/archives/:_id
κΆν: isLoggedIn
| νλΌλ―Έν° | νμ | μ€λͺ |
|---|---|---|
_id |
string |
κΈ°λ‘(Archive)μ ObjectId |
| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
registration |
string |
O | νμ λ±λ‘(Registration)μ ObjectId |
label |
string |
O | μμ ν μμ μΉμ λΌλ²¨ |
data |
object |
O | μμ ν λ°μ΄ν° |
νκ΅μ formArchive μ€μ μ λ°λΌ μΈλΆνλ κΆν κ²μ¬κ° μνλ©λλ€. μ‘°ν(GET)μ λμΌν μν λͺ¨λΈμ΄μ§λ§, μμ κΆνμ΄ νμν©λλ€.
| μν | 쑰건 | μ€λͺ |
|---|---|---|
κ΄λ¦¬μ (manager) |
authManager === "viewAndEdit" |
ν΄λΉ μμ μΉμ μ λν κ΄λ¦¬μ μμ νμ© |
| νμ (λ³ΈμΈ) | authStudent === "viewAndEdit" |
λ³ΈμΈμ κΈ°λ‘λ§ μμ κ°λ₯ ("view"λ§μΌλ‘λ μμ λΆκ°) |
| κ΅μ¬ (μ 체) | authTeacher === "viewAndEditStudents" |
κ°μ νκΈ°μ κ΅μ¬λ‘ λ±λ‘λ κ²½μ° λͺ¨λ νμ κΈ°λ‘ μμ κ°λ₯ |
| κ΅μ¬ (λ΄λΉ) | authTeacher === "viewAndEditMyStudents" |
λ±λ‘(Registration)μ teacher λλ subTeacherλ‘ μ§μ λ νμλ§ μμ κ°λ₯ |
{
"registration": "507f1f77bcf86cd799439011",
"label": "μΈμ μ¬ν",
"data": {
"μ΄λ¦": { "value": "νκΈΈλ" },
"μ£Όμ": { "value": "μμΈνΉλ³μ μμ΄κ΅¬" },
"μ±λͺ
(λΆ)": { "value": "νμλ²μ§" },
"μλ
μμΌ(λΆ)": { "value": "1975λ
03μ15μΌ" }
}
}{
"archive": {
"_id": "60a7b2c3d4e5f6a7b8c9d0e1",
"user": "507f1f77bcf86cd799439022",
"data": {
"μΈμ μ¬ν": {
"μ΄λ¦": { "value": "νκΈΈλ" },
"μ£Όμ": { "value": "μμΈνΉλ³μ μμ΄κ΅¬" },
"μ±λͺ
(λΆ)": { "value": "νμλ²μ§" },
"μλ
μμΌ(λΆ)": { "value": "1975λ
03μ15μΌ" }
}
}
}
}| μν μ½λ | λ©μμ§ | μ€λͺ |
|---|---|---|
400 |
FIELD_INVALID(_id) |
_id κ²½λ‘ νλΌλ―Έν° ObjectId νμ μ€λ₯ |
400 |
FIELD_REQUIRED(label) |
label νλ λλ½ |
400 |
FIELD_REQUIRED(data) |
data νλ λλ½ |
400 |
FIELD_REQUIRED(registration) |
registration νλ λλ½ |
400 |
(λΉ μλ΅) | κΆν 쑰건μ ν΄λΉνμ§ μλ κ²½μ° |
403 |
PERMISSION_DENIED |
ν΄λΉ μμ μΉμ μ λν μμ κΆν μμ |
404 |
__NOT_FOUND(archive) |
κΈ°λ‘μ μ°Ύμ μ μμ |
404 |
__NOT_FOUND(school) |
νκ΅λ₯Ό μ°Ύμ μ μμ |
404 |
__NOT_FOUND(formArchive_Item) |
ν΄λΉ λΌλ²¨μ μμ νλͺ©μ μ°Ύμ μ μμ |
archive.dataλ μμ λΌλ²¨μ ν€λ‘, κ° νλ λΌλ²¨κ³Ό κ°μ μ€μ²© κ°μ²΄λ‘ κ°μ§λ ꡬ쑰μ
λλ€.
{
"[μμ λΌλ²¨]": {
"[νλ λΌλ²¨]": {
"value": "κ°",
"key": "νλ ν€ (μ ν)"
}
}
}{
"μΈμ μ¬ν": {
"μ΄λ¦": { "value": "νκΈΈλ" },
"μ£Όλ―Όλ±λ‘λ²νΈ": { "value": "010101-3123456" },
"μ£Όμ": { "value": "μμΈνΉλ³μ κ°λ¨κ΅¬" },
"μ±λͺ
(λΆ)": { "value": "νμλ²μ§" },
"μλ
μμΌ(λΆ)": { "value": "1975λ
03μ15μΌ" },
"μ±λͺ
(λͺ¨)": { "value": "κΉμ΄λ¨Έλ" },
"μλ
μμΌ(λͺ¨)": { "value": "1978λ
07μ22μΌ" }
},
"νμ
κΈ°λ‘": {
"λΉκ³ ": { "value": "μ°μ νμ" }
}
}| νλ | νμ | νμ | μ€λͺ |
|---|---|---|---|
_id |
ObjectId |
μλ | κΈ°λ‘ κ³ μ ID |
school |
ObjectId |
O | νκ΅ ID (School._id) |
schoolId |
string |
X | νκ΅ μλ³μ |
schoolName |
string |
X | νκ΅ μ΄λ¦ |
user |
ObjectId |
O | μ¬μ©μ ID (User._id) |
userId |
string |
X | μ¬μ©μ μλ³μ |
userName |
string |
X | μ¬μ©μ μ΄λ¦ |
data |
Object |
X | κΈ°λ‘ λ°μ΄ν° (κΈ°λ³Έκ°: {}) |
createdAt |
Date |
μλ | μμ± μκ° |
updatedAt |
Date |
μλ | μμ μκ° |
| μΈλ±μ€ | νλ | μμ± |
|---|---|---|
_id |
_id |
UNIQUE |
school_1_user_1 |
{ school: 1, user: 1 } |
UNIQUE, COMPOUND |
data νλλ mongoose-encryption νλ¬κ·ΈμΈμ μ¬μ©νμ¬ μνΈνλμ΄ μ μ₯λ©λλ€.
- μνΈν ν€:
ENCKEY_A(νκ²½ λ³μ) - μλͺ
ν€:
SIGKEY_A(νκ²½ λ³μ) - μνΈν λμ νλ:
data
clean() μΈμ€ν΄μ€ λ©μλλ λ―Όκ°ν κ°μΈμ 보λ₯Ό λλ―Έ λ°μ΄ν°λ‘ λ체ν©λλ€. λ°±μ
/ν
μ€νΈ μ©λλ‘ μ¬μ©λ©λλ€.
| νλ | λ체 κ° |
|---|---|
μΈμ μ¬ν.μ£Όλ―Όλ±λ‘λ²νΈ |
"000000-111111" |
μΈμ μ¬ν.μ£Όμ |
"μλ¦λ€μ΄ μ΄λ
μ κΈμκ°μ°μ" |
μΈμ μ¬ν.μ±λͺ
(λΆ) |
"μλ²μ§" |
μΈμ μ¬ν.μλ
μμΌ(λΆ) |
"2022λ
11μ16μΌ" |
μΈμ μ¬ν.μ±λͺ
(λͺ¨) |
"μ΄λ¨Έλ" |
μΈμ μ¬ν.μλ
μμΌ(λͺ¨) |
"2022λ
11μ16μΌ" |
κΈ°λ‘μ μ²¨λΆ νμΌμ μ
λ‘λνκ±°λ λ€μ΄λ‘λνλ κΈ°λ₯μ λ³λμ νμΌ APIλ₯Ό ν΅ν΄ μ 곡λ©λλ€. μμΈν λ΄μ©μ files.mdλ₯Ό μ°Έμ‘°νμΈμ.
| λ©μλ | κ²½λ‘ | μ€λͺ |
|---|---|---|
POST |
/api/files/archive |
κΈ°λ‘ μ²¨λΆ νμΌ μ
λ‘λ (CUploadFileArchive) |
GET |
/api/files/archive/signed |
κΈ°λ‘ μ²¨λΆ νμΌ μλͺ
λ URL μ‘°ν (RSignedUrlArchive) |
μ°Έκ³ : νμΌ APIμ κΆν λͺ¨λΈμ κΈ°λ‘ μ‘°ν/μμ κ³Ό λμΌν
formArchiveκΈ°λ° κΆν κ²μ¬λ₯Ό μνν©λλ€.
| ν¨μλͺ | λ©μλ | κ²½λ‘ | μ€λͺ |
|---|---|---|---|
RArchiveByRegistration |
GET | /api/archives |
νμ κΈ°λ‘ μ‘°ν |
UArchiveByRegistration |
PUT | /api/archives/:_id |
νμ κΈ°λ‘ μμ |