mirror of
https://github.com/AustinKelsay/plebdevs.git
synced 2025-04-19 19:01:19 +00:00
Fix duplicate purchases bug
This commit is contained in:
parent
4f98ea3656
commit
ca77e2674f
@ -226,6 +226,9 @@ CREATE UNIQUE INDEX "Course_noteId_key" ON "Course"("noteId");
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "UserLesson_userId_lessonId_key" ON "UserLesson"("userId", "lessonId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Purchase_userId_courseId_key" ON "Purchase"("userId", "courseId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "UserCourse_userId_courseId_key" ON "UserCourse"("userId", "courseId");
|
||||
|
@ -184,16 +184,18 @@ model UserLesson {
|
||||
}
|
||||
|
||||
model Purchase {
|
||||
id String @id @default(uuid())
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
id String @id @default(uuid())
|
||||
userId String
|
||||
course Course? @relation(fields: [courseId], references: [id])
|
||||
courseId String?
|
||||
resource Resource? @relation(fields: [resourceId], references: [id])
|
||||
resourceId String?
|
||||
amountPaid Int
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
course Course? @relation(fields: [courseId], references: [id])
|
||||
resource Resource? @relation(fields: [resourceId], references: [id])
|
||||
|
||||
@@unique([userId, courseId])
|
||||
}
|
||||
|
||||
model UserCourse {
|
||||
|
@ -33,7 +33,7 @@ const ProgressListItem = ({ dTag, category }) => {
|
||||
const encodeNaddr = () => {
|
||||
return nip19.naddrEncode({
|
||||
pubkey: event.pubkey,
|
||||
identifier: dTag,
|
||||
identifier: event.id,
|
||||
kind: 30004,
|
||||
relayUrls: appConfig.defaultRelayUrls
|
||||
})
|
||||
|
@ -2,10 +2,13 @@ import React, { useEffect, useState } from "react";
|
||||
import { useNDKContext } from "@/context/NDKContext";
|
||||
import { parseEvent } from "@/utils/nostr";
|
||||
import { ProgressSpinner } from "primereact/progressspinner";
|
||||
import { nip19 } from "nostr-tools";
|
||||
import appConfig from "@/config/appConfig";
|
||||
|
||||
const PurchasedListItem = ({ eventId, category }) => {
|
||||
const { ndk } = useNDKContext();
|
||||
const [event, setEvent] = useState(null);
|
||||
const [naddr, setNaddr] = useState(null);
|
||||
|
||||
useEffect(() => {
|
||||
const fetchEvent = async () => {
|
||||
@ -24,7 +27,23 @@ const PurchasedListItem = ({ eventId, category }) => {
|
||||
fetchEvent();
|
||||
}, [eventId, ndk]);
|
||||
|
||||
return !event || !ndk ? <ProgressSpinner className="w-[40px] h-[40px]" /> : (<a className="text-blue-500 underline hover:text-blue-600" href={category === "courses" ? `/courses/${event.id}` : `/details/${event.id}`}>{event.title}</a>);
|
||||
useEffect(() => {
|
||||
if (event) {
|
||||
console.log("event", event);
|
||||
encodeNaddr();
|
||||
}
|
||||
}, [event]);
|
||||
|
||||
const encodeNaddr = () => {
|
||||
setNaddr(nip19.naddrEncode({
|
||||
pubkey: event.pubkey,
|
||||
identifier: event.id,
|
||||
kind: event.kind,
|
||||
relayUrls: appConfig.defaultRelayUrls
|
||||
}))
|
||||
}
|
||||
|
||||
return !event || !ndk ? <ProgressSpinner className="w-[40px] h-[40px]" /> : (<a className="text-blue-500 underline hover:text-blue-600" href={category === "courses" ? `/course/${naddr}` : `/details/${naddr}`}>{event.title}</a>);
|
||||
}
|
||||
|
||||
export default PurchasedListItem;
|
@ -248,7 +248,6 @@ const UserSettings = () => {
|
||||
<Column field="amountPaid" header="Cost"></Column>
|
||||
<Column
|
||||
body={(rowData) => {
|
||||
console.log("rowData", rowData);
|
||||
return <PurchasedListItem eventId={rowData?.resource?.noteId || rowData?.course?.noteId} category={rowData?.course ? "courses" : "resources"} />
|
||||
}}
|
||||
header="Name"
|
||||
|
@ -104,9 +104,27 @@ export const addCoursePurchaseToUser = async (userId, purchaseData) => {
|
||||
where: { id: userId },
|
||||
data: {
|
||||
purchased: {
|
||||
create: {
|
||||
courseId: purchaseData.courseId,
|
||||
amountPaid: purchaseData.amountPaid,
|
||||
upsert: {
|
||||
where: {
|
||||
userId_courseId: {
|
||||
userId: userId,
|
||||
courseId: purchaseData.courseId,
|
||||
},
|
||||
},
|
||||
create: {
|
||||
courseId: purchaseData.courseId,
|
||||
amountPaid: purchaseData.amountPaid,
|
||||
},
|
||||
update: {
|
||||
amountPaid: purchaseData.amountPaid,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
include: {
|
||||
purchased: {
|
||||
include: {
|
||||
course: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user