fixed docker issues

This commit is contained in:
Didictateur 2026-02-20 22:53:08 +01:00
parent 9af67daf3e
commit d13a3bbc9c
11 changed files with 43 additions and 171 deletions

View file

@ -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"]

View file

View file

@ -1,3 +1,4 @@
from __future__ import annotations
from .hand import *
from .wall import *

View file

@ -1,3 +1,4 @@
from __future__ import annotations
from .tile import *
import random as rd

View file

@ -1,3 +1,4 @@
from __future__ import annotations
from game.error import *
from game.value import *
from functools import total_ordering

View file

@ -1,3 +1,4 @@
from __future__ import annotations
from .tile import *
from .hand import *

View file

@ -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';
}
/**

View file

@ -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;

View file

@ -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',

View file

@ -111,171 +111,34 @@
: '<img src="../../img/tilineau/speaking.png" alt="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]);
</script>
</body>
</html>

View file

@ -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;