autosync_backend2 1.0.74 → 1.0.76

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.
package/dist/index.d.ts CHANGED
@@ -1308,6 +1308,7 @@ declare const app: Elysia<"", {
1308
1308
  excel: {
1309
1309
  post: {
1310
1310
  body: {
1311
+ branchId?: string | undefined;
1311
1312
  file: File;
1312
1313
  };
1313
1314
  params: {};
@@ -1316,8 +1317,8 @@ declare const app: Elysia<"", {
1316
1317
  response: {
1317
1318
  200: AsyncGenerator<{
1318
1319
  percent: number;
1319
- status: string;
1320
- }, void, unknown>;
1320
+ count: number;
1321
+ }, import("elysia/dist/error").ElysiaCustomStatusResponse<"Bad Request", readonly import("@sinclair/typebox/build/cjs/errors").ValueError[], 400> | undefined, unknown>;
1321
1322
  422: {
1322
1323
  type: "validation";
1323
1324
  on: string;
@@ -1507,6 +1508,138 @@ declare const app: Elysia<"", {
1507
1508
  };
1508
1509
  };
1509
1510
  };
1511
+ } & {
1512
+ inventory: {
1513
+ supplier: {
1514
+ get: {
1515
+ body: unknown;
1516
+ params: {};
1517
+ query: {
1518
+ pagination: {
1519
+ size: number;
1520
+ page: number;
1521
+ };
1522
+ };
1523
+ headers: unknown;
1524
+ response: {
1525
+ 200: {
1526
+ totalCount: number;
1527
+ totalPage: number;
1528
+ result: {
1529
+ name: string;
1530
+ image: string | null;
1531
+ id: string;
1532
+ createdAt: string;
1533
+ updatedAt: string;
1534
+ deletedAt: string | null;
1535
+ }[];
1536
+ };
1537
+ 422: {
1538
+ type: "validation";
1539
+ on: string;
1540
+ summary?: string;
1541
+ message?: string;
1542
+ found?: unknown;
1543
+ property?: string;
1544
+ expected?: string;
1545
+ };
1546
+ };
1547
+ };
1548
+ };
1549
+ } & {
1550
+ supplier: {
1551
+ post: {
1552
+ body: {
1553
+ image?: string | null | undefined;
1554
+ name: string;
1555
+ };
1556
+ params: {};
1557
+ query: unknown;
1558
+ headers: unknown;
1559
+ response: {
1560
+ 200: {
1561
+ name: string;
1562
+ id: string;
1563
+ image: string | null;
1564
+ createdAt: string;
1565
+ updatedAt: string;
1566
+ deletedAt: string | null;
1567
+ };
1568
+ 422: {
1569
+ type: "validation";
1570
+ on: string;
1571
+ summary?: string;
1572
+ message?: string;
1573
+ found?: unknown;
1574
+ property?: string;
1575
+ expected?: string;
1576
+ };
1577
+ };
1578
+ };
1579
+ };
1580
+ } & {
1581
+ supplier: {
1582
+ ":id": {
1583
+ put: {
1584
+ body: {
1585
+ image?: string | null | undefined;
1586
+ name: string;
1587
+ };
1588
+ params: {
1589
+ id: string;
1590
+ };
1591
+ query: unknown;
1592
+ headers: unknown;
1593
+ response: {
1594
+ 200: {
1595
+ name: string;
1596
+ image: string | null;
1597
+ id: string;
1598
+ createdAt: string;
1599
+ updatedAt: string;
1600
+ deletedAt: string | null;
1601
+ };
1602
+ 404: "Нийлүүлэгч олдсонгүй.";
1603
+ 422: {
1604
+ type: "validation";
1605
+ on: string;
1606
+ summary?: string;
1607
+ message?: string;
1608
+ found?: unknown;
1609
+ property?: string;
1610
+ expected?: string;
1611
+ };
1612
+ };
1613
+ };
1614
+ };
1615
+ };
1616
+ } & {
1617
+ supplier: {
1618
+ ":id": {
1619
+ delete: {
1620
+ body: unknown;
1621
+ params: {
1622
+ id: string;
1623
+ };
1624
+ query: unknown;
1625
+ headers: unknown;
1626
+ response: {
1627
+ 200: undefined;
1628
+ 404: "Нийлүүлэгч олдсонгүй.";
1629
+ 422: {
1630
+ type: "validation";
1631
+ on: string;
1632
+ summary?: string;
1633
+ message?: string;
1634
+ found?: unknown;
1635
+ property?: string;
1636
+ expected?: string;
1637
+ };
1638
+ };
1639
+ };
1640
+ };
1641
+ };
1642
+ };
1510
1643
  };
1511
1644
  } & {
1512
1645
  api: {
package/dist/index.js CHANGED
@@ -15782,6 +15782,7 @@ __export(exports_schema, {
15782
15782
  merchantTable: () => merchantTable,
15783
15783
  merchantSchema: () => merchantSchema,
15784
15784
  logTable: () => logTable,
15785
+ inventorySupplierTable: () => inventorySupplierTable,
15785
15786
  inventorySchema: () => inventorySchema,
15786
15787
  inventoryRefundTable: () => inventoryRefundTable,
15787
15788
  inventoryLogTable: () => inventoryLogTable,
@@ -21017,6 +21018,11 @@ var inventoryRefundTable = inventorySchema.table("refund", {
21017
21018
  userId: uuid().notNull(),
21018
21019
  approvedUserId: uuid()
21019
21020
  });
21021
+ var inventorySupplierTable = inventorySchema.table("supplier", {
21022
+ ...base_schema_helper_default,
21023
+ name: varchar().notNull(),
21024
+ image: varchar()
21025
+ });
21020
21026
  // src/lib/db/schema/common.schema.ts
21021
21027
  var logTable = pgTable("log", {
21022
21028
  ...base_schema_helper_default,
@@ -73202,6 +73208,10 @@ var inventoryTags = [
73202
73208
  {
73203
73209
  name: "InventoryRefund",
73204
73210
  description: "\u0410\u0433\u0443\u0443\u043B\u0430\u0445\u044B\u043D \u0431\u0443\u0446\u0430\u0430\u043B\u0442"
73211
+ },
73212
+ {
73213
+ name: "InventorySupplier",
73214
+ description: "\u0410\u0433\u0443\u0443\u043B\u0430\u0445\u044B\u043D \u043D\u0438\u0439\u043B\u04AF\u04AF\u043B\u044D\u0433\u0447"
73205
73215
  }
73206
73216
  ];
73207
73217
  var merchantTags = [
@@ -95937,8 +95947,8 @@ var version2 = XLSX.version;
95937
95947
  // src/routes/inventory/log/logic.ts
95938
95948
  var InventoryLogLogic;
95939
95949
  ((InventoryLogLogic) => {
95940
- InventoryLogLogic.select = async (query) => {
95941
- const filter = and(eq(inventoryItemTable.supplierId, query.supplierId ?? "").if(query.supplierId), or(ilike(inventoryItemTable.name, `%${query.search}%`), ilike(inventoryItemTable.barCode, `%${query.search}%`), ilike(inventoryItemTable.oen, `%${query.search}%`), ilike(inventoryItemTable.partNumber, `%${query.search}%`))?.if(query.search), ilike(inventoryItemTable.shelfNumber, `%${query.shelfNumber}%`).if(query.shelfNumber), eq(inventoryLogTable.createdUserId, query.createdUserId ?? "").if(query.createdUserId), eq(sql`date(${inventoryLogTable.createdAt})`, query.createdAt ?? "").if(query.createdAt), eq(inventoryLogTable.sellPrice, query.sellPrice ?? 0).if(query.sellPrice));
95950
+ InventoryLogLogic.select = async (query, user2) => {
95951
+ const filter = and(logic_default.getInventoryItemFilter(query, user2), eq(inventoryLogTable.createdUserId, query.createdUserId ?? "").if(query.createdUserId), eq(sql`date(${inventoryLogTable.createdAt})`, query.createdAt ?? "").if(query.createdAt), eq(inventoryLogTable.sellPrice, query.sellPrice ?? 0).if(query.sellPrice));
95942
95952
  const columns = getTableColumns(inventoryLogTable);
95943
95953
  const base = db_default.select({
95944
95954
  ...columns,
@@ -95980,7 +95990,7 @@ var InventoryLogLogic;
95980
95990
  });
95981
95991
  };
95982
95992
  })(InventoryLogLogic ||= {});
95983
- var logic_default = InventoryLogLogic;
95993
+ var logic_default2 = InventoryLogLogic;
95984
95994
 
95985
95995
  // node_modules/drizzle-typebox/index.mjs
95986
95996
  var CONSTANTS = {
@@ -96300,7 +96310,8 @@ var selectInventoryItemSchema = t.Composite([
96300
96310
  PaginationSchema
96301
96311
  ]);
96302
96312
  var importInventoryItemSchema = t.Object({
96303
- file: t.File()
96313
+ file: t.File(),
96314
+ branchId: t.Optional(t.String({ format: "uuid" }))
96304
96315
  });
96305
96316
 
96306
96317
  // src/routes/inventory/item/logic.ts
@@ -96339,7 +96350,7 @@ var InventoryItemLogic;
96339
96350
  merchantId: body.merchantId ?? user2.merchantId
96340
96351
  }).returning();
96341
96352
  if (body.quantity) {
96342
- await logic_default.create({
96353
+ await logic_default2.create({
96343
96354
  itemId: inventoryItem.id,
96344
96355
  quantity: body.quantity,
96345
96356
  description: "\u0413\u0430\u0440\u0430\u0430\u0440 \u0431\u0430\u0440\u0430\u0430 \u043D\u044D\u043C\u0441\u044D\u043D.",
@@ -96364,32 +96375,33 @@ var InventoryItemLogic;
96364
96375
  throw new Error("\u0410\u0433\u0443\u0443\u043B\u0430\u0445\u044B\u043D \u0431\u0430\u0440\u0430\u0430 \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439.");
96365
96376
  }
96366
96377
  };
96367
- InventoryItemLogic.importExcel = async function* ({ file }, user2) {
96378
+ InventoryItemLogic.importExcel = async function* ({ file, branchId }, user2) {
96368
96379
  const BATCH_SIZE = 1000;
96369
96380
  const buffer = await file.arrayBuffer();
96370
96381
  const workbook = readSync(buffer, { type: "buffer" });
96371
96382
  const sheetName = workbook.SheetNames[0];
96372
96383
  const sheet = workbook.Sheets[sheetName];
96373
- const rows = utils.sheet_to_json(sheet, { defval: null });
96374
- const parsed = exports_value2.Parse(t.Array(createInventoryItemSchema), rows);
96384
+ const rows = utils.sheet_to_json(sheet);
96385
+ const schema3 = t.Array(createInventoryItemSchema);
96386
+ let parsed = [];
96387
+ try {
96388
+ parsed = exports_value2.Parse(schema3, rows);
96389
+ } catch (err2) {
96390
+ return status("Bad Request", [...exports_value2.Errors(schema3, parsed)]);
96391
+ }
96375
96392
  for (let i2 = 0;i2 < parsed.length; i2 += BATCH_SIZE) {
96376
96393
  const batch = parsed.slice(i2, i2 + BATCH_SIZE);
96377
- if (batch.length !== 0) {
96378
- await db_default.insert(inventoryItemTable).values(batch.map((item) => ({
96379
- ...item,
96380
- branchId: item.branchId ?? user2.branchId,
96381
- merchantId: item.merchantId ?? user2.merchantId
96382
- })));
96383
- yield {
96384
- percent: Math.round(batch.length / parsed.length * 100),
96385
- status: "running"
96386
- };
96387
- }
96394
+ await db_default.insert(inventoryItemTable).values(batch.map((item) => ({
96395
+ ...item,
96396
+ branchId: branchId ?? user2.branchId,
96397
+ merchantId: user2.merchantId
96398
+ })));
96399
+ const percent = Math.round((i2 * BATCH_SIZE + batch.length) / parsed.length * 100);
96400
+ yield {
96401
+ percent: percent >= 100 ? 100 : percent,
96402
+ count: i2
96403
+ };
96388
96404
  }
96389
- yield {
96390
- percent: 100,
96391
- status: "completed"
96392
- };
96393
96405
  };
96394
96406
  InventoryItemLogic.downloadExcelTemplate = () => {
96395
96407
  const workbook = utils.book_new();
@@ -96406,7 +96418,7 @@ var InventoryItemLogic;
96406
96418
  if (!currentInventory) {
96407
96419
  return status("Not Found", "\u0410\u0433\u0443\u0443\u043B\u0430\u0445\u044B\u043D \u0431\u0430\u0440\u0430\u0430 \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439.");
96408
96420
  }
96409
- await logic_default.create({
96421
+ await logic_default2.create({
96410
96422
  itemId: input.id,
96411
96423
  quantity: input.quantity,
96412
96424
  description: input.description,
@@ -96417,7 +96429,7 @@ var InventoryItemLogic;
96417
96429
  }).where(eq(inventoryItemTable.id, input.id));
96418
96430
  };
96419
96431
  })(InventoryItemLogic ||= {});
96420
- var logic_default2 = InventoryItemLogic;
96432
+ var logic_default = InventoryItemLogic;
96421
96433
 
96422
96434
  // src/routes/inventory/item/index.ts
96423
96435
  var itemRoutes = new Elysia({
@@ -96425,7 +96437,7 @@ var itemRoutes = new Elysia({
96425
96437
  }).use(better_auth_default).use(permission_default).guard({
96426
96438
  auth: true,
96427
96439
  tags: ["InventoryItem"]
96428
- }).get("/", async ({ query, user: user2 }) => await logic_default2.select(query, user2), {
96440
+ }).get("/", async ({ query, user: user2 }) => await logic_default.select(query, user2), {
96429
96441
  query: selectInventoryItemSchema,
96430
96442
  permission: ["INVENTORY_ITEM_SELECT_OWN", "INVENTORY_ITEM_SELECT_ADMIN"],
96431
96443
  beforeHandle({ status: status2, query, permissions }) {
@@ -96433,7 +96445,7 @@ var itemRoutes = new Elysia({
96433
96445
  return status2("Forbidden", "\u0417\u04E9\u0432\u0445\u04E9\u043D \u04E9\u04E9\u0440\u0438\u0439\u043D \u0441\u0430\u043B\u0431\u0430\u0440\u044B\u043D \u0431\u0430\u0440\u0430\u0430 \u0445\u0430\u0440\u0430\u0445 \u0431\u043E\u043B\u043E\u043C\u0436\u0442\u043E\u0439.");
96434
96446
  }
96435
96447
  }
96436
- }).post("/", async ({ body, user: user2 }) => await logic_default2.create(body, user2), {
96448
+ }).post("/", async ({ body, user: user2 }) => await logic_default.create(body, user2), {
96437
96449
  body: createInventoryItemSchema,
96438
96450
  permission: ["INVENTORY_ITEM_CREATE_OWN", "INVENTORY_ITEM_CREATE_ADMIN"],
96439
96451
  beforeHandle({ status: status2, body, permissions }) {
@@ -96441,15 +96453,20 @@ var itemRoutes = new Elysia({
96441
96453
  return status2("Forbidden", "\u0417\u04E9\u0432\u0445\u04E9\u043D \u04E9\u04E9\u0440\u0438\u0439\u043D \u0441\u0430\u043B\u0431\u0430\u0440\u044B\u043D \u0431\u0430\u0440\u0430\u0430 \u04AF\u04AF\u0441\u0433\u044D\u0445 \u0431\u043E\u043B\u043E\u043C\u0436\u0442\u043E\u0439.");
96442
96454
  }
96443
96455
  }
96444
- }).post("/excel", async ({ body, user: user2 }) => logic_default2.importExcel(body, user2), {
96456
+ }).post("/excel", async ({ body, user: user2 }) => logic_default.importExcel(body, user2), {
96445
96457
  body: importInventoryItemSchema,
96446
- permission: ["INVENTORY_ITEM_CREATE_OWN", "INVENTORY_ITEM_CREATE_ADMIN"]
96458
+ permission: ["INVENTORY_ITEM_CREATE_OWN", "INVENTORY_ITEM_CREATE_ADMIN"],
96459
+ beforeHandle: ({ permissions, body: { branchId }, status: status2 }) => {
96460
+ if (!permissions.includes("INVENTORY_ITEM_CREATE_ADMIN") && branchId) {
96461
+ return status2("Forbidden", "\u0417\u04E9\u0432\u0445\u04E9\u043D \u04E9\u04E9\u0440\u0438\u0439\u043D \u0441\u0430\u043B\u0431\u0430\u0440\u044B\u043D \u0431\u0430\u0440\u0430\u0430 \u043D\u044D\u043C\u044D\u0445 \u0431\u043E\u043B\u043E\u043C\u0436\u0442\u043E\u0439.");
96462
+ }
96463
+ }
96447
96464
  }).get("/excel", async () => "").guard({
96448
96465
  params: IdSchema
96449
- }).put("/:id", async ({ params: { id }, body, user: user2, permissions }) => await logic_default2.update(id, body, user2, permissions), {
96466
+ }).put("/:id", async ({ params: { id }, body, user: user2, permissions }) => await logic_default.update(id, body, user2, permissions), {
96450
96467
  body: updateInventoryItemSchema,
96451
96468
  permission: ["INVENTORY_ITEM_UPDATE_OWN", "INVENTORY_ITEM_UPDATE_ADMIN"]
96452
- }).delete("/:id", async ({ params: { id }, user: user2, permissions }) => await logic_default2.remove(id, user2, permissions), {
96469
+ }).delete("/:id", async ({ params: { id }, user: user2, permissions }) => await logic_default.remove(id, user2, permissions), {
96453
96470
  permission: ["INVENTORY_ITEM_DELETE_OWN", "INVENTORY_ITEM_DELETE_ADMIN"]
96454
96471
  });
96455
96472
  var item_default = itemRoutes;
@@ -96466,7 +96483,7 @@ var selectInventoryLogSchema = t.Composite([
96466
96483
  // src/routes/inventory/log/index.ts
96467
96484
  var logRoutes = new Elysia({
96468
96485
  prefix: "/log"
96469
- }).use(better_auth_default).use(permission_default).guard({ auth: true, tags: ["InventoryLog"] }).get("/", ({ query }) => logic_default.select(query), {
96486
+ }).use(better_auth_default).use(permission_default).guard({ auth: true, tags: ["InventoryLog"] }).get("/", ({ query, user: user2 }) => logic_default2.select(query, user2), {
96470
96487
  query: selectInventoryLogSchema,
96471
96488
  permission: ["INVENTORY_LOG_SELECT_OWN", "INVENTORY_LOG_SELECT_ADMIN"],
96472
96489
  beforeHandle({ status: status2, query, permissions }) {
@@ -96477,10 +96494,73 @@ var logRoutes = new Elysia({
96477
96494
  });
96478
96495
  var log_default = logRoutes;
96479
96496
 
96497
+ // src/routes/inventory/supplier/logic.ts
96498
+ var InventorySupplierLogic;
96499
+ ((InventorySupplierLogic) => {
96500
+ InventorySupplierLogic.select = async (query) => {
96501
+ const columns = getTableColumns(inventorySupplierTable);
96502
+ const baseQuery = db_default.select({
96503
+ ...columns,
96504
+ totalCount: sql`count(*) over()`.mapWith(Number)
96505
+ }).from(inventorySupplierTable).where(softDeletedFilter(inventorySupplierTable)).$dynamic();
96506
+ const suppliers = await pagination_helper_default(baseQuery, query.pagination);
96507
+ const content = {
96508
+ totalCount: suppliers[0]?.totalCount ?? 0,
96509
+ totalPage: suppliers.length === 0 ? 0 : Math.ceil(suppliers[0].totalCount / query.pagination.size)
96510
+ };
96511
+ return {
96512
+ result: suppliers.map(({ totalCount, ...i2 }) => i2),
96513
+ ...content
96514
+ };
96515
+ };
96516
+ InventorySupplierLogic.create = async (body) => {
96517
+ const [supplier] = await db_default.insert(inventorySupplierTable).values(body).returning();
96518
+ return supplier;
96519
+ };
96520
+ InventorySupplierLogic.update = async (id, body) => {
96521
+ const [supplier] = await db_default.update(inventorySupplierTable).set(body).where(eq(inventorySupplierTable.id, id)).returning();
96522
+ if (!supplier) {
96523
+ return status("Not Found", "\u041D\u0438\u0439\u043B\u04AF\u04AF\u043B\u044D\u0433\u0447 \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439.");
96524
+ }
96525
+ return supplier;
96526
+ };
96527
+ InventorySupplierLogic.remove = async (id) => {
96528
+ const [supplier] = await db_default.update(inventorySupplierTable).set({
96529
+ deletedAt: sql`now()`
96530
+ }).where(eq(inventorySupplierTable.id, id)).returning();
96531
+ if (!supplier) {
96532
+ return status("Not Found", "\u041D\u0438\u0439\u043B\u04AF\u04AF\u043B\u044D\u0433\u0447 \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439.");
96533
+ }
96534
+ };
96535
+ })(InventorySupplierLogic ||= {});
96536
+ var logic_default3 = InventorySupplierLogic;
96537
+
96538
+ // src/routes/inventory/supplier/schema.ts
96539
+ var create3 = createInsertSchema(inventorySupplierTable);
96540
+ var update2 = createInsertSchema(inventorySupplierTable);
96541
+ var createInventorySupplierSchema = OmitBaseSchema(create3);
96542
+ var updateInventorySupplierSchema = OmitBaseSchema(update2);
96543
+
96544
+ // src/routes/inventory/supplier/index.ts
96545
+ var supplierRoutes = new Elysia({
96546
+ prefix: "/supplier"
96547
+ }).guard({
96548
+ tags: ["InventorySupplier"]
96549
+ }).get("/", async ({ query }) => await logic_default3.select(query), {
96550
+ query: PaginationSchema
96551
+ }).post("/", async ({ body }) => await logic_default3.create(body), {
96552
+ body: createInventorySupplierSchema
96553
+ }).guard({
96554
+ params: IdSchema
96555
+ }).put("/:id", async ({ params: { id }, body }) => await logic_default3.update(id, body), {
96556
+ body: updateInventorySupplierSchema
96557
+ }).delete("/:id", async ({ params: { id } }) => await logic_default3.remove(id));
96558
+ var supplier_default = supplierRoutes;
96559
+
96480
96560
  // src/routes/inventory/index.ts
96481
96561
  var inventorySchemaRoutes = new Elysia({
96482
96562
  prefix: "/inventory"
96483
- }).use(item_default).use(log_default);
96563
+ }).use(item_default).use(log_default).use(supplier_default);
96484
96564
  var inventory_default = inventorySchemaRoutes;
96485
96565
 
96486
96566
  // src/lib/db/helpers/crud.helper.ts
@@ -96565,18 +96645,18 @@ var MerchantBranchLogic;
96565
96645
  return branch;
96566
96646
  };
96567
96647
  })(MerchantBranchLogic ||= {});
96568
- var logic_default3 = MerchantBranchLogic;
96648
+ var logic_default4 = MerchantBranchLogic;
96569
96649
 
96570
96650
  // src/routes/merchant/branch/schema.ts
96571
- var create3 = createInsertSchema(branchTable, {
96651
+ var create4 = createInsertSchema(branchTable, {
96572
96652
  phone: (schema3) => t.RegExp(/^\d{8}$/, { ...schema3 }),
96573
96653
  email: (schema3) => t.String({ ...schema3, format: "email" }),
96574
96654
  merchantId: (schema3) => t.Optional(schema3)
96575
96655
  });
96576
- var update2 = createUpdateSchema(branchTable);
96656
+ var update3 = createUpdateSchema(branchTable);
96577
96657
  var select2 = createSelectSchema(branchTable);
96578
- var createBranchSchema = OmitBaseSchema(create3);
96579
- var updateBranchSchema = OmitBaseSchema(update2);
96658
+ var createBranchSchema = OmitBaseSchema(create4);
96659
+ var updateBranchSchema = OmitBaseSchema(update3);
96580
96660
  var selectBranchSchema = t.Composite([
96581
96661
  t.Partial(select2),
96582
96662
  PaginationSchema
@@ -96592,7 +96672,7 @@ var branchRoutes = new Elysia({
96592
96672
  }).get("/", async ({ query }) => await service.get(query), {
96593
96673
  query: selectBranchSchema,
96594
96674
  permission: ["MERCHANT_BRANCH_SELECT_OWN", "MERCHANT_BRANCH_SELECT_ADMIN"]
96595
- }).post("/", async ({ body, user: user2, permissions }) => await logic_default3.create(body, user2, permissions), {
96675
+ }).post("/", async ({ body, user: user2, permissions }) => await logic_default4.create(body, user2, permissions), {
96596
96676
  body: createBranchSchema,
96597
96677
  permission: "MERCHANT_BRANCH_CREATE"
96598
96678
  }).guard({
@@ -96601,14 +96681,14 @@ var branchRoutes = new Elysia({
96601
96681
  var branch_default = branchRoutes;
96602
96682
 
96603
96683
  // src/routes/merchant/merchant/schema.ts
96604
- var create4 = createInsertSchema(merchantTable);
96605
- var update3 = createUpdateSchema(merchantTable);
96684
+ var create5 = createInsertSchema(merchantTable);
96685
+ var update4 = createUpdateSchema(merchantTable);
96606
96686
  var select3 = createSelectSchema(merchantTable, {
96607
96687
  phone: t.RegExp(/^\d{8}$/),
96608
96688
  email: t.String({ format: "email" })
96609
96689
  });
96610
- var createMerchantSchema = OmitBaseSchema(create4);
96611
- var updateMerchantSchema = OmitBaseSchema(update3);
96690
+ var createMerchantSchema = OmitBaseSchema(create5);
96691
+ var updateMerchantSchema = OmitBaseSchema(update4);
96612
96692
  var selectMerchantSchema = t.Composite([
96613
96693
  t.Partial(t.Pick(select3, ["phone", "regNumber", "serviceName", "isActive"])),
96614
96694
  PaginationSchema
@@ -96646,10 +96726,10 @@ var merchantRoutes = new Elysia({
96646
96726
  var merchant_default = merchantRoutes;
96647
96727
 
96648
96728
  // src/routes/merchant/package/schema.ts
96649
- var create5 = createInsertSchema(packageTable);
96650
- var update4 = createUpdateSchema(packageTable);
96651
- var createPackageSchema = OmitBaseSchema(create5);
96652
- var updatePackageSchema = OmitBaseSchema(update4);
96729
+ var create6 = createInsertSchema(packageTable);
96730
+ var update5 = createUpdateSchema(packageTable);
96731
+ var createPackageSchema = OmitBaseSchema(create6);
96732
+ var updatePackageSchema = OmitBaseSchema(update5);
96653
96733
 
96654
96734
  // src/routes/merchant/package/index.ts
96655
96735
  var service3 = new CrudHelper(packageTable, "\u0411\u0430\u0433\u0446 \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439.");
@@ -96864,13 +96944,13 @@ var permissionList = localPermissionList;
96864
96944
  // src/routes/permission/logic.ts
96865
96945
  var PermissionLogic;
96866
96946
  ((PermissionLogic) => {
96867
- PermissionLogic.addPermission = async (body) => {
96947
+ PermissionLogic.addPermission = async (body, tdb = db_default) => {
96868
96948
  const insert = body.permissions.map((permission) => ({
96869
96949
  userId: body.userId,
96870
96950
  code: permission
96871
96951
  }));
96872
- await db_default.delete(permissionTable).where(eq(permissionTable.userId, body.userId));
96873
- await db_default.insert(permissionTable).values(insert);
96952
+ await tdb.delete(permissionTable).where(eq(permissionTable.userId, body.userId));
96953
+ await tdb.insert(permissionTable).values(insert);
96874
96954
  };
96875
96955
  PermissionLogic.selectGroups = async (query) => {
96876
96956
  const columns = getTableColumns(permissionGroupTable);
@@ -96901,7 +96981,7 @@ var PermissionLogic;
96901
96981
  return permissions;
96902
96982
  };
96903
96983
  })(PermissionLogic ||= {});
96904
- var logic_default4 = PermissionLogic;
96984
+ var logic_default5 = PermissionLogic;
96905
96985
 
96906
96986
  // src/routes/permission/schema.ts
96907
96987
  var addPermissionSchema = t.Object({
@@ -96928,7 +97008,7 @@ var permissionRoutes = new Elysia({
96928
97008
  return permissionList;
96929
97009
  }, {
96930
97010
  permission: "PERMISSION_ADD"
96931
- }).post("/", ({ body }) => logic_default4.addPermission(body), {
97011
+ }).post("/", ({ body }) => logic_default5.addPermission(body), {
96932
97012
  body: addPermissionSchema,
96933
97013
  permission: "PERMISSION_ADD",
96934
97014
  beforeHandle({ status: status2, body, permissions, publicPermissions }) {
@@ -96940,7 +97020,7 @@ var permissionRoutes = new Elysia({
96940
97020
  }
96941
97021
  }).group("/group", (app) => app.guard({
96942
97022
  permission: "PERMISSION_GROUP_ALL"
96943
- }).get("/", async ({ query }) => await logic_default4.selectGroups(query), {
97023
+ }).get("/", async ({ query }) => await logic_default5.selectGroups(query), {
96944
97024
  query: selectPermissionGroupSchema
96945
97025
  }).post("/", async ({ body }) => await groupService.create(body), {
96946
97026
  body: createPermissionGroupSchema
@@ -97078,7 +97158,7 @@ var UserLogic;
97078
97158
  totalCount: sql`count(*) over()`.mapWith(Number)
97079
97159
  }).from(user).where(filter).$dynamic();
97080
97160
  const users = await pagination_helper_default(baseQuery, query.pagination);
97081
- const userPermissions2 = await logic_default4.selectByUserId(users.map((u) => u.id));
97161
+ const userPermissions2 = await logic_default5.selectByUserId(users.map((u) => u.id));
97082
97162
  const content = {
97083
97163
  totalCount: users[0]?.totalCount ?? 0,
97084
97164
  totalPage: users.length === 0 ? 0 : Math.ceil(users[0].totalCount / query.pagination.size)
@@ -97121,39 +97201,42 @@ var UserLogic;
97121
97201
  branchId
97122
97202
  }
97123
97203
  });
97124
- const insertPermissions = body.permissions.map((p) => ({
97125
- userId: result.user.id,
97126
- code: p
97127
- }));
97128
- if (insertPermissions.length > 0) {
97129
- await db_default.insert(permissionTable).values(insertPermissions);
97204
+ try {
97205
+ await logic_default5.addPermission({
97206
+ permissions: body.permissions,
97207
+ userId: result.user.id
97208
+ });
97209
+ } catch (err2) {
97210
+ await db_default.delete(user).where(eq(user.id, result.user.id));
97130
97211
  }
97131
97212
  return result.user;
97132
97213
  };
97133
97214
  UserLogic.update = async (id, body, user2, permissions) => {
97134
- const [updatedUser] = await db_default.update(user).set(body).where(and(eq(user.id, id), eq(user.merchantId, user2.merchantId).if(!permissions.some((p) => adminPermissions.includes(p))), eq(user.branchId, user2.branchId).if(!permissions.some((p) => adminPermissions.includes(p)) || !permissions.includes("USER_CREATE_ADMIN")))).returning();
97135
- if (!updatedUser) {
97136
- return status("Not Found", "\u0425\u044D\u0440\u044D\u0433\u043B\u044D\u0433\u0447 \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439.");
97137
- }
97138
- await logic_default4.addPermission({
97139
- permissions: body.permissions,
97140
- userId: updatedUser.id
97215
+ return await db_default.transaction(async (db2) => {
97216
+ const [updatedUser] = await db2.update(user).set(body).where(and(eq(user.id, id), eq(user.merchantId, user2.merchantId).if(!permissions.some((p) => adminPermissions.includes(p))), eq(user.branchId, user2.branchId).if(!permissions.some((p) => adminPermissions.includes(p)) || permissions.includes("USER_CREATE_ADMIN")))).returning();
97217
+ if (!updatedUser) {
97218
+ return status("Not Found", "\u0425\u044D\u0440\u044D\u0433\u043B\u044D\u0433\u0447 \u043E\u043B\u0434\u0441\u043E\u043D\u0433\u04AF\u0439.");
97219
+ }
97220
+ await logic_default5.addPermission({
97221
+ permissions: body.permissions,
97222
+ userId: updatedUser.id
97223
+ }, db2);
97224
+ return updatedUser;
97141
97225
  });
97142
- return updatedUser;
97143
97226
  };
97144
97227
  })(UserLogic ||= {});
97145
- var logic_default5 = UserLogic;
97228
+ var logic_default6 = UserLogic;
97146
97229
 
97147
97230
  // src/routes/user/schema.ts
97148
97231
  var select4 = createSelectSchema(user);
97149
- var create6 = createInsertSchema(user);
97150
- var update5 = createUpdateSchema(user);
97232
+ var create7 = createInsertSchema(user);
97233
+ var update6 = createUpdateSchema(user);
97151
97234
  var selectUserSchema = t.Composite([
97152
97235
  PaginationSchema,
97153
97236
  t.Partial(t.Pick(select4, ["branchId"]))
97154
97237
  ]);
97155
97238
  var createUserSchema = t.Composite([
97156
- t.Pick(create6, ["name", "email"]),
97239
+ t.Pick(create7, ["name", "email"]),
97157
97240
  t.Object({
97158
97241
  password: t.Optional(t.String()),
97159
97242
  merchantId: t.Optional(t.String({ format: "uuid" })),
@@ -97162,7 +97245,7 @@ var createUserSchema = t.Composite([
97162
97245
  })
97163
97246
  ]);
97164
97247
  var updateUserSchema = t.Composite([
97165
- t.Omit(update5, ["password"]),
97248
+ t.Omit(update6, ["password"]),
97166
97249
  t.Object({
97167
97250
  permissions: t.Array(StringEnum(permissionList.map((permission) => permission.code)))
97168
97251
  })
@@ -97174,17 +97257,17 @@ var userRoutes = new Elysia({
97174
97257
  }).use(better_auth_default).use(permission_default).guard({
97175
97258
  auth: true,
97176
97259
  tags: ["User"]
97177
- }).get("/", async ({ query, user: user2, permissions }) => logic_default5.select(query, user2, permissions), {
97260
+ }).get("/", async ({ query, user: user2, permissions }) => logic_default6.select(query, user2, permissions), {
97178
97261
  query: selectUserSchema,
97179
97262
  permission: [
97180
97263
  "USER_SELECT_BACKOFFICE",
97181
97264
  "USER_SELECT_ADMIN",
97182
97265
  "USER_SELECT_OWN"
97183
97266
  ]
97184
- }).post("/", async ({ body, user: user2, permissions }) => logic_default5.registerUser(body, user2, permissions), {
97267
+ }).post("/", async ({ body, user: user2, permissions }) => logic_default6.registerUser(body, user2, permissions), {
97185
97268
  body: createUserSchema,
97186
97269
  permission: ["USER_CREATE_ADMIN", "USER_CREATE_OWN"]
97187
- }).put("/:id", async ({ body, user: user2, permissions, params: { id } }) => logic_default5.update(id, body, user2, permissions), {
97270
+ }).put("/:id", async ({ body, user: user2, permissions, params: { id } }) => logic_default6.update(id, body, user2, permissions), {
97188
97271
  body: updateUserSchema,
97189
97272
  permission: ["USER_CREATE_ADMIN", "USER_CREATE_OWN"]
97190
97273
  });
@@ -97208,11 +97291,7 @@ var app = new Elysia().use(index_default({
97208
97291
  paths: await OpenAPI.getPaths(),
97209
97292
  tags: swagger_tags_default
97210
97293
  }
97211
- })).use(pino_logger_default).onError(({ error: error2, set: set2 }) => {
97212
- return status(set2.status ?? 500, {
97213
- error: error2
97214
- });
97215
- }).onAfterResponse(async ({ request, response, server, status: status2, set: set2, body, headers }) => {
97294
+ })).use(pino_logger_default).onAfterResponse(async ({ request, response, server, status: status2, set: set2, body, headers }) => {
97216
97295
  const log = {
97217
97296
  userId: (await auth2.api.getSession({ headers: request.headers }))?.user.id,
97218
97297
  request: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autosync_backend2",
3
- "version": "1.0.74",
3
+ "version": "1.0.76",
4
4
  "module": "src/index.ts",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,8 @@
13
13
  "db:migrate": "bunx --bun drizzle-kit migrate",
14
14
  "db:generate": "bunx --bun drizzle-kit generate",
15
15
  "biome:check": "bunx biome check --write",
16
- "email": "email dev --dir src/lib/emails"
16
+ "email": "email dev --dir src/lib/emails",
17
+ "prepare": "husky"
17
18
  },
18
19
  "dependencies": {
19
20
  "@bogeychan/elysia-logger": "^0.1.8",
@@ -45,6 +46,7 @@
45
46
  "@types/react-dom": "^19.1.5",
46
47
  "bun-types": "latest",
47
48
  "drizzle-kit": "^0.31.1",
49
+ "husky": "^9.1.7",
48
50
  "react-email": "^4.0.15"
49
51
  },
50
52
  "files": [