From 5e44e9516e73a961ee30684b2c80ecb4c19e6ea4 Mon Sep 17 00:00:00 2001 From: Bradley Shellnut Date: Wed, 6 Apr 2022 16:28:13 -0700 Subject: [PATCH] Add profile page. --- src/routes/home/profile/[user].svelte | 124 ++++++++++++++++++++++++++ src/routes/home/profile/[user].ts | 48 ++++++++++ 2 files changed, 172 insertions(+) create mode 100644 src/routes/home/profile/[user].svelte create mode 100644 src/routes/home/profile/[user].ts diff --git a/src/routes/home/profile/[user].svelte b/src/routes/home/profile/[user].svelte new file mode 100644 index 0000000..12ff8e4 --- /dev/null +++ b/src/routes/home/profile/[user].svelte @@ -0,0 +1,124 @@ + + + + {profile.name} ({profile.handle}) + + +
+ + {profile.name} +
+ +
+
+ {profile.name} + {profile.handle} +
+
+ {profile.about} +
+
+ + + +{#each tweets as tweet (tweet.id)} + +{/each} + + \ No newline at end of file diff --git a/src/routes/home/profile/[user].ts b/src/routes/home/profile/[user].ts new file mode 100644 index 0000000..9c68063 --- /dev/null +++ b/src/routes/home/profile/[user].ts @@ -0,0 +1,48 @@ +import type { RequestHandler } from "@sveltejs/kit"; + +import prisma from "$root/lib/prisma"; +import { timePosted } from "$root/lib/date"; + +export const get: RequestHandler = async ({ params }) => { + const profile = await prisma.user.findFirst({ + where: { name: params.user } + }) + + const tweets = await prisma.tweet.findMany({ + where: { user: { id: 1 } }, + include: { user: true }, + orderBy: { posted: 'desc' } + }) + + const liked = await prisma.liked.findMany({ + where: { userId: 1 }, + select: { tweetId: true } + }) + + const likedTweets = Object.keys(liked).map( + key => liked[key].tweetId + ) + + if (!profile || !tweets || tweets.length === 0) { + return { status: 404 } + } + + const userTweets = tweets.map(tweet => { + return { + id: tweet.id, + content: tweet.content, + likes: tweet.likes, + posted: timePosted(tweet.posted), + url: tweet.url, + avatar: tweet.user.avatar, + handle: tweet.user.handle, + name: tweet.user.name, + liked: likedTweets.includes(tweet.id) + } + }) + + return { + status: 200, + body: { profile, tweets: userTweets } + } +} \ No newline at end of file