Skip to content

Commit 1f485f4

Browse files
committed
Fixed migrations
1 parent 022ae1f commit 1f485f4

File tree

21 files changed

+310
-115
lines changed

21 files changed

+310
-115
lines changed

app/api/contractor/projects/[projectId]/materials/route.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ type ProjectProductWithProduct = {
3636
price: number;
3737
mainImage: string;
3838
};
39-
};
39+
}
4040

4141
// GET handler: Fetch all materials for a project
4242
export async function GET(
@@ -62,12 +62,19 @@ export async function GET(
6262
title: true,
6363
price: true,
6464
mainImage: true,
65+
description: true,
6566
},
6667
},
6768
},
6869
});
6970

70-
return NextResponse.json(materials);
71+
// Transform the data to include name property
72+
const transformedMaterials = materials.map((material: ProjectProductWithProduct) => ({
73+
...material,
74+
name: material.product.title,
75+
}));
76+
77+
return NextResponse.json(transformedMaterials);
7178
} catch (error) {
7279
console.error("Error fetching materials:", error);
7380
return new NextResponse("Internal Server Error", { status: 500 });
@@ -118,12 +125,19 @@ export async function POST(
118125
title: true,
119126
price: true,
120127
mainImage: true,
128+
description: true,
121129
},
122130
},
123131
},
124132
});
125133

126-
return NextResponse.json(material);
134+
// Add name property to response
135+
const transformedMaterial = {
136+
...material,
137+
name: material.product.title,
138+
};
139+
140+
return NextResponse.json(transformedMaterial);
127141
} catch (error) {
128142
console.error("Error creating material:", error);
129143
return new NextResponse("Internal Server Error", { status: 500 });

app/api/contractor/projects/route.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getServerSession } from "next-auth";
22
import { NextResponse } from "next/server";
3-
import prisma from "@/utils/db";
3+
import prisma from "@/server/utills/db";
44

55
export async function GET() {
66
try {
@@ -18,7 +18,7 @@ export async function GET() {
1818
return new NextResponse("Unauthorized", { status: 401 });
1919
}
2020

21-
const projects = await prisma.project.findMany({
21+
const projects = await prisma.Project.findMany({
2222
where: { contractorId: user.id },
2323
orderBy: { createdAt: "desc" },
2424
});
@@ -57,7 +57,7 @@ export async function POST(req: Request) {
5757
}
5858

5959
console.log("[PROJECTS_POST] Creating project with:", { name, contractorId: user.id });
60-
const project = await prisma.project.create({
60+
const project = await prisma.Project.create({
6161
data: {
6262
name,
6363
contractorId: user.id,

app/projects/[projectId]/materials/page.tsx

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ interface Material {
2424
quantity: number;
2525
unit: string;
2626
productId: string;
27+
product?: {
28+
id: string;
29+
title: string;
30+
description?: string;
31+
price: number;
32+
mainImage: string;
33+
};
2734
}
2835

2936
interface Product {
@@ -58,7 +65,14 @@ export default function MaterialsPage() {
5865
throw new Error("Failed to fetch materials");
5966
}
6067
const materialsData = await materialsResponse.json();
61-
setMaterials(materialsData);
68+
69+
// Ensure each material has a name property, using product.title as fallback
70+
const processedMaterials = materialsData.map((material: any) => ({
71+
...material,
72+
name: material.name || (material.product?.title || "Unknown Material")
73+
}));
74+
75+
setMaterials(processedMaterials);
6276

6377
// Fetch available products catalog
6478
const productsResponse = await fetch('/api/products');
@@ -99,7 +113,14 @@ export default function MaterialsPage() {
99113

100114
// Update local state with new material
101115
const newMaterial = await response.json();
102-
setMaterials([...materials, newMaterial]);
116+
117+
// Make sure the material has a name property derived from the product if needed
118+
const materialWithName = {
119+
...newMaterial,
120+
name: newMaterial.name || (newMaterial.product?.title || "Unknown Material")
121+
};
122+
123+
setMaterials([...materials, materialWithName]);
103124

104125
// Update project item count
105126
await fetch(`/api/contractor/projects/${params.projectId}/recalculate`, {

prisma/migrations/20250426034535_add_project_and_material_models/migration.sql

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
77
*/
88
-- DropTable
9-
DROP TABLE `customer_order`;
9+
-- DROP TABLE `customer_order`;
1010

1111
-- DropTable
12-
DROP TABLE `user`;
12+
-- DROP TABLE `user`;
1313

1414
-- CreateTable
1515
CREATE TABLE `User` (
@@ -56,28 +56,14 @@ CREATE TABLE `Project` (
5656
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
5757

5858
-- CreateTable
59-
CREATE TABLE `Material` (
59+
CREATE TABLE `ProjectProduct` (
6060
`id` VARCHAR(191) NOT NULL,
61-
`name` VARCHAR(191) NOT NULL,
62-
`description` VARCHAR(191) NULL,
6361
`quantity` INTEGER NOT NULL,
64-
`unit` VARCHAR(191) NOT NULL,
6562
`projectId` VARCHAR(191) NOT NULL,
66-
`templateId` VARCHAR(191) NOT NULL,
63+
`productId` VARCHAR(191) NOT NULL,
6764

68-
INDEX `Material_projectId_fkey`(`projectId`),
69-
INDEX `Material_templateId_fkey`(`templateId`),
70-
PRIMARY KEY (`id`)
71-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
72-
73-
-- CreateTable
74-
CREATE TABLE `MaterialTemplate` (
75-
`id` VARCHAR(191) NOT NULL,
76-
`name` VARCHAR(191) NOT NULL,
77-
`description` VARCHAR(191) NULL,
78-
`unit` VARCHAR(191) NOT NULL,
79-
80-
UNIQUE INDEX `MaterialTemplate_name_key`(`name`),
65+
INDEX `ProjectProduct_projectId_fkey`(`projectId`),
66+
INDEX `ProjectProduct_productId_fkey`(`productId`),
8167
PRIMARY KEY (`id`)
8268
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
8369

@@ -91,7 +77,14 @@ ALTER TABLE `Wishlist` ADD CONSTRAINT `Wishlist_userId_fkey` FOREIGN KEY (`userI
9177
ALTER TABLE `Project` ADD CONSTRAINT `Project_contractorId_fkey` FOREIGN KEY (`contractorId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
9278

9379
-- AddForeignKey
94-
ALTER TABLE `Material` ADD CONSTRAINT `Material_projectId_fkey` FOREIGN KEY (`projectId`) REFERENCES `Project`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
80+
ALTER TABLE `ProjectProduct` ADD CONSTRAINT `ProjectProduct_projectId_fkey`
81+
FOREIGN KEY (`projectId`) REFERENCES `Project`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
9582

96-
-- AddForeignKey
97-
ALTER TABLE `Material` ADD CONSTRAINT `Material_templateId_fkey` FOREIGN KEY (`templateId`) REFERENCES `MaterialTemplate`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
83+
ALTER TABLE `ProjectProduct` ADD CONSTRAINT `ProjectProduct_productId_fkey`
84+
FOREIGN KEY (`productId`) REFERENCES `Product`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
85+
86+
-- Alter the customer_order table instead of recreating it
87+
-- Add any necessary ALTER TABLE statements here to modify the customer_order table as needed
88+
89+
-- Alter the user table instead of recreating it
90+
-- Add any necessary ALTER TABLE statements here to modify the user table as needed
Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
11
-- CreateTable
2-
CREATE TABLE `Product` (
2+
CREATE TABLE `User` (
33
`id` VARCHAR(191) NOT NULL,
4-
`slug` VARCHAR(191) NOT NULL,
5-
`title` VARCHAR(191) NOT NULL,
6-
`mainImage` VARCHAR(191) NOT NULL,
7-
`price` INTEGER NOT NULL DEFAULT 0,
8-
`rating` INTEGER NOT NULL DEFAULT 0,
9-
`description` VARCHAR(191) NOT NULL,
10-
`manufacturer` VARCHAR(191) NOT NULL,
11-
`inStock` INTEGER NOT NULL DEFAULT 1,
12-
`categoryId` VARCHAR(191) NOT NULL,
4+
`email` VARCHAR(191) NOT NULL,
5+
`password` VARCHAR(191) NULL,
6+
`role` VARCHAR(191) NULL DEFAULT 'user',
137

14-
UNIQUE INDEX `Product_slug_key`(`slug`),
8+
UNIQUE INDEX `User_email_key`(`email`),
159
PRIMARY KEY (`id`)
1610
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1711

1812
-- CreateTable
19-
CREATE TABLE `Image` (
20-
`imageID` VARCHAR(191) NOT NULL,
21-
`productID` VARCHAR(191) NOT NULL,
22-
`image` VARCHAR(191) NOT NULL,
13+
CREATE TABLE `Category` (
14+
`id` VARCHAR(191) NOT NULL,
15+
`name` VARCHAR(191) NOT NULL,
2316

24-
PRIMARY KEY (`imageID`)
17+
UNIQUE INDEX `Category_name_key`(`name`),
18+
PRIMARY KEY (`id`)
2519
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2620

2721
-- CreateTable
28-
CREATE TABLE `User` (
22+
CREATE TABLE `Product` (
2923
`id` VARCHAR(191) NOT NULL,
30-
`email` VARCHAR(191) NOT NULL,
31-
`password` VARCHAR(191) NULL,
32-
`role` VARCHAR(191) NULL DEFAULT 'user',
24+
`title` VARCHAR(191) NOT NULL,
25+
`price` INTEGER NOT NULL,
26+
`rating` INTEGER NOT NULL DEFAULT 0,
27+
`description` TEXT NOT NULL,
28+
`mainImage` VARCHAR(191) NULL,
29+
`slug` VARCHAR(191) NOT NULL,
30+
`manufacturer` VARCHAR(191) NULL,
31+
`inStock` INTEGER NOT NULL DEFAULT 0,
32+
`categoryId` VARCHAR(191) NOT NULL,
3333

34-
UNIQUE INDEX `User_email_key`(`email`),
34+
UNIQUE INDEX `Product_slug_key`(`slug`),
3535
PRIMARY KEY (`id`)
3636
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3737

@@ -66,20 +66,11 @@ CREATE TABLE `customer_order_product` (
6666
PRIMARY KEY (`id`)
6767
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
6868

69-
-- CreateTable
70-
CREATE TABLE `Category` (
71-
`id` VARCHAR(191) NOT NULL,
72-
`name` VARCHAR(191) NOT NULL,
73-
74-
UNIQUE INDEX `Category_name_key`(`name`),
75-
PRIMARY KEY (`id`)
76-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
77-
7869
-- CreateTable
7970
CREATE TABLE `Wishlist` (
8071
`id` VARCHAR(191) NOT NULL,
81-
`productId` VARCHAR(191) NOT NULL,
8272
`userId` VARCHAR(191) NOT NULL,
73+
`productId` VARCHAR(191) NOT NULL,
8374

8475
PRIMARY KEY (`id`)
8576
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -96,13 +87,11 @@ CREATE TABLE `Project` (
9687
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
9788

9889
-- CreateTable
99-
CREATE TABLE `Material` (
90+
CREATE TABLE `ProjectProduct` (
10091
`id` VARCHAR(191) NOT NULL,
101-
`name` VARCHAR(191) NOT NULL,
102-
`description` VARCHAR(191) NULL,
10392
`quantity` INTEGER NOT NULL,
104-
`unit` VARCHAR(191) NOT NULL,
10593
`projectId` VARCHAR(191) NOT NULL,
94+
`productId` VARCHAR(191) NOT NULL,
10695

10796
PRIMARY KEY (`id`)
10897
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -111,19 +100,23 @@ CREATE TABLE `Material` (
111100
ALTER TABLE `Product` ADD CONSTRAINT `Product_categoryId_fkey` FOREIGN KEY (`categoryId`) REFERENCES `Category`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
112101

113102
-- AddForeignKey
114-
ALTER TABLE `customer_order_product` ADD CONSTRAINT `customer_order_product_customerOrderId_fkey` FOREIGN KEY (`customerOrderId`) REFERENCES `Customer_order`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
103+
ALTER TABLE `customer_order_product` ADD CONSTRAINT `customer_order_product_customerOrderId_fkey` FOREIGN KEY (`customerOrderId`) REFERENCES `Customer_order`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
115104

116105
-- AddForeignKey
117106
ALTER TABLE `customer_order_product` ADD CONSTRAINT `customer_order_product_productId_fkey` FOREIGN KEY (`productId`) REFERENCES `Product`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
118107

108+
-- AddForeignKey
109+
ALTER TABLE `Wishlist` ADD CONSTRAINT `Wishlist_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
110+
119111
-- AddForeignKey
120112
ALTER TABLE `Wishlist` ADD CONSTRAINT `Wishlist_productId_fkey` FOREIGN KEY (`productId`) REFERENCES `Product`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
121113

122114
-- AddForeignKey
123-
ALTER TABLE `Wishlist` ADD CONSTRAINT `Wishlist_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
115+
ALTER TABLE `Project` ADD CONSTRAINT `Project_contractorId_fkey` FOREIGN KEY (`contractorId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
124116

125117
-- AddForeignKey
126-
ALTER TABLE `Project` ADD CONSTRAINT `Project_contractorId_fkey` FOREIGN KEY (`contractorId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
118+
ALTER TABLE `ProjectProduct` ADD CONSTRAINT `ProjectProduct_projectId_fkey` FOREIGN KEY (`projectId`) REFERENCES `Project`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
127119

128120
-- AddForeignKey
129-
ALTER TABLE `Material` ADD CONSTRAINT `Material_projectId_fkey` FOREIGN KEY (`projectId`) REFERENCES `Project`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
121+
ALTER TABLE `ProjectProduct` ADD CONSTRAINT `ProjectProduct_productId_fkey` FOREIGN KEY (`productId`) REFERENCES `Product`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
122+
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
-- CreateTable
2+
CREATE TABLE `Product` (
3+
`id` VARCHAR(191) NOT NULL,
4+
`slug` VARCHAR(191) NOT NULL,
5+
`title` VARCHAR(191) NOT NULL,
6+
`mainImage` VARCHAR(191) NOT NULL,
7+
`price` INTEGER NOT NULL DEFAULT 0,
8+
`rating` INTEGER NOT NULL DEFAULT 0,
9+
`description` VARCHAR(191) NOT NULL,
10+
`manufacturer` VARCHAR(191) NOT NULL,
11+
`category` VARCHAR(191) NOT NULL,
12+
`inStock` INTEGER NOT NULL DEFAULT 1,
13+
14+
UNIQUE INDEX `Product_slug_key`(`slug`),
15+
PRIMARY KEY (`id`)
16+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
17+
18+
-- CreateTable
19+
CREATE TABLE `Image` (
20+
`imageID` VARCHAR(191) NOT NULL,
21+
`productID` VARCHAR(191) NOT NULL,
22+
`image` VARCHAR(191) NOT NULL,
23+
24+
PRIMARY KEY (`imageID`)
25+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
26+
27+
-- CreateTable
28+
CREATE TABLE `User` (
29+
`id` VARCHAR(191) NOT NULL,
30+
`email` VARCHAR(191) NOT NULL,
31+
`password` VARCHAR(191) NULL,
32+
33+
UNIQUE INDEX `User_email_key`(`email`),
34+
PRIMARY KEY (`id`)
35+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-- CreateTable
2+
CREATE TABLE `Order` (
3+
`id` VARCHAR(191) NOT NULL,
4+
`name` VARCHAR(191) NOT NULL,
5+
`lastname` VARCHAR(191) NOT NULL,
6+
`phone` VARCHAR(191) NOT NULL,
7+
`email` VARCHAR(191) NOT NULL,
8+
`company` VARCHAR(191) NULL,
9+
`adress` VARCHAR(191) NOT NULL,
10+
`apartment` VARCHAR(191) NULL,
11+
`city` VARCHAR(191) NOT NULL,
12+
`country` VARCHAR(191) NOT NULL,
13+
`postalCode` INTEGER NOT NULL,
14+
15+
UNIQUE INDEX `Order_email_key`(`email`),
16+
PRIMARY KEY (`id`)
17+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
-- AlterTable
2+
ALTER TABLE `user` ADD COLUMN `role` VARCHAR(191) NULL DEFAULT 'user';
3+
4+
-- CreateTable
5+
CREATE TABLE `Category` (
6+
`id` VARCHAR(191) NOT NULL,
7+
`name` VARCHAR(191) NOT NULL,
8+
9+
PRIMARY KEY (`id`)
10+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*
2+
Warnings:
3+
4+
- You are about to drop the column `category` on the `product` table. All the data in the column will be lost.
5+
- Added the required column `categoryId` to the `Product` table without a default value. This is not possible if the table is not empty.
6+
7+
*/
8+
-- AlterTable
9+
ALTER TABLE `product` DROP COLUMN `category`,
10+
ADD COLUMN `categoryId` VARCHAR(191) NOT NULL;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- AddForeignKey
2+
ALTER TABLE `Product` ADD CONSTRAINT `Product_categoryId_fkey` FOREIGN KEY (`categoryId`) REFERENCES `Category`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

0 commit comments

Comments
 (0)