From 4975bcc4ec509d0c0af3b9d895f18f3417887b84 Mon Sep 17 00:00:00 2001 From: bitsearch Date: Thu, 22 Jan 2026 20:17:10 +0100 Subject: [PATCH] gestion des photo ajoute (frontend), cependant petit bug photo HAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHHA --- srcs/backend/avatar/default.png | Bin 2595 -> 0 bytes srcs/frontend/src/avatar.js | 57 ++++++++++++++++++++++++++++---- 2 files changed, 51 insertions(+), 6 deletions(-) delete mode 100644 srcs/backend/avatar/default.png diff --git a/srcs/backend/avatar/default.png b/srcs/backend/avatar/default.png deleted file mode 100644 index 28f6a850b50d53156607dabe5cb5477ee6e762a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2595 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 qsNcu?UNufS9`8l`ANdhZ { - const url = this.avatarPreview.src; - if (url) { - localStorage.setItem("avatar_url", url); - this.message.textContent = "Avatar enregistré !"; - this.message.style.color = "#3cff01"; - } + // Send the selected photo to the server + this.postPhoto(); }); // Bind refresh button to re-fetch avatar from server @@ -107,6 +105,7 @@ export class AvatarWindow extends fenetre { return; } const data = await response.json(); + console.log(data); if (data && data.avatar_url) { this.avatarPreview.src = data.avatar_url; } else { @@ -117,4 +116,50 @@ export class AvatarWindow extends fenetre { } } + async postPhoto(){ + console.log("postPhoto launched..."); + const token = localStorage.getItem("auth_token"); + if (!token) { + this.message.textContent = "No auth. plz connect."; + this.message.style.color = "#f00"; + return; + } + const file = this.fileInput.files && this.fileInput.files[0]; + if (!file) { + this.message.textContent = "take image before"; + this.message.style.color = "#f00"; + return; + } + + const formData = new FormData(); + formData.append('avatar', file); + + try { + const response = await fetch('/api/avatar/upload', { + method: 'POST', + headers: { + 'Authorization': `Bearer ${token}` + }, + body: formData + }); + const data = await response.json(); + if (!response.ok) { + const err = data?.error || data?.message || 'Upload failed'; + this.message.textContent = err; + this.message.style.color = '#f00'; + return; + } + if (data && data.avatar_url) { + this.avatarPreview.src = data.avatar_url; + } + this.message.textContent = 'Avatar enregistré !'; + this.message.style.color = '#3cff01'; + } catch (err) { + console.error('Avatar upload error:', err); + this.message.textContent = 'Erreur lors de l’envoi'; + this.message.style.color = '#f00'; + } + } + + }