From 5388bea320756c9ff20d2537b4615bf8cb076ec6 Mon Sep 17 00:00:00 2001 From: hamid Date: Wed, 17 Jun 2026 22:53:49 +0330 Subject: [PATCH] another step for constructing base project --- .claude/settings.local.json | 32 +- client/CLAUDE.md | 287 ++ client/jest.setup.ts | 16 + client/messages/en.json | 12 + client/messages/fa.json | 12 + client/middleware.ts | 9 + client/next.config.mjs | 16 +- client/package-lock.json | 2910 +++++++++++------ client/package.json | 39 +- .../app/[locale]/(private-routes)/layout.tsx | 15 + .../app/[locale]/(private-routes)/page.tsx | 3 + .../app/[locale]/(public-routes)/layout.tsx | 11 + client/src/app/[locale]/layout.tsx | 54 + client/src/app/about/page.tsx | 19 - client/src/app/auth/login/LoginForm.tsx | 42 - client/src/app/auth/login/page.tsx | 21 - client/src/app/auth/page.tsx | 13 - client/src/app/auth/signup/page.tsx | 9 - client/src/app/fonts/Mikhak-Bold.woff2 | Bin 0 -> 35436 bytes client/src/app/fonts/Mikhak-Medium.woff2 | Bin 0 -> 35436 bytes client/src/app/fonts/Mikhak-Regular.woff2 | Bin 0 -> 35544 bytes client/src/app/home/page.tsx | 24 - client/src/app/layout.tsx | 89 +- client/src/app/me/page.tsx | 18 - client/src/app/page.tsx | 3 - client/src/components/UserInfo/UserInfo.tsx | 23 +- .../common/AppAlert/AppAlert.test.tsx | 8 +- .../common/AppButton/AppButton.test.tsx | 10 +- .../AppIconButton/AppIconButton.test.tsx | 6 +- .../common/AppLink/AppLinkNextNavigation.tsx | 16 +- .../common/AppLoading/AppLoading.tsx | 2 +- client/src/hooks/event.ts | 17 +- client/src/hooks/layout.ts | 2 +- client/src/i18n/request.ts | 13 + client/src/i18n/routing.ts | 8 + client/src/layout/CurrentLayout.tsx | 15 - client/src/layout/PrivateLayout.tsx | 40 +- client/src/layout/PublicLayout.tsx | 37 +- client/src/layout/TopBarAndSideBarLayout.tsx | 58 +- .../src/layout/components/DarkModeButton.tsx | 42 + client/src/layout/components/SideBar.tsx | 43 +- client/src/layout/index.tsx | 2 - client/src/lib/cookies/client.ts | 58 + client/src/lib/cookies/constants.ts | 18 + client/src/lib/cookies/index.ts | 14 + client/src/lib/cookies/server.ts | 69 + client/src/store/AppReducer.ts | 34 +- client/src/store/AppStore.tsx | 28 +- client/src/store/config.ts | 10 +- client/src/theme/ColorSchemeScript.tsx | 52 + .../src/theme/MuiThemeProviderForNextJs.tsx | 12 - client/src/theme/ThemeProvider.tsx | 79 +- client/src/theme/colors.ts | 96 +- client/src/theme/dark.ts | 17 +- client/src/theme/direction.ts | 5 + client/src/theme/index.ts | 16 +- client/src/theme/light.ts | 17 +- client/src/theme/theme.ts | 41 + client/src/theme/tokens.css | 71 + client/src/theme/typography.ts | 53 + client/tsconfig.json | 27 +- product/balinyaar.html | 85 + todo.md => product/todo.md | 14 +- product/whatsInYourMind.txt | 5 + server/AGENTS.md | 176 +- server/CONVENTIONS.md | 396 +++ server/Directory.Packages.props | 68 +- .../V1/Admin/AdminManagerController.cs | 37 - .../V1/Admin/OrderManagementController.cs | 36 - .../V1/Admin/RoleManagerController.cs | 67 - .../V1/Admin/UserManagementController.cs | 36 - .../Controllers/V1/Order/OrderController.cs | 52 - .../V1/UserManagement/UserController.cs | 88 - server/src/API/Baya.Web.Api/Program.cs | 4 +- .../Routing/SnakeCaseParameterTransformer.cs | 17 + .../Repositories/Common/UnitOfWork.cs | 3 +- 76 files changed, 3836 insertions(+), 1961 deletions(-) create mode 100644 client/CLAUDE.md create mode 100644 client/messages/en.json create mode 100644 client/messages/fa.json create mode 100644 client/middleware.ts create mode 100644 client/src/app/[locale]/(private-routes)/layout.tsx create mode 100644 client/src/app/[locale]/(private-routes)/page.tsx create mode 100644 client/src/app/[locale]/(public-routes)/layout.tsx create mode 100644 client/src/app/[locale]/layout.tsx delete mode 100644 client/src/app/about/page.tsx delete mode 100644 client/src/app/auth/login/LoginForm.tsx delete mode 100644 client/src/app/auth/login/page.tsx delete mode 100644 client/src/app/auth/page.tsx delete mode 100644 client/src/app/auth/signup/page.tsx create mode 100644 client/src/app/fonts/Mikhak-Bold.woff2 create mode 100644 client/src/app/fonts/Mikhak-Medium.woff2 create mode 100644 client/src/app/fonts/Mikhak-Regular.woff2 delete mode 100644 client/src/app/home/page.tsx delete mode 100644 client/src/app/me/page.tsx delete mode 100644 client/src/app/page.tsx create mode 100644 client/src/i18n/request.ts create mode 100644 client/src/i18n/routing.ts delete mode 100644 client/src/layout/CurrentLayout.tsx create mode 100644 client/src/layout/components/DarkModeButton.tsx create mode 100644 client/src/lib/cookies/client.ts create mode 100644 client/src/lib/cookies/constants.ts create mode 100644 client/src/lib/cookies/index.ts create mode 100644 client/src/lib/cookies/server.ts create mode 100644 client/src/theme/ColorSchemeScript.tsx delete mode 100644 client/src/theme/MuiThemeProviderForNextJs.tsx create mode 100644 client/src/theme/direction.ts create mode 100644 client/src/theme/theme.ts create mode 100644 client/src/theme/tokens.css create mode 100644 client/src/theme/typography.ts create mode 100644 product/balinyaar.html rename todo.md => product/todo.md (51%) create mode 100644 product/whatsInYourMind.txt create mode 100644 server/CONVENTIONS.md delete mode 100644 server/src/API/Baya.Web.Api/Controllers/V1/Admin/AdminManagerController.cs delete mode 100644 server/src/API/Baya.Web.Api/Controllers/V1/Admin/OrderManagementController.cs delete mode 100644 server/src/API/Baya.Web.Api/Controllers/V1/Admin/RoleManagerController.cs delete mode 100644 server/src/API/Baya.Web.Api/Controllers/V1/Admin/UserManagementController.cs delete mode 100644 server/src/API/Baya.Web.Api/Controllers/V1/Order/OrderController.cs delete mode 100644 server/src/API/Baya.Web.Api/Controllers/V1/UserManagement/UserController.cs create mode 100644 server/src/API/Baya.WebFramework/Routing/SnakeCaseParameterTransformer.cs diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 0e5a8e6..c7161c2 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -5,7 +5,35 @@ "Bash(rm -f server/CleanArcTemplate.nuspec)", "Bash(rm -f server/.github/workflows/package.yml)", "Bash(rmdir server/.github/workflows)", - "Bash(rmdir server/.github)" - ] + "Bash(rmdir server/.github)", + "Bash(npm -v)", + "Bash(dotnet --version)", + "Bash(npm install *)", + "Bash(node -e \"const p=require\\('./node_modules/next/package.json'\\).version; const m=require\\('./node_modules/@mui/material/package.json'\\).version; const r=require\\('./node_modules/react/package.json'\\).version; const e=require\\('./node_modules/eslint/package.json'\\).version; const mn=require\\('./node_modules/@mui/material-nextjs/package.json'\\).version; console.log\\('next',p\\);console.log\\('@mui/material',m\\);console.log\\('@mui/material-nextjs',mn\\);console.log\\('react',r\\);console.log\\('eslint',e\\);\")", + "Bash(node -e ' *)", + "Bash(npx tsc *)", + "Bash(echo \"TYPE_EXIT=$?\")", + "Bash(npm run *)", + "PowerShell(ls \"c:\\\\Users\\\\Lenovo\\\\Desktop\\\\balinyaar\\\\client\\\\node_modules\\\\@mui\\\\material\" | Select-Object Name | Where-Object { $_.Name -match \"Color|Init|Css\" })", + "PowerShell(node -e \"const v = require\\('c:/Users/Lenovo/Desktop/balinyaar/client/node_modules/@testing-library/jest-dom/package.json'\\).version; console.log\\('@testing-library/jest-dom', v\\)\")", + "WebFetch(domain:www.nuget.org)", + "Bash(xargs grep -l \"Route\\\\|ApiVersion\\\\|Controller\")", + "PowerShell(cd \"c:\\\\Users\\\\Lenovo\\\\Desktop\\\\balinyaar\\\\server\"; dotnet build 2>&1 | Select-String -Pattern \"error|warning|Build succeeded|Build FAILED\" | Where-Object { $_ -notmatch \"NETSDK1057\" })", + "Read(//c/Users/Lenovo/Desktop/balinyaar/server/src/API/Baya.Web.Api/Controllers/V1/**)", + "Bash(cd /c/Users/Lenovo/Desktop/balinyaar/client && find . -type f -name \"*.ts\" -o -name \"*.tsx\" -o -name \"*.json\" -o -name \"*.mjs\" | head -50)", + "Read(//c/c/Users/Lenovo/Desktop/balinyaar/**)", + "Bash(xargs grep -l \"getLocale\\\\|setRequestLocale\\\\|requestLocale\")", + "Bash(node -e \"const p=require\\('c:/Users/Lenovo/Desktop/balinyaar/client/package.json'\\); console.log\\(JSON.stringify\\({scripts:p.scripts,next:p.dependencies?.next},null,2\\)\\)\")", + "Bash(node -e \"const p=require\\('c:/Users/Lenovo/Desktop/balinyaar/client/node_modules/next/package.json'\\); console.log\\(p.version\\)\")", + "Bash(node -e \"const d=JSON.parse\\(require\\('fs'\\).readFileSync\\('/dev/stdin','utf8'\\)\\); const keys=Object.keys\\(d.exports||{}\\).filter\\(k=>k.includes\\('middleware'\\)||k.includes\\('server'\\)\\); console.log\\(keys.slice\\(0,20\\)\\)\")", + "Bash(xargs grep -l \"middleware\")", + "Bash(node -e \"const p=require\\('c:/Users/Lenovo/Desktop/balinyaar/client/node_modules/next-intl/package.json'\\); const exp=p.exports; const keys=Object.keys\\(exp||{}\\).filter\\(k=>k.includes\\('middleware'\\)\\); keys.forEach\\(k=>console.log\\(k,JSON.stringify\\(exp[k]\\)\\)\\)\")", + "PowerShell(Select-String -Path \"c:\\\\Users\\\\Lenovo\\\\Desktop\\\\balinyaar\\\\client\\\\node_modules\\\\next\\\\dist\\\\lib\\\\constants.js\" -Pattern \"MIDDLEWARE_FILENAME|MIDDLEWARE_LOCATION\" | ForEach-Object { $_.Line.Substring\\(0, [Math]::Min\\(300, $_.Line.Length\\)\\) })", + "Bash(node -e \"const p = require\\('c:/Users/Lenovo/Desktop/balinyaar/client/node_modules/next-intl/package.json'\\); console.log\\(JSON.stringify\\(p.exports['./plugin'] || p.exports, null, 2\\).substring\\(0, 1000\\)\\);\")", + "Bash(xargs grep -l \"HEADER_LOCALE_NAME\\\\|X-NEXT-INTL\")", + "Bash(xargs ls)", + "Bash(xargs grep \"AppStoreProvider\")" + ], + "defaultMode": "bypassPermissions" } } diff --git a/client/CLAUDE.md b/client/CLAUDE.md new file mode 100644 index 0000000..1810573 --- /dev/null +++ b/client/CLAUDE.md @@ -0,0 +1,287 @@ +# Balinyaar Client — Claude Code Guidelines + +## Project Structure + +``` +client/ +├── messages/ # Translation files (add keys to BOTH files) +│ ├── en.json +│ └── fa.json +├── middleware.ts # next-intl routing middleware (locale detection + redirect) +├── next.config.mjs # createNextIntlPlugin wires i18n into Next.js +└── src/ + ├── app/ + │ ├── layout.tsx # Root RSC: reads locale + cookie → sets HTML attrs + │ ├── globals.css + │ ├── fonts/ # Local font files (woff2) — Mikhak for fa + │ └── [locale]/ + │ ├── layout.tsx # RSC: setRequestLocale + NextIntlClientProvider + ThemeProvider + AppStoreProvider + │ ├── (private-routes)/ + │ │ ├── layout.tsx # 'use client' — wraps PrivateLayout + │ │ └── page.tsx + │ └── (public-routes)/ + │ └── layout.tsx # 'use client' — wraps PublicLayout + ├── components/ # Shared UI components (each with .test.tsx if imported >1 place) + ├── i18n/ + │ ├── routing.ts # defineRouting — locales: ['en', 'fa'], defaultLocale: 'fa' + │ └── request.ts # getRequestConfig — loads messages/${locale}.json + ├── layout/ + │ ├── PrivateLayout.tsx # 'use client' — authenticated shell; uses useTranslations('nav') + │ ├── PublicLayout.tsx # unauthenticated shell + │ ├── TopBarAndSideBarLayout.tsx # 'use client' — TopBar + SideBar composition + │ ├── config.ts + │ ├── index.ts + │ └── components/ + │ ├── TopBar.tsx + │ ├── SideBar.tsx + │ ├── SideBarNavList.tsx + │ ├── SideBarNavItem.tsx + │ ├── DarkModeButton.tsx # 'use client' — only subscriber to useColorScheme() + │ └── index.tsx + ├── lib/ + │ └── cookies/ # Cookie manager — strict server/client separation + │ ├── constants.ts # COOKIE_NAMES, CookieOptions, COLOR_SCHEME_COOKIE_OPTIONS + │ ├── server.ts # getServerCookie, getThemeMode, setServerCookie + │ ├── client.ts # getClientCookie, setClientCookie, deleteClientCookie + │ └── index.ts # Re-exports constants ONLY (never server/client) + ├── store/ # AppStore (Redux-like client state) + ├── theme/ + │ ├── ColorSchemeScript.tsx # Inline