-
Notifications
You must be signed in to change notification settings - Fork 1
WIP: Refactor server pack, providing v2 api #13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
- Add comprehensive JSDoc comments for all controller classes and methods - Enhance shared services documentation (CDNService, CacheService, MarkdownService) - Improve middleware documentation (CompressionMiddleware, PerformanceMonitoringMiddleware) - Add detailed JSDoc for decorators and utility functions - Follow Linus-style documentation principles: clear, practical, no-nonsense Signed-off-by: CornWorld <github.contact@corn.im>
…lean-expressions and prefer-nullish-coalescing in jwt.strategy and token.service\nchore(test): lint/style fixes Signed-off-by: CornWorld <github.contact@corn.im>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This pull request introduces the foundation of a new v2 API for the server-ng package, implementing core modules for content management and system operations. The changes establish a robust NestJS-based architecture with comprehensive module structure, testing infrastructure, and API endpoints.
Key changes include:
- Implementation of core content management modules (media, drafts, categories, comments)
- Addition of system modules (health checks, demo mode, backups)
- Comprehensive testing setup with both unit tests and fixtures
- Hook system integration for extensibility
Reviewed Changes
Copilot reviewed 178 out of 332 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| media module files | Complete media management system with file upload, processing, and storage services |
| draft module files | Draft management with versioning, auto-save, and publishing capabilities |
| category module files | Category CRUD operations with password protection and statistics |
| comment module files | Waline comment system integration with configuration management |
| health module files | System health monitoring and status endpoints |
| demo module files | Demo mode functionality with data snapshots and restoration |
| backup module files | Comprehensive backup and restore system with encryption support |
| test files | Extensive test coverage with both standard and fixture-based testing |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
packages/server-ng/src/modules/media/interfaces/storage.interface.ts
Outdated
Show resolved
Hide resolved
| private async optimizeDatabase(): Promise<void> { | ||
| try { | ||
| // SQLite 优化命令 | ||
| await (this.db as unknown as { run: (sql: string) => Promise<unknown> }).run('VACUUM'); |
Copilot
AI
Aug 19, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The type casting (this.db as unknown as { run: (sql: string) => Promise<unknown> }) is unsafe and indicates a design issue. Consider creating a proper interface or method for database optimization operations instead of relying on type assertions.
- Remove manual SQL table creation statements - Use Drizzle migrate() function as primary approach - Fallback to schema-based table creation when migrations unavailable - Maintain all existing table structures and indexes - Fix linting issues and formatting - All tests passing (unit + e2e) Signed-off-by: CornWorld <github.contact@corn.im>
…onsistency - Replace manual SQL schema creation with drizzle-kit push for test database - Standardize timestamp defaults to use CURRENT_TIMESTAMP in schema - Add test environment handling for demo mode and database migrations - Reduce log noise in test environment by downgrading error logs to warnings
…rvice Signed-off-by: CornWorld <github.contact@corn.im>
…lout + docs - percentage + whitelist + global enable via env - export via SharedModule, unit tests - update REVIEW.md to record grayscale strategy - ensure lint/tsc/tests all pass Signed-off-by: CornWorld <github.contact@corn.im>
600f4c4 to
465097c
Compare
…word rollout + docs" This reverts commit 465097c.
Convert date fields to ISO string format in DTO schemas and services for consistency. Add helper method in webhook controller to handle conversion.
…tats - normalize DB analytics: article_view->pageview, article_id->articleId, read_time->duration, removed old keys - simplify queries to new schema only (articleId/duration) Signed-off-by: CornWorld <github.contact@corn.im>
… and clean up optional chaining Signed-off-by: CornWorld <github.contact@corn.im>
…n utilities Signed-off-by: CornWorld <github.contact@corn.im>
b3b21df to
cadaa3f
Compare
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
- Set HOST to 0.0.0.0 and PORT to 8360 in waline env config - Fix shared.module.ts route config from regex to wildcard - Replace deprecated z.nativeEnum with z.enum in storage dto - Fix typescript error in backup service with proper type assertion Signed-off-by: CornWorld <github.contact@corn.im>
- Add csurf and cookie-parser dependencies - Enable CSRF protection middleware in main.ts - Fix compression import to use default import - Add cookie-parser middleware for CSRF support Signed-off-by: CornWorld <github.contact@corn.im>
…agement - Replace direct waline config access with getResolvedWalineConfig method - Implement proper process lifecycle management with locks and port checks - Switch from MongoDB to SQLite for waline storage - Add safety checks and error handling for process operations - Remove CommentModule from app imports as it's now dynamically loaded
Update environment variable name to be more generic and improve sensitive keys regex
- Replace empty object destructuring with named parameter `_ctx` in test fixtures - Remove redundant eslint-disable comments for no-empty-pattern - Simplify mock service implementations and improve type assertions - Add backward compatibility for Waline URL configuration - Improve child process handling with null checks and type safety
…ter, and v1-deprecation middleware Signed-off-by: CornWorld <github.contact@corn.im>
- Fix mock service type compatibility with 'as any' casts where needed - Update Drizzle schema references from $ prefixed to lowercase (users, articles, etc.) - Fix column name changes (authorId → author, categoryId → category, published → private) - Update orderBy syntax to use desc() function from drizzle-orm - Fix date handling (new Date() → new Date().toISOString() for text fields) - Remove unused variables and imports in test files - Update performance test specs with correct schema and API usage - Fix Given helper example with required fields - Add missing required fields to all insert operations This commit achieves zero TypeScript and ESLint errors in all test files across unit tests, E2E tests, and performance benchmarks.
…ripts - Add Serena memory for TypeScript error fix progress tracking - Add Ralph Loop local documentation for error-fixing workflow - Add transaction investigation script for debugging rollback issues These files document the error-fixing process and provide debugging tools for investigating database transaction behavior in tests.
Remove unused controllers with invalid imports: - Delete login-log.controller.ts (imported non-existent createLoginLogContract) - Delete health.controller.ts (imported non-existent createHealthContract) Fix cascading import errors in dependent files: - Update auth.module.ts: remove deleted controller imports, add LoginLogService provider - Update health.module.ts: remove deleted controller registration - Clean up spec files for deleted controllers Add LoginLogService to auth.module providers (actively used by auth.controller and rate-limit.guard for login attempt tracking and brute-force protection) Remove ralph-loop.local.md documentation file from refactor branch. All TypeScript and ESLint checks pass.
GitHub Actions reported template literal type errors for jwt.sign() calls. Add 'as string' type assertion to all jwt.sign() calls in article-access.guard.spec.ts to fix @typescript-eslint/restrict-template-expressions errors. This ensures the token variable has explicit string type before being used in template literals.
…CI errors - Add 'as string' assertion to jwt.sign() in article.service.ts - Add 'as boolean' assertion to semver.gt() in meta.service.ts - Add 'as string' assertions to jwt.sign() in article-access.guard.spec.ts (2 missing cases) - Add eslint-disable comments to suppress 'no-unnecessary-type-assertion' warnings - These assertions are necessary for GitHub Actions CI environment even though local ESLint considers them unnecessary
- Fix 8 ESLint type safety errors (@typescript-eslint/no-unsafe-assignment) - Add type assertions with explanatory comments for JWT StringValue compatibility - Use object destructuring in meta.service.ts - Fix Transaction Isolation Test (2/2 tests now passing) - Add explicit error throw to trigger Drizzle transaction rollback - Add test data cleanup before each test - Fix ArticleService tests (39/39 tests now passing) - Add missing JwtService mock to test module - Fix transaction isolation by passing tx parameter to Given.* helpers - Replace hardcoded userId=1 with unique timestamp-based IDs - Uncomment and fix 5 tests missing Given.article() calls All CI checks now pass: - ESLint: 0 errors - TypeScript: 0 errors - Transaction Test: 2/2 passing - ArticleService Test: 39/39 passing
- Add .js and .jsx file extensions to admin package ESLint configuration - Fixes parsing errors for 49 JSX files in admin/src - Resolves 'Unexpected token <' errors in React components
- Add TypeScript declarations for .png, .jpg, .jpeg, .gif, .webp, .svg, .bmp image imports - Define StaticImageData interface matching Next.js image import format - Fixes TypeScript error 'Cannot find module ../../public/img-box-placeholder.png' - Resolves src property access error in ImageBox component
- Refactor Mock utility class for better type safety and usability - Enhance Given test data builder with more flexible options - Improve test-data fixtures with better defaults and validation - Update mock-utils tests to cover new functionality - Consolidate test data creation patterns for consistency
- Update config validation service tests with new mock patterns - Refactor database config tests for better readability - Improve analytics controller test coverage - Enhance article controller and guard tests - Update auth strategy tests with better mock setup - Refactor category service test suite - Improve draft controller and version tests - Update plugin webhook service tests - Refactor user controller and service tests - Apply consistent mock patterns across all test files
- Enhance error handling and logging in webhook service - Improve type safety for webhook payloads - Better integration with plugin system - Optimize webhook delivery mechanism
- Fix code formatting and indentation - No functional changes
- Remove || 'file:./test.db' and || './test.db' fallbacks - Let test utilities automatically allocate database paths - Affected files: - config-validation.service.spec.ts - database.config.spec.ts - database.module.spec.ts - test/mock.ts
- remove hardcoded fallback values for DATABASE_URL and DATABASE_FILE_PATH - add non-null assertions since test/setup.ts guarantees these env vars - clarify test data vs default paths with inline comment Affected files: - config-validation.service.spec.ts:45,46,207,244 - database.config.spec.ts:256
- use timestamp instead of Date objects for lastUpdated tracking - migrate to nowIsoTz() helper for consistent ISO 8601 timestamps - use loose equality (\!=) for null/undefined checks where appropriate - remove console.log statements per Logger usage policy Performance tracking: - performance.interceptor.ts: Date → Unix timestamp (number) Timestamp consistency: - article.service.ts: new Date() → nowIsoTz() - draft-version.controller.ts: new Date().toISOString() → nowIsoTz() Code cleanup: - draft.service.ts: \!== undefined → \!= null - plugin-registry.service.ts: remove debug console.log - webhook.service.ts: remove debug console.log
- consolidate type import to single line per Prettier rules
- enhance test file rules (disable explicit-any, non-null-assertion) - add deny rules for dangerous commands (rm -rf, sudo) - format configuration for better readability
- React 18+ automatic JSX transform doesn't require explicit React import - remove 'import React from "react"' from 44 JSX component files - reduces bundle size and follows modern React best practices
- enable code-review plugin - reorganize permissions structure - update allow/deny/ask permission lists
- refactor semverGt call to avoid unsafe assignment - extract JWT expiresIn to variables before type assertion - convert webhook log createdAt Date to ISO string - remove unnecessary type assertion comments
- handle both string and Date types for log.createdAt - ensure consistent string output per function signature - addresses TypeScript type mismatch in getLogs return value
- use as unknown as StringValue for JWT expiresIn type assertions - remove unnecessary type conversions in meta.service.ts - add runtime type check for webhook createdAt field
- use as unknown as boolean to avoid ESLint unsafe assignment error - semverGt returns error type that needs explicit type assertion
- disable no-unsafe-assignment and no-unsafe-call for files using semverGt and JWT StringValue - these files require type assertions due to external library type definitions
- ms is used for type imports (StringValue) - ensures type definitions are available in all environments
- ensures type definitions are available in CI/act environments - resolves TypeScript errors in GitHub Actions
- Add @types/jsonwebtoken@^9.0.7 to devDependencies - Add @types/ms@^0.7.34 to devDependencies - Remove StringValue type usage (not available in @types/ms@0.7.34) - Use direct string type for JWT expiresIn options - Fix TypeScript errors in auth module and token service
- Import dayjs for timestamp conversion - Fix getLogs date filtering to use Unix timestamps (seconds) - Convert createdAt from Unix timestamp to ISO string using dayjs.unix() - Update test to use local webhook.schema (mode: 'timestamp') - Fix test data to use Date objects instead of ISO strings - Ensure consistent timestamp handling across service and tests
This pull request introduces significant improvements to development tooling, code quality enforcement, and documentation for the new
server-ngpackage. The main focus is on setting up robust linting and formatting workflows, updating package management settings, and providing comprehensive documentation for both usage and project goals.Development Tooling & Code Quality
.nano-staged.jsconfig at the root to enforce linting and formatting on staged files, and updated the.husky/pre-commithook to usepnpm nano-stagedfor pre-commit checks. (.nano-staged.js,.husky/pre-commit) [1] [2]eslint.config.js) [1] [2]server-ngthat runs formatting, linting, and type-checking only when TypeScript files are staged. (packages/server-ng/.nano-staged.mjs)server-ngto ensure consistent code style and exclude unnecessary files from formatting. (packages/server-ng/.prettierrc,.prettierignore) [1] [2].vscode/settings.json) [1] [2]Package Management & Dependency Updates
package.jsonwith new and upgraded dependencies, added a compact ESLint formatter, set up pnpm overrides for React and minimatch, and removed the old nano-staged config in favor of the new JS config. (package.json).npmrc. (.npmrc)Documentation & Project Structure
server-ngoutlining project goals, architecture, technology stack, migration details, and a detailed development checklist. (packages/server-ng/README.md)packages/server-ng/README.build.md).envfile with all necessary environment variables for local and cloud setups. (packages/server-ng/.env.example)packages/server-ng/REVIEW.md).gitignoreforserver-ngto exclude build outputs, environment files, database files, and editor-specific configs. (packages/server-ng/.gitignore)These changes collectively improve developer experience, enforce code quality standards, and provide clear guidance for working with the new
server-ngpackage.