store wise orders change

This commit is contained in:
Suriya
2026-07-21 09:25:30 +05:30
parent 36f9cf86e7
commit b7af245910
6 changed files with 114 additions and 20 deletions

View File

@@ -209,6 +209,14 @@ func (ctl *DeliveriesController) GetDeliveries(c *fiber.Ctx) error {
stat := c.Query("status")
keyword := c.Query("keyword")
if pid == 0 && tid == 0 && uid == 0 && cid == 0 && aid == 0 && aud == 0 {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"code": http.StatusBadRequest,
"message": "At least one of tenantid, partnerid, customerid, applocationid, userid or appuserid is required",
"status": false,
})
}
info := models.DeliveryQuery{
Partnerid: pid,
Tenantid: tid,

View File

@@ -100,8 +100,13 @@ func (ctl *OrderController) GetOrders(c *fiber.Ctx) error {
orders, err = ctl.orderService.GetUserOrders(stat, fdate, tdate, uid, pageno, pagesize, keyword)
} else {
// All orders
orders, err = ctl.orderService.GetAllOrders(stat, fdate, tdate, pageno, pagesize, keyword)
// No scoping id supplied (tenantid/partnerid/customerid/applocationid/appuserid).
// Refuse instead of silently returning every order in the database.
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"status": false,
"code": http.StatusBadRequest,
"message": "At least one of tenantid, partnerid, customerid, applocationid or appuserid is required",
})
}
if err != nil {
@@ -129,6 +134,14 @@ func (ctl *OrderController) GetOrderSummary(c *fiber.Ctx) error {
fdate := c.Query("fromdate")
tdate := c.Query("todate")
if tid == 0 && pid == 0 && cid == 0 && lid == 0 {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"code": http.StatusBadRequest,
"message": "At least one of tenantid, partnerid, customerid or locationid is required",
"status": false,
})
}
data, err := ctl.orderService.GetOrderSummary(tid, pid, cid, lid, fdate, tdate)
if err != nil {
return c.Status(http.StatusConflict).JSON(fiber.Map{
@@ -151,6 +164,14 @@ func (ctl *OrderController) GetlocationOrderSummary(c *fiber.Ctx) error {
tenantIDStr := c.Query("tenantid")
tenantID, _ := strconv.Atoi(tenantIDStr)
if tenantID == 0 {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"status": false,
"code": http.StatusBadRequest,
"message": "tenantid is required",
})
}
data, err := ctl.orderService.GetLocationOrderSummary(tenantID)
if err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{
@@ -336,6 +357,14 @@ func (ctl *OrderController) GetCustomerOrders(c *fiber.Ctx) error {
}
offset := (pageNo - 1) * pageSize
if customerID == "" {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"code": http.StatusBadRequest,
"status": false,
"message": "customerid is required",
})
}
orders, err := ctl.orderService.GetCustomerOrdersv3(customerID, tenantID, moduleID, fromDate, toDate, orderStatus, keyword, pageSize, offset)
if err != nil {
log.Println("GetCustomerOrders error:", err)

View File

@@ -21,6 +21,15 @@ func (ctl *PartnerController) GetActiveRiders(c *fiber.Ctx) error {
aid, _ := strconv.Atoi(c.Query("applocationid"))
uid, _ := strconv.Atoi(c.Query("userid"))
tid, _ := strconv.Atoi(c.Query("tenantid"))
if pid == 0 && aid == 0 && uid == 0 && tid == 0 {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"status": false,
"code": http.StatusBadRequest,
"message": "At least one of tenantid, partnerid, applocationid or userid is required",
})
}
result, err := ctl.partnerService.GetActiveRiders(pid, aid, uid, tid)
if err != nil {
@@ -113,7 +122,15 @@ func (ctl *PartnerController) GetRiderLogs(c *fiber.Ctx) error {
pid, _ := strconv.Atoi(c.Query("partnerid"))
aid, _ := strconv.Atoi(c.Query("applocationid"))
fdate := c.Query("fromdate")
tdate := c.Query("fromdate")
tdate := c.Query("todate")
if pid == 0 && aid == 0 {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"status": false,
"code": http.StatusBadRequest,
"message": "At least one of partnerid or applocationid is required",
})
}
data, err := ctl.partnerService.GetRiderLogs(pid, aid, fdate, tdate)

View File

@@ -25,6 +25,14 @@ func (ctl *UserController) GetAllUsers(c *fiber.Ctx) error {
pagesize, _ := strconv.Atoi(c.Query("pagesize", "10"))
keyword := c.Query("keyword", "")
if tenantID == 0 {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{
"code": http.StatusBadRequest,
"message": "tenantid is required",
"status": false,
})
}
users, err := ctl.userService.GetAllUsers(roleID, tenantID, pageno, pagesize, keyword)
if err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{

View File

@@ -26,6 +26,11 @@ var catalogueBrandTables = map[string]string{
var ErrUnknownBrand = errors.New("unknown brand")
// ErrCatalogueDBUnavailable is returned by every method below when the
// catalogue DB connection wasn't configured (db.CatalogueDB is nil), so
// callers get a normal error instead of a nil-pointer panic.
var ErrCatalogueDBUnavailable = errors.New("catalogue database is not configured")
// catalogueProductColumns casts the text[] columns to text: GORM's raw
// scan-into-struct silently drops slice-kind destination fields, so they
// are read as text here and parsed into []string in scanProductRow.
@@ -108,6 +113,10 @@ func tableForBrand(brand string) (string, error) {
}
func (r *catalogueRepository) GetBrands() ([]models.CatalogueBrand, error) {
if r.db == nil {
return nil, ErrCatalogueDBUnavailable
}
var brands []models.CatalogueBrand
for brand, table := range catalogueBrandTables {
@@ -122,6 +131,10 @@ func (r *catalogueRepository) GetBrands() ([]models.CatalogueBrand, error) {
}
func (r *catalogueRepository) GetCategories(brand string) ([]string, error) {
if r.db == nil {
return nil, ErrCatalogueDBUnavailable
}
table, err := tableForBrand(brand)
if err != nil {
return nil, err
@@ -141,6 +154,10 @@ func (r *catalogueRepository) GetCategories(brand string) ([]string, error) {
// everything, then let the store owner choose" — brand/category/keyword are
// optional narrowing filters on top of that, not prerequisites.
func (r *catalogueRepository) GetProducts(brand, category, keyword string, pageno, pagesize int) ([]models.CatalogueProduct, int64, error) {
if r.db == nil {
return nil, 0, ErrCatalogueDBUnavailable
}
if pagesize <= 0 {
pagesize = 20
}
@@ -253,6 +270,10 @@ func catalogueWhereClause(category, keyword string) (string, []interface{}) {
}
func (r *catalogueRepository) GetProductBySKU(brand, sku string) (*models.CatalogueProduct, error) {
if r.db == nil {
return nil, ErrCatalogueDBUnavailable
}
table, err := tableForBrand(brand)
if err != nil {
return nil, err
@@ -276,6 +297,10 @@ func (r *catalogueRepository) GetProductBySKU(brand, sku string) (*models.Catalo
}
func (r *catalogueRepository) GetProductByID(brand string, id int64) (*models.CatalogueProduct, error) {
if r.db == nil {
return nil, ErrCatalogueDBUnavailable
}
table, err := tableForBrand(brand)
if err != nil {
return nil, err

View File

@@ -4,7 +4,6 @@ import (
"fmt"
"log"
"nearle/models"
"strconv"
"time"
"gorm.io/gorm"
@@ -599,7 +598,6 @@ func (r *orderRepository) GetAllOrders(stat, fdate, tdate string, pageno, pagesi
func (r *orderRepository) GetOrderSummary(tid, pid, cid, lid int, fdate, tdate string) ([]models.Ordersummarydaily, error) {
var data []models.Ordersummarydaily
var q1 string
// Base SELECT
const base = `
@@ -616,22 +614,31 @@ func (r *orderRepository) GetOrderSummary(tid, pid, cid, lid int, fdate, tdate s
INNER JOIN tenants t ON o.tenantid = t.tenantid
`
// Apply filters
if tid != 0 {
q1 = base + " WHERE o.configid = 1 AND o.tenantid = " + strconv.Itoa(tid)
} else if pid != 0 {
q1 = base + " WHERE o.configid = 1 AND o.partnerid = " + strconv.Itoa(pid)
} else if cid != 0 {
q1 = base + " WHERE o.configid = 1 AND o.customerid = " + strconv.Itoa(cid)
} else if lid != 0 {
q1 = base + " WHERE o.configid = 1 AND o.locationid = " + strconv.Itoa(lid)
} else {
q1 = base + " WHERE o.configid = 1"
var params []interface{}
var q1 string
// Apply filters (at least one scoping id is required — enforced by the caller)
switch {
case tid != 0:
q1 = base + " WHERE o.configid = 1 AND o.tenantid = ?"
params = append(params, tid)
case pid != 0:
q1 = base + " WHERE o.configid = 1 AND o.partnerid = ?"
params = append(params, pid)
case cid != 0:
q1 = base + " WHERE o.configid = 1 AND o.customerid = ?"
params = append(params, cid)
case lid != 0:
q1 = base + " WHERE o.configid = 1 AND o.locationid = ?"
params = append(params, lid)
default:
return nil, fmt.Errorf("at least one of tenantid, partnerid, customerid or locationid is required")
}
// Date filter
if fdate != "" && tdate != "" {
q1 += " AND o.orderdate::date BETWEEN '" + fdate + "' AND '" + tdate + "'"
q1 += " AND o.orderdate::date BETWEEN ? AND ?"
params = append(params, fdate, tdate)
}
// Group by tenant
@@ -640,7 +647,7 @@ func (r *orderRepository) GetOrderSummary(tid, pid, cid, lid int, fdate, tdate s
// Debug
fmt.Println("Executing GetOrderSummary query:", q1)
if err := r.db.Raw(q1).Scan(&data).Error; err != nil {
if err := r.db.Raw(q1, params...).Scan(&data).Error; err != nil {
return nil, err
}