fixed docker issues
This commit is contained in:
parent
9af67daf3e
commit
d13a3bbc9c
11 changed files with 43 additions and 171 deletions
11
Dockerfile
11
Dockerfile
|
|
@ -6,8 +6,10 @@ WORKDIR /app
|
||||||
COPY backend/src/requirements.txt .
|
COPY backend/src/requirements.txt .
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
# Copier le code
|
# Copier le code backend
|
||||||
COPY backend/src /app/backend/src
|
COPY backend/src/ /app/
|
||||||
|
|
||||||
|
# Copier le frontend
|
||||||
COPY frontend /app/frontend
|
COPY frontend /app/frontend
|
||||||
COPY components /app/components
|
COPY components /app/components
|
||||||
COPY img /app/img
|
COPY img /app/img
|
||||||
|
|
@ -18,4 +20,7 @@ COPY vite.config.ts /app/
|
||||||
# Port Flask
|
# Port Flask
|
||||||
EXPOSE 5000
|
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"]
|
||||||
|
|
|
||||||
0
backend/src/game/__init__.py
Normal file
0
backend/src/game/__init__.py
Normal file
|
|
@ -1,3 +1,4 @@
|
||||||
|
from __future__ import annotations
|
||||||
from .hand import *
|
from .hand import *
|
||||||
from .wall import *
|
from .wall import *
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
from __future__ import annotations
|
||||||
from .tile import *
|
from .tile import *
|
||||||
|
|
||||||
import random as rd
|
import random as rd
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
from __future__ import annotations
|
||||||
from game.error import *
|
from game.error import *
|
||||||
from game.value import *
|
from game.value import *
|
||||||
from functools import total_ordering
|
from functools import total_ordering
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
from __future__ import annotations
|
||||||
from .tile import *
|
from .tile import *
|
||||||
from .hand import *
|
from .hand import *
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ class Hand {
|
||||||
this.position = options.position || 'left-label'; // 'left-label' or 'top-label'
|
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.tilt = options.tilt || 'none'; // 'none', 'left' (90deg), 'right' (-90deg), 'upside-down' (180deg)
|
||||||
this.containerId = options.containerId || 'tiles-display';
|
this.containerId = options.containerId || 'tiles-display';
|
||||||
this.apiUrl = options.apiUrl || 'http://localhost:5000/api/random_hand';
|
this.apiUrl = options.apiUrl || '/api/random_hand';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@
|
||||||
let allTiles = [];
|
let allTiles = [];
|
||||||
|
|
||||||
// Récupérer les tuiles
|
// Récupérer les tuiles
|
||||||
fetch('http://localhost:5000/api/tiles')
|
fetch('/api/tiles')
|
||||||
.then(r => r.json())
|
.then(r => r.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
allTiles = data.tiles;
|
allTiles = data.tiles;
|
||||||
|
|
|
||||||
|
|
@ -219,7 +219,7 @@
|
||||||
tilesDisplay.appendChild(interactiveTitle);
|
tilesDisplay.appendChild(interactiveTitle);
|
||||||
|
|
||||||
// Créer et afficher la main interactive avec une tuile piochée
|
// 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(r => r.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
const handDiv = document.createElement('div');
|
const handDiv = document.createElement('div');
|
||||||
|
|
@ -268,7 +268,7 @@
|
||||||
// Fonction pour défausser une tuile
|
// Fonction pour défausser une tuile
|
||||||
async function discardTile(tileId, tileElement) {
|
async function discardTile(tileId, tileElement) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('http://localhost:5000/api/discard', {
|
const response = await fetch('/api/discard', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
|
|
|
||||||
|
|
@ -111,171 +111,34 @@
|
||||||
: '<img src="../../img/tilineau/speaking.png" alt="Tilineau">';
|
: '<img src="../../img/tilineau/speaking.png" alt="Tilineau">';
|
||||||
});
|
});
|
||||||
|
|
||||||
// Afficher les pons et les chiis
|
// Fonction utilitaire pour afficher les tuiles
|
||||||
fetch('http://localhost:5000/api/tiles')
|
function displayTiles(displayId, tileIndices) {
|
||||||
|
fetch('/api/tiles')
|
||||||
.then(r => r.json())
|
.then(r => r.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
const tilesDisplay = document.getElementById('tiles-display');
|
const display = document.getElementById(displayId);
|
||||||
const tile = data.tiles[10];
|
tileIndices.forEach(idx => {
|
||||||
|
const tile = data.tiles[idx];
|
||||||
if (tile) {
|
if (tile) {
|
||||||
for (let i = 0; i < 3; i++) {
|
|
||||||
const tileDiv = document.createElement('div');
|
const tileDiv = document.createElement('div');
|
||||||
tileDiv.innerHTML = tile.svg;
|
tileDiv.innerHTML = tile.svg;
|
||||||
tilesDisplay.appendChild(tileDiv);
|
display.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);
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.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')
|
// Afficher les combinaisons
|
||||||
.then(r => r.json())
|
displayTiles('tiles-display', [10, 10, 10]);
|
||||||
.then(data => {
|
displayTiles('tiles-display-2', [11, 12, 13]);
|
||||||
const tilesDisplay = document.getElementById('tiles-display-4');
|
displayTiles('tiles-display-3', [30, 30, 30]);
|
||||||
const tile = data.tiles[32];
|
displayTiles('tiles-display-4', [32, 32, 32]);
|
||||||
|
displayTiles('tiles-display-5', [21, 22]);
|
||||||
if (tile) {
|
displayTiles('tiles-display-6', [11, 12, 13, 14]);
|
||||||
for (let i = 0; i < 3; i++) {
|
displayTiles('tiles-display-7', [27, 28, 29]);
|
||||||
const tileDiv = document.createElement('div');
|
displayTiles('tiles-display-8', [31, 32, 33]);
|
||||||
tileDiv.innerHTML = tile.svg;
|
displayTiles('tiles-display-9', [3, 13, 23, 6, 16, 26]);
|
||||||
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));
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -93,7 +93,7 @@
|
||||||
let allTiles = [];
|
let allTiles = [];
|
||||||
|
|
||||||
// Récupérer les tuiles
|
// Récupérer les tuiles
|
||||||
fetch('http://localhost:5000/api/tiles')
|
fetch('/api/tiles')
|
||||||
.then(r => r.json())
|
.then(r => r.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
allTiles = data.tiles;
|
allTiles = data.tiles;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue