简介
每个实验室的管理都难以避免的一个问题是实验动物信息的记录。尤其是当实验室保存的品系过多、实验室人员操作多,单纯的纸质或者excel表格难以维护,更无法解决同步和远程的问题。因此解决实验室品系记录是一个迫在眉睫的问题。
这是一个本意对应于动物品系存储数据库,但是应该也可以适用于其他的场景。您可以使用本系统来集中化的存储您需要的动物的品系信息。
品系的新增
考虑到实验室内部分品系创建过程中可能不会命名,因此我们余留了很多可以空置的字段供使用者后期再添加。唯一要求添加的就是实验室内编号。
序列号是需要从后端获取的,会自动为您寻找到一个没有利用过的从小到大的顺延号码,如果您有需求可以手动指定,序列号不可重复。
品系名是一个品系的最基础属性,不应重复,但是允许空置。
您可以添加多条简称,注释与简称类似,您也可以用同样的方法添加多条。
额外信息是为了能够方便您使用的一些键值对储存区。
基因信息是该品系中包含的基因信息的合集,其中的每一条都代表着一个基因修饰情况。
搜索与排序
支持全字段搜索(包括品系信息和基因信息全部游泳字段),且可对所选字段进行正向或逆向的排序。
使用的技术
数据库: sqlite (如果数据量大建议换成pgsql/mysql) 使用的驱动为gorm.io/driver/sqlite,故而无法交叉编译
数据库框架: gorm
web框架: gin
鉴权库: jwt-go
日志框架: logrus
编译方式
./build.bat
如果需要自己搭建前端,可以根据下方的接口文档去搭建,如果想直接用现成的,可以参考
https://github.com/sugarbecomer/biology-vue
接口文档
一:用户
1:注册
Request
| 参数 |
类型 |
必填 |
说明 |
| username |
string |
是 |
用户名 |
| password |
string |
是 |
密码 |
| time |
int |
是 |
10位数字时间戳 |
| sign |
string |
是 |
MD5(username+time+password)转大写 |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
2:登陆
Request
| 参数 |
类型 |
必填 |
说明 |
| username |
string |
是 |
用户名 |
| password |
string |
是 |
MD5(MD5(密码))转大写 |
| time |
int |
是 |
10位数字时间戳 |
| sign |
string |
是 |
MD5(username+time+password)转大写,这里的password为2次MD5后的 |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
| data |
object |
是 |
数据 |
| data.token |
string |
是 |
token |
3:修改密码(todo)
Request
| 参数 |
类型 |
必填 |
说明 |
| old_password |
string |
是 |
旧密码 |
| new_password |
string |
是 |
新密码 |
| time |
int |
是 |
10位数字时间戳 |
| sign |
string |
是 |
MD5(old_password+time+new_password)转大写 |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
二:品系
1:新增品系名
Request
| 参数 |
类型 |
必填 |
说明 |
| strain_name |
string |
否 |
品系名,可能为空 |
| number |
string |
是 |
品系序列号,序列号需要从接口获取 |
| short_name |
array(string) |
否 |
简称,一个品系可能对应多个简称 |
| annotate |
array(string) |
否 |
品系名注解, 一个品系可能对应多个注解 |
| extra |
array(object) |
否 |
品系额外信息,一个品系可能对应多个额外信息 |
| extra.extra_key |
string |
否 |
品系额外信息key |
| extra.extra_value |
string |
否 |
品系额外信息value |
| allele |
array(object) |
否 |
基因,一个品系可能对应多个基因 |
| allele.name |
string |
否 |
基因名 |
| allele.annotate |
array(string) |
否 |
基因注解,一个基因可能对应多个注解 |
| allele.genome |
string |
否 |
基因修饰情况 |
| allele.serial |
string |
否 |
对应第几条染色体,一般为罗马数字 |
| allele.extra |
array(object) |
否 |
基因的额外信息,一个基因可能对应多个额外信息 |
| allele.extra.extra_key |
string |
否 |
基因的额外信息key |
| allele.extra.extra_value |
string |
否 |
基因的额外信息value |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
2:展示品系名列表
Request
| 参数 |
类型 |
必填 |
说明 |
| page_no |
int |
否 |
查询第几页,默认1 |
| page_size |
int |
否 |
每页查询数量,默认10 |
| field |
string |
否 |
查询条件,可为空 |
| order |
string |
否 |
查询条件的降序/升序排列 desc/asc |
| key |
string |
否 |
查询关键词 |
Response
| 参数 |
类型 |
必填 |
说明 |
| page_no |
int |
是 |
第几页 |
| page_size |
int |
是 |
每页数量 |
| total |
int |
是 |
总条数 |
| data |
object |
是 |
数据 |
| data.strain_list |
array(object) |
是 |
品系列表 |
| strain_list.strain_id |
int |
是 |
品系ID |
| strain_list.name |
string |
否 |
品系名,可能为空 |
| strain_list.number |
string |
是 |
序列号,一般#开头 |
| strain_list.short_name |
array(string) |
否 |
简称,一个品系可能对应 |
| strain_list.annotate |
array(string) |
否 |
品系注解, 一个品系可能对应多个注解 |
| strain_list.extra |
array(object) |
否 |
品系的额外信息,一个品系可能对应多个额外信息 |
| strain_list.extra.extra_key |
string |
是 |
品系额外信息key |
| strain_list.extra.extra_value |
string |
是 |
品系额外信息value |
| strain_list.allele |
array(object) |
否 |
基因,一个品系可能对应多个基因,品系名可能为空 |
| allele.id |
int |
否 |
基因ID |
| allele.name |
string |
否 |
基因名 |
| allele.annotate |
array(string) |
否 |
基因注解,一个基因可能对应多个注解 |
| allele.genome |
string |
否 |
基因修饰情况 |
| allele.serial |
string |
否 |
对应第几条染色体,一般为罗马数字 |
| allele.extra |
array(object) |
否 |
基因的额外信息,一个基因可能对应多个额外信息 |
| allele.extra.extra_key |
string |
是 |
基因的额外信息key |
| allele.extra.extra_value |
string |
是 |
基因的额外信息value |
3:修改品系数据
Request
| 参数 |
类型 |
必填 |
说明 |
| id |
int |
是 |
品系ID |
| strain_name |
stri ng |
否 |
品系名,可能为空 |
| number |
string |
否 |
品系序列号 |
| short_name |
array(string) |
否 |
简称,一个品系可能对应多个简称 |
| strain_annotate |
array(string) |
否 |
品系名注解, 一个品系可能对应多个注解 |
| strain_extra |
array(object) |
否 |
品系额外信息,一个品系可能对应多个额外信息 |
| strain_extra.extra_key |
string |
是 |
品系额外信息key |
| strain_extra.extra_value |
string |
是 |
品系额外信息value |
| allele |
array(object) |
否 |
基因,一个品系可能对应多个基因 |
| allele.id |
int |
否 |
基因ID |
| allele.name |
string |
否 |
基因名 |
| allele.annotate |
array(string) |
否 |
基因注解,一个基因可能对应多个注解 |
| allele.genome |
string |
否 |
基因修饰情况 |
| allele.serial |
string |
否 |
对应第几条染色体,一般为罗马数字 |
| allele.extra |
array(object) |
否 |
基因额外信息,一个基因可能对应多个额外信息 |
| allele.extra.extra_key |
string |
是 |
基因额外信息key |
| allele.extra.extra_value |
string |
是 |
基因额外信息value |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
4:删除品系数据
Request
| 参数 |
类型 |
必填 |
说明 |
| strain_id |
int |
是 |
品系ID |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
5:获取序列号
Request
| 参数 |
类型 |
必填 |
说明 |
| time |
int |
是 |
10位时间戳 |
| sign |
string |
是 |
10位时间戳的MD5转大写 |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
| data |
object |
是 |
数据 |
| data.number |
string |
是 |
序列号 |
6:修改基因数据
Request
| 参数 |
类型 |
必填 |
说明 |
| Id |
int |
是 |
品系ID |
| allele |
array(object) |
否 |
基因,一个品系可能对应多个基因 |
| allele.id |
int |
否 |
基因ID |
| allele.name |
string |
否 |
基因名 |
| allele.annotate |
array(string) |
否 |
基因注解,一个基因可能对应多个注解 |
| allele.genome |
string |
否 |
基因修饰情况 |
| allele.serial |
string |
否 |
对应第几条染色体,一般为罗马数字 |
| allele.extra |
array(object) |
否 |
基因额外信息,一个基因可能对应多个额外信息 |
| allele.extra.extra_key |
string |
是 |
基因额外信息key |
| allele.extra.extra_val |
string |
是 |
基因额外信息value |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
7:搜索基因列表
Request
| 参数 |
类型 |
必填 |
说明 |
| name |
string |
否 |
基因名 |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
| data |
object |
是 |
基因数据 |
| data.allele |
array(object) |
否 |
基因,一个品系可能对应多个基因 |
| allele.id |
int |
否 |
基因ID |
| allele.name |
string |
否 |
基因名 |
| allele.genome |
string |
否 |
基因修饰情况 |
| allele.serial |
string |
否 |
对应第几条染色体,一般为罗马数字 |
三:基因
1:基因查询
Request
| 参数 |
类型 |
必填 |
说明 |
| page_no |
int |
否 |
查询第几页,默认1 |
| page_size |
int |
否 |
每页查询数量,默认10 |
| field |
string |
否 |
查询条件,可为空 |
| order |
string |
否 |
查询条件的降序/升序排列 desc/asc |
| key |
string |
否 |
查询关键词 |
Response
| 参数 |
类型 |
必填 |
说明 |
| page_no |
int |
是 |
第几页 |
| page_size |
int |
是 |
每页数量 |
| total |
int |
是 |
总条数 |
| data |
object |
是 |
基因数据 |
| data.allele |
array(object) |
否 |
基因,一个品系可能对应多个基因,品系名可能为空 |
| allele.id |
int |
否 |
基因ID |
| allele.name |
string |
否 |
基因名 |
| allele.annotate |
array(string) |
否 |
基因注解,一个基因可能对应多个注解 |
| allele.genome |
string |
否 |
基因修饰情况 |
| allele.serial |
string |
否 |
对应第几条染色体,一般为罗马数字 |
| extra |
array(object) |
否 |
基因的额外信息,一个基因可能对应多个额外信息 |
| extra.extra_key |
string |
是 |
基因的额外信息key |
| extra.extra_value |
string |
是 |
基因的额外信息value |
2:新增基因
Request
| 参数 |
类型 |
必填 |
说明 |
| name |
string |
否 |
基因名 |
| annotate |
array(string) |
否 |
基因注解,一个基因可能对应多个注解 |
| genome |
string |
否 |
基因修饰情况 |
| serial |
string |
否 |
对应第几条染色体,一般为罗马数字 |
| extra |
array(object) |
否 |
基因的额外信息,一个基因可能对应多个额外信息 |
| extra.extra_key |
string |
是 |
基因的额外信息key |
| extra.extra_value |
string |
是 |
基因的额外信息value |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
3:修改基因
Request
| 参数 |
类型 |
必填 |
说明 |
| id |
int |
是 |
基因ID |
| name |
string |
否 |
基因名 |
| annotate |
array(string) |
否 |
基因注解,一个基因可能对应多个注解 |
| genome |
string |
否 |
基因修饰情况 |
| serial |
string |
否 |
对应第几条染色体,一般为罗马数字 |
| extra |
array(object) |
否 |
基因的额外信息,一个基因可能对应多个额外信息 |
| extra.extra_key |
string |
是 |
基因的额外信息key |
| extra.extra_value |
string |
是 |
基因的额外信息value |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
4:删除基因
Request
| 参数 |
类型 |
必填 |
说明 |
| id |
int |
是 |
基因ID |
Response
| 参数 |
类型 |
必填 |
说明 |
| code |
int |
是 |
200为成功,其他为失败 |
| message |
string |
是 |
消息内容 |
鸣谢
感谢 JetBrains 提供的 free JetBrains Open Source license
