This commit is contained in:
JiriUhlir
2026-06-29 09:47:05 +02:00
parent 60cb139a33
commit 9c08dacc69
29 changed files with 3703 additions and 23 deletions
+15
View File
@@ -0,0 +1,15 @@
import { SapB1Client } from "../client/SapB1Client";
import { BusinessPartner, BusinessPartnerCreateDto, BusinessPartnerUpdateDto } from "../types/entities";
import { BusinessPartnerSchema } from "../types/schemas";
import { Resource } from "./Resource";
export class BusinessPartnersResource extends Resource<
BusinessPartner,
BusinessPartnerCreateDto,
BusinessPartnerUpdateDto,
string
> {
public constructor(client: SapB1Client) {
super(client, "BusinessPartners", BusinessPartnerSchema);
}
}
+38
View File
@@ -0,0 +1,38 @@
import { SapB1Client } from "../client/SapB1Client";
import { MarketingDocument, MarketingDocumentCreateDto, MarketingDocumentUpdateDto } from "../types/entities";
import { MarketingDocumentSchema } from "../types/schemas";
import { Resource } from "./Resource";
export class OrdersResource extends Resource<MarketingDocument, MarketingDocumentCreateDto, MarketingDocumentUpdateDto, number> {
public constructor(client: SapB1Client) {
super(client, "Orders", MarketingDocumentSchema, false);
}
}
export class InvoicesResource extends Resource<MarketingDocument, MarketingDocumentCreateDto, MarketingDocumentUpdateDto, number> {
public constructor(client: SapB1Client) {
super(client, "Invoices", MarketingDocumentSchema, false);
}
}
export class PurchaseOrdersResource extends Resource<
MarketingDocument,
MarketingDocumentCreateDto,
MarketingDocumentUpdateDto,
number
> {
public constructor(client: SapB1Client) {
super(client, "PurchaseOrders", MarketingDocumentSchema, false);
}
}
export class DeliveryNotesResource extends Resource<
MarketingDocument,
MarketingDocumentCreateDto,
MarketingDocumentUpdateDto,
number
> {
public constructor(client: SapB1Client) {
super(client, "DeliveryNotes", MarketingDocumentSchema, false);
}
}
+10
View File
@@ -0,0 +1,10 @@
import { SapB1Client } from "../client/SapB1Client";
import { Item, ItemCreateDto, ItemUpdateDto } from "../types/entities";
import { ItemSchema } from "../types/schemas";
import { Resource } from "./Resource";
export class ItemsResource extends Resource<Item, ItemCreateDto, ItemUpdateDto, string> {
public constructor(client: SapB1Client) {
super(client, "Items", ItemSchema);
}
}
+44
View File
@@ -0,0 +1,44 @@
import { z } from "zod";
import { SapB1Client } from "../client/SapB1Client";
import { ODataQuery, ODataResponse } from "../types/odata";
export class Resource<TEntity, TCreate, TUpdate, TKey extends string | number = string | number> {
public constructor(
protected readonly client: SapB1Client,
protected readonly path: string,
protected readonly schema: z.ZodType<TEntity>,
private readonly supportsDelete = true
) {}
public list(query: ODataQuery = {}): Promise<ODataResponse<TEntity>> {
return this.client.get<ODataResponse<TEntity>>(this.path, query);
}
public listAll(query: ODataQuery = {}): Promise<TEntity[]> {
return this.client.getAll<TEntity>(this.path, query, this.schema);
}
public get(id: TKey): Promise<TEntity> {
return this.client.get<TEntity>(`${this.path}(${this.formatKey(id)})`, undefined, this.schema);
}
public create(data: TCreate): Promise<TEntity> {
return this.client.post<TEntity>(this.path, data, this.schema);
}
public update(id: TKey, data: TUpdate): Promise<void> {
return this.client.patch<void>(`${this.path}(${this.formatKey(id)})`, data);
}
public delete(id: TKey): Promise<void> {
if (!this.supportsDelete) {
throw new Error(`${this.path} does not support delete through this connector`);
}
return this.client.delete<void>(`${this.path}(${this.formatKey(id)})`);
}
protected formatKey(id: TKey): string {
return typeof id === "number" ? String(id) : `'${String(id).replace(/'/g, "''")}'`;
}
}
+10
View File
@@ -0,0 +1,10 @@
import { SapB1Client } from "../client/SapB1Client";
import { StockTransfer, StockTransferCreateDto, StockTransferUpdateDto } from "../types/entities";
import { StockTransferSchema } from "../types/schemas";
import { Resource } from "./Resource";
export class StockTransfersResource extends Resource<StockTransfer, StockTransferCreateDto, StockTransferUpdateDto, number> {
public constructor(client: SapB1Client) {
super(client, "StockTransfers", StockTransferSchema, false);
}
}