Spaces:
Runtime error
Runtime error
import Redis from "ioredis"; | |
import { initClient } from './utils.js'; | |
const redis = new Redis({ | |
host: 'redis-12291.c305.ap-south-1-1.ec2.cloud.redislabs.com', | |
port: 12291, | |
password: 'KQCVapXXF2ioM4zF5krQFImzAYkKWY5l', | |
username: "default" // Replace with your Redis instance's password | |
}); | |
export const getCompanyCreds = async ({ company_id }) => { | |
const creds = await redis.get(`${company_id}:creds`); | |
if (!creds) { | |
throw { | |
message: "company creds not found" | |
} | |
} | |
return { ...JSON.parse(creds), company_id } | |
} | |
export const createUpdateCompanyCreds = async ({ company_id, clientId, clientSecret }) => { | |
const creds = await redis.set(`${company_id}:creds`, JSON.stringify({ clientId, clientSecret })); | |
return { message: "company creds saved" } | |
} | |
export const getApplications = async ({ company_id }) => { | |
const client = await initClient(company_id); | |
let applications = await client.configuration.getApplications({ pageSize: 100 }); | |
applications = applications.items.map(i => { | |
return { | |
name: i.name, | |
id: i.id, | |
token: i.token, | |
domain: i.domains?.find(i => i.is_primary)?.name, | |
logo: i.logo?.secure_url | |
} | |
}) | |
return applications; | |
} | |
export const createBrand = async ({ company_id, name, description, logo = "https://cdn.pixelbin.io/v2/falling-surf-7c8bb8/fyprod/wrkr/platform/pictures/favicon/original/ZWTmgEoFQ-platform-favicon.png" }) => { | |
const client = await initClient(company_id); | |
let brands = await client.companyProfile.createBrand({ | |
body: { | |
name, | |
description, | |
logo, | |
banner: { portrait: logo, landscape: logo } | |
} | |
}); | |
return { message: "brand created", id: brands?.uid }; | |
} | |
export const getBrands = async ({ company_id }) => { | |
const client = await initClient(company_id); | |
let brands = await client.companyProfile.getBrands({ pageSize: 300 }); | |
brands = brands.items.map(i => { | |
return { | |
name: i?.brand?.name, | |
logo: i?.brand?.logo, | |
id: i?.brand?.uid, | |
} | |
}) | |
return brands | |
} | |
export const updateBrand = async ({ company_id, brand_id }) => { | |
const client = await initClient(company_id); | |
let brands = await client.companyProfile.editBrand({ | |
brand_id, | |
body: { | |
name, | |
description, | |
logo, | |
banner: { portrait: logo, landscape: logo } | |
} | |
}); | |
return { message: "brand updated" } | |
} | |
export const getLocations = async ({ company_id }) => { | |
const client = await initClient(company_id); | |
let locations = await client.companyProfile.getLocations({ pageSize: 100 }); | |
locations = locations.items.map(i => { | |
return { | |
name: i.name, | |
id: i.uid, | |
code: i.code, | |
documents: i.documents | |
} | |
}) | |
return locations; | |
} | |
export const createLocation = async ({ name, company_id, address1, address2, pincode, state, city, country, number, country_code, gst_name, gst_no, latitude = 19.2762702, longitude = 72.8929, code, manager_name, email }) => { | |
const client = await initClient(company_id); | |
let locations = await client.companyProfile.createLocation({ | |
body: { | |
name, | |
display_name: name, | |
code, | |
company: parseInt(company_id), | |
documents: [{ | |
type: "gst", | |
legal_name: gst_name, | |
value: gst_no, | |
verified: true | |
}], | |
address: { | |
"address1": address1, | |
"address2": address2, | |
"country": country, | |
"pincode": pincode, | |
"city": city, | |
"state": state, | |
"latitude": latitude, | |
"longitude": longitude, | |
"landmark": '' | |
}, | |
manager: { | |
"name": manager_name, | |
"email": email, | |
"mobile_no": { | |
"number": number, | |
"country_code": country_code | |
} | |
}, | |
contact_numbers: [ | |
{ | |
"number": number, | |
"country_code": country_code | |
} | |
], | |
store_type: "high_street" | |
} | |
}); | |
return { message: "location added", id: locations?.uid }; | |
} | |
export const updateLocation = async ({ company_id, location_id, address1, address2, pincode, state, city, number, country_code, gst_name, gst_no, latitude = 19.2762702, longitude = 72.8929, | |
}) => { | |
const client = await initClient(company_id); | |
let locations = await client.companyProfile.updateLocation({ | |
locationId: location_id, | |
body: { | |
name, | |
display_name: name, | |
code, | |
company: parseInt(companyId), | |
documents: [{ | |
type: "gst", | |
legal_name: gst_name, | |
value: gst_no, | |
verified: true | |
}], | |
address: { | |
"address1": address1, | |
"address2": address2, | |
"country": country, | |
"pincode": pincode, | |
"city": city, | |
"state": state, | |
"latitude": latitude, | |
"longitude": longitude, | |
"landmark": landmark | |
}, | |
manager: { | |
"name": manager_name, | |
"email": email, | |
"mobile_no": { | |
"number": number, | |
"country_code": country_code | |
} | |
}, | |
contact_numbers: [ | |
{ | |
"number": number, | |
"country_code": country_code | |
} | |
], | |
store_type: "high_street" | |
} | |
}); | |
return { message: "location updated" }; | |
} | |
export const createApplication = async ({ company_id, brand_ids, name, subdomain }) => { | |
const client = await initClient(company_id); | |
let app = await client.configuration.createApplication({ | |
body: { | |
"app": { | |
"company_id": (1).toString(), | |
"channel_type": "website-and-mobile-apps", | |
"auth": { | |
"enabled": true | |
}, | |
"name": name, | |
"desc": "", | |
"mode": "live" | |
}, | |
"configuration": { | |
"inventory": { | |
"brand": { | |
"criteria": "all", | |
"brands": [] | |
}, | |
"store": { | |
"criteria": "filter", | |
"rules": [ | |
{ | |
"companies": [company_id], | |
"brands": brand_ids | |
} | |
], | |
"stores": [] | |
}, | |
"image": ["standard", "substandard", "default"], | |
"franchise_enabled": false, | |
"out_of_stock": true | |
}, | |
"payment": { | |
"mode_of_payment": "ECOMM", | |
"source": "ECOMM" | |
}, | |
"article_assignment": { | |
"post_order_reassignment": true, | |
"enforced_stores": [], | |
"rules": { | |
"store_priority": { | |
"enabled": false, | |
"storetype_order": [] | |
} | |
} | |
} | |
}, | |
"domain": { | |
"name": `${subdomain}.hostx5.de` | |
} | |
} | |
}) | |
return { ...app }; | |
} | |
export const createProduct = async ({ name, company_id, slug, | |
seller_identifier, | |
brand_id, mrp = 999, selling_price = 499 }) => { | |
const client = await initClient(company_id); | |
const obj = { | |
"name": name, | |
"slug": slug, | |
"brand_uid": brand_id, | |
"item_code": seller_identifier, | |
"teaser_tag": {}, | |
"net_quantity": {}, | |
"tax_identifier": { | |
"reporting_hsn": "1202355241H1", | |
"hsn_code": "1202355241", | |
"hsn_code_id": "65769883ba99dcf407a2b1ed" | |
}, | |
"country_of_origin": "India", | |
"variants": {}, | |
"variant_media": {}, | |
"description": "PHA+WW91ciBwcm9kdWN0IGRlc2NyaXB0aW9uPC9wPg==", | |
"short_description": "Your product description", | |
"highlights": [], | |
"company_id": 10, | |
"template_tag": "c2-0-template", | |
"currency": "INR", | |
"media": [], | |
"is_set": false, | |
"sizes": [ | |
{ | |
"size": "OS", | |
"price": mrp, | |
"price_effective": selling_price, | |
"price_transfer": 0, | |
"currency": "INR", | |
"item_length": 1, | |
"item_width": 1, | |
"item_height": 1, | |
"item_weight": 1, | |
"item_dimensions_unit_of_measure": "cm", | |
"item_weight_unit_of_measure": "gram", | |
"track_inventory": true, | |
"identifiers": [ | |
{ | |
"gtin_value": seller_identifier, | |
"gtin_type": "ean", | |
"primary": true | |
} | |
], | |
"_custom_json": {}, | |
"name": "OS" | |
} | |
], | |
"_custom_json": {}, | |
"size_guide": "", | |
"product_group_tag": [], | |
"product_publish": { | |
"product_online_date": "2023-12-11T08:38:10.082Z", | |
"is_set": false | |
}, | |
"is_active": true, | |
"custom_order": { | |
"is_custom_order": false, | |
"manufacturing_time": 0, | |
"manufacturing_time_unit": "hours" | |
}, | |
"multi_size": false, | |
"no_of_boxes": 1, | |
"is_dependent": false, | |
"item_type": "digital", | |
"tags": [], | |
"departments": [ | |
19771 | |
], | |
return_config: { | |
"returnable": false | |
}, | |
"category_slug": "c2-0-cat", | |
"trader": [ | |
{ | |
"type": "Manufacturer", | |
"name": "Manufacturer", | |
"address": [ | |
"Manufacturer Address" | |
] | |
} | |
], | |
"return_config": { | |
"returnable": true, | |
time: 3, | |
unit: "days" | |
} | |
} | |
let product = await client.catalog.createProduct({ | |
body: obj | |
}); | |
product = await client.catalog.getProduct({ | |
itemId: product.uid | |
}); | |
return { | |
message: "product created", | |
id: product.data.uid, | |
seller_identifier: product?.data?.sizes?.[0]?.seller_identifier | |
}; | |
} | |
export const createInventory = async ({ company_id, product_id, seller_identifier, location_id, mrp = 999, selling_price = 499 }) => { | |
const client = await initClient(company_id); | |
let product = await client.catalog.getProduct({ | |
itemId: product_id | |
}); | |
let inv = await client.catalog.updateRealtimeInventory({ | |
itemId: product.data.uid, | |
sellerIdentifier: seller_identifier, | |
body: { | |
company_id: company_id, | |
payload: [{ | |
"seller_identifier": seller_identifier, | |
"store_id": location_id, | |
"price_marked": mrp, | |
"price_effective": selling_price, | |
"total_quantity": 10, | |
"tags": [] | |
}] | |
} | |
}) | |
return { message: "inv created" }; | |
} | |