# wedding-scene **Repository Path**: chenss_2022/wedding-scene ## Basic Information - **Project Name**: wedding-scene - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-28 - **Last Updated**: 2026-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # wedding-scene 面向婚礼新人与婚礼布置商家的场景选配平台。商家上传可实际部署的图片素材、维护场景并接收咨询;新人可以在浏览器中组合 2.5D 婚礼布置方案,保存后分享给家人或提交给商家。 ## 已实现功能 ### 新人端 - 浏览、搜索并按风格和场地筛选婚礼场景 - 查看场景详情、商家资料、包含内容和预算区间 - 在 2.5D 编辑器中切换背景,添加、移动、缩放、旋转、替换和删除摆件 - 保存自己的方案,继续编辑或生成公开分享链接 - 通过分享页只读查看方案并向商家提交咨询 ### 商家端 - 注册商家账号并进入独立管理后台 - 上传 PNG、JPEG、WebP、SVG 图片,维护素材分类、尺寸和价格 - 创建和编辑场景,选择可用素材,配置预算、人数、背景和默认摆件 - 发布、下架或删除场景 - 查看客户咨询并更新为已联系、已关闭状态 - 在概览页查看素材、场景、发布和咨询统计 ## 技术栈 - 前端:Vue 3、TypeScript、Vite、Pinia、Vue Router、PixiJS - 后端:Node.js `node:http`、`node:sqlite`、`node:crypto` - Java 后端(阶段 2 迁移目标):Spring Boot 3.3.5、Java 17、H2(快速测试)、MySQL 8(正式验收)、Flyway、Testcontainers - 测试:Vitest、Vue Test Utils、jsdom 后端没有新增运行时依赖。需要使用支持直接运行 TypeScript 和 `node:sqlite` 的较新 Node.js 版本,推荐 Node.js 24 或更高版本。 ## 本地运行 先安装依赖: ```bash pnpm install ``` 同时启动前端和接口服务: ```bash pnpm dev:all ``` 浏览器访问 `http://127.0.0.1:5173`。后端地址为 `http://127.0.0.1:8787`,Vite 会把 `/api` 和 `/uploads` 代理到后端。第一次启动会自动创建 SQLite 数据库并写入演示数据。 也可以打开两个终端分别启动。第一个终端运行接口服务: ```bash pnpm server:dev ``` 第二个终端运行前端: ```bash pnpm dev ``` ## 演示账号 所有演示账号密码均为 `demo1234`。 | 身份 | 邮箱 | | ---- | ----------------------- | | 新人 | `bride@demo.com` | | 商家 | `merchant@demo.com` | | 商家 | `merchant-yun@demo.com` | | 商家 | `merchant-he@demo.com` | 也可以在注册页创建新的新人或商家账号。 ## 数据与上传文件 - SQLite 数据库:`server/data/wedding.db` - 商家上传图片:`server/uploads/` - 演示图片:`apps/web/public/demo/` 数据库和上传目录均已加入 `.gitignore`。单张图片最大 2 MB,只接受 PNG、JPEG、WebP 和 SVG。 如果只需要手动补种演示数据,可以运行: ```bash pnpm server:seed ``` 种子写入是幂等的,数据库已有数据时不会重复添加。 ## 质量检查 ```bash pnpm typecheck pnpm lint pnpm test pnpm build ``` 测试包含领域逻辑、Pinia store、Vue 页面、后端仓储与路由,以及“商家发布场景到新人咨询回流”的完整业务链路。 ## Java 后端(阶段 2 迁移) `backend/` 是 Spring Boot 3.3.5(Java 17)的并行后端,按既有 Node API 的字段、状态码与业务语义实现,并提供 SQLite → MySQL 导入工具。当前默认运行仍是 Node 后端(`pnpm dev:all`),Java 端用于阶段 2 验收;本轮不切换默认后端。 ### 快速回归(H2,无 Docker) ```bash pnpm java:test ``` 在 H2(`MODE=MySQL`)内存库上跑 MockMvc 契约测试(注册/登录与 scrypt 升级、公开场景、商家端租户隔离与 CRUD、方案分享与咨询权限)和一条全链路冒烟。**只代表 H2 行为一致,不代表 MySQL 验收通过。** ### 正式门禁(真实 MySQL + Testcontainers) ```bash pnpm java:verify ``` 需要 Docker Engine(Testcontainers 2.0.5 / docker-java 3.7.1,Docker Engine 29 已验证)。`*IT` 会启动临时 MySQL 8 容器跑 Flyway V2 迁移(脏数据预检、幂等 guard、collation 契约)、SQLite 导入(dry-run/apply/幂等/回滚)与导入后 API 回读,共 14 个用例。Docker 不可用时 `java:verify` 会失败而非静默跳过。 ### SQLite → MySQL 导入 演示库为 `server/data/wedding.db`。目标 MySQL 凭据只通过环境变量注入,不写入命令行或日志;目标需先完成 Flyway V2 迁移,URL 必须携带 UTC 时区参数以保证 DATETIME 往返: ```bash export WEDDING_IMPORT_TARGET_URL="jdbc:mysql://:3306/wedding_scene?connectionTimeZone=UTC&forceConnectionTimeZoneToSession=true" export WEDDING_IMPORT_TARGET_USER=<用户名> export WEDDING_IMPORT_TARGET_PASSWORD=<密码> # dry-run:只读取并预检,不写任何数据 pnpm java:import --source="F:\\code\\wedding-scene\\server\\data\\wedding.db" # apply:校验全部通过后写入,可重复执行(第二次顶层 inserted=0) pnpm java:import --source="F:\\code\\wedding-scene\\server\\data\\wedding.db" --apply ``` `--apply` 缺 URL/用户名/密码任一环境变量时直接报错退出。报告包含各表 read/inserted/updated/unchanged、子表行数、跳过 sessions、兼容性警告与稳定 fingerprint。报告始终按 UTF-8 输出,重定向到文件或交给下游解析都能正确读到中文警告;若终端本身不是 UTF-8(Windows 默认 GBK),可先 `chcp 65001` 再查看。 ## 项目结构 ```text apps/web/ Vue 3 客户端与商家管理端(@wedding/web) packages/shared/ 共享领域层:类型、编辑器纯逻辑与预算计算(@wedding/shared) server/ Node HTTP API、账号认证、SQLite 仓储与上传存储(迁移期保留) backend/ Spring Boot 3.3.5 后端、Flyway 迁移、SQLite→MySQL 导入 CLI 与契约测试 tests/ Node 后端与全链路测试(前端测试位于 apps/web/tests) docs/superpowers/ 产品设计与实施计划 ``` 仓库为 pnpm workspace 多包结构。`@wedding/shared` 是不依赖 DOM 与渲染库的纯 TypeScript 包,Web 端与后续小程序端共同引用,保证编辑器业务规则单源。 ## 文档 - 产品设计:`docs/superpowers/specs/2026-08-28-wedding-scene-configurator-design.md` - 技术架构(Java 后端 + 微信小程序,规划中):`docs/superpowers/specs/2026-09-07-platform-architecture.md` - 客户端实施计划:`docs/superpowers/plans/2026-08-28-customer-scene-editor.md` - 全栈与商家端实施计划:`docs/superpowers/plans/2026-09-01-fullstack-merchant-portal.md`