Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions labman/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ next-env.d.ts

/src/generated/prisma

.idea

# Playwright
node_modules/
/test-results/
Expand Down
8 changes: 0 additions & 8 deletions labman/.idea/.gitignore

This file was deleted.

4 changes: 0 additions & 4 deletions labman/.idea/encodings.xml

This file was deleted.

12 changes: 0 additions & 12 deletions labman/.idea/labman.iml

This file was deleted.

12 changes: 0 additions & 12 deletions labman/.idea/material_theme_project_new.xml

This file was deleted.

8 changes: 0 additions & 8 deletions labman/.idea/modules.xml

This file was deleted.

12 changes: 0 additions & 12 deletions labman/.idea/vcs.xml

This file was deleted.

94 changes: 57 additions & 37 deletions labman/src/app/api/equipment/route.ts
Original file line number Diff line number Diff line change
@@ -1,53 +1,73 @@
import {NextResponse} from "next/server";
import prisma from "@/lib/prisma";

export async function POST(req: Request) {
const body = await req.json();
const { name, category, image } = body;
//TODO: Generally post reguests like this should be done in actions.ts. But there is little point in changing this right now as the backend might be moved later anyways.

let categoryId = 0;
export async function POST(req: Request) : Promise<Response> {
try {
const body = await req.json();
const {name, category, image} = body;

let equipmentCategory = await prisma.equipmentCategory.findUnique({
where: {
name: category
}
})

// Add equipment category if it doesn't exist'
if (equipmentCategory) {
console.log("Category exists");
categoryId = equipmentCategory.id;
} else {
console.log("Category does not exist");
equipmentCategory = await prisma.equipmentCategory.create({
data: {
let categoryId = 0;

let equipmentCategory = await prisma.equipmentCategory.findUnique({
where: {
name: category
}
})
categoryId = equipmentCategory.id;
}

// Add equipment to the database
const newEquipment = await prisma.equipment.create({
data: {
name,
image,
categoryId,
status: "Active",
items: {
create: {
status: "Available"
// Add equipment category if it doesn't exist'
if (equipmentCategory) {
console.log("Category exists");
categoryId = equipmentCategory.id;
} else {
console.log("Category does not exist");
equipmentCategory = await prisma.equipmentCategory.create({
data: {
name: category
}
}
},
include: {
category: true,
items: true
})
categoryId = equipmentCategory.id;
}

const existingEquipment = await prisma.equipment.findUnique({where: {name: name}});

if (existingEquipment) {
return NextResponse.json(
{ type: "error", message: "Equipment already exists" },
{ status: 409 }
);
}
});

// Add equipment to the database
const newEquipment = await prisma.equipment.create({
data: {
name,
image,
categoryId,
status: "Active",
items: {
create: {
status: "Available"
}
}
},
include: {
category: true,
items: true
}
});


return NextResponse.json(newEquipment);
return NextResponse.json(
{type: "success", data: newEquipment},
{status: 201}
)
} catch (error) {
return NextResponse.json(
{type: "error", message: "An error occurred while adding the equipment"},
{status: 500}
)
}

}
17 changes: 11 additions & 6 deletions labman/src/components/inventory/EquipmentClient.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,19 @@ export default function EquipmentClient({equipmentList}: EquipmentClientProps) {
})
})
// Adding the new equipment to the state
const newEquipment = await res.json();
console.log(newEquipment)
const result = await res.json();

setAllEquipment(prev => [...prev, newEquipment]);
setName("")
setCategory("")
setImage("")
if (result.type === "success") {
const newEquipment = result.data

setAllEquipment(prev => [...prev, newEquipment]);
setName("")
setCategory("")
setImage("")

} else {
alert(result.message || "Failed to add equipment")
}
}

async function handleDeleteEquipment(name: string) {
Expand Down
10 changes: 8 additions & 2 deletions labman/src/components/inventory/EquipmentInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,13 @@ export default function EquipmentInfo({equipmentData, setAllEquipment, setSelect
if (JSON.stringify(formData) === JSON.stringify(initialFormData)) return;


const updatedEq = await updateEquipment(equipmentData!.id, formData.name!, formData.category!, formData.image!)
const res = await updateEquipment(equipmentData.id, formData.name, formData.category, formData.image!)
if (res.type !== "success") {
alert(res.message);
return;
}

const updatedEq = res.data;

const updatedEquipment = {
...equipmentData,
Expand All @@ -99,7 +105,7 @@ export default function EquipmentInfo({equipmentData, setAllEquipment, setSelect
name: updatedEq.category.name
},
image: updatedEq.image,
categoryId: updatedEq.categoryId
categoryId: updatedEq.category.id

}

Expand Down
16 changes: 13 additions & 3 deletions labman/src/lib/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {revalidatePath} from "next/cache";
import {deleteSession, validateSessionToken} from "@/auth/session"
import {cookies} from "next/headers";
import {Borrower} from "@/generated/prisma";
import {Equipment, EquipmentWithCategoryAndItems} from "@/types/inventory"
import {Loan as ExtendedLoan} from "@/types/Loan";
import {Loan} from "@/generated/prisma";
import {redirect} from "next/navigation";
Expand Down Expand Up @@ -90,7 +91,7 @@ export async function addUnit(equipmentName: string) {
return newUnit;
}

export async function updateEquipment (equipmentId: number, name: string, category: string, image: string) {
export async function updateEquipment (equipmentId: number, name: string, category: string, image: string) : Promise<ActionResult<EquipmentWithCategoryAndItems>> {

let categoryId = 0;
let equipmentCategory = await prisma.equipmentCategory.findUnique({where: {name: category}})
Expand All @@ -102,13 +103,22 @@ export async function updateEquipment (equipmentId: number, name: string, catego
categoryId = equipmentCategory.id
}

const existingEquipment = await prisma.equipment.findUnique({where: {name: name}})

if (existingEquipment) {
return {type: "error", message: "Equipment already exists"}
}

const equipment = await prisma.equipment.update({
where: {id: equipmentId},
data : {name: name, categoryId: categoryId, image: image},
include: {category: true}
include: {
category: true,
items: true
}
})
revalidatePath("/");
return equipment;
return {type: "success", data: equipment};
}

export async function addBorrower(name: string, phone?: string | null, email?: string | null, borrowerId?: number) : Promise<ActionResult<Borrower>> {
Expand Down
21 changes: 21 additions & 0 deletions labman/src/types/inventory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,27 @@ export type Equipment = {
}[]
}

export type EquipmentWithCategoryAndItems = {
id: number;
name: string;
image: string | null;
category: {
id: number;
name: string;
}
createdAt: Date;
items: {
id: number;
equipmentId: number;
status: string;
createdAt: Date;
notes: string[];
errors: string[];
activeLoanId: number | null;

}[]
}

export type Unit = {
id: number;
equipmentId: number;
Expand Down
Loading