# TodoList 项目结构说明

## 项目概述

TodoList 是一个跨平台的待办事项管理应用，采用多种技术栈实现不同平台的客户端。项目包含 WPF 桌面应用、MAUI 跨平台应用、Web 前端以及后端 API 服务。

## 项目结构

```
TodoList/
├── docs/                              # 项目文档目录
│   ├── 产品需求文档.md                 # 产品需求说明
│   ├── 产品需求文档-1.1.0.md         # v1.1.0版本需求
│   ├── 技术设计文档.md                 # 技术架构设计
│   ├── 代码规范文档.md                 # 代码编写规范
│   └── 实现对比文档.md                 # 不同实现方案对比
│
├── src/                               # 源代码目录
│   ├── TodoList.Api/                   # 后端 API 项目 (ASP.NET Core)
│   │   ├── Controllers/                # API 控制器
│   │   │   └── TasksController.cs     # 任务相关API端点
│   │   ├── Data/                       # 数据库相关
│   │   │   ├── TodoDbContext.cs       # EF Core 数据库上下文
│   │   │   └── Migrations/            # 数据库迁移文件
│   │   │       ├── 20260313044926_InitialCreate.cs
│   │   │       ├── 20260313044926_InitialCreate.Designer.cs
│   │   │       ├── 20260313092658_AddParentTaskId.cs
│   │   │       ├── 20260313092658_AddParentTaskId.Designer.cs
│   │   │       └── TodoDbContextModelSnapshot.cs
│   │   ├── Models/                     # 数据模型
│   │   │   └── TaskModels.cs          # 任务数据传输对象
│   │   ├── Repositories/               # 数据访问层
│   │   │   └── TaskRepository.cs      # 任务仓储实现
│   │   ├── Services/                   # 业务服务层
│   │   │   └── TaskService.cs         # 任务业务逻辑
│   │   ├── Properties/                 # 项目属性
│   │   │   └── launchSettings.json    # 启动配置
│   │   ├── Program.cs                  # 应用程序入口
│   │   ├── appsettings.json            # 应用配置
│   │   ├── appsettings.Development.json # 开发环境配置
│   │   ├── TodoList.Api.csproj         # 项目文件
│   │   ├── TodoList.Api.http           # HTTP 测试文件
│   │   └── todolist.db                 # SQLite 数据库文件
│   │
│   ├── TodoList.Core/                  # 核心业务逻辑层
│   │   ├── Entities/                   # 领域实体
│   │   │   ├── Task.cs                # 任务实体
│   │   │   └── TaskPriority.cs        # 任务优先级枚举
│   │   ├── Interfaces/                 # 接口定义
│   │   │   ├── ITaskRepository.cs     # 任务仓储接口
│   │   │   └── ITaskService.cs        # 任务服务接口
│   │   ├── Class1.cs                   # 临时类文件
│   │   └── TodoList.Core.csproj        # 项目文件
│   │
│   ├── TodoList.Maui/                  # MAUI 跨平台应用
│   │   ├── Models/                     # 数据模型
│   │   │   ├── HotKeyConfig.cs        # 热键配置模型
│   │   │   └── QuickEntryData.cs      # 快速输入数据模型
│   │   ├── Services/                   # 服务层
│   │   │   ├── Platforms/             # 平台特定服务
│   │   │   │   ├── WindowsGlobalHotKeyService.cs  # Windows热键服务
│   │   │   │   ├── MacGlobalHotKeyService.cs     # macOS热键服务
│   │   │   │   └── MobileGlobalHotKeyService.cs # 移动端热键服务
│   │   │   ├── GlobalHotKeyServiceFactory.cs     # 热键服务工厂
│   │   │   ├── HotKeySettingsService.cs         # 热键设置服务
│   │   │   └── IGlobalHotKeyService.cs          # 热键服务接口
│   │   ├── Views/                      # 视图层
│   │   │   ├── MainPage.xaml          # 主页面
│   │   │   ├── MainPage.xaml.cs
│   │   │   ├── QuickEntryPage.xaml    # 快速输入页面
│   │   │   ├── QuickEntryPage.xaml.cs
│   │   │   ├── HotKeySettingsPage.xaml # 热键设置页面
│   │   │   └── HotKeySettingsPage.xaml.cs
│   │   ├── Platforms/                  # 平台特定代码
│   │   │   ├── Windows/               # Windows 平台
│   │   │   │   ├── App.xaml
│   │   │   │   ├── App.xaml.cs
│   │   │   │   ├── Package.appxmanifest
│   │   │   │   └── app.manifest
│   │   │   ├── MacCatalyst/           # macOS 平台
│   │   │   │   ├── AppDelegate.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Info.plist
│   │   │   │   └── Entitlements.plist
│   │   │   ├── iOS/                   # iOS 平台
│   │   │   │   ├── AppDelegate.cs
│   │   │   │   ├── Program.cs
│   │   │   │   ├── Info.plist
│   │   │   │   └── Resources/
│   │   │   │       └── PrivacyInfo.xcprivacy
│   │   │   └── Android/               # Android 平台
│   │   │       ├── MainActivity.cs
│   │   │       ├── MainApplication.cs
│   │   │       ├── AndroidManifest.xml
│   │   │       └── Resources/
│   │   │           └── values/
│   │   │               └── colors.xml
│   │   ├── Resources/                  # 资源文件
│   │   │   ├── AppIcon/               # 应用图标
│   │   │   │   ├── appicon.svg
│   │   │   │   └── appiconfg.svg
│   │   │   ├── Fonts/                 # 字体文件
│   │   │   │   ├── OpenSans-Regular.ttf
│   │   │   │   └── OpenSans-Semibold.ttf
│   │   │   ├── Images/                # 图片资源
│   │   │   │   └── dotnet_bot.png
│   │   │   ├── Splash/                # 启动画面
│   │   │   │   └── splash.svg
│   │   │   ├── Raw/                   # 原始资源
│   │   │   │   └── AboutAssets.txt
│   │   │   └── Styles/                # 样式资源
│   │   │       ├── Colors.xaml
│   │   │       └── Styles.xaml
│   │   ├── Properties/                 # 项目属性
│   │   │   └── launchSettings.json
│   │   ├── App.xaml                    # 应用程序
│   │   ├── App.xaml.cs
│   │   ├── AppShell.xaml               # 应用外壳
│   │   ├── AppShell.xaml.cs
│   │   ├── MainPage.xaml                # 主页面（备用）
│   │   ├── MainPage.xaml.cs
│   │   ├── MauiProgram.cs              # MAUI 程序入口
│   │   ├── TodoList.Maui.csproj        # 项目文件
│   │   ├── IMPLEMENTATION_SUMMARY.md   # 实现总结
│   │   └── README.md                   # MAUI 项目说明
│   │
│   └── TodoList.Web/                   # Web 前端项目 (Vue.js)
│       ├── public/                     # 静态资源
│       │   ├── favicon.svg
│       │   └── icons.svg
│       ├── src/                        # 源代码
│       │   ├── api/                   # API 调用
│       │   │   ├── client.ts          # HTTP 客户端配置
│       │   │   └── tasks.ts           # 任务相关 API
│       │   ├── assets/                # 资源文件
│       │   │   ├── hero.png
│       │   │   ├── vite.svg
│       │   │   └── vue.svg
│       │   ├── components/             # Vue 组件
│       │   │   ├── HelloWorld.vue
│       │   │   ├── TaskList.vue       # 任务列表组件
│       │   │   └── TaskItem.vue       # 任务项组件
│       │   ├── services/              # 服务层
│       │   │   └── localStorageService.ts  # 本地存储服务
│       │   ├── types/                 # TypeScript 类型定义
│       │   │   └── task.ts            # 任务类型
│       │   ├── App.vue                # 根组件
│       │   ├── main.ts                # 应用入口
│       │   └── style.css              # 全局样式
│       ├── .vscode/                    # VS Code 配置
│       │   └── extensions.json
│       ├── .gitignore
│       ├── index.html                  # HTML 入口
│       ├── package.json                # Node.js 依赖配置
│       ├── tsconfig.json               # TypeScript 配置
│       ├── tsconfig.app.json
│       ├── tsconfig.node.json
│       ├── vite.config.ts              # Vite 构建配置
│       └── README.md                   # Web 项目说明
│
├── TodoList/                          # WPF 桌面应用项目
│   ├── Converters/                    # 值转换器
│   │   └── EnumDescriptionConverter.cs
│   ├── Models/                        # 数据模型
│   │   └── TodoItem.cs
│   ├── Services/                       # 服务层
│   │   ├── IDataService.cs           # 数据服务接口
│   │   ├── FileDataService.cs        # 文件数据服务
│   │   ├── SqliteDataService.cs      # SQLite 数据服务
│   │   ├── GlobalShortcutService.cs  # 全局快捷键服务
│   │   └── SettingsService.cs        # 设置服务
│   ├── ViewModels/                    # 视图模型
│   │   ├── MainViewModel.cs
│   │   └── QuickEntryViewModel.cs
│   ├── Views/                         # 视图
│   │   ├── MainWindow.xaml           # 主窗口
│   │   ├── MainWindow.xaml.cs
│   │   ├── QuickEntryWindow.xaml     # 快速输入窗口
│   │   └── QuickEntryWindow.xaml.cs
│   ├── App.xaml                       # 应用程序
│   ├── App.xaml.cs
│   ├── AssemblyInfo.cs                # 程序集信息
│   ├── BuildSetup.ps1                 # 构建安装包脚本
│   ├── setup.iss                      # Inno Setup 安装脚本
│   ├── icon.ico                       # 应用图标
│   └── TodoList.csproj                # 项目文件
│
├── TodoList.slnx                      # Visual Studio 解决方案文件
├── .gitattributes                     # Git 属性配置
├── .gitignore                         # Git 忽略文件配置
├── README.md                          # 项目说明文档
├── SCRIPTS_README.md                  # 脚本使用说明
├── start-service.ps1                  # 启动服务脚本
├── stop-service.ps1                   # 停止服务脚本
└── restart-service.ps1                # 重启服务脚本
```

## 技术栈说明

### TodoList (WPF 桌面应用)
- **框架**: WPF (Windows Presentation Foundation)
- **语言**: C# (.NET 8.0)
- **架构模式**: MVVM (Model-View-ViewModel)
- **数据存储**: SQLite (sqlite-net-pcl)
- **MVVM 框架**: CommunityToolkit.Mvvm
- **功能**: Windows 桌面应用，支持全局快捷键、快速输入等功能

### TodoList.Api (后端 API)
- **框架**: ASP.NET Core Web API
- **语言**: C# (.NET 10.0)
- **ORM**: Entity Framework Core
- **数据库**: SQLite
- **API 文档**: Swashbuckle (Swagger)
- **功能**: 提供 RESTful API，处理业务逻辑和数据持久化

### TodoList.Core (核心业务逻辑)
- **语言**: C# (.NET 10.0)
- **架构**: 领域驱动设计 (DDD)
- **功能**: 定义核心实体、接口和业务规则

### TodoList.Maui (跨平台应用)
- **框架**: .NET MAUI
- **语言**: C# (.NET 10.0)
- **支持平台**: Windows, macOS, iOS, Android
- **功能**: 跨平台原生应用，支持平台特定的热键功能

### TodoList.Web (Web 前端)
- **框架**: Vue.js 3
- **语言**: TypeScript
- **构建工具**: Vite
- **HTTP 客户端**: Axios
- **状态管理**: Pinia
- **功能**: 响应式 Web 界面，通过 HTTP API 与后端通信

## 项目依赖关系

```
TodoList.Web (前端)
    ↓ HTTP API
TodoList.Api (后端)
    ↓ 项目引用
TodoList.Core (核心层)
    ↓ EF Core
SQLite 数据库
```

## 开发环境要求

### 后端开发
- .NET 10 SDK
- Visual Studio 2022 或更高版本
- SQLite

### 前端开发
- Node.js 18+
- npm 或 yarn

### MAUI 开发
- Visual Studio 2022 17.8 或更高版本
- .NET MAUI 工作负载
- 各平台开发工具（Xcode, Android Studio 等）

### WPF 开发
- .NET 8 SDK
- Visual Studio 2022 或更高版本
- Windows 操作系统

## 启动方式

### 启动后端 API
```bash
cd src/TodoList.Api
dotnet restore
dotnet ef database update
dotnet run
```

### 启动 Web 前端
```bash
cd src/TodoList.Web
npm install
npm run dev
```

### 运行 WPF 应用
```bash
cd TodoList
dotnet run
```

### 运行 MAUI 应用
```bash
cd src/TodoList.Maui
dotnet build
```

## API 端点

- `GET /api/tasks` - 获取任务列表
- `GET /api/tasks/{id}` - 获取单个任务
- `POST /api/tasks` - 创建任务
- `PUT /api/tasks/{id}` - 更新任务
- `PATCH /api/tasks/{id}/complete` - 切换完成状态
- `DELETE /api/tasks/{id}` - 删除任务

## 数据库结构

### Tasks 表
- Id (主键)
- Title (标题)
- Description (描述)
- Priority (优先级: High, Medium, Low)
- IsCompleted (完成状态)
- DueDate (截止日期)
- CreatedAt (创建时间)
- UpdatedAt (更新时间)
- ParentTaskId (父任务ID，支持子任务)

## 脚本说明

- `start-service.ps1` - 启动后端服务
- `stop-service.ps1` - 停止后端服务
- `restart-service.ps1` - 重启后端服务
- `TodoList/BuildSetup.ps1` - 构建 WPF 安装包

## 版本历史

- **v1.0.0**: 初始 WPF 版本
- **v1.1.0**: 重构为 MAUI + WebView 架构，实现跨平台支持

## 注意事项

1. WPF 项目仅支持 Windows 平台
2. MAUI 项目支持多平台，但需要相应的开发环境
3. Web 项目需要先启动后端 API 服务
4. SQLite 数据库文件位于 `src/TodoList.Api/todolist.db`
5. 首次运行需要执行数据库迁移命令

## 扩展阅读

- [产品需求文档](./docs/产品需求文档.md)
- [技术设计文档](./docs/技术设计文档.md)
- [代码规范文档](./docs/代码规范文档.md)
- [实现对比文档](./docs/实现对比文档.md)
