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 {
|
import {
|
||||||
|
Body,
|
||||||
Controller,
|
Controller,
|
||||||
DefaultValuePipe,
|
DefaultValuePipe,
|
||||||
Delete,
|
Delete,
|
||||||
@ -13,6 +14,7 @@ import {
|
|||||||
UseGuards,
|
UseGuards,
|
||||||
} from "@nestjs/common";
|
} from "@nestjs/common";
|
||||||
import { AdminGuard } from "apps/backend/src/app/auth/auth.guard";
|
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";
|
import { MachinesService } from "apps/backend/src/app/machines/machines.service";
|
||||||
|
|
||||||
@Controller("machines")
|
@Controller("machines")
|
||||||
@ -29,7 +31,9 @@ export class MachinesController {
|
|||||||
//TODO DTO
|
//TODO DTO
|
||||||
@UseGuards(AdminGuard)
|
@UseGuards(AdminGuard)
|
||||||
@Post("new")
|
@Post("new")
|
||||||
async newMachine() {}
|
async newMachine(@Body() body: CreateMachineDto) {
|
||||||
|
return await this.machineService.create(body.machineName, body.machineType);
|
||||||
|
}
|
||||||
|
|
||||||
@UseGuards(AdminGuard)
|
@UseGuards(AdminGuard)
|
||||||
@Delete(":machineId")
|
@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 { DbService } from "apps/backend/src/app/db/db.service";
|
||||||
import {
|
import {
|
||||||
FilesForMachinesTable,
|
FilesForMachinesTable,
|
||||||
|
FilesTable,
|
||||||
MachinesTable,
|
MachinesTable,
|
||||||
} from "apps/backend/src/app/db/schema";
|
} from "apps/backend/src/app/db/schema";
|
||||||
import { eq, ilike } from "drizzle-orm";
|
import { eq, ilike } from "drizzle-orm";
|
||||||
@ -35,18 +40,38 @@ export class MachinesService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO The method to create a machine
|
//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
|
//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} limit - The maximum number of files to return.
|
||||||
* @param {number} offset - The offset from which to start retrieving files.
|
* @param {number} offset - The number of files to skip before starting to return results.
|
||||||
* @param {string} searchField - The specific field to search within the files.
|
* @param {string} searchField - The field to search within for files.
|
||||||
* @param {string} machineId - The unique identifier of the machine.
|
* @param {string} machineId - The ID of the machine to find files for.
|
||||||
* @return {Promise<Array>} A promise that resolves to an array of file records for the machine.
|
* @returns {Promise<Array<Object>>} A promise that resolves to an array of files associated with the specified machine.
|
||||||
* @throws {NotFoundException} If the machine with the given id is not found.
|
* @throws {NotFoundException} If the machine ID is not found.
|
||||||
*/
|
*/
|
||||||
async findFilesForMachine(
|
async findFilesForMachine(
|
||||||
limit: number,
|
limit: number,
|
||||||
@ -66,11 +91,15 @@ export class MachinesService {
|
|||||||
|
|
||||||
return await this.database
|
return await this.database
|
||||||
.use()
|
.use()
|
||||||
.select()
|
.select({
|
||||||
|
associatedMachine: FilesForMachinesTable.machineId,
|
||||||
|
data: FilesTable,
|
||||||
|
})
|
||||||
.from(FilesForMachinesTable)
|
.from(FilesForMachinesTable)
|
||||||
.where(eq(FilesForMachinesTable.machineId, machineId))
|
.where(eq(FilesForMachinesTable.machineId, machineId))
|
||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
|
.leftJoin(FilesTable, eq(FilesTable.uuid, FilesForMachinesTable.fileId))
|
||||||
.prepare("findFilesForMachineId")
|
.prepare("findFilesForMachineId")
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user