Blame view

utils/db/schema.go 1.73 KB
98b0736d   zhangqijia   添加定时器, 检查心跳
1
2
3
4
5
6
7
8
  package db
  
  import (
  	"reflect"
  	"strings"
  )
  
  type Schema struct {
33ea26ab   zhangqijia   使用schema封装mongo
9
10
11
12
  	mgo *MgoColl
  	reflectValue *reflect.Value
  	reflectType  reflect.Type
  
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
13
  	cacheFields map[string]interface{}
33ea26ab   zhangqijia   使用schema封装mongo
14
  
98b0736d   zhangqijia   添加定时器, 检查心跳
15
16
17
18
  	pri interface{}
  	schema interface{}
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
19
20
  func NewSchema(key string, schema interface{}) *Schema {
  	s := reflect.ValueOf(schema)
98b0736d   zhangqijia   添加定时器, 检查心跳
21
  	if s.Kind() == reflect.Ptr {
33ea26ab   zhangqijia   使用schema封装mongo
22
  		s = reflect.ValueOf(schema).Elem()
98b0736d   zhangqijia   添加定时器, 检查心跳
23
  	}
33ea26ab   zhangqijia   使用schema封装mongo
24
25
26
  	sch := &Schema{
  		reflectValue: &s,
  		reflectType: s.Type(),
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
27
  		cacheFields: make(map[string]interface{}),
98b0736d   zhangqijia   添加定时器, 检查心跳
28
29
  		schema: schema,
  	}
33ea26ab   zhangqijia   使用schema封装mongo
30
31
32
  	sch.mgo = NewMongoColl(sch)
  	sch.pri =  GetBsonD(sch.getPriTag(), key)
  	return sch
98b0736d   zhangqijia   添加定时器, 检查心跳
33
34
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
35
36
  func (s *Schema) GetSchemaType() reflect.Type  {
  	return s.reflectType
98b0736d   zhangqijia   添加定时器, 检查心跳
37
38
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
39
  func (s *Schema) GetCollName() string {
98b0736d   zhangqijia   添加定时器, 检查心跳
40
41
42
  	return strings.ToLower(s.GetSchemaType().Name())
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
43
  func (s *Schema) getPriTag() string {
98b0736d   zhangqijia   添加定时器, 检查心跳
44
  	var pri string
33ea26ab   zhangqijia   使用schema封装mongo
45
46
47
  	for i := 0; i < s.reflectType.NumField(); i++ {
  		if s.reflectType.Field(i).Tag.Get("pri") == "1" {
  			pri = strings.ToLower(s.reflectType.Field(i).Name)
98b0736d   zhangqijia   添加定时器, 检查心跳
48
49
50
51
52
  			break
  		}
  	}
  	return pri
  }
33ea26ab   zhangqijia   使用schema封装mongo
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
  
  func (s *Schema) GetPri() interface{} {
  	return s.pri
  }
  
  func (s *Schema) GetSchema() interface{} {
  	return s.schema
  }
  
  func (s *Schema) Load() error {
  	return s.mgo.Load()
  }
  
  func (s *Schema) Create() error {
  	_, err := s.mgo.Create()
  	return err
  }
  
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
71
72
73
74
75
76
77
  func (s *Schema) Update() {
  	if s.cacheFields != nil {
  		s.mgo.UpdateProperties(s.cacheFields)
  		s.cacheFields = make(map[string]interface{})
  	}
  }
  
7f269318   zhangqijia   add pb.go; 添加关闭连接...
78
  func (s *Schema) SetProperty(key string, val interface{}) {
33ea26ab   zhangqijia   使用schema封装mongo
79
  	s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val))
7f269318   zhangqijia   add pb.go; 添加关闭连接...
80
  	s.cacheFields[strings.ToLower(key)] = val
33ea26ab   zhangqijia   使用schema封装mongo
81
82
  }
  
7f269318   zhangqijia   add pb.go; 添加关闭连接...
83
  func (s *Schema) SetProperties(properties map[string]interface{}) {
33ea26ab   zhangqijia   使用schema封装mongo
84
85
  	for key, val := range properties {
  		s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val))
7f269318   zhangqijia   add pb.go; 添加关闭连接...
86
  		s.cacheFields[strings.ToLower(key)] = val
33ea26ab   zhangqijia   使用schema封装mongo
87
  	}
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
88
  }