diff --git a/i18n/locales/en_us.json b/i18n/locales/en_us.json index d167034..6509eb6 100644 --- a/i18n/locales/en_us.json +++ b/i18n/locales/en_us.json @@ -629,6 +629,14 @@ "type": "Type", "upload": "Upload", "uploadFile": "Upload file", + "user": { + "unknown": "Unknown user", + "editProfile": "Edit profile", + "recent": "Recent activity (TODO)", + "recentSub": "Recent activity by this user", + "notFound": "User not found", + "noActivity": "No recent activity" + }, "userHeader": { "closeSidebar": "Close sidebar", "links": { diff --git a/pages/user/[id]/index.vue b/pages/user/[id]/index.vue new file mode 100644 index 0000000..74855a1 --- /dev/null +++ b/pages/user/[id]/index.vue @@ -0,0 +1,75 @@ + + + diff --git a/server/api/v1/user/[id]/index.get.ts b/server/api/v1/user/[id]/index.get.ts new file mode 100644 index 0000000..20d30c4 --- /dev/null +++ b/server/api/v1/user/[id]/index.get.ts @@ -0,0 +1,29 @@ +import aclManager from "~/server/internal/acls"; +import prisma from "~/server/internal/db/database"; + +export default defineEventHandler(async (h3) => { + const requestingUser = await aclManager.getUserACL(h3, ["read"]); + if (!requestingUser) throw createError({ statusCode: 403 }); + + const userId = getRouterParam(h3, "id"); + if (!userId) + throw createError({ + statusCode: 400, + statusMessage: "No userId in route.", + }); + + const user = await prisma.user.findUnique({ + where: { id: userId }, + select: { + id: true, + username: true, + displayName: true, + profilePictureObjectId: true, + }, + }); + + if (!user) + throw createError({ statusCode: 404, statusMessage: "User not found." }); + + return user; +});