Skip to content

Repository files navigation

서비스설명

Tools

기술스택
- Python
- Django
- Django REST Framework
- Crontab
- JWT
- AWS EC2
- AWS RDS (MySQL)
협업
- Git - Gitkraken
- Notion

REST API

login
  1. kakao access_token으로 자체 access, refresh token 발급

    • url

      POST /login/new-token/ 
    • request

      {
      "access_token": "sBpMzzmjm7rKz3vY1Bs_lIFHuZu5Xt6iiTcjaAopb1UAAAF69oCtMw"
      }
    • response

       {
      "refresh": "kpx3rJBWG7GdAGjm9LXlAvYLxB6TaP5HP5kWpT8AbjseEkqODJuIvGLLZJG6pu303TjXlJZjKejY4e6cKNrmU0nLzL84YD57mMXXS5Fpcb2ayLBYedTm6DK03TzxZyAHgYexojcPLZWuSz1T9yuh3xSffvSUPfufInNxuATn9SvdPx9AAopg4m3etJGKkjnZQbnCjyPE",
      "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjI4MjM4NTMwLCJqdGkiOiI5YmU0NWUzNWVlN2U0NTIzYWEyOGNmZDJiOGJjMGUzZSIsInVzZXJfaWQiOjMsInVzZXJuYW1lIjoiXHVjNzc0XHVjMjE4XHVjNWYwIiwidWlkIjoxODIzOTM3MzE3fQ.Y4wd-yKfm6z6YLijZX1e9twfQ3kt8nm0rL-LM81cJOQ"
      }
  2. refresh token으로 access token 재발급

    • url

      POST /login/token/refresh/
    • request

       {
      "user_id" : 1,
      "refresh_token" : "Ku88jzG2ZUR9UANJpVwtuGydhhYQsvs9k31Yd4h9FLSQ4NVzai3vaITbWQxXnbFzRc9GFRJDbCJ5IMwNWrdVmQP4pTTtc7nZoqewCD8rGjKgxWXZIQxy2ny1rxDCMJgzypDF2B2ZeMviVsphFONcrO5NzZgjq8OwpDDYZnm7vORbpQwTXbjKQifdgZNgwEkFMJuDbAI2"
      }
    • response

       {
      "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjI3NDY4NDg0LCJqdGkiOiI3NzQ1ZDdmZjkwZDc0YzZlOTI2NDBjMmY2ODRjZDc4NSIsInVzZXJfaWQiOjEsInVzZXJuYW1lIjoiXHVjNzc0XHVjMjE4XHVjNWYwIiwidWlkIjoxODIzOTM3MzE3fQ.LG9Zhe7ICf8O8FgocI75tAY1J77eOR244RMaTUOu8Ks"
      }
  3. 회원탈퇴

    • url

      DELETE /login/withdrawal/
    • request

    • response

       {
      "detail": "Successful withdrawal of members"
      }

shops

  1. studio 전체목록 조회(찜순)

    • url

      GET /shops/studios/?page=1&address=&like=
    • request

      ParameterTypeDescription
      pageintegerRequired. pagination
      addressstringRequired. 스튜디오 위치하는 구 필터링
      likebooleanRequired. 찜한 studio concept만 볼지(true,false)
    • response

      {
      "count": 3,
      "next": null,
      "previous": null,
      "results": [
      {
      "id": 3,
      "name": "studio2",
      "address": "gangdong",
      "minprice": 600000,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202926771_02_eJFAEkq.png",
      "like": true
      },
      {
      "id": 5,
      "name": "studio3",
      "address": "gwangjin",
      "minprice": 400000,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202947501_01_Os3pVhB.png",
      "like": false
      },
      {
      "id": 1,
      "name": "studio1",
      "address": "gangnam",
      "minprice": 20000,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202947501.png",
      "like": true
      }
      ]
      }
  2. beautyshop 전체목록 조회(찜순)

    • url

      GET /shops/beautyshops/?page=1&address=&like=
    • request

      ParameterTypeDescription
      pageintegerRequired. pagination
      addressstringRequired. 뷰티샵아 위치하는 구 필터링
      likebooleanRequired. 찜한 studio concept만 볼지(true,false)
    • response

      {
      "count": 3,
      "next": null,
      "previous": null,
      "results": [
      {
      "id": 6,
      "name": "beautyshop3",
      "address": "mapo",
      "minprice": 700000,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202939803_01_9qKsgcL.png",
      "like": false
      },
      {
      "id": 4,
      "name": "beautyshop2",
      "address": "gangdong",
      "minprice": 300000,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202947501_01_TIPlUXz.png",
      "like": false
      },
      {
      "id": 2,
      "name": "beautyshop1",
      "address": "gangnam",
      "minprice": 300000,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202926771_02.png",
      "like": true
      }
      ]
      }
  3. 특정 studio,beautyshop 조회(concept제외)

    • url

      GET /shops/1
    • request

    • response

      {
      "id": 1,
      "name": "studio1",
      "address_detail": "서울시 강남구 머시기 머시기",
      "minprice": 20000,
      "logo": "http://3.35.146.251:8000/media/bpp_U0iusS2.png",
      "profiles": [
      "http://3.35.146.251:8000/media/KakaoTalk_20210802_202947501.png",
      "http://3.35.146.251:8000/media/KakaoTalk_20210802_202947501_01.png",
      "http://3.35.146.251:8000/media/KakaoTalk_20210802_202939803.png"
      ],
      "like": true,
      "map": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202926771_01.png",
      "kakaourl": "https://pf.kakao.com/_xgCxjfj",
      "affiliates": [
      {
      "id": 4,
      "name": "beautyshop2",
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202947501_01_TIPlUXz.png"
      },
      {
      "id": 6,
      "name": "beautyshop3",
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202939803_01_9qKsgcL.png"
      }
      ]
      }
  4. 특정 studio,beautyshop의 concept 조회(등록순)

    • url

      GET /shops/1/concepts
    • request

    • response

       {
      "count": 2,
      "next": null,
      "previous": null,
      "results": [
      {
      "id": 1,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202926771_02_5800kq5.png"
      },
      {
      "id": 2,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202947501_uzHPVja.png"
      }
      ]
      }
  5. 특정 studio,beautyshop 찜 토글

    • url

      PUT /shops/1/like
    • request

       {
      "change_to_like": false
      }
    • response

       {
      "result": "shop like create"
      }
concept
  1. studio concept 전체 조회(찜순) : 컨셉북

    • url

      GET /concepts/studios/?head_count=&gender=&background=&prop=&dress=&page=&like= 
    • request

      ParameterTypeDescription
      head_countintegerRequired. 1,2,3
      genderstringRequired. man,woman
      backgroundstringRequired. white,black,chromatic,etc,outside
      propstringRequired. health,mini,etc
      dressstringRequired. athleisure,swimsuit,underwear,etc
      pagestringRequired. 조회할 페이지(1,2,3...)
      likebooleanRequired. 찜한 studio concept만 볼지(true,false)
    • response

      {
      "count": 3,
      "next": null,
      "previous": null,
      "results": [
      {
      "id": 2,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202947501_uzHPVja.png",
      "shop": {
      "id": 1,
      "name": "studio1"
      },
      "like": false
      },
      {
      "id": 1,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202926771_02_5800kq5.png",
      "shop": {
      "id": 1,
      "name": "studio1"
      },
      "like": true
      },
      {
      "id": 3,
      "profile": "http://3.35.146.251:8000/media/KakaoTalk_20210802_202926771.png",
      "shop": {
      "id": 3,
      "name": "studio2"
      },
      "like": false
      }
      ]
      }
  2. 특정 studio concept 찜 토글

    • url

      PUT /concepts/studios/1/like
    • request

       {
      "change_to_like": true
      }
    • response

       {
      "result": "shop like create"
      }
reservation
  1. 샵 문의중/확정 전체조회

    • url

      GET /reservations?inquiry=
    • request

      ParameterTypeDescription
      inquirybooleanRequired. 문의중 조회면 true, 확정&만료 조회면 false
    • response

      {
      "remaining_days": 16,
      "results": [
      {
      "id": 3,
      "state": 0,
      "reserved_date": null,
      "shop": {
      "id": 2,
      "shop_type": 1,
      "name": "beautyshop1",
      "logo": "http://3.35.146.251:8000/media/bpp_r5ZQYqs.png"
      }
      }
      ]
      }
  2. 샵 문의중 추가

    • url

      POST /reservations/shops/:shop_id
    • request

    • response

      {
      "result": "reservation create"
      }
  3. 샵 예약확정 날짜받기

    • url

      PATCH /reservations/:reservation_id
    • request

      {
      "reserved_date": "2021-05-15"
      }
    • response

      {
      "detail": "reserved_date input success"
      }
  4. 샵 문의중 취소

    • url

      DELETE /reservations/:reservation_id
    • request

    • response

      {
      "detail": "reservation delete success"
      }

디렉토리 구조

.
├── Dockerfile
├── README.md
├── concept
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── login
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── manage.py
├── requirements.txt
├── reservation
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── cron.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── secrets.json
└── shop
├── __init__.py
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── serializers.py
├── tests.py
├── urls.py
└── views.py

About

DRF를 통한 REST API 설계

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages