| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- package tcb
- import (
- "fmt"
- "github.com/silenceper/wechat/util"
- )
- const (
- //数据库导入
- databaseMigrateImportURL = "https://api.weixin.qq.com/tcb/databasemigrateimport"
- //数据库导出
- databaseMigrateExportURL = "https://api.weixin.qq.com/tcb/databasemigrateexport"
- //数据库迁移状态查询
- databaseMigrateQueryInfoURL = "https://api.weixin.qq.com/tcb/databasemigratequeryinfo"
- //变更数据库索引
- updateIndexURL = "https://api.weixin.qq.com/tcb/updateindex"
- //新增集合
- databaseCollectionAddURL = "https://api.weixin.qq.com/tcb/databasecollectionadd"
- //删除集合
- databaseCollectionDeleteURL = "https://api.weixin.qq.com/tcb/databasecollectiondelete"
- //获取特定云环境下集合信息
- databaseCollectionGetURL = "https://api.weixin.qq.com/tcb/databasecollectionget"
- //数据库插入记录
- databaseAddURL = "https://api.weixin.qq.com/tcb/databaseadd"
- //数据库删除记录
- databaseDeleteURL = "https://api.weixin.qq.com/tcb/databasedelete"
- //数据库更新记录
- databaseUpdateURL = "https://api.weixin.qq.com/tcb/databaseupdate"
- //数据库查询记录
- databaseQueryURL = "https://api.weixin.qq.com/tcb/databasequery"
- //统计集合记录数或统计查询语句对应的结果记录数
- databaseCountURL = "https://api.weixin.qq.com/tcb/databasecount"
- //ConflictModeInster 冲突处理模式 插入
- ConflictModeInster ConflictMode = 1
- //ConflictModeUpsert 冲突处理模式 更新
- ConflictModeUpsert ConflictMode = 2
- //FileTypeJSON 的合法值 json
- FileTypeJSON FileType = 1
- //FileTypeCsv 的合法值 csv
- FileTypeCsv FileType = 2
- )
- //ConflictMode 冲突处理模式
- type ConflictMode int
- //FileType 文件上传和导出的允许文件类型
- type FileType int
- //ValidDirections 合法的direction值
- var ValidDirections = []string{"1", "-1", "2dsphere"}
- //DatabaseMigrateExportReq 数据库出 请求参数
- type DatabaseMigrateExportReq struct {
- Env string `json:"env,omitempty"` //云环境ID
- FilePath string `json:"file_path,omitempty"` //导出文件路径(导入文件需先上传到同环境的存储中,可使用开发者工具或 HTTP API的上传文件 API上传)
- FileType FileType `json:"file_type,omitempty"` //导出文件类型,文件格式参考数据库导入指引中的文件格式部分 1:json 2:csv
- Query string `json:"query,omitempty"` //导出条件
- }
- //DatabaseMigrateExportRes 数据库导出 返回结果
- type DatabaseMigrateExportRes struct {
- util.CommonError
- JobID int64 `json:"job_id"` //导出任务ID,可使用数据库迁移进度查询 API 查询导入进度及结果
- }
- //DatabaseMigrateImportReq 数据库导入 请求参数
- type DatabaseMigrateImportReq struct {
- Env string `json:"env,omitempty"` //云环境ID
- CollectionName string `json:"collection_name,omitempty"` //集合名称
- FilePath string `json:"file_path,omitempty"` //导出文件路径(文件会导出到同环境的云存储中,可使用获取下载链接 API 获取下载链接)
- FileType FileType `json:"file_type,omitempty"` //导入文件类型,文件格式参考数据库导入指引中的文件格式部分 1:json 2:csv
- StopOnError bool `json:"stop_on_error,omitempty"` //是否在遇到错误时停止导入
- ConflictMode ConflictMode `json:"conflict_mode,omitempty"` //冲突处理模式 1:inster 2:UPSERT
- }
- //DatabaseMigrateImportRes 数据库导入 返回结果
- type DatabaseMigrateImportRes struct {
- util.CommonError
- JobID int64 `json:"job_id"` //导入任务ID,可使用数据库迁移进度查询 API 查询导入进度及结果
- }
- //DatabaseMigrateQueryInfoRes 数据库迁移状态查询
- type DatabaseMigrateQueryInfoRes struct {
- util.CommonError
- Status string `json:"status"` //导出状态
- RecordSuccess int64 `json:"record_success"` //导出成功记录数
- RecordFail int64 `json:"record_fail"` //导出失败记录数
- ErrMsg string `json:"err_msg"` //导出错误信息
- FileURL string `json:"file_url"` //导出文件下载地址
- }
- //UpdateIndexReq 变更数据库索引 请求参数
- type UpdateIndexReq struct {
- Env string `json:"env,omitempty"` //云环境ID
- CollectionName string `json:"collection_name,omitempty"` //集合名称
- CreateIndexes []CreateIndex `json:"create_indexes,omitempty"` //新增索引
- DropIndexes []DropIndex `json:"drop_indexes,omitempty"` //删除索引
- }
- //CreateIndex 新增索引
- type CreateIndex struct {
- Name string `json:"name,omitempty"` //索引名
- Unique bool `json:"unique,omitempty"` //是否唯一
- Keys []CreateIndexKey `json:"keys,omitempty"` //索引字段
- }
- //CreateIndexKey create index key
- type CreateIndexKey struct {
- Name string `json:"name,omitempty"` //字段名
- Direction string `json:"direction,omitempty"` //字段排序
- }
- //DropIndex 删除索引
- type DropIndex struct {
- Name string `json:"name,omitempty"`
- }
- //DatabaseCollectionReq 新增/删除集合请求参数
- type DatabaseCollectionReq struct {
- Env string `json:"env,omitempty"` //云环境ID
- CollectionName string `json:"collection_name,omitempty"` //集合名称
- }
- //DatabaseCollectionGetReq 获取特定云环境下集合信息请求
- type DatabaseCollectionGetReq struct {
- Env string `json:"env,omitempty"` //云环境ID
- Limit int64 `json:"limit,omitempty"` //获取数量限制
- Offset int64 `json:"offset,omitempty"` //偏移量
- }
- //DatabaseCollectionGetRes 获取特定云环境下集合信息结果
- type DatabaseCollectionGetRes struct {
- util.CommonError
- Pager struct {
- Limit int64 `json:"limit"` //单次查询限制
- Offset int64 `json:"offset"` //偏移量
- Total int64 `json:"total"` //符合查询条件的记录总数
- } `json:"pager"`
- Collections []struct {
- Name string `json:"name"` //集合名
- Count int64 `json:"count"` //表中文档数量
- Size int64 `json:"size"` //表的大小(即表中文档总大小),单位:字节
- IndexCount int64 `json:"index_count"` //索引数量
- IndexSize int64 `json:"index_size"` //索引占用大小,单位:字节
- } `json:"collections"`
- }
- //DatabaseReq 数据库插入/删除/更新/查询/统计记录请求参数
- type DatabaseReq struct {
- Env string `json:"env,omitempty"` //云环境ID
- Query string `json:"query,omitempty"` //数据库操作语句
- }
- //DatabaseAddRes 数据库插入记录返回结果
- type DatabaseAddRes struct {
- util.CommonError
- IDList []string `json:"id_list"` //插入成功的数据集合主键_id。
- }
- //DatabaseDeleteRes 数据库删除记录返回结果
- type DatabaseDeleteRes struct {
- util.CommonError
- Deleted int64 `json:"deleted"` //删除记录数量
- }
- //DatabaseUpdateRes 数据库更新记录返回结果
- type DatabaseUpdateRes struct {
- util.CommonError
- Matched int64 `json:"matched"` //更新条件匹配到的结果数
- Modified int64 `json:"modified"` //修改的记录数,注意:使用set操作新插入的数据不计入修改数目
- ID string `json:"id"`
- }
- //DatabaseQueryRes 数据库查询记录 返回结果
- type DatabaseQueryRes struct {
- util.CommonError
- Pager struct {
- Limit int64 `json:"limit"` //单次查询限制
- Offset int64 `json:"offset"` //偏移量
- Total int64 `json:"total"` //符合查询条件的记录总数
- } `json:"pager"`
- Data []string `json:"data"`
- }
- //DatabaseCountRes 统计集合记录数或统计查询语句对应的结果记录数 返回结果
- type DatabaseCountRes struct {
- util.CommonError
- Count int64 `json:"count"` //记录数量
- }
- //DatabaseMigrateImport 数据库导入
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseMigrateImport.html
- func (tcb *Tcb) DatabaseMigrateImport(req *DatabaseMigrateImportReq) (*DatabaseMigrateImportRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseMigrateImportURL, accessToken)
- response, err := util.PostJSON(uri, req)
- if err != nil {
- return nil, err
- }
- databaseMigrateImportRes := &DatabaseMigrateImportRes{}
- err = util.DecodeWithError(response, databaseMigrateImportRes, "DatabaseMigrateImport")
- return databaseMigrateImportRes, err
- }
- //DatabaseMigrateExport 数据库导出
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseMigrateExport.html
- func (tcb *Tcb) DatabaseMigrateExport(req *DatabaseMigrateExportReq) (*DatabaseMigrateExportRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseMigrateExportURL, accessToken)
- response, err := util.PostJSON(uri, req)
- if err != nil {
- return nil, err
- }
- databaseMigrateExportRes := &DatabaseMigrateExportRes{}
- err = util.DecodeWithError(response, databaseMigrateExportRes, "DatabaseMigrateExport")
- return databaseMigrateExportRes, err
- }
- //DatabaseMigrateQueryInfo 数据库迁移状态查询
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseMigrateQueryInfo.html
- func (tcb *Tcb) DatabaseMigrateQueryInfo(env string, jobID int64) (*DatabaseMigrateQueryInfoRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseMigrateQueryInfoURL, accessToken)
- response, err := util.PostJSON(uri, map[string]interface{}{
- "env": env,
- "job_id": jobID,
- })
- if err != nil {
- return nil, err
- }
- databaseMigrateQueryInfoRes := &DatabaseMigrateQueryInfoRes{}
- err = util.DecodeWithError(response, databaseMigrateQueryInfoRes, "DatabaseMigrateQueryInfo")
- return databaseMigrateQueryInfoRes, err
- }
- //UpdateIndex 变更数据库索引
- //https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/updateIndex.html
- func (tcb *Tcb) UpdateIndex(req *UpdateIndexReq) error {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return err
- }
- uri := fmt.Sprintf("%s?access_token=%s", updateIndexURL, accessToken)
- response, err := util.PostJSON(uri, req)
- if err != nil {
- return err
- }
- return util.DecodeWithCommonError(response, "UpdateIndex")
- }
- //DatabaseCollectionAdd 新增集合
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionAdd.html
- func (tcb *Tcb) DatabaseCollectionAdd(env, collectionName string) error {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseCollectionAddURL, accessToken)
- response, err := util.PostJSON(uri, &DatabaseCollectionReq{
- Env: env,
- CollectionName: collectionName,
- })
- if err != nil {
- return err
- }
- return util.DecodeWithCommonError(response, "DatabaseCollectionAdd")
- }
- //DatabaseCollectionDelete 删除集合
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionDelete.html
- func (tcb *Tcb) DatabaseCollectionDelete(env, collectionName string) error {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseCollectionDeleteURL, accessToken)
- response, err := util.PostJSON(uri, &DatabaseCollectionReq{
- Env: env,
- CollectionName: collectionName,
- })
- if err != nil {
- return err
- }
- return util.DecodeWithCommonError(response, "DatabaseCollectionDelete")
- }
- //DatabaseCollectionGet 获取特定云环境下集合信息
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionGet.html
- func (tcb *Tcb) DatabaseCollectionGet(env string, limit, offset int64) (*DatabaseCollectionGetRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseCollectionGetURL, accessToken)
- response, err := util.PostJSON(uri, &DatabaseCollectionGetReq{
- Env: env,
- Limit: limit,
- Offset: offset,
- })
- if err != nil {
- return nil, err
- }
- databaseCollectionGetRes := &DatabaseCollectionGetRes{}
- err = util.DecodeWithError(response, databaseCollectionGetRes, "DatabaseCollectionGet")
- return databaseCollectionGetRes, err
- }
- //DatabaseAdd 数据库插入记录
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseAdd.html
- func (tcb *Tcb) DatabaseAdd(env, query string) (*DatabaseAddRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseAddURL, accessToken)
- response, err := util.PostJSON(uri, &DatabaseReq{
- Env: env,
- Query: query,
- })
- if err != nil {
- return nil, err
- }
- databaseAddRes := &DatabaseAddRes{}
- err = util.DecodeWithError(response, databaseAddRes, "DatabaseAdd")
- return databaseAddRes, err
- }
- //DatabaseDelete 数据库插入记录
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseDelete.html
- func (tcb *Tcb) DatabaseDelete(env, query string) (*DatabaseDeleteRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseDeleteURL, accessToken)
- response, err := util.PostJSON(uri, &DatabaseReq{
- Env: env,
- Query: query,
- })
- if err != nil {
- return nil, err
- }
- databaseDeleteRes := &DatabaseDeleteRes{}
- err = util.DecodeWithError(response, databaseDeleteRes, "DatabaseDelete")
- return databaseDeleteRes, err
- }
- //DatabaseUpdate 数据库插入记录
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseUpdate.html
- func (tcb *Tcb) DatabaseUpdate(env, query string) (*DatabaseUpdateRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseUpdateURL, accessToken)
- response, err := util.PostJSON(uri, &DatabaseReq{
- Env: env,
- Query: query,
- })
- if err != nil {
- return nil, err
- }
- databaseUpdateRes := &DatabaseUpdateRes{}
- err = util.DecodeWithError(response, databaseUpdateRes, "DatabaseUpdate")
- return databaseUpdateRes, err
- }
- //DatabaseQuery 数据库查询记录
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseQuery.html
- func (tcb *Tcb) DatabaseQuery(env, query string) (*DatabaseQueryRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseQueryURL, accessToken)
- response, err := util.PostJSON(uri, &DatabaseReq{
- Env: env,
- Query: query,
- })
- if err != nil {
- return nil, err
- }
- databaseQueryRes := &DatabaseQueryRes{}
- err = util.DecodeWithError(response, databaseQueryRes, "DatabaseQuery")
- return databaseQueryRes, err
- }
- //DatabaseCount 统计集合记录数或统计查询语句对应的结果记录数
- //reference:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCount.html
- func (tcb *Tcb) DatabaseCount(env, query string) (*DatabaseCountRes, error) {
- accessToken, err := tcb.GetAccessToken()
- if err != nil {
- return nil, err
- }
- uri := fmt.Sprintf("%s?access_token=%s", databaseCountURL, accessToken)
- response, err := util.PostJSON(uri, &DatabaseReq{
- Env: env,
- Query: query,
- })
- if err != nil {
- return nil, err
- }
- databaseCountRes := &DatabaseCountRes{}
- err = util.DecodeWithError(response, databaseCountRes, "DatabaseCount")
- return databaseCountRes, err
- }
|