diff --git a/pages/[user].tsx b/pages/[user].tsx index 096f4349..ad297d08 100644 --- a/pages/[user].tsx +++ b/pages/[user].tsx @@ -5,7 +5,7 @@ import prisma from '../lib/prisma'; export default function User(props) { const eventTypes = props.eventTypes.map(type =>
  • - +

    {type.title}

    diff --git a/pages/[user]/[type].tsx b/pages/[user]/[type].tsx index 2de51be2..8d7fcc8b 100644 --- a/pages/[user]/[type].tsx +++ b/pages/[user]/[type].tsx @@ -228,6 +228,7 @@ export async function getServerSideProps(context) { username: context.query.user, }, select: { + id: true, username: true, name: true, bio: true, @@ -239,9 +240,12 @@ export async function getServerSideProps(context) { } }); - const eventType = await prisma.eventType.findUnique({ + const eventType = await prisma.eventType.findFirst({ where: { - id: parseInt(context.query.type), + userId: user.id, + slug: { + equals: context.query.type, + }, }, select: { id: true, diff --git a/pages/api/availability/eventtype.ts b/pages/api/availability/eventtype.ts index 77875a69..3725120b 100644 --- a/pages/api/availability/eventtype.ts +++ b/pages/api/availability/eventtype.ts @@ -24,6 +24,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) if (!user) { res.status(404).json({message: 'User not found'}); return; } const title = req.body.title; + const slug = req.body.slug; const description = req.body.description; const length = parseInt(req.body.length); const hidden = req.body.hidden; @@ -31,6 +32,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const createEventType = await prisma.eventType.create({ data: { title: title, + slug: slug, description: description, length: length, hidden: hidden, @@ -56,6 +58,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const id = req.body.id; const title = req.body.title; + const slug = req.body.slug; const description = req.body.description; const length = parseInt(req.body.length); const hidden = req.body.hidden; @@ -66,6 +69,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) }, data: { title: title, + slug: slug, description: description, length: length, hidden: hidden diff --git a/pages/availability/event/[type].tsx b/pages/availability/event/[type].tsx index c66f9a6f..bfa872ad 100644 --- a/pages/availability/event/[type].tsx +++ b/pages/availability/event/[type].tsx @@ -10,6 +10,7 @@ export default function EventType(props) { const router = useRouter(); const [ session, loading ] = useSession(); const titleRef = useRef(); + const slugRef = useRef(); const descriptionRef = useRef(); const lengthRef = useRef(); const isHiddenRef = useRef(); @@ -26,6 +27,7 @@ export default function EventType(props) { event.preventDefault(); const enteredTitle = titleRef.current.value; + const enteredSlug = slugRef.current.value; const enteredDescription = descriptionRef.current.value; const enteredLength = lengthRef.current.value; const enteredIsHidden = isHiddenRef.current.checked; @@ -34,7 +36,7 @@ export default function EventType(props) { const response = await fetch('/api/availability/eventtype', { method: 'PATCH', - body: JSON.stringify({id: props.eventType.id, title: enteredTitle, description: enteredDescription, length: enteredLength, hidden: enteredIsHidden}), + body: JSON.stringify({id: props.eventType.id, title: enteredTitle, slug: enteredSlug, description: enteredDescription, length: enteredLength, hidden: enteredIsHidden}), headers: { 'Content-Type': 'application/json' } @@ -75,6 +77,24 @@ export default function EventType(props) { +
    + +
    +
    + + {location.hostname}/{props.user.username}/ + + +
    +
    +
    @@ -142,6 +162,16 @@ export default function EventType(props) { } export async function getServerSideProps(context) { + const session = await getSession(context); + + const user = await prisma.user.findFirst({ + where: { + email: session.user.email, + }, + select: { + username: true + } + }); const eventType = await prisma.eventType.findUnique({ where: { @@ -150,6 +180,7 @@ export async function getServerSideProps(context) { select: { id: true, title: true, + slug: true, description: true, length: true, hidden: true @@ -158,6 +189,7 @@ export async function getServerSideProps(context) { return { props: { + user, eventType }, } diff --git a/pages/availability/index.tsx b/pages/availability/index.tsx index 403e4690..fbb4419a 100644 --- a/pages/availability/index.tsx +++ b/pages/availability/index.tsx @@ -15,6 +15,7 @@ export default function Availability(props) { const [successModalOpen, setSuccessModalOpen] = useState(false); const [showChangeTimesModal, setShowChangeTimesModal] = useState(false); const titleRef = useRef(); + const slugRef = useRef(); const descriptionRef = useRef(); const lengthRef = useRef(); const isHiddenRef = useRef(); @@ -54,6 +55,7 @@ export default function Availability(props) { event.preventDefault(); const enteredTitle = titleRef.current.value; + const enteredSlug = slugRef.current.value; const enteredDescription = descriptionRef.current.value; const enteredLength = lengthRef.current.value; const enteredIsHidden = isHiddenRef.current.checked; @@ -62,7 +64,7 @@ export default function Availability(props) { const response = await fetch('/api/availability/eventtype', { method: 'POST', - body: JSON.stringify({title: enteredTitle, description: enteredDescription, length: enteredLength, hidden: enteredIsHidden}), + body: JSON.stringify({title: enteredTitle, slug: enteredSlug, description: enteredDescription, length: enteredLength, hidden: enteredIsHidden}), headers: { 'Content-Type': 'application/json' } @@ -154,7 +156,7 @@ export default function Availability(props) { {eventType.length} minutes - {eventType.hidden && View} + {eventType.hidden && View} Edit @@ -213,6 +215,23 @@ export default function Availability(props) {
    +
    + +
    +
    + + {location.hostname}/{props.user.username}/ + + +
    +
    +
    @@ -351,6 +370,7 @@ export async function getServerSideProps(context) { select: { id: true, title: true, + slug: true, description: true, length: true, hidden: true diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 2b815ec7..288682e7 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -13,6 +13,7 @@ generator client { model EventType { id Int @default(autoincrement()) @id title String + slug String description String? length Int hidden Boolean @default(false)