mock shop page: can delete listings
This commit is contained in:
@@ -44,6 +44,7 @@ func Routes(
|
||||
mockShops := platformGroup.Group("/shops/mocks/:shop-id")
|
||||
mockShops.POST("/listings", response.Handler(as.addMockListing))
|
||||
mockShops.PUT("/listings/:listing-id", response.Handler(as.updateMockListing))
|
||||
mockShops.DELETE("/listings/:listing-id", response.Handler(as.deleteMockListing))
|
||||
|
||||
syncGroups := r.Group("/:acctID/inventory/sync-groups")
|
||||
syncGroups.POST("", pub.Publish("/:acctID/inventory/sync-groups"), response.Handler(as.saveNewSyncGroup))
|
||||
@@ -344,12 +345,43 @@ func (s *accountSubrouter) updateMockListing(c *gin.Context) (response.Response,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to update new listing: %w", err)
|
||||
return nil, fmt.Errorf("failed to update listing: %w", err)
|
||||
}
|
||||
|
||||
return response.StatusOK(), nil
|
||||
}
|
||||
|
||||
// DELETE /:acctID/platforms/:platform/shops/mocks/:shop-id/listings/:listing-id
|
||||
func (s *accountSubrouter) deleteMockListing(c *gin.Context) (response.Response, error) {
|
||||
acctID := auth.GetIdentity(c).Account.AccountID
|
||||
|
||||
var (
|
||||
platform accounts.Platform
|
||||
shopID string
|
||||
listingID string
|
||||
)
|
||||
|
||||
err := param.Path("platform", param.Platform(&platform)).
|
||||
Path("shop-id", param.Text(&shopID)).
|
||||
Path("listing-id", param.Text(&listingID)).
|
||||
Unmarshal(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = s.accts.DeleteMockListing(
|
||||
c,
|
||||
accounts.NewAccountIDs(acctID).
|
||||
ShopID(platform, shopID).
|
||||
ListingID(listingID),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to delete listing: %w", err)
|
||||
}
|
||||
|
||||
return response.StatusNoContent(), nil
|
||||
}
|
||||
|
||||
func lowerSnakeCase(s accounts.Platform) string {
|
||||
return strings.ToLower(strings.Join(strings.Split(string(s), " "), "_"))
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"ruben/inventory2/internal/consts"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
@@ -46,11 +47,23 @@ func HandleErrors(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
if !ok {
|
||||
var err error
|
||||
var (
|
||||
err error
|
||||
status int
|
||||
statusFound bool
|
||||
)
|
||||
for _, e := range c.Errors {
|
||||
err = errors.Join(err, e)
|
||||
if !statusFound {
|
||||
status, statusFound = mapErrorConstantsToStatus(e)
|
||||
}
|
||||
}
|
||||
c.String(http.StatusInternalServerError, err.Error())
|
||||
|
||||
if !statusFound {
|
||||
status = http.StatusInternalServerError
|
||||
}
|
||||
|
||||
c.String(status, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
@@ -131,3 +144,24 @@ func GetStatusFromError(err error) int {
|
||||
|
||||
return status
|
||||
}
|
||||
|
||||
func mapErrorConstantsToStatus(err error) (int, bool) {
|
||||
for {
|
||||
switch err {
|
||||
case consts.ErrBadRequest:
|
||||
return http.StatusBadRequest, true
|
||||
case consts.ErrNotFound:
|
||||
return http.StatusNotFound, true
|
||||
case consts.ErrConflict:
|
||||
return http.StatusConflict, true
|
||||
default:
|
||||
werr, ok := err.(interface {
|
||||
Unwrap() error
|
||||
})
|
||||
if !ok {
|
||||
return 0, false
|
||||
}
|
||||
err = werr.Unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user