# Showlist 设计
[Showlist 优化需求 1.0 PRD](https://bp-doc.atcloudbox.com/s/hC8CESC1z)
[Showlist 需求 PRD](https://bp-doc.atcloudbox.com/IOLv9dn5SsCQmFhOxXrdsA)
- 在 Console 配置和管理生成 showlist 的规则
- 在 BytePower 根据规则生成 showlist,并提供 get showlist 的接口
## 存储
### showlist
数据存储在 redis 或 room,hash 类型
**key**:app_id:showlist:#showlist_name#
**value**: list 类型,每一项是一个 json 结构,其中字段包含:
- title
- text
- subtext
- image(图片的 url)
- avatar(头像的 url)
- created
例如:
```
{
"title": "好消息!好消息!",
"text": "张三 提现了 5 元。",
"subtext": "最终解释权归汉迪所有",
"image": "s3://XXX",
"avatar": "s3://XXX",
"created": "2021-04-18 18:10:10"
}
```
生成的新数据插入到 list 的尾部,当长度超过规则定义的`list_size`时,移除头部的数据,保持 list 长度不大于`list_size`
key 长期有效
用户的图片和头像放到 S3,请求量大时考虑 CDN
### 用户信息
从网上搜集的用户信息,模拟真实的用户,存储在数据库
```
create table if not exists fake_user
(
fake_user_id int not null constraint fake_user_fake_user_id primary key,
user_name varchar,
user_name_en varchar,
real_name varchar,
real_name_en varchar,
phone_number varchar,
email varchar,
image varchar,
avatar varchar
);
```
## 接口
### 根据 showlist 名称获取列表
for client: GET bp/showlist/{showlist_name}?limit=N
for server: GET bp/server/showlist/{showlist_name}?limit=N
Response:
```
{
"showlist": [
{
"title": "好消息!好消息!",
"text": "张三 提现了 5 元。",
"subtext": "最终解释权归汉迪所有",
"image": "s3://XXX",
"avatar": "s3://XXX",
"created": "2021-04-18 10:10:10"
},
{
"title": "好消息!好消息!",
"text": "李四 提现了 1 元。",
"subtext": "最终解释权归汉迪所有",
"image": "s3://XXX",
"avatar": "s3://XXX",
"created": "2021-04-18 10:31:06"
}
],
"max_count": 200,
"available_count": 120, //现有已生成的数据总数
"result_count": 100 //接口调用限制 limit,未限制默认1000
}
```
### 获取特定条件的 list
for client: POST bp/showlist/{showlist_name}?limit=N
for server: POST bp/server/showlist/{showlist_name}?limit=N
request:
```
{
"title": ["测试 1","测试 2"],
"text": ["UHJ778NNN"],
"subtext": ["好消息"]
}
```
将查询结果保存在 redis,失效时间与 showlist 生成的间隔一致,避免缓存无效数据。
**key**:app_id:showlist:#showlist_name#:#condition_id#
**value**: list 类型,每一项是一个 json 结构,其中字段包含:
- title
- text
- subtext
- image(图片的 url)
- avatar(头像的 url)
- created
将查询条件和结果的 redis key 保存在数据库。
showlist_search
```
CREATE TABLE showlist_search_result (
id SERIAL NOT NULL PRIMARY KEY,
app_id VARCHAR,
showlist_name VARCHAR,
condition_id VARCHAR,
count INTEGER,
sys_created_time TIMESTAMP WITH TIME ZONE
);
```