Skip to content

灵感笔记应用:开发架构详解

1. 我的灵感

核心功能点:语音输入、语音转文字、文字输入、多个笔记合并、笔记复制、笔记编辑、笔记删除、笔记导出为图片。

目标功能简述

“像微信、豆包那样按住说话 → 自动转为文字 → 自动整理成小册子(可回顾、可导出)”

1. 语音输入(按住说话)

  • 前端实现:像微信那种“按住说话”,松开发送。
  • 支持格式:语音文件(如 .mp3、.wav)
  • 框架参考(前端)
    • H5:使用 MediaRecorder 进行录音。
    • App/小程序:使用系统 API 支持语音。

2. 语音转文字

  • 使用语音识别 API
    • ✅ 腾讯云语音识别(准确度高,中文支持好)
    • ✅ 阿里云智能语音交互
    • ✅ 科大讯飞
    • ✅ OpenAI Whisper(自部署可控,需 GPU)

3. 内容自动整理(小册子)

  • 每次语音转成一段文字,可按时间或主题归类。
  • 自动加时间戳、章节标题(如“2025 年 4 月 10 日:灵感记录”)。
  • 支持手动编辑、修改文字

4. 小册子展示和管理

  • 展示方式
    • 时间线
    • 按主题分类
  • 编辑支持
    • 手动修改标题、内容
    • 合并多段文字成一篇

5. 导出与分享

  • 支持导出格式
    • PDF、小册子 H5 页面、Markdown
  • 可一键分享到微信、朋友圈、邮箱等

前端(H5/小程序/APP):

  • Vue3/Nuxt3(PC & 移动端兼容)
  • 或 React Native / Flutter(做成 App)
  • 使用 MediaRecorder / wx.getRecorderManager()(小程序)

后端:

  • Node.js / Go + 云函数
  • 接入语音转文字服务
  • 存储文字内容,自动归类入“章节/小册子”

An image

2. 我的笔记

注意:

在数据库中不设置外键约束,而是通过应用层的逻辑来维护表之间的关系,可以调整数据库表结构,去掉外键约束。这样做的好处是减少数据库之间的依赖,提升数据库的性能,但需要通过业务逻辑来确保数据的一致性。

1. 数据库表结构

1.1 用户表(users

用户表存储每个用户的基本信息,主要用于用户注册、登录等操作。

sql
CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,  -- 用户ID,自增长
  username VARCHAR(255) NOT NULL,  -- 用户名
  email VARCHAR(255) NOT NULL UNIQUE,  -- 用户邮箱,唯一
  password_hash VARCHAR(255) NOT NULL,  -- 密码的哈希值
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 创建时间
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  -- 更新时间
);

1.2 笔记表(notes

存储笔记的元数据,如标题、标签、创建时间、修改时间、可见性等。

sql
CREATE TABLE notes (
  id INT PRIMARY KEY AUTO_INCREMENT,  -- 笔记ID,自增长
  user_id INT,  -- 用户ID,外键关联到用户表
  title VARCHAR(255) NOT NULL,  -- 笔记标题
  content TEXT,  -- 笔记内容(可以是markdown)
  category VARCHAR(255),  -- 笔记分类
  tags JSON,  -- 标签(可以使用JSON数组存储)
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 创建时间
  modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  -- 修改时间
  directory VARCHAR(255),  -- 笔记所属目录(文件夹名称)
  visibility BOOLEAN DEFAULT FALSE  -- 可见性(false:隐藏,true:公开)
--   FOREIGN KEY (user_id) REFERENCES users(id)  -- 外键关联到用户表
);

1.3 目录表(directories

存储用户的目录结构,包括文件夹名称、父子关系等。

sql
CREATE TABLE directories (
  id INT PRIMARY KEY AUTO_INCREMENT,  -- 目录ID,自增长
  user_id INT,  -- 用户ID,外键关联到用户表
  parent_id INT,  -- 父目录ID,如果是顶级目录则为NULL
  name VARCHAR(255) NOT NULL  -- 目录名称
--   FOREIGN KEY (user_id) REFERENCES users(id),  -- 外键关联到用户表
--   FOREIGN KEY (parent_id) REFERENCES directories(id)  -- 外键关联到父目录表
);

1.4 笔记文件存储路径(服务器文件系统)

笔记的实际内容将存储在服务器的文件系统中,按照以下路径格式:

/user/<user_id>/<directory>/<note_id>.md

例如:

/user/01/work/1.md  -- 用户01的工作目录下的笔记1.md文件

1.5 同步记录表(sync_records

用来记录笔记从本地缓存同步到云端的历史记录,可以帮助追踪同步状态。

sql
CREATE TABLE sync_records (
  id INT PRIMARY KEY AUTO_INCREMENT,  -- 同步记录ID,自增长
  user_id INT,  -- 用户ID,外键关联到用户表
  note_id INT,  -- 笔记ID,外键关联到笔记表
  sync_status ENUM('pending', 'success', 'failed') DEFAULT 'pending',  -- 同步状态:pending(待同步)、success(同步成功)、failed(同步失败)
  sync_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- 同步时间
--   FOREIGN KEY (user_id) REFERENCES users(id),
--   FOREIGN KEY (note_id) REFERENCES notes(id)
);

2. API 接口设计

2.1 用户相关接口

  1. 用户注册

    • POST /api/users/register
    • 请求体:
      json
      {
        "username": "user1",
        "email": "user1@example.com",
        "password": "securepassword"
      }
  2. 用户登录

    • POST /api/users/login
    • 请求体:
      json
      {
        "email": "user1@example.com",
        "password": "securepassword"
      }
  3. 获取用户信息

    • GET /api/users/me
    • 响应:
      json
      {
        "id": 1,
        "username": "user1",
        "email": "user1@example.com"
      }

2.2 笔记相关接口

  1. 创建笔记

    • POST /api/notes
    • 请求体:
      json
      {
        "title": "笔记标题",
        "content": "# 这是笔记的内容",
        "category": "工作",
        "tags": ["tag1", "tag2"],
        "directory": "工作",
        "visibility": false // 默认是隐藏的
      }
  2. 获取笔记列表(公开笔记)

    • GET /api/notes?visibility=true
    • 响应:
      json
      {
        "notes": [
          {
            "id": 1,
            "title": "公开笔记1",
            "content": "# 笔记内容",
            "visibility": true
          },
          {
            "id": 2,
            "title": "公开笔记2",
            "content": "# 笔记内容",
            "visibility": true
          }
        ]
      }
  3. 获取某个用户的所有笔记(包括隐藏笔记)

    • GET /api/notes/user/:user_id
    • 响应:
      json
      {
        "notes": [
          {
            "id": 1,
            "title": "笔记1",
            "visibility": true
          },
          {
            "id": 2,
            "title": "笔记2",
            "visibility": false
          }
        ]
      }
  4. 更新笔记(包括公开/隐藏状态)

    • PUT /api/notes/:note_id
    • 请求体:
      json
      {
        "title": "更新后的笔记标题",
        "content": "# 更新后的内容",
        "category": "学习",
        "tags": ["tag3", "tag4"],
        "visibility": true // 设置为公开
      }
  5. 删除笔记

    • DELETE /api/notes/:note_id
    • 响应:
      json
      {
        "success": true,
        "message": "笔记已删除"
      }

2.3 目录相关接口

  1. 创建目录

    • POST /api/directories
    • 请求体:
      json
      {
        "name": "工作目录",
        "parent_id": null // 顶级目录
      }
  2. 获取用户目录列表

    • GET /api/directories?user_id=1
    • 响应:
      json
      {
        "directories": [
          { "id": 1, "name": "工作" },
          { "id": 2, "name": "学习" }
        ]
      }
  3. 更新目录

    • PUT /api/directories/:directory_id
    • 请求体:
      json
      {
        "name": "更新后的目录名称",
        "parent_id": 1 // 设定父目录
      }
  4. 删除目录

    • DELETE /api/directories/:directory_id
    • 响应:
      json
      {
        "success": true,
        "message": "目录已删除"
      }

2.4 同步相关接口

  1. 同步本地笔记到云端

    • POST /api/sync/notes
    • 请求体:
      json
      {
        "note_id": 1,
        "content": "# 笔记的内容",
        "visibility": true
      }
  2. 获取同步记录

    • GET /api/sync/records
    • 响应:
      json
      {
        "sync_records": [
          {
            "note_id": 1,
            "sync_status": "success",
            "sync_time": "2025-04-21T12:00:00Z"
          },
          {
            "note_id": 2,
            "sync_status": "failed",
            "sync_time": "2025-04-21T12:10:00Z"
          }
        ]
      }

总结

  • 数据库表:包括用户表、笔记表、目录表和同步记录表。
  • API 接口:涵盖了用户管理、笔记管理、目录管理、同步记录等各类接口。

3. 架构设计