From 31d135563feeee4a3b0a66e72d44525f6835092c Mon Sep 17 00:00:00 2001 From: HotelSync Date: Mon, 23 Mar 2026 13:14:20 +0300 Subject: [PATCH] fix: cdn.hotelsync.ru nginx config + RoomModal key for state reset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add cdn.hotelsync.ru server block to nginx config (serves /var/www/uploads) - Add cdn.hotelsync.ru to HTTP redirect server_name - RoomModal: add key={editingRoom?.id ?? 'new'} to force state reinit on room change - RoomModal: remove categories[0] fallback for categoryId (show 'Без категории' instead) Co-Authored-By: Claude Sonnet 4.6 --- nginx/conf.d/hotelsync.conf | 21 ++++++++++++++++++++- src/components/rooms/RoomModal.tsx | 2 +- src/pages/RoomsPage.tsx | 3 ++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/nginx/conf.d/hotelsync.conf b/nginx/conf.d/hotelsync.conf index aedc6f7..5804817 100644 --- a/nginx/conf.d/hotelsync.conf +++ b/nginx/conf.d/hotelsync.conf @@ -1,7 +1,7 @@ # ── Редирект HTTP → HTTPS ───────────────────────────────────────────────── server { listen 80; - server_name hotelsync.ru www.hotelsync.ru app.hotelsync.ru api.hotelsync.ru git.hotelsync.ru guest.hotelsync.ru cp.hotelsync.ru; + server_name hotelsync.ru www.hotelsync.ru app.hotelsync.ru api.hotelsync.ru git.hotelsync.ru guest.hotelsync.ru cp.hotelsync.ru cdn.hotelsync.ru; location /.well-known/acme-challenge/ { root /var/www/certbot; @@ -115,6 +115,25 @@ server { } } +# ── cdn.hotelsync.ru — Static file CDN (uploads) ───────────────────────── +server { + listen 443 ssl; + server_name cdn.hotelsync.ru; + + ssl_certificate /etc/letsencrypt/live/cdn.hotelsync.ru/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/cdn.hotelsync.ru/privkey.pem; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers HIGH:!aNULL:!MD5; + + add_header Access-Control-Allow-Origin '*' always; + add_header Cache-Control 'public, max-age=31536000, immutable' always; + + location / { + root /var/www/uploads; + try_files $uri =404; + } +} + # ── git.hotelsync.ru — Gitea ────────────────────────────────────────────── server { listen 443 ssl; diff --git a/src/components/rooms/RoomModal.tsx b/src/components/rooms/RoomModal.tsx index 33bc8a7..a1d7407 100644 --- a/src/components/rooms/RoomModal.tsx +++ b/src/components/rooms/RoomModal.tsx @@ -70,7 +70,7 @@ export function RoomModal({ open, room, categories = [], onClose, onSave, onDele sortOrder: room?.sortOrder ?? 99, allowHourly: room?.allowHourly ?? false, hourlyRate: room?.hourlyRate ?? 1000, - categoryId: room?.categoryId ?? (categories.find(c => c.name === room?.type)?.id ?? categories[0]?.id ?? ''), + categoryId: room?.categoryId ?? (categories.find(c => c.name === room?.type)?.id ?? ''), description: room?.description ?? '', earlyCheckinFee: room?.earlyCheckinFee ?? '', lateCheckoutFee: room?.lateCheckoutFee ?? '', diff --git a/src/pages/RoomsPage.tsx b/src/pages/RoomsPage.tsx index 13d603c..337ad06 100644 --- a/src/pages/RoomsPage.tsx +++ b/src/pages/RoomsPage.tsx @@ -203,8 +203,9 @@ export function RoomsPage() { )} - {/* Modal */} + {/* Modal — key forces remount so useState reinitializes with the new room */} { setModalOpen(false); setSaveError(null) }}