Skip to content

Commit 6c8a9b0

Browse files
created "ME" endpoint to fetch details for the logged in user
1 parent 22b1c5e commit 6c8a9b0

4 files changed

Lines changed: 45 additions & 0 deletions

File tree

client/src/hooks/me.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { useQuery } from "@tanstack/react-query";
2+
3+
import api from "@/lib/api";
4+
5+
export interface User {
6+
id: number;
7+
username: string;
8+
first_name: string;
9+
last_name: string;
10+
email: string;
11+
is_staff: boolean;
12+
}
13+
14+
export const useMe = () =>
15+
useQuery<User>({
16+
queryKey: ["me"],
17+
queryFn: () => api.get("/user/me/").then((r) => r.data),
18+
});

client/src/pages/home.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,34 @@
1+
import { useRouter } from "next/router";
2+
3+
import { Button } from "@/components/ui/button";
14
import EventCard from "@/components/ui/event-card";
25
import { useEvents } from "@/hooks/events";
6+
import { useMe } from "@/hooks/me";
7+
import { clearTokens } from "@/lib/auth";
38

49
import SearchDock from "../components/ui/search-dock";
510
import DockLayout from "./layouts/docklayout";
611

712
export default function Home() {
813
const { data: events, isLoading } = useEvents();
14+
const { data: me } = useMe();
15+
const router = useRouter();
16+
17+
const logout = () => {
18+
clearTokens();
19+
router.push("/login");
20+
};
921

1022
return (
1123
<>
1224
<DockLayout bottomOverlay={<SearchDock></SearchDock>}>
1325
<div className="mx-auto max-w-7xl space-y-3 px-4 py-6">
26+
{me && (
27+
<div>
28+
<p>Hello {me.first_name}</p>
29+
<Button onClick={logout}>Logout</Button>
30+
</div>
31+
)}
1432
{!isLoading &&
1533
events?.map((event) => (
1634
<EventCard key={event.id} event={event}></EventCard>

server/user/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
path("profile/", views.UserProfileList.as_view(), name="profile-list"),
88
path("profile/<int:pk>/", views.UserProfileDetail.as_view(), name="user-profile-detail"),
99
path("register/", views.RegisterView.as_view(), name="user-register"),
10+
path("me/", views.MeView.as_view(), name="me"),
1011
]
1112

server/user/views.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ class UserProfileDetail(generics.RetrieveUpdateAPIView):
2727
queryset = Profile.objects.all()
2828
serializer_class = ProfileSerializer
2929

30+
class MeView(APIView):
31+
permission_classes = [permissions.IsAuthenticated]
32+
serializer_class = UserSerializer
33+
34+
def get(self, request):
35+
serializer = self.serializer_class(request.user)
36+
return Response(serializer.data)
37+
3038
class RegisterView(APIView):
3139
authentication_classes = []
3240
permission_classes = [AllowAny]

0 commit comments

Comments
 (0)