public async Task <ActionResult <InvoiceToReturnDto> > GetInvoice(int id)
        {
            var spec = new InvoiceWithCustomerAndItemsSpecification(id);

            var invoice = await _unitOfWork.Repository <Invoice>().GetEntityWithSpecAsync(spec);

            if (invoice == null)
            {
                return(NotFound(new ApiResponse(404)));
            }

            return(_mapper.Map <InvoiceToReturnDto>(invoice));
        }
        public async Task <ActionResult <InvoiceItemDto> > AddNewItem([FromBody] InvoiceItemDto newItemDto)
        {
            if (ModelState.IsValid)
            {
                var item = _mapper.Map <InvoiceItem>(newItemDto);

                var spec = new InvoiceWithCustomerAndItemsSpecification(newItemDto.InvoiceId);

                var invoice = await _unitOfWork.Repository <Invoice>().GetEntityWithSpecAsync(spec);

                item.Invoice = invoice;

                await _unitOfWork.Repository <InvoiceItem>().AddAsync(item);

                if (await _unitOfWork.Repository <InvoiceItem>().SaveAllAsync())
                {
                    return(Ok(_mapper.Map <InvoiceItemDto>(item)));
                }
            }
            return(BadRequest("failed to add item"));
        }
        public async Task <ActionResult <InvoiceToReturnDto> > UpdateInvoice(int id, [FromBody]
                                                                             InvoiceToCreateDto newInvoice)
        {
            var spec = new InvoiceWithCustomerAndItemsSpecification(id);

            var invoice = await _unitOfWork.Repository <Invoice>().GetEntityWithSpecAsync(spec);

            // var items = _mapper.Map<ICollection<InvoiceItem>, ICollection<InvoiceItemDto>>(GetItemsForInvoice(id));

            // newInvoice.Items = items;

            _mapper.Map(newInvoice, invoice);



            _unitOfWork.Repository <Invoice>().Update(invoice);

            if (await _unitOfWork.Repository <Invoice>().SaveAllAsync())
            {
                return(Ok(_mapper.Map <InvoiceToReturnDto>(invoice)));
            }

            return(BadRequest("failed to update Invoice"));
        }