using System.Globalization; using Google.Apis.Sheets.v4; using Google.Apis.Sheets.v4.Data; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using WebAPI.Models; namespace WebAPI.Controllers { public class LogsController : Controller { private SpreadsheetsResource.ValuesResource? googleSheetValues; private GoogleDriveHelper googleDriveHelper; private readonly IConfiguration configuration; public LogsController( GoogleSheetsHelper _googleSheetsHelper, GoogleDriveHelper _googleDriveHelper, IConfiguration _configuration) { if (_googleSheetsHelper.Service is not null) { googleSheetValues = _googleSheetsHelper.Service.Spreadsheets.Values; } googleDriveHelper = _googleDriveHelper; configuration = _configuration; } public void AddEntry(LogEntry entry) { if (googleSheetValues is null) { throw new Exception("Google Sheets API not initialized"); } String type; switch (entry.LogType) { case LogType.import: type = "Import"; break; case LogType.backup: type = "Backup"; break; case LogType.process: type = "Process"; break; default: type = "Other"; // should never happen break; } var response = googleSheetValues.Get(configuration["appLogsFile"], $"{type}!A:A").Execute(); var data = response.Values; int row = 1; if (data != null) { row = data.Count + 1; } var range = $"{type}!A{row}:D{row}"; List logRow = new List { entry.CreatedAt.ToString(new CultureInfo("pl-PL")), entry.Type.ToString(), entry.Title!, entry.Message! }; ValueRange valueRange = new ValueRange() { Values = new IList[] { logRow }}; var updateRequest = googleSheetValues.Update(valueRange, configuration["appLogsFile"], range); updateRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW; updateRequest.Execute(); } } }