# Film Server

## 简介

- server 是本项目的后端项目
- 主要用于提供前端项目需要的 API数据接口, 以及数据搜集和更新
- 实现思路 : 
  - 使用 gocolly 获取公开的影视资源, 
  - 将请求数据通过程序处理整合成统一格式后使用redis进行暂存
  - 使用 mysql 存储收录的影片的检索信息, 用于影片检索, 分类
  - 使用 gin 作为web服务, 提供相应api接口
- 项目依赖

```go
# gin web服务框架, 用于处理与前端工程的交互
github.com/gin-gonic/gin v1.9.0
# gocolly go语言爬虫框架, 用于搜集公共影视资源
github.com/gocolly/colly/v2 v2.1.0
# go-redis redis交互程序
github.com/redis/go-redis/v9 v9.0.2
# gorm 用于处理与mysql数据库的交互
gorm.io/gorm v1.24.6
gorm.io/driver/mysql v1.4.7
```



## 项目结构

> 项目主要目录结构

- config				用于存放项目中使用的配置信息和静态常量
- controller	      请求处理控制器
- logic                请求处理逻辑实现
- model              数据模型结构体以及与数据库交互
- plugin              项目所需的插件工具集合
  - common     公共依赖
  - db              数据库配置信息
  - spider         gocolly配置, 执行逻辑, 数据前置处理等

```text
server                       
├─ config                    
│  └─ DataConfig.go          
├─ controller                
│  ├─ IndexController.go     
│  └─ SpiderController.go    
├─ logic                     
│  └─ IndexLogic.go          
├─ model                     
│  ├─ Categories.go          
│  ├─ LZJson.go              
│  ├─ Movies.go              
│  └─ Search.go              
├─ plugin                    
│  ├─ common                 
│  │  ├─ JsonUtils.go        
│  │  ├─ ProcessCategory.go  
│  │  └─ ProcessMovies.go    
│  ├─ db                     
│  │  ├─ mysql.go            
│  │  └─ redis.go            
│  └─ spider                 
│     ├─ Spider.go           
│     ├─ SpiderCron.go       
│     └─ SpiderRequest.go    
├─ router                    
│  └─ router.go              
├─ go.mod                    
├─ go.sum                    
├─ main.go                   
└─ README.md                 
```



## 启动方式

### 本地运行

1.  修改 /server/plugin/db 目录下的 mysql.go 和 redis.go 中的连接地址和用户名密码
2. 在 server 目录下执行 `go run main.go`





## 数据库信息简介

#### 1.Mysql  

> 连接信息(以docker compose部署为例) :

```yaml
 mysql:
 	ip: 部署的服务器IP
    port: 3610
    username: root
    password: root
    database: FilmSite
```

> 数据库结构

- 数据库: FilmSite
  - 数据表 search

> search 表 (用于记录影片的相关检索信息, 主要用于影片的 搜索, 分类, 排序 等)

| 字段名称     | 类型     | 字段释义               |
| ------------ | -------- | ---------------------- |
| id           | bigint   | 自增主键               |
| created_at   | datetime | 记录创建时间           |
| updated_at   | datetime | 记录更新时间           |
| deleted_at   | datetime | 逻辑删除字段           |
| mid          | bigint   | 影片ID                 |
| cid          | bigint   | 二级分类ID             |
| pid          | bigint   | 一级分类ID             |
| name         | varchar  | 影片名称               |
| sub_title    | varchar  | 子标题(影片别名)       |
| c_name       | varchar  | 分类名称               |
| class_tag    | varchar  | 剧情标签               |
| area         | varchar  | 地区                   |
| language     | varchar  | 语言                   |
| year         | bigint   | 上映年份               |
| initial      | varchar  | 首字母                 |
| score        | double   | 豆瓣评分               |
| update_stamp | bigint   | 影片更新时间戳         |
| hits         | bigint   | 热度(播放次数)         |
| state        | varchar  | 状态(正片)             |
| remarks      | varchar  | 更新状态(完结 \| xx集) |
| release_data | bigint   | 上映时间戳             |





#### 2.Redis

> 连接信息(以docker compose部署为例) : 

```yaml
  ## 部署时默认使用如下信息
  redis:
  	ip: 部署的服务器IP
    port: 3620
    password: root
    DB: 0  ##使用的redis数据库为0号库
```

