Unique purchases

This commit is contained in:
austinkelsay 2024-10-12 13:17:01 -05:00
parent 2282819ac5
commit 50eea8f872
4 changed files with 46 additions and 22 deletions

View File

@ -0,0 +1,11 @@
/*
Warnings:
- A unique constraint covering the columns `[userId,courseId,resourceId]` on the table `Purchase` will be added. If there are existing duplicate values, this will fail.
*/
-- DropIndex
DROP INDEX "Purchase_userId_courseId_key";
-- CreateIndex
CREATE UNIQUE INDEX "Purchase_userId_courseId_resourceId_key" ON "Purchase"("userId", "courseId", "resourceId");

View File

@ -1,14 +1,14 @@
// datasource db {
// provider = "postgresql"
// url = env("DATABASE_URL")
// }
datasource db {
provider = "postgresql"
url = env("POSTGRES_PRISMA_URL")
directUrl = env("POSTGRES_URL_NON_POOLING")
provider = "postgresql"
url = env("DATABASE_URL")
}
// datasource db {
// provider = "postgresql"
// url = env("POSTGRES_PRISMA_URL")
// directUrl = env("POSTGRES_URL_NON_POOLING")
// }
generator client {
provider = "prisma-client-js"
}
@ -202,7 +202,7 @@ model Purchase {
course Course? @relation(fields: [courseId], references: [id])
resource Resource? @relation(fields: [resourceId], references: [id])
@@unique([userId, courseId])
@@unique([userId, courseId, resourceId])
}
model UserCourse {

View File

@ -99,21 +99,21 @@ const HeroBanner = () => {
)}
<div className="mb-8 flex flex-row">
<AvatarGroup>
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/amyelsner.png"} size="large" shape="circle" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/asiyajavayant.png"} size="large" shape="circle" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/onyamalimba.png"} size="large" shape="circle" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/ionibowcher.png"} size="large" shape="circle" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/xuxuefeng.png"} size="large" shape="circle" />
<Avatar label="500+" shape="circle" size="large" className="text-base" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/amyelsner.png"} size={isMobile ? "normal" : "large"} shape="circle" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/asiyajavayant.png"} size={isMobile ? "normal" : "large"} shape="circle" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/onyamalimba.png"} size={isMobile ? "normal" : "large"} shape="circle" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/ionibowcher.png"} size={isMobile ? "normal" : "large"} shape="circle" />
<Avatar image={"https://primefaces.org/cdn/primereact/images/avatar/xuxuefeng.png"} size={isMobile ? "normal" : "large"} shape="circle" />
<Avatar label="500+" shape="circle" size={isMobile ? "normal" : "large"} className={`${isMobile ? 'text-sm' : 'text-base'}`} />
</AvatarGroup>
<div className="flex flex-col justify-between my-2 ml-4">
<div className="flex flex-row gap-2">
{Array.from({ length: 5 }).map((_, index) => (
<i key={index} className="pi pi-star-fill text-yellow-500" />
<i key={index} className={`pi pi-star-fill text-yellow-500 ${isMobile ? 'text-base' : 'text-2xl'}`} />
))}
<p className="text-sm">4.9</p>
<p className={`text-sm ${isMobile ? 'text-base' : 'text-2xl'}`}>4.87</p>
</div>
<span className="text-sm">from 500+ students</span>
<span className={`text-sm ${isMobile ? 'text-base' : 'text-2xl'}`}>500+ students enrolled</span>
</div>
</div>
<div className="space-x-4">

View File

@ -83,9 +83,21 @@ export const addResourcePurchaseToUser = async (userId, purchaseData) => {
where: { id: userId },
data: {
purchased: {
create: {
resourceId: purchaseData.resourceId,
amountPaid: purchaseData.amountPaid,
upsert: {
where: {
userId_courseId_resourceId: {
userId: userId,
courseId: null,
resourceId: purchaseData.resourceId,
},
},
create: {
resourceId: purchaseData.resourceId,
amountPaid: purchaseData.amountPaid,
},
update: {
amountPaid: purchaseData.amountPaid,
},
},
},
},
@ -106,9 +118,10 @@ export const addCoursePurchaseToUser = async (userId, purchaseData) => {
purchased: {
upsert: {
where: {
userId_courseId: {
userId_courseId_resourceId: {
userId: userId,
courseId: purchaseData.courseId,
resourceId: null,
},
},
create: {