From b035b7ef309efa1105e501d5ca4a1b5ca3d3024f Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 7 Feb 2025 17:32:34 -0500 Subject: [PATCH] Adding ability to delete sheet rows --- .../Helpers/GoogleRequestHelpersTests.cs | 13 ++-- .../Helpers/GoogleRequestHelpers.cs | 40 +++++++++--- .../Managers/GoogleSheetManager.cs | 62 +++++++++++++++++++ 3 files changed, 99 insertions(+), 16 deletions(-) diff --git a/RaptorSheets.Core.Tests/Helpers/GoogleRequestHelpersTests.cs b/RaptorSheets.Core.Tests/Helpers/GoogleRequestHelpersTests.cs index 310ab64..1e82d6a 100644 --- a/RaptorSheets.Core.Tests/Helpers/GoogleRequestHelpersTests.cs +++ b/RaptorSheets.Core.Tests/Helpers/GoogleRequestHelpersTests.cs @@ -72,17 +72,18 @@ public void GenerateDeleteRequest_ShouldReturnValidRequest() { // Arrange int sheetId = 1; - int rowId = 2; + int[] rowIds = [2]; + var rowList = rowIds.ToList(); // Act - var result = GoogleRequestHelpers.GenerateDeleteRequest(sheetId, rowId); + var result = GoogleRequestHelpers.GenerateBatchDeleteRequest(sheetId, rowList); // Assert Assert.NotNull(result); - Assert.NotNull(result.DeleteDimension); - Assert.Equal(sheetId, result.DeleteDimension.Range.SheetId); - Assert.Equal(rowId, result.DeleteDimension.Range.StartIndex); - Assert.Equal(rowId + 1, result.DeleteDimension.Range.EndIndex); + Assert.NotNull(result.Requests[0].DeleteDimension); + Assert.Equal(sheetId, result.Requests[0].DeleteDimension.Range.SheetId); + Assert.Equal(rowIds[0], result.Requests[0].DeleteDimension.Range.StartIndex); + Assert.Equal(rowIds[0] + 1, result.Requests[0].DeleteDimension.Range.EndIndex); } [Fact] diff --git a/RaptorSheets.Core/Helpers/GoogleRequestHelpers.cs b/RaptorSheets.Core/Helpers/GoogleRequestHelpers.cs index 2683aa5..4f96440 100644 --- a/RaptorSheets.Core/Helpers/GoogleRequestHelpers.cs +++ b/RaptorSheets.Core/Helpers/GoogleRequestHelpers.cs @@ -56,20 +56,40 @@ public static Request GenerateBandingRequest(SheetModel sheet) return new Request { AddBanding = addBandingRequest }; } - public static Request GenerateDeleteRequest(int sheetId, int rowId) + public static BatchUpdateSpreadsheetRequest GenerateBatchDeleteRequest(int sheetId, List rowIds) { - var deleteDimension = new DeleteDimensionRequest + var deleteRequests = GenerateDeleteRequest(sheetId, rowIds); + + var batchUpdateRequest = new BatchUpdateSpreadsheetRequest { - Range = new DimensionRange - { - Dimension = DimensionEnum.ROWS.GetDescription(), - SheetId = sheetId, - StartIndex = rowId, - EndIndex = rowId + 1 - } + Requests = deleteRequests.Select(x => new Request { DeleteDimension = x.DeleteDimension }).ToList() }; - return new Request { DeleteDimension = deleteDimension }; + return batchUpdateRequest; + } + + public static List GenerateDeleteRequest(int sheetId, List rowIds) + { + var requests = new List(); + + foreach (var rowId in rowIds) + { + var deleteDimension = new DeleteDimensionRequest + { + Range = new DimensionRange + { + Dimension = DimensionEnum.ROWS.GetDescription(), + SheetId = sheetId, + StartIndex = rowId, + EndIndex = rowId + 1 + } + }; + + requests.Add(new Request { DeleteDimension = deleteDimension }); + } + + + return requests; } public static Request GenerateProtectedRangeForHeaderOrSheet(SheetModel sheet) diff --git a/RaptorSheets.Gig/Managers/GoogleSheetManager.cs b/RaptorSheets.Gig/Managers/GoogleSheetManager.cs index 6a6f52a..5cde94c 100644 --- a/RaptorSheets.Gig/Managers/GoogleSheetManager.cs +++ b/RaptorSheets.Gig/Managers/GoogleSheetManager.cs @@ -151,6 +151,68 @@ public async Task AppendSheetData(List sheets, SheetEnti return sheetEntity; } + public async Task DeleteSheetData(List sheets, SheetEntity sheetEntity, ActionTypeEnum actionType) + { + var messageType = MessageTypeEnum.DELETE_DATA; + var sheetInfo = await _googleSheetService.GetSheetInfo(); + + foreach (var sheet in sheets) + { + var headers = (await _googleSheetService.GetSheetData(sheet.GetDescription()))?.Values[0]; + var sheetId = sheetInfo?.Sheets?.FirstOrDefault(x => x.Properties.Title == sheet.GetDescription())?.Properties.SheetId; + + if (headers == null || sheetId == null) + continue; + + List rowIds = []; + + switch (sheet) + { + case SheetEnum.SHIFTS: + foreach (var shift in sheetEntity.Shifts) + { + rowIds.Add(shift.Id); + } + sheetEntity.Messages.Add(MessageHelpers.CreateInfoMessage($"{actionType} data: {sheet.UpperName()}", messageType)); + break; + + case SheetEnum.TRIPS: + foreach (var trip in sheetEntity.Trips) + { + rowIds.Add(trip.Id); + } + sheetEntity.Messages.Add(MessageHelpers.CreateInfoMessage($"{actionType} data: {sheet.UpperName()}", messageType)); + break; + default: + // Unsupported sheet. + sheetEntity.Messages.Add(MessageHelpers.CreateErrorMessage($"{actionType} data: {sheet.UpperName()} not supported", messageType)); + break; + } + + if (rowIds.Any()) + { + var success = false; + var batchRequest = new BatchUpdateSpreadsheetRequest + { + Requests = GoogleRequestHelpers.GenerateDeleteRequest((int)sheetId, rowIds) + }; + + success = (await _googleSheetService.BatchUpdateSpreadsheet(batchRequest)) != null; + + if (success) + sheetEntity.Messages.Add(MessageHelpers.CreateInfoMessage($"{actionType} data: {sheet.UpperName()}", messageType)); + else + sheetEntity.Messages.Add(MessageHelpers.CreateErrorMessage($"Unable to {actionType} data: {sheet.UpperName()}", messageType)); + } + else + { + sheetEntity.Messages.Add(MessageHelpers.CreateWarningMessage($"No data to {actionType}: {sheet.UpperName()}", messageType)); + } + } + + return sheetEntity; + } + public async Task UpdateSheetData(List sheets, SheetEntity sheetEntity, ActionTypeEnum actionType) { var messageType = MessageTypeEnum.UPDATE_DATA;