diff --git a/frontend/static/js/api/profile.js b/frontend/static/js/api/profile.js index b3f1b15..29db822 100644 --- a/frontend/static/js/api/profile.js +++ b/frontend/static/js/api/profile.js @@ -5,21 +5,21 @@ class Profile /** * @param {Client} client */ - constructor (client, id, username = undefined, avatar_url = undefined) + constructor (client, username, id = undefined, avatar_url = undefined) { /** * @type {Client} client */ this.client = client; - this.id = id; this.username = username; + this.id = id; this.avatar_url = avatar_url; this.isBlocked = false; } async init() { - let response = await this.client._get(`/api/profiles/${this.id}`); + let response = await this.client._get(`/api/profiles/${this.username}`); if (response.status !== 200) return response.status; diff --git a/frontend/static/js/api/profiles.js b/frontend/static/js/api/profiles.js index 177f5a0..70618db 100644 --- a/frontend/static/js/api/profiles.js +++ b/frontend/static/js/api/profiles.js @@ -20,14 +20,14 @@ class Profiles let profiles = [] response_data.forEach((profile) => { - profiles.push(new Profile(this.client, profile.user_id, profile.username, profile.avatar_url)) + profiles.push(new Profile(this.client, profile.username, profile.user_id, profile.avatar_url)) }); return profiles; } - async getProfile(user_id) + async getProfile(username) { - let profile = new Profile(this.client, user_id); + let profile = new Profile(this.client, username); if (await profile.init()) return null; return profile; diff --git a/frontend/static/js/index.js b/frontend/static/js/index.js index 291938f..af6fbda 100644 --- a/frontend/static/js/index.js +++ b/frontend/static/js/index.js @@ -68,7 +68,7 @@ const router = async(uri) => { const routes = [ { path: "/", view: Dashboard }, - { path: "/profiles/:id", view: ProfilePageView }, + { path: "/profiles/:username", view: ProfilePageView }, { path: "/tournaments/create", view: TournamentCreateView }, { path: "/tournaments/:id", view: TournamentPageView }, { path: "/tournaments/", view: TournamentsView }, diff --git a/frontend/static/js/views/MeView.js b/frontend/static/js/views/MeView.js index 8cdcf64..357c072 100644 --- a/frontend/static/js/views/MeView.js +++ b/frontend/static/js/views/MeView.js @@ -18,7 +18,7 @@ export default class extends AbstractAuthentificateView } async display_avatar() { - let profile = await client.profiles.getProfile(client.me.id); + let profile = await client.profiles.getProfile(client.me.username); if (profile !== undefined || profile !== null) { if (document.getElementById("avatar") != undefined) document.getElementById("avatar").remove(); diff --git a/frontend/static/js/views/ProfilePageView.js b/frontend/static/js/views/ProfilePageView.js index bb4a6fc..8d8f930 100644 --- a/frontend/static/js/views/ProfilePageView.js +++ b/frontend/static/js/views/ProfilePageView.js @@ -4,17 +4,16 @@ import { client } from "../index.js" export default class extends AbstractView { constructor(params) { super(params, "Profile "); - this.user_id = params.id; + this.username = params.username; } async postInit() { - let profile = await client.profiles.getProfile(this.user_id); - - if (profile === null) + this.profile = await client.profiles.getProfile(this.username); + if (this.profile === null) return 404; + this.userId = this.profile.id; - this.profile = await client.profiles.getProfile(this.user_id); this.info = document.getElementById("info"); // Username @@ -39,16 +38,16 @@ export default class extends AbstractView { if (await client.isAuthentificate() === false) return; - if (client.me.id != this.user_id) { + if (client.me.id != this.userId) { let block = document.getElementById("block") || document.createElement("a"); block.id = "block"; block.innerText = ""; block.onclick = async () => { if (!this.profile.isBlocked) - await client.profiles.block(this.user_id); + await client.profiles.block(this.userId); else - await client.profiles.deblock(this.user_id); - this.profile = await client.profiles.getProfile(this.user_id); + await client.profiles.deblock(this.userId); + this.profile = await client.profiles.getProfile(this.username); this.blockButton(); }; if (this.profile.isBlocked) diff --git a/profiles/urls.py b/profiles/urls.py index 8fe7c4f..7d6a001 100644 --- a/profiles/urls.py +++ b/profiles/urls.py @@ -7,9 +7,9 @@ from . import views urlpatterns = [ path("me", viewsets.MyProfileViewSet.as_view({'patch': 'partial_update', 'get': 'retrieve'}), name="my_profile_page"), - path("", viewsets.ProfileViewSet.as_view({'get': 'retrieve'}), name="profile_page"), path("", viewsets.ProfileViewSet.as_view({'get': 'list'}), name="profiles_list"), path("block", views.BlocksView.as_view(), name="block_page"), path("block/", views.BlockView.as_view(), name="block_page"), + path("", viewsets.ProfileViewSet.as_view({'get': 'retrieve'}), name="profile_page"), ] + static("/static/avatars/", document_root="./avatars") diff --git a/profiles/viewsets.py b/profiles/viewsets.py index 6e73ad8..a0aa2c5 100644 --- a/profiles/viewsets.py +++ b/profiles/viewsets.py @@ -7,6 +7,7 @@ from rest_framework.authentication import SessionAuthentication from django.http import HttpRequest from django.db.models import QuerySet +from django.contrib.auth.models import User from .serializers import ProfileSerializer from .models import ProfileModel @@ -17,10 +18,11 @@ class ProfileViewSet(viewsets.ModelViewSet): parser_classes = (MultiPartParser, FormParser) permission_classes = (permissions.IsAuthenticatedOrReadOnly,) - def retrieve(self, request: HttpRequest, pk=None): - if (not self.queryset().filter(pk=pk).exists()): + def retrieve(self, request: HttpRequest, username=None): + user = User.objects.filter(username=username) + if (not user): return Response({"detail": "Profile not found."}, status=status.HTTP_404_NOT_FOUND) - instance = self.queryset().get(pk=pk) + instance = self.queryset().get(pk=user[0].pk) instance.avatar_url.name = instance.avatar_url.name[instance.avatar_url.name.find("static") - 1:] return Response(self.serializer_class(instance).data, status=status.HTTP_200_OK)