Code Monkey home page Code Monkey logo

eliverd-api's Introduction

Eliverd-API

cc Total alerts Language grade: Python lines
Conventional Commits

Run ./setup.sh to install dependencies. It takes around 20~30 minutes.

This code will try to download and build GEOS and GDAL. Setup script supports macOS and Linux.

eliverd-api's People

Contributors

dependabot[bot] avatar startergate avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

eliverd-api's Issues

재고 등록, 수정, 폐기 엔드포인트 통합

POST /store/{id}/stock으로 통합됩니다.
신규 상품일 시에는

{
        "ian": "string",
        "name": "string",
        "manufacturer": "string",
        "amount": 0
}

기존에 존재하는 상품의 경우에는

{
        "ian": "string",
        "amount": 0
}

을 사용합니다.

amount에는 재고의 변화량을 적습니다.
6월 17일 이전까지 완료될 예정입니다.

배달 관련 기능 강화

POST /purchase/{oid}/deliver/
DELETE /purchase/{oid}/deliver/

2개의 엔드포인트가 추가될 예정입니다.

GET /store/:id/stocks 응답의 product 부분 문제

현재 상점의 재고 목록을 불러오는 GET /store/:id/stocks가 상점에 속한 Product FK도 같이 응답하고 있습니다.
그런데 Product 엔티티에 대한 데이터를 받을 수 있는 것이 바코드(ian)을 통한 GET /product/:ian밖에 존재하지 않아 FK만 받을 경우 애플리케이션 내에서 재고를 완전히 불러올 수 없습니다.

다음 두 가지 방법 중에서 선택해서 해결해야 할 것 같습니다. 단, 더 좋은 방법이 있다면 그렇게 해도 좋습니다.

    1. Product PK로 데이터를 받을 수 있는 엔드포인트 하나 더 구현하기(ex. GET /product/:id)
    1. GET /store/:id/stocks 응답 포맷에서 product 필드의 value를 ian으로 고치기

사업자 데이터 추출 형태 수정하기

현재 사업장과 관련한 API의 모든 응답에서 사업자(registerer)를 PK의 리스트 형태로 응답하는 것으로 구현되어 있는데 이를 사업자 데이터 자체(튜플)로 반환했으면 좋겠습니다. 수정해야 할 부분은 아래와 같습니다.

  • POST /store의 응답 JSON 포맷에서 registerers의 value를 사업자(User) 리스트로 변환
  • GET /store/:id의 응답 JSON 포맷에서 registerer의 value를 사업자(User) 리스트로 변환

토큰이 있는지 확인하는 요청을 만들면 어떨까요?

현재 Eliverd 인증과 관련해서 토큰을 생성하는 POST /account/session 요청과 토큰을 삭제하는 DELETE /account/session 요청 밖에 없는데 이러한 경우 애플리케이션 내에서 토큰이 만료되었는지 확인할 로직이 존재하지 않을 것 같습니다.

그래서 Auth 관련 헤더에 토큰을 보내서 토큰이 만료된 여부를 알리는 응답을 하는 GET 요청을 하나 만들었으면 좋겠는데 어떻게 생각하시나요?

상품(Product) 카테고리 타입 정하기

#41 에 이어서 서버 DB 내부에 카테고리 타입을 정의하기 위해서 소비자 입장에서 대표적으로 어떤 카테고리를 둘지 정해야 합니다. 아래 예시와 같이 타입이 정해지면 close해도 되는 이슈입니다.

타입 예시

음식 생활용품 의류 음반

=> 내부 스키마에서 enum('grocery', 'households', 'clothes', 'book', 'discography')로 정의

API 인증 기능 점검 요청

오늘 애플리케이션 개발을 재개하는 중에 POST /account/session 요청으로 400 에러가 나고 있습니다. 확인 결과 DB에 유저 정보는 저장되어 있고 내부 로직 오류인 것으로 추정됩니다. 애플리케이션 대부분의 기능이 인증이 되어야만 동작하므로 조속히 확인해주셨으면 좋겠습니다.

인증 완료 후 사업장 정보를 불러오도록 하기

로그인을 하여 사용자 인증을 거치고 사업장 재고 관리 페이지로 넘어가는 흐름 중간에 추가해야 할 과정이 있어서 이렇게 Issue를 올렸습니다.

현재 로그인 과정에서 POST /account/session 요청을 받아 생성한 세션으로 GET /account/session 요청을 하여 사업자(사용자) 정보만(user_id, nickname 등...)를 얻어서 메인 페이지로 Navigate됩니다.

그런데 GET /store/:storeId/stocks 요청을 해서 재고 목록을 불러올 때 사업장에 대한 정보를 알 수 없습니다. 제 생각엔 GET /account/session에 로그인된 유저가 registerer로 들어간 모든 Store 정보도 같이 응답하도록 하는 것이 좋을 것 같습니다.

인증이 완료된 후에 애플리케이션 내에서 사업장(Store) 정보만 알면 되므로 더 좋은 방법이 있다면 여기 코멘트를 남겨도 좋을 것 같습니다! 없다면 위 방법대로 진행해야 할 것 같습니다.

배포 자동화

특정 트리거에 반응하는 배포 자동화 시스템 만들기

Eliverd 소비자용 애플리케이션에 필요한 API 기능 정의

Eliverd 소비자용 애플리케이션을 구현하는 데 서버 API를 추가적으로 구현해야 할 부분이 있을 것입니다. 다음은 소비자용 애플리케이션에서 이루어지는 기능을 정의한 것입니다. 이 이슈에서 아래 기능에 따라 API를 어떻게 구성해야 할지 코멘트를 남겨주세요😶

  • 상품(Product)을 카테고리에 따라 검색함 => 지도에 재고와 그에 따른 '남은 재고 수', '상점'을 볼 수 있음
  • 상품을 주문하고 결제함(장바구니[로컬로 처리], 주문 폼 작성[+ 배송 주소 지정], 결제 요청 등)
  • 주문 내역을 조회함
  • 설정 페이지에서 카테고리 필터를 수정함
  • 애플리케이션 하단을 스크롤하여 상품 소개 Bottom Sheet를 봄
  • 검색 후 지도의 마커를 클릭하여 상품 상세 소개를 조회함(상점의 간략한 정보, 카테고리로 필터링된 재고 목록)
  • 설정 페이지에서 사용자 정보를 수정/탈퇴함

사업장 등록 관련 협의할 사항

사업장 등록 로직과 관련해서 협의할 사항이 있습니다.

현재 애플리케이션 내에서 사업장은 Store 엔티티로 다음과 같은 필드가 있습니다.

  • 이름(사업장 이름, UQ여야 할 것으로 예상)
  • 설명(사업장 설명)
  • 사업자(사업장 등록자)
  • 사업자등록번호(UQ여야 할 것으로 예상)
  • 위치(위도+경도)

첫번째로, 사업장 등록 시 파라미터에 대해서 도메인 충족 여부 및 중복 검사 등으로 검증하는 과정이 필요합니다. 이는 #16 에서 한 과정을 반복하면 될 것 같습니다.

그런데 추가로 현재 사업자를 여러 명 등록하는 조건을 구현하는 데 까다로운 부분이 있어서 아래의 두 가지 경우 중 하나를 선택해서 해야 합니다.

  • 애플리케이션에서 (is_seller가 true인) 전체 사업장 유저를 검색해서 찾는 기능을 추가하여 등록하도록 함

예상 기능: 사업자가 다른 사업자 검색 => 사업장 등록 시 선택해서 등록
사업장 유저를 검색할 수 있는 요청이 필요함, 구현이 다소 까다로울 것으로 예상

  • 검색 기능을 빼고 간단하게 프로토타입 상으로만 사업자를 한 명만 등록하게 제한하여(등록 요청 시 사업자를 로그인한 유저 정보로 넣어서) 사업자가 수동으로 등록하게 함

이 경우, 구현이 간단하지만 사업자를 여러 명으로 설계한 의미가 없어짐

제조사 엔티티 관련 수정할 사항

#23 에서 Product 튜플 데이터 자체를 반환하는 것으로 했는데 이때 manufacturer 필드의 value가 FK로 되어 있습니다.
이것 또한 현재 GET /product/manufacturer/search/:name으로만 튜플 데이터를 불러올 수 있어서 제조사를 완전히 불러올 수 없습니다.

그래서 아래 중에서 선택해서 수정해야 할 것 같습니다.

  • GET /store/:id/stocks에서 manufacturer 또한 튜플 데이터 자체를 반환하도록 하기
  • PK(Manufacturer 릴레이션의 id)로 데이터 불러올 수 있도록 하기(ex. GET /product/manufacturer/:id)
  • GET /store/:id/stocks 응답 포맷에서 manufacturer 필드의 value를 제조사의 이름(name)으로 수정하기

회원가입 & 로그인 파라미터 검증 및 에러 헨들링 로직

아래 요청에 대해서 파라미터 검증과 에러 헨들링과 관련해서 협의해야 할 사항이 있습니다.

  • POST /account/user => 사용자 회원가입
  • POST /account/session => 사용자 로그인(세션 생성)

애플리케이션 View 단에서 사용자가 회원가입이나 로그인에 실패했을 때 현재 아래와 같이 에러 메시지를 띄우게 할 예정입니다.

Simulator Screen Shot - iPhone 11 Pro - 2020-06-18 at 08 29 46
Simulator Screen Shot - iPhone 11 Pro - 2020-06-17 at 20 55 20

파라미터 검증과 관련해서는 애플리케이션 내(프론트엔드 쪽)에서 잘못된 데이터를 보내지 않도록 할 수도 있고 서버에서 응답할 때 어느 파라미터가 잘못되었는지 응답을 보내는 두 가지 방법이 있는데 어느 쪽으로 하면 좋을지 코멘트를 남겨주세요!

만약 서버 단에서 파라미터 검증과 에러 헨들링을 한다면 로그인을 할 때 에러 응답이 몇 가지 정도 있을지도 같이 코멘트 남겼으면 좋겠습니다.

상품(Product) 카테고리 정보 추가하기

앞으로 소비자용 Eliverd 애플리케이션과 통합하기 위해서 Product 엔티티에 카테고리 칼럼을 추가하고 이에 접근하는 모든 API 엔드포인트를 알맞게 수정해야 합니다. 아래는 해당하는 엔드포인트입니다.

  • GET /store/:id/stocks
  • POST /store/:id/stock(재고 추가 시에)
  • GET /product/:ian

주문 상세 조회

카카오페이 order 정보까지 포함한 모든 내역을 가져옵니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.