@cfxlabsinc/b2b-services
    Preparing search index...

    Admin-tier read + write over product_vendor. create() inserts the identity row plus its baseline product_vendor_version in one transaction, pointing current_version_id at the new version; update() snaps a row into product_vendor_version and re-points current_version_id in the same transaction. The NOT NULL current_version_id FK (deferrable, in migration 20260710182509_add_product_vendor_current_version_id) makes a version-less vendor impossible by construction — the state ProductRouteService.search's inner join used to silently drop.

    Index
    db: B2bDatabase
    • Create a new vendor. Inserts the product_vendor identity row AND its baseline product_vendor_version snapshot in one transaction. The identity row's NOT NULL current_version_id is pre-assigned from the version table's identity sequence (nextval on product_vendor_version.id) so it can be set before the version row exists; the deferrable FK validates at commit. This makes a version-less vendor — the state ProductRouteService.search's inner join silently drops — impossible.

      New slugs are non-bank by default: bankId must be null unless the slug is a seeded BankVendor (dart/fib), enforced via vendorBankIdMismatch. Returns DUPLICATE if the slug already exists (including soft-deleted rows — external_id is globally unique).

      Parameters

      Returns Promise<{ ok: true; value: ProductVendor } | { error: ServiceError; ok: false }>

    • Parameters

      • input: {
            bankIds?: string[];
            createdAt?: DbTimestampCriteria<Instant>;
            ids?: Vendor[];
            orderBy?: DbOrderByCriterion<
                Omit<
                    PgTableWithColumns<
                        {
                            columns: {
                                bankId: PgBuildColumn<
                                    "product_vendor",
                                    PgIntegerBuilder,
                                    {
                                        data: number;
                                        dataType: "number int32";
                                        driverParam: (...)
                                        | (...);
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: false;
                                        tableName: "product_vendor";
                                    },
                                >;
                                createdAt: PgBuildColumn<
                                    "product_vendor",
                                    SetHasDefault<SetNotNull<(...)>>,
                                    {
                                        data: Instant;
                                        dataType: "custom";
                                        driverParam: string;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: true;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: true;
                                        tableName: "product_vendor";
                                    },
                                >;
                                currentVersionId: PgBuildColumn<
                                    "product_vendor",
                                    SetNotNull<PgIntegerBuilder>,
                                    {
                                        data: number;
                                        dataType: "number int32";
                                        driverParam: (...) | (...);
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: true;
                                        tableName: "product_vendor";
                                    },
                                >;
                                deletedAt: PgBuildColumn<
                                    "product_vendor",
                                    PgCustomColumnBuilder<{ data: ...; dataType: ...; driverParam: ... }>,
                                    {
                                        data: Instant;
                                        dataType: "custom";
                                        driverParam: string;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: false;
                                        tableName: "product_vendor";
                                    },
                                >;
                                externalId: PgBuildColumn<
                                    "product_vendor",
                                    Set$Type<SetNotNull<(...)>, Vendor>,
                                    {
                                        data: Vendor;
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: true;
                                        tableName: "product_vendor";
                                    },
                                >;
                                id: PgBuildColumn<
                                    "product_vendor",
                                    HasIdentity<SetIsPrimaryKey<(...)>, "byDefault">,
                                    {
                                        data: number;
                                        dataType: "number int32";
                                        driverParam: (...) | (...);
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: true;
                                        hasRuntimeDefault: false;
                                        identity: "byDefault";
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: true;
                                        tableName: "product_vendor";
                                    },
                                >;
                                mandatoryMatcher: PgBuildColumn<
                                    "product_vendor",
                                    SetHasDefault<SetNotNull<(...)>>,
                                    {
                                        data: Matcher;
                                        dataType: "object json";
                                        driverParam: unknown;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: true;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: true;
                                        tableName: "product_vendor";
                                    },
                                >;
                                name: PgBuildColumn<
                                    "product_vendor",
                                    SetNotNull<PgTextBuilder<(...)>>,
                                    {
                                        data: string;
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: true;
                                        tableName: "product_vendor";
                                    },
                                >;
                                updatedAt: PgBuildColumn<
                                    "product_vendor",
                                    SetHasDefault<SetHasDefault<(...)>>,
                                    {
                                        data: Instant;
                                        dataType: "custom";
                                        driverParam: string;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: true;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: string;
                                        notNull: true;
                                        tableName: "product_vendor";
                                    },
                                >;
                            };
                            dialect: "pg";
                            name: "product_vendor";
                            schema: "b2b";
                        },
                    >,
                    "enableRLS",
                >,
                "createdAt"
                | "updatedAt",
            >[];
            page?: number;
            pageSize?: number;
            q?: string;
            updatedAt?: DbTimestampCriteria<Instant>;
        }
        • OptionalbankIds?: string[]
        • OptionalcreatedAt?: DbTimestampCriteria<Instant>
        • Optionalids?: Vendor[]
        • OptionalorderBy?: DbOrderByCriterion<
              Omit<
                  PgTableWithColumns<
                      {
                          columns: {
                              bankId: PgBuildColumn<
                                  "product_vendor",
                                  PgIntegerBuilder,
                                  {
                                      data: number;
                                      dataType: "number int32";
                                      driverParam: (...)
                                      | (...);
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: false;
                                      hasRuntimeDefault: false;
                                      identity: undefined;
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: false;
                                      tableName: "product_vendor";
                                  },
                              >;
                              createdAt: PgBuildColumn<
                                  "product_vendor",
                                  SetHasDefault<SetNotNull<(...)>>,
                                  {
                                      data: Instant;
                                      dataType: "custom";
                                      driverParam: string;
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: true;
                                      hasRuntimeDefault: false;
                                      identity: undefined;
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: true;
                                      tableName: "product_vendor";
                                  },
                              >;
                              currentVersionId: PgBuildColumn<
                                  "product_vendor",
                                  SetNotNull<PgIntegerBuilder>,
                                  {
                                      data: number;
                                      dataType: "number int32";
                                      driverParam: (...) | (...);
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: false;
                                      hasRuntimeDefault: false;
                                      identity: undefined;
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: true;
                                      tableName: "product_vendor";
                                  },
                              >;
                              deletedAt: PgBuildColumn<
                                  "product_vendor",
                                  PgCustomColumnBuilder<{ data: ...; dataType: ...; driverParam: ... }>,
                                  {
                                      data: Instant;
                                      dataType: "custom";
                                      driverParam: string;
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: false;
                                      hasRuntimeDefault: false;
                                      identity: undefined;
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: false;
                                      tableName: "product_vendor";
                                  },
                              >;
                              externalId: PgBuildColumn<
                                  "product_vendor",
                                  Set$Type<SetNotNull<(...)>, Vendor>,
                                  {
                                      data: Vendor;
                                      dataType: "string";
                                      driverParam: string;
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: false;
                                      hasRuntimeDefault: false;
                                      identity: undefined;
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: true;
                                      tableName: "product_vendor";
                                  },
                              >;
                              id: PgBuildColumn<
                                  "product_vendor",
                                  HasIdentity<SetIsPrimaryKey<(...)>, "byDefault">,
                                  {
                                      data: number;
                                      dataType: "number int32";
                                      driverParam: (...) | (...);
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: true;
                                      hasRuntimeDefault: false;
                                      identity: "byDefault";
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: true;
                                      tableName: "product_vendor";
                                  },
                              >;
                              mandatoryMatcher: PgBuildColumn<
                                  "product_vendor",
                                  SetHasDefault<SetNotNull<(...)>>,
                                  {
                                      data: Matcher;
                                      dataType: "object json";
                                      driverParam: unknown;
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: true;
                                      hasRuntimeDefault: false;
                                      identity: undefined;
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: true;
                                      tableName: "product_vendor";
                                  },
                              >;
                              name: PgBuildColumn<
                                  "product_vendor",
                                  SetNotNull<PgTextBuilder<(...)>>,
                                  {
                                      data: string;
                                      dataType: "string";
                                      driverParam: string;
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: false;
                                      hasRuntimeDefault: false;
                                      identity: undefined;
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: true;
                                      tableName: "product_vendor";
                                  },
                              >;
                              updatedAt: PgBuildColumn<
                                  "product_vendor",
                                  SetHasDefault<SetHasDefault<(...)>>,
                                  {
                                      data: Instant;
                                      dataType: "custom";
                                      driverParam: string;
                                      enumValues: undefined;
                                      generated: undefined;
                                      hasDefault: true;
                                      hasRuntimeDefault: false;
                                      identity: undefined;
                                      isAutoincrement: false;
                                      isPrimaryKey: false;
                                      name: string;
                                      notNull: true;
                                      tableName: "product_vendor";
                                  },
                              >;
                          };
                          dialect: "pg";
                          name: "product_vendor";
                          schema: "b2b";
                      },
                  >,
                  "enableRLS",
              >,
              "createdAt"
              | "updatedAt",
          >[]
        • Optionalpage?: number
        • OptionalpageSize?: number
        • Optionalq?: string

          Case-insensitive substring over externalId and name.

        • OptionalupdatedAt?: DbTimestampCriteria<Instant>

      Returns Promise<
          {
              ok: true;
              value: { hasNext: boolean; items: ProductVendor[]; total: number };
          },
      >

    • Update vendor terms. Snapshots the post-update state into product_vendor_version in the same transaction so the audit log has a row per change. name and data fields are independently optional; only the fields actually present in data are touched.

      bankId agreement against the vendor slug is enforced — bank vendors (dart, metcap) require bankId to equal the slug; non-bank vendors require bankId === null.

      Parameters

      Returns Promise<{ ok: true; value: ProductVendor } | { error: ServiceError; ok: false }>