summaryrefslogtreecommitdiff
path: root/iridescence/src/api/dichroism.js
diff options
context:
space:
mode:
Diffstat (limited to 'iridescence/src/api/dichroism.js')
-rw-r--r--iridescence/src/api/dichroism.js122
1 files changed, 42 insertions, 80 deletions
diff --git a/iridescence/src/api/dichroism.js b/iridescence/src/api/dichroism.js
index 7821eb3..e3b08a8 100644
--- a/iridescence/src/api/dichroism.js
+++ b/iridescence/src/api/dichroism.js
@@ -1,93 +1,55 @@
+import Product from "../models/product";
+import PhotoSet from "../models/photo_set";
+import ApiError from "./error";
+
export default class Dichroism {
- constructor() {
- this.products = [
- {
- id: 1,
- name: "Beach Box",
- quantity: 0,
- cents: 1100,
- imgPath: "/beach_box.jpg",
- description: "This is a beach box.",
- featured: false,
- categories: ["Fused Glass", "Beachy"]
- },
- {
- id: 2,
- name: "Wind Chime",
- quantity: 0,
- cents: 4500,
- imgPath: "/wind-chime.jpg",
- description: "Makes noise when the wind blows.",
- featured: false,
- categories: ["Fused Glass", "Beachy"]
- },
- {
- id: 3,
- name: "Beach Box",
- quantity: 5,
- cents: 1100,
- imgPath: "/beach_box.jpg",
- description: "This is a beach box.",
- featured: false,
- categories: ["Stained Glass", "Christmas"]
- },
- {
- id: 4,
- name: "Wind Chime",
- quantity: 2,
- cents: 4500,
- imgPath: "/wind-chime.jpg",
- description: "Makes noise when the wind blows.",
- featured: false,
- categories: ["Fused Glass", "Kiln-y"]
- },
- {
- id: 5,
- name: "Beach Box (New!)",
- quantity: 5,
- cents: 1100,
- imgPath: "/beach_box.jpg",
- description: "This is a beach box.",
- featured: true,
- categories: ["Stained Glass", "Christmas"]
- }
- ];
+ _base_addr = "http://localhost:8000/";
+
+ async createPhoto(file) {
+ const fd = new FormData();
+ fd.append(file.name, file);
+
+ const options = {
+ method: "POST",
+ body: fd
+ };
+
+ const photos = await self._sendRequest("photos", options);
+ return photos.map(p => new PhotoSet(p));
}
+ async getProducts() {
+ const products = await self._sendRequest("products", null);
+ return products.map(p => new Product(p));
+ }
- async uploadPhoto(file) {
- const fd = new FormData();
- fd.append(file.name, file);
+ async updateProduct(fieldDiff) {
+ const options = {
+ method: "PATCH",
+ body: fieldDiff
+ };
- return fetch("http://localhost:8000/photos", {
- method: "POST",
- body: fd
- });
- }
+ const product = await self._sendRequest("products", options);
+ return new Product(product);
+ }
+ async createProduct(newProduct) {
+ const options = {
+ method: "POST",
+ body: newProduct
+ };
- getProducts() {
- return this.products.slice(0);
+ const product = await self._sendRequest("products", options);
+ return new Product(product);
}
- updateProduct(newProduct) {
- if (!newProduct) {
- return;
- }
+ async _sendRequest(endpoint, options) {
+ const response = await fetch(self.base_addr + endpoint, options);
- for (let i = 0; i < this.products.length; i++) {
- if (newProduct.id == this.products[i].id) {
- let currentProduct = this.products[i];
- currentProduct.id = newProduct.id;
- currentProduct.name = newProduct.name;
- currentProduct.quantity = newProduct.quantity;
- currentProduct.cents = newProduct.cents;
- currentProduct.imgPath = newProduct.imgPath;
- currentProduct.description = newProduct.description;
- currentProduct.featured = newProduct.featured;
- currentProduct.categories = newProduct.categories.slice(0);
- return;
- }
+ if (response.ok) {
+ return await response.json();
+ } else {
+ return new ApiError(await response.text());
}
}
}