using IdokladSdk.Enums; using IdokladSdk.Models.Attachment; using IdokladSdk.Models.Webhook; using Idoklad.Client; namespace Idoklad.Services; /// /// Integration / utility agendas: webhooks, notifications, change log, registered sales (EET), /// unpaired documents, attachments and the system code books. /// public sealed class IntegrationService { private readonly IdokladApiAccessor _accessor; public IntegrationService(IdokladApiAccessor accessor) => _accessor = accessor; // ---- Webhooks ---- public Task ListWebhooksAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.WebhookClient.List().ToPageAsync(page, pageSize, ct); public Task WebhookDetailAsync(int id, CancellationToken ct) => _accessor.Api.WebhookClient.Detail(id).ToDetailAsync(ct); public async Task CreateWebhookAsync(AgendaWebhookSettingsPostModel model, CancellationToken ct) => (await _accessor.Api.WebhookClient.PostAsync(model, ct)).Unwrap(); public async Task DeleteWebhookAsync(int id, CancellationToken ct) => (await _accessor.Api.WebhookClient.DeleteAsync(id, ct)).Unwrap(); // ---- Notifications ---- public Task ListNotificationsAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.NotificationClient.List().ToPageAsync(page, pageSize, ct); public async Task DeleteNotificationAsync(int id, CancellationToken ct) => (await _accessor.Api.NotificationClient.DeleteAsync(id, ct)).Unwrap(); // ---- Change log ---- public Task ListLogAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.LogClient.List().ToPageAsync(page, pageSize, ct); // ---- Registered sales (EET) ---- public Task ListRegisteredSalesAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.RegisteredSaleClient.List().ToPageAsync(page, pageSize, ct); public async Task RegisteredSaleDefaultAsync(CancellationToken ct) => (await _accessor.Api.RegisteredSaleClient.DefaultAsync(ct)).Unwrap(); // ---- Unpaired documents ---- public Task ListUnpairedDocumentsAsync( MovementType movementType, PairingDocumentType pairingDocumentType, int page, int pageSize, CancellationToken ct) => _accessor.Api.UnpairedDocumentClient.List(movementType, pairingDocumentType).ToPageAsync(page, pageSize, ct); // ---- Attachments ---- public async Task GetAttachmentAsync(int attachmentId, bool compressed, CancellationToken ct) => (await _accessor.Api.AttachmentClient.GetAsync(attachmentId, compressed, ct)).Unwrap(); public async Task GetDocumentAttachmentsAsync(int documentId, AttachmentDocumentType documentType, bool compressed, CancellationToken ct) => (await _accessor.Api.AttachmentClient.GetAsync(documentId, documentType, compressed, ct)).Unwrap(); public async Task UploadAttachmentAsync(AttachmentUploadModel model, CancellationToken ct) => (await _accessor.Api.AttachmentClient.UploadAsync(model, ct)).Unwrap(); public async Task DeleteAttachmentAsync(int attachmentId, CancellationToken ct) => (await _accessor.Api.AttachmentClient.DeleteAsync(attachmentId, ct)).Unwrap(); public async Task DeleteDocumentAttachmentsAsync(int documentId, AttachmentDocumentType documentType, CancellationToken ct) => (await _accessor.Api.AttachmentClient.DeleteAsync(documentId, documentType, ct)).Unwrap(); // ---- System code books ---- public Task CodeBooksAsync(CancellationToken ct) => _accessor.Api.SystemClient.CodeBooks().ToDetailAsync(ct); public Task CodeBooksChangesAsync(DateTime lastCheck, CancellationToken ct) => _accessor.Api.SystemClient.CodeBooksChanges(lastCheck).ToDetailAsync(ct); }