adding complete db migrations from posgres

This commit is contained in:
2026-10-05 15:57:55 +05:30
parent 9d710349c2
commit 65f58c4000
113 changed files with 24033 additions and 1007 deletions
+34 -8
View File
@@ -66,32 +66,58 @@ export class ApiSeeder {
return res.json()
}
// --- reference data (relies on DataSeeder's MAIN/SHOP/PCS/BOX/General Goods seed) -----
// --- reference data: get-or-create ------------------------------------------------
//
// These used to assume DataSeeder had planted MAIN/SHOP warehouses, PCS/BOX UOMs and a
// "General Goods" category, and threw if they were missing. That demo data was removed
// with the MySQL port so a fresh database is production-shaped, so each helper now creates
// what it needs. This also removes the suite's hidden dependency on seed data that a real
// deployment would never have.
async firstWarehouse(): Promise<Warehouse> {
const page = await this.get<{ items: Warehouse[] }>("/warehouses?page=1&pageSize=1")
if (!page.items.length) throw new Error("No warehouses found - expected DataSeeder's MAIN warehouse to exist.")
return page.items[0]
if (page.items.length) return page.items[0]
return this.createWarehouse("E2E Main")
}
async secondWarehouse(): Promise<Warehouse> {
const page = await this.get<{ items: Warehouse[] }>("/warehouses?page=1&pageSize=10")
if (page.items.length < 2) throw new Error("Need at least 2 warehouses (DataSeeder seeds MAIN + SHOP).")
return page.items[1]
if (page.items.length >= 2) return page.items[1]
await this.firstWarehouse()
return this.createWarehouse("E2E Secondary")
}
async firstUom(): Promise<Uom> {
const page = await this.get<{ items: Uom[] }>("/uoms?page=1&pageSize=1")
if (!page.items.length) throw new Error("No UOMs found - expected DataSeeder's PCS uom to exist.")
return page.items[0]
if (page.items.length) return page.items[0]
return this.post<Uom>("/uoms", { name: `E2E-UOM-${uniqueSuffix()}` })
}
async firstCategory(): Promise<Category> {
const page = await this.get<{ items: Category[] }>("/categories?page=1&pageSize=1")
if (!page.items.length) throw new Error("No categories found - expected DataSeeder's General Goods category.")
if (page.items.length) return page.items[0]
return this.post<Category>("/categories", { name: `E2E Category ${uniqueSuffix()}` })
}
/** The deployment's default branch (BR-000), seeded by DataSeeder.EnsureDefaultBranchAsync. */
async firstBranch(): Promise<{ branchId: number; code: string }> {
const page = await this.get<{ items: { branchId: number; code: string }[] }>(
"/branches?page=1&pageSize=1")
if (!page.items.length) throw new Error("No branches found - expected the seeded BR-000 branch.")
return page.items[0]
}
async createWarehouse(namePrefix = "E2E Warehouse"): Promise<Warehouse> {
const suffix = uniqueSuffix()
// branchId is required whenever warehouse branching is enabled, which it is by default.
const branchId = (await this.firstBranch()).branchId
return this.post<Warehouse>("/warehouses", {
code: `E2E-W-${suffix}`,
name: `${namePrefix} ${suffix}`,
branchId,
})
}
// --- writes used to build test fixtures -------------------------------------------
async createVendor(namePrefix = "E2E Vendor"): Promise<Vendor> {