using adas_core.Domain.Models;
using adas_core.Domain.Models.MongoModels;
using MongoDB.Bson;
namespace adas_core.Application.Services.Interfaces;
public interface INoticeService
{
///
/// Asynchronously deletes the specified notice.
///
/// The notice to delete.
/// A task that represents the asynchronous delete operation.
Task DeleteNoticeAsync(Notice notice);
///
/// Asynchronously deletes a notice identified by the specified identifier.
///
/// The unique identifier of the notice to delete.
Task DeleteNoticeByIdAsync(ObjectId noticeId);
///
/// Asynchronously retrieves a entity by its unique identifier from the data store.
/// Returns when no notice matches the provided identifier.
///
/// The that uniquely identifies the notice to retrieve.
/// A containing the matching , or if no notice is found.
Task GetNoticeByIdAsync(ObjectId noticeId);
///
/// Asynchronously retrieves a collection of notices filtered by the specified notice type.
/// The task result may be null when no notices match the given type.
///
/// The type of notice to filter by.
/// A task containing an enumerable of matching objects, or null if none are found.
Task?> GetNoticeByTypeAsync(string noticeType);
///
/// Asynchronously retrieves a collection of notices.
///
/// A task that represents the asynchronous operation. The task result contains an enumerable collection of objects.
Task> GetNoticesAsync();
///
/// Inserts a new notice into the data store.
///
/// The notice entity to insert.
/// A task that represents the asynchronous operation. The task result contains the inserted , or null if the notice could not be inserted.
Task InsertNotice(Notice notice);
///
/// Asynchronously updates an existing notice in the system.
///
/// The notice entity containing the updated information to be persisted.
Task UpdateNoticeAsync(Notice notice);
///
/// Persists the provided API request to the data store.
///
/// The API request to be saved.
Task SaveRequest(ApiRequest apiRequest);
///
/// Asynchronously persists the specified API request.
///
/// The API request to save.
Task SaveRequestAsync(ApiRequest apiRequest);
///
/// Asynchronously retrieves the collection of notices associated with the specified display identifier.
///
/// The identifier of the display whose notices should be retrieved.
/// A task that returns the notices for the display, or null when no notices are found for the given display.
Task?> GetNoticesByDisplayId(ObjectId displayId);
}