Commit a25c9f3e authored by Jisan Ahmed's avatar Jisan Ahmed
Browse files

clear:a trip request with bidders

parent 6d0d3e8b
appname = RequestTrip
httpport = 8081
runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = true
sqlconn = tl-g-developer:G33p33a55_dataChai@tcp(103.199.168.130:3306)/trucklagbe_db?charset=utf8&loc=Asia%2FDhaka
package controllers
import (
"RequestTrip/models"
"strconv"
"github.com/beego/beego/logs"
"github.com/beego/beego/orm"
"github.com/beego/beego/v2/server/web"
)
type BidStatusDetailsController struct {
web.Controller
}
// Get retrieves all bid status details
func (c *BidStatusDetailsController) Get() {
// Create a new ORM instance
o := orm.NewOrm()
var bidStatusDetails []models.BidStatusDetails
// Define the raw SQL query to fetch all records from bid_status_details table
sql := "SELECT * FROM bid_status_details"
// Execute the raw SQL query
_, err := o.Raw(sql).QueryRows(&bidStatusDetails)
if err != nil {
c.Data["json"] = map[string]string{"error": err.Error()}
} else {
c.Data["json"] = bidStatusDetails
}
// Serve the JSON response
c.ServeJSON()
}
// GetByBidID retrieves bid status details by bid_id
func (c *BidStatusDetailsController) GetByBidID() {
// Retrieve the bid_id from the URL parameters
bidIDStr := c.Ctx.Input.Param(":bid_id")
bidID, err := strconv.Atoi(bidIDStr)
if err != nil {
c.Data["json"] = map[string]string{"error": "Invalid bid_id"}
c.ServeJSON()
return
}
// Create a new ORM instance
o := orm.NewOrm()
// Define the raw SQL query to fetch the latest record by bid_id
sql := `
SELECT * FROM bid_status_details
WHERE bid_id = ?
ORDER BY status_details_id DESC
LIMIT 1
`
// Execute the raw SQL query
var bidStatusDetails models.BidStatusDetails
err = o.Raw(sql, bidID).QueryRow(&bidStatusDetails)
if err == orm.ErrNoRows {
c.Data["json"] = map[string]string{"error": "No data found for the provided bid_id"}
} else if err != nil {
c.Data["json"] = map[string]string{"error": err.Error()}
} else {
// Check the fetched data
logs.Info("Fetched bid status details: %v", bidStatusDetails)
c.Data["json"] = bidStatusDetails
}
// Serve the JSON response
c.ServeJSON()
}
package controllers
import (
"RequestTrip/models"
"github.com/beego/beego/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/beego/beego/v2/server/web"
)
type BiddingRequestBidDetailsController struct {
web.Controller
}
// GetAll returns all bidding request bid details
func (c *BiddingRequestBidDetailsController) GetAll() {
// Create a new ORM instance
o := orm.NewOrm()
var biddingDetails []models.BiddingRequestBidDetails
// Define the raw SQL query to fetch all records from bidding_request_bid_details table
sql := "SELECT * FROM bidding_request_bid_details"
// Execute the raw SQL query
_, err := o.Raw(sql).QueryRows(&biddingDetails)
if err != nil {
logs.Error("Error fetching bidding request bid details: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
// If successful, return the bidding details as JSON
c.Data["json"] = biddingDetails
c.ServeJSON()
}
// GetByRequestID returns bidding request bid details by request_id
func (c *BiddingRequestBidDetailsController) GetByRequestID() {
requestID, err := c.GetInt(":request_id")
if err != nil {
c.Data["json"] = map[string]interface{}{"error": "Invalid request_id"}
c.ServeJSON()
return
}
o := orm.NewOrm()
var biddingDetails []models.BiddingRequestBidDetails
// Raw SQL query to ensure ordering works as expected
query := `
SELECT * FROM bidding_request_bid_details
WHERE request_id = ?
ORDER BY rate Desc
`
_, err = o.Raw(query, requestID).QueryRows(&biddingDetails)
if err != nil {
logs.Error("Error fetching bidding request bid details by request_id: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
c.Data["json"] = biddingDetails
c.ServeJSON()
}
// GetByBidID returns bidding request bid details by bid_id
func (c *BiddingRequestBidDetailsController) GetByBidID() {
// Retrieve the bid_id from the URL parameters
bidID, err := c.GetInt(":bid_id")
if err != nil {
c.Data["json"] = map[string]interface{}{"error": "Invalid bid_id"}
c.ServeJSON()
return
}
// Create a new ORM instance
o := orm.NewOrm()
var biddingDetail models.BiddingRequestBidDetails
// Define the raw SQL query to fetch the record by bid_id
sql := "SELECT * FROM bidding_request_bid_details WHERE bid_id = ?"
// Execute the raw SQL query
err = o.Raw(sql, bidID).QueryRow(&biddingDetail)
if err == orm.ErrNoRows {
c.Data["json"] = map[string]interface{}{"error": "No data found for the provided bid_id"}
c.ServeJSON()
return
} else if err != nil {
logs.Error("Error fetching bidding request bid details by bid_id: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
// If successful, return the bidding detail as JSON
c.Data["json"] = biddingDetail
c.ServeJSON()
}
package controllers
import (
"RequestTrip/models"
"github.com/beego/beego/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/beego/beego/v2/server/web"
)
type BiddingRequestStatusDetailsController struct {
web.Controller
}
// Get retrieves all records from the bidding_request_status_details table
func (c *BiddingRequestStatusDetailsController) Get() {
// Create a new ORM instance
o := orm.NewOrm()
var statusDetails []models.BiddingRequestStatusDetails
// Define the raw SQL query to fetch all records from bidding_request_status_details table
sql := "SELECT * FROM bidding_request_status_details"
// Execute the raw SQL query
_, err := o.Raw(sql).QueryRows(&statusDetails)
if err != nil {
c.Data["json"] = map[string]string{"error": err.Error()}
c.ServeJSON()
return
}
// If successful, return the status details as JSON
c.Data["json"] = statusDetails
c.ServeJSON()
}
func (c *BiddingRequestStatusDetailsController) GetByRequestID() {
// Retrieve the request_id from the URL parameters
requestID, err := c.GetInt(":request_id")
if err != nil {
c.Data["json"] = map[string]interface{}{"error": "Invalid request_id"}
c.ServeJSON()
return
}
// Create a new ORM instance
o := orm.NewOrm()
var statusDetails []models.BiddingRequestStatusDetails
// Define the raw SQL query to fetch records by request_id, ordered by StatusDetailsID descending
sql := "SELECT * FROM bidding_request_status_details WHERE request_id = ? ORDER BY status_details_id DESC limit 1"
// Execute the raw SQL query
_, err = o.Raw(sql, requestID).QueryRows(&statusDetails)
if err != nil {
logs.Error("Error fetching bidding request status details by request_id: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
// If successful, return the status details as JSON
c.Data["json"] = statusDetails
c.ServeJSON()
}
package controllers
import (
"RequestTrip/models"
"github.com/beego/beego/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/beego/beego/v2/server/web"
)
type BiddingTripAdditionalDetailsController struct {
web.Controller
}
// Get retrieves all records from the bidding_trip_additional_details table
func (c *BiddingTripAdditionalDetailsController) Get() {
// Create a new ORM instance
o := orm.NewOrm()
var tripAdditionalDetails []models.BiddingTripAdditionalDetails
// Define the raw SQL query to fetch all records from bidding_trip_additional_details table
sql := "SELECT * FROM bidding_trip_additional_details"
// Execute the raw SQL query
_, err := o.Raw(sql).QueryRows(&tripAdditionalDetails)
if err != nil {
c.Data["json"] = map[string]string{"error": err.Error()}
c.ServeJSON()
return
}
// If successful, return the trip additional details as JSON
c.Data["json"] = tripAdditionalDetails
c.ServeJSON()
}
// GetWithTripRequestDetails returns joined bidding trip additional details with trip request details by request_id
func (c *BiddingTripAdditionalDetailsController) GetWithTripRequestDetails() {
requestID, err := c.GetInt(":request_id")
if err != nil {
c.Data["json"] = map[string]interface{}{"error": "Invalid request_id"}
c.ServeJSON()
return
}
o := orm.NewOrm()
var result []struct {
BiddingTripAdditionalDetails models.BiddingTripAdditionalDetails `json:"bidding_trip_additional_details"`
TripRequestDetails models.TripRequestDetails `json:"trip_request_details"`
}
_, err = o.Raw(`
SELECT b.*, t.*
FROM bidding_trip_additional_details b
JOIN trip_request_details t ON b.request_id = t.request_id
WHERE b.request_id = ?
`, requestID).QueryRows(&result)
if err != nil {
logs.Error("Error fetching joined details by request_id: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
c.Data["json"] = result
c.ServeJSON()
}
package controllers
import (
"RequestTrip/models"
"github.com/beego/beego/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/beego/beego/v2/server/web"
)
type TripRequestDetailsController struct {
web.Controller
}
// GetAll returns all trip request details
func (c *TripRequestDetailsController) GetAll() {
o := orm.NewOrm()
var tripRequests []models.TripRequestDetails
// Raw SQL query
sql := "SELECT * FROM trip_request_details"
_, err := o.Raw(sql).QueryRows(&tripRequests)
if err != nil {
logs.Error("Error fetching trip request details: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
c.Data["json"] = tripRequests
c.ServeJSON()
}
// GetByID returns trip request details by request_id
func (c *TripRequestDetailsController) GetByID() {
// Retrieve the request_id from the URL parameters
requestID, err := c.GetInt(":request_id")
if err != nil {
c.Data["json"] = map[string]interface{}{"error": "Invalid request_id"}
c.ServeJSON()
return
}
// Create a new ORM instance
o := orm.NewOrm()
var tripRequest models.TripRequestDetails
// Define the raw SQL query to fetch the trip request by request_id
sql := "SELECT * FROM trip_request_details WHERE request_id = ?"
// Execute the raw SQL query
err = o.Raw(sql, requestID).QueryRow(&tripRequest)
if err == orm.ErrNoRows {
c.Data["json"] = map[string]interface{}{"error": "No data found for the provided request_id"}
c.ServeJSON()
return
} else if err != nil {
logs.Error("Error fetching trip request details by ID: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
// If successful, return the trip request as JSON
c.Data["json"] = tripRequest
c.ServeJSON()
}
package controllers
import (
"RequestTrip/models"
"github.com/beego/beego/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/beego/beego/v2/server/web"
)
type TripDetailsWithBidsController struct {
web.Controller
}
func (c *TripDetailsWithBidsController) GetTripDetailsWithBids() {
// Retrieve request_id from the URL parameter
requestID, err := c.GetInt(":request_id")
if err != nil {
c.Data["json"] = map[string]interface{}{"error": "Invalid request_id"}
c.ServeJSON()
return
}
o := orm.NewOrm()
// Define the SQL query to fetch trip request details
sqlTripDetails := `
SELECT *
FROM trip_request_details
WHERE request_id = ?
`
var tripDetails models.TripRequestDetails
err = o.Raw(sqlTripDetails, requestID).QueryRow(&tripDetails)
if err == orm.ErrNoRows {
c.Data["json"] = map[string]interface{}{"error": "No data found for the provided request_id"}
c.ServeJSON()
return
} else if err != nil {
logs.Error("Error fetching trip request details: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
// Fetch the status details
sqlStatus := `
SELECT *
FROM bidding_request_status_details
WHERE request_id = ?
ORDER BY status_details_id DESC
`
// Execute the raw SQL query
var statusDetails []models.BiddingRequestStatusDetails
_, err = o.Raw(sqlStatus, requestID).QueryRows(&statusDetails)
if err != nil {
logs.Error("Error fetching bidding request status details: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
// Determine the trip status
var tripStatus string
if len(statusDetails) > 0 {
tripStatus = statusDetails[0].Status
}
// Fetch the bid details
sqlBids := `
SELECT *
FROM bidding_request_bid_details
WHERE request_id = ?
`
var bids []models.BiddingRequestBidDetails
_, err = o.Raw(sqlBids, requestID).QueryRows(&bids)
if err != nil {
logs.Error("Error fetching bidding request bid details: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
// Prepare bid details and include bid status from BidStatusDetails
var bidDetails []map[string]interface{}
for _, bid := range bids {
sqlBidStatus := `
SELECT *
FROM bid_status_details
WHERE bid_id = ?
ORDER BY status_details_id DESC
`
var bidStatus models.BidStatusDetails
err = o.Raw(sqlBidStatus, bid.BidID).QueryRow(&bidStatus)
if err != nil {
logs.Error("Error fetching bid status details: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
bidDetails = append(bidDetails, map[string]interface{}{
"user_details_id": bid.OwnerID,
"bid_id": bid.BidID,
"truck_no": bid.TruckNo,
"truck_id": bid.TruckID,
"bid_status": bidStatus.Status, // Fetching bid status from BidStatusDetails
"status_details_id": bidStatus.StatusDetailsID,
})
}
// If the trip status is active, sort the bid details by rate in ascending order
/* if tripStatus == "active" {
sort.Slice(bidDetails, func(i, j int) bool {
return bids[i].Rate < bids[j].Rate
})
} */
response := map[string]interface{}{
"trip_details": map[string]interface{}{
"trip_id": tripDetails.RequestID,
"trip_status": tripStatus,
"pick_address": tripDetails.PickAdd,
"drop_address": tripDetails.DropAdd,
"pickup_time": tripDetails.PickTime,
},
"bid_details": bidDetails,
}
c.Data["json"] = response
c.ServeJSON()
}
package controllers
import (
"github.com/beego/beego/v2/core/logs"
"github.com/beego/beego/orm"
"github.com/beego/beego/v2/server/web"
)
// TripRequestStatusController handles requests for trip request and status details
type TripRequestStatusController struct {
web.Controller
}
// GetStatusByRequestID retrieves trip request details and status based on request_id
func (c *TripRequestStatusController) GetStatusByRequestID() {
requestID, err := c.GetInt(":request_id")
if err != nil {
c.Data["json"] = map[string]interface{}{"error": "Invalid request_id"}
c.ServeJSON()
return
}
o := orm.NewOrm()
var result []orm.Params
// Define the raw SQL query to join tables and select the necessary fields
query := `
SELECT t.request_id, s.status, s.admin_user, s.cancellation_reason
FROM trip_request_details t
LEFT JOIN bidding_request_status_details s ON t.request_id = s.request_id
WHERE t.request_id = ?
`
// Execute the query
_, err = o.Raw(query, requestID).Values(&result)
if err != nil {
logs.Error("Error fetching trip request and status details: %v", err)
c.Data["json"] = map[string]interface{}{"error": err.Error()}
c.ServeJSON()
return
}
c.Data["json"] = result
c.ServeJSON()
}
This diff is collapsed.
module RequestTrip
go 1.22
require github.com/beego/beego/v2 v2.3.0
require github.com/smartystreets/goconvey v1.6.4
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
)
require (
github.com/beego/beego v1.12.13
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/go-sql-driver/mysql v1.8.1
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/prometheus/client_golang v1.19.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.48.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
golang.org/x/crypto v0.24.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/text v0.16.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
github.com/beego/beego v1.12.13 h1:g39O1LGLTiPejWVqQKK/TFGrroW9BCZQz6/pf4S8IRM=
github.com/beego/beego v1.12.13/go.mod h1:QURFL1HldOcCZAxnc1cZ7wrplsYR5dKPHFjmk6WkLAs=
github.com/beego/beego/v2 v2.3.0 h1:iECVwzm6egw6iw6tkWrEDqXG4NQtKLQ6QBSYqlM6T/I=
github.com/beego/beego/v2 v2.3.0/go.mod h1:Ob/5BJ9fIKZLd4s9ZV3o9J6odkkIyL83et+p98gyYXo=
github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
github.com/couchbase/go-couchbase v0.0.0-20201216133707-c04035124b17/go.mod h1:+/bddYDxXsf9qt0xpDUtRR47A2GjaXmGGAqQ/k3GJ8A=
github.com/couchbase/gomemcached v0.1.2-0.20201224031647-c432ccf49f32/go.mod h1:mxliKQxOv84gQ0bJWbI+w9Wxdpt9HjDvgW9MjCym5Vo=
github.com/couchbase/goutils v0.0.0-20210118111533-e33d3ffb5401/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik=
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
github.com/wendal/errors v0.0.0-20181209125328-7f31f4b264ec/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
package main
import (
_ "RequestTrip/routers"
"log"
"github.com/beego/beego/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/beego/beego/v2/server/web"
_ "github.com/go-sql-driver/mysql"
)
// dbConnection establishes a connection to the database.
func dbConnection() {
sqlconn, err := web.AppConfig.String("sqlconn")
if err != nil {
logs.Error("Failed to retrieve SQL connection string from config: %v", err)
log.Fatal(err)
return
}
err = orm.RegisterDataBase("default", "mysql", sqlconn)
if err != nil {
logs.Error("Failed to register database: %v", err)
return
}
logs.Info("Database connection established successfully")
}
// init initializes the database connection and logging settings.
func init() {
logs.Info("Starting database connection setup...")
err := orm.RegisterDriver("mysql", orm.DRMySQL)
if err != nil {
logs.Error("Failed to register MySQL driver: %v", err)
return
}
dbConnection()
// Configure logging
logConfig := `{"filename":"error.log","perm":"777","level":7,"maxlines":0,"maxsize":0,"daily":true,"maxdays":10,"color":true}`
err = logs.SetLogger(logs.AdapterFile, logConfig)
if err != nil {
logs.Error("Failed to configure logging: %v", err)
return
}
logs.Info("Logging configured successfully")
}
func main() {
web.Run()
}
package models
import (
"time"
"github.com/beego/beego/orm"
)
func init() {
orm.RegisterModel(new(TripRequestDetails), new(BiddingTripAdditionalDetails), new(BiddingRequestBidDetails), new(BiddingRequestStatusDetails), new(BidStatusDetails))
}
// TripRequestDetails model
type TripRequestDetails struct {
RequestID int `orm:"pk;column(request_id)" json:"request_id"`
ShipperID int `orm:"column(shipper_id)" json:"shipper_id"`
ShipperType string `orm:"column(shipper_type)" json:"shipper_type"`
PickAddBookID *int `orm:"column(pick_add_book_id)" json:"pick_add_book_id"`
PickThanaID *int `orm:"column(pick_thana_id)" json:"pick_thana_id"`
PickUnionID int `orm:"column(pick_union_id)" json:"pick_union_id"`
PickAreaID int `orm:"column(pick_area_id)" json:"pick_area_id"`
PickAdd *string `orm:"column(pick_add)" json:"pick_add"`
DropAddBookID *int `orm:"column(drop_add_book_id)" json:"drop_add_book_id"`
CustomFullPickAddEng *string `orm:"column(custom_full_pick_add_eng)" json:"custom_full_pick_add_eng"`
CustomFullPickAddBng *string `orm:"column(custom_full_pick_add_bng)" json:"custom_full_pick_add_bng"`
CustomFullDropAddEng *string `orm:"column(custom_full_drop_add_eng)" json:"custom_full_drop_add_eng"`
CustomFullDropAddBng *string `orm:"column(custom_full_drop_add_bng)" json:"custom_full_drop_add_bng"`
DropThanaID *int `orm:"column(drop_thana_id)" json:"drop_thana_id"`
DropUnionID int `orm:"column(drop_union_id)" json:"drop_union_id"`
DropAreaID int `orm:"column(drop_area_id)" json:"drop_area_id"`
DropAdd *string `orm:"column(drop_add)" json:"drop_add"`
PickTime *string `orm:"column(pick_time)" json:"pick_time"`
MultiplePickDrop *int `orm:"column(multiple_pick_drop)" json:"multiple_pick_drop"`
AdditionalService *int `orm:"column(additional_service)" json:"additional_service"`
TTCategory int `orm:"column(tt_category)" json:"tt_category"`
TTOpenCover string `orm:"column(tt_open_cover)" json:"tt_open_cover"`
ProductType *string `orm:"column(product_type)" json:"product_type"`
ProductCategoryEng string `orm:"column(product_category_eng)" json:"product_category_eng"`
ProductCategoryBng string `orm:"column(product_category_bng)" json:"product_category_bng"`
AddedPromoID *int `orm:"column(added_promo_id)" json:"added_promo_id"`
TripPrice *float64 `orm:"column(trip_price)" json:"trip_price"`
TripPriceBeforeAccountCharges float64 `orm:"column(trip_price_before_account_charges)" json:"trip_price_before_account_charges"`
ShipperBudget *float64 `orm:"column(shipper_budget)" json:"shipper_budget"`
FraudHappened string `orm:"column(fraud_happened)" json:"fraud_happened"`
TripReferredFrom *string `orm:"column(trip_referred_from)" json:"trip_referred_from"`
IsCreditTrip *int `orm:"column(is_credit_trip)" json:"is_credit_trip"`
IsCashTrip int `orm:"column(is_cash_trip)" json:"is_cash_trip"`
SubType string `orm:"column(sub_type)" json:"sub_type"`
IsProjectTrip int `orm:"column(is_project_trip)" json:"is_project_trip"`
PickLat float64 `orm:"column(pick_lat)" json:"pick_lat"`
PickLng float64 `orm:"column(pick_lng)" json:"pick_lng"`
DropLat float64 `orm:"column(drop_lat)" json:"drop_lat"`
DropLng float64 `orm:"column(drop_lng)" json:"drop_lng"`
CreateDate *string `orm:"column(create_date)" json:"create_date"`
UpdateBy *string `orm:"column(update_by)" json:"update_by"`
UpdateDate *string `orm:"column(update_date)" json:"update_date"`
ProjectID int `orm:"column(project_id)" json:"project_id"`
OrderID *string `orm:"column(order_id)" json:"order_id"`
}
type BiddingTripAdditionalDetails struct {
TripDetailsID int `orm:"pk;column(trip_details_id)" json:"trip_details_id"`
RequestID int `orm:"column(request_id)" json:"request_id"`
CompanyName *string `orm:"column(company_name)" json:"company_name"`
ShipperName string `orm:"column(shipper_name)" json:"shipper_name"`
ShipperPhone string `orm:"column(shipper_phone)" json:"shipper_phone"`
PickContactPersonName *string `orm:"column(pick_contact_person_name)" json:"pick_contact_person_name"`
PickContactPersonPhone *string `orm:"column(pick_contact_person_phone)" json:"pick_contact_person_phone"`
PickAddressName *string `orm:"column(pick_address_name)" json:"pick_address_name"`
DropContactPersonName *string `orm:"column(drop_contact_person_name)" json:"drop_contact_person_name"`
DropContactPersonPhone *string `orm:"column(drop_contact_person_phone)" json:"drop_contact_person_phone"`
DropAddressName *string `orm:"column(drop_address_name)" json:"drop_address_name"`
PromoCode *string `orm:"column(promo_code)" json:"promo_code"`
PromoID *int `orm:"column(promo_id)" json:"promo_id"`
PromoAppliedBidID *int `orm:"column(promo_applied_bid_id)" json:"promo_applied_bid_id"`
PromoAmount *float64 `orm:"column(promo_amount)" json:"promo_amount"`
PromoRate *float64 `orm:"column(promo_rate)" json:"promo_rate"`
ShipperRating string `orm:"column(shipper_rating)" json:"shipper_rating"`
ServiceName *string `orm:"column(service_name)" json:"service_name"`
ServiceNameBng *string `orm:"column(service_name_bng)" json:"service_name_bng"`
ReflectionToOwner *string `orm:"column(reflection_to_owner)" json:"reflection_to_owner"`
ReflectionToShipper *string `orm:"column(reflection_to_shipper)" json:"reflection_to_shipper"`
MultipleDropDetails *string `orm:"column(multiple_drop_details)" json:"multiple_drop_details"`
MultipleDropCount *int `orm:"column(multiple_drop_count)" json:"multiple_drop_count"`
IsRoundTrip *int `orm:"column(is_round_trip)" json:"is_round_trip"`
HasAdditionalCharge *int `orm:"column(has_additional_charge)" json:"has_additional_charge"`
CreatedFrom *string `orm:"column(created_from)" json:"created_from"`
AppType *string `orm:"column(app_type)" json:"app_type"`
CreateDate *string `orm:"column(create_date)" json:"create_date"`
UpdateDate *string `orm:"column(update_date)" json:"update_date"`
KamName *string `orm:"column(kam_name)" json:"kam_name"`
KamPhone *string `orm:"column(kam_phone)" json:"kam_phone"`
LowerPriceRange float64 `orm:"column(lower_price_range)" json:"lower_price_range"`
UpperPriceRange float64 `orm:"column(upper_price_range)" json:"upper_price_range"`
}
type BiddingRequestBidDetails struct {
BidID int `orm:"pk;column(bid_id)" json:"bid_id"`
RequestID int `orm:"column(request_id)" json:"request_id"`
OwnerID int `orm:"column(owner_id)" json:"owner_id"`
OwnerUsername *string `orm:"column(owner_username)" json:"owner_username"`
OwnerPhone *string `orm:"column(owner_phone)" json:"owner_phone"`
OwnerRating *string `orm:"column(owner_rating)" json:"owner_rating"`
TruckRating *string `orm:"column(truck_rating)" json:"truck_rating"`
TruckID int `orm:"column(truck_id)" json:"truck_id"`
TruckNo *string `orm:"column(truck_no)" json:"truck_no"`
TruckCategory *int `orm:"column(truck_category)" json:"truck_category"`
TruckCategoryText *string `orm:"column(truck_category_text)" json:"truck_category_text"`
TruckShape *string `orm:"column(truck_shape)" json:"truck_shape"`
Model *string `orm:"column(model)" json:"model"`
ImeiID *int64 `orm:"column(imei_id)" json:"imei_id"`
Rate float64 `orm:"column(rate)" json:"rate"`
RateWithoutCommission *float64 `orm:"column(rate_without_commission)" json:"rate_without_commission"`
RateBeforeAccountCharges float64 `orm:"column(rate_before_account_charges)" json:"rate_before_account_charges"`
RateUpdateCount uint `orm:"column(rate_update_count)" json:"rate_update_count"`
CreateDate *string `orm:"column(create_date)" json:"create_date"`
UpdateBy *string `orm:"column(update_by)" json:"update_by"`
UpdateDate *string `orm:"column(update_date)" json:"update_date"`
IsFavourite *int `orm:"column(is_favourite)" json:"is_favourite"`
IsBan *int `orm:"column(is_ban)" json:"is_ban"`
CreatedFrom *string `orm:"column(created_from)" json:"created_from"`
}
type BiddingRequestStatusDetails struct {
StatusDetailsID int `orm:"pk;column(status_details_id)" json:"status_details_id"`
RequestID int `orm:"column(request_id)" json:"request_id"`
Status string `orm:"column(status)" json:"status"`
AdminUser *string `orm:"column(admin_user)" json:"admin_user"`
UpdatedBy *string `orm:"column(updated_by)" json:"updated_by"`
CancellationReasonID *int `orm:"column(cancellation_reason_id)" json:"cancellation_reason_id"`
CancellationReason *string `orm:"column(cancellation_reason)" json:"cancellation_reason"`
CancelledByWhom *string `orm:"column(cancelled_by_whom)" json:"cancelled_by_whom"`
ReactiveBy *string `orm:"column(reactive_by)" json:"reactive_by"`
CreateDate *string `orm:"column(create_date)" json:"create_date"`
}
type BidStatusDetails struct {
StatusDetailsID int `orm:"pk;column(status_details_id)" json:"status_details_id"`
BidID int `orm:"column(bid_id)" json:"bid_id"`
Price float64 `orm:"column(price)" json:"price"`
Status string `orm:"column(status)" json:"status"`
AdminUser *string `orm:"column(admin_user)" json:"admin_user"`
CancellationReasonID *int `orm:"column(cancellation_reason_id)" json:"cancellation_reason_id"`
CancellationReason *string `orm:"column(cancellation_reason)" json:"cancellation_reason"`
CancelledByWhom *string `orm:"column(cancelled_by_whom)" json:"cancelled_by_whom"`
UpdatedBy *string `orm:"column(updated_by)" json:"updated_by"`
CreateDate time.Time `orm:"column(create_date);type(datetime);auto_now_add" json:"create_date"`
}
// TableName sets the name of the table in the database.
func (t *TripRequestDetails) TableName() string {
return "trip_request_details"
}
func (b *BiddingTripAdditionalDetails) TableName() string {
return "bidding_trip_additional_details"
}
func (b *BiddingRequestBidDetails) TableName() string {
return "bidding_request_bid_details"
}
func (b *BiddingRequestStatusDetails) TableName() string {
return "bidding_request_status_details"
}
func (b *BidStatusDetails) TableName() string {
return "bid_status_details"
}
\ No newline at end of file
package routers
import (
"RequestTrip/controllers"
"github.com/beego/beego/v2/server/web"
)
func init() {
//sob trip eksathe dekhay
web.Router("/triprequestdetails", &controllers.TripRequestDetailsController{}, "get:GetAll")
//request id diye trip dekhay
web.Router("/triprequestdetails/:request_id", &controllers.TripRequestDetailsController{}, "get:GetByID")
//bid status dekhay
web.Router("/triprequeststatus/:request_id", &controllers.TripRequestStatusController{}, "get:GetStatusByRequestID")
//request id diye bidding request status dekhay
web.Router("/biddingrequestbiddetails/request_id/:request_id", &controllers.BiddingRequestBidDetailsController{}, "get:GetByRequestID")
//bid id diye bidding request status dekhay
web.Router("/biddingrequestbiddetails/bid_id/:bid_id", &controllers.BiddingRequestBidDetailsController{}, "get:GetByBidID")
//Addiitonal details dekhay
web.Router("/biddingtripadditionaldetails", &controllers.BiddingTripAdditionalDetailsController{}, "get:Get")
//Addition details dekhay request id diye
web.Router("/biddingtripadditionaldetails/request_id/:request_id", &controllers.BiddingTripAdditionalDetailsController{}, "get:GetWithTripRequestDetails")
//bidding request status using request id
web.Router("/biddingrequeststatusdetails", &controllers.BiddingRequestStatusDetailsController{}, "get:Get")
web.Router("/biddingrequeststatusdetails/request_id/:request_id", &controllers.BiddingRequestStatusDetailsController{}, "get:GetByRequestID")
//Bid status details dekhay using bid id
web.Router("/bidstatusdetails", &controllers.BidStatusDetailsController{}, "get:Get")
web.Router("/bidstatusdetails/bid_id/:bid_id", &controllers.BidStatusDetailsController{}, "get:GetByBidID")
// New route for trip details with bids
web.Router("/tripdetailswithbids/:request_id", &controllers.TripDetailsWithBidsController{}, "get:GetTripDetailsWithBids")
}
package test
import (
"net/http"
"net/http/httptest"
"testing"
"runtime"
"path/filepath"
_ "RequestTrip/routers"
beego "github.com/beego/beego/v2/server/web"
"github.com/beego/beego/v2/core/logs"
. "github.com/smartystreets/goconvey/convey"
)
func init() {
_, file, _, _ := runtime.Caller(0)
apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".." + string(filepath.Separator))))
beego.TestBeegoInit(apppath)
}
// TestGet is a sample to run an endpoint test
func TestGet(t *testing.T) {
r, _ := http.NewRequest("GET", "/v1/object", nil)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, r)
logs.Info("testing", "TestGet", "Code[%d]\n%s", w.Code, w.Body.String())
Convey("Subject: Test Station Endpoint\n", t, func() {
Convey("Status Code Should Be 200", func() {
So(w.Code, ShouldEqual, 200)
})
Convey("The Result Should Not Be Empty", func() {
So(w.Body.Len(), ShouldBeGreaterThan, 0)
})
})
}
appname = Todo
httpport = 8080
runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = true
sqlconn =
package controllers
import (
"Todo/models"
"encoding/json"
beego "github.com/beego/beego/v2/server/web"
)
// Operations about object
type ObjectController struct {
beego.Controller
}
// @Title Create
// @Description create object
// @Param body body models.Object true "The object content"
// @Success 200 {string} models.Object.Id
// @Failure 403 body is empty
// @router / [post]
func (o *ObjectController) Post() {
var ob models.Object
json.Unmarshal(o.Ctx.Input.RequestBody, &ob)
objectid := models.AddOne(ob)
o.Data["json"] = map[string]string{"ObjectId": objectid}
o.ServeJSON()
}
// @Title Get
// @Description find object by objectid
// @Param objectId path string true "the objectid you want to get"
// @Success 200 {object} models.Object
// @Failure 403 :objectId is empty
// @router /:objectId [get]
func (o *ObjectController) Get() {
objectId := o.Ctx.Input.Param(":objectId")
if objectId != "" {
ob, err := models.GetOne(objectId)
if err != nil {
o.Data["json"] = err.Error()
} else {
o.Data["json"] = ob
}
}
o.ServeJSON()
}
// @Title GetAll
// @Description get all objects
// @Success 200 {object} models.Object
// @Failure 403 :objectId is empty
// @router / [get]
func (o *ObjectController) GetAll() {
obs := models.GetAll()
o.Data["json"] = obs
o.ServeJSON()
}
// @Title Update
// @Description update the object
// @Param objectId path string true "The objectid you want to update"
// @Param body body models.Object true "The body"
// @Success 200 {object} models.Object
// @Failure 403 :objectId is empty
// @router /:objectId [put]
func (o *ObjectController) Put() {
objectId := o.Ctx.Input.Param(":objectId")
var ob models.Object
json.Unmarshal(o.Ctx.Input.RequestBody, &ob)
err := models.Update(objectId, ob.Score)
if err != nil {
o.Data["json"] = err.Error()
} else {
o.Data["json"] = "update success!"
}
o.ServeJSON()
}
// @Title Delete
// @Description delete the object
// @Param objectId path string true "The objectId you want to delete"
// @Success 200 {string} delete success!
// @Failure 403 objectId is empty
// @router /:objectId [delete]
func (o *ObjectController) Delete() {
objectId := o.Ctx.Input.Param(":objectId")
models.Delete(objectId)
o.Data["json"] = "delete success!"
o.ServeJSON()
}
package controllers
import (
"Todo/models"
"encoding/json"
beego "github.com/beego/beego/v2/server/web"
)
// Operations about Users
type UserController struct {
beego.Controller
}
// @Title CreateUser
// @Description create users
// @Param body body models.User true "body for user content"
// @Success 200 {int} models.User.Id
// @Failure 403 body is empty
// @router / [post]
func (u *UserController) Post() {
var user models.User
json.Unmarshal(u.Ctx.Input.RequestBody, &user)
uid := models.AddUser(user)
u.Data["json"] = map[string]string{"uid": uid}
u.ServeJSON()
}
// @Title GetAll
// @Description get all Users
// @Success 200 {object} models.User
// @router / [get]
func (u *UserController) GetAll() {
users := models.GetAllUsers()
u.Data["json"] = users
u.ServeJSON()
}
// @Title Get
// @Description get user by uid
// @Param uid path string true "The key for staticblock"
// @Success 200 {object} models.User
// @Failure 403 :uid is empty
// @router /:uid [get]
func (u *UserController) Get() {
uid := u.GetString(":uid")
if uid != "" {
user, err := models.GetUser(uid)
if err != nil {
u.Data["json"] = err.Error()
} else {
u.Data["json"] = user
}
}
u.ServeJSON()
}
// @Title Update
// @Description update the user
// @Param uid path string true "The uid you want to update"
// @Param body body models.User true "body for user content"
// @Success 200 {object} models.User
// @Failure 403 :uid is not int
// @router /:uid [put]
func (u *UserController) Put() {
uid := u.GetString(":uid")
if uid != "" {
var user models.User
json.Unmarshal(u.Ctx.Input.RequestBody, &user)
uu, err := models.UpdateUser(uid, &user)
if err != nil {
u.Data["json"] = err.Error()
} else {
u.Data["json"] = uu
}
}
u.ServeJSON()
}
// @Title Delete
// @Description delete the user
// @Param uid path string true "The uid you want to delete"
// @Success 200 {string} delete success!
// @Failure 403 uid is empty
// @router /:uid [delete]
func (u *UserController) Delete() {
uid := u.GetString(":uid")
models.DeleteUser(uid)
u.Data["json"] = "delete success!"
u.ServeJSON()
}
// @Title Login
// @Description Logs user into the system
// @Param username query string true "The username for login"
// @Param password query string true "The password for login"
// @Success 200 {string} login success
// @Failure 403 user not exist
// @router /login [get]
func (u *UserController) Login() {
username := u.GetString("username")
password := u.GetString("password")
if models.Login(username, password) {
u.Data["json"] = "login success"
} else {
u.Data["json"] = "user not exist"
}
u.ServeJSON()
}
// @Title logout
// @Description Logs out current logged in user session
// @Success 200 {string} logout success
// @router /logout [get]
func (u *UserController) Logout() {
u.Data["json"] = "logout success"
u.ServeJSON()
}
module Todo
go 1.22
require github.com/beego/beego/v2 v2.3.0
require github.com/smartystreets/goconvey v1.6.4
require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/prometheus/client_golang v1.19.0 // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.48.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
golang.org/x/crypto v0.24.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/text v0.16.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment