Add machine creation endpoint

Implemented a new endpoint to create machines in the system. Added the required DTO for machine creation data validation and integrated it into the controller. Updated service methods to handle machine creation and improved the `findFilesForMachine` method for clarity and functionality.
This commit is contained in:
Mathis H (Avnyr) 2024-10-08 15:39:12 +02:00
parent 64f9cd497f
commit 2fb2a16c56
Signed by: Mathis
GPG Key ID: DD9E0666A747D126
3 changed files with 54 additions and 10 deletions

View File

@ -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")

View File

@ -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;
}

View File

@ -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<Array>} 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<Array<Object>>} 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();
}