# couple-tool **Repository Path**: robot1937/couple-tool ## Basic Information - **Project Name**: couple-tool - **Description**: 甜蜜空间 💕 — Vue3 + Spring Boot,情侣共享日记 + 纪念日 + AI 助手 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-12 - **Last Updated**: 2026-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 甜蜜空间 💕 (CoupleTool) > 为情侣 / 伴侣打造的私密协作空间:共享日记、纪念日、心情记录、AI 情感助手。 [![Vue](https://img.shields.io/badge/Vue-3-4FC08D?logo=vue.js&logoColor=white)](https://vuejs.org/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.x-6DB33F?logo=spring&logoColor=white)](https://spring.io/projects/spring-boot) [![H2](https://img.shields.io/badge/H2-Database-blue)](https://www.h2database.com/) [![JWT](https://img.shields.io/badge/Auth-JWT-orange)](https://jwt.io/) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](#) --- ## 📖 项目背景 恋爱是一场共同经营的事业。情侣 / 伴侣之间往往会面对: - 想留下共同的回忆,却散落在不同 App 里 - 纪念日总忘记,被对方"考"住 - 异地或忙碌时,希望对方能感受到"我在想你" - 想找一个安静、私密、属于两个人的角落 **甜蜜空间**是一个轻量级双人协作平台 —— 一对情侣通过**邀请码配对**后,可以共享日记、纪念日、心情曲线,并接入 AI 情感助手获得对话灵感、节日建议或矛盾化解话术。 ## ✨ 核心功能 | 模块 | 描述 | |---|---| | 👫 **配对系统** | 通过邀请码绑定情侣关系,一对一私密空间 | | 📔 **共享日记** | 图文日记,按日期归档,双方都能写、都能看 | | 🎂 **纪念日** | 在一起、第一次约会、生日……支持重复规则 | | 😊 **心情记录** | 5 级心情值 + emoji + 备注,绘制双人心情曲线 | | 🤖 **AI 助手** | 接入通义千问 (Qwen),提供恋爱建议 / 节日话术 / 矛盾化解 | | 🔔 **实时通信** | WebSocket 推送对方动态 | | 🃏 **分享卡片** | 生成精美卡片,分享到外部社交平台 | ## 🛠 技术栈 **前端** (`client/`): - Vue 3 + Vite + Vant UI(移动优先) - @vueuse/core 工具集 - Axios HTTP 客户端 **后端** (`server/`): - Spring Boot 3.x + Java 17 - **MyBatis-Plus** ORM - **H2 文件数据库**(默认开发,可切换 PostgreSQL) - **Redis**(会话 / 缓存) - **JJWT**(鉴权令牌) - **OkHttp**(接通义千问 API) - **Spring WebSocket**(实时推送) ## 🗄️ 数据库设计 | 表名 | 用途 | |---|---| | `users` | 用户(openid / 昵称 / 头像 / 心情值 / 配对ID)| | `pairs` | **配对关系**(邀请码 / user1 / user2 / 纪念日)| | `diaries` | 共享日记(图文 / 日期)| | `anniversaries` | 纪念日(含重复规则)| | `moods` / `mood_logs` | 心情记录与历史 | | `ai_chats` | AI 对话历史 | 完整建表 SQL 见 `server/src/main/resources/schema.sql`。 ## 🚀 快速开始 ### 0. 准备 - Java 17+ - Node.js 18+ - Redis(可选,无 Redis 时部分缓存功能降级) - 通义千问 API Key(可选,无 Key 时 AI 功能停用) ### 1. 配置环境变量 ```bash cd server cp .env.example .env # 编辑 .env: # JWT_SECRET=请生成一个 256 位以上的随机串 # AI_QWEN_API_KEY=你的通义千问 API Key(可选) ``` ### 2. 启动后端 ```bash cd server mvn spring-boot:run # 默认端口 8080 # H2 控制台:http://localhost:8080/h2-console # JDBC URL: jdbc:h2:file:./data/coupletool;AUTO_SERVER=TRUE # 用户名: sa 密码: (空) ``` ### 3. 启动前端 ```bash cd client npm install npm run dev # 默认访问 http://localhost:5173 ``` ## 📂 目录结构 ``` couple-tool/ ├── client/ # Vue3 前端(移动优先) │ ├── src/ │ │ ├── views/ # 页面(登录、配对、日记、纪念日、心情、AI) │ │ ├── components/ │ │ ├── api/ # axios 封装 │ │ └── main.js │ └── package.json ├── server/ # Spring Boot 后端 │ ├── src/main/java/com/coupletool/ │ │ ├── controller/ # REST API │ │ ├── service/ │ │ ├── mapper/ # MyBatis 数据访问层 │ │ ├── entity/ # 实体(@TableName) │ │ └── config/ # JWT / WebSocket / Security │ ├── src/main/resources/ │ │ ├── application.yml # 配置(已脱敏) │ │ ├── schema.sql # 建表脚本 │ │ └── mapper/ # MyBatis XML │ └── pom.xml └── docs/ # 设计文档 ``` ## 🔐 安全提示 - ❌ **不要**直接使用 `application.yml` 里的占位 JWT secret 上线 - ✅ 通过环境变量 `JWT_SECRET` 注入真实密钥(≥256 位) - ✅ Redis / 数据库密码生产环境务必修改默认值 - ✅ 通义千问 Key 通过环境变量 `AI_QWEN_API_KEY` 注入 ## ⚠️ 已知 Issue - [ ] JWT 序列化在某些 Lombok + Jackson 组合下报错(待修) ## 📜 License MIT