fix:
- Fix TypeScript type errors in api-wrapper.ts (ApiResponse type)
- Fix backward compatibility in database.ts getSettings() for missing fields
- Fix default value for weekNavigationEnabled (changed from true to false)
- Fix API routes error handling with unified wrapper
- Fix duplicate toggle switch code in admin.tsx (6 instances)
- Fix inconsistent authentication check in API routes (unified with withAuth)
- Fix error message text in loading-context.tsx (improved user experience)
add:
- Add database.ts: SQLite database layer with better-sqlite3 for persistent storage
* Groups management (CRUD operations)
* Settings management with caching
* Admin password hashing with bcrypt
* Automatic database initialization and migration
- Add api-wrapper.ts utility for unified API route handling
* withAuth wrapper for protected routes
* withMethods wrapper for public routes
* Consistent error handling and method validation
- Add validation.ts utility with centralized validation functions
* validateCourse - course validation (1-5)
* validateGroupId - group ID format validation
* validatePassword - password strength validation
- Add showAddGroupButton setting to control visibility of 'Add Group' button on homepage
- Add toggle switch component in admin.tsx for reusable UI (replaces 6 duplicate instances)
- Add CourseSelect component in admin.tsx for reusable course selection
- Add DialogFooterButtons component in admin.tsx for reusable dialog footer
- Add unified loadData function in admin.tsx to reduce code duplication
- Add change-password.ts API endpoint for admin password management
- Add logs.ts API endpoint for viewing error logs in admin panel
- Add logErrorToFile function in logger.ts for persistent error logging
- Add comprehensive error logging in schedule.ts (parsing, fetch, timeout, network errors)
- Add comprehensive project structure documentation in README.md
- Add architecture and code organization section in README.md
- Add database information section in README.md
- Add SQLite and bcrypt to tech stack documentation
- Add better-sqlite3 and bcrypt dependencies to package.json
- Add .gitignore rules for error.log and database files (data/, *.db, *.db-shm, *.db-wal)
refactor:
- Refactor admin.tsx: extract reusable components (toggle, select, dialog footer)
- Refactor API routes to use withAuth wrapper for consistent authentication
- Refactor API routes to use validation utilities instead of inline validation
- Refactor groups.ts and groups.json: move to old/data/ directory (deprecated, now using SQLite)
- Refactor settings-loader.ts: migrate from JSON to SQLite database
- Refactor groups-loader.ts: migrate from JSON to SQLite database
- Refactor database.ts: improve backward compatibility for settings migration
- Refactor admin.tsx: unify data loading functions (loadGroupsList, loadSettingsList)
- Refactor index.tsx: add showAddGroupButton prop and conditional rendering
- Refactor API routes: consistent error handling and method validation
- Refactor README.md: update tech stack, project structure, and admin panel documentation
- Refactor auth.ts: improve session management and cookie handling
- Refactor schedule.ts: improve error handling with detailed logging and error types
- Refactor logger.ts: add file-based error logging functionality
- Refactor loading-context.tsx: improve error message clarity
remove:
- Remove hello.ts test API endpoint
- Remove groups.ts and groups.json (moved to old/data/, replaced by SQLite)
update:
- Update .gitignore to exclude old data files, database files, and error logs
- Update package.json: add better-sqlite3, bcrypt and their type definitions
- Update README.md with new features, architecture, and database information
- Update all API routes to use new wrapper system
- Update admin panel with new settings and improved UI
- Update sitemap.xml with cache usage comment
65 lines
1.8 KiB
JSON
65 lines
1.8 KiB
JSON
{
|
|
"name": "kspguti-schedule",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"engines": {
|
|
"node": ">=20.0.0",
|
|
"npm": ">=10.0.0"
|
|
},
|
|
"scripts": {
|
|
"dev": "next dev --webpack -H 0.0.0.0",
|
|
"build": "next build --webpack",
|
|
"start": "next start -H 0.0.0.0",
|
|
"lint": "next lint"
|
|
},
|
|
"dependencies": {
|
|
"@radix-ui/react-accordion": "^1.2.12",
|
|
"@radix-ui/react-avatar": "^1.0.4",
|
|
"@radix-ui/react-dialog": "^1.0.5",
|
|
"@radix-ui/react-dropdown-menu": "^2.0.6",
|
|
"@radix-ui/react-label": "^2.0.2",
|
|
"@radix-ui/react-select": "^2.0.0",
|
|
"@radix-ui/react-slot": "^1.0.2",
|
|
"@types/content-type": "^1.1.6",
|
|
"class-variance-authority": "^0.7.0",
|
|
"classnames": "^2.3.2",
|
|
"clsx": "^2.0.0",
|
|
"content-type": "^1.0.5",
|
|
"date-fns": "^2.30.0",
|
|
"jsdom": "^22.1.0",
|
|
"lucide-react": "^0.554.0",
|
|
"next": "16.0.3",
|
|
"next-sitemap": "^4.2.3",
|
|
"next-themes": "^0.2.1",
|
|
"node-html-parser": "^6.1.10",
|
|
"node-telegram-bot-api": "^0.63.0",
|
|
"react": "19.2.0",
|
|
"react-dom": "19.2.0",
|
|
"react-icons": "^4.11.0",
|
|
"sass": "^1.69.3",
|
|
"sharp": "^0.32.6",
|
|
"tailwind-merge": "^1.14.0",
|
|
"tailwind-scrollbar-hide": "^1.1.7",
|
|
"tailwindcss-animate": "^1.0.7",
|
|
"better-sqlite3": "^11.6.0",
|
|
"bcrypt": "^5.1.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/bcrypt": "^5.0.2",
|
|
"@types/better-sqlite3": "^7.6.11",
|
|
"@types/jsdom": "^21.1.3",
|
|
"@types/node": "22.0.0",
|
|
"@types/node-telegram-bot-api": "^0.61.8",
|
|
"@types/react": "19.2.0",
|
|
"@types/react-dom": "19.2.0",
|
|
"@typescript-eslint/eslint-plugin": "^6.7.3",
|
|
"autoprefixer": "10.4.20",
|
|
"baseline-browser-mapping": "^2.8.32",
|
|
"eslint": "8.57.0",
|
|
"eslint-config-next": "16.0.3",
|
|
"postcss": "8.4.47",
|
|
"tailwindcss": "^3.4.18",
|
|
"typescript": "5.9.3"
|
|
}
|
|
}
|