From 490443b63feb929b6615b0a6ecd7a6f701c07f7d Mon Sep 17 00:00:00 2001 From: nihonium Date: Fri, 19 Dec 2025 22:52:49 +0300 Subject: [PATCH 1/5] fix: rerender header on user login --- modules/frontend/src/components/Header/Header.tsx | 10 +++++++++- modules/frontend/src/pages/LoginPage/LoginPage.tsx | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/frontend/src/components/Header/Header.tsx b/modules/frontend/src/components/Header/Header.tsx index 3c86802..36cbd5a 100644 --- a/modules/frontend/src/components/Header/Header.tsx +++ b/modules/frontend/src/components/Header/Header.tsx @@ -14,8 +14,16 @@ export const Header: React.FC = () => { // Listen for localStorage changes to update username dynamically useEffect(() => { const handleStorage = () => setUsername(localStorage.getItem("user_name")); + // This catches changes from OTHER tabs window.addEventListener("storage", handleStorage); - return () => window.removeEventListener("storage", handleStorage); + + // This catches changes in the CURRENT tab if you use dispatchEvent + window.addEventListener("local-storage-update", handleStorage); + + return () => { + window.removeEventListener("storage", handleStorage); + window.removeEventListener("local-storage-update", handleStorage); + }; }, []); const handleLogout = async () => { diff --git a/modules/frontend/src/pages/LoginPage/LoginPage.tsx b/modules/frontend/src/pages/LoginPage/LoginPage.tsx index 4932a3b..55ae730 100644 --- a/modules/frontend/src/pages/LoginPage/LoginPage.tsx +++ b/modules/frontend/src/pages/LoginPage/LoginPage.tsx @@ -21,6 +21,7 @@ export const LoginPage: React.FC = () => { if (res.data?.user_id && res.data?.user_name) { localStorage.setItem("user_id", res.data.user_id.toString()); localStorage.setItem("user_name", res.data.user_name); + window.dispatchEvent(new Event("storage")); navigate("/profile"); } else { setError("Login failed"); @@ -34,6 +35,7 @@ export const LoginPage: React.FC = () => { if (loginRes.data?.user_id && loginRes.data?.user_name) { localStorage.setItem("user_id", loginRes.data.user_id.toString()); localStorage.setItem("user_name", loginRes.data.user_name); + window.dispatchEvent(new Event("storage")); navigate("/profile"); } } else { From b33997772bf948f91ed7da1f051489fa5eefcd18 Mon Sep 17 00:00:00 2001 From: nihonium Date: Fri, 19 Dec 2025 23:03:03 +0300 Subject: [PATCH 2/5] cicd: slightly refactored python Dockerfiles --- Dockerfiles/Dockerfile_etl | 8 -------- Dockerfiles/Dockerfile_image_storage | 12 +----------- 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/Dockerfiles/Dockerfile_etl b/Dockerfiles/Dockerfile_etl index c721b51..7ddbfe2 100644 --- a/Dockerfiles/Dockerfile_etl +++ b/Dockerfiles/Dockerfile_etl @@ -1,13 +1,6 @@ FROM python:3.12-slim WORKDIR /app/modules/anime_etl - -# RUN apt-get update && apt-get install -y --no-install-recommends \ -# build-essential \ -# libpq-dev \ -# ca-certificates \ -# && rm -rf /var/lib/apt/lists/* - COPY modules/anime_etl/pyproject.toml modules/anime_etl/uv.lock ./ RUN pip install --no-cache-dir uv \ @@ -17,5 +10,4 @@ COPY modules/anime_etl ./ ENV NYANIMEDB_MEDIA_ROOT=/media -# было: CMD ["python", "-m", "rabbit_worker"] CMD ["uv", "run", "python", "-m", "rabbit_worker"] diff --git a/Dockerfiles/Dockerfile_image_storage b/Dockerfiles/Dockerfile_image_storage index 34d7496..e0f60b5 100644 --- a/Dockerfiles/Dockerfile_image_storage +++ b/Dockerfiles/Dockerfile_image_storage @@ -1,25 +1,15 @@ FROM python:3.12-slim -# каталог внутри контейнера WORKDIR /app/modules/image_storage - -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -# 1. зависимости через uv COPY modules/image_storage/pyproject.toml modules/image_storage/uv.lock ./ RUN pip install --no-cache-dir uv \ && uv sync --frozen --no-dev -# 2. сам код COPY modules/image_storage ./ -# 3. где будем хранить файлы внутри контейнера ENV NYANIMEDB_MEDIA_ROOT=/media EXPOSE 8000 -# 4. поднимаем FastAPI-приложение (app/main.py → app.main:app) -CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] +CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file From 82842b3bf355a3f51e2e9f88c706be3121ef3455 Mon Sep 17 00:00:00 2001 From: nihonium Date: Fri, 19 Dec 2025 23:35:30 +0300 Subject: [PATCH 3/5] fix: redirect user to profile after login --- modules/frontend/src/App.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/frontend/src/App.tsx b/modules/frontend/src/App.tsx index a92cc17..de7101c 100644 --- a/modules/frontend/src/App.tsx +++ b/modules/frontend/src/App.tsx @@ -1,4 +1,5 @@ import React from "react"; +import { useState, useEffect } from "react"; import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; import UserPage from "./pages/UserPage/UserPage"; import TitlesPage from "./pages/TitlesPage/TitlesPage"; @@ -11,8 +12,22 @@ import { Header } from "./components/Header/Header"; // OpenAPI.WITH_CREDENTIALS = true const App: React.FC = () => { - // const username = localStorage.getItem("username") || undefined; - const userId = localStorage.getItem("user_id"); + const [userId, setUserId] = useState(localStorage.getItem("user_id")); + + // 2. Listen for the same event the Header uses + useEffect(() => { + const handleAuthChange = () => { + setUserId(localStorage.getItem("user_id")); + }; + + window.addEventListener("storage", handleAuthChange); + window.addEventListener("local-storage-update", handleAuthChange); + + return () => { + window.removeEventListener("storage", handleAuthChange); + window.removeEventListener("local-storage-update", handleAuthChange); + }; + }, []); return ( From 522e7554fedd69837d0c130afdd5b89498ab68ab Mon Sep 17 00:00:00 2001 From: nihonium Date: Fri, 19 Dec 2025 23:40:15 +0300 Subject: [PATCH 4/5] cicd: light pipeline for front branch --- .forgejo/workflows/front.yml | 54 ++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .forgejo/workflows/front.yml diff --git a/.forgejo/workflows/front.yml b/.forgejo/workflows/front.yml new file mode 100644 index 0000000..275464d --- /dev/null +++ b/.forgejo/workflows/front.yml @@ -0,0 +1,54 @@ +name: Build and Deploy (frontend build only) + +on: + push: + branches: + - front + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + # Build frontend + - uses: actions/setup-node@v5 + with: + node-version-file: modules/frontend/package.json + cache: npm + cache-dependency-path: modules/frontend/package-lock.json + + - name: Build frontend + env: + VITE_BACKEND_API_BASE_URL: ${{ vars.BACKEND_API_BASE_URL }} + run: | + cd modules/frontend + npm install + npm run build + tar -czvf nyanimedb-frontend.tar.gz dist/ + + - name: Upload built frontend to artifactory + uses: actions/upload-artifact@v3 + with: + name: nyanimedb-frontend.tar.gz + path: modules/frontend/nyanimedb-frontend.tar.gz + + # Build Docker images + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: ${{ vars.REGISTRY }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_TOKEN }} + + - name: Build and push frontend image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfiles/Dockerfile_frontend + push: true + tags: meowgit.nekoea.red/nihonium/nyanimedb-frontend:latest \ No newline at end of file From 1b40ebdbd9de084a3a81483c32eb7a1675ef18de Mon Sep 17 00:00:00 2001 From: nihonium Date: Fri, 19 Dec 2025 23:46:21 +0300 Subject: [PATCH 5/5] cicd: pipeline for dev-ars branch --- .forgejo/workflows/dev-ars.yml | 49 ++++++++++++++++++++++++++++++++++ .forgejo/workflows/front.yml | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 .forgejo/workflows/dev-ars.yml diff --git a/.forgejo/workflows/dev-ars.yml b/.forgejo/workflows/dev-ars.yml new file mode 100644 index 0000000..3bcfb7b --- /dev/null +++ b/.forgejo/workflows/dev-ars.yml @@ -0,0 +1,49 @@ +name: Build (backend build only) + +on: + push: + branches: + - dev-ars + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + # Build backend + - uses: actions/setup-go@v6 + with: + go-version: '^1.25' + + - name: Build backend + run: | + cd modules/backend + go build -o nyanimedb . + tar -czvf nyanimedb-backend.tar.gz nyanimedb + + - name: Upload built backend to artifactory + uses: actions/upload-artifact@v3 + with: + name: nyanimedb-backend.tar.gz + path: modules/backend/nyanimedb-backend.tar.gz + + # Build Docker images + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: ${{ vars.REGISTRY }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_TOKEN }} + + - name: Build and push backend image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfiles/Dockerfile_backend + push: true + tags: meowgit.nekoea.red/nihonium/nyanimedb-backend:latest \ No newline at end of file diff --git a/.forgejo/workflows/front.yml b/.forgejo/workflows/front.yml index 275464d..08a24ec 100644 --- a/.forgejo/workflows/front.yml +++ b/.forgejo/workflows/front.yml @@ -1,4 +1,4 @@ -name: Build and Deploy (frontend build only) +name: Build (frontend build only) on: push: