mirror of
https://github.com/AustinKelsay/plebdevs.git
synced 2025-04-19 19:01:19 +00:00
Unique purchases
This commit is contained in:
parent
2282819ac5
commit
50eea8f872
@ -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");
|
@ -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 {
|
||||
|
@ -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">
|
||||
|
@ -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: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user