Files
doormile_backend/dto/admin.go
Suriya c272a33fa6 feat: 14 new endpoints closing jupiter->Doormile API gaps, plus two tenant-scoping bug fixes
New endpoints:
- Admin: partner CRUD (GET/POST /admin/partners, GET/PUT/DELETE
  /admin/partners/:id), bulk express booking create
  (POST /admin/expressbooking/bulk), bulk cancel
  (POST /admin/bookings/bulk-cancel), reports (GET /admin/reports),
  password change (PUT /admin/profile/password), miler notify
  (POST /admin/milers/:id/notify)
- Miler: PIN reset (POST /miler/reset-pin), cancel assignment
  (POST /miler/bookings/:bookingid/cancel), skip delivery
  (POST /miler/consignments/:id/skip)
- Hub: batch assign (POST /hub/bookings/batch-assign) - greedy
  nearest-rider queue clearing, capped per rider

Bug fixes:
- BookingPickupComplete now sets Consignment.Tenantid from the
  booking's tenant instead of the completing miler's own tenant
  (fixes cross-tenant shipment mis-attribution)
- GetHubUnassignedBookings/GetHubBookingsRange now scoped via
  scopeBookingsToOwnTenant (fixes partner hub staff seeing other
  tenants' bookings)

Also: CRM booking routes renamed to expressbooking to end the naming
collision with the separate CRM clients feature; PickupBooking gains
nullable Tenantid; adds CLAUDE.md project memory.

Verified: go build ./... and go vet ./... both clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 12:22:39 +05:30

110 lines
3.6 KiB
Go

package dto
import "time"
type TenantCreateRequest struct {
Tenantname string `json:"tenantname"`
Primaryemail string `json:"primaryemail"`
Primarycontact string `json:"primarycontact"`
Status string `json:"status"`
}
type TenantLocationCreateRequest struct {
Address string `json:"address"`
City string `json:"city"`
State string `json:"state"`
Pincode string `json:"pincode"`
Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"`
Isprimary bool `json:"isprimary"`
Status string `json:"status"`
}
type TenantCustomerCreateRequest struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
Phone string `json:"phone"`
Email string `json:"email"`
}
type PartnerCreateRequest struct {
Partnername string `json:"partnername"`
Partnertypeid int `json:"partnertypeid"`
Contactno string `json:"contactno"`
Status string `json:"status"`
}
type HubCreateRequest struct {
Hubname string `json:"hubname"`
Hubtype string `json:"hubtype"` // sorting_center, delivery_hub
Applocationid int `json:"applocationid"`
Contactno string `json:"contactno"`
Address string `json:"address"`
Latitude float64 `json:"latitude"`
Longitude float64 `json:"longitude"`
Pincode string `json:"pincode"`
Status string `json:"status"`
}
type VehicleCreateRequest struct {
Vehicleno string `json:"vehicleno"`
Vehicletype string `json:"vehicletype"`
Maxweight float64 `json:"maxweight"`
Maxvolume float64 `json:"maxvolume"`
Partnerid *int `json:"partnerid"`
Batterypercentage int `json:"batterypercentage"`
Status string `json:"status"`
}
type MilerCreateRequest struct {
Authname string `json:"authname"`
Email string `json:"email"`
Contactno string `json:"contactno"`
Password string `json:"password"`
Displayname string `json:"displayname"`
Defaultvehicletype string `json:"defaultvehicletype"`
Applocationid int `json:"applocationid"`
}
type PricingCreateRequest struct {
Tenantid int `json:"tenantid"`
Applocationid int `json:"applocationid"`
Vehicletype string `json:"vehicletype"`
Baseprice float64 `json:"baseprice"`
Baseweight float64 `json:"baseweight"`
Priceperkg float64 `json:"priceperkg"`
Basedistance float64 `json:"basedistance"`
Priceperkm float64 `json:"priceperkm"`
Handlingcharges float64 `json:"handlingcharges"`
Effectivefrom time.Time `json:"effectivefrom"`
Effectiveto time.Time `json:"effectiveto"`
Currency string `json:"currency"`
Priority int `json:"priority"`
Status string `json:"status"`
}
type TripsheetCreateRequest struct {
Sourcehubid int `json:"sourcehubid"`
Destinationhubid int `json:"destinationhubid"`
Vehicleid *int `json:"vehicleid"`
Driveruserid *int `json:"driveruserid"`
}
type TripsheetItemAddRequest struct {
Consignmentid int `json:"consignmentid"`
}
type ExceptionCreateRequest struct {
Consignmentid int `json:"consignmentid"`
Tripsheetid *int `json:"tripsheetid"`
Hubid *int `json:"hubid"`
Exceptiontype string `json:"exceptiontype"` // Lost, Damaged, Misrouted, Receiver_Refused, Missing_Contents, Undeliverable
Severity string `json:"severity"` // Low, Medium, High, Critical
Description string `json:"description"`
}
type ExceptionResolveRequest struct {
Resolution string `json:"resolution"`
Status string `json:"status"` // Resolved, Closed
}