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" }; }