Updated namespaces to align with the new DigitalData.Core structure, replacing `DigitalData.Core.Abstractions` with `DigitalData.Core.Application.Interfaces` and `DigitalData.Core.Client.Interface`. Removed the `IUnique<int>` interface from several DTOs, simplifying their design and altering the handling of entity identification. Updated project files to reflect new dependency versions for improved compatibility and features. Cleaned up using directives to remove obsolete references, enhancing code maintainability.
92 lines
4.5 KiB
C#
92 lines
4.5 KiB
C#
using AutoMapper;
|
|
using DigitalData.Core.Application;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
|
using static EnvelopeGenerator.Common.Constants;
|
|
using DigitalData.Core.DTO;
|
|
using EnvelopeGenerator.Application.DTOs.EnvelopeHistory;
|
|
using EnvelopeGenerator.Application.DTOs.Receiver;
|
|
using EnvelopeGenerator.Application.Contracts.Services;
|
|
using DigitalData.Core.Application.DTO;
|
|
|
|
namespace EnvelopeGenerator.Application.Services;
|
|
|
|
public class EnvelopeHistoryService : CRUDService<IEnvelopeHistoryRepository, EnvelopeHistoryCreateDto, EnvelopeHistoryDto, EnvelopeHistory, long>, IEnvelopeHistoryService
|
|
{
|
|
public EnvelopeHistoryService(IEnvelopeHistoryRepository repository, IMapper mapper)
|
|
: base(repository, mapper)
|
|
{
|
|
}
|
|
|
|
public async Task<int> CountAsync(int? envelopeId = null, string? userReference = null, int? status = null) => await _repository.CountAsync(envelopeId: envelopeId, userReference: userReference, status: status);
|
|
|
|
public async Task<bool> HasStatus(EnvelopeStatus status, int envelopeId, string userReference) => await _repository.CountAsync(
|
|
envelopeId: envelopeId,
|
|
userReference: userReference,
|
|
status: (int) status) > 0;
|
|
|
|
public async Task<bool> AccessCodeAlreadyRequested(int envelopeId, string userReference) => await _repository.CountAsync(
|
|
envelopeId: envelopeId,
|
|
userReference:userReference,
|
|
status: (int) EnvelopeStatus.AccessCodeRequested) > 0;
|
|
|
|
public async Task<bool> IsSigned(int envelopeId, string userReference) => await _repository.CountAsync(
|
|
envelopeId: envelopeId,
|
|
userReference: userReference,
|
|
status: (int) EnvelopeStatus.DocumentSigned) > 0;
|
|
|
|
/// <summary>
|
|
/// Checks if the specified envelope has been rejected.
|
|
/// <para><b>Note:</b> <i>If any document within the envelope is rejected, the entire envelope will be considered rejected.</i></para>
|
|
/// </summary>
|
|
/// <param name="envelopeId">The ID of the envelope to check.</param>
|
|
/// <param name="userReference">Optional user reference associated with the envelope.</param>
|
|
/// <returns>A task that represents the asynchronous operation. The task result contains a boolean value indicating whether the envelope is rejected.</returns>
|
|
public async Task<bool> IsRejected(int envelopeId, string? userReference = null)
|
|
{
|
|
return await _repository.CountAsync(
|
|
envelopeId: envelopeId,
|
|
userReference: userReference,
|
|
status: (int)EnvelopeStatus.DocumentRejected) > 0;
|
|
}
|
|
|
|
public async Task<IEnumerable<EnvelopeHistoryDto>> ReadAsync(int? envelopeId = null, string? userReference = null, ReferenceType? referenceType = null, int? status = null, bool withSender = false, bool withReceiver = false)
|
|
{
|
|
var histDTOs = _mapper.Map<IEnumerable<EnvelopeHistoryDto>>(
|
|
await _repository.ReadAsync(
|
|
envelopeId: envelopeId,
|
|
userReference: userReference,
|
|
status: status,
|
|
withSender: withSender,
|
|
withReceiver: withReceiver));
|
|
return referenceType is null ? histDTOs : histDTOs.Where(h => h.ReferenceType == referenceType);
|
|
}
|
|
|
|
public async Task<IEnumerable<EnvelopeHistoryDto>> ReadRejectedAsync(int envelopeId, string? userReference = null) =>
|
|
await ReadAsync(envelopeId: envelopeId, userReference: userReference, status: (int)EnvelopeStatus.DocumentRejected, withReceiver:true);
|
|
|
|
//TODO: use IQueryable in repository to incerease the performance
|
|
public async Task<IEnumerable<ReceiverReadDto>> ReadRejectingReceivers(int envelopeId)
|
|
{
|
|
var envelopes = await ReadRejectedAsync(envelopeId);
|
|
return envelopes is null
|
|
? Enumerable.Empty<ReceiverReadDto>()
|
|
: envelopes
|
|
.Where(eh => eh?.Receiver != null)
|
|
.Select(eh => eh.Receiver!);
|
|
}
|
|
|
|
public async Task<DataResult<long>> RecordAsync(int envelopeId, string userReference, EnvelopeStatus status, string? comment = null) =>
|
|
await CreateAsync(new ()
|
|
{
|
|
EnvelopeId = envelopeId,
|
|
UserReference = userReference,
|
|
Status = (int) status,
|
|
ActionDate = DateTime.Now,
|
|
Comment = comment
|
|
})
|
|
.ThenAsync(
|
|
Success: dto => Result.Success(dto.Id),
|
|
Fail: (mssg, ntc) => Result.Fail<long>().Message(mssg).Notice(ntc)
|
|
);
|
|
} |