Skip to content

一个功能完整的摄影作品分享社区平台,基于 React + Node.js + MySQL 构建/A fully functional photography sharing community platform, built with React + Node.js + MySQL.

License

Notifications You must be signed in to change notification settings

Mark-kow/Photography-Community

Repository files navigation

📸 摄影社区 - Photography Community

License Node React Express

一个功能完整的摄影作品分享社区平台,基于 React + Node.js + MySQL 构建

在线演示 · 报告 Bug · 功能建议


✨ 功能特性

🎯 核心功能

  • 用户系统

    • 📱 手机号注册/登录(支持验证码和密码)
    • 👤 个人主页与资料管理
    • 🔐 基于 JWT 的身份认证
    • 👥 分级权限体系(管理员/编辑/普通用户)
  • 作品系统

    • 📷 作品发布(支持多图上传)
    • 🖼️ 作品浏览与详情展示
    • ✏️ 作品编辑与删除
    • 🏷️ AI 智能标签生成
    • 📊 EXIF 信息展示
  • 社交互动

    • ❤️ 点赞与收藏
    • 💬 评论与回复
    • 👣 关注用户
    • 📰 个性化 Feed 流
  • 拍摄地系统

    • 🗺️ 高德地图集成
    • 📍 拍摄地点标记与推荐
    • 🤖 AI 拍摄建议
    • 🏞️ 地点详情与作品展示
  • 学习模块

    • 📚 摄影课程浏览
    • 📝 学习笔记管理
    • 📈 学习进度跟踪
  • 器材百科

    • 📸 相机/镜头数据库
    • 🔍 器材详情与参数
    • 💼 个人器材库管理
    • 🤖 AI 器材选购建议
  • 活动功能

    • 🎉 约拍活动发布与报名
    • 🏆 摄影挑战赛
    • 🗳️ 作品投票与排行
  • AI 功能

    • 🏷️ 智能标签生成(基于作品内容和 EXIF)
    • 💡 拍摄建议(根据地点特征)
    • 🛒 器材推荐(根据预算和需求)
    • 💬 摄影问答助手

🛠️ 技术栈

前端

  • 框架: React 18 + Vite
  • 路由: React Router v6
  • UI 组件: Ant Design 5
  • 状态管理: Zustand
  • HTTP 客户端: Axios
  • 地图: 高德地图 API
  • 样式: CSS Modules

后端

  • 运行时: Node.js 16+
  • 框架: Express 4
  • 数据库: MySQL 8.0
  • 缓存: Redis 6.0
  • 认证: JWT (jsonwebtoken)
  • 文件上传: Multer
  • 密码加密: bcryptjs
  • AI 服务: 阿里云千问大模型

🚀 快速开始

环境要求

  • Node.js >= 16.0.0
  • MySQL >= 5.7
  • Redis >= 5.0

安装步骤

  1. 克隆项目
git clone https://github.com/Mark-kow/photography-community.git
cd photography-community
  1. 配置后端
cd backend
npm install

# 复制环境配置文件并修改
cp .env.example .env
# 编辑 .env 文件,配置数据库密码、Redis、JWT密钥等
  1. 配置前端
cd ../frontend
npm install

# 复制环境配置文件并修改
cp .env.example .env
# 编辑 .env 文件,配置高德地图 API Key
  1. 初始化数据库
# 启动 MySQL 服务
sudo systemctl start mysql

# 执行数据库迁移脚本
cd ../backend/database
chmod +x migrate.sh
./migrate.sh
  1. 启动 Redis
# 启动 Redis 服务
sudo systemctl start redis
#
redis-server
  1. 启动应用
# 方式一:使用启动脚本(推荐)
cd ../..
chmod +x start.sh
./start.sh

# 方式二:手动启动
# 终端1 - 启动后端
cd backend
npm run dev

# 终端2 - 启动前端
cd frontend
npm run dev
  1. 访问应用

测试账号

管理员:
  手机号: 13800138001
  密码: 123456

编辑:
  手机号: 13800138002
  密码: 123456

普通用户:
  手机号: 13800138003
  密码: 123456

📁 项目结构

photography-community/
├── backend/                    # 后端服务
│   ├── database/              # 数据库脚本
│   │   ├── init.sql          # 核心表结构
│   │   ├── locations.sql     # 拍摄地模块
│   │   ├── courses.sql       # 课程模块
│   │   ├── equipments.sql    # 器材模块
│   │   ├── activities.sql    # 活动模块
│   │   ├── challenges.sql    # 挑战赛模块
│   │   └── migrate.sh        # 迁移脚本
│   ├── src/
│   │   ├── config/           # 配置文件(数据库、Redis)
│   │   ├── controllers/      # 控制器
│   │   ├── middleware/       # 中间件(认证等)
│   │   ├── routes/           # 路由定义
│   │   ├── utils/            # 工具函数
│   │   └── server.js         # 服务器入口
│   ├── uploads/              # 上传文件目录
│   ├── logs/                 # 日志文件
│   ├── .env.example          # 环境变量模板
│   └── package.json
│
├── frontend/                  # 前端应用
│   ├── src/
│   │   ├── components/       # 公共组件
│   │   ├── pages/            # 页面组件
│   │   ├── store/            # 状态管理
│   │   ├── utils/            # 工具函数
│   │   ├── config/           # 配置文件
│   │   ├── App.jsx           # 应用入口
│   │   └── main.jsx          # 主入口
│   ├── .env.example          # 环境变量模板
│   └── package.json
│
├── .gitignore                # Git 忽略配置
├── start.sh                  # 一键启动脚本
├── DEPLOYMENT.md             # 部署指南
├── DEVELOPMENT_GUIDE.md      # 开发指南
├── TESTING_GUIDE.md          # 测试指南
├── TROUBLESHOOTING.md        # 故障排查
├── CONTRIBUTING.md           # 贡献指南
├── LICENSE                   # 开源许可证
└── README.md                 # 项目说明

📚 文档


🔧 配置说明

后端环境变量 (backend/.env)

# 服务器配置
NODE_ENV=development
PORT=3000

# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=photograph_app

# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

# JWT配置
JWT_SECRET=your-secret-key-change-in-production
JWT_EXPIRES_IN=2h

# 千问AI配置(可选,用于AI功能)
QWEN_API_KEY=your-qwen-api-key

前端环境变量 (frontend/.env)

# 高德地图 API Key(用于地图功能)
VITE_AMAP_KEY=your-amap-key

# API 基础路径
VITE_API_BASE_URL=/api/v1

API 密钥申请


🧪 测试

# 运行后端测试
cd backend
npm test

# 运行前端测试
cd frontend
npm test

📦 部署

详细的部署说明请参考 DEPLOYMENT.md

生产环境部署要点

  1. 修改环境变量为生产配置
  2. 使用 PM2 管理 Node.js 进程
  3. 配置 Nginx 反向代理
  4. 启用 HTTPS
  5. 配置数据库备份
  6. 设置监控和日志

🤝 贡献

欢迎贡献代码!请查看 CONTRIBUTING.md 了解详细信息。

贡献流程

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

📝 待办事项

  • 添加单元测试和集成测试
  • 实现 CI/CD 流程
  • 优化图片压缩和 CDN 集成
  • 添加 WebSocket 实时通知
  • 移动端适配优化
  • 国际化支持
  • PWA 支持

📄 开源协议

本项目采用 MIT License 开源协议。


👥 作者


🙏 致谢


📞 联系方式

如有问题或建议,欢迎通过以下方式联系:


⬆ 回到顶部

Made with ❤️ by Photography Community Team

3. 前端启动

cd frontend

# 安装依赖
npm install

# 启动开发服务器
npm run dev

前端应用将运行在 http://localhost:5173

📝 API 文档

认证相关

接口 方法 说明
/api/v1/auth/send-code POST 发送验证码
/api/v1/auth/register POST 用户注册
/api/v1/auth/login POST 用户登录
/api/v1/auth/logout POST 用户登出

用户相关

接口 方法 说明
/api/v1/users/me GET 获取当前用户信息
/api/v1/users/me PUT 更新用户信息
/api/v1/users/:id GET 获取用户资料
/api/v1/users/:id/follow POST 关注用户
/api/v1/users/:id/follow DELETE 取消关注

作品相关

接口 方法 说明
/api/v1/works/feed GET 获取推荐Feed流
/api/v1/works/following GET 获取关注动态
/api/v1/works/search GET 搜索作品
/api/v1/works/:id GET 获取作品详情
/api/v1/works POST 发布作品
/api/v1/works/:id/like POST 点赞作品
/api/v1/works/:id/collect POST 收藏作品

评论相关

接口 方法 说明
/api/v1/comments/work/:workId GET 获取作品评论
/api/v1/comments POST 发表评论
/api/v1/comments/:id DELETE 删除评论

🎯 核心功能说明

1. 用户认证

  • 支持手机号+验证码注册
  • 支持手机号+密码登录
  • JWT Token 认证机制
  • 开发环境验证码在控制台显示

2. 作品管理

  • 支持多图上传(最多9张)
  • 可添加标题、描述、地点、器材信息
  • 作品列表瀑布流展示
  • 作品详情页展示完整信息

3. 社交互动

  • 关注/取消关注用户
  • 点赞/取消点赞作品
  • 收藏/取消收藏作品
  • 发表评论和回复

4. 个人主页

  • 展示用户基本信息
  • 统计数据(作品数、粉丝数、关注数)
  • 用户作品展示

🧪 测试账号

系统已预置测试账号,可直接登录体验:

手机号:13800138001
密码:123456

手机号:13800138002
密码:123456

手机号:13800138003
密码:123456

🔧 配置说明

后端环境变量 (.env)

# 服务配置
NODE_ENV=development
PORT=3000

# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=photograph_app

# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379

# JWT配置
JWT_SECRET=your_secret_key
JWT_EXPIRES_IN=2h
JWT_REFRESH_EXPIRES_IN=7d

# 文件上传配置
UPLOAD_DIR=./uploads
MAX_FILE_SIZE=10485760

📊 数据库设计

主要数据表:

  • users - 用户表
  • works - 作品表
  • comments - 评论表
  • follows - 关注关系表
  • likes - 点赞表
  • collections - 收藏表

详细表结构请查看 backend/database/init.sql

🎨 UI 设计

  • 主色调:橙色 (#FF6B35)
  • 设计风格:简约现代、视觉优先
  • 响应式布局,支持多种设备

📈 后续规划

根据需求文档,后续版本将实现:

阶段二:功能完善(2个月)

  • 地点管理和打卡
  • 器材百科
  • 课程学习系统
  • 约拍活动
  • 挑战赛功能

阶段三:商业化(2个月)

  • 器材商城
  • 课程付费
  • 服务预约
  • 会员体系

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可

MIT License

📞 联系方式

如有问题,请通过以下方式联系:

  • 提交 Issue
  • 邮件联系

Enjoy Photography! 📸

About

一个功能完整的摄影作品分享社区平台,基于 React + Node.js + MySQL 构建/A fully functional photography sharing community platform, built with React + Node.js + MySQL.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published