From 1f18813b4171d9632fa2dc92e136cf491834585a Mon Sep 17 00:00:00 2001 From: Sidney Gomes Date: Fri, 24 Jul 2026 17:56:11 -0300 Subject: [PATCH] Add S3 MinIO upload feature for lesson cover images in admin manager --- src/components/AdminContentManager.tsx | 58 ++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/src/components/AdminContentManager.tsx b/src/components/AdminContentManager.tsx index 40c6206..c4e4d4c 100644 --- a/src/components/AdminContentManager.tsx +++ b/src/components/AdminContentManager.tsx @@ -102,6 +102,38 @@ export default function AdminContentManager({ token }: AdminContentManagerProps) } }; + const [uploadingLessonImage, setUploadingLessonImage] = useState(false); + + const handleLessonImageUpload = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + + const formData = new FormData(); + formData.append('file', file); + + setUploadingLessonImage(true); + try { + const res = await fetch('/api/admin/upload', { + method: 'POST', + headers: { + 'Authorization': `Bearer ${token}` + }, + body: formData + }); + const data = await res.json(); + if (res.ok && data.url) { + setLessonForm(prev => ({ ...prev, thumbnailUrl: data.url })); + } else { + alert(data.error || 'Erro ao fazer upload da imagem'); + } + } catch (err) { + console.error(err); + alert('Erro de conexão ao fazer upload'); + } finally { + setUploadingLessonImage(false); + } + }; + useEffect(() => { fetchCourses(); }, []); @@ -708,13 +740,25 @@ export default function AdminContentManager({ token }: AdminContentManagerProps)
- setLessonForm({ ...lessonForm, thumbnailUrl: e.target.value })} - placeholder="Cole a URL da imagem de capa para esta aula (ex: https://meuservidor.com/capa.jpg)" - className="w-full glass-input rounded-lg p-3 text-xs text-white focus:outline-none" - /> +
+ setLessonForm({ ...lessonForm, thumbnailUrl: e.target.value })} + placeholder="Cole a URL ou use o botão para fazer upload para o S3" + className="flex-1 glass-input rounded-lg p-3 text-xs text-white focus:outline-none" + /> + +