Importing Custom DataBasic Data Schema

Importing Basic Custom Data Schema

When you can’t import your custom data through third-party data providers, you need to define a schema and use Push API to import your data. This recipe shows how to:

  • Create a custom schema for your data
  • Import data using Push API
  • Fetch imported custom data
import { BooleanField, NumberField, StringField, Unbody } from "unbody";
import {
  AutoSummary,
  AutoVision,
  CustomSchema,
  Generative,
  ImageVectorizer,
  ProjectSettings,
  SourceTypes,
  TextVectorizer,
  UnbodyAdmin,
} from "unbody/admin";
import { UnbodyPushAPI } from "@unbody-io/push-api";
 
// 1. Create project with settings
const projectSettings = new ProjectSettings();
projectSettings
    .set(new TextVectorizer(TextVectorizer.OpenAI.TextEmbedding3Small))
    .set(new ImageVectorizer(ImageVectorizer.Img2VecNeural.Default))
    .set(new Generative(Generative.OpenAI.GPT4o))
    .set(new AutoSummary(AutoSummary.OpenAI.GPT4o))
    .set(new AutoVision(AutoVision.OpenAI.GPT4o));
 
// create an admin instance with credentials
const admin = new UnbodyAdmin({
    auth: {
    username: "93156549-...", // ID
    password: "ak_7660b....", // Secret
    },
});
 
const project = admin.projects.ref({
    name: "Products Projects",
    settings: projectSettings,
});
 
// 2. Define product schema
const customSchema = new CustomSchema();
const productCollection = new CustomSchema.Collection("ProductCollection");
 
productCollection.add(new CustomSchema.Field.Text("name", "Product Name"));
productCollection.add(
    new CustomSchema.Field.Number("price", "Product Price")
);
productCollection.add(
    new CustomSchema.Field.Text("description", "Product Description")
);
productCollection.add(
    new CustomSchema.Field.Boolean("inStock", "Stock Status")
);
 
customSchema.add(productCollection);
project.settings.set(customSchema);
await project.save();
 
// 3. Set up Push API source
const source = project.sources.ref({
    name: "Push API Source",
    type: SourceTypes.PushApi,
});
await project.sources.save(source);
 
// 4. Add product data
const productData = {
    name: "Wireless Mouse",
    price: 29.99,
    description: "Ergonomic wireless mouse with long battery life",
    inStock: true,
};
 
// Create pushApi instance with credentials
const pushApi = new UnbodyPushAPI({
    projectId: "22e0b...", // Project ID
    sourceId: "9d98...", //  "Push API Source" -> Source ID
    auth: {
    apiKey: "pk_.....", //  Project Api key
    },
});
 
const { data } = await pushApi.records.create({
    id: `product-${Date.now()}`,
    collection: "ProductCollection",
    payload: productData,
});
 
// 5. Initialize source
await source.initialize(); // used source instance
 
// 6. Fetch imported data
 
// Create unbody sdk instance
const unbody = new Unbody({
    apiKey: "pk_.....",
    projectId: "22e0b...", // Project Api Key
});
 
interface IProduct {
    name: StringField;
    price: NumberField;
    description: StringField;
    inStock: BooleanField;
}
 
const {
    data: { payload },
} = await unbody.get
    .collection<IProduct>("ProductCollection")
    .select("name", "description", "price", "inStock")
    .exec();

©2024 Unbody