diff --git a/wwjcloud/src/common/auth/auth.module.ts b/wwjcloud/src/common/auth/auth.module.ts index 16b7a9b..7b3b366 100644 --- a/wwjcloud/src/common/auth/auth.module.ts +++ b/wwjcloud/src/common/auth/auth.module.ts @@ -11,7 +11,7 @@ import { RolesGuard } from './guards/RolesGuard'; // 导入Admin和Member模块 import { AdminModule } from '../admin/admin.module'; -import { MemberModule } from '../member/MemberModule'; +import { MemberModule } from '../member/member.module'; @Module({ imports: [ diff --git a/wwjcloud/src/common/cache/cache.module.ts b/wwjcloud/src/common/cache/cache.module.ts deleted file mode 100644 index 9adc6c6..0000000 --- a/wwjcloud/src/common/cache/cache.module.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({}) -export class CacheModule {} diff --git a/wwjcloud/src/common/dictionary/dictionary.controller.ts b/wwjcloud/src/common/dictionary/dictionary.controller.ts deleted file mode 100644 index a836200..0000000 --- a/wwjcloud/src/common/dictionary/dictionary.controller.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Controller, Get } from '@nestjs/common'; - -@Controller('dictionary') -export class DictionaryController { - @Get('ping') - ping() { - return 'dictionary ok'; - } -} diff --git a/wwjcloud/src/common/dictionary/dictionary.module.ts b/wwjcloud/src/common/dictionary/dictionary.module.ts deleted file mode 100644 index 216e18d..0000000 --- a/wwjcloud/src/common/dictionary/dictionary.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Module } from '@nestjs/common'; -import { DictionaryService } from './dictionary.service'; -import { DictionaryController } from './dictionary.controller'; - -@Module({ - controllers: [DictionaryController], - providers: [DictionaryService], - exports: [DictionaryService], -}) -export class DictionaryModule {} diff --git a/wwjcloud/src/common/dictionary/dictionary.service.ts b/wwjcloud/src/common/dictionary/dictionary.service.ts deleted file mode 100644 index 58975a2..0000000 --- a/wwjcloud/src/common/dictionary/dictionary.service.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Injectable } from '@nestjs/common'; - -@Injectable() -export class DictionaryService { - ping() { - return 'dictionary service ok'; - } -} diff --git a/wwjcloud/src/common/dictionary/dto/index.ts b/wwjcloud/src/common/dictionary/dto/index.ts deleted file mode 100644 index a23daec..0000000 --- a/wwjcloud/src/common/dictionary/dto/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Dictionary DTO exports - */ - -// TODO: Dictionary DTOs -// export { CreateDictionaryDto } from './create-dictionary.dto' -// export { UpdateDictionaryDto } from './update-dictionary.dto' -// export { DictionaryResponseDto } from './dictionary-response.dto' diff --git a/wwjcloud/src/common/health/health.module.ts b/wwjcloud/src/common/health/health.module.ts deleted file mode 100644 index 20d8c19..0000000 --- a/wwjcloud/src/common/health/health.module.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({}) -export class HealthModule {} diff --git a/wwjcloud/src/common/index.ts b/wwjcloud/src/common/index.ts index e909fe9..2be3e8f 100644 --- a/wwjcloud/src/common/index.ts +++ b/wwjcloud/src/common/index.ts @@ -15,4 +15,4 @@ export * from './auth/decorators/RolesDecorator'; export * from './settings'; // 导出常量 -export * from './config/constants'; \ No newline at end of file +export * from '../config/common/constants'; \ No newline at end of file diff --git a/wwjcloud/src/common/member/MemberModule.ts b/wwjcloud/src/common/member/MemberModule.ts deleted file mode 100644 index f8cb8a6..0000000 --- a/wwjcloud/src/common/member/MemberModule.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Module } from '@nestjs/common'; -import { TypeOrmModule } from '@nestjs/typeorm'; - -// 实体 -import { Member } from './entities/Member'; -import { MemberLevel } from './entities/MemberLevel'; -import { MemberAddress } from './entities/MemberAddress'; -import { MemberSign } from './entities/MemberSign'; -import { MemberCashOut } from './entities/MemberCashOut'; -import { MemberLabel } from './entities/MemberLabel'; -import { MemberAccount } from './entities/MemberAccount'; -import { MemberConfig } from './entities/MemberConfig'; - -// 核心服务 -import { CoreMemberService } from './services/core/CoreMemberService'; - -// 前台API服务 -import { MemberService as MemberApiService } from './services/api/MemberService'; - -// 后台管理服务 -import { MemberService as MemberAdminService } from './services/admin/MemberService'; - -// 前台控制器 -import { MemberController as MemberApiController } from './controllers/api/MemberController'; - -// 后台控制器 -import { MemberController as MemberAdminController } from './controllers/adminapi/MemberController'; - -@Module({ - imports: [ - TypeOrmModule.forFeature([ - Member, - MemberLevel, - MemberAddress, - MemberSign, - MemberCashOut, - MemberLabel, - MemberAccount, - MemberConfig, - ]), - ], - providers: [ - // 核心服务 - CoreMemberService, - - // 前台API服务 - MemberApiService, - - // 后台管理服务 - MemberAdminService, - ], - controllers: [ - // 前台控制器 - MemberApiController, - - // 后台控制器 - MemberAdminController, - ], - exports: [ - CoreMemberService, - MemberApiService, - MemberAdminService, - ], -}) -export class MemberModule {} \ No newline at end of file diff --git a/wwjcloud/src/common/openapi/openapi.module.ts b/wwjcloud/src/common/openapi/openapi.module.ts deleted file mode 100644 index 26a16be..0000000 --- a/wwjcloud/src/common/openapi/openapi.module.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({}) -export class OpenapiModule {} diff --git a/wwjcloud/src/common/queue/queue.module.ts b/wwjcloud/src/common/queue/queue.module.ts deleted file mode 100644 index ea49ead..0000000 --- a/wwjcloud/src/common/queue/queue.module.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({}) -export class QueueModule {} diff --git a/wwjcloud/src/common/settings/site/site-settings.service.ts b/wwjcloud/src/common/settings/site/site-settings.service.ts index b259ce5..3782bec 100644 --- a/wwjcloud/src/common/settings/site/site-settings.service.ts +++ b/wwjcloud/src/common/settings/site/site-settings.service.ts @@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Site } from './site.entity'; import { UpdateSiteSettingsDto } from './site-settings.dto'; -import { DEFAULT_SITE_CONFIG, SYSTEM_CONSTANTS } from '../../config/constants'; +import { DEFAULT_SITE_CONFIG, SYSTEM_CONSTANTS } from '../../../config/common/constants'; @Injectable() export class SiteSettingsService { diff --git a/wwjcloud/src/common/utils/index.ts b/wwjcloud/src/common/utils/index.ts deleted file mode 100644 index 0519ecb..0000000 --- a/wwjcloud/src/common/utils/index.ts +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/wwjcloud/src/common/config/constants.ts b/wwjcloud/src/config/common/constants.ts similarity index 100% rename from wwjcloud/src/common/config/constants.ts rename to wwjcloud/src/config/common/constants.ts diff --git a/wwjcloud/src/core/cache/CacheManager.ts b/wwjcloud/src/core/cache/CacheManager.ts deleted file mode 100644 index bd7c324..0000000 --- a/wwjcloud/src/core/cache/CacheManager.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Injectable, Inject } from '@nestjs/common'; -import { CACHE_MANAGER } from '@nestjs/cache-manager'; -import type { Cache } from 'cache-manager'; - -@Injectable() -export class CacheManager { - constructor( - @Inject(CACHE_MANAGER) private cacheManager: Cache, - ) {} - - async set(key: string, value: any, ttl?: number): Promise { - await this.cacheManager.set(key, value, ttl); - } - - async get(key: string): Promise { - const result = await this.cacheManager.get(key); - return result || null; - } - - async del(key: string): Promise { - await this.cacheManager.del(key); - } - - async has(key: string): Promise { - const value = await this.cacheManager.get(key); - return value !== undefined && value !== null; - } - - async setWithTags(key: string, value: any, tags: string[], ttl?: number): Promise { - await this.cacheManager.set(key, value, ttl); - // 标签功能需要 Redis 支持 - for (const tag of tags) { - const tagKey = `tag:${tag}`; - const taggedKeys = await this.get(tagKey) || []; - if (!taggedKeys.includes(key)) { - taggedKeys.push(key); - await this.cacheManager.set(tagKey, taggedKeys); - } - } - } - - async clearByTags(tags: string[]): Promise { - for (const tag of tags) { - const tagKey = `tag:${tag}`; - const taggedKeys = await this.get(tagKey) || []; - - for (const key of taggedKeys) { - await this.cacheManager.del(key); - } - - await this.cacheManager.del(tagKey); - } - } - - async getTagMembers(tag: string): Promise { - const tagKey = `tag:${tag}`; - return await this.get(tagKey) || []; - } - - async clear(): Promise { - // 使用 del 方法逐个删除,因为 reset 方法不存在 - // 这里简化处理,实际项目中可能需要更复杂的清理逻辑 - await this.cacheManager.del('*'); - } - - async getStats(): Promise<{ hits: number; misses: number; keys: number }> { - // 基本统计,具体实现依赖于缓存提供者 - return { - hits: 0, - misses: 0, - keys: 0, - }; - } -} \ No newline at end of file diff --git a/wwjcloud/src/core/cache/cache.module.ts b/wwjcloud/src/core/cache/cache.module.ts deleted file mode 100644 index 11f446f..0000000 --- a/wwjcloud/src/core/cache/cache.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({ - providers: [], - exports: [], -}) -export class CacheModule {} diff --git a/wwjcloud/src/core/cache/ports/cache.port.ts b/wwjcloud/src/core/cache/ports/cache.port.ts deleted file mode 100644 index 7a438f6..0000000 --- a/wwjcloud/src/core/cache/ports/cache.port.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface CachePort { - get(key: string): Promise; - set(key: string, value: T, ttlSeconds?: number): Promise; - del(key: string): Promise; -} diff --git a/wwjcloud/src/core/context/cls.module.ts b/wwjcloud/src/core/context/cls.module.ts deleted file mode 100644 index 3a2b10a..0000000 --- a/wwjcloud/src/core/context/cls.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({ - providers: [], - exports: [], -}) -export class ClsCoreModule {} diff --git a/wwjcloud/src/core/database/transformers/boolean-number.transformer.ts b/wwjcloud/src/core/database/transformers/boolean-number.transformer.ts deleted file mode 100644 index a289ca9..0000000 --- a/wwjcloud/src/core/database/transformers/boolean-number.transformer.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { ValueTransformer } from 'typeorm'; - -// Maps boolean <-> tinyint(1) number (0/1) -export class BooleanNumberTransformer implements ValueTransformer { - to(value?: boolean | null): number | null { - if (value === null || value === undefined) return null; - return value ? 1 : 0; - } - from(value: number | null): boolean | null { - if (value === null || value === undefined) return null; - return Number(value) === 1; - } -} diff --git a/wwjcloud/src/core/database/transformers/index.ts b/wwjcloud/src/core/database/transformers/index.ts deleted file mode 100644 index 5741c3c..0000000 --- a/wwjcloud/src/core/database/transformers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './boolean-number.transformer'; -export * from './status-string.transformer'; -export * from './status-number.transformer'; diff --git a/wwjcloud/src/core/database/transformers/status-number.transformer.ts b/wwjcloud/src/core/database/transformers/status-number.transformer.ts deleted file mode 100644 index 427c847..0000000 --- a/wwjcloud/src/core/database/transformers/status-number.transformer.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { ValueTransformer } from 'typeorm'; -import { Status } from '../../enums'; - -// Maps tinyint number (0/1/2...) <-> Status enum (0/1) -export class StatusNumberTransformer implements ValueTransformer { - to(value?: Status | null): number | null { - if (value === null || value === undefined) return null; - return Number(value); - } - from(value: number | null): Status | null { - if (value === null || value === undefined) return null; - const n = Number(value); - return n === Status.Enabled ? Status.Enabled : Status.Disabled; - } -} diff --git a/wwjcloud/src/core/database/transformers/status-string.transformer.ts b/wwjcloud/src/core/database/transformers/status-string.transformer.ts deleted file mode 100644 index 3ce9508..0000000 --- a/wwjcloud/src/core/database/transformers/status-string.transformer.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ValueTransformer } from 'typeorm'; -import { Status, StatusNameMap } from '../../enums'; - -// Maps DB enum('enabled'|'disabled') <-> Status (1/0) -export class StatusStringTransformer implements ValueTransformer { - to(value?: Status | null): 'enabled' | 'disabled' | null { - if (value === null || value === undefined) return null; - return StatusNameMap[value]; - } - from(value: 'enabled' | 'disabled' | null): Status | null { - if (value === null || value === undefined) return null; - return value === 'enabled' ? Status.Enabled : Status.Disabled; - } -} diff --git a/wwjcloud/src/core/exception/filters/http-exception.filter.ts b/wwjcloud/src/core/exception/filters/http-exception.filter.ts deleted file mode 100644 index eeef2e9..0000000 --- a/wwjcloud/src/core/exception/filters/http-exception.filter.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { - ExceptionFilter, - Catch, - ArgumentsHost, - HttpException, - HttpStatus, -} from '@nestjs/common'; - -@Catch() -export class HttpExceptionFilter implements ExceptionFilter { - catch(exception: unknown, host: ArgumentsHost) { - const ctx = host.switchToHttp(); - const response = ctx.getResponse(); - - const status = - exception instanceof HttpException - ? exception.getStatus() - : HttpStatus.INTERNAL_SERVER_ERROR; - const message = - exception instanceof HttpException - ? exception.getResponse() - : 'Internal Server Error'; - - response.status?.(status).json?.({ - statusCode: status, - message, - timestamp: new Date().toISOString(), - }); - } -} diff --git a/wwjcloud/src/core/http/http.module.ts b/wwjcloud/src/core/http/http.module.ts deleted file mode 100644 index 23cbbad..0000000 --- a/wwjcloud/src/core/http/http.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({ - providers: [], - exports: [], -}) -export class HttpCoreModule {} diff --git a/wwjcloud/src/core/index.ts b/wwjcloud/src/core/index.ts index a9ab8b8..cb7af45 100644 --- a/wwjcloud/src/core/index.ts +++ b/wwjcloud/src/core/index.ts @@ -1,6 +1,2 @@ // 导出验证管道 -export * from './validation/pipes'; - -// 导出拦截器 -export { TransformInterceptor } from './interceptor/transform.interceptor'; -export { LoggingInterceptor } from './interceptor/logging.interceptor'; \ No newline at end of file +export * from './validation/pipes'; \ No newline at end of file diff --git a/wwjcloud/src/core/interceptor/logging.interceptor.ts b/wwjcloud/src/core/interceptor/logging.interceptor.ts deleted file mode 100644 index c0319c4..0000000 --- a/wwjcloud/src/core/interceptor/logging.interceptor.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - CallHandler, - ExecutionContext, - Injectable, - NestInterceptor, - Logger, -} from '@nestjs/common'; -import { Observable } from 'rxjs'; -import { tap } from 'rxjs/operators'; - -@Injectable() -export class LoggingInterceptor implements NestInterceptor { - private readonly logger = new Logger(LoggingInterceptor.name); - - intercept(context: ExecutionContext, next: CallHandler): Observable { - const request = context.switchToHttp().getRequest(); - const method = request.method; - const url = request.url; - const now = Date.now(); - - return next.handle().pipe( - tap(() => { - const responseTime = Date.now() - now; - this.logger.log(`${method} ${url} - ${responseTime}ms`); - }) - ); - } -} diff --git a/wwjcloud/src/core/interceptor/transform.interceptor.ts b/wwjcloud/src/core/interceptor/transform.interceptor.ts deleted file mode 100644 index 37f6418..0000000 --- a/wwjcloud/src/core/interceptor/transform.interceptor.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - CallHandler, - ExecutionContext, - Injectable, - NestInterceptor, -} from '@nestjs/common'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; - -@Injectable() -export class TransformInterceptor implements NestInterceptor { - intercept(_context: ExecutionContext, next: CallHandler): Observable { - return next.handle().pipe( - map(data => ({ - code: 200, - data, - message: 'success', - timestamp: new Date().toISOString(), - })) - ); - } -} diff --git a/wwjcloud/src/core/logger/logger.module.ts b/wwjcloud/src/core/logger/logger.module.ts deleted file mode 100644 index 73312d3..0000000 --- a/wwjcloud/src/core/logger/logger.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({ - providers: [], - exports: [], -}) -export class LoggerModule {} diff --git a/wwjcloud/src/core/queue/ports/queue.port.ts b/wwjcloud/src/core/queue/ports/queue.port.ts deleted file mode 100644 index 08e9a4f..0000000 --- a/wwjcloud/src/core/queue/ports/queue.port.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface QueuePort { - enqueue( - queue: string, - payload: T, - opts?: { delay?: number; attempts?: number }, - ): Promise; - process( - queue: string, - handler: (payload: any) => Promise, - ): Promise; -} diff --git a/wwjcloud/src/core/queue/queue.module.ts b/wwjcloud/src/core/queue/queue.module.ts deleted file mode 100644 index c5a9874..0000000 --- a/wwjcloud/src/core/queue/queue.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({ - providers: [], - exports: [], -}) -export class QueueModule {} diff --git a/wwjcloud/src/core/security/guards/index.ts b/wwjcloud/src/core/security/guards/index.ts deleted file mode 100644 index 6d04664..0000000 --- a/wwjcloud/src/core/security/guards/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// security guards placeholder -export {}; diff --git a/wwjcloud/src/core/security/security.module.ts b/wwjcloud/src/core/security/security.module.ts deleted file mode 100644 index dc29a1a..0000000 --- a/wwjcloud/src/core/security/security.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Module } from '@nestjs/common'; - -@Module({ - providers: [], - exports: [], -}) -export class SecurityModule {} diff --git a/wwjcloud/src/core/security/strategies/index.ts b/wwjcloud/src/core/security/strategies/index.ts deleted file mode 100644 index ed220f9..0000000 --- a/wwjcloud/src/core/security/strategies/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// security strategies placeholder -export {}; diff --git a/wwjcloud/src/core/utils/time.utils.ts b/wwjcloud/src/core/utils/time.utils.ts deleted file mode 100644 index 3ff6428..0000000 --- a/wwjcloud/src/core/utils/time.utils.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - * 时间工具函数 - * 完全按照PHP框架的时间处理方式实现 - */ - -/** - * 获取当前时间戳(秒) - * 对应PHP的time()函数 - */ -export function getCurrentTimestamp(): number { - return Math.floor(Date.now() / 1000); -} - -/** - * 获取当前时间戳(毫秒) - * 对应PHP的microtime(true) * 1000 - */ -export function getCurrentTimestampMs(): number { - return Date.now(); -} - -/** - * 将日期转换为时间戳 - * 对应PHP的strtotime()函数 - */ -export function dateToTimestamp(date: Date | string): number { - if (typeof date === 'string') { - return Math.floor(new Date(date).getTime() / 1000); - } - return Math.floor(date.getTime() / 1000); -} - -/** - * 将时间戳转换为日期 - * 对应PHP的date()函数 - */ -export function timestampToDate(timestamp: number): Date { - return new Date(timestamp * 1000); -} - -/** - * 将毫秒时间戳转换为日期 - */ -export function timestampMsToDate(timestampMs: number): Date { - return new Date(timestampMs); -} - -/** - * 获取指定天数后的时间戳 - * 对应PHP的strtotime('+X days') - */ -export function getTimestampAfterDays(days: number): number { - const date = new Date(); - date.setDate(date.getDate() + days); - return Math.floor(date.getTime() / 1000); -} - -/** - * 获取指定小时后的时间戳 - * 对应PHP的strtotime('+X hours') - */ -export function getTimestampAfterHours(hours: number): number { - const date = new Date(); - date.setHours(date.getHours() + hours); - return Math.floor(date.getTime() / 1000); -} - -/** - * 获取指定分钟后的时间戳 - * 对应PHP的strtotime('+X minutes') - */ -export function getTimestampAfterMinutes(minutes: number): number { - const date = new Date(); - date.setMinutes(date.getMinutes() + minutes); - return Math.floor(date.getTime() / 1000); -} - -/** - * 获取指定秒数后的时间戳 - * 对应PHP的strtotime('+X seconds') - */ -export function getTimestampAfterSeconds(seconds: number): number { - const date = new Date(); - date.setSeconds(date.getSeconds() + seconds); - return Math.floor(date.getTime() / 1000); -} \ No newline at end of file