UNPKG

ll-callmobile-backend

Version:

VoIP Mobile Communications Backend with Supabase, Drizzle ORM, and Dynamic Querying - Deployable as Cloudflare Worker

129 lines 5.2 kB
"use strict"; 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