Bloc A - Code mort: - Suppression Studio (components, views, features) - Suppression gamification + services mock (projectService, storageService, gamificationService) - Mise à jour Sidebar, Navbar, locales Bloc B - Frontend: - Suppression modal.tsx deprecated, Modal.stories (doublon Dialog) - Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true - Suppression 19 tests orphelins, retrait exclusions vitest.config Bloc C - Backend: - Extraction routes_auth.go depuis router.go Bloc D - Rust: - Suppression security_legacy.rs (code mort, patterns déjà dans security/)
1 line
5.6 KiB
JavaScript
1 line
5.6 KiB
JavaScript
import{g as o,l as d}from"./index-CYK_b1Uz.js";import{A as p}from"./vendor-http-Cz8wfb0q.js";class t extends Error{constructor(e,s,a=!1,n){super(e),this.code=s,this.retryable=a,this.originalError=n,this.name="TrackServiceError"}}const f=1024*1024*2,h={uploadTrack:async(r,e,s)=>{const a=Math.ceil(r.size/f),n=await o.post("/tracks/initiate",{filename:r.name,total_chunks:a,file_size:r.size,title:e.title,artist:e.artist,album:e.album,genre:e.genre}),{upload_id:i}=n.data;d.info(`[UPLOAD] Upload initiated with ID: ${i}`,{filename:r.name,totalChunks:a});for(let c=0;c<a;c++){const k=c*f,N=Math.min(k+f,r.size),g=r.slice(k,N),u=new FormData;u.append("chunk",g),u.append("index",c.toString()),u.append("upload_id",i);try{await o.post("/tracks/chunk",u,{timeout:3e5,_enableLogging:!1});const l=(c+1)/a*100;s&&s(l)}catch(l){throw d.error(`[UPLOAD] Failed to upload chunk ${c} for ${i}`,{error:l}),l}}const w=await o.post("/tracks/complete",{upload_id:i});return d.info(`[UPLOAD] Upload completed. Track ID: ${w.data.track_id}`),w.data},getTrackStatus:async r=>(await o.get(`/tracks/${r}/status`)).data};async function T(r={}){try{const e=new URLSearchParams;r.page&&e.append("page",r.page.toString()),r.limit&&e.append("limit",r.limit.toString()),r.userId&&e.append("user_id",r.userId),r.genre&&e.append("genre",r.genre),r.format&&e.append("format",r.format),r.sortBy&&e.append("sort_by",r.sortBy),r.sortOrder&&e.append("sort_order",r.sortOrder);const s=e.toString(),a=`/tracks${s?`?${s}`:""}`;return(await o.get(a)).data}catch(e){if(e instanceof p){if(e.response?.status===401)throw new t("Non autorisé: Veuillez vous connecter pour voir les tracks","VALIDATION",!1,e);if(e.response?.status===500)throw new t("Erreur serveur: Impossible de récupérer les tracks. Veuillez réessayer plus tard.","SERVER",!0,e);if(e.code==="ECONNABORTED"||e.code==="ETIMEDOUT"||!e.response)throw new t("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,e);const s=e.response?.data?.error||e.message||"Échec de la récupération des tracks";throw new t(s,"UNKNOWN",!1,e)}throw e instanceof t?e:new t("Erreur inconnue lors de la récupération des tracks","UNKNOWN",!1,e)}}async function E(r){try{return(await o.get(`/tracks/${r}`)).data.track}catch(e){if(e instanceof p){if(e.response?.status===401)throw new t("Non autorisé: Veuillez vous connecter pour voir ce track","VALIDATION",!1,e);if(e.response?.status===404)throw new t("Track introuvable","VALIDATION",!1,e);if(e.response?.status===500)throw new t("Erreur serveur: Impossible de récupérer le track. Veuillez réessayer plus tard.","SERVER",!0,e);if(e.code==="ECONNABORTED"||e.code==="ETIMEDOUT"||!e.response)throw new t("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,e);const s=e.response?.data?.error||e.message||"Échec de la récupération du track";throw new t(s,"UNKNOWN",!1,e)}throw e instanceof t?e:new t("Erreur inconnue lors de la récupération du track","UNKNOWN",!1,e)}}async function O(r,e){try{return(await o.put(`/tracks/${r}`,e)).data.track}catch(s){if(s instanceof p){if(s.response?.status===401)throw new t("Non autorisé: Veuillez vous connecter pour modifier ce track","VALIDATION",!1,s);if(s.response?.status===403)throw new t("Accès refusé: Vous ne pouvez modifier que vos propres tracks","VALIDATION",!1,s);if(s.response?.status===404)throw new t("Track introuvable","VALIDATION",!1,s);if(s.response?.status===400){const n=s.response?.data?.error||"Données invalides";throw new t(n,"VALIDATION",!1,s)}if(s.response?.status===500)throw new t("Erreur serveur: Impossible de mettre à jour le track. Veuillez réessayer plus tard.","SERVER",!0,s);if(s.code==="ECONNABORTED"||s.code==="ETIMEDOUT"||!s.response)throw new t("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,s);const a=s.response?.data?.error||s.message||"Échec de la mise à jour du track";throw new t(a,"UNKNOWN",!1,s)}throw s instanceof t?s:new t("Erreur inconnue lors de la mise à jour du track","UNKNOWN",!1,s)}}async function I(r){try{await o.delete(`/tracks/${r}`)}catch(e){if(e instanceof p){if(e.response?.status===401)throw new t("Non autorisé: Veuillez vous connecter pour supprimer ce track","VALIDATION",!1,e);if(e.response?.status===403)throw new t("Accès refusé: Vous ne pouvez supprimer que vos propres tracks","VALIDATION",!1,e);if(e.response?.status===404)throw new t("Track introuvable","VALIDATION",!1,e);if(e.response?.status===500)throw new t("Erreur serveur: Impossible de supprimer le track. Veuillez réessayer plus tard.","SERVER",!0,e);if(e.code==="ECONNABORTED"||e.code==="ETIMEDOUT"||!e.response)throw new t("Erreur réseau: Impossible de se connecter au serveur.","NETWORK",!0,e);const s=e.response?.data?.error||e.message||"Échec de la suppression du track";throw new t(s,"UNKNOWN",!1,e)}throw e instanceof t?e:new t("Erreur inconnue lors de la suppression du track","UNKNOWN",!1,e)}}async function y(r){return{tracks:(await o.get("/tracks/search",{params:{query:r}})).data}}async function A(r){return o.post(`/tracks/${r}/like`)}async function m(r){return o.delete(`/tracks/${r}/like`)}async function v(r){return o.post(`/tracks/${r}/play`)}async function D(r){return(await o.get(`/tracks/${r}/download`,{responseType:"blob"})).data}async function V(r,e,s){return h.uploadTrack(r,e,s)}async function b(r){return h.getTrackStatus(r)}const U={list:async r=>{const e={page:r?.page,limit:r?.limit,userId:r?.user_id,genre:r?.genre,sortBy:r?.sort_by,sortOrder:r?.order},s=await T(e);return{tracks:s.tracks,pagination:s.pagination}},search:y,get:E,update:async(r,e)=>({track:await O(r,e)}),delete:I,like:A,unlike:m,recordPlay:v,download:D,upload:V,getStatus:b};export{t as T,T as a,E as g,U as t};
|