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:
parent
64f9cd497f
commit
2fb2a16c56
@ -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")
|
||||
|
11
apps/backend/src/app/machines/machines.dto.ts
Normal file
11
apps/backend/src/app/machines/machines.dto.ts
Normal 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;
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user