mock sync group editing: edit, save, and delete listings

This commit is contained in:
2026-02-25 22:41:36 -07:00
parent ae031411b8
commit 85817a4adb
12 changed files with 1533 additions and 239 deletions
+119 -2
View File
@@ -58,8 +58,17 @@ func Routes(
mockSyncGroups := syncGroups.Group("/mock")
mockSyncGroups.POST("", pub.Publish("/:acctID/inventory/sync-groups/mock"), response.Handler(as.saveNewMockSyncGroup))
mockSyncGroups.DELETE("/:syncGroupID", pub.Publish("/:acctID/inventory/sync-groups/mock"), response.Handler(as.deleteMockSyncGroup))
mockSyncGroups.PUT("/editing", pub.Publish("/:acctID/inventory/sync-groups/mock/editing"), response.Handler(as.selectMockSyncGroupForEditing))
mockSyncGroups.DELETE("/editing", pub.Publish("/:acctID/inventory/sync-groups/mock/editing"), response.Handler(as.cancelMockSyncGroupEdits))
setMockSyncGroupForEditingEndpoints := mockSyncGroups.Group("/editing", pub.Publish("/:acctID/inventory/sync-groups/mock/editing"))
setMockSyncGroupForEditingEndpoints.PUT("", response.Handler(as.selectMockSyncGroupForEditing))
setMockSyncGroupForEditingEndpoints.POST("", response.Handler(as.saveMockSyncGroupBeingEdited))
setMockSyncGroupForEditingEndpoints.DELETE("", response.Handler(as.cancelMockSyncGroupEdits))
setMockSyncGroupForEditingEndpoints.POST("/listings", response.Handler(as.addListingToMockSyncGroupBeingEdited))
mockSyncGroupBeingEdited := mockSyncGroups.Group("/:syncGroupID/editing", pub.Publish("/:acctID/inventory/sync-groups/mock/:syncGroupID/editing"))
mockSyncGroupBeingEdited.PUT("/listings/:orderIndex/shop", response.Handler(as.setShopInListingInMockSyncGroupBeingEdited))
mockSyncGroupBeingEdited.PUT("/listings/:orderIndex/listing", response.Handler(as.setListingInListingInMockSyncGroupBeingEdited))
mockSyncGroupBeingEdited.DELETE("/listings/:orderIndex", response.Handler(as.deleteListingInListingInMockSyncGroupBeingEdited))
mockDraftListings := mockSyncGroups.Group("/draft/listings", pub.Publish("/:acctID/inventory/sync-groups/mock/draft/listings"))
mockDraftListings.POST("", response.Handler(as.createMockSyncGroupListingDraft))
@@ -571,6 +580,31 @@ func (s *accountSubrouter) selectMockSyncGroupForEditing(c *gin.Context) (respon
return response.StatusOK(), nil
}
// POST /:acctID/inventory/sync-groups/mock/editing
func (s *accountSubrouter) saveMockSyncGroupBeingEdited(c *gin.Context) (response.Response, error) {
r := c.Request
ctx := r.Context()
acctID := auth.GetIdentity(ctx).Account.AccountID
syncGroupID, err := s.accts.SaveMockSyncGroupBeingEdited(ctx, acctID)
if err != nil {
return nil, response.Errorf("failed to save mock sync group being edited: %w", response.ErrorFromConstant(err))
}
// emit events indicating sync groups being edited and no longer being edited
if err := s.pub.Push(
c,
acctID,
fmt.Sprintf("accounts_%d_inventory_sync-groups_mock_%d", acctID, syncGroupID),
fmt.Sprintf("accounts_%d_inventory_sync-groups_mock_%d_editing", acctID, syncGroupID),
); err != nil {
s.log.Errorf("failed to publish mock sync group editing events: %v", err)
}
return response.StatusOK(), nil
}
// DELETE /:acctID/inventory/sync-groups/mock/editing
func (s *accountSubrouter) cancelMockSyncGroupEdits(c *gin.Context) (response.Response, error) {
r := c.Request
@@ -593,6 +627,89 @@ func (s *accountSubrouter) cancelMockSyncGroupEdits(c *gin.Context) (response.Re
return response.StatusOK(), nil
}
// POST /:acctID/inventory/sync-groups/mock/editing/listings
func (s *accountSubrouter) addListingToMockSyncGroupBeingEdited(c *gin.Context) (response.Response, error) {
r := c.Request
ctx := r.Context()
acctID := auth.GetIdentity(ctx).Account.AccountID
if _, _, err := s.accts.AddListingToMockSyncGroupBeingEdited(ctx, acctID); err != nil {
return nil, response.Errorf("failed to add listing to mock sync group being edited: %w", response.ErrorFromConstant(err))
}
return response.StatusCreated(), nil
}
// PUT /:acctID/inventory/sync-groups/mock/editing/listings/:orderIndex/shop
func (s *accountSubrouter) setShopInListingInMockSyncGroupBeingEdited(c *gin.Context) (response.Response, error) {
acctID := auth.GetIdentity(c).Account.AccountID
var (
syncGroupID int64
orderIndex int
platform accounts.Platform
shopID string
)
if err := param.Path("syncGroupID", param.Int64(&syncGroupID)).
Path("orderIndex", param.Int(&orderIndex)).
Form("platform", param.Platform(&platform)).
Form("shop-id", param.Text(&shopID)).
Unmarshal(c); err != nil {
return nil, err
}
if err := s.accts.SetShopInListingInMockSyncGroupBeingEdited(c, acctID, syncGroupID, orderIndex, platform, shopID); err != nil {
return nil, response.Errorf("failed to set shop in listing in mock sync group being edited: %w", response.ErrorFromConstant(err))
}
return response.StatusOK(), nil
}
// PUT /:acctID/inventory/sync-groups/mock/editing/listings/:orderIndex/listing
func (s *accountSubrouter) setListingInListingInMockSyncGroupBeingEdited(c *gin.Context) (response.Response, error) {
acctID := auth.GetIdentity(c).Account.AccountID
var (
syncGroupID int64
orderIndex int
listingID string
)
if err := param.Path("syncGroupID", param.Int64(&syncGroupID)).
Path("orderIndex", param.Int(&orderIndex)).
Form("listing-id", param.Text(&listingID)).
Unmarshal(c); err != nil {
return nil, err
}
if err := s.accts.SetListingInListingInMockSyncGroupBeingEdited(c, acctID, syncGroupID, orderIndex, listingID); err != nil {
return nil, response.Errorf("failed to set listing in listing in mock sync group being edited: %w", response.ErrorFromConstant(err))
}
return response.StatusOK(), nil
}
// DELETE /:acctID/inventory/sync-groups/mock/editing/listings/:orderIndex
func (s *accountSubrouter) deleteListingInListingInMockSyncGroupBeingEdited(c *gin.Context) (response.Response, error) {
acctID := auth.GetIdentity(c).Account.AccountID
var (
orderIndex int
)
if err := param.Path("orderIndex", param.Int(&orderIndex)).
Unmarshal(c); err != nil {
return nil, err
}
if err := s.accts.DeleteListingInListingInMockSyncGroupBeingEdited(c, acctID, orderIndex); err != nil {
return nil, response.Errorf("failed to delete listing in mock sync group being edited: %w", response.ErrorFromConstant(err))
}
return response.StatusOK(), nil
}
func lowerSnakeCase(s accounts.Platform) string {
return strings.ToLower(strings.Join(strings.Split(string(s), " "), "_"))
}