Skip to content

Latest commit

ย 

History

History
730 lines (575 loc) ยท 16.9 KB

File metadata and controls

730 lines (575 loc) ยท 16.9 KB

์–‘์‹ API

์–‘์‹(Form) API์ž…๋‹ˆ๋‹ค. ๊ฐ•์˜๊ณ„ํš์„œ, ์‹œ๊ฐ„ํ‘œ, ์ถœ๋ ฅ๋ฌผ ๋“ฑ์˜ ์–‘์‹์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์–‘์‹์˜ ์ƒ์„ฑ, ๋ณต์‚ฌ, ๋ณด๊ด€, ๋ณต์›, ์—ด๋žŒ ๊ถŒํ•œ ์„ค์ • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ผ์šฐํŠธ ํŒŒ์ผ: backend/src/routes/forms.js ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ: backend/src/controllers/forms.js ๋ชจ๋ธ ํŒŒ์ผ: backend/src/models/Form.js


์—”๋“œํฌ์ธํŠธ ์š”์•ฝ

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช… ๊ถŒํ•œ
POST /api/forms ์–‘์‹ ์ƒ์„ฑ admin|manager
POST /api/forms/:_id/copy ์–‘์‹ ๋ณต์‚ฌ admin|manager
GET /api/forms ์–‘์‹ ๋ชฉ๋ก ์กฐํšŒ isLoggedIn
GET /api/forms/:_id ์–‘์‹ ์ƒ์„ธ ์กฐํšŒ isLoggedIn
PUT /api/forms/:_id ์–‘์‹ ์ˆ˜์ • admin|manager
PUT /api/forms/:_id/archive ์–‘์‹ ๋ณด๊ด€ admin|manager
PUT /api/forms/:_id/restore ์–‘์‹ ๋ณต์› admin|manager
DELETE /api/forms/:_id ์–‘์‹ ์‚ญ์ œ admin|manager
PUT /api/forms/:_id/permission ์—ด๋žŒ ๊ถŒํ•œ ์ˆ˜์ • admin|manager
POST /api/forms/:_id/permission/exceptions ์—ด๋žŒ ๊ถŒํ•œ ์˜ˆ์™ธ ์ถ”๊ฐ€ admin|manager
DELETE /api/forms/:_id/permission/exceptions ์—ด๋žŒ ๊ถŒํ•œ ์˜ˆ์™ธ ์‚ญ์ œ admin|manager

๋ฐ์ดํ„ฐ ๋ชจ๋ธ

Form

ํ•„๋“œ ํƒ€์ž… ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
_id ObjectId ์ž๋™์ƒ์„ฑ ์–‘์‹ ๊ณ ์œ  ID
userId string - ์ƒ์„ฑ์ž ์‚ฌ์šฉ์ž ID
userName string - ์ƒ์„ฑ์ž ์ด๋ฆ„
type string - ์–‘์‹ ์œ ํ˜• ("syllabus", "timetable", "print")
title string - ์–‘์‹ ์ œ๋ชฉ
data object[] - ์–‘์‹ ๋ฐ์ดํ„ฐ (์—๋””ํ„ฐ์— ์˜ํ•ด ์„ค์ •)
archived boolean false ๋ณด๊ด€ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€
permissionView object { teacher: true, student: false, exceptions: [] } ์—ด๋žŒ ๊ถŒํ•œ ์„ค์ •
createdAt Date ์ž๋™์ƒ์„ฑ ์ƒ์„ฑ์ผ์‹œ
updatedAt Date ์ž๋™์ƒ์„ฑ ์ˆ˜์ •์ผ์‹œ

permissionView

ํ•„๋“œ ํƒ€์ž… ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
teacher boolean true ๊ต์‚ฌ ์—ด๋žŒ ํ—ˆ์šฉ ์—ฌ๋ถ€
student boolean false ํ•™์ƒ ์—ด๋žŒ ํ—ˆ์šฉ ์—ฌ๋ถ€
exceptions object[] [] ์‚ฌ์šฉ์ž๋ณ„ ์˜ˆ์™ธ ๋ชฉ๋ก

permissionView.exceptions[]

ํ•„๋“œ ํƒ€์ž… ์„ค๋ช…
user ObjectId ์‚ฌ์šฉ์ž _id
userId string ์‚ฌ์šฉ์ž ID
userName string ์‚ฌ์šฉ์ž ์ด๋ฆ„
isAllowed boolean ์—ด๋žŒ ํ—ˆ์šฉ ์—ฌ๋ถ€

์—ด๋žŒ ๊ถŒํ•œ ํŒ์ • ๋กœ์ง

  1. admin ๋˜๋Š” manager๋Š” ํ•ญ์ƒ ์—ด๋žŒ ๊ฐ€๋Šฅ
  2. permissionView.exceptions์— ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์œผ๋ฉด isAllowed ๊ฐ’ ์ ์šฉ
  3. ์‚ฌ์šฉ์ž์˜ ์—ญํ• (teacher/student)์— ๋Œ€ํ•œ permissionView ์„ค์ •๊ฐ’ ์ ์šฉ
  4. ์œ„ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ์—ด๋žŒ ๋ถˆ๊ฐ€

์–‘์‹ ์ƒ์„ฑ

์ƒˆ๋กœ์šด ์–‘์‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋™์ผ ์œ ํ˜•(type) ๋‚ด์—์„œ ์ œ๋ชฉ์ด ์ค‘๋ณต๋˜๋ฉด 409 ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

POST /api/forms

๊ถŒํ•œ: admin ๋˜๋Š” manager

์š”์ฒญ ๋ณธ๋ฌธ

ํ•„๋“œ ํƒ€์ž… ํ•„์ˆ˜ ์„ค๋ช…
type string O ์–‘์‹ ์œ ํ˜• ("syllabus", "timetable", "print")
title string O ์–‘์‹ ์ œ๋ชฉ
data object[] O ์–‘์‹ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด

์š”์ฒญ ์˜ˆ์‹œ

{
  "type": "syllabus",
  "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
  "data": [
    {
      "label": "๊ต๊ณผ๋ชฉ๋ช…",
      "type": "input"
    },
    {
      "label": "๋‹ด๋‹น๊ต์‚ฌ",
      "type": "input"
    }
  ]
}

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439011",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
    "data": [
      {
        "label": "๊ต๊ณผ๋ชฉ๋ช…",
        "type": "input"
      },
      {
        "label": "๋‹ด๋‹น๊ต์‚ฌ",
        "type": "input"
      }
    ],
    "userId": "admin01",
    "userName": "๊ด€๋ฆฌ์ž",
    "archived": false,
    "permissionView": {
      "teacher": true,
      "student": false,
      "exceptions": []
    },
    "createdAt": "2024-03-01T09:00:00.000Z",
    "updatedAt": "2024-03-01T09:00:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
400 FIELD_REQUIRED({ํ•„๋“œ๋ช…}) ํ•„์ˆ˜ ํ•„๋“œ ๋ˆ„๋ฝ (title, type, data)
409 FIELD_IN_USE(title) ๋™์ผ ์œ ํ˜• ๋‚ด ์ œ๋ชฉ ์ค‘๋ณต

์–‘์‹ ๋ณต์‚ฌ

๊ธฐ์กด ์–‘์‹์„ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ์–‘์‹์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌ๋œ ์–‘์‹์˜ ์ œ๋ชฉ์€ ์›๋ณธ ์ œ๋ชฉ์— "์˜ ์‚ฌ๋ณธ"์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

POST /api/forms/:_id/copy

๊ถŒํ•œ: admin ๋˜๋Š” manager

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ๋ณต์‚ฌํ•  ์–‘์‹์˜ ObjectId

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439012",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ์˜ ์‚ฌ๋ณธ",
    "data": [
      {
        "label": "๊ต๊ณผ๋ชฉ๋ช…",
        "type": "input"
      },
      {
        "label": "๋‹ด๋‹น๊ต์‚ฌ",
        "type": "input"
      }
    ],
    "userId": "admin01",
    "userName": "๊ด€๋ฆฌ์ž",
    "archived": false,
    "permissionView": {
      "teacher": true,
      "student": false,
      "exceptions": []
    },
    "createdAt": "2024-03-01T10:00:00.000Z",
    "updatedAt": "2024-03-01T10:00:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
404 FORM_NOT_FOUND ์›๋ณธ ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์–‘์‹ ๋ชฉ๋ก ์กฐํšŒ

์–‘์‹ ๋ชฉ๋ก์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. admin/manager๋Š” ๋ชจ๋“  ์–‘์‹์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์—ด๋žŒ ๊ถŒํ•œ(permissionView)์— ๋”ฐ๋ผ ํ•„ํ„ฐ๋ง๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก ์กฐํšŒ ์‹œ data ํ•„๋“œ๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

GET /api/forms

๊ถŒํ•œ: isLoggedIn (๋กœ๊ทธ์ธ ํ•„์š”)

์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ํ•„์ˆ˜ ์„ค๋ช…
type string X ์–‘์‹ ์œ ํ˜• ํ•„ํ„ฐ ("syllabus", "timetable", "print")
archived string X ๋ณด๊ด€ ์—ฌ๋ถ€ ํ•„ํ„ฐ ("true" ๋˜๋Š” "false")

์‘๋‹ต (200)

{
  "forms": [
    {
      "_id": "507f1f77bcf86cd799439011",
      "type": "syllabus",
      "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
      "userId": "admin01",
      "userName": "๊ด€๋ฆฌ์ž",
      "archived": false,
      "permissionView": {
        "teacher": true,
        "student": false,
        "exceptions": []
      },
      "createdAt": "2024-03-01T09:00:00.000Z",
      "updatedAt": "2024-03-01T09:00:00.000Z"
    },
    {
      "_id": "507f1f77bcf86cd799439012",
      "type": "timetable",
      "title": "์ฃผ๊ฐ„ ์‹œ๊ฐ„ํ‘œ",
      "userId": "admin01",
      "userName": "๊ด€๋ฆฌ์ž",
      "archived": false,
      "permissionView": {
        "teacher": true,
        "student": true,
        "exceptions": []
      },
      "createdAt": "2024-03-02T09:00:00.000Z",
      "updatedAt": "2024-03-02T09:00:00.000Z"
    }
  ]
}

์ฐธ๊ณ : ์‘๋‹ต์— data ํ•„๋“œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–‘์‹ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด ์–‘์‹ ์ƒ์„ธ ์กฐํšŒ API๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.


์–‘์‹ ์ƒ์„ธ ์กฐํšŒ

ํŠน์ • ์–‘์‹์˜ ์ „์ฒด ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. data ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ์–‘์‹ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. admin/manager๋Š” ํ•ญ์ƒ ์กฐํšŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์—ด๋žŒ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์ ‘๊ทผ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

GET /api/forms/:_id

๊ถŒํ•œ: isLoggedIn (๋กœ๊ทธ์ธ ํ•„์š”)

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ์–‘์‹ ObjectId

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439011",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
    "data": [
      {
        "label": "๊ต๊ณผ๋ชฉ๋ช…",
        "type": "input"
      },
      {
        "label": "๋‹ด๋‹น๊ต์‚ฌ",
        "type": "input"
      }
    ],
    "userId": "admin01",
    "userName": "๊ด€๋ฆฌ์ž",
    "archived": false,
    "permissionView": {
      "teacher": true,
      "student": false,
      "exceptions": []
    },
    "createdAt": "2024-03-01T09:00:00.000Z",
    "updatedAt": "2024-03-01T09:00:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
403 PERMISSION_DENIED ์—ด๋žŒ ๊ถŒํ•œ ์—†์Œ
404 FORM_NOT_FOUND ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์–‘์‹ ์ˆ˜์ •

์–‘์‹์˜ ์ œ๋ชฉ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

PUT /api/forms/:_id

๊ถŒํ•œ: admin ๋˜๋Š” manager

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ์–‘์‹ ObjectId

์š”์ฒญ ๋ณธ๋ฌธ

ํ•„๋“œ ํƒ€์ž… ํ•„์ˆ˜ ์„ค๋ช…
title string O ์ˆ˜์ •ํ•  ์–‘์‹ ์ œ๋ชฉ
data object[] O ์ˆ˜์ •ํ•  ์–‘์‹ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด

์š”์ฒญ ์˜ˆ์‹œ

{
  "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ (์ˆ˜์ •)",
  "data": [
    {
      "label": "๊ต๊ณผ๋ชฉ๋ช…",
      "type": "input"
    },
    {
      "label": "๋‹ด๋‹น๊ต์‚ฌ",
      "type": "input"
    },
    {
      "label": "์ˆ˜์—… ๋ชฉํ‘œ",
      "type": "textarea"
    }
  ]
}

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439011",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ (์ˆ˜์ •)",
    "data": [
      {
        "label": "๊ต๊ณผ๋ชฉ๋ช…",
        "type": "input"
      },
      {
        "label": "๋‹ด๋‹น๊ต์‚ฌ",
        "type": "input"
      },
      {
        "label": "์ˆ˜์—… ๋ชฉํ‘œ",
        "type": "textarea"
      }
    ],
    "userId": "admin01",
    "userName": "๊ด€๋ฆฌ์ž",
    "archived": false,
    "permissionView": {
      "teacher": true,
      "student": false,
      "exceptions": []
    },
    "createdAt": "2024-03-01T09:00:00.000Z",
    "updatedAt": "2024-03-05T14:30:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
400 FIELD_REQUIRED({ํ•„๋“œ๋ช…}) ํ•„์ˆ˜ ํ•„๋“œ ๋ˆ„๋ฝ (title, data)
404 FORM_NOT_FOUND ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์–‘์‹ ๋ณด๊ด€

์–‘์‹์„ ๋ณด๊ด€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. archived ํ•„๋“œ๋ฅผ true๋กœ ์„ค์ •ํ•˜๋Š” ์†Œํ”„ํŠธ ๋ณด๊ด€ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

PUT /api/forms/:_id/archive

๊ถŒํ•œ: admin ๋˜๋Š” manager

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ์–‘์‹ ObjectId

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439011",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
    "archived": true,
    "permissionView": {
      "teacher": true,
      "student": false,
      "exceptions": []
    },
    "createdAt": "2024-03-01T09:00:00.000Z",
    "updatedAt": "2024-06-01T09:00:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
404 FORM_NOT_FOUND ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์–‘์‹ ๋ณต์›

๋ณด๊ด€๋œ ์–‘์‹์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. archived ํ•„๋“œ๋ฅผ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

PUT /api/forms/:_id/restore

๊ถŒํ•œ: admin ๋˜๋Š” manager

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ์–‘์‹ ObjectId

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439011",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
    "archived": false,
    "permissionView": {
      "teacher": true,
      "student": false,
      "exceptions": []
    },
    "createdAt": "2024-03-01T09:00:00.000Z",
    "updatedAt": "2024-06-15T09:00:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
404 FORM_NOT_FOUND ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์–‘์‹ ์‚ญ์ œ

์–‘์‹์„ ์˜๊ตฌ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

DELETE /api/forms/:_id

๊ถŒํ•œ: admin ๋˜๋Š” manager

์ฃผ์˜: ์ด ์ž‘์—…์€ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–‘์‹ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ์–‘์‹ ObjectId

์‘๋‹ต (200)

{}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
404 FORM_NOT_FOUND ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์—ด๋žŒ ๊ถŒํ•œ ์ˆ˜์ •

์–‘์‹์˜ ์—ญํ• ๋ณ„ ์—ด๋žŒ ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์˜ˆ์™ธ ๋ชฉ๋ก(exceptions)์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

PUT /api/forms/:_id/permission

๊ถŒํ•œ: admin ๋˜๋Š” manager

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ์–‘์‹ ObjectId

์š”์ฒญ ๋ณธ๋ฌธ

ํ•„๋“œ ํƒ€์ž… ํ•„์ˆ˜ ์„ค๋ช…
teacher boolean X ๊ต์‚ฌ ์—ด๋žŒ ํ—ˆ์šฉ ์—ฌ๋ถ€
student boolean X ํ•™์ƒ ์—ด๋žŒ ํ—ˆ์šฉ ์—ฌ๋ถ€

์š”์ฒญ ์˜ˆ์‹œ

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

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439011",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
    "archived": false,
    "permissionView": {
      "teacher": true,
      "student": true,
      "exceptions": []
    },
    "createdAt": "2024-03-01T09:00:00.000Z",
    "updatedAt": "2024-03-10T11:00:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
404 FORM_NOT_FOUND ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์—ด๋žŒ ๊ถŒํ•œ ์˜ˆ์™ธ ์ถ”๊ฐ€

ํŠน์ • ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์—ด๋žŒ ๊ถŒํ•œ ์˜ˆ์™ธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž์˜ ์˜ˆ์™ธ๋Š” ๋ฎ์–ด์”๋‹ˆ๋‹ค.

POST /api/forms/:_id/permission/exceptions

๊ถŒํ•œ: admin ๋˜๋Š” manager

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ์–‘์‹ ObjectId

์š”์ฒญ ๋ณธ๋ฌธ

ํ•„๋“œ ํƒ€์ž… ํ•„์ˆ˜ ์„ค๋ช…
user string O ์‚ฌ์šฉ์ž _id (ObjectId)
userId string O ์‚ฌ์šฉ์ž ID
userName string O ์‚ฌ์šฉ์ž ์ด๋ฆ„
isAllowed boolean O ์—ด๋žŒ ํ—ˆ์šฉ ์—ฌ๋ถ€ (true: ํ—ˆ์šฉ, false: ์ฐจ๋‹จ)

์š”์ฒญ ์˜ˆ์‹œ

{
  "user": "507f1f77bcf86cd799439099",
  "userId": "teacher01",
  "userName": "๊น€๊ต์‚ฌ",
  "isAllowed": false
}

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439011",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
    "archived": false,
    "permissionView": {
      "teacher": true,
      "student": false,
      "exceptions": [
        {
          "user": "507f1f77bcf86cd799439099",
          "userId": "teacher01",
          "userName": "๊น€๊ต์‚ฌ",
          "isAllowed": false
        }
      ]
    },
    "createdAt": "2024-03-01T09:00:00.000Z",
    "updatedAt": "2024-03-10T11:30:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
400 FIELD_REQUIRED({ํ•„๋“œ๋ช…}) ํ•„์ˆ˜ ํ•„๋“œ ๋ˆ„๋ฝ (user, userId, userName, isAllowed)
404 FORM_NOT_FOUND ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์—ด๋žŒ ๊ถŒํ•œ ์˜ˆ์™ธ ์‚ญ์ œ

ํŠน์ • ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์—ด๋žŒ ๊ถŒํ•œ ์˜ˆ์™ธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

DELETE /api/forms/:_id/permission/exceptions?userId={userId}

๊ถŒํ•œ: admin ๋˜๋Š” manager

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
_id string ์–‘์‹ ObjectId

์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ํ•„์ˆ˜ ์„ค๋ช…
userId string O ์‚ญ์ œํ•  ์˜ˆ์™ธ์˜ ์‚ฌ์šฉ์ž ID

์‘๋‹ต (200)

{
  "form": {
    "_id": "507f1f77bcf86cd799439011",
    "type": "syllabus",
    "title": "2024ํ•™๋…„๋„ ๊ฐ•์˜๊ณ„ํš์„œ",
    "archived": false,
    "permissionView": {
      "teacher": true,
      "student": false,
      "exceptions": []
    },
    "createdAt": "2024-03-01T09:00:00.000Z",
    "updatedAt": "2024-03-10T12:00:00.000Z"
  }
}

์—๋Ÿฌ ์‘๋‹ต

์ƒํƒœ ์ฝ”๋“œ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
400 FIELD_REQUIRED(userId) userId ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ˆ„๋ฝ
404 FORM_NOT_FOUND ์–‘์‹์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

ํ”„๋ก ํŠธ์—”๋“œ API ํ•จ์ˆ˜ (useAPIv2)

ํ•จ์ˆ˜๋ช… ๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช…
CForm POST /api/forms ์–‘์‹ ์ƒ์„ฑ
CCopyForm POST /api/forms/:_id/copy ์–‘์‹ ๋ณต์‚ฌ
RForms GET /api/forms ์–‘์‹ ๋ชฉ๋ก ์กฐํšŒ
RForm GET /api/forms/:_id ์–‘์‹ ์ƒ์„ธ ์กฐํšŒ
UForm PUT /api/forms/:_id ์–‘์‹ ์ˆ˜์ •
UArchiveForm PUT /api/forms/:_id/archive ์–‘์‹ ๋ณด๊ด€
URestoreForm PUT /api/forms/:_id/restore ์–‘์‹ ๋ณต์›
DForm DELETE /api/forms/:_id ์–‘์‹ ์‚ญ์ œ
UFormPermission PUT /api/forms/:_id/permission ์—ด๋žŒ ๊ถŒํ•œ ์ˆ˜์ •
CFormPermissionException POST /api/forms/:_id/permission/exceptions ์—ด๋žŒ ๊ถŒํ•œ ์˜ˆ์™ธ ์ถ”๊ฐ€
DFormPermissionException DELETE /api/forms/:_id/permission/exceptions ์—ด๋žŒ ๊ถŒํ•œ ์˜ˆ์™ธ ์‚ญ์ œ