Skip to content

Latest commit

Β 

History

History
416 lines (333 loc) Β· 11.1 KB

File metadata and controls

416 lines (333 loc) Β· 11.1 KB

ν•™κΈ° 등둝 API

ν•™κΈ° 등둝(Registration)은 μ‚¬μš©μžλ₯Ό 학기에 λ“±λ‘ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. 각 λ“±λ‘μ—λŠ” μ—­ν• (ꡐ사/학생), ν•™λ…„, 반, λ‹΄λ‹Ή ꡐ사 정보가 ν¬ν•¨λ©λ‹ˆλ‹€.

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


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

λ©”μ„œλ“œ 경둜 μ„€λͺ… κΆŒν•œ
POST /api/registrations ν•™κΈ° 등둝 생성 admin|manager
POST /api/registrations/copy ν•™κΈ° 등둝 볡사 admin|manager
GET /api/registrations ν•™κΈ° 등둝 λͺ©λ‘ 쑰회 둜그인 μ‚¬μš©μž
GET /api/registrations/:_id ν•™κΈ° 등둝 상세 쑰회 둜그인 μ‚¬μš©μž
PUT /api/registrations/:_id ν•™κΈ° 등둝 μˆ˜μ • admin|manager
DELETE /api/registrations/:_id ν•™κΈ° 등둝 μ‚­μ œ admin|manager

ν•™κΈ° 등둝 생성

μ‚¬μš©μžλ₯Ό νŠΉμ • 학기에 λ“±λ‘ν•©λ‹ˆλ‹€. 등둝 μ‹œ ν•™κΈ°(season)와 μ‚¬μš©μž(user) 정보λ₯Ό 기반으둜 학ꡐ, 학년도, ν•™κΈ° λ“±μ˜ 정보가 μžλ™μœΌλ‘œ μ„€μ •λ©λ‹ˆλ‹€.

POST /api/registrations

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
season string O ν•™κΈ° ObjectId
user string O μ‚¬μš©μž ObjectId
role string O μ—­ν•  ("teacher" λ˜λŠ” "student")
grade string X ν•™λ…„
group string X 반
teacher string X λ‹΄λ‹Ή ꡐ사 ObjectId
subTeacher string X λΆ€λ‹΄λ‹Ή ꡐ사 ObjectId

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

{
  "season": "507f1f77bcf86cd799439011",
  "user": "507f1f77bcf86cd799439022",
  "role": "student",
  "grade": "1",
  "group": "A",
  "teacher": "507f1f77bcf86cd799439033"
}

응닡 (200)

{
  "registration": {
    "_id": "507f1f77bcf86cd799439044",
    "season": "507f1f77bcf86cd799439011",
    "school": "507f1f77bcf86cd799439055",
    "schoolId": "school-01",
    "schoolName": "ν…ŒμŠ€νŠΈ 학ꡐ",
    "year": "2024학년도",
    "term": "1ν•™κΈ°",
    "period": {
      "start": "2024-03-01",
      "end": "2024-08-31"
    },
    "user": "507f1f77bcf86cd799439022",
    "userId": "student01",
    "userName": "홍길동",
    "role": "student",
    "grade": "1",
    "group": "A",
    "teacher": "507f1f77bcf86cd799439033",
    "teacherId": "teacher01",
    "teacherName": "김ꡐ사",
    "isActivated": true,
    "memos": [],
    "permissionSyllabusV2": false,
    "permissionEnrollmentV2": false,
    "permissionEvaluationV2": false,
    "formEvaluation": []
  }
}

μ—λŸ¬ 응닡

μƒνƒœ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
400 FIELD_REQUIRED({ν•„λ“œλͺ…}) ν•„μˆ˜ ν•„λ“œ λˆ„λ½ (season, user, role)
400 FIELD_INVALID({ν•„λ“œλͺ…}) ObjectId ν˜•μ‹μ΄ μ˜¬λ°”λ₯΄μ§€ μ•ŠμŒ (season, user, teacher, subTeacher)
404 __NOT_FOUND(season) ν•™κΈ°λ₯Ό 찾을 수 μ—†μŒ
404 __NOT_FOUND(user) μ‚¬μš©μžλ₯Ό 찾을 수 μ—†μŒ
404 __NOT_FOUND(teacher) λ‹΄λ‹Ή κ΅μ‚¬μ˜ ν•™κΈ° 등둝 정보λ₯Ό 찾을 수 μ—†μŒ
404 __NOT_FOUND(subTeacher) λΆ€λ‹΄λ‹Ή κ΅μ‚¬μ˜ ν•™κΈ° 등둝 정보λ₯Ό 찾을 수 μ—†μŒ
409 REGISTRATION_IN_USE ν•΄λ‹Ή 학기에 이미 λ“±λ‘λœ μ‚¬μš©μž

ν•™κΈ° 등둝 볡사

κΈ°μ‘΄ ν•™κΈ°μ˜ λͺ¨λ“  등둝 정보λ₯Ό λ‹€λ₯Έ ν•™κΈ°λ‘œ λ³΅μ‚¬ν•©λ‹ˆλ‹€. λŒ€μƒ 학기에 이미 등둝 정보가 μ‘΄μž¬ν•˜λ©΄ 볡사할 수 μ—†μŠ΅λ‹ˆλ‹€.

POST /api/registrations/copy

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
fromSeason string O 볡사 원본 ν•™κΈ° ObjectId
toSeason string O 볡사 λŒ€μƒ ν•™κΈ° ObjectId

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

{
  "fromSeason": "507f1f77bcf86cd799439011",
  "toSeason": "507f1f77bcf86cd799439066"
}

응닡 (200)

{
  "registerations": [
    {
      "_id": "507f1f77bcf86cd799439077",
      "season": "507f1f77bcf86cd799439066",
      "school": "507f1f77bcf86cd799439055",
      "schoolId": "school-01",
      "schoolName": "ν…ŒμŠ€νŠΈ 학ꡐ",
      "year": "2024학년도",
      "term": "2ν•™κΈ°",
      "user": "507f1f77bcf86cd799439022",
      "userId": "student01",
      "userName": "홍길동",
      "role": "student",
      "grade": "1",
      "group": "A",
      "teacher": "507f1f77bcf86cd799439033",
      "teacherId": "teacher01",
      "teacherName": "김ꡐ사"
    }
  ]
}

μ°Έκ³ : 응닡 ν‚€κ°€ registerations(μ˜€νƒ€)둜 λ°˜ν™˜λ©λ‹ˆλ‹€. μ΄λŠ” λ°±μ—”λ“œ μ½”λ“œμ˜ κΈ°μ‘΄ λ™μž‘μž…λ‹ˆλ‹€.

μ—λŸ¬ 응닡

μƒνƒœ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
400 FIELD_REQUIRED({ν•„λ“œλͺ…}) ν•„μˆ˜ ν•„λ“œ λˆ„λ½ (fromSeason, toSeason)
404 __NOT_FOUND(toSeason) λŒ€μƒ ν•™κΈ°λ₯Ό 찾을 수 μ—†μŒ
409 REGISTRATION_IN_USE λŒ€μƒ 학기에 이미 등둝 정보가 μ‘΄μž¬ν•¨

ν•™κΈ° 등둝 λͺ©λ‘ 쑰회

ν•™κΈ° 등둝 λͺ©λ‘μ„ μ‘°νšŒν•©λ‹ˆλ‹€. 쿼리 νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ 필터링할 수 μžˆμŠ΅λ‹ˆλ‹€.

GET /api/registrations

κΆŒν•œ: 둜그인 μ‚¬μš©μž (isLoggedIn)

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

νŒŒλΌλ―Έν„° νƒ€μž… ν•„μˆ˜ μ„€λͺ…
user string X μ‚¬μš©μž ObjectId둜 필터링
school string X 학ꡐ ObjectId둜 필터링
season string X ν•™κΈ° ObjectId둜 필터링
role string X μ—­ν• λ‘œ 필터링 ("teacher" λ˜λŠ” "student")

응닡 (200)

{
  "registrations": [
    {
      "_id": "507f1f77bcf86cd799439044",
      "season": "507f1f77bcf86cd799439011",
      "school": "507f1f77bcf86cd799439055",
      "schoolId": "school-01",
      "schoolName": "ν…ŒμŠ€νŠΈ 학ꡐ",
      "year": "2024학년도",
      "term": "1ν•™κΈ°",
      "period": {
        "start": "2024-03-01",
        "end": "2024-08-31"
      },
      "user": "507f1f77bcf86cd799439022",
      "userId": "student01",
      "userName": "홍길동",
      "role": "student",
      "grade": "1",
      "group": "A",
      "teacher": "507f1f77bcf86cd799439033",
      "teacherId": "teacher01",
      "teacherName": "김ꡐ사",
      "isActivated": true,
      "memos": [],
      "permissionSyllabusV2": false,
      "permissionEnrollmentV2": false,
      "permissionEvaluationV2": false,
      "formEvaluation": []
    }
  ]
}

μ°Έκ³ : ν”„λ‘ νŠΈμ—”λ“œ(useAPIv2)μ—μ„œλŠ” κ²°κ³Όλ₯Ό period.end λ‚΄λ¦Όμ°¨μˆœ, role μ˜€λ¦„μ°¨μˆœ, grade μ˜€λ¦„μ°¨μˆœ, userName μ˜€λ¦„μ°¨μˆœ, userId μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.


ν•™κΈ° 등둝 상세 쑰회

νŠΉμ • ν•™κΈ° 등둝 정보λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

GET /api/registrations/:_id

κΆŒν•œ: 둜그인 μ‚¬μš©μž (isLoggedIn)

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

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

응닡 (200)

{
  "registration": {
    "_id": "507f1f77bcf86cd799439044",
    "season": "507f1f77bcf86cd799439011",
    "school": "507f1f77bcf86cd799439055",
    "schoolId": "school-01",
    "schoolName": "ν…ŒμŠ€νŠΈ 학ꡐ",
    "year": "2024학년도",
    "term": "1ν•™κΈ°",
    "period": {
      "start": "2024-03-01",
      "end": "2024-08-31"
    },
    "user": "507f1f77bcf86cd799439022",
    "userId": "student01",
    "userName": "홍길동",
    "role": "student",
    "grade": "1",
    "group": "A",
    "teacher": "507f1f77bcf86cd799439033",
    "teacherId": "teacher01",
    "teacherName": "김ꡐ사",
    "isActivated": true,
    "memos": [],
    "permissionSyllabusV2": false,
    "permissionEnrollmentV2": false,
    "permissionEvaluationV2": false,
    "formEvaluation": []
  }
}

μ—λŸ¬ 응닡

μƒνƒœ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
404 __NOT_FOUND(registration) 등둝 정보λ₯Ό 찾을 수 μ—†μŒ

ν•™κΈ° 등둝 μˆ˜μ •

ν•™κΈ° 등둝 μ •λ³΄μ˜ μ—­ν• , ν•™λ…„, 반, λ‹΄λ‹Ή ꡐ사λ₯Ό μˆ˜μ •ν•©λ‹ˆλ‹€.

PUT /api/registrations/:_id

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

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

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

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

ν•„λ“œ νƒ€μž… ν•„μˆ˜ μ„€λͺ…
role string O μ—­ν•  ("teacher" λ˜λŠ” "student")
grade string X ν•™λ…„
group string X 반
teacher string X λ‹΄λ‹Ή ꡐ사 ObjectId
subTeacher string X λΆ€λ‹΄λ‹Ή ꡐ사 ObjectId

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

{
  "role": "student",
  "grade": "2",
  "group": "B",
  "teacher": "507f1f77bcf86cd799439033"
}

응닡 (200)

{
  "registration": {
    "_id": "507f1f77bcf86cd799439044",
    "season": "507f1f77bcf86cd799439011",
    "school": "507f1f77bcf86cd799439055",
    "schoolId": "school-01",
    "schoolName": "ν…ŒμŠ€νŠΈ 학ꡐ",
    "year": "2024학년도",
    "term": "1ν•™κΈ°",
    "period": {
      "start": "2024-03-01",
      "end": "2024-08-31"
    },
    "user": "507f1f77bcf86cd799439022",
    "userId": "student01",
    "userName": "홍길동",
    "role": "student",
    "grade": "2",
    "group": "B",
    "teacher": "507f1f77bcf86cd799439033",
    "teacherId": "teacher01",
    "teacherName": "김ꡐ사",
    "isActivated": true,
    "memos": [],
    "permissionSyllabusV2": false,
    "permissionEnrollmentV2": false,
    "permissionEvaluationV2": false,
    "formEvaluation": []
  }
}

μ—λŸ¬ 응닡

μƒνƒœ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
400 FIELD_REQUIRED(role) role ν•„λ“œ λˆ„λ½
400 FIELD_INVALID(role) role 값이 "teacher" λ˜λŠ” "student"κ°€ μ•„λ‹˜
404 __NOT_FOUND(teacher) λ‹΄λ‹Ή ꡐ사λ₯Ό 찾을 수 μ—†μŒ
404 __NOT_FOUND(subTeacher) λΆ€λ‹΄λ‹Ή ꡐ사λ₯Ό 찾을 수 μ—†μŒ

ν•™κΈ° 등둝 μ‚­μ œ

ν•™κΈ° 등둝 정보λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€. μ‚­μ œ μ‹œ ν•΄λ‹Ή ν•™κΈ°μ˜ κΆŒν•œ μ˜ˆμ™Έ λͺ©λ‘μ—μ„œλ„ μ‚¬μš©μžκ°€ μ œκ±°λ©λ‹ˆλ‹€.

DELETE /api/registrations/:_id

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

주의: 등둝 μ‚­μ œ μ‹œ κ΄€λ ¨λœ μˆ˜κ°• μ‹ μ²­(enrollment), μˆ˜μ—… κ³„νš(syllabus), λ©”λͺ¨(memo) λ“±μ˜ μ—°κ΄€ 데이터가 ν•¨κ»˜ μ‚­μ œλ  수 μžˆμŠ΅λ‹ˆλ‹€.

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

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

응닡 (200)

{}

μ—λŸ¬ 응닡

μƒνƒœ μ½”λ“œ λ©”μ‹œμ§€ μ„€λͺ…
404 __NOT_FOUND(registration) 등둝 정보λ₯Ό 찾을 수 μ—†μŒ

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

ν•¨μˆ˜λͺ… λ©”μ„œλ“œ 경둜 μ„€λͺ…
CRegistration POST /api/registrations ν•™κΈ° 등둝 생성
CCopyRegistrations POST /api/registrations/copy ν•™κΈ° 등둝 볡사
RRegistrations GET /api/registrations ν•™κΈ° 등둝 λͺ©λ‘ 쑰회
RRegistration GET /api/registrations/:_id ν•™κΈ° 등둝 상세 쑰회
URegistration PUT /api/registrations/:_id ν•™κΈ° 등둝 μˆ˜μ •
DRegistration DELETE /api/registrations/:_id ν•™κΈ° 등둝 μ‚­μ œ