Esempio n. 1
0
    def post(cls):
        """
        Creates a new store

        Endpoint: /store/

        Example Post Body:
        {
            "name": "Electronics Store",
            "tagline": "A really good electronics store",
            "app_id": "my_electronics_app",
            "app_secret": "my_electronics_secret"
        }

        Example Response:
        {
            "result": "ok",
            "store": {
                "created_at": "Sat, 05 Jan 2019 21:11:30 GMT",
                "deleted_at": null,
                "links": [
                    {
                        "href": "/store/241787390524523237447764623791517213747",
                        "rel": "self"
                    }
                ],
                "name": "Electronics Store",
                "store_id": "241787390524523237447764623791517213747",
                "tagline": "A really good electronics store",
                "updated_at": "Sat, 05 Jan 2019 21:11:30 GMT"
            }
        }
        """
        store_json = request.json
        error = best_match(Draft4Validator(schema).iter_errors(store_json))
        if error:
            return jsonify({"error": error.message}), 400

        store = Store.objects.filter(app_id=store_json.get("app_id")).first()
        if store:
            return jsonify({"error": "APP_ID_ALREADY_EXISTS"}), 400

        if store_json.get("credit_order_preference"):
            if store_json.get("credit_order_preference").lower() not in [
                    "credit", "gift-card"
            ]:
                return jsonify({"error": CREDIT_ORDER_PREFERENCE_ERROR}), 400

        store = Store(name=store_json.get("name"),
                      tagline=store_json.get("tagline"),
                      app_id=store_json.get("app_id"),
                      app_secret=store_json.get("app_secret")).save()

        if store_json.get("credit_order_preference"):
            store.credit_order_preference = store_json.get(
                "credit_order_preference")
            store.save()

        response = {"result": "ok", "store": store_obj(store)}
        return jsonify(response), 201
Esempio n. 2
0
    def get(cls):
        """
        returns info on the current store. Store is determined by app-id provided in header

        Endpoint = /store/

        Example response:
        {
            "result": "ok",
            "store": {
                "created_at": "Sat, 05 Jan 2019 22:21:54 GMT",
                "deleted_at": null,
                "links": [
                    {
                        "href": "/store/296194664480373992904103034340308325889",
                        "rel": "self"
                    }
                ],
                "name": "Food Store",
                "store_id": "296194664480373992904103034340308325889",
                "tagline": "Yummmmmm",
                "updated_at": "Sat, 05 Jan 2019 22:21:54 GMT"
            }
        }
        """
        store = Store.objects.filter(app_id=request.headers.get('APP-ID'),
                                     deleted_at=None).first()
        if store:
            response = {"result": "ok", "store": store_obj(store)}
            return jsonify(response), 200
Esempio n. 3
0
    def put(cls):
        store = Store.objects.filter(app_id=request.headers.get('APP-ID'),
                                     deleted_at=None).first()

        request_json = request.json
        name = request_json.get("name")
        tagline = request_json.get("tagline")
        credit_order_preference = request_json.get("credit_order_preference")

        if name is None and tagline is None and credit_order_preference is None:
            return jsonify({"error": "No fields to update were supplied"}), 400

        if name:
            store.name = name
        if tagline:
            store.tagline = tagline
        if credit_order_preference:
            if credit_order_preference.lower() not in ['credit', 'gift-card']:
                return jsonify({"error": CREDIT_ORDER_PREFERENCE_ERROR}), 400
            store.credit_order_preference = credit_order_preference
        store.updated_at = datetime.now()
        store.save()

        response = {"result": "ok", "store": store_obj(store)}
        return jsonify(response), 201
Esempio n. 4
0
 def post(self):
     store_json = request.json
     error = best_match(Draft4Validator(schema).iter_errors(store_json))
     if error:
         return jsonify({"error": error.message}), 400
     else:
         store = Store(external_id=str(uuid.uuid4()),
                       neighborhood=store_json.get('neighborhood'),
                       street_address=store_json.get('street_address'),
                       city=store_json.get('city'),
                       state=store_json.get('state'),
                       zip=store_json.get('zip'),
                       phone=store_json.get('phone')).save()
         response = {"result": "ok", "store": store_obj(store)}
         return jsonify(response), 201
Esempio n. 5
0
def pet_obj(pet, nostore=False):
    pet_obj = {
      "id":             pet.external_id,
      "name":           pet.name,
      "species":        pet.species,
      "breed":          pet.breed,
      "age":            pet.age,
      "price":          str(pet.price),
      "received_date":  str(pet.received_date.isoformat()[:19]) +"Z",
      "links": [
        { "rel": "self", "href": "/pets/" + pet.external_id }
      ]
    }
    if not nostore:
        pet_obj["store"] = store_obj(pet.store),
    return pet_obj
Esempio n. 6
0
 def put(self, store_id):
     store = Store.objects.filter(external_id=store_id, live=True).first()
     if not store:
         return jsonify({}), 404
     store_json = request.json
     error = best_match(Draft4Validator(schema).iter_errors(store_json))
     if error:
         return jsonify({"error": error.message}), 400
     else:
         store.neighborhood = store_json.get('neighborhood')
         store.street_address = store_json.get('street_address')
         store.city = store_json.get('city')
         store.state = store_json.get('state')
         store.zip = store_json.get('zip')
         store.phone = store_json.get('phone')
         store.save()
         response = {"result": "ok", "store": store_obj(store)}
         return jsonify(response), 200
Esempio n. 7
0
 def get(self, store_id):
     if store_id:
         store = Store.objects.filter(external_id=store_id,
                                      live=True).first()
         if store:
             if "pets" in request.url:
                 pets = Pet.objects.filter(store=store, live=True)
                 page = int(request.args.get('page', 1))
                 pets = pets.paginate(page=page,
                                      per_page=self.PETS_PER_PAGE)
                 response = {
                     "result":
                     "ok",
                     "links": [{
                         "href":
                         "/stores/%s/pets/?page=%s" % (store_id, page),
                         "rel":
                         "self"
                     }],
                     "store":
                     store_obj(store),
                     "pets":
                     pets_obj(pets, nostore=True)
                 }
                 if pets.has_prev:
                     response["links"].append({
                         "href":
                         "/stores/%s/pets/?page=%s" %
                         (store_id, pets.prev_num),
                         "rel":
                         "previous"
                     })
                 if pets.has_next:
                     response["links"].append({
                         "href":
                         "/stores/%s/pets/?page=%s" %
                         (store_id, pets.next_num),
                         "rel":
                         "next"
                     })
             else:
                 response = {"result": "ok", "store": store_obj(store)}
             return jsonify(response), 200
         else:
             return jsonify({}), 404
     else:
         stores = Store.objects.filter(live=True)
         page = int(request.args.get('page', 1))
         stores = stores.paginate(page=page, per_page=self.STORES_PER_PAGE)
         response = {
             "result": "ok",
             "links": [{
                 "href": "/stores/?page=%s" % page,
                 "rel": "self"
             }],
             "stores": stores_obj(stores)
         }
         if stores.has_prev:
             response["links"].append({
                 "href":
                 "/stores/?page=%s" % (stores.prev_num),
                 "rel":
                 "previous"
             })
         if stores.has_next:
             response["links"].append({
                 "href":
                 "/stores/?page=%s" % (stores.next_num),
                 "rel":
                 "next"
             })
         return jsonify(response), 200