Creating events.

This commit is contained in:
Burak Kaan Köse
2025-12-30 11:59:54 +01:00
parent 70ac2d2bea
commit b81ab0ca15
13 changed files with 421 additions and 42 deletions
+7
View File
@@ -21,6 +21,13 @@ public enum FolderSynchronizerOperation
MarkFolderRead,
}
public enum CalendarSynchronizerOperation
{
CreateEvent,
UpdateEvent,
DeleteEvent,
}
// UI requests
public enum MailOperation
{
@@ -1,4 +1,5 @@
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Entities.Calendar;
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Interfaces;
@@ -63,3 +64,9 @@ public interface IFolderActionRequest : IRequestBase
FolderSynchronizerOperation Operation { get; }
}
public interface ICalendarActionRequest : IRequestBase
{
CalendarItem Item { get; }
CalendarSynchronizerOperation Operation { get; }
}
@@ -79,7 +79,7 @@ public interface ISynchronizationManager
/// <summary>
/// Creates a new synchronizer for a newly added account.
/// </summary>
Task<IWinoSynchronizerBase> CreateSynchronizerForAccountAsync(MailAccount account);
IWinoSynchronizerBase CreateSynchronizerForAccount(MailAccount account);
/// <summary>
/// Destroys the synchronizer for the given account.
@@ -1,4 +1,5 @@
using System.Threading.Tasks;
using Wino.Core.Domain.Models.Calendar;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.MailItem;
@@ -29,4 +30,10 @@ public interface IWinoRequestDelegator
/// </summary>
/// <param name="folderOperationPreperationRequest">Folder prep request.</param>
Task ExecuteAsync(FolderOperationPreperationRequest folderOperationPreperationRequest);
/// <summary>
/// Prepares and queues calendar action requests for proper synchronizers.
/// </summary>
/// <param name="calendarOperationPreparationRequest">Calendar preparation request.</param>
Task ExecuteAsync(CalendarOperationPreparationRequest calendarOperationPreparationRequest);
}
@@ -0,0 +1,19 @@
using System.Collections.Generic;
using Wino.Core.Domain.Entities.Calendar;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Models.Calendar;
/// <summary>
/// Encapsulates the options for preparing calendar operation requests.
/// </summary>
/// <param name="Operation">Calendar operation to execute (Create, Update, Delete).</param>
/// <param name="CalendarItem">Calendar item to operate on.</param>
/// <param name="Attendees">List of attendees for the calendar event.</param>
public record CalendarOperationPreparationRequest(CalendarSynchronizerOperation Operation, CalendarItem CalendarItem, List<CalendarEventAttendee> Attendees);
//{
// public CalendarOperationPreparationRequest(CalendarItem calendarItem)
// : this(calendarItem ?? throw new ArgumentNullException(nameof(calendarItem)), null)
// {
// }
//}
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Wino.Core.Domain.Entities.Calendar;
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
@@ -29,6 +30,10 @@ public abstract record FolderRequestBase(MailItemFolder Folder, FolderSynchroniz
public virtual object GroupingKey() { return Operation; }
}
public abstract record CalendarRequestBase(CalendarItem Item) : RequestBase<CalendarSynchronizerOperation>, ICalendarActionRequest
{
}
public class BatchCollection<TRequestType> : List<TRequestType>, IUIChangeRequest where TRequestType : IUIChangeRequest
{
public BatchCollection(IEnumerable<TRequestType> collection) : base(collection)