# ktap
**Repository Path**: ruislan/ktap
## Basic Information
- **Project Name**: ktap
- **Description**: 一个时尚的游戏社区平台。前后端分离,前端采用ReactJS、BaseWeb。后端采用Fastify、Prisma、MySQL。
- **Primary Language**: JavaScript
- **License**: AGPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-05-31
- **Last Updated**: 2024-03-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# KTap
KTap是一个时尚的游戏社区平台。
## 截图
注意:截图可能落后于最新的。
这里弄了一个 [DEMO](https://ktap.ruislan.com),可以快速预览和玩起来。(最低云配置,请轻一点~,同时可能会不定时清理数据)。
## 功能列表
* 用户:注册、登录、个人中心、动态、成就等。
* 游戏:评测、回复、礼物、赞踩、新闻等。
* 讨论:发帖、回帖、改贴、删帖、礼物、赞踩、置顶、锁帖(开锁)、举报等。
* 运营后台管理:用户、游戏、评测、讨论、标签等等。
* 其他:探索、排行榜、搜索、通知等等。
## 快速开始
### 环境设置
下载代码之后,首先修改.env.example,将其改为.env,然后按照自己的需要修改.env中的内容,以“MAILER_”开头的为邮件服务,你需要查询你的邮件供应商的配置,然后配置到.env文件中,发送邮件的lib是nodemailer,你也可以查看其文档来做一个深入了解。开发时默认用的是outlook,你也可以临时申请一个新的邮箱,不配置也行,就是找回密码功能不能使用。
### 手动启动
首先启动mysql服务,然后启动服务端ktap-server,进入目录后输入以下指令启动:
```bash
cd ktap-server
pnpm install
pnpm prisma db push
pnpm seed:dev
pnpm dev
```
关于 Seed :
* 通过命令"pnpm seed:dev" 进行数据初始化。将初始化少量数据,但是涵盖了几乎所有用到的场景,例如用户、游戏、评测、回复、标签、礼物等等等等。可以用于开发和测试功能。
* 通过命令"pnpm seed:steam" 进行数据初始化,将初始化的内容包括基础数据和用户以及gameList中所有的steam游戏(通过steam api下载),并且在服务启动后,通过/admin-panel,在管理站点,在用户、评测、回复等管理页面下,可以看到一个🚀的按钮,点击即可进行疯狂的数据生成,首先可以生成几十万用户,然后选择几个用户生成几十万个评测,再生成上百万个回复。这样网站看起来就生机勃勃,可以用于各种玩耍。
注意:seed:steam 会清空数据库并重新初始化。
ktap-ui-web为前端代码,进入目录后输入以下指令启动:
```bash
cd ktap-ui-web
pnpm install
pnpm dev
```
完成后访问 [http://localhost:5173](http://localhost:5173)即可开始探索之旅。登录用户和密码可以在seed.js文件中查看。
### Docker启动
可直接采用docker-compose快速启动。
```bash
docker-compose up -d
```
### 跨域问题
默认是在同origin下,在开发环境下,采用了proxy方式。如果要分开部署(例如:api.example.com和example.com)请自行修改代码(注意cookie跨域)。
## 环境与工具
* Language: NodeJS v20
* Web Framework: Fastify
* Front Framework: ReactJS
* Styling: BaseWeb UI
* Database: SQLite/MySQL
* ORM: Prisma
* Other Libs:
* day-fns: date helper
* photoswipe: explore and scale images
* swiper
* tiptap: amazing editor
* sanitize-html
* nodejieba: 中文分词
* nodemailer: email helper
* node-cache: simple cache
* node-cron: simple schedule
从 v1.5.0 版本开始,数据库使用 MySQL ,并不再支持 SQLite。 MySQL 和 SQLite有许多不同之处。 所以v1.5.0之后的版本将不兼容前续版本。
SQLite仅仅作为开发、演示、本地存储和个人Play是非常非常棒的,效率高、性能好。
## 接下来
接下来可能会研发的功能...
* [规划] 使用其他的 UI 替换掉当前的 BaseWeb
* [规划] 增加 App 活动事件(线上或者线下活动)
* [规划] 增加搜索引擎,改进搜索、相关性算法
* [规划] 增加组织管理(组织所有人自己管理自己的组织)
* [规划] 增加专题专栏(例如节日专题,打折专题,新品专题等等)
* [想法] 使用 React-Query 重构整个前端体系
* [想法] 增加商城和充值(余额购买虚拟或者实体商品)
## 致敬
感谢以下几个网站给我的灵感,向你们致敬。
* [Taptap](https://taptap.cn/)
* [Steam](https://store.steampowered.com/)
* [Epic Games](https://store.epicgames.com/zh-CN/)
* [IGDB](https://igdb.com/)