//HandlePanic rolls back the transiction provided and then panics again. func (self *QbsDefaultOrmTransactionPolicy) HandlePanic(tx *qbs.Qbs, err interface{}) (interface{}, error) { log.Printf("got panic, rolling back and returning 500 to client (%v)\n", err) if rerr := tx.Rollback(); rerr != nil { panic(rerr) } return nil, HTTPError(http.StatusInternalServerError, fmt.Sprintf("panic: %v", err)) }
//HandleResult determines whether or not the transaction provided should be rolled //back or if it should be committed. It rolls back when the result value is //a non-http error, if it is an Error and the status code is >= 400. func (self *QbsDefaultOrmTransactionPolicy) HandleResult(tx *qbs.Qbs, value interface{}, err error) (interface{}, error) { if err != nil { switch e := err.(type) { case *Error: if e.StatusCode >= 400 { rerr := tx.Rollback() if rerr != nil { return nil, rerr } } default: rerr := tx.Rollback() if rerr != nil { return nil, rerr } return nil, HTTPError(http.StatusInternalServerError, fmt.Sprintf("%v", err)) } } else { if cerr := tx.Commit(); cerr != nil { return nil, cerr } } return value, err }