ll-callmobile-backend
Version:
VoIP Mobile Communications Backend with Supabase, Drizzle ORM, and Dynamic Querying - Deployable as Cloudflare Worker
129 lines • 5.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TestCaseService = void 0;
const schema_1 = require("../db/schema");
const drizzle_orm_1 = require("drizzle-orm");
class TestCaseService {
/**
* Creates a new test case with associated client, vendor, and job
*/
static async createTestCase(db, request) {
try {
// Use a transaction to ensure all operations succeed or fail together
const result = await db.transaction(async (tx) => {
// 1. Create the test case
const [newTestCase] = await tx
.insert(schema_1.testCases)
.values({
description: request.description,
code: request.code,
})
.returning();
// 2. Create the client
const [newClient] = await tx
.insert(schema_1.clients)
.values({
acsIdentityId: request.client.acsIdentityId,
name: request.client.name,
acsToken: request.client.acsToken,
})
.returning();
// 3. Create the vendor
const [newVendor] = await tx
.insert(schema_1.vendors)
.values({
acsIdentityId: request.vendor.acsIdentityId,
name: request.vendor.name,
acsToken: request.vendor.acsToken,
})
.returning();
// 4. Create the job with details
const jobDetails = `TestCaseId: ${newTestCase.id}, Description: ${newTestCase.description}`;
await tx
.insert(schema_1.jobs)
.values({
clientId: newClient.id,
vendorId: newVendor.id,
details: jobDetails,
});
return {
testCase: newTestCase,
client: newClient,
vendor: newVendor,
};
});
// Return the response in the expected format
return {
testCaseId: result.testCase.id,
client: {
acsIdentityId: result.client.acsIdentityId,
acsToken: result.client.acsToken,
},
vendor: {
acsIdentityId: result.vendor.acsIdentityId,
acsToken: result.vendor.acsToken,
},
};
}
catch (error) {
// Log the error for debugging (in production, you might want to use a proper logger)
console.error('Error creating test case:', error);
// Throw a user-friendly error
if (error instanceof Error) {
throw new Error(`Failed to create test case: ${error.message}`);
}
throw new Error('Failed to create test case: Unknown error occurred');
}
}
/**
* Retrieves a test case by ID
*/
static async getTestCaseById(db, id) {
try {
const [testCase] = await db
.select()
.from(schema_1.testCases)
.where((0, drizzle_orm_1.eq)(schema_1.testCases.id, id));
if (!testCase) {
throw new Error(`Test case with ID ${id} not found`);
}
return testCase;
}
catch (error) {
console.error('Error retrieving test case:', error);
if (error instanceof Error) {
throw new Error(`Failed to retrieve test case: ${error.message}`);
}
throw new Error('Failed to retrieve test case: Unknown error occurred');
}
}
/**
* Retrieves a client's ACS token by TestCase ID
*/
static async getClientACSTokenByTestCaseId(db, testCaseId) {
try {
// Find the job that contains this test case ID in its details
// Then get the client's ACS token through the job's clientId
const [result] = await db
.select({
acsToken: schema_1.clients.acsToken,
})
.from(schema_1.jobs)
.innerJoin(schema_1.clients, (0, drizzle_orm_1.eq)(schema_1.jobs.clientId, schema_1.clients.id))
.where((0, drizzle_orm_1.sql) `${schema_1.jobs.details} LIKE ${`TestCaseId: ${testCaseId}%`}`);
if (!result) {
throw new Error(`No client found for test case with ID ${testCaseId}`);
}
return result.acsToken;
}
catch (error) {
console.error('Error retrieving client ACS token:', error);
if (error instanceof Error) {
throw new Error(`Failed to retrieve client ACS token: ${error.message}`);
}
throw new Error('Failed to retrieve client ACS token: Unknown error occurred');
}
}
}
exports.TestCaseService = TestCaseService;
//# sourceMappingURL=testCaseService.js.map