@mittwald/api-models 4.245.0 → 4.247.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,7 @@ import { addUrlTagToProvideReactCache } from "../../react/asyncResourceInvalidat
9
9
  import { apiArticleBehaviors } from "../../article/Article/behaviors/index.js";
10
10
  import { apiContractBehaviors } from "../../contract/Contract/behaviors/index.js";
11
11
  import { apiContractItemBehaviors } from "../../contract/ContractItem/behaviors/index.js";
12
+ import { apiContributorBehaviors } from "../../marketplace/Contributor/behaviors/api.js";
12
13
  class ApiSetupState {
13
14
  _client;
14
15
  setupWithClient(client) {
@@ -25,6 +26,7 @@ class ApiSetupState {
25
26
  config.behaviors.ingress = apiIngressBehaviors(client);
26
27
  config.behaviors.appInstallation = apiAppInstallationBehaviors(client);
27
28
  config.behaviors.contract = apiContractBehaviors(client);
29
+ config.behaviors.contributor = apiContributorBehaviors(client);
28
30
  config.behaviors.contractItem = apiContractItemBehaviors(client);
29
31
  }
30
32
  setupWithApiToken(apiToken) {
@@ -3,6 +3,7 @@ export const config = {
3
3
  behaviors: {
4
4
  contract: undefined,
5
5
  contractItem: undefined,
6
+ contributor: undefined,
6
7
  article: undefined,
7
8
  project: undefined,
8
9
  server: undefined,
@@ -0,0 +1,83 @@
1
+ import { config } from "../../config/config.js";
2
+ import { classes } from "polytype";
3
+ import { DataModel } from "../../base/DataModel.js";
4
+ import assertObjectFound from "../../base/assertObjectFound.js";
5
+ import { ReferenceModel } from "../../base/ReferenceModel.js";
6
+ import { provideReact, } from "../../react/provideReact.js";
7
+ import { ListQueryModel } from "../../base/ListQueryModel.js";
8
+ import { ListDataModel } from "../../base/ListDataModel.js";
9
+ import { ContributorIncomingInvoiceListQuery } from "./ContributorIncomingInvoice.js";
10
+ export class Contributor extends ReferenceModel {
11
+ incomingInvoices;
12
+ constructor(id) {
13
+ super(id);
14
+ this.incomingInvoices = new ContributorIncomingInvoiceListQuery(this);
15
+ }
16
+ static ofId(id) {
17
+ return new Contributor(id);
18
+ }
19
+ static find = provideReact(async (id) => {
20
+ const data = await config.behaviors.contributor.find(id);
21
+ if (data !== undefined) {
22
+ return new ContributorDetailed(data);
23
+ }
24
+ });
25
+ static query(query = {}) {
26
+ return new ContributorListQuery(query);
27
+ }
28
+ static get = provideReact(async (id) => {
29
+ const contributor = await this.find(id);
30
+ assertObjectFound(contributor, this, id);
31
+ return contributor;
32
+ });
33
+ getDetailed = provideReact(() => Contributor.get(this.id), [this.id]);
34
+ findDetailed = provideReact(() => Contributor.find(this.id), [this.id]);
35
+ }
36
+ class ContributorCommon extends classes((DataModel), Contributor) {
37
+ constructor(data) {
38
+ super([data], [data.id]);
39
+ }
40
+ }
41
+ export class ContributorDetailed extends classes(ContributorCommon, (DataModel)) {
42
+ constructor(data) {
43
+ super([data], [data]);
44
+ }
45
+ }
46
+ export class ContributorListItem extends classes(ContributorCommon, (DataModel)) {
47
+ constructor(data) {
48
+ super([data], [data]);
49
+ }
50
+ }
51
+ export class ContributorListQuery extends ListQueryModel {
52
+ constructor(query = {}) {
53
+ super(query);
54
+ }
55
+ refine(query) {
56
+ return new ContributorListQuery({
57
+ ...this.query,
58
+ ...query,
59
+ });
60
+ }
61
+ execute = provideReact(async () => {
62
+ const { items, totalCount } = await config.behaviors.contributor.list({
63
+ limit: config.defaultPaginationLimit,
64
+ ...this.query,
65
+ });
66
+ return new ContributorList(this.query, items.map((d) => new ContributorListItem(d)), totalCount);
67
+ }, [this.queryId]);
68
+ getTotalCount = provideReact(async () => {
69
+ const { totalCount } = await this.refine({ limit: 1 }).execute();
70
+ return totalCount;
71
+ }, [this.queryId]);
72
+ findOneAndOnly = provideReact(async () => {
73
+ const { items, totalCount } = await this.refine({ limit: 2 }).execute();
74
+ if (totalCount === 1) {
75
+ return items[0];
76
+ }
77
+ }, [this.queryId]);
78
+ }
79
+ export class ContributorList extends classes(ContributorListQuery, (ListDataModel)) {
80
+ constructor(query, contributors, totalCount) {
81
+ super([query], [contributors, totalCount]);
82
+ }
83
+ }
@@ -0,0 +1,53 @@
1
+ import { classes } from "polytype";
2
+ import { ListQueryModel } from "../../base/ListQueryModel.js";
3
+ import { Money } from "../../base/Money.js";
4
+ import { provideReact } from "../../react.js";
5
+ import { DateTime } from "luxon";
6
+ import { ListDataModel } from "../../base/ListDataModel.js";
7
+ import { DataModel } from "../../base/DataModel.js";
8
+ import { config } from "../../config/config.js";
9
+ export class ContributorIncomingInvoice extends DataModel {
10
+ contributor;
11
+ id;
12
+ pdfId;
13
+ invoiceNumber;
14
+ date;
15
+ totalNet;
16
+ totalGross;
17
+ constructor(contributor, data) {
18
+ super(data);
19
+ this.contributor = contributor;
20
+ this.id = data.id;
21
+ this.pdfId = data.pdfId;
22
+ this.invoiceNumber = data.invoiceNumber;
23
+ this.date = DateTime.fromISO(data.date);
24
+ this.totalNet = Money({ amount: data.totalNet, currency: "EUR" });
25
+ this.totalGross = Money({ amount: data.totalGross, currency: "EUR" });
26
+ }
27
+ }
28
+ export class ContributorIncomingInvoiceListQuery extends ListQueryModel {
29
+ contributor;
30
+ constructor(contributor, query = {}) {
31
+ super(query, { dependencies: [contributor.id] });
32
+ this.contributor = contributor;
33
+ }
34
+ refine(query) {
35
+ return new ContributorIncomingInvoiceListQuery(this.contributor, {
36
+ ...this.query,
37
+ ...query,
38
+ });
39
+ }
40
+ execute = provideReact(async () => {
41
+ const { items, totalCount } = await config.behaviors.contributor.listIncomingInvoices(this.contributor.id, this.query);
42
+ return new ContributorIncomingInvoicesList(this.contributor, this.query, items.map((i) => new ContributorIncomingInvoice(this.contributor, i)), totalCount);
43
+ }, [this.queryId]);
44
+ getTotalCount = provideReact(async () => {
45
+ const result = await this.refine({ limit: 1, skip: 0 }).execute();
46
+ return result.totalCount;
47
+ });
48
+ }
49
+ export class ContributorIncomingInvoicesList extends classes(ContributorIncomingInvoiceListQuery, (ListDataModel)) {
50
+ constructor(contributor, query, invoices, totalCount) {
51
+ super([contributor, query], [invoices, totalCount]);
52
+ }
53
+ }
@@ -0,0 +1,39 @@
1
+ import { extractTotalCountHeader, assertStatus, } from "@mittwald/api-client";
2
+ export const apiContributorBehaviors = (client) => ({
3
+ find: async (contributorId) => {
4
+ const response = await client.marketplace.extensionGetContributor({
5
+ contributorId,
6
+ });
7
+ if (response.status === 200) {
8
+ return response.data;
9
+ }
10
+ assertStatus(response, 404);
11
+ },
12
+ list: async (query) => {
13
+ const response = await client.marketplace.extensionListContributors({
14
+ queryParameters: query,
15
+ });
16
+ assertStatus(response, 200);
17
+ return {
18
+ items: response.data,
19
+ totalCount: extractTotalCountHeader(response),
20
+ };
21
+ },
22
+ listIncomingInvoices: async (contributorId, queryParameters) => {
23
+ const response = await client.marketplace.contributorListIncomingInvoices({
24
+ contributorId,
25
+ queryParameters,
26
+ });
27
+ if (response.status === 200) {
28
+ return {
29
+ items: response.data,
30
+ totalCount: extractTotalCountHeader(response),
31
+ };
32
+ }
33
+ assertStatus(response, 404);
34
+ return {
35
+ items: [],
36
+ totalCount: 0,
37
+ };
38
+ },
39
+ });
@@ -0,0 +1,2 @@
1
+ export * from "./api.js";
2
+ export * from "./types.js";
@@ -0,0 +1,3 @@
1
+ export * from "./Contributor.js";
2
+ export * from "./ContributorIncomingInvoice.js";
3
+ export * from "./types.js";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from "./Contributor/index.js";
@@ -6,10 +6,12 @@ import { ContractBehaviors } from "../contract/Contract/behaviors/index.js";
6
6
  import { AppInstallationBehaviors } from "../app/AppInstallation/behaviors/index.js";
7
7
  import { ContractItemBehaviors } from "../contract/ContractItem/behaviors/index.js";
8
8
  import { ArticleBehaviors } from "../article/Article/behaviors/index.js";
9
+ import type { ContributorBehaviors } from "../marketplace/Contributor/behaviors/types.js";
9
10
  interface Config {
10
11
  defaultPaginationLimit: number;
11
12
  behaviors: {
12
13
  contract: ContractBehaviors;
14
+ contributor: ContributorBehaviors;
13
15
  contractItem: ContractItemBehaviors;
14
16
  article: ArticleBehaviors;
15
17
  project: ProjectBehaviors;
@@ -0,0 +1,49 @@
1
+ import { DataModel } from "../../base/DataModel.js";
2
+ import { ReferenceModel } from "../../base/ReferenceModel.js";
3
+ import { AsyncResourceVariant } from "../../react/provideReact.js";
4
+ import { ListQueryModel } from "../../base/ListQueryModel.js";
5
+ import { ListDataModel } from "../../base/ListDataModel.js";
6
+ import { ContributorIncomingInvoiceListQuery } from "./ContributorIncomingInvoice.js";
7
+ import type { ContributorData, ContributorListItemData, ContributorListQueryData } from "./types.js";
8
+ export declare class Contributor extends ReferenceModel {
9
+ readonly incomingInvoices: ContributorIncomingInvoiceListQuery;
10
+ constructor(id: string);
11
+ static ofId(id: string): Contributor;
12
+ static find: AsyncResourceVariant<(id: string) => Promise<ContributorDetailed | undefined>>;
13
+ static query(query?: ContributorListQueryData): ContributorListQuery;
14
+ static get: AsyncResourceVariant<(id: string) => Promise<ContributorDetailed>>;
15
+ getDetailed: AsyncResourceVariant<() => Promise<ContributorDetailed>>;
16
+ findDetailed: AsyncResourceVariant<() => Promise<ContributorDetailed | undefined>>;
17
+ }
18
+ declare const ContributorCommon_base: import("polytype").Polytype.ClusteredConstructor<[{
19
+ new (data: import("@mittwald/api-client").MittwaldAPIV2.Components.Schemas.MarketplaceContributor): DataModel<import("@mittwald/api-client").MittwaldAPIV2.Components.Schemas.MarketplaceContributor>;
20
+ }, typeof Contributor]>;
21
+ declare class ContributorCommon extends ContributorCommon_base {
22
+ constructor(data: ContributorListItemData | ContributorData);
23
+ }
24
+ declare const ContributorDetailed_base: import("polytype").Polytype.ClusteredConstructor<[typeof ContributorCommon, {
25
+ new (data: import("@mittwald/api-client").MittwaldAPIV2.Components.Schemas.MarketplaceContributor): DataModel<import("@mittwald/api-client").MittwaldAPIV2.Components.Schemas.MarketplaceContributor>;
26
+ }]>;
27
+ export declare class ContributorDetailed extends ContributorDetailed_base {
28
+ constructor(data: ContributorData);
29
+ }
30
+ declare const ContributorListItem_base: import("polytype").Polytype.ClusteredConstructor<[typeof ContributorCommon, {
31
+ new (data: import("@mittwald/api-client").MittwaldAPIV2.Components.Schemas.MarketplaceContributor): DataModel<import("@mittwald/api-client").MittwaldAPIV2.Components.Schemas.MarketplaceContributor>;
32
+ }]>;
33
+ export declare class ContributorListItem extends ContributorListItem_base {
34
+ constructor(data: ContributorListItemData);
35
+ }
36
+ export declare class ContributorListQuery extends ListQueryModel<ContributorListQueryData> {
37
+ constructor(query?: ContributorListQueryData);
38
+ refine(query: ContributorListQueryData): ContributorListQuery;
39
+ execute: AsyncResourceVariant<() => Promise<ContributorList>>;
40
+ getTotalCount: AsyncResourceVariant<() => Promise<number>>;
41
+ findOneAndOnly: AsyncResourceVariant<() => Promise<ContributorListItem | undefined>>;
42
+ }
43
+ declare const ContributorList_base: import("polytype").Polytype.ClusteredConstructor<[typeof ContributorListQuery, {
44
+ new (items: ContributorListItem[], totalCount: number): ListDataModel<ContributorListItem>;
45
+ }]>;
46
+ export declare class ContributorList extends ContributorList_base {
47
+ constructor(query: ContributorListQueryData, contributors: ContributorListItem[], totalCount: number);
48
+ }
49
+ export {};
@@ -0,0 +1,31 @@
1
+ import { ListQueryModel } from "../../base/ListQueryModel.js";
2
+ import { Money } from "../../base/Money.js";
3
+ import { DateTime } from "luxon";
4
+ import type { Contributor } from "./Contributor.js";
5
+ import type { ContributorIncomingInvoiceData, ContributorListIncomingInvoiceQueryData } from "./types.js";
6
+ import { ListDataModel } from "../../base/ListDataModel.js";
7
+ import { DataModel } from "../../base/DataModel.js";
8
+ export declare class ContributorIncomingInvoice extends DataModel<ContributorIncomingInvoiceData> {
9
+ readonly contributor: Contributor;
10
+ readonly id: string;
11
+ readonly pdfId: string;
12
+ readonly invoiceNumber: string;
13
+ readonly date: DateTime;
14
+ readonly totalNet: Money;
15
+ readonly totalGross: Money;
16
+ constructor(contributor: Contributor, data: ContributorIncomingInvoiceData);
17
+ }
18
+ export declare class ContributorIncomingInvoiceListQuery extends ListQueryModel<ContributorListIncomingInvoiceQueryData> {
19
+ readonly contributor: Contributor;
20
+ constructor(contributor: Contributor, query?: ContributorListIncomingInvoiceQueryData);
21
+ refine(query: ContributorListIncomingInvoiceQueryData): ContributorIncomingInvoiceListQuery;
22
+ execute: import("../../react.js").AsyncResourceVariant<() => Promise<ContributorIncomingInvoicesList>>;
23
+ getTotalCount: import("../../react.js").AsyncResourceVariant<() => Promise<number>>;
24
+ }
25
+ declare const ContributorIncomingInvoicesList_base: import("polytype").Polytype.ClusteredConstructor<[typeof ContributorIncomingInvoiceListQuery, {
26
+ new (items: ContributorIncomingInvoice[], totalCount: number): ListDataModel<ContributorIncomingInvoice>;
27
+ }]>;
28
+ export declare class ContributorIncomingInvoicesList extends ContributorIncomingInvoicesList_base {
29
+ constructor(contributor: Contributor, query: ContributorListIncomingInvoiceQueryData, invoices: ContributorIncomingInvoice[], totalCount: number);
30
+ }
31
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { ContributorBehaviors } from "./types.js";
2
+ import { MittwaldAPIV2Client } from "@mittwald/api-client";
3
+ export declare const apiContributorBehaviors: (client: MittwaldAPIV2Client) => ContributorBehaviors;
@@ -0,0 +1,2 @@
1
+ export * from "./api.js";
2
+ export * from "./types.js";
@@ -0,0 +1,10 @@
1
+ import type { QueryResponseData } from "../../../base/types.js";
2
+ import type { ContributorData, ContributorIncomingInvoiceData, ContributorListIncomingInvoiceQueryData, ContributorListItemData, ContributorListQueryData } from "../types.js";
3
+ export interface ContributorBehaviors {
4
+ find: (contributorId: string) => Promise<ContributorData | undefined>;
5
+ list: (query?: ContributorListQueryData) => Promise<QueryResponseData<ContributorListItemData>>;
6
+ listIncomingInvoices: (contributorId: string, queryParameters?: ContributorListIncomingInvoiceQueryData) => Promise<{
7
+ items: ContributorIncomingInvoiceData[];
8
+ totalCount: number;
9
+ }>;
10
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./Contributor.js";
2
+ export * from "./ContributorIncomingInvoice.js";
3
+ export * from "./types.js";
@@ -0,0 +1,6 @@
1
+ import type { MittwaldAPIV2 } from "@mittwald/api-client";
2
+ export type ContributorData = MittwaldAPIV2.Components.Schemas.MarketplaceContributor;
3
+ export type ContributorListItemData = MittwaldAPIV2.Operations.ExtensionListContributors.ResponseData[number];
4
+ export type ContributorListQueryData = MittwaldAPIV2.Paths.V2Contributors.Get.Parameters.Query;
5
+ export type ContributorIncomingInvoiceData = MittwaldAPIV2.Operations.ContributorListIncomingInvoices.ResponseData[number];
6
+ export type ContributorListIncomingInvoiceQueryData = MittwaldAPIV2.Paths.V2ContributorsContributorIdInvoicesIncoming.Get.Parameters.Query;
@@ -0,0 +1 @@
1
+ export * from "./Contributor/index.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mittwald/api-models",
3
- "version": "4.245.0",
3
+ "version": "4.247.0",
4
4
  "author": "Mittwald CM Service GmbH & Co. KG <opensource@mittwald.de>",
5
5
  "type": "module",
6
6
  "description": "Collection of domain models for coherent interaction with the API",
@@ -39,7 +39,7 @@
39
39
  "test:unit": "node --experimental-vm-modules $(yarn bin jest)"
40
40
  },
41
41
  "dependencies": {
42
- "@mittwald/api-client": "^4.245.0",
42
+ "@mittwald/api-client": "^4.247.0",
43
43
  "another-deep-freeze": "1.0.0",
44
44
  "context": "^3.0.33",
45
45
  "dinero.js": "^1.9.1",
@@ -56,6 +56,7 @@
56
56
  "@testing-library/react": "^16.3.0",
57
57
  "@types/dinero.js": "^1.9.4",
58
58
  "@types/jest": "^29.5.14",
59
+ "@types/luxon": "^3.7.1",
59
60
  "@types/react": "^18.3.26",
60
61
  "@types/react-dom": "^18.3.7",
61
62
  "@typescript-eslint/eslint-plugin": "^7.18.0",
@@ -66,6 +67,7 @@
66
67
  "eslint-plugin-prettier": "^5.5.4",
67
68
  "jest": "^29.7.0",
68
69
  "jest-environment-jsdom": "^29.7.0",
70
+ "luxon": "^3.7.2",
69
71
  "prettier": "^3.6.2",
70
72
  "react": "^18.3.1",
71
73
  "react-dom": "^18.3.1",
@@ -84,5 +86,5 @@
84
86
  "optional": true
85
87
  }
86
88
  },
87
- "gitHead": "72d940c1af5412db4c49a777181c436eeb93b4bb"
89
+ "gitHead": "fce4b22676b57159348b13403013511c6d22a3cb"
88
90
  }