- 과제 출제 기업 정보
- 기업명 : 프레시코드
- 프레시코드
- wanted 채용공고 링크
📎 배포주소 |http://ec2-3-37-216-214.ap-northeast-2.compute.amazonaws.com:8000
이름 | github | 담당 기능 |
---|---|---|
신재민 | shinjam | 테스트 코드 |
신우주 | shinwooju | 상품 CRUD |
최혜림 | rimi0108 | 로그인 |
강성묵 | miranaky | 로그인 |
김민규 | SkyStar-K | 상품 CRUD |
- Swagger나 Postman을 이용하여 API 테스트 가능하도록 구현
- Swagger 대신 Postman 이용시 API 목록을 Export하여 함께 제출해 주세요
- READ.ME 작성
- 프로젝트 빌드, 자세한 실행 방법 명시
- 구현 방법과 이유에 대한 간략한 설명
- 완료된 시스템이 배포된 서버의 주소
- Swagger를 통한 API 테스트할때 필요한 상세 방법
- 해당 과제를 진행하면서 회고 내용 블로그 포스팅
- Swagger나 Postman을 이용하여 API 테스트 가능하도록 구현
- Swagger 대신 Postman 이용시 API 목록을 Export하여 함께 제출해 주세요
- READ.ME 작성
- 프로젝트 빌드, 자세한 실행 방법 명시
- 구현 방법과 이유에 대한 간략한 설명
- 완료된 시스템이 배포된 서버의 주소
- Swagger를 통한 API 테스트할때 필요한 상세 방법
- 해당 과제를 진행하면서 회고 내용 블로그 포스팅
- 사용자 인증을 통해 상품 관리를 할 수 있어야 합니다.
-
구현
- JWT 인증 방식을 이용합니다.
- 서비스 실행시 데이터베이스 또는 In Memory 상에 유저를 미리 등록해주세요.
- Request시 Header에 Authorization 키를 체크합니다.
- Authorization 키의 값이 없거나 인증 실패시 적절한 Error Handling을 해주세요.
- 상품 추가/수정/삭제는 admin 권한을 가진 사용자만 이용할 수 있습니다.
-
시용자 인증 / 인가
사전 등록된 사용자는 총 2명입니다. - 사용자 1번 EMAIL: user@freshcode.me PASSWORD: user ROLE : [user] - 사용자 2번 EMAIL: admin@freshcode.me PASSWORD: admin ROLE : [admin]
-
- 아래 상품 JSON 구조를 이용하여 데이터베이스 및 API를 개발해주세요.
-
구현
- 서비스 실행시 데이터베이스 또는 In Memory 상에 상품 최소한 5개를 미리 생성해주세요.
- 상품 조회는 하나 또는 전체목록을 조회할 수 있으며, 전체목록은 페이징 기능이 있습니다.
- 한 페이지 당 아이템 수는 5개 입니다.
- 사용자는 상품 조회만 가능합니다.
- 관리자는 상품 추가/수정/삭제를 할 수 있습니다.
- 상품 관리 API 개발시 적절한 Error Handling을 해주세요.
-
상품 구조
// JSON DATA Structure { menus: [ { id: 245, category: "SALAD", name: "깔라마리 달래 샐러드", description: "해산물 샐러드", isSold: false, badge: "NEW", items: [ { id: 1, menuId: 245, name: "미디움", size: "M", price: 8000, isSold: false, }, ], tags: [ { id: 1, menuId: 245, type: "vegetarianism", name: "페스코베지테리언" } ], } ] }
-
-
users
- admin role과 user role의 차별화를 위해 user 테이블에 role 필드를 만들었습니다.
- UserRole class를 만들어 admin과 user 중 choice 할 수 있게 만들었습니다.
- default 값은 user로 주었습니다.
- IsAdmin permission을 생성하여 user role이 admin일 경우만 user list를 조회할 수 있게 만들었습니다.
- 로그인시 발급받은 token을 조회하여 permission을 구분 할 수 있게 하였습니다.
- admin role과 user role의 차별화를 위해 user 테이블에 role 필드를 만들었습니다.
-
products
- admin role 인 사람은 상품을 생성,수정,삭제 할 수 있습니다.
- ModelViewSet으로 Create, Read, Update, Delete를 사용할 수 있게 만들었습니다.
- 상품 생성시 메뉴,아이템,테그를 동시에 생성 할 수 있습니다.
- permission을 생성하여 admin은 CRUD, user는 Read만 사용할 수 있게 만들었습니다.
- admin role 인 사람은 상품을 생성,수정,삭제 할 수 있습니다.
- 프로젝트 클론
- git clone https://github.com/wanted-team6/Freshcode.git . (현재 경로에 repository 복사)
- Local Server 실행
docker-compose -f docker/compose/local.yml up
- endpoint 호출 및 실행
- Postman Document 접속
- api 및 endpoint 확인
- 우측 상단의 Run in Postman 클릭
- 원하는 자신의 workspace을 골라 api test 진행
.
├── Makefile
├── README.md
├── apps
│ ├── __init__.py
│ ├── config
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── local.py
│ │ ├── production.py
│ │ └── test.py
│ ├── core
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── authentications.py
│ │ ├── management
│ │ ├── migrations
│ │ └── serializers.py
│ ├── products
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── serializers.py
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── urls.py
│ ├── users
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── permissions.py
│ │ ├── serializers.py
│ │ ├── tests
│ │ ├── urls.py
│ │ └── views.py
│ └── wsgi.py
├── conftest.py
├── docker
│ ├── compose
│ │ ├── local.yml
│ │ └── prod.yml
│ └── images
│ ├── local
│ └── prod
├── docs
│ ├── api
│ │ ├── authentication.md
│ │ └── users.md
│ └── index.md
├── manage.py
├── mkdocs.yml
├── poetry.lock
├── pyproject.toml
├── pytest.ini
├── setup.cfg
├── test
│ ├── __init__.py
│ ├── factories
│ │ ├── __init__.py
│ │ └── users.py
│ └── schema
│ ├── __init__.py
│ └── users.py
└── wait_for_postgres.py
이 프로젝트는 원티드x위코드 백엔드 프리온보딩 과제 일환으로 프레시코드에서 출제한 과제를 기반으로 만들었습니다.