Skip to content

Commit

Permalink
Adding ability to delete sheet rows
Browse files Browse the repository at this point in the history
  • Loading branch information
khanjal committed Feb 7, 2025
1 parent c1830dd commit b035b7e
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 16 deletions.
13 changes: 7 additions & 6 deletions RaptorSheets.Core.Tests/Helpers/GoogleRequestHelpersTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
40 changes: 30 additions & 10 deletions RaptorSheets.Core/Helpers/GoogleRequestHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<int> 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<Request> GenerateDeleteRequest(int sheetId, List<int> rowIds)
{
var requests = new List<Request>();

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)
Expand Down
62 changes: 62 additions & 0 deletions RaptorSheets.Gig/Managers/GoogleSheetManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,68 @@ public async Task<SheetEntity> AppendSheetData(List<SheetEnum> sheets, SheetEnti
return sheetEntity;
}

public async Task<SheetEntity> DeleteSheetData(List<SheetEnum> 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<int> 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<SheetEntity> UpdateSheetData(List<SheetEnum> sheets, SheetEntity sheetEntity, ActionTypeEnum actionType)
{
var messageType = MessageTypeEnum.UPDATE_DATA;
Expand Down

0 comments on commit b035b7e

Please sign in to comment.