summaryrefslogblamecommitdiff
path: root/iridescence/src/api/dichroism.js
blob: 610941cc81ce2587e90319623d0632fff11d9a3f (plain) (tree)
1
2
3
4
5



                                           
                                










                                        






                                                                
   
 
                       






                                                                 
   
 




                                  
 






                                                                   
   
 




                                   
 






                                                                   
   
 
                                         
                                                                      
 


                                   
                                                


     
import Product from "../models/product";
import PhotoSet from "../models/photo_set";
import ApiError from "./error";

export default class Dichroism {
  _base_addr = "http://localhost:8000/";

  async createPhoto(file) {
    const fd = new FormData();
    fd.append(file.name, file);

    const options = {
      method: "POST",
      body: fd
    };

    try {
      const photos = await this._sendRequest("photos", options);
      return photos.map(p => new PhotoSet(p));
    } catch (err) {
      console.error(err.message);
      return null;
    }
  }

  async getProducts() {
    try {
      const products = await this._sendRequest("products", null);
      return products.map(p => new Product(p));
    } catch (err) {
      console.error(err.message);
      return [];
    }
  }

  async updateProduct(fieldDiff) {
    const options = {
      method: "PATCH",
      body: fieldDiff
    };

    try {
      const product = await this._sendRequest("products", options);
      return new Product(product);
    } catch (err) {
      console.error(err.message);
      return null;
    }
  }

  async createProduct(newProduct) {
    const options = {
      method: "POST",
      body: newProduct
    };

    try {
      const product = await this._sendRequest("products", options);
      return new Product(product);
    } catch (err) {
      console.error(err.message);
      return null;
    }
  }

  async _sendRequest(endpoint, options) {
    const response = await fetch(this._base_addr + endpoint, options);

    if (response.ok) {
      return await response.json();
    } else {
      throw new ApiError(await response.text());
    }
  }
}