Blame view

src/components/db/schema.go 1.49 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
13
  	mgo *MgoColl
  	reflectValue *reflect.Value
  	reflectType  reflect.Type
  
  
98b0736d   zhangqijia   添加定时器, 检查心跳
14
15
16
17
  	pri interface{}
  	schema interface{}
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
18
19
  func NewSchema(key string, schema interface{}) *Schema {
  	s := reflect.ValueOf(schema)
98b0736d   zhangqijia   添加定时器, 检查心跳
20
  	if s.Kind() == reflect.Ptr {
33ea26ab   zhangqijia   使用schema封装mongo
21
  		s = reflect.ValueOf(schema).Elem()
98b0736d   zhangqijia   添加定时器, 检查心跳
22
  	}
33ea26ab   zhangqijia   使用schema封装mongo
23
24
25
  	sch := &Schema{
  		reflectValue: &s,
  		reflectType: s.Type(),
98b0736d   zhangqijia   添加定时器, 检查心跳
26
27
  		schema: schema,
  	}
33ea26ab   zhangqijia   使用schema封装mongo
28
29
30
  	sch.mgo = NewMongoColl(sch)
  	sch.pri =  GetBsonD(sch.getPriTag(), key)
  	return sch
98b0736d   zhangqijia   添加定时器, 检查心跳
31
32
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
33
34
  func (s *Schema) GetSchemaType() reflect.Type  {
  	return s.reflectType
98b0736d   zhangqijia   添加定时器, 检查心跳
35
36
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
37
  func (s *Schema) GetCollName() string {
98b0736d   zhangqijia   添加定时器, 检查心跳
38
39
40
  	return strings.ToLower(s.GetSchemaType().Name())
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
41
  func (s *Schema) getPriTag() string {
98b0736d   zhangqijia   添加定时器, 检查心跳
42
  	var pri string
33ea26ab   zhangqijia   使用schema封装mongo
43
44
45
  	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   添加定时器, 检查心跳
46
47
48
49
50
  			break
  		}
  	}
  	return pri
  }
33ea26ab   zhangqijia   使用schema封装mongo
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  
  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
  }
  
  func (s *Schema) UpdateProperty(key string, val interface{}) {
  	s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val))
  	s.mgo.UpdateProperty(key, val)
  }
  
  func (s *Schema) UpdateProperties(properties map[string]interface{}) {
  	for key, val := range properties {
  		s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val))
  	}
  	s.mgo.UpdateProperties(properties)
  }