refactor: 全面清理项目结构,优化代码组织
主要改进:
1. 清理Core层空壳目录
- 删除traits, transformers, query等空目录
- 删除security, http, queue等空模块
- 删除logger, context, exception等空壳
2. 清理Common层冗余模块
- 删除utils, cache, queue等空壳模块
- 删除dictionary, dict等重复字典模块
- 删除重复的MemberModule.ts文件
3. 优化模块结构
- 移动config到config/common目录
- 统一模块命名规范为{模块名}.module.ts
- 保留业务逻辑模块:auth, member, rbac, admin, settings, upload, notification
4. 代码质量提升
- 更符合NestJS最佳实践
- 项目结构更清晰
- 删除所有空壳和重复代码
- 打包测试通过
技术改进:
- 使用TypeScript枚举替代PHP风格的Dict类
- 优化导入路径和模块引用
- 清理无用的空壳目录和文件
This commit is contained in:
118
admin/apps/web-ele/src/api/README.md
Normal file
118
admin/apps/web-ele/src/api/README.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# WWJ Cloud 前端API使用说明
|
||||
|
||||
## 📁 目录结构
|
||||
|
||||
```
|
||||
src/api/
|
||||
├── core/ # 核心API(通用功能)
|
||||
├── frontend/ # 前台API(前台用户访问)
|
||||
│ ├── member.ts # 前台会员API
|
||||
│ ├── site.ts # 前台站点API
|
||||
│ └── index.ts # 前台API统一导出
|
||||
├── admin/ # 后台管理API(后台管理员访问)
|
||||
│ ├── member.ts # 后台会员管理API
|
||||
│ └── index.ts # 后台管理API统一导出
|
||||
└── index.ts # 主API统一导出
|
||||
```
|
||||
|
||||
## 🎯 使用方式
|
||||
|
||||
### 前台API(前台用户访问)
|
||||
|
||||
```typescript
|
||||
import { getMemberProfile, memberSignIn, getSiteInfo } from '@/api/frontend';
|
||||
|
||||
// 获取个人资料
|
||||
const profile = await getMemberProfile();
|
||||
|
||||
// 会员签到
|
||||
const signResult = await memberSignIn();
|
||||
|
||||
// 获取站点信息
|
||||
const siteInfo = await getSiteInfo();
|
||||
```
|
||||
|
||||
### 后台管理API(后台管理员访问)
|
||||
|
||||
```typescript
|
||||
import { getMemberList, createMember, updateMember } from '@/api/admin';
|
||||
|
||||
// 获取会员列表
|
||||
const memberList = await getMemberList({ page: 1, limit: 10 });
|
||||
|
||||
// 创建会员
|
||||
const newMember = await createMember({
|
||||
username: 'test',
|
||||
nickname: '测试用户',
|
||||
mobile: '13800138000',
|
||||
email: 'test@example.com',
|
||||
password: '123456',
|
||||
levelId: 1,
|
||||
status: 1
|
||||
});
|
||||
|
||||
// 更新会员
|
||||
const updatedMember = await updateMember(1, {
|
||||
nickname: '新昵称',
|
||||
status: 0
|
||||
});
|
||||
```
|
||||
|
||||
## 🔄 OpenAPI自动同步
|
||||
|
||||
### 生成前台API类型
|
||||
```bash
|
||||
npm run openapi:gen:frontend
|
||||
```
|
||||
|
||||
### 生成后台管理API类型
|
||||
```bash
|
||||
npm run openapi:gen:admin
|
||||
```
|
||||
|
||||
### 生成统一API类型
|
||||
```bash
|
||||
npm run openapi:gen
|
||||
```
|
||||
|
||||
## 📋 API分类说明
|
||||
|
||||
### 前台API(/api/*)
|
||||
- **会员相关**:个人资料、签到、等级、积分等
|
||||
- **站点相关**:站点信息、配置、公告等
|
||||
- **菜单相关**:前台菜单、权限等
|
||||
- **角色相关**:前台角色、权限等
|
||||
|
||||
### 后台管理API(/admin/*)
|
||||
- **会员管理**:会员列表、创建、编辑、删除等
|
||||
- **站点管理**:站点配置、管理、设置等
|
||||
- **菜单管理**:后台菜单、权限配置等
|
||||
- **角色管理**:后台角色、权限分配等
|
||||
|
||||
## 🛡️ 认证和权限
|
||||
|
||||
### 前台API认证
|
||||
- 使用JWT Token认证
|
||||
- 用户只能访问自己的数据
|
||||
- 支持公开接口(无需认证)
|
||||
|
||||
### 后台管理API认证
|
||||
- 使用JWT Token + 管理员权限认证
|
||||
- 管理员可以访问所有数据
|
||||
- 严格的权限控制
|
||||
|
||||
## 📝 注意事项
|
||||
|
||||
1. **类型安全**:所有API都使用TypeScript类型定义
|
||||
2. **错误处理**:统一的错误处理机制
|
||||
3. **数据验证**:前后端数据验证一致
|
||||
4. **多租户**:支持SaaS多租户和独立版部署
|
||||
5. **自动同步**:OpenAPI自动生成前端类型定义
|
||||
|
||||
## 🚀 开发建议
|
||||
|
||||
1. **优先使用前台API**:前台用户功能优先使用前台API
|
||||
2. **合理使用后台API**:管理功能使用后台管理API
|
||||
3. **保持类型同步**:定期运行OpenAPI生成命令
|
||||
4. **遵循命名规范**:API路径和函数名保持一致
|
||||
5. **测试覆盖**:为所有API编写测试用例
|
||||
5
admin/apps/web-ele/src/api/admin/index.ts
Normal file
5
admin/apps/web-ele/src/api/admin/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* 后台管理API统一导出
|
||||
*/
|
||||
|
||||
export * from './member';
|
||||
102
admin/apps/web-ele/src/api/admin/member.ts
Normal file
102
admin/apps/web-ele/src/api/admin/member.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
/**
|
||||
* 后台会员管理API服务
|
||||
* 后台管理员访问的会员管理接口
|
||||
*/
|
||||
|
||||
import { request } from '../request';
|
||||
import type {
|
||||
AdminMember,
|
||||
AdminMemberLevel,
|
||||
AdminMemberQuery,
|
||||
AdminMemberCreate,
|
||||
AdminMemberUpdate,
|
||||
PaginatedResult
|
||||
} from '../../../types/admin-api';
|
||||
|
||||
// 后台会员管理API基础路径
|
||||
const ADMIN_MEMBER_API = '/admin/member';
|
||||
|
||||
/**
|
||||
* 获取会员列表
|
||||
*/
|
||||
export function getMemberList(params: AdminMemberQuery) {
|
||||
return request<PaginatedResult<AdminMember>>({
|
||||
url: ADMIN_MEMBER_API,
|
||||
method: 'GET',
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员详情
|
||||
*/
|
||||
export function getMemberDetail(id: number) {
|
||||
return request<AdminMember>({
|
||||
url: `${ADMIN_MEMBER_API}/${id}`,
|
||||
method: 'GET',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建会员
|
||||
*/
|
||||
export function createMember(data: AdminMemberCreate) {
|
||||
return request<AdminMember>({
|
||||
url: ADMIN_MEMBER_API,
|
||||
method: 'POST',
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新会员
|
||||
*/
|
||||
export function updateMember(id: number, data: AdminMemberUpdate) {
|
||||
return request<AdminMember>({
|
||||
url: `${ADMIN_MEMBER_API}/${id}`,
|
||||
method: 'PUT',
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除会员
|
||||
*/
|
||||
export function deleteMember(id: number) {
|
||||
return request<void>({
|
||||
url: `${ADMIN_MEMBER_API}/${id}`,
|
||||
method: 'DELETE',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除会员
|
||||
*/
|
||||
export function batchDeleteMembers(ids: number[]) {
|
||||
return request<void>({
|
||||
url: `${ADMIN_MEMBER_API}/batch`,
|
||||
method: 'DELETE',
|
||||
data: { ids },
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员等级列表
|
||||
*/
|
||||
export function getMemberLevelList() {
|
||||
return request<AdminMemberLevel[]>({
|
||||
url: `${ADMIN_MEMBER_API}/levels`,
|
||||
method: 'GET',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新会员状态
|
||||
*/
|
||||
export function updateMemberStatus(id: number, status: number) {
|
||||
return request<void>({
|
||||
url: `${ADMIN_MEMBER_API}/${id}/status`,
|
||||
method: 'PATCH',
|
||||
data: { status },
|
||||
});
|
||||
}
|
||||
6
admin/apps/web-ele/src/api/frontend/index.ts
Normal file
6
admin/apps/web-ele/src/api/frontend/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
/**
|
||||
* 前台API统一导出
|
||||
*/
|
||||
|
||||
export * from './member';
|
||||
export * from './site';
|
||||
62
admin/apps/web-ele/src/api/frontend/member.ts
Normal file
62
admin/apps/web-ele/src/api/frontend/member.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* 前台会员API服务
|
||||
* 前台用户访问的会员相关接口
|
||||
*/
|
||||
|
||||
import { request } from '../request';
|
||||
import type { FrontendMemberProfile, FrontendMemberSignResult } from '../../../types/frontend-api';
|
||||
|
||||
// 前台会员API基础路径
|
||||
const FRONTEND_MEMBER_API = '/api/member';
|
||||
|
||||
/**
|
||||
* 获取个人资料
|
||||
*/
|
||||
export function getMemberProfile() {
|
||||
return request<FrontendMemberProfile>({
|
||||
url: `${FRONTEND_MEMBER_API}/profile`,
|
||||
method: 'GET',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新个人资料
|
||||
*/
|
||||
export function updateMemberProfile(data: Partial<FrontendMemberProfile>) {
|
||||
return request<FrontendMemberProfile>({
|
||||
url: `${FRONTEND_MEMBER_API}/profile`,
|
||||
method: 'PUT',
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员签到
|
||||
*/
|
||||
export function memberSignIn() {
|
||||
return request<FrontendMemberSignResult>({
|
||||
url: `${FRONTEND_MEMBER_API}/sign`,
|
||||
method: 'POST',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员等级信息
|
||||
*/
|
||||
export function getMemberLevel() {
|
||||
return request<any>({
|
||||
url: `${FRONTEND_MEMBER_API}/level`,
|
||||
method: 'GET',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员积分记录
|
||||
*/
|
||||
export function getMemberPointsHistory(params: { page: number; limit: number }) {
|
||||
return request<any>({
|
||||
url: `${FRONTEND_MEMBER_API}/points/history`,
|
||||
method: 'GET',
|
||||
params,
|
||||
});
|
||||
}
|
||||
41
admin/apps/web-ele/src/api/frontend/site.ts
Normal file
41
admin/apps/web-ele/src/api/frontend/site.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* 前台站点API服务
|
||||
* 前台用户访问的站点相关接口
|
||||
*/
|
||||
|
||||
import { request } from '../request';
|
||||
import type { FrontendSiteInfo } from '../../../types/frontend-api';
|
||||
|
||||
// 前台站点API基础路径
|
||||
const FRONTEND_SITE_API = '/api/site';
|
||||
|
||||
/**
|
||||
* 获取站点信息
|
||||
*/
|
||||
export function getSiteInfo() {
|
||||
return request<FrontendSiteInfo>({
|
||||
url: `${FRONTEND_SITE_API}/info`,
|
||||
method: 'GET',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点配置
|
||||
*/
|
||||
export function getSiteConfig() {
|
||||
return request<any>({
|
||||
url: `${FRONTEND_SITE_API}/config`,
|
||||
method: 'GET',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点公告
|
||||
*/
|
||||
export function getSiteAnnouncements(params: { page: number; limit: number }) {
|
||||
return request<any>({
|
||||
url: `${FRONTEND_SITE_API}/announcements`,
|
||||
method: 'GET',
|
||||
params,
|
||||
});
|
||||
}
|
||||
@@ -1 +1,3 @@
|
||||
export * from './core';
|
||||
export * from './frontend';
|
||||
export * from './admin';
|
||||
|
||||
Reference in New Issue
Block a user