From d13a3bbc9c6cd07ed9f39c2e659f9bb0c38a1cc8 Mon Sep 17 00:00:00 2001 From: Didictateur Date: Fri, 20 Feb 2026 22:53:08 +0100 Subject: [PATCH] fixed docker issues --- Dockerfile | 11 +- backend/src/game/__init__.py | 0 backend/src/game/game.py | 1 + backend/src/game/hand.py | 1 + backend/src/game/tile.py | 1 + backend/src/game/wall.py | 1 + frontend/js/hand.js | 2 +- frontend/pages/chap1.html | 2 +- frontend/pages/chap2.html | 4 +- frontend/pages/chap3.html | 189 +++++------------------------------ index.html | 2 +- 11 files changed, 43 insertions(+), 171 deletions(-) create mode 100644 backend/src/game/__init__.py diff --git a/Dockerfile b/Dockerfile index 03e2644..d284401 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,10 @@ WORKDIR /app COPY backend/src/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt -# Copier le code -COPY backend/src /app/backend/src +# Copier le code backend +COPY backend/src/ /app/ + +# Copier le frontend COPY frontend /app/frontend COPY components /app/components COPY img /app/img @@ -18,4 +20,7 @@ COPY vite.config.ts /app/ # Port Flask EXPOSE 5000 -CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "backend.src.api:app"] +# Définir PYTHONPATH pour que les imports relatifs fonctionnent +ENV PYTHONPATH=/app:$PYTHONPATH + +CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "api:app"] diff --git a/backend/src/game/__init__.py b/backend/src/game/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/game/game.py b/backend/src/game/game.py index a16f9a5..121d54e 100644 --- a/backend/src/game/game.py +++ b/backend/src/game/game.py @@ -1,3 +1,4 @@ +from __future__ import annotations from .hand import * from .wall import * diff --git a/backend/src/game/hand.py b/backend/src/game/hand.py index ff90535..3ee6a5f 100644 --- a/backend/src/game/hand.py +++ b/backend/src/game/hand.py @@ -1,3 +1,4 @@ +from __future__ import annotations from .tile import * import random as rd diff --git a/backend/src/game/tile.py b/backend/src/game/tile.py index a0dd56c..4749262 100644 --- a/backend/src/game/tile.py +++ b/backend/src/game/tile.py @@ -1,3 +1,4 @@ +from __future__ import annotations from game.error import * from game.value import * from functools import total_ordering diff --git a/backend/src/game/wall.py b/backend/src/game/wall.py index e6a91c3..b353bdd 100644 --- a/backend/src/game/wall.py +++ b/backend/src/game/wall.py @@ -1,3 +1,4 @@ +from __future__ import annotations from .tile import * from .hand import * diff --git a/frontend/js/hand.js b/frontend/js/hand.js index 3c6a44c..f10170c 100644 --- a/frontend/js/hand.js +++ b/frontend/js/hand.js @@ -9,7 +9,7 @@ class Hand { this.position = options.position || 'left-label'; // 'left-label' or 'top-label' this.tilt = options.tilt || 'none'; // 'none', 'left' (90deg), 'right' (-90deg), 'upside-down' (180deg) this.containerId = options.containerId || 'tiles-display'; - this.apiUrl = options.apiUrl || 'http://localhost:5000/api/random_hand'; + this.apiUrl = options.apiUrl || '/api/random_hand'; } /** diff --git a/frontend/pages/chap1.html b/frontend/pages/chap1.html index 1f526b1..44caa7a 100644 --- a/frontend/pages/chap1.html +++ b/frontend/pages/chap1.html @@ -186,7 +186,7 @@ let allTiles = []; // Récupérer les tuiles - fetch('http://localhost:5000/api/tiles') + fetch('/api/tiles') .then(r => r.json()) .then(data => { allTiles = data.tiles; diff --git a/frontend/pages/chap2.html b/frontend/pages/chap2.html index 0b4659a..72b9905 100644 --- a/frontend/pages/chap2.html +++ b/frontend/pages/chap2.html @@ -219,7 +219,7 @@ tilesDisplay.appendChild(interactiveTitle); // Créer et afficher la main interactive avec une tuile piochée - fetch('http://localhost:5000/api/hand_with_draw') + fetch('/api/hand_with_draw') .then(r => r.json()) .then(data => { const handDiv = document.createElement('div'); @@ -268,7 +268,7 @@ // Fonction pour défausser une tuile async function discardTile(tileId, tileElement) { try { - const response = await fetch('http://localhost:5000/api/discard', { + const response = await fetch('/api/discard', { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/frontend/pages/chap3.html b/frontend/pages/chap3.html index e7f654d..2be7082 100644 --- a/frontend/pages/chap3.html +++ b/frontend/pages/chap3.html @@ -111,171 +111,34 @@ : 'Tilineau'; }); - // Afficher les pons et les chiis - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay = document.getElementById('tiles-display'); - const tile = data.tiles[10]; - - if (tile) { - for (let i = 0; i < 3; i++) { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay.appendChild(tileDiv); - } - } - }) - .catch(error => console.error('Erreur:', error)); - - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay2 = document.getElementById('tiles-display-2'); - const tile1 = data.tiles[11]; - const tile2 = data.tiles[12]; - const tile3 = data.tiles[13]; - - if (tile1 && tile2 && tile3) { - const tiles = [tile1, tile2, tile3]; - tiles.forEach(tile => { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay2.appendChild(tileDiv); + // Fonction utilitaire pour afficher les tuiles + function displayTiles(displayId, tileIndices) { + fetch('/api/tiles') + .then(r => r.json()) + .then(data => { + const display = document.getElementById(displayId); + tileIndices.forEach(idx => { + const tile = data.tiles[idx]; + if (tile) { + const tileDiv = document.createElement('div'); + tileDiv.innerHTML = tile.svg; + display.appendChild(tileDiv); + } }); - } - }) - .catch(error => console.error('Erreur:', error)); + }) + .catch(error => console.error('Erreur:', error)); + } - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay = document.getElementById('tiles-display-3'); - const tile = data.tiles[30]; - - if (tile) { - for (let i = 0; i < 3; i++) { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay.appendChild(tileDiv); - } - } - }) - .catch(error => console.error('Erreur:', error)); - - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay = document.getElementById('tiles-display-4'); - const tile = data.tiles[32]; - - if (tile) { - for (let i = 0; i < 3; i++) { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay.appendChild(tileDiv); - } - } - }) - .catch(error => console.error('Erreur:', error)); - - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay2 = document.getElementById('tiles-display-5'); - const tile1 = data.tiles[21]; - const tile2 = data.tiles[22]; - - if (tile1 && tile2) { - const tiles = [tile1, tile2]; - tiles.forEach(tile => { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay2.appendChild(tileDiv); - }); - } - }) - .catch(error => console.error('Erreur:', error)); - - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay2 = document.getElementById('tiles-display-6'); - const tile1 = data.tiles[11]; - const tile2 = data.tiles[12]; - const tile3 = data.tiles[13]; - const tile4 = data.tiles[14]; - - if (tile1 && tile2) { - const tiles = [tile1, tile2, tile3, tile4]; - tiles.forEach(tile => { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay2.appendChild(tileDiv); - }); - } - }) - .catch(error => console.error('Erreur:', error)); - - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay2 = document.getElementById('tiles-display-7'); - const tile1 = data.tiles[27]; - const tile2 = data.tiles[28]; - const tile3 = data.tiles[29]; - - if (tile1 && tile2 && tile3) { - const tiles = [tile1, tile2, tile3]; - tiles.forEach(tile => { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay2.appendChild(tileDiv); - }); - } - }) - .catch(error => console.error('Erreur:', error)); - - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay2 = document.getElementById('tiles-display-8'); - const tile1 = data.tiles[31]; - const tile2 = data.tiles[32]; - const tile3 = data.tiles[33]; - - if (tile1 && tile2 && tile3) { - const tiles = [tile1, tile2, tile3]; - tiles.forEach(tile => { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay2.appendChild(tileDiv); - }); - } - }) - .catch(error => console.error('Erreur:', error)); - - fetch('http://localhost:5000/api/tiles') - .then(r => r.json()) - .then(data => { - const tilesDisplay2 = document.getElementById('tiles-display-9'); - const tile1 = data.tiles[3]; - const tile2 = data.tiles[13]; - const tile3 = data.tiles[23]; - const tile4 = data.tiles[6]; - const tile5 = data.tiles[16]; - const tile6 = data.tiles[26]; - - if (tile1 && tile2 && tile3 && tile4 && tile5 && tile6) { - const tiles = [tile1, tile2, tile3, tile4, tile5, tile6]; - tiles.forEach(tile => { - const tileDiv = document.createElement('div'); - tileDiv.innerHTML = tile.svg; - tilesDisplay2.appendChild(tileDiv); - }); - } - }) - .catch(error => console.error('Erreur:', error)); + // Afficher les combinaisons + displayTiles('tiles-display', [10, 10, 10]); + displayTiles('tiles-display-2', [11, 12, 13]); + displayTiles('tiles-display-3', [30, 30, 30]); + displayTiles('tiles-display-4', [32, 32, 32]); + displayTiles('tiles-display-5', [21, 22]); + displayTiles('tiles-display-6', [11, 12, 13, 14]); + displayTiles('tiles-display-7', [27, 28, 29]); + displayTiles('tiles-display-8', [31, 32, 33]); + displayTiles('tiles-display-9', [3, 13, 23, 6, 16, 26]); \ No newline at end of file diff --git a/index.html b/index.html index 28fafd1..d73e364 100644 --- a/index.html +++ b/index.html @@ -93,7 +93,7 @@ let allTiles = []; // Récupérer les tuiles - fetch('http://localhost:5000/api/tiles') + fetch('/api/tiles') .then(r => r.json()) .then(data => { allTiles = data.tiles;