liner server api제작 - 과제설명

unow30·2021년 3월 13일
0

liner

목록 보기
1/8

라이너 하이라이트 관련 API 개발

  • 라이너 핵심 기능중 하나인 하이라이트 기능을 간소화하여 구현합니다.
  • 관련 DB 설계를 포함하여 API 서버를 개발합니다.
    • 되도록이면 ORM을 사용하시길 권장드립니다.
  • 개발하신 코드를 github 또는 유사한 서비스를 활용하여 공유해주세요.
  • README.md 에 DB 설계에 대한 논리적 근거와 결과물을 작성해주세요.

API 기능 명세

  • 프로덕션 서비스에 필요한 디테일은 제외했습니다.
  • (의무사항 아님) 이에 여유가 되신다면 이곳에 적힌 명세보다 더 우수하게 개발하셔도 됩니다.
    • 예를 들면,
      • 유저 가입, 로그인
      • offset, limit 설정
      • authentication(JWT, Cookie ..)
      • 등등
  • 입출력 예시에 명세된 key값들은 모두 포함하셔야 됩니다.
    • 명세에서 생략 가능이라고 되어있다면 포함하지 않으셔도 됩니다.
    • 새로운 Key 값들을 추가하시는 것은 허용됩니다.
    • 모든 입출력의 data type은 개발 편의에 맞게 선택하시면 됩니다.
  • 모든 입출력은 JSON 형태로 주고받습니다.
  • API의 HTTP method는 자유롭게 선택하시면 됩니다.

평가 기준은 다음과 같습니다.

  1. 문제 이해능력 25%
  2. 코드의 정확성 25%
  3. 코드의 효율성 25%
  4. 코드의 간결성 25%

중요 고려사항

  • 하이라이트 색의 테마가 존재합니다.
  • 테마는 아래와 같이 세 가지가 정해져 있다고 가정합니다.

테마1

  • 1번 색: #ffff8d
  • 2번 색: #a5f2e9
  • 3번 색: #ffd5c8

테마2

  • 1번 색: #f6f0aa
  • 2번 색: #d3edd1
  • 3번 색: #f9d6c1

테마3

  • 1번 색: #f4ff40
  • 2번 색: #8affd7
  • 3번 색: #ffc477

예를 들어, 어떤 한 유저가 자신의 테마를 1번 테마에서 2번 테마로 바꾸게 되면, 기존에 #ffff8d로 저장된 하이라이트가 #f6f0aa로 바뀌어서 클라이언트에게 제공됩니다. 만약 여기서 유저가 자신의 테마를 3번 테마로 변경하면, #f6f0aa에서 #f4ff40로 바뀌게 하이라이트의 색이 변경되어 클라이언트에게 제공됩니다.

즉 색과 매칭되는 색깔의 값이 유저가 설정한 테마에 의해 바뀌게 됩니다.

이 점 유의하여 개발해주세요.

1. 하이라이트 저장(Create)

  • 유저 ID, pageUrl, colorHex, text 값을 필수로 받습니다
  • 받은 정보를 기반으로 하이라이트 정보를 저장합니다.
  • 페이지 URL을 기반으로 페이지 정보를 DB에 저장한 뒤 응답에 page의 ID 값을 넘깁니다.
  • 출력에 저장된 하이라이트 ID를 반환합니다.

입력 예시

{
  "userId": 12312,
  "pageUrl": "www.getliner.com",
  "colorHex": "#fffff8",
  "text": "라이너 사전과제 입니다."
}    

출력 예시

{
  "highlightId": 123,  
  "userId": 12312,
  "pageId": 123,
  "colorHex": "#fffff8",
  "text": "라이너 사전과제 입니다."
}

2. 하이라이트 수정(Update)

  • 하이라이트 ID와 유저 ID를 필수로 받습니다
  • text 혹은 colorHex 둘 중에 하나는 값이 유효해야 합니다.
    • 둘 다 받는 것도 고려합니다.
    • 둘 중에 하나만 있는 경우도 고려합니다.
  • 입력 받은 정보를 바탕으로 하이라이트를 저장합니다.

입력 예시

{
  "highlightId": 123,
  "userId": 12312,
  "colorHex": "#fffff8",
  "text": "변경된 텍스트입니다"
}    

출력 예시

{
  "highlightId": 123,  
  "userId": 12312,
  "pageId": 123,
  "colorHex": "#fffff8",
  "text": "변경된 텍스트입니다"
}

3. 페이지 내 하이라이트 정보 가져오기(Read)

  • 유저 ID 값을 필수로 받습니다
  • pageID 혹은 pageUrl 둘 중에 하나는 유효한 값을 갖습니다.
    • 두 값 중 하나만 있는 경우도 고려합니다.
    • 두 값 모두 들어오는 경우 pageId를 우선하여 사용합니다.
  • 하이라이트의 정렬은 수정된 시간의 역순입니다.
  • 수정된 시간이 없는 경우 생성 시간을 대신 사용합니다.

입력 예시

{
  "userId": 12312,
  "pageUrl": "www.getliner.com"
}    

출력 예시

[
  {
    "highlightId": 123,  
    "userId": 12312,
    "pageId": 123,
    "colorHex": "#fffff8",
    "text": "라이너 사전과제 입니다."
  }
  ...
]

4. 유저가 하이라이트한 정보와 페이지 가져오기(Read)

  • 유저 ID를 필수로 받습니다
  • 페이지의 정렬은 마지막 하이라이트가 마지막으로 저장된 시간의 역순으로 합니다.
  • 하이라이트 정렬은 3번과 같습니다.

입력 예시

{
  "userId": 12312,
}    

출력 예시

[
  {
     "pageId": 123,
     "pageUrl": "www.getliner.com"
     "highlights": [
       {
         "highlightId": 123,  
         "userId": 12312,
         "pageId": 123,
         "colorHex": "#fffff8",
         "text": "라이너 사전과제 입니다."
       },
       ...
     ]
  },
  ...
]

5. 하이라이트 삭제(Delete)

  • 하이라이트 ID, 유저 ID를 필수로 받습니다
  • 삭제된 하이라이트는 모든 조회 관련 API에서 제외되어 반환됩니다.

입력 예시

{
  "userId": 12312,
  "highlightId": 12312,
}    

출력 예시

200 OK

6. 유저의 하이라이트 테마 변경(Update)

  • 유저 ID를 필수로 받습니다
  • 테마 1, 2, 3 중에 하나로 테마를 변경합니다.
  • 테마가 변경된 이후에는 하이라이트 정보 요청의 응답이 모두 변경된 테마의 색으로 바뀌어야 합니다.

입력 예시

{
  "userId": 12312,
  "themeId": 2,
}    

출력 예시

200 OK

0개의 댓글