가상의 코인 거래소를 제작한다. 유저는 회원가입, 자산 조회, 시세 조회, 구매 및 판매의 행위를 할 수 있다.
수업 시간에 배운 nodejs, mongodb를 활용하여 구현한다.
가격은 https://www.coingecko.com/en/api 의 api를 이용해서 가져온다. (https://www.coingecko.com/api/documentations/v3#/simple/get_simple_price)
거래가능한 코인의 종류는 btc, xrp, eth, bch 4가지로 제한한다.
성공 시 status 2xx, 클라이언트 에러로 실패 시 4x코드로 반환.
모든 response data는 json 형태.
authentication 필요한 코드의 경우, header의 Authorization에 Bearer: {Key} 를 포함해서 호출함.
에러가 날 경우, {error: '{reason}'}를 보내도록.
회원가입 시 유저에게 10,000$를 제공한다.
[:POST]
request
- name: string. 4-12글자. alphanumeric
- email: string. 100자 미만. email형식
- password: 8-16글자.
response
- {}
[:POST]
request
- password
response
- {key: {key}}
[:GET]
request
response
- ["btc", "xrp", "doge", "eth"]
본인의 자산을 조회한다. 없는 자산의 경우 노출시키지 않는다.
[:GET]
:auth_required
request
response
- {"usd": 3000, "btc": 1, "xrp": 2, "bch": 3, "eth": 4}
코인의 현재 시세를 보여준다. [:GET]
response 가격 조회결과를 리턴한다.
- {price: 30000 }
코인을 구매한다. 가격은 실시간으로 가져온 api의 가격을 따른다. [:POST] :auth_required
request
- quantity: number. 소수점 4번째 자리까지.
response 구매결과를 리턴한다.
- {price: 30000, quantity: 1}
코인을 판매한다. 가격은 실시간으로 가져온 api의 가격을 따른다. [:POST] :auth_required
request
- quantity: number. 소수점 4번째 자리까지.
response 구매결과를 리턴한다.
- {price: 30000, quantity: 1}
다음의 모델들이 구현되어 있어야 한다.
users, keys, coins, assets
express, mongoose, jsonwebtoken, coingecko-api, express-validator. node-fetch, axios, dotenv
- 코인 2종 추가.
- 로그인 시 jwt사용하기.(http://jwt.io)
- 코드샌드박스에 올려, url을 같이 제출.
- 코인 구매, 판매 시 전량구매/전량판매 기능 구현. (ex - xrp 전량 구매 => 사용가능한 usd를 다 사용하여 xrp구매)
- 구매 / 판매 로직 이용하되, quantity 대신 all: true를 request로 전달 ex) {all: true}
- https://www.npmjs.com/package/jsonwebtoken 이용
- key 제작 시 publicKey, secretKey를 database에 저장. 클라이언트에게 두값을 모두 전달. (로그인 시 publicKey, secretKey라는 키를 전달)
- 클라이언트는 매 요청 제작시마다, token을 생성한다고 가정. token의 exp = 현재시간. data에는 퍼블릭 키를 전달.
jwt.sign({pub: 'pubKey' }, 'secretKey', { expiresIn: 60 * 60 });
- 서버에서는 publicKey로 등록된 secretKey를 검색하여, 해당 토큰이 1) 유효한지 2) 시간이 유효한지를 검사하여 token의 valid를 체크.
12.3 까지. etl을 통해 제출.
폴더명, 파일명을 학번으로 하여 코드를 zip로 압축하여(node_modules제외) 제출.(ex - 2007-11186.zip)
하루 늦을 때마다 5% 감점. 6일까지 제출 받음.