{"id":29424283,"url":"https://github.com/poboll/shenglingji","last_synced_at":"2026-04-14T04:31:51.727Z","repository":{"id":295923112,"uuid":"991349182","full_name":"poboll/shenglingji","owner":"poboll","description":"生灵集后端服务 / 「生命万灵的合集」—— 探索、学习和分享自然之美的平台 / 安卓软件 / 安卓軟件","archived":false,"fork":false,"pushed_at":"2025-06-07T12:44:40.000Z","size":92989,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-12T08:18:11.414Z","etag":null,"topics":["express","jwt","multer","mysql","nodejs","sequelize"],"latest_commit_sha":null,"homepage":"https://poboll.github.io/shenglingji/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/poboll.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-27T13:45:38.000Z","updated_at":"2025-06-07T13:26:21.000Z","dependencies_parsed_at":"2025-05-28T04:28:24.771Z","dependency_job_id":"0188e27a-296f-48bd-922c-e97f7d6840c1","html_url":"https://github.com/poboll/shenglingji","commit_stats":null,"previous_names":["poboll/shenglingji"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/poboll/shenglingji","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poboll%2Fshenglingji","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poboll%2Fshenglingji/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poboll%2Fshenglingji/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poboll%2Fshenglingji/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/poboll","download_url":"https://codeload.github.com/poboll/shenglingji/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poboll%2Fshenglingji/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31782736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["express","jwt","multer","mysql","nodejs","sequelize"],"created_at":"2025-07-12T08:10:09.944Z","updated_at":"2026-04-14T04:31:51.713Z","avatar_url":"https://github.com/poboll.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/poboll/shenglingji-android/main/app/src/main/res/drawable/icon_logo.png\" \n  width=\"120\" height=\"120\" alt=\"生灵集\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e生灵集 (Sheng Ling Ji)\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/poboll/shenglingji/blob/main/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/poboll/shenglingji\" alt=\"license\"\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-Android%20%7C%20Web-brightgreen\" alt=\"platform\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Android-Jetpack%20Compose-blue\" alt=\"Android\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Backend-Node.js-green\" alt=\"Backend\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e「生命万灵的合集」—— 探索、学习和分享自然之美的平台\u003c/p\u003e\n\n## 📖 项目介绍\n\n「生灵集」的寓意是\"生命万灵的合集\"，旨在创建一个可以探索、学习和分享自然之美的平台。通过这个平台，用户可以：\n\n- 📱 浏览精美的动植物图文和视频内容\n- 🌱 参与互动学习，增长自然知识\n- 🔍 探索生物多样性，了解生态保护\n- 👥 与志同道合的自然爱好者交流分享\n\n本项目采用现代化的技术栈，包括 Android 原生应用（Jetpack Compose）和 Node.js 后端服务，打造流畅、美观且功能丰富的用户体验。\n\n## 🏗️ 项目架构\n\n项目采用前后端分离的架构设计：\n\n```\nshenglingji/\n├── shenglingji-android/  # Android 客户端应用\n└── shenglingji-backend/  # Node.js 后端服务\n```\n\n### 前端架构\n\nAndroid 客户端采用 MVVM 架构模式，结合 Jetpack Compose 声明式 UI 框架，实现高效的 UI 渲染和状态管理。\n\n- **UI 层**: Jetpack Compose 构建现代化界面\n- **ViewModel 层**: 管理 UI 状态，处理业务逻辑\n- **Repository 层**: 数据获取与缓存策略\n- **数据源层**: 网络请求和本地存储访问\n\n### 后端架构\n\n后端服务采用 MVC 架构模式，基于 Express 框架构建 RESTful API，使用 Sequelize ORM 进行数据库操作。\n\n- **Controller**: 处理请求和响应\n- **Service**: 业务逻辑实现\n- **Model**: 数据库模型定义\n- **Middleware**: 请求处理中间件\n\n## 📊 数据库设计\n\n系统使用 MySQL 关系型数据库，主要包含以下核心表：\n\n### 用户相关表\n- **Users**: 用户基本信息\n- **Profiles**: 用户详细资料\n- **user_followings**: 用户关注关系\n\n### 内容相关表\n- **posts**: 帖子主体内容\n- **post_images**: 帖子图片资源\n- **post_videos**: 帖子视频资源\n- **comments**: 评论信息\n\n## 🚀 功能特性\n\n### 内容浏览\n\n- 瀑布流展示精美动植物图文内容\n- 视频播放支持，展示生态环境和生物行为\n- 个性化推荐算法，根据用户兴趣推送内容\n\n### 互动学习\n\n- 动植物知识问答和测验\n- 物种识别与分类学习\n- 生态知识科普与环保理念传播\n\n### 社区功能\n\n- 用户关注与互动系统\n- 内容评论与点赞\n- 收藏夹管理\n- 私信交流\n\n### 用户系统\n\n- 账号注册与登录\n- 个人资料管理\n- 内容发布与管理\n- 隐私设置\n\n## 💻 技术栈\n\n### Android 客户端\n\n- **UI 框架**：Jetpack Compose\n- **架构模式**：MVVM (Model-View-ViewModel)\n- **网络请求**：Retrofit2 + OkHttp3\n- **图片加载**：Coil + Glide\n- **视频播放**：Media3 ExoPlayer\n- **状态管理**：ViewModel + LiveData + Coroutines\n- **依赖注入**：Hilt (计划中)\n- **本地存储**：Room (计划中)\n\n### 后端服务\n\n- **运行环境**：Node.js\n- **Web 框架**：Express\n- **数据库**：MySQL\n- **ORM**：Sequelize\n- **认证**：JWT (JSON Web Token)\n- **文件上传**：Multer\n\n## 🔧 环境要求\n\n### Android 客户端\n\n- Android Studio Hedgehog | 2023.1.1 或更高版本\n- JDK 11 或更高版本\n- Android SDK 35\n- Gradle 8.4 或更高版本\n\n### 后端服务\n\n- Node.js 16+ \n- npm 或 yarn\n- MySQL 8.0+\n\n## 📦 安装指南\n\n### 后端服务设置\n\n```bash\n# 克隆仓库\ngit clone https://github.com/poboll/shenglingji.git\ncd shenglingji/shenglingji-backend\n\n# 安装依赖\nnpm install\n\n# 配置环境变量\ncp .env.example .env\n# 编辑 .env 文件设置数据库连接信息\n\n# 初始化数据库\nmysql -u root -p \u003c db/init.sql\n\n# 启动服务\nnpm start\n```\n\n### Android 客户端设置\n\n```bash\n# 克隆仓库\ngit clone https://github.com/poboll/shenglingji-android.git\ncd shenglingji-android\n\n# 使用 Android Studio 打开项目\n# File \u003e Open... \u003e 选择 shenglingji-android 目录\n\n# 等待 Gradle 同步完成\n# Android Studio 会自动下载所需依赖\n\n# 修改 API 配置\n# 打开 app/src/main/java/com/shenglingji/android/network/ApiService.kt\n# 修改 BASE_URL 为您的后端服务地址 (本地开发可使用 http://10.0.2.2:3000)\n\n# 构建并运行应用\n# 点击 Android Studio 工具栏的 Run 按钮或使用快捷键 Shift+F10\n```\n\n## 📱 应用截图\n\n### 启动与首页\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/splash_screen.png\" width=\"200\" alt=\"启动页\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/home_plants.png\" width=\"200\" alt=\"植物首页\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/home_animals.png\" width=\"200\" alt=\"动物首页\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### 知识测验\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/quiz_start.png\" width=\"200\" alt=\"测验开始\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/quiz_progress.png\" width=\"200\" alt=\"测验进行中\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### 购物与社交\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/shopping.png\" width=\"200\" alt=\"购物\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/messages.png\" width=\"200\" alt=\"消息\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/search.png\" width=\"200\" alt=\"搜索\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### 用户中心\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/profile.png\" width=\"200\" alt=\"个人中心\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/edit_profile.png\" width=\"200\" alt=\"编辑资料\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/settings.png\" width=\"200\" alt=\"设置\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### 搜索与登录\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/search_results.png\" width=\"200\" alt=\"搜索结果\"\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"public/images/screenshots/login.png\" width=\"200\" alt=\"登录\"\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 🤝 贡献指南\n\n我们欢迎所有形式的贡献，无论是新功能、bug 修复还是文档改进。\n\n1. Fork 本仓库\n2. 创建你的特性分支 (`git checkout -b feature/amazing-feature`)\n3. 提交你的更改 (`git commit -m 'add: add new features'`)\n4. 推送到分支 (`git push origin feature/amazing-feature`)\n5. 开启一个 Pull Request\n\n### 代码规范\n\n- Android 客户端遵循 [Kotlin 编码规范](https://kotlinlang.org/docs/coding-conventions.html)\n- 后端服务遵循 [Airbnb JavaScript 风格指南](https://github.com/airbnb/javascript)\n- 提交信息遵循自定义规范，格式为：`类型: 描述`（如：`add: 添加用户登录功能`）\n\n## 📄 许可证\n\n本项目采用 MIT 许可证 - 详情请参阅 [LICENSE](LICENSE) 文件\n\n## 📞 联系方式\n\n- 项目维护者：[poboll](https://github.com/poboll)\n- 项目仓库：[https://github.com/poboll/shenglingji](https://github.com/poboll/shenglingji)\n\n---\n\n\u003cp align=\"center\"\u003e用科技连接人与自然，让每一次探索都充满意义\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoboll%2Fshenglingji","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpoboll%2Fshenglingji","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoboll%2Fshenglingji/lists"}