コード例 #1
0
ファイル: InvoiceService.cs プロジェクト: vulcanlee/XCourse19
        public async Task <InvoiceResponseDTO> UpdateInvoiceAsync(LoginResponseDTO loginResponseDTO, InvoiceRequestDTO invoiceRequestDTO)
        {
            InvoiceResponseDTO invoiceResponseDTO = new InvoiceResponseDTO();
            string             url = $"{Constants.InvoiceAPI}/{invoiceRequestDTO.Id}";

            var        httpJsonPayload = JsonConvert.SerializeObject(invoiceRequestDTO);
            HttpClient client          = new HttpClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loginResponseDTO.Token);
            HttpResponseMessage response = await client.PutAsync(url,
                                                                 new StringContent(httpJsonPayload, System.Text.Encoding.UTF8, "application/json"));

            String strResult = await response.Content.ReadAsStringAsync();

            if (response.IsSuccessStatusCode)
            {
                APIResult apiResult = JsonConvert.DeserializeObject <APIResult>(strResult, new JsonSerializerSettings {
                    MetadataPropertyHandling = MetadataPropertyHandling.Ignore
                });
                if (apiResult.Status == true)
                {
                    string itemJsonContent = apiResult.Payload.ToString();
                    invoiceResponseDTO = JsonConvert.DeserializeObject <InvoiceResponseDTO>(itemJsonContent, new JsonSerializerSettings {
                        MetadataPropertyHandling = MetadataPropertyHandling.Ignore
                    });
                }
            }
            return(invoiceResponseDTO);
        }
コード例 #2
0
        public async Task <IActionResult> Post([FromBody] InvoiceRequestDTO invoiceRequestDTO)
        {
            var claimSID = User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value;

            if (claimSID == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.杖中沒有發現指定使用者ID);
                return(BadRequest(apiResult));
            }
            UserID = Convert.ToInt32(claimSID);
            var fooUser = await _context.LobUsers.Include(x => x.Department).FirstOrDefaultAsync(x => x.Id == UserID);

            if (fooUser == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的該使用者資料);
                return(NotFound(apiResult));
            }

            if (!ModelState.IsValid)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.傳送過來的資料有問題, exceptionMessage: $"傳送過來的資料有問題 {ModelState}");
                return(BadRequest(apiResult));
            }

            Invoice fooInvoice = new Invoice()
            {
                InvoiceNo = invoiceRequestDTO.InvoiceNo,
                Date      = invoiceRequestDTO.Date,
                Memo      = invoiceRequestDTO.Memo,
                User      = fooUser
            };

            _context.Invoices.Add(fooInvoice);
            await _context.SaveChangesAsync();

            var fooItem = await _context.Invoices.FirstOrDefaultAsync(x => x.InvoiceNo == invoiceRequestDTO.InvoiceNo);

            InvoiceResponseDTO invoiceResponseDTO = new InvoiceResponseDTO()
            {
                Id        = fooItem.Id,
                InvoiceNo = fooItem.InvoiceNo,
                Date      = fooItem.Date,
                Memo      = fooItem.Memo,
                user      = new UserDTO()
                {
                    Id = fooUser.Id
                }
            };

            apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted,
                                               ErrorMessageEnum.None, payload: invoiceResponseDTO);
            return(Accepted(apiResult));
        }
コード例 #3
0
        public async Task <IActionResult> Delete([FromRoute] int id)
        {
            UserID = Convert.ToInt32(User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value);
            var fooUser = await _context.LobUsers.Include(x => x.Department).FirstOrDefaultAsync(x => x.Id == UserID);

            if (fooUser == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的該使用者資料);
                return(NotFound(apiResult));
            }

            if (!ModelState.IsValid)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.傳送過來的資料有問題, exceptionMessage: $"傳送過來的資料有問題 {ModelState}");
                return(BadRequest(apiResult));
            }

            var invoiceResponseDTO = await _context.Invoices
                                     .Include(x => x.User).ThenInclude(x => x.Department)
                                     .FirstOrDefaultAsync(x => x.Id == id);

            if (invoiceResponseDTO == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的發票);
                return(NotFound(apiResult));
            }
            else if (invoiceResponseDTO.User.Id != UserID)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.杖Token上標示的使用者與傳送過來的使用者不一致);
                return(BadRequest(apiResult));
            }

            _context.Invoices.Remove(invoiceResponseDTO);
            await _context.SaveChangesAsync();

            InvoiceResponseDTO fooInvoiceResponseDTO = new InvoiceResponseDTO()
            {
                Id        = invoiceResponseDTO.Id,
                Date      = invoiceResponseDTO.Date,
                InvoiceNo = invoiceResponseDTO.InvoiceNo,
                Memo      = invoiceResponseDTO.Memo,
                user      = new UserDTO()
                {
                    Id = fooUser.Id
                }
            };

            apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted,
                                               ErrorMessageEnum.None, payload: fooInvoiceResponseDTO);
            return(Accepted(apiResult));
        }
コード例 #4
0
        private async Task test()
        {
            InvoiceService invoiceService = new InvoiceService();
            LoginService   loginService   = new LoginService();

            // 測試使用者登入
            await loginService.LoginAsync("user50", "password50");

            // 測試發票查詢
            List <InvoiceResponseDTO> invoiceResponseDTOs = await invoiceService.RetriveInvoiceAsync(loginService.item);

            // 測試發票新增
            InvoiceRequestDTO invoiceRequestDTO = new InvoiceRequestDTO()
            {
                InvoiceNo = "Vulcan123",
                Date      = DateTime.Now,
                Memo      = "測試用",
                user      = new UserDTO()
                {
                    Id = loginService.item.Id
                }
            };
            InvoiceResponseDTO invoiceResponseDTO = await invoiceService.CreateInvoiceAsync(loginService.item, invoiceRequestDTO);

            // 測試發票查詢
            invoiceResponseDTOs = await invoiceService.RetriveInvoiceAsync(loginService.item);

            // 測試發票修改
            invoiceRequestDTO = new InvoiceRequestDTO()
            {
                Id        = invoiceResponseDTO.Id,
                InvoiceNo = invoiceResponseDTO.InvoiceNo,
                Date      = invoiceResponseDTO.Date,
                Memo      = "已經有修改了",
                user      = invoiceResponseDTO.user,
            };
            invoiceResponseDTO = await invoiceService.UpdateInvoiceAsync(loginService.item, invoiceRequestDTO);

            // 測試發票查詢
            invoiceResponseDTOs = await invoiceService.RetriveInvoiceAsync(loginService.item);

            // 測試發票刪除
            foreach (var item in invoiceResponseDTOs)
            {
                await invoiceService.DeleteInvoiceAsync(loginService.item, item.Id);
            }

            // 測試發票查詢
            invoiceResponseDTOs = await invoiceService.RetriveInvoiceAsync(loginService.item);
        }
コード例 #5
0
        public async Task <IActionResult> Get()
        {
            var claimSID = User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value;

            if (claimSID == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.杖中沒有發現指定使用者ID);
                return(BadRequest(apiResult));
            }
            UserID = Convert.ToInt32(claimSID);
            var fooUser = await _context.LobUsers.Include(x => x.Department).FirstOrDefaultAsync(x => x.Id == UserID);

            if (fooUser == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的該使用者資料);
                return(NotFound(apiResult));
            }

            List <InvoiceResponseDTO> fooInvoiceResponseDTO = new List <InvoiceResponseDTO>();

            foreach (var item in _context.Invoices
                     .Include(x => x.User).ThenInclude(x => x.Department)
                     .Where(x => x.User.Id == UserID))
            {
                InvoiceResponseDTO fooObject = new InvoiceResponseDTO()
                {
                    Id        = item.Id,
                    InvoiceNo = item.InvoiceNo,
                    Date      = item.Date,
                    Memo      = item.Memo,
                    user      = new UserDTO()
                    {
                        Id = item.User.Id
                    }
                };
                fooInvoiceResponseDTO.Add(fooObject);
            }
            apiResult = APIResultFactory.Build(true, StatusCodes.Status200OK,
                                               ErrorMessageEnum.None, payload: fooInvoiceResponseDTO);
            return(Ok(apiResult));
        }
コード例 #6
0
        public async Task <IActionResult> Put([FromRoute] int id, [FromBody] InvoiceRequestDTO invoiceRequestDTO)
        {
            var claimSID = User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value;

            if (claimSID == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.杖中沒有發現指定使用者ID);
                return(BadRequest(apiResult));
            }
            UserID = Convert.ToInt32(claimSID);
            var fooUser = await _context.LobUsers.Include(x => x.Department).FirstOrDefaultAsync(x => x.Id == UserID);

            if (fooUser == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的該使用者資料);
                return(NotFound(apiResult));
            }

            if (!ModelState.IsValid)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.傳送過來的資料有問題, exceptionMessage: $"傳送過來的資料有問題 {ModelState}");
                return(BadRequest(apiResult));
            }

            if (invoiceRequestDTO.Id != id)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.紀錄更新所指定ID不一致);
                return(BadRequest(apiResult));
            }

            var invoiceOnDB = await _context.Invoices
                              .Include(x => x.User).ThenInclude(x => x.Department)
                              .FirstOrDefaultAsync(x => x.Id == invoiceRequestDTO.Id);

            if (invoiceOnDB == null)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status404NotFound,
                                                   ErrorMessageEnum.沒有發現指定的發票);
                return(NotFound(apiResult));
            }
            else if (invoiceOnDB.User.Id != UserID)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status400BadRequest,
                                                   ErrorMessageEnum.杖Token上標示的使用者與傳送過來的使用者不一致);
                return(BadRequest(apiResult));
            }

            invoiceOnDB.InvoiceNo             = invoiceRequestDTO.InvoiceNo;
            invoiceOnDB.Date                  = invoiceRequestDTO.Date;
            invoiceOnDB.Memo                  = invoiceRequestDTO.Memo;
            _context.Entry(invoiceOnDB).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!await InvoiceExists(invoiceRequestDTO.Id))
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status409Conflict,
                                                       ErrorMessageEnum.要更新的紀錄_發生同時存取衝突_已經不存在資料庫上);
                    return(Conflict(apiResult));
                }
                else
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status409Conflict,
                                                       ErrorMessageEnum.紀錄更新時_發生同時存取衝突);
                    return(Conflict(apiResult));
                }
            }
            catch (Exception ex)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status500InternalServerError,
                                                   Helpers.ErrorMessageEnum.Exception,
                                                   exceptionMessage: $"({ex.GetType().Name}), {ex.Message}{Environment.NewLine}{ex.StackTrace}");
                return(StatusCode(StatusCodes.Status500InternalServerError, apiResult));
            }

            var fooItem = await _context.Invoices.FirstOrDefaultAsync(x => x.Id == invoiceRequestDTO.Id);

            InvoiceResponseDTO invoiceResponseDTO = new InvoiceResponseDTO()
            {
                Id        = fooItem.Id,
                InvoiceNo = fooItem.InvoiceNo,
                Date      = fooItem.Date,
                Memo      = fooItem.Memo,
                user      = new UserDTO()
                {
                    Id = fooUser.Id
                }
            };

            apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted,
                                               ErrorMessageEnum.None, payload: invoiceResponseDTO);
            return(Accepted(apiResult));
        }