이 레파지토리는 원티드 프리온보딩 프론트엔드 과정 선발 과제 안내 및 과제 간 사용하기 위한 API를 제공하기 위해 만들어졌습니다.
- 본 과제는 프리온보딩 프론트엔드 코스 선발 과정에서 최소한의 수준을 파악하기 위한 용도입니다.
- 제시된 과제의 수행 개수와 작성된 코드의 퀄리티를 기준으로 평가가 이루어집니다.
- 이 레파지토리에서 제공된 API를 활용해서 선발 과제를 진행하게 됩니다.
- API의 실행 및 사용법은 API 챕터를 참고해주세요
- 과제의 소스코드는 본인의 GitHub 레파지토리에 Public으로 올려주세요
- 레파지토리 이름은
wanted-pre-onboarding-frontend
로 생성해주세요 - 제출한 링크가 잘못되었거나, 링크를 통해서 레파지토리에 접근할 수 없는 경우 과제를 확인할 수 없으니 주의해주세요
- 과제 제출은 참가 신청시 수행한 과제의 레파지토리 주소를 제출해주세요
-
진행 간 문의사항은 이 레파지토리의 Issue로 등록해주세요
-
Create React App을 이용해 과제를 구현해주세요
-
함수 컴포넌트를 이용해서 진행해주세요
-
UI는 지원자 개인이 생각했을 때 자연스러운 형태로 구현해주세요, UI는 평가에 영향을 미치지 않습니다.
-
README.md 작성은 필수입니다. 아래의 사항은 반드시 포함되도록 해주세요
- 프로젝트의 실행 방법
- 데모 영상
- 데모 영상은 배포 링크로 대체 가능하며, 배포 시 가산점이 부여됩니다.
-
기능구현에 직접적으로 연관된 라이브러리 사용은 허용되지 않습니다.(React-Query 등)
-
사용가능한 라이브러리 목록은 아래와 같습니다.
- React Router
- HTTP Client 라이브러리(Axios 등)
- 스타일링 관련 라이브러리(Sass, Styled Components, Emotion 등)
- 아이콘 등 UI 관련 라이브러리(Font-Awesome, React-Icons, Bootstrap 등)
- 기능과 직접적인 연관이 없는 설정관련 라이브러리(craco, dotenv 등)
/
경로에 로그인 / 회원가입 기능을 개발해주세요- 페이지 안에 이메일 입력창, 비밀번호 입력창, 제출 버튼이 포함된 형태로 구성해주세요
- 로그인, 회원가입을 별도의 경로로 분리해도 무방합니다.
- 이메일과 비밀번호의 유효성 검사기능을 구현해주세요
- 이메일 조건:
@
포함 - 비밀번호 조건: 8자 이상
- 입력된 이메일과 비밀번호가 위 조건을 만족할 때만 버튼이 활성화 되도록 해주세요
- 보안 상 실제 사용하고 계신 이메일과 패스워드말고 테스트용 이메일, 패스워드 사용을 권장드립니다.
- 이메일 조건:
- 로그인 API를 호출하고, 올바른 응답을 받았을 때
/todo
경로로 이동해주세요- 로그인 API는 로그인이 성공했을 시 Response Body에 JWT를 포함해서 응답합니다.
- 응답받은 JWT는 로컬 스토리지에 저장해주세요
- 로그인 여부에 따른 리다이렉트 처리를 구현해주세요
- 로컬 스토리지에 토큰이 있는 상태로
/
페이지에 접속한다면/todo
경로로 리다이렉트 시켜주세요 - 로컬 스토리지에 토큰이 없는 상태로
/todo
페이지에 접속한다면/
경로로 리다이렉트 시켜주세요
- 로컬 스토리지에 토큰이 있는 상태로
/todo
경로에 접속하면 투두 리스트의 목록을 볼 수 있도록 해주세요- 리스트 페이지에는 투두 리스트의 내용과 완료 여부가 표시되어야 합니다.
- 리스트 페이지에는 입력창과 추가 버튼이 있고, 추가 버튼을 누르면 입력창의 내용이 새로운 투두 리스트로 추가되도록 해주세요
- 투두 리스트의 수정, 삭제 기능을 구현해주세요
- 투두 리스트의 개별 아이템 우측에 수정버튼이 존재하고 해당 버튼을 누르면 수정모드가 활성화되고 투두 리스트의 내용을 수정할 수 있도록 해주세요
- 수정모드에서는 개별 아이템의 우측에 제출버튼과 취소버튼이 표시되며 해당 버튼을 통해서 수정 내용을 제출하거나 수정을 취소할 수 있도록 해주세요
- 투두 리스트의 개별 아이템 우측에 삭제버튼이 존재하고 해당 버튼을 누르면 투두 리스트가 삭제되도록 해주세요
- URL:
/auth/signup
- Method:
POST
- Headers:
- Content-Type:
application/json
- Content-Type:
- Body:
- email: string
- password: string
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InRlc3RAZ21haWwuY29tIiwic3ViIjo0LCJpYXQiOjE2NTk5MDQyMTUsImV4cCI6MTY2MDUwOTAxNX0.DyUCCsIGxIl8i_sGFCa3uQcyEDb9dChjbl40h3JWJNc"
}
- URL:
/auth/signin
- Method:
POST
- Headers:
- Content-Type:
application/json
- Content-Type:
- Body:
- email: string
- password: string
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InRlc3RAZ21haWwuY29tIiwic3ViIjo0LCJpYXQiOjE2NTk5MDQyMTUsImV4cCI6MTY2MDUwOTAxNX0.DyUCCsIGxIl8i_sGFCa3uQcyEDb9dChjbl40h3JWJNc"
}
- URL:
/todos
- Method:
POST
- Headers:
- Authorization:
Bearer access_token
- Content-Type:
application/json
- Authorization:
- Body:
- todo: string
- status: 201 Created
{
"id": 1,
"todo": "과제하기",
"isCompleted": false
"userId": 1,
}
- URL:
/todos
- Method:
GET
- Headers:
- Authorization:
Bearer access_token
- Authorization:
- status: 200 OK
[
{
"id": 1,
"todo": "todo2",
"isCompleted": false,
"userId": 1
},
{
"id": 2,
"todo": "todo3",
"isCompleted": false,
"userId": 1
}
]
- URL:
/todos/:id
- Method:
PUT
- Headers:
- Authorization:
Bearer access_token
- Content-Type:
application/json
- Authorization:
- Body:
- todo: string
- isCompleted: boolean
- status: 200 OK
{
"id": 1,
"todo": "Hello World",
"isCompleted": true,
"userId": 2
}
- URL:
/todos/:id
- Method:
DELETE
- Headers:
- Authorization:
Bearer access_token
- Authorization:
- status: 204 No Content
- body: 없음
- 배포된 API에 문제가 있는 경우 활용할 수 있는 로컬 서버 구동법입니다.
- 로컬 서버는 sqlite에 의존성이 있습니다.
$ npm install
$ npm start
- 위 순서대로 실행하면 localhost:8000 포트에 서버가 실행됩니다.
- 서버를 실행하면 db.sqlite 파일이 생성되며 해당 파일을 삭제 시 기존의 데이터는 초기화 됩니다.
- 그 외 스펙은 배포된 API와 동일합니다.