예제 #1
0
        public async Task <TypedResult <IEnumerable <MailEntity> > > GetMail(GetMailFilter getMailFilter)
        {
            try
            {
                var filters = new List <FilterDefinition <MailEntity> >();

                if (getMailFilter?.After != null)
                {
                    filters.Add(Builders <MailEntity> .Filter.Gte(me => me.Date, getMailFilter.After));
                }

                if (getMailFilter?.Before != null)
                {
                    filters.Add(Builders <MailEntity> .Filter.Lte(me => me.Date, getMailFilter.Before));
                }

                if (!string.IsNullOrWhiteSpace(getMailFilter?.ToEmail))
                {
                    var emailFilter = new List <FilterDefinition <MailEntity> >
                    {
                        Builders <MailEntity> .Filter.AnyEq(me => me.ToRecipients, getMailFilter.ToEmail),
                        Builders <MailEntity> .Filter.AnyEq(me => me.CcRecipients, getMailFilter.ToEmail),
                        Builders <MailEntity> .Filter.AnyEq(me => me.BccRecipients, getMailFilter.ToEmail)
                    };
                    filters.Add(Builders <MailEntity> .Filter.Or(emailFilter));
                }

                if (!string.IsNullOrWhiteSpace(getMailFilter?.FromEmail))
                {
                    filters.Add(Builders <MailEntity> .Filter.Eq(me => me.From, getMailFilter.FromEmail));
                }

                var opts = new FindOptions <MailEntity>()
                {
                    Limit = getMailFilter.Limit, Skip = getMailFilter.Skip, Sort = Builders <MailEntity> .Sort.Descending(me => me.Date)
                };

                if (filters.Any())
                {
                    var foundMail = (await _mailCollection.FindAsync(Builders <MailEntity> .Filter.And(filters), opts)).ToList();
                    return(new SuccessfulTypedResult <IEnumerable <MailEntity> >(foundMail));
                }
                else
                {
                    var foundMail = (await _mailCollection.FindAsync(Builders <MailEntity> .Filter.Empty, opts)).ToList();
                    return(new SuccessfulTypedResult <IEnumerable <MailEntity> >(foundMail));
                }
            }
            catch (Exception e)
            {
                return(new FailedTypedResult <IEnumerable <MailEntity> >(e));
            }
        }
예제 #2
0
        // Always returns in desc datetime order
        public async Task <IActionResult> GetMail(DateTimeOffset?before = null, DateTimeOffset?after = null, string toEmail = null,
                                                  string fromEmail      = null, int limit = 100,
                                                  int skip = 0)
        {
            var getMailFilter = new GetMailFilter
            {
                Before    = before,
                After     = after,
                ToEmail   = toEmail,
                FromEmail = fromEmail,
                Limit     = Math.Min(limit, 1000),
                Skip      = Math.Max(0, skip)
            };

            var getMailResult = await MailService.GetMail(getMailFilter);

            switch (getMailResult)
            {
            case BadRequestTypedResult <IEnumerable <MailEntity> > badRequestTypedResult:
                ModelState.AddModelError(badRequestTypedResult.Key, badRequestTypedResult.ErrorMessage);
                return(ValidationProblem(ModelState));

            case FailedTypedResult <IEnumerable <MailEntity> > failedTypedResult:
                return(Problem(failedTypedResult.Error.ToString(), statusCode: StatusCodes.Status500InternalServerError,
                               title: failedTypedResult.Error.Message));

            case NotFoundTypedResult <IEnumerable <MailEntity> > _:
                return(NotFound());

            case SuccessfulTypedResult <IEnumerable <MailEntity> > successfulTypedResult:
                return(Ok(new FilteredDtoOut <GetMailFilter, MailOutDto>(getMailFilter, Mapper.Map <IEnumerable <MailEntity>, IEnumerable <MailOutDto> >(successfulTypedResult.Value))));

            default:
                throw new ArgumentOutOfRangeException(nameof(getMailResult));
            }
        }