first
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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, "''")}'`;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user