diff --git a/rest/bean.go b/rest/bean.go index 7e1cb87..418ad45 100644 --- a/rest/bean.go +++ b/rest/bean.go @@ -27,3 +27,5 @@ func (this *Bean) PanicError(err error) { func (this *Bean) PanicWebError(msg string, httpStatusCode int) { panic(&WebError{Msg: msg, Code: httpStatusCode}) } + +//处理日志的统一方法。 diff --git a/rest/context.go b/rest/context.go index 229d100..de476fa 100644 --- a/rest/context.go +++ b/rest/context.go @@ -126,10 +126,10 @@ func (this *Context) registerBeans() { this.registerBean(new(PreferenceDao)) this.registerBean(new(PreferenceService)) - //securityVisit - this.registerBean(new(SecurityVisitController)) - this.registerBean(new(SecurityVisitDao)) - this.registerBean(new(SecurityVisitService)) + //footprint + this.registerBean(new(FootprintController)) + this.registerBean(new(FootprintDao)) + this.registerBean(new(FootprintService)) //session this.registerBean(new(SessionDao)) diff --git a/rest/security_visit_controller.go b/rest/footprint_controller.go similarity index 54% rename from rest/security_visit_controller.go rename to rest/footprint_controller.go index 870b27a..80c977d 100644 --- a/rest/security_visit_controller.go +++ b/rest/footprint_controller.go @@ -5,66 +5,66 @@ import ( "strconv" ) -type SecurityVisitController struct { +type FootprintController struct { BaseController - securityVisitDao *SecurityVisitDao - securityVisitService *SecurityVisitService + footprintDao *FootprintDao + footprintService *FootprintService } //初始化方法 -func (this *SecurityVisitController) Init() { +func (this *FootprintController) Init() { this.BaseController.Init() //手动装填本实例的Bean. 这里必须要用中间变量方可。 - b := CONTEXT.GetBean(this.securityVisitDao) - if b, ok := b.(*SecurityVisitDao); ok { - this.securityVisitDao = b + b := CONTEXT.GetBean(this.footprintDao) + if b, ok := b.(*FootprintDao); ok { + this.footprintDao = b } - b = CONTEXT.GetBean(this.securityVisitService) - if b, ok := b.(*SecurityVisitService); ok { - this.securityVisitService = b + b = CONTEXT.GetBean(this.footprintService) + if b, ok := b.(*FootprintService); ok { + this.footprintService = b } } //注册自己的路由。 -func (this *SecurityVisitController) RegisterRoutes() map[string]func(writer http.ResponseWriter, request *http.Request) { +func (this *FootprintController) RegisterRoutes() map[string]func(writer http.ResponseWriter, request *http.Request) { routeMap := make(map[string]func(writer http.ResponseWriter, request *http.Request)) //每个Controller需要主动注册自己的路由。 - routeMap["/api/security/visit/delete"] = this.Wrap(this.Delete, USER_ROLE_USER) - routeMap["/api/security/visit/detail"] = this.Wrap(this.Detail, USER_ROLE_USER) - routeMap["/api/security/visit/page"] = this.Wrap(this.Page, USER_ROLE_USER) + routeMap["/api/footprint/delete"] = this.Wrap(this.Delete, USER_ROLE_USER) + routeMap["/api/footprint/detail"] = this.Wrap(this.Detail, USER_ROLE_USER) + routeMap["/api/footprint/page"] = this.Wrap(this.Page, USER_ROLE_USER) return routeMap } //查看详情。 -func (this *SecurityVisitController) Detail(writer http.ResponseWriter, request *http.Request) *WebResult { +func (this *FootprintController) Detail(writer http.ResponseWriter, request *http.Request) *WebResult { uuid := request.FormValue("uuid") if uuid == "" { return this.Error("图片缓存的uuid必填") } - securityVisit := this.securityVisitService.Detail(uuid) + footprint := this.footprintService.Detail(uuid) //验证当前之人是否有权限查看这么详细。 user := this.checkUser(writer, request) if user.Role != USER_ROLE_ADMINISTRATOR { - if securityVisit.UserUuid != user.Uuid { + if footprint.UserUuid != user.Uuid { panic("没有权限查看该图片缓存") } } - return this.Success(securityVisit) + return this.Success(footprint) } //按照分页的方式查询 -func (this *SecurityVisitController) Page(writer http.ResponseWriter, request *http.Request) *WebResult { +func (this *FootprintController) Page(writer http.ResponseWriter, request *http.Request) *WebResult { //如果是根目录,那么就传入root. pageStr := request.FormValue("page") @@ -102,28 +102,28 @@ func (this *SecurityVisitController) Page(writer http.ResponseWriter, request *h }, } - pager := this.securityVisitDao.Page(page, pageSize, userUuid, sortArray) + pager := this.footprintDao.Page(page, pageSize, userUuid, sortArray) return this.Success(pager) } //删除一条记录 -func (this *SecurityVisitController) Delete(writer http.ResponseWriter, request *http.Request) *WebResult { +func (this *FootprintController) Delete(writer http.ResponseWriter, request *http.Request) *WebResult { uuid := request.FormValue("uuid") if uuid == "" { return this.Error("图片缓存的uuid必填") } - securityVisit := this.securityVisitDao.FindByUuid(uuid) + footprint := this.footprintDao.FindByUuid(uuid) //判断图片缓存的所属人是否正确 user := this.checkUser(writer, request) - if user.Role != USER_ROLE_ADMINISTRATOR && securityVisit.UserUuid != user.Uuid { + if user.Role != USER_ROLE_ADMINISTRATOR && footprint.UserUuid != user.Uuid { return this.Error(CODE_WRAPPER_UNAUTHORIZED) } - this.securityVisitDao.Delete(securityVisit) + this.footprintDao.Delete(footprint) return this.Success("删除成功!") } diff --git a/rest/footprint_dao.go b/rest/footprint_dao.go new file mode 100644 index 0000000..df267ac --- /dev/null +++ b/rest/footprint_dao.go @@ -0,0 +1,90 @@ +package rest + +import ( + "github.com/jinzhu/gorm" + _ "github.com/jinzhu/gorm/dialects/mysql" + "github.com/nu7hatch/gouuid" + "time" +) + +type FootprintDao struct { + BaseDao +} + +//按照Id查询文件 +func (this *FootprintDao) FindByUuid(uuid string) *Footprint { + + // Read + var footprint Footprint + db := CONTEXT.DB.Where(&Footprint{Base: Base{Uuid: uuid}}).First(&footprint) + if db.Error != nil { + return nil + } + return &footprint +} + +//按照Id查询文件 +func (this *FootprintDao) CheckByUuid(uuid string) *Footprint { + + // Read + var footprint Footprint + db := CONTEXT.DB.Where(&Footprint{Base: Base{Uuid: uuid}}).First(&footprint) + this.PanicError(db.Error) + + return &footprint + +} + +//按分页条件获取分页 +func (this *FootprintDao) Page(page int, pageSize int, userUuid string, sortArray []OrderPair) *Pager { + + var wp = &WherePair{} + + if userUuid != "" { + wp = wp.And(&WherePair{Query: "user_uuid = ?", Args: []interface{}{userUuid}}) + } + + var conditionDB *gorm.DB + conditionDB = CONTEXT.DB.Model(&Footprint{}).Where(wp.Query, wp.Args...) + + count := 0 + db := conditionDB.Count(&count) + this.PanicError(db.Error) + + var footprints []*Footprint + db = conditionDB.Order(this.GetSortString(sortArray)).Offset(page * pageSize).Limit(pageSize).Find(&footprints) + this.PanicError(db.Error) + pager := NewPager(page, pageSize, count, footprints) + + return pager +} + +//创建 +func (this *FootprintDao) Create(footprint *Footprint) *Footprint { + + timeUUID, _ := uuid.NewV4() + footprint.Uuid = string(timeUUID.String()) + footprint.CreateTime = time.Now() + footprint.UpdateTime = time.Now() + db := CONTEXT.DB.Create(footprint) + this.PanicError(db.Error) + + return footprint +} + +//修改一条记录 +func (this *FootprintDao) Save(footprint *Footprint) *Footprint { + + footprint.UpdateTime = time.Now() + db := CONTEXT.DB.Save(footprint) + this.PanicError(db.Error) + + return footprint +} + +//删除一条记录 +func (this *FootprintDao) Delete(footprint *Footprint) { + + db := CONTEXT.DB.Delete(&footprint) + this.PanicError(db.Error) +} diff --git a/rest/security_visit_model.go b/rest/footprint_model.go similarity index 77% rename from rest/security_visit_model.go rename to rest/footprint_model.go index 8e62ba4..7a7fef1 100644 --- a/rest/security_visit_model.go +++ b/rest/footprint_model.go @@ -3,7 +3,7 @@ package rest /** * 系统的所有访问记录均记录在此 */ -type SecurityVisit struct { +type Footprint struct { Base SessionId string `json:"sessionId"` UserUuid string `json:"userUuid"` @@ -16,6 +16,6 @@ type SecurityVisit struct { } // set File's table name to be `profiles` -func (SecurityVisit) TableName() string { - return TABLE_PREFIX + "security_visit" +func (Footprint) TableName() string { + return TABLE_PREFIX + "footprint" } diff --git a/rest/security_visit_service.go b/rest/footprint_service.go similarity index 65% rename from rest/security_visit_service.go rename to rest/footprint_service.go index 866c315..d071fb0 100644 --- a/rest/security_visit_service.go +++ b/rest/footprint_service.go @@ -7,19 +7,19 @@ import ( ) //@Service -type SecurityVisitService struct { +type FootprintService struct { Bean - securityVisitDao *SecurityVisitDao + footprintDao *FootprintDao userDao *UserDao } //初始化方法 -func (this *SecurityVisitService) Init() { +func (this *FootprintService) Init() { //手动装填本实例的Bean. 这里必须要用中间变量方可。 - b := CONTEXT.GetBean(this.securityVisitDao) - if b, ok := b.(*SecurityVisitDao); ok { - this.securityVisitDao = b + b := CONTEXT.GetBean(this.footprintDao) + if b, ok := b.(*FootprintDao); ok { + this.footprintDao = b } b = CONTEXT.GetBean(this.userDao) @@ -30,22 +30,22 @@ func (this *SecurityVisitService) Init() { } //获取某个文件的详情,会把父级依次倒着装进去。如果中途出错,直接抛出异常。 -func (this *SecurityVisitService) Detail(uuid string) *SecurityVisit { +func (this *FootprintService) Detail(uuid string) *Footprint { - securityVisit := this.securityVisitDao.CheckByUuid(uuid) + footprint := this.footprintDao.CheckByUuid(uuid) - return securityVisit + return footprint } //记录访问记录 -func (this *SecurityVisitService) Log(writer http.ResponseWriter, request *http.Request) { +func (this *FootprintService) Trace(writer http.ResponseWriter, request *http.Request) { //手动装填本实例的Bean. 这里必须要用中间变量方可。 - var securityVisitDao *SecurityVisitDao - b := CONTEXT.GetBean(securityVisitDao) - if b, ok := b.(*SecurityVisitDao); ok { - securityVisitDao = b + var footprintDao *FootprintDao + b := CONTEXT.GetBean(footprintDao) + if b, ok := b.(*FootprintDao); ok { + footprintDao = b } fmt.Printf("Host = %s Uri = %s Path = %s RawPath = %s RawQuery = %s \n", @@ -76,7 +76,7 @@ func (this *SecurityVisitService) Log(writer http.ResponseWriter, request *http. } //将文件信息存入数据库中。 - securityVisit := &SecurityVisit{ + footprint := &Footprint{ SessionId: "", UserUuid: "testUserUUid", Ip: GetIpAddress(request), @@ -87,6 +87,6 @@ func (this *SecurityVisitService) Log(writer http.ResponseWriter, request *http. Success: true, } - securityVisit = securityVisitDao.Create(securityVisit) + footprint = footprintDao.Create(footprint) } diff --git a/rest/router.go b/rest/router.go index 24b3f52..5ffa6af 100644 --- a/rest/router.go +++ b/rest/router.go @@ -11,7 +11,7 @@ import ( //用于处理所有前来的请求 type Router struct { - securityVisitService *SecurityVisitService + footprintService *FootprintService userService *UserService routeMap map[string]func(writer http.ResponseWriter, request *http.Request) } @@ -28,10 +28,10 @@ func NewRouter() *Router { router.userService = b } - //装载securityVisitService - b = CONTEXT.GetBean(router.securityVisitService) - if b, ok := b.(*SecurityVisitService); ok { - router.securityVisitService = b + //装载footprintService + b = CONTEXT.GetBean(router.footprintService) + if b, ok := b.(*FootprintService); ok { + router.footprintService = b } //将Controller中的路由规则装载机进来 @@ -128,7 +128,7 @@ func (this *Router) ServeHTTP(writer http.ResponseWriter, request *http.Request) } //正常的访问记录会落到这里。 - go this.securityVisitService.Log(writer, request) + go this.footprintService.Trace(writer, request) } else { //当作静态资源处理。默认从当前文件下面的static文件夹中取东西。 diff --git a/rest/security_visit_dao.go b/rest/security_visit_dao.go deleted file mode 100644 index 6319ec2..0000000 --- a/rest/security_visit_dao.go +++ /dev/null @@ -1,90 +0,0 @@ -package rest - -import ( - "github.com/jinzhu/gorm" - _ "github.com/jinzhu/gorm/dialects/mysql" - "github.com/nu7hatch/gouuid" - "time" -) - -type SecurityVisitDao struct { - BaseDao -} - -//按照Id查询文件 -func (this *SecurityVisitDao) FindByUuid(uuid string) *SecurityVisit { - - // Read - var securityVisit SecurityVisit - db := CONTEXT.DB.Where(&SecurityVisit{Base: Base{Uuid: uuid}}).First(&securityVisit) - if db.Error != nil { - return nil - } - return &securityVisit -} - -//按照Id查询文件 -func (this *SecurityVisitDao) CheckByUuid(uuid string) *SecurityVisit { - - // Read - var securityVisit SecurityVisit - db := CONTEXT.DB.Where(&SecurityVisit{Base: Base{Uuid: uuid}}).First(&securityVisit) - this.PanicError(db.Error) - - return &securityVisit - -} - -//按分页条件获取分页 -func (this *SecurityVisitDao) Page(page int, pageSize int, userUuid string, sortArray []OrderPair) *Pager { - - var wp = &WherePair{} - - if userUuid != "" { - wp = wp.And(&WherePair{Query: "user_uuid = ?", Args: []interface{}{userUuid}}) - } - - var conditionDB *gorm.DB - conditionDB = CONTEXT.DB.Model(&SecurityVisit{}).Where(wp.Query, wp.Args...) - - count := 0 - db := conditionDB.Count(&count) - this.PanicError(db.Error) - - var securityVisits []*SecurityVisit - db = conditionDB.Order(this.GetSortString(sortArray)).Offset(page * pageSize).Limit(pageSize).Find(&securityVisits) - this.PanicError(db.Error) - pager := NewPager(page, pageSize, count, securityVisits) - - return pager -} - -//创建 -func (this *SecurityVisitDao) Create(securityVisit *SecurityVisit) *SecurityVisit { - - timeUUID, _ := uuid.NewV4() - securityVisit.Uuid = string(timeUUID.String()) - securityVisit.CreateTime = time.Now() - securityVisit.UpdateTime = time.Now() - db := CONTEXT.DB.Create(securityVisit) - this.PanicError(db.Error) - - return securityVisit -} - -//修改一条记录 -func (this *SecurityVisitDao) Save(securityVisit *SecurityVisit) *SecurityVisit { - - securityVisit.UpdateTime = time.Now() - db := CONTEXT.DB.Save(securityVisit) - this.PanicError(db.Error) - - return securityVisit -} - -//删除一条记录 -func (this *SecurityVisitDao) Delete(securityVisit *SecurityVisit) { - - db := CONTEXT.DB.Delete(&securityVisit) - this.PanicError(db.Error) -}