prod: UI Optimisée mise en production

- Documentation archivée et réorganisée
- Backend: Ajout tests, migrations, library service, rate limiting
- Frontend: Suppression Flutter, focus sur interface web HTML/JS
- Tailwind CSS ajouté pour le style
- Améliorations UX et corrections bugs

Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
This commit is contained in:
root
2026-01-20 09:56:39 +00:00
parent bc03225e47
commit 801e6a050b
263 changed files with 33100 additions and 23058 deletions
+3228 -147
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+40
View File
@@ -0,0 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<title>Test AudiOhm</title>
</head>
<body>
<h1>Test API</h1>
<button onclick="testTrending()">Test Trending</button>
<button onclick="testStream()">Test Stream</button>
<pre id="output"></pre>
<script>
async function testTrending() {
const output = document.getElementById('output');
output.textContent = 'Testing trending...';
try {
const response = await fetch('/api/v1/music/trending?limit=1');
const data = await response.json();
output.textContent = 'Trending Response:\n' + JSON.stringify(data, null, 2);
} catch (error) {
output.textContent = 'Error: ' + error.message;
}
}
async function testStream() {
const output = document.getElementById('output');
output.textContent = 'Testing stream...';
try {
const response = await fetch('/api/v1/music/youtube/NqDGkdDh8WE/stream');
const data = await response.json();
output.textContent = 'Stream Response:\n' + JSON.stringify(data, null, 2);
} catch (error) {
output.textContent = 'Error: ' + error.message;
}
}
</script>
</body>
</html>
+43
View File
@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html>
<head>
<title>Test Functions</title>
</head>
<body>
<h1>Test des fonctions JavaScript</h1>
<div id="results"></div>
<script src="js/app.js"></script>
<script>
const results = document.getElementById('results');
function testFunction(name, exists) {
const div = document.createElement('div');
div.style.color = exists ? 'green' : 'red';
div.textContent = (exists ? '✅' : '❌') + ' ' + name;
results.appendChild(div);
}
// Tester les fonctions critiques
testFunction('switchLibraryTab', typeof window.switchLibraryTab === 'function');
testFunction('loadUserData', typeof window.loadUserData === 'function');
testFunction('playPrevious', typeof window.playPrevious === 'function');
testFunction('playNext', typeof window.playNext === 'function');
testFunction('togglePlayPause', typeof window.togglePlayPause === 'function');
testFunction('toggleShuffle', typeof window.toggleShuffle === 'function');
testFunction('toggleRepeat', typeof window.toggleRepeat === 'function');
testFunction('toggleMute', typeof window.toggleMute === 'function');
testFunction('handleSeek', typeof window.handleSeek === 'function');
testFunction('handleVolumeChange', typeof window.handleVolumeChange === 'function');
testFunction('updateProgress', typeof window.updateProgress === 'function');
testFunction('updateDuration', typeof window.updateDuration === 'function');
testFunction('handleTrackEnd', typeof window.handleTrackEnd === 'function');
testFunction('toggleLike', typeof window.toggleLike === 'function');
testFunction('loadPlaylists', typeof window.loadPlaylists === 'function');
testFunction('loadLikedTracks', typeof window.loadLikedTracks === 'function');
testFunction('loadListeningHistory', typeof window.loadListeningHistory === 'function');
testFunction('playTrack', typeof window.playTrack === 'function');
testFunction('createPlaylist', typeof window.createPlaylist === 'function');
</script>
</body>
</html>