@voyantjs/suppliers 0.28.1 → 0.29.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,eAAe,EAAE,MAE7B,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,UAGjC,CAAA;AAED,YAAY,EACV,WAAW,EACX,4BAA4B,EAC5B,mBAAmB,EACnB,8BAA8B,EAC9B,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,yBAAyB,EACzB,gBAAgB,EAChB,2BAA2B,EAC3B,YAAY,EACZ,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,4BAA4B,EAC5B,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,SAAS,GACV,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,eAAe,EAAE,MAE7B,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAA;AAED,YAAY,EACV,WAAW,EACX,4BAA4B,EAC5B,mBAAmB,EACnB,8BAA8B,EAC9B,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,yBAAyB,EACzB,gBAAgB,EAChB,2BAA2B,EAC3B,YAAY,EACZ,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,4BAA4B,EAC5B,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,SAAS,GACV,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ export const suppliersModule = {
5
5
  };
6
6
  export const suppliersHonoModule = {
7
7
  module: suppliersModule,
8
+ adminRoutes: supplierRoutes,
8
9
  routes: supplierRoutes,
9
10
  };
10
11
  export { supplierAvailability, supplierContracts, supplierDirectoryProjections, supplierNotes, supplierRates, supplierServices, suppliers, } from "./schema.js";
package/dist/routes.d.ts CHANGED
@@ -337,8 +337,8 @@ export declare const supplierRoutes: import("hono/hono-base").HonoBase<Env, {
337
337
  contactName: string | null;
338
338
  contactEmail: string | null;
339
339
  contactPhone: string | null;
340
- id: string;
341
340
  name: string;
341
+ id: string;
342
342
  createdAt: string;
343
343
  updatedAt: string;
344
344
  status: "pending" | "active" | "inactive";
@@ -557,8 +557,8 @@ export declare const supplierRoutes: import("hono/hono-base").HonoBase<Env, {
557
557
  metadata: {
558
558
  [x: string]: import("hono/utils/types").JSONValue;
559
559
  } | null;
560
- id: string;
561
560
  name: string;
561
+ id: string;
562
562
  createdAt: string;
563
563
  updatedAt: string;
564
564
  email: string | null;
@@ -709,9 +709,9 @@ export declare const supplierRoutes: import("hono/hono-base").HonoBase<Env, {
709
709
  };
710
710
  output: {
711
711
  data: {
712
+ name: string;
712
713
  duration: string | null;
713
714
  id: string;
714
- name: string;
715
715
  createdAt: string;
716
716
  updatedAt: string;
717
717
  description: string | null;
@@ -855,8 +855,8 @@ export declare const supplierRoutes: import("hono/hono-base").HonoBase<Env, {
855
855
  };
856
856
  output: {
857
857
  data: {
858
- id: string;
859
858
  name: string;
859
+ id: string;
860
860
  createdAt: string;
861
861
  currency: string;
862
862
  notes: string | null;
@@ -45,8 +45,8 @@ export declare function createSupplier(db: PostgresJsDatabase, data: CreateSuppl
45
45
  contactName: string | null;
46
46
  contactEmail: string | null;
47
47
  contactPhone: string | null;
48
- id: string;
49
48
  name: string;
49
+ id: string;
50
50
  createdAt: Date;
51
51
  updatedAt: Date;
52
52
  status: "pending" | "active" | "inactive";
@@ -1 +1 @@
1
- {"version":3,"file":"service-core.d.ts","sourceRoot":"","sources":["../src/service-core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAG5B,wBAAsB,aAAa,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;GA2DnF;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;kEAQvE;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;GA2CrF;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,kBAAkB,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;UAqD1B;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;UAMtE"}
1
+ {"version":3,"file":"service-core.d.ts","sourceRoot":"","sources":["../src/service-core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAG5B,wBAAsB,aAAa,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;GA2FnF;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;kEAQvE;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;GA2CrF;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,kBAAkB,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;UAqD1B;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM;;UAMtE"}
@@ -1,4 +1,4 @@
1
- import { and, eq, sql } from "drizzle-orm";
1
+ import { and, asc, desc, eq, sql } from "drizzle-orm";
2
2
  import { supplierDirectoryProjections, suppliers } from "./schema.js";
3
3
  import { hydrateSuppliers, syncSupplierIdentity } from "./service-shared.js";
4
4
  export async function listSuppliers(db, query) {
@@ -12,6 +12,17 @@ export async function listSuppliers(db, query) {
12
12
  if (query.primaryFacilityId) {
13
13
  conditions.push(eq(suppliers.primaryFacilityId, query.primaryFacilityId));
14
14
  }
15
+ if (query.defaultCurrency) {
16
+ conditions.push(eq(suppliers.defaultCurrency, query.defaultCurrency));
17
+ }
18
+ if (query.country) {
19
+ conditions.push(sql `exists (
20
+ select 1
21
+ from ${supplierDirectoryProjections}
22
+ where ${supplierDirectoryProjections.supplierId} = ${suppliers.id}
23
+ and ${supplierDirectoryProjections.country} = ${query.country}
24
+ )`);
25
+ }
15
26
  if (query.search) {
16
27
  const term = `%${query.search}%`;
17
28
  conditions.push(sql `(
@@ -36,6 +47,21 @@ export async function listSuppliers(db, query) {
36
47
  )`);
37
48
  }
38
49
  const where = conditions.length > 0 ? and(...conditions) : undefined;
50
+ const sortColumn = (() => {
51
+ switch (query.sortBy) {
52
+ case "name":
53
+ return suppliers.name;
54
+ case "type":
55
+ return suppliers.type;
56
+ case "status":
57
+ return suppliers.status;
58
+ case "defaultCurrency":
59
+ return suppliers.defaultCurrency;
60
+ default:
61
+ return suppliers.createdAt;
62
+ }
63
+ })();
64
+ const sortFn = query.sortDir === "asc" ? asc : desc;
39
65
  const [rows, countResult] = await Promise.all([
40
66
  db
41
67
  .select()
@@ -43,7 +69,7 @@ export async function listSuppliers(db, query) {
43
69
  .where(where)
44
70
  .limit(query.limit)
45
71
  .offset(query.offset)
46
- .orderBy(suppliers.createdAt),
72
+ .orderBy(sortFn(sortColumn), desc(suppliers.createdAt)),
47
73
  db.select({ count: sql `count(*)::int` }).from(suppliers).where(where),
48
74
  ]);
49
75
  return {
@@ -31,8 +31,8 @@ export declare function listNamedContacts(db: PostgresJsDatabase, supplierId: st
31
31
  }[]>;
32
32
  export declare function createNamedContact(db: PostgresJsDatabase, supplierId: string, data: InsertNamedContactForEntity): Promise<{
33
33
  metadata: Record<string, unknown> | null;
34
- id: string;
35
34
  name: string;
35
+ id: string;
36
36
  createdAt: Date;
37
37
  updatedAt: Date;
38
38
  email: string | null;
@@ -429,9 +429,9 @@ export declare function listServices(db: PostgresJsDatabase, supplierId: string)
429
429
  }, {}, {}>;
430
430
  }>, "where" | "orderBy">;
431
431
  export declare function createService(db: PostgresJsDatabase, supplierId: string, data: CreateServiceInput): Promise<{
432
+ name: string;
432
433
  duration: string | null;
433
434
  id: string;
434
- name: string;
435
435
  createdAt: Date;
436
436
  updatedAt: Date;
437
437
  description: string | null;
@@ -884,8 +884,8 @@ export declare function listRates(db: PostgresJsDatabase, serviceId: string): Om
884
884
  }, {}, {}>;
885
885
  }>, "where" | "orderBy">;
886
886
  export declare function createRate(db: PostgresJsDatabase, serviceId: string, data: CreateRateInput): Promise<{
887
- id: string;
888
887
  name: string;
888
+ id: string;
889
889
  createdAt: Date;
890
890
  currency: string;
891
891
  notes: string | null;
@@ -140,6 +140,17 @@ export declare const selectSupplierSchema: z.ZodObject<{
140
140
  createdAt: z.ZodCoercedDate<unknown>;
141
141
  updatedAt: z.ZodCoercedDate<unknown>;
142
142
  }, z.core.$strip>;
143
+ export declare const supplierListSortFieldSchema: z.ZodEnum<{
144
+ name: "name";
145
+ createdAt: "createdAt";
146
+ status: "status";
147
+ type: "type";
148
+ defaultCurrency: "defaultCurrency";
149
+ }>;
150
+ export declare const supplierListSortDirSchema: z.ZodEnum<{
151
+ asc: "asc";
152
+ desc: "desc";
153
+ }>;
143
154
  export declare const supplierListQuerySchema: z.ZodObject<{
144
155
  type: z.ZodOptional<z.ZodEnum<{
145
156
  other: "other";
@@ -156,7 +167,20 @@ export declare const supplierListQuerySchema: z.ZodObject<{
156
167
  inactive: "inactive";
157
168
  }>>;
158
169
  primaryFacilityId: z.ZodOptional<z.ZodString>;
170
+ country: z.ZodOptional<z.ZodString>;
171
+ defaultCurrency: z.ZodOptional<z.ZodString>;
159
172
  search: z.ZodOptional<z.ZodString>;
173
+ sortBy: z.ZodDefault<z.ZodEnum<{
174
+ name: "name";
175
+ createdAt: "createdAt";
176
+ status: "status";
177
+ type: "type";
178
+ defaultCurrency: "defaultCurrency";
179
+ }>>;
180
+ sortDir: z.ZodDefault<z.ZodEnum<{
181
+ asc: "asc";
182
+ desc: "desc";
183
+ }>>;
160
184
  limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
161
185
  offset: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
162
186
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAoEvB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAqB,CAAA;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA+B,CAAA;AAChE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI/B,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;iBAOlC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;iBAGxC,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAejE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAAoB,CAAA;AACpD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAA8B,CAAA;AAE9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAgB/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;iBAAiB,CAAA;AAC9C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;iBAA2B,CAAA;AAExD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAIzD,eAAO,MAAM,wBAAwB;;iBAEnC,CAAA;AAIF,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAA;AAeF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAAqB,CAAA;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAA+B,CAAA"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAoEvB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAqB,CAAA;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA+B,CAAA;AAChE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI/B,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;EAMtC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;EAA0B,CAAA;AAEhE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWlC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;iBAGxC,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAejE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAAoB,CAAA;AACpD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;iBAA8B,CAAA;AAE9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAC/D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAgB/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;iBAAiB,CAAA;AAC9C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;iBAA2B,CAAA;AAExD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAIzD,eAAO,MAAM,wBAAwB;;iBAEnC,CAAA;AAIF,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAA;AAeF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAAqB,CAAA;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAA+B,CAAA"}
@@ -65,11 +65,23 @@ export const selectSupplierSchema = supplierCoreSchema.extend({
65
65
  createdAt: z.coerce.date(),
66
66
  updatedAt: z.coerce.date(),
67
67
  });
68
+ export const supplierListSortFieldSchema = z.enum([
69
+ "name",
70
+ "type",
71
+ "status",
72
+ "defaultCurrency",
73
+ "createdAt",
74
+ ]);
75
+ export const supplierListSortDirSchema = z.enum(["asc", "desc"]);
68
76
  export const supplierListQuerySchema = z.object({
69
77
  type: supplierTypeSchema.optional(),
70
78
  status: supplierStatusSchema.optional(),
71
79
  primaryFacilityId: z.string().optional(),
80
+ country: z.string().optional(),
81
+ defaultCurrency: z.string().optional(),
72
82
  search: z.string().optional(),
83
+ sortBy: supplierListSortFieldSchema.default("createdAt"),
84
+ sortDir: supplierListSortDirSchema.default("desc"),
73
85
  limit: z.coerce.number().int().min(1).max(100).default(50),
74
86
  offset: z.coerce.number().int().min(0).default(0),
75
87
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/suppliers",
3
- "version": "0.28.1",
3
+ "version": "0.29.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -29,11 +29,11 @@
29
29
  "drizzle-orm": "^0.45.2",
30
30
  "hono": "^4.12.10",
31
31
  "zod": "^4.3.6",
32
- "@voyantjs/core": "0.28.1",
33
- "@voyantjs/db": "0.28.1",
34
- "@voyantjs/facilities": "0.28.1",
35
- "@voyantjs/hono": "0.28.1",
36
- "@voyantjs/identity": "0.28.1"
32
+ "@voyantjs/core": "0.29.0",
33
+ "@voyantjs/db": "0.29.0",
34
+ "@voyantjs/facilities": "0.29.0",
35
+ "@voyantjs/hono": "0.29.0",
36
+ "@voyantjs/identity": "0.29.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "^6.0.2",