diff --git a/apps/backend/src/app/machines/machines.controller.ts b/apps/backend/src/app/machines/machines.controller.ts index c1856a7..dce7219 100644 --- a/apps/backend/src/app/machines/machines.controller.ts +++ b/apps/backend/src/app/machines/machines.controller.ts @@ -1,4 +1,5 @@ import { + Body, Controller, DefaultValuePipe, Delete, @@ -13,6 +14,7 @@ import { UseGuards, } from "@nestjs/common"; import { AdminGuard } from "apps/backend/src/app/auth/auth.guard"; +import { CreateMachineDto } from "apps/backend/src/app/machines/machines.dto"; import { MachinesService } from "apps/backend/src/app/machines/machines.service"; @Controller("machines") @@ -29,7 +31,9 @@ export class MachinesController { //TODO DTO @UseGuards(AdminGuard) @Post("new") - async newMachine() {} + async newMachine(@Body() body: CreateMachineDto) { + return await this.machineService.create(body.machineName, body.machineType); + } @UseGuards(AdminGuard) @Delete(":machineId") diff --git a/apps/backend/src/app/machines/machines.dto.ts b/apps/backend/src/app/machines/machines.dto.ts new file mode 100644 index 0000000..a93e519 --- /dev/null +++ b/apps/backend/src/app/machines/machines.dto.ts @@ -0,0 +1,11 @@ +import { MaxLength, MinLength } from "class-validator"; + +export class CreateMachineDto { + @MaxLength(128) + @MinLength(4) + machineName: string; + + @MaxLength(64) + @MinLength(2) + machineType: string; +} diff --git a/apps/backend/src/app/machines/machines.service.ts b/apps/backend/src/app/machines/machines.service.ts index fc29661..e90700c 100644 --- a/apps/backend/src/app/machines/machines.service.ts +++ b/apps/backend/src/app/machines/machines.service.ts @@ -1,7 +1,12 @@ -import { Injectable, NotFoundException } from "@nestjs/common"; +import { + Injectable, + InternalServerErrorException, + NotFoundException, +} from "@nestjs/common"; import { DbService } from "apps/backend/src/app/db/db.service"; import { FilesForMachinesTable, + FilesTable, MachinesTable, } from "apps/backend/src/app/db/schema"; import { eq, ilike } from "drizzle-orm"; @@ -35,18 +40,38 @@ export class MachinesService { } //TODO The method to create a machine + async create(machineName: string, machineType: string) { + try { + const newMachine = await this.database + .use() + .insert(MachinesTable) + .values({ + machineName, + machineType, + }) + .prepare("createMachine") + .execute(); + console.log("Created a new machine.", newMachine); + return newMachine; + } catch (e) { + console.error(e); + throw new InternalServerErrorException( + "Insertion of the new machine failed, see the server console for more information.", + ); + } + } //TODO a method to delete a machine and delete the associated FilesTypeForMachine row /** - * Retrieves a list of files associated with a specific machine from the database. + * Finds files associated with a specific machine. * - * @param {number} limit - The maximum number of files to retrieve. - * @param {number} offset - The offset from which to start retrieving files. - * @param {string} searchField - The specific field to search within the files. - * @param {string} machineId - The unique identifier of the machine. - * @return {Promise} A promise that resolves to an array of file records for the machine. - * @throws {NotFoundException} If the machine with the given id is not found. + * @param {number} limit - The maximum number of files to return. + * @param {number} offset - The number of files to skip before starting to return results. + * @param {string} searchField - The field to search within for files. + * @param {string} machineId - The ID of the machine to find files for. + * @returns {Promise>} A promise that resolves to an array of files associated with the specified machine. + * @throws {NotFoundException} If the machine ID is not found. */ async findFilesForMachine( limit: number, @@ -66,11 +91,15 @@ export class MachinesService { return await this.database .use() - .select() + .select({ + associatedMachine: FilesForMachinesTable.machineId, + data: FilesTable, + }) .from(FilesForMachinesTable) .where(eq(FilesForMachinesTable.machineId, machineId)) .limit(limit) .offset(offset) + .leftJoin(FilesTable, eq(FilesTable.uuid, FilesForMachinesTable.fileId)) .prepare("findFilesForMachineId") .execute(); }