diff --git a/src/lib/components/lnv/sidebar/UserSidebar.svelte b/src/lib/components/lnv/sidebar/UserSidebar.svelte index 28064bf..32b4ecf 100644 --- a/src/lib/components/lnv/sidebar/UserSidebar.svelte +++ b/src/lib/components/lnv/sidebar/UserSidebar.svelte @@ -5,7 +5,7 @@ import { getAuthURL, getOIDCUser } from "$lib/services/oidc"; import * as Avatar from "$lib/components/ui/avatar"; import { m } from "$lang/messages"; - import { refreshToken, uploadID } from "$lib/services/lnv"; + import { fetchMyUser, followUser, refreshToken, unfollowUser, uploadID } from "$lib/services/lnv"; interface OIDCUser { sub: string; @@ -25,6 +25,8 @@ ); } }); + + let testInput = ""; {#if !user} @@ -74,6 +76,22 @@ refreshToken(); }}>refresh + + {#await fetchMyUser() then u} + Followers: {u.followers} + Following: {u.following} + Reviews: {u.reviewsCount} + Hazards: {u.hazardsCount} + {/await} + + + + +
{user.sub}
{JSON.stringify(user, null, 2)} {/if} diff --git a/src/lib/services/lnv.ts b/src/lib/services/lnv.ts index ec2a7b7..c41a8f1 100644 --- a/src/lib/services/lnv.ts +++ b/src/lib/services/lnv.ts @@ -280,3 +280,48 @@ export async function ping() { const res = await fetch(LNV_SERVER + "/ping").catch(() => ({ ok: false })); return res.ok; } + +export interface UserInfo { + username: string; + createdAt: string; + reviewsCount: number; + hazardsCount: number; + followers: number; + following: number; +} + +export async function fetchMyUser(): Promise { + const res = await authFetch(LNV_SERVER + "/user/me"); + if (!res.ok) { + throw new Error(`Failed to fetch user: ${res.statusText}`); + } + return await res.json(); +} + +export async function followUser(username: string) { + const res = await authFetch(LNV_SERVER + "/user/follow", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ username }), + }); + if (!res.ok) { + throw new Error(`Failed to follow user: ${res.statusText}`); + } + return await res.json(); +} + +export async function unfollowUser(username: string) { + const res = await authFetch(LNV_SERVER + "/user/unfollow", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ username }), + }); + if (!res.ok) { + throw new Error(`Failed to unfollow user: ${res.statusText}`); + } + return await res.json(); +}