gobase

package module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 14, 2021 License: Apache-2.0 Imports: 20 Imported by: 0

README

gobase

微服务api便捷开发库,进行model操作时mysql model可进行模糊化处理——不用除特定模型结构数据即可实现相关功能。

比如:获取(文章/书籍/视频)详情功能,只需要调用 (&gobase.ModelParam{}.Detail() 即可直接获取查询结果

功能

  • 模型数据基础操作
  • 统一模型数据基础操作
  • 日志功能
  • 配置功能
  • 参数校验器功能
  • 响应格式固定
  • 异常状态码

版本进度

v1.0.0
  • 日志/配置/响应格式/参数校验器/状态码
  • 基于gorm v1实现基础model封装处理
  • model统一模型有误【不可用】
v1.0.1
  • 实现model统一模型功能

快速使用

  • 日志

    默认log dir ./logfiles/

    • 自定义

      gobase.LogSet(LogPath,defaultField)
      // LogPath为设置的日志目录 日志文件名(20210101.log) 
      // defaultField为日志记录默认字段 key(默认键名) value(默认值)成对出现
      
      // 示例
      gobase.LogSet("./logs","name","gobase","time","today")
      // 日志文件记录格式
      {
      	"level": "error",
      	"time": "2021-01-11 11:10:05",
      	"source": "gobase/log.go:88",
      	"msg": "我错了~~~",
      	"name": "gobase",
      	"time": "today",
      	"检讨人": "张三",
      	"检讨时间": "2021 01 11 周一"
      }
      // 日志控制台输出格式
      2021-01-11 11:10:05     error   gobase/log.go:88        我错了~~~       {"name": "gobase", "time": "today", "检讨人": "张三", "检讨时间": "2021 01 11 周一"}
      
  • 配置

    默认 目录:"./" 名称:conf.yaml

    • 自定义

      gobase.ConfSet(name,dir)
      // name 文件名称
      // dir 文件所在目录
      
      // 示例
      gobase.ConfSet("conf","./")
      
      /*
      注1:若需加载远程配置只须在配置文件中 增加此配置:confremote: "http://www.domain.com"
      注2:已自动加载环境变量值
      注3:环境变量配置值优先级高于远程配置,远程配置优先级高于本地配置
      */
      
  • 参数校验器

    // tag标签标记
    type RestrictParam struct {
    	Id      string `validate:"isUUID"`
    	Organid string `validate:"isUUID"`
    	Type    string
    }
    
    // 应用
    param := RestrictParam{
    		Id:      c.DefaultQuery("id", "null"),
    		Organid: c.GetHeader("organid"),
    	}
    gobase.ValidateFilter(param)
    
    // 结果
    {
    	"errmsg": {
    		"id": "id:002a33bb-0c20-4c09-9139-dd27bd7f3d012不符合isUUID规范"
    	}
    }
    
  • 响应

    (&gobase.General{
    		Data: data,
    	}).General("path", err, gobase.ResourceErr)
    
    // 响应
    {
    	"data": {
    		"id": "002a33bb-0c20-4c09-9139-dd27bd7f3d01",
    		"file_type": "1",
    		"storage": "external",
    		"used": 0,
    		"upload_id": "1",
    		"url": "rrrr",
    		"create_time": 1,
    		"update_time": 1
    	},
    	"status_code": 1,
    	"meta": {
    		"type": "item",
    		"uri": "/v1/ue/file",
    		"server_name": "Gobase"
    	}
    }
    
  • 状态码

  • 基础模型

    detail := CmsFile{}
    	err = (&gobase.MysqlModels{
    		Request:  &CmsFile{Id: this.Id},
    		Response: &detail,
    	}).Init().Sel([]string{"id", "storage", "url"}, nil).Detail().Err
    
    detail := CmsFile{}
    	err = (&gobase.MysqlModels{
    		Request:  &CmsFile{},
    		Response: &detail,
    	}).Init().Sel([]string{"id", "storage", "url"}, nil).Filter("id", this.Id).Detail().Err
    	return detail, err
    
  • 统一模型

    // 需要先将模型注册
    models := map[string]interface{}{
    "cms_file":             &CmsFile{},
    "cms_image":            &CmsImage{},
    "cms_image_classify":   &CmsImageClassify{},
    "cms_article":          &CmsArticle{},
    "cms_article_classify": &CmsArticleClassify{},
    }
    tables := []interface{}{}
    for k := range models {
    tables = append(tables, models[k])
    }
    gobase.InitMysqlTables(tables...)	// 初始化数据库模型
    gobase.ModelsRegister(models)		// 注册模型
    
    data, err = (&gobase.ModelParam{
    		Type:  "cms_file",
    		Param: CmsFile{Id: this.Id},
    		//Sel:   []string{"id"},
    		Not: []string{"create_time", "update_time"},
    	}).Detail()
    
    data, err = (&gobase.ModelParam{
    		Type:   "cms_file",
    		Filter: map[string][]string{"id": {this.Id}},
    	}).Detail()
    

Documentation

Overview

通用方法

基于viper封装处理 暂时只支持yaml类型

基于zap封装构造

通用模型操作

数据库/缓存Redis等封装处理

设定统一的数据返回格式

Index

Constants

View Source
const (
	UnknowError = 999

	HealthErr   = 10000
	AgentUrlErr = 10001

	TokenExpired        = 10101
	TokenMalformed      = 10102
	TokenInvalid        = 10103
	TokenNotValidYet    = 10104
	TokenNotFound       = 10105
	TokenAuthError      = 10106
	TokenRefreshError   = 10107
	TokenTimeOverError  = 10108
	TokenSignatureError = 10109
	TokenAgentUrlErr    = 10110

	ResourceErr           = 20000
	ResourceAddErr        = 20001
	ResourceAmendErr      = 20002
	ResourceAddOrAmendErr = 20003
	ResourceDelErr        = 20004
	ResourceNotFoundErr   = 20005

	ParamErr         = 20100
	ParamMissErr     = 20101
	ParamValidateErr = 20102
	PhoneCodeErr     = 20103
	LoginErr         = 20104

	WechatErr             = 20200
	WechatNotFoundErr     = 20201
	WechatMiniNotFoundErr = 20202
	WechatCodeInvalidErr  = 20203
	WechatUserNotFoundErr = 20204
	WechatBindErr         = 20205

	OrganInvalidErr = 20400
	OrganAuthError  = 20401
)

[1][00][00] 示例 10105 系统内置错误 1-错误级别 01-业务级别 05-错误编号 [00] 通用 [01] 令牌(token) [02] [03] [04] [05]

[2][00][00] 服务响应错误 [00] 通用 [01] 数据格式(包含参数、值) [02] 微信 [03] 短信 [04] 机构 [05]

Variables

View Source
var StatusText = map[int]string{

	UnknowError: "未知错误",

	HealthErr: "健康检测未通过",

	TokenExpired:        "token过期",
	TokenMalformed:      "token非法",
	TokenInvalid:        "token无效",
	TokenNotValidYet:    "token错误",
	TokenNotFound:       "token不存在",
	TokenAuthError:      "token权限错误",
	TokenRefreshError:   "refresh token非法",
	TokenTimeOverError:  "token失效",
	TokenSignatureError: "解析token签名错误",
	TokenAgentUrlErr:    "无效的agent地址",

	ResourceErr:           "资源操作有误",
	ResourceAddErr:        "资源新增错误",
	ResourceAmendErr:      "资源修改错误",
	ResourceAddOrAmendErr: "资源新增或者修改有误",
	ResourceDelErr:        "资源删除错误",
	ResourceNotFoundErr:   "资源未查询到",

	ParamErr:         "参数不符合规范",
	ParamMissErr:     "参数缺失",
	ParamValidateErr: "参数验证不符合规范",
	PhoneCodeErr:     "手机号验证码无效",
	LoginErr:         "用户名或者密码错误",

	WechatErr:             "微信操作有误",
	WechatNotFoundErr:     "微信公众号不存在",
	WechatMiniNotFoundErr: "微信小程序不存在",
	WechatCodeInvalidErr:  "微信code无效",
	WechatUserNotFoundErr: "微信用户不存在",
	WechatBindErr:         "微信号用户绑定手机号失败",

	OrganInvalidErr: "无效机构/不存在改机构",
	OrganAuthError:  "该机构无权操作",
}

Functions

func BodyParamToJson added in v1.0.2

func BodyParamToJson(param interface{}, body io.Reader)

body-json数据格式化

func Conf

func Conf() *viper.Viper

func ConfSet

func ConfSet(name, dir string)

func HttpDo

func HttpDo(method, url string, param interface{}) (data []byte)

远程调用http处理

func InitMysqlTables

func InitMysqlTables(tables ...interface{})

初始化表结构

func IsUUId

func IsUUId(id string) bool

判断是否是uuid

func LogError

func LogError(errmsg string, others ...interface{})

错误级别会输出至控制台与文件

func LogInfo

func LogInfo(errmsg string, others ...interface{})

记录信息 仅记录于文件中

func LogSet

func LogSet(LogPath string, defaultField ...interface{})

设置日志配置 日志目录 默认日志字段

func ModelsRegister

func ModelsRegister(m map[string]interface{})

模型注册

func MysqlSet

func MysqlSet(connection, databasename string)

配置连接dsn

func NewUUID

func NewUUID() string

uuid生成

func StringsDuplicate

func StringsDuplicate(ori, fil []string) (res []string)

获取集合中值相同部分

func StringsRemove

func StringsRemove(ori, fil []string) (res []string)

移除

func StringsRemoveDuplicate

func StringsRemoveDuplicate(ori []string) (res []string)

去重

func UnCamel

func UnCamel(name string) string

大驼峰字符名转换为小写

func ValidateFilter

func ValidateFilter(data interface{}) (v map[string]string)

参数校验过滤

Types

type CmsImageClassify

type CmsImageClassify struct {
	Id          string `json:"id,omitempty"`
	Title       string `json:"title"`
	Description string `json:"description"`
}

type CmsVideoClassify

type CmsVideoClassify struct {
	Id          string `json:"id,omitempty"`
	Title       string `json:"title"`
	Description string `json:"description"`
}

type Example

type Example struct {
	Id         string `gorm:"type:varchar(36);primary_key;unique" json:"id"`
	ApiKey     string `gorm:"type:varchar(10);not null;"`
	Value      string `gorm:"type:varchar(200);not null;default:'hhh'"`
	CreateTime int64  `gorm:"type:int(11);"`
	UpdateTime int64  `gorm:"type:int(11);"`
	Deleted    int    `gorm:"type:tinyint(1);default:0"`
}

type General

type General struct {
	Data       interface{}       `json:"data"`             // 数据响应结果
	Errmsg     map[string]string `json:"errmsg,omitempty"` // 错误信息
	StatusCode int               `json:"status_code"`      // 异常状态码
	Meta       *meta             `json:"meta,omitempty"`
}

func (*General) General

func (this *General) General(url string, err error, code int) *General

func (*General) List

func (this *General) List(page, count, total int) *General

type List

type List struct {
	Page  int    `json:"page" example:"1" validate:"isPosInt"`               // 页码
	Count int    `json:"count" example:"15" validate:"isPosInt"`             // 每页显示的记录条数
	Total int    `json:"total" example:"100"`                                // 数据总数 desc:降序 asc:升序
	Sort  string `json:"sort" example:"create_id" validate:"oneof=desc asc"` // 排序方式
	Order string `json:"order" exmaple:"desc"`                               // 排序的字段
}

分页

type ModelParam

type ModelParam struct {
	Type    string              // 数据模型名称
	Param   interface{}         // 请求参数
	Sel     []string            // 待查询字段集合
	Not     []string            // 过滤字段集合
	Preload map[string][]string // 预加载处理数据
	Dim     map[string][]string // 模糊查询数据
	Filter  map[string][]string // 特定字段查询
}

func (*ModelParam) Amend

func (this *ModelParam) Amend() (data interface{}, err error)

增改

func (*ModelParam) Create

func (this *ModelParam) Create() (data interface{}, err error)

增加

func (*ModelParam) Dels

func (this *ModelParam) Dels() (err error)

(软)删除 无参数时则删除全部

func (*ModelParam) Detail

func (this *ModelParam) Detail() (data interface{}, err error)

获取详情

func (*ModelParam) List

func (this *ModelParam) List() (data interface{}, err error)

获取列表

func (*ModelParam) Pagination

func (this *ModelParam) Pagination(l *List) (data interface{}, err error)

获取分页

func (*ModelParam) Test added in v1.0.1

func (this *ModelParam) Test() (data interface{}, err error)

重构 1.去除指针引用 2.避免动态变量的维护

func (*ModelParam) Update

func (this *ModelParam) Update() (data interface{}, err error)

修改

type MysqlModels

type MysqlModels struct {
	Transaction bool     // 是否开启事务 默认关闭
	DB          *gorm.DB // 动态mysql操作

	Request   interface{} // 过滤条件
	Response  interface{} // 响应结果
	ModStruct interface{} // 待渲染至相应的数据

	Err error // 操作错误信息
}

func (*MysqlModels) Amend

func (this *MysqlModels) Amend() *MysqlModels

若记录存在则更新,不存在则创建

func (*MysqlModels) Commit

func (this *MysqlModels) Commit() *MysqlModels

func (*MysqlModels) Create

func (this *MysqlModels) Create() *MysqlModels

创建

func (*MysqlModels) Dels

func (this *MysqlModels) Dels() *MysqlModels

软删除

func (*MysqlModels) Detail

func (this *MysqlModels) Detail() *MysqlModels

详情

func (*MysqlModels) Dim

func (this *MysqlModels) Dim(val string, fields ...string) *MysqlModels

模糊查询字段过滤

func (*MysqlModels) Filter

func (this *MysqlModels) Filter(field string, vals ...string) *MysqlModels

过滤

func (*MysqlModels) Init

func (this *MysqlModels) Init() *MysqlModels

初始化

func (*MysqlModels) List

func (this *MysqlModels) List() *MysqlModels

列表

func (*MysqlModels) Pagination

func (this *MysqlModels) Pagination(l *List) *MysqlModels

func (*MysqlModels) Preload

func (this *MysqlModels) Preload(column string, sels ...string) *MysqlModels

预处理操作

func (*MysqlModels) Rollback

func (this *MysqlModels) Rollback() *MysqlModels

事务操作

func (*MysqlModels) Sel

func (this *MysqlModels) Sel(y, n []string) *MysqlModels

过滤查询字段

func (*MysqlModels) SelOrder

func (this *MysqlModels) SelOrder(k string, vs ...string) *MysqlModels

查询固定排序

func (*MysqlModels) Update

func (this *MysqlModels) Update() *MysqlModels

修改

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL