diff --git a/docker-compose.yml b/docker-compose.yml index a0ac73b..154f957 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,15 +19,10 @@ services: restart: unless-stopped ports: - "3000:3000" + env_file: + - ./nest-backend/.env environment: DATABASE_URL: postgresql://nest_user:nest_password@db:5432/nest_db - JWT_SECRET: ${JWT_SECRET:-change_me_in_production} - PORT: 3000 - ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} - ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@crowmate.fr} - ADMIN_PASSWORD: ${ADMIN_PASSWORD:-change_me} - FRONT_ORIGIN: ${FRONT_ORIGIN:-http://localhost:5173} - INTRA_ORIGIN: ${INTRA_ORIGIN:-http://localhost:5174} depends_on: db: condition: service_healthy @@ -38,7 +33,9 @@ services: build: ./nest-front restart: unless-stopped ports: - - "80:80" + - "5173:5173" + environment: + API_URL: http://api:3000 depends_on: - api diff --git a/nest-front/Dockerfile b/nest-front/Dockerfile index 8729d50..b293fdb 100644 --- a/nest-front/Dockerfile +++ b/nest-front/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-alpine AS build +FROM node:25-alpine AS build WORKDIR /app diff --git a/nest-intra/Dockerfile b/nest-intra/Dockerfile index e94f5ce..a3d24af 100644 --- a/nest-intra/Dockerfile +++ b/nest-intra/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-alpine AS build +FROM node:25-alpine AS build WORKDIR /app diff --git a/nest-intra/nginx.conf b/nest-intra/nginx.conf index ad301b9..bf22cad 100644 --- a/nest-intra/nginx.conf +++ b/nest-intra/nginx.conf @@ -3,14 +3,15 @@ server { root /usr/share/nginx/html; index index.html; - # Use Docker's embedded DNS resolver; defer resolution to request time - resolver 127.0.0.11 valid=30s; + # Docker DNS; resolve API service name at request time. + resolver 127.0.0.11 ipv6=off valid=10s; + set $api_upstream http://api:3000; location /api/ { - set $api_upstream http://api:3000; - proxy_pass $api_upstream; + proxy_pass $api_upstream/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { diff --git a/nest-intra/src/pages/intranet/IntranetBugs.tsx b/nest-intra/src/pages/intranet/IntranetBugs.tsx index 12721a5..8894848 100644 --- a/nest-intra/src/pages/intranet/IntranetBugs.tsx +++ b/nest-intra/src/pages/intranet/IntranetBugs.tsx @@ -26,6 +26,7 @@ export default function IntranetBugs() { const [severityFilter, setSeverityFilter] = useState('all'); const [assignedFilter, setAssignedFilter] = useState('all'); const [noteText, setNoteText] = useState(''); + const [isEnabled, setIsEnabled] = useState(true); const openCount = bugs.filter((b) => b.status === 'open').length; const criticalCount = bugs.filter((b) => b.severity === 'critical').length; @@ -72,13 +73,60 @@ export default function IntranetBugs() { setNoteText(''); }, [noteText, user]); + if (!isEnabled) { + return ( +
+
+ INTRANET / BUG REPORTS +
+

FUNCTIONALITY DISABLED

+

Bug Reports feature is currently disabled

+ +
+ ); + } + return (
{/* Left panel */}
-
- INTRANET / BUG REPORTS +
+
+ INTRANET / BUG REPORTS +
+

BUG DASHBOARD

diff --git a/nest-intra/src/pages/intranet/IntranetDashboard.tsx b/nest-intra/src/pages/intranet/IntranetDashboard.tsx index 7110122..4e1053b 100644 --- a/nest-intra/src/pages/intranet/IntranetDashboard.tsx +++ b/nest-intra/src/pages/intranet/IntranetDashboard.tsx @@ -125,6 +125,8 @@ export default function IntranetDashboard() { + +
diff --git a/nest-intra/src/pages/intranet/IntranetModeration.tsx b/nest-intra/src/pages/intranet/IntranetModeration.tsx index 525b261..f51c3b2 100644 --- a/nest-intra/src/pages/intranet/IntranetModeration.tsx +++ b/nest-intra/src/pages/intranet/IntranetModeration.tsx @@ -8,6 +8,7 @@ export default function IntranetModeration() { const [selectedThreadId, setSelectedThreadId] = useState(null); const [search, setSearch] = useState(''); const [activeTab, setActiveTab] = useState<'threads' | 'replies'>('threads'); + const [isEnabled, setIsEnabled] = useState(true); const filteredThreads = useMemo(() => { if (!search.trim()) return threads; @@ -44,14 +45,62 @@ export default function IntranetModeration() { return (
-
-
- INTRANET / MODERATION + {!isEnabled ? ( +
+
+ INTRANET / MODERATION +
+

FUNCTIONALITY DISABLED

+

Forum Moderation feature is currently disabled

+ +
+ ) : ( +
+
+
+
+
+ INTRANET / MODERATION +
+

FORUM MODERATION

+

+ {threads.length} threads — {replies.length} replies +

+
+
-

FORUM MODERATION

-

- {threads.length} threads — {replies.length} replies -

{/* Tabs */} @@ -226,5 +275,7 @@ export default function IntranetModeration() {
)}
+ )} +
); }