mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
Merge branch 'fix/master-data-internal-server-error' into 'development'
[FIX][BE]: code 500 when delete master data foreign to others table See merge request mbugroup/lti-api!147
This commit is contained in:
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS projects;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS projects;
|
||||
@@ -0,0 +1,20 @@
|
||||
-- Revert master data foreign keys to CASCADE delete (except FCR)
|
||||
ALTER TABLE nonstock_suppliers
|
||||
DROP CONSTRAINT IF EXISTS nonstock_suppliers_nonstock_id_fkey,
|
||||
DROP CONSTRAINT IF EXISTS nonstock_suppliers_supplier_id_fkey;
|
||||
|
||||
ALTER TABLE nonstock_suppliers
|
||||
ADD CONSTRAINT nonstock_suppliers_nonstock_id_fkey FOREIGN KEY (nonstock_id)
|
||||
REFERENCES nonstocks (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT nonstock_suppliers_supplier_id_fkey FOREIGN KEY (supplier_id)
|
||||
REFERENCES suppliers (id) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE product_suppliers
|
||||
DROP CONSTRAINT IF EXISTS product_suppliers_product_id_fkey,
|
||||
DROP CONSTRAINT IF EXISTS product_suppliers_supplier_id_fkey;
|
||||
|
||||
ALTER TABLE product_suppliers
|
||||
ADD CONSTRAINT product_suppliers_product_id_fkey FOREIGN KEY (product_id)
|
||||
REFERENCES products (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT product_suppliers_supplier_id_fkey FOREIGN KEY (supplier_id)
|
||||
REFERENCES suppliers (id) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,20 @@
|
||||
-- Update master data foreign keys to RESTRICT delete (except FCR)
|
||||
ALTER TABLE nonstock_suppliers
|
||||
DROP CONSTRAINT IF EXISTS nonstock_suppliers_nonstock_id_fkey,
|
||||
DROP CONSTRAINT IF EXISTS nonstock_suppliers_supplier_id_fkey;
|
||||
|
||||
ALTER TABLE nonstock_suppliers
|
||||
ADD CONSTRAINT nonstock_suppliers_nonstock_id_fkey FOREIGN KEY (nonstock_id)
|
||||
REFERENCES nonstocks (id) ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT nonstock_suppliers_supplier_id_fkey FOREIGN KEY (supplier_id)
|
||||
REFERENCES suppliers (id) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE product_suppliers
|
||||
DROP CONSTRAINT IF EXISTS product_suppliers_product_id_fkey,
|
||||
DROP CONSTRAINT IF EXISTS product_suppliers_supplier_id_fkey;
|
||||
|
||||
ALTER TABLE product_suppliers
|
||||
ADD CONSTRAINT product_suppliers_product_id_fkey FOREIGN KEY (product_id)
|
||||
REFERENCES products (id) ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT product_suppliers_supplier_id_fkey FOREIGN KEY (supplier_id)
|
||||
REFERENCES suppliers (id) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
@@ -2,11 +2,14 @@ package utils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"gitlab.com/mbugroup/lti-api.git/internal/common/validation"
|
||||
"gitlab.com/mbugroup/lti-api.git/internal/response"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/jackc/pgconn"
|
||||
pgconnv5 "github.com/jackc/pgx/v5/pgconn"
|
||||
)
|
||||
|
||||
func ErrorHandler(c *fiber.Ctx, err error) error {
|
||||
@@ -14,6 +17,10 @@ func ErrorHandler(c *fiber.Ctx, err error) error {
|
||||
return response.Error(c, fiber.StatusBadRequest, message, nil)
|
||||
}
|
||||
|
||||
if statusCode, message := mapPgError(err); statusCode != 0 {
|
||||
return response.Error(c, statusCode, message, nil)
|
||||
}
|
||||
|
||||
var fiberErr *fiber.Error
|
||||
if errors.As(err, &fiberErr) {
|
||||
return response.Error(c, fiberErr.Code, fiberErr.Message, nil)
|
||||
@@ -26,6 +33,37 @@ func NotFoundHandler(c *fiber.Ctx) error {
|
||||
return response.Error(c, fiber.StatusNotFound, "Endpoint Not Found", nil)
|
||||
}
|
||||
|
||||
func mapPgError(err error) (int, string) {
|
||||
code, message := getPgErrorDetails(err)
|
||||
if code == "" {
|
||||
return 0, ""
|
||||
}
|
||||
|
||||
switch code {
|
||||
case "23503":
|
||||
return fiber.StatusConflict, "Data tidak bisa dihapus karena masih digunakan oleh data lain."
|
||||
case "P0001":
|
||||
if strings.HasPrefix(message, "Cannot soft delete") {
|
||||
return fiber.StatusConflict, "Data tidak bisa dihapus karena masih digunakan oleh data lain."
|
||||
}
|
||||
}
|
||||
|
||||
return 0, ""
|
||||
}
|
||||
|
||||
func getPgErrorDetails(err error) (string, string) {
|
||||
var pgErr *pgconn.PgError
|
||||
if errors.As(err, &pgErr) {
|
||||
return pgErr.Code, pgErr.Message
|
||||
}
|
||||
|
||||
var pgErrV5 *pgconnv5.PgError
|
||||
if errors.As(err, &pgErrV5) {
|
||||
return pgErrV5.Code, pgErrV5.Message
|
||||
}
|
||||
|
||||
return "", ""
|
||||
}
|
||||
|
||||
func BadRequest(msg string) error {
|
||||
return fiber.NewError(fiber.StatusBadRequest, msg)
|
||||
|
||||
Reference in New Issue
Block a user