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
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
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
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
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
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
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