Fix 9 backend bugs: pricing, zones, geocoding, device tokens, assignment retry
- pricingid null: lookupDoormilePrice now returns matched rule ID; wired to BookingServiceOption.Pricingid - Zone rename: Interstate→Regional, OtherState→National throughout (code + DB migrated) - Zone from pincodes: CheckPrice now accepts pickup_pincode+delivery_pincode and auto-resolves zone - Delivery geocoding: pincodeToLatLon() maps 3-digit prefix to city coords when lat/lon are 0 - Device tokens: device_token field added to PinVerify DTOs; saved on both customer and miler login - Assignment retry: RejectMilerAssignment now re-triggers AssignCustomerMiler/AssignCRMMiler immediately - Provider empty B2C: defaults to Doormile when no pricing provider row matches - City gate 422→400: StatusUnprocessableEntity corrected to StatusBadRequest - Miler GPS 0,0: WS tracking falls back to MilerProfile DB coords when Redis key is expired Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,7 @@ import (
|
||||
"doormile/constants"
|
||||
"doormile/db"
|
||||
"doormile/dto"
|
||||
"doormile/internal/assignment"
|
||||
"doormile/internal/notify"
|
||||
"doormile/models"
|
||||
"doormile/utils"
|
||||
@@ -114,6 +115,10 @@ func VerifyMilerPin(cfg *config.Config) fiber.Handler {
|
||||
}
|
||||
db.DB.Create(&profile)
|
||||
}
|
||||
if req.DeviceToken != "" && profile.Devicetoken != req.DeviceToken {
|
||||
profile.Devicetoken = req.DeviceToken
|
||||
db.DB.Model(&profile).Update("device_token", req.DeviceToken)
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{
|
||||
"success": true,
|
||||
@@ -364,18 +369,18 @@ func RejectMilerAssignment(c *fiber.Ctx) error {
|
||||
|
||||
tx := db.DB.Begin()
|
||||
|
||||
var assignment models.BookingAssignment
|
||||
if err := tx.Where("bookingassignmentid = ? AND mileruserid = ?", assignmentID, milerUserID).First(&assignment).Error; err != nil {
|
||||
var ba models.BookingAssignment
|
||||
if err := tx.Where("bookingassignmentid = ? AND mileruserid = ?", assignmentID, milerUserID).First(&ba).Error; err != nil {
|
||||
tx.Rollback()
|
||||
return utils.NotFound(c, "assignment not found")
|
||||
}
|
||||
|
||||
assignment.Assignmentstatus = constants.AssignmentRejected
|
||||
assignment.Remarks = c.Query("reason", "Rejected by rider")
|
||||
tx.Save(&assignment)
|
||||
ba.Assignmentstatus = constants.AssignmentRejected
|
||||
ba.Remarks = c.Query("reason", "Rejected by rider")
|
||||
tx.Save(&ba)
|
||||
|
||||
var booking models.PickupBooking
|
||||
if err := tx.First(&booking, assignment.Bookingid).Error; err == nil {
|
||||
if err := tx.First(&booking, ba.Bookingid).Error; err == nil {
|
||||
booking.Status = constants.BookingCreated
|
||||
booking.Assignedmileruserid = nil
|
||||
booking.Updatedat = time.Now()
|
||||
@@ -385,6 +390,15 @@ func RejectMilerAssignment(c *fiber.Ctx) error {
|
||||
tx.Model(&models.MilerProfile{}).Where("userid = ?", milerUserID).Update("availabilitystatus", constants.MilerAvailable)
|
||||
|
||||
tx.Commit()
|
||||
|
||||
if booking.Bookingid != 0 {
|
||||
if booking.Bookingsource == "CRM_Console" {
|
||||
go assignment.AssignCRMMiler(booking.Bookingid)
|
||||
} else {
|
||||
go assignment.AssignCustomerMiler(booking.Bookingid)
|
||||
}
|
||||
}
|
||||
|
||||
return utils.Message(c, "assignment rejected")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user