functions.ts
1 import { ExternalFilament } from "../../utils/queryExternalDB"; 2 import { getAPIURL } from "../../utils/url"; 3 import { getOrCreateVendorFromExternal } from "../vendors/functions"; 4 import { IFilament } from "./model"; 5 6 /** 7 * Create a new internal filament given an external filament object. 8 * Returns the created internal filament. 9 */ 10 export async function createFilamentFromExternal(externalFilament: ExternalFilament): Promise<IFilament> { 11 const vendor = await getOrCreateVendorFromExternal(externalFilament.manufacturer); 12 13 let color_hex: string | undefined = undefined; 14 let multi_color_hexes: string | undefined = undefined; 15 let multi_color_direction: string | undefined = undefined; 16 if (externalFilament.color_hex) { 17 color_hex = externalFilament.color_hex; 18 } else if (externalFilament.color_hexes && externalFilament.color_hexes.length > 0) { 19 multi_color_hexes = externalFilament.color_hexes.join(","); 20 multi_color_direction = externalFilament.multi_color_direction; 21 } 22 23 const body: Omit<IFilament, "id" | "registered" | "extra"> & { vendor_id: number } = { 24 name: externalFilament.name, 25 material: externalFilament.material, 26 vendor_id: vendor.id, 27 density: externalFilament.density, 28 diameter: externalFilament.diameter, 29 weight: externalFilament.weight, 30 spool_weight: externalFilament.spool_weight || undefined, 31 color_hex: color_hex, 32 multi_color_hexes: multi_color_hexes, 33 multi_color_direction: multi_color_direction, 34 settings_extruder_temp: externalFilament.extruder_temp || undefined, 35 settings_bed_temp: externalFilament.bed_temp || undefined, 36 external_id: externalFilament.id, 37 }; 38 39 const response = await fetch(getAPIURL() + "/filament", { 40 method: "POST", 41 headers: { 42 "Content-Type": "application/json", 43 }, 44 body: JSON.stringify(body), 45 }); 46 if (!response.ok) { 47 throw new Error("Network response was not ok"); 48 } 49 return response.json(); 50 }