public IHttpActionResult GetDocumentsFilteredAndOrdered([FromUri] string user_email, [FromBody] GetDocumentFilterAndOrder documentFiltersAndOrdersModel)
        {
            if (IsTokenValid())
            {
                try
                {
                    DocumentFilterAndOrder documentFiltersAndOrders = GetDocumentFilterAndOrder.ToEntity(documentFiltersAndOrdersModel);
                    return(Ok(BaseDocument.ToModel(documentManagementService.GetAllByUserFilteredAndOrdered(user_email, documentFiltersAndOrders))));
                }
                catch (MissingUserException e)
                {
                    return(BadRequest(e.Message));
                }
                catch (Exceptions e)
                {
                    return(BadRequest(e.Message));
                }
            }

            return(Unauthorized());
        }
        public IEnumerable <Document> GetAllByUserFilteredAndOrdered(string userEmail, DocumentFilterAndOrder filterAndOrder)
        {
            IEnumerable <Document> documents                   = DocumentRepository.GetAllByUser(userEmail);
            IEnumerable <Document> filteredDocuments           = FilterDocuments(documents, filterAndOrder);
            IEnumerable <Document> orderedAndFilteredDocuments = new List <Document>();

            switch (filterAndOrder.OrderBy)
            {
            case "Id":
                orderedAndFilteredDocuments = OrderDocumentsAscOrDesc(filterAndOrder.IsDesc, filteredDocuments, x => x.Id);
                break;

            case "Title":
                orderedAndFilteredDocuments = OrderDocumentsAscOrDesc(filterAndOrder.IsDesc, filteredDocuments, x => x.Title);
                break;

            case "CreationDate":
                orderedAndFilteredDocuments = OrderDocumentsAscOrDesc(filterAndOrder.IsDesc, filteredDocuments, x => x.CreationDate);
                break;

            case "LastModification":
                orderedAndFilteredDocuments = OrderDocumentsAscOrDesc(filterAndOrder.IsDesc, filteredDocuments, x => x.LastModification);
                break;

            default:
                break;
            }

            return(orderedAndFilteredDocuments);
        }
        private IEnumerable <Document> FilterDocuments(IEnumerable <Document> documents, DocumentFilterAndOrder filterAndOrder)
        {
            List <Document> filteredDocuments = new List <Document>();

            foreach (Document document in documents)
            {
                bool     ok           = true;
                Document filteredData = filterAndOrder.DocumentFilteredData;

                if (filteredData.Id != Guid.Parse("11111111-1111-1111-1111-111111111111"))
                {
                    ok = document.Id == filteredData.Id;
                }
                if (filteredData.Title != "")
                {
                    ok = ok && document.Title == filteredData.Title;
                }
                if (filteredData.CreationDate.Date != DateTime.MaxValue.Date)
                {
                    ok = ok && document.CreationDate.Date == filteredData.CreationDate.Date;
                }
                if (filteredData.LastModification.Date != DateTime.MaxValue.Date)
                {
                    ok = ok && document.LastModification.Date == filteredData.LastModification.Date;
                }

                if (ok)
                {
                    filteredDocuments.Add(document);
                }
            }

            return(filteredDocuments);
        }