public async Task <IActionResult> Delete(int id,
                                                 [FromServices] BookCommentService service,
                                                 [FromServices] UserService userService)
        {
            try
            {
                var user = await userService.GetUserPrincipal(User);

                var userRole = await userService.GetUserRole(user);

                switch (userRole.Name)
                {
                case USER_ROLE_ADMIN:
                case USER_ROLE_MANAGER:
                    return(Ok(await service.Delete(id)));

                case USER_ROLE_CUSTOMER:
                    return(Ok(await service.Delete(id, user.Id)));

                default:
                    return(Unauthorized(FORBIDDEN));
                }
            }
            catch (HttpResponseException err)
            {
                return(err.ToResponse());
            }
            catch (Exception err)
            {
                return(StatusCode(SERVER_ERROR_CODE, err.Message));
            }
        }
        public async Task <IActionResult> GetCount([FromServices] BookService bookService,
                                                   [FromServices] CustomerService customerService,
                                                   [FromServices] OrderService orderService,
                                                   [FromServices] BookCommentService commentService)
        {
            try
            {
                var countBook     = bookService.Count();
                var countCustomer = customerService.Count();
                var countComment  = commentService.Count();
                var countOrder    = orderService.Count();
                await Task.WhenAll(countBook, countComment, countCustomer, countOrder);

                var data = new { book = await countBook, customer = await countCustomer, comment = await countComment, order = await countOrder };
                return(Ok(data));
            }
            catch (HttpResponseException err)
            {
                return(err.ToResponse());
            }
            catch (Exception err)
            {
                return(StatusCode(SERVER_ERROR_CODE, err.Message));
            }
        }
        public async Task <IActionResult> Fetch([FromServices] BookCommentService service)
        {
            try
            {
                var item = await service.Fetch();

                return(Ok(item));
            }
            catch (HttpResponseException err)
            {
                return(err.ToResponse());
            }
            catch (Exception err)
            {
                return(StatusCode(SERVER_ERROR_CODE, err.Message));
            }
        }
        public async Task <IActionResult> Post(BookComment input,
                                               [FromServices] BookCommentService service,
                                               [FromServices] UserService userService)
        {
            try
            {
                var customer = await userService.GetCustomer(User);

                input.CustomerId = customer.UserId;
                var item = await service.Store(input);

                return(Ok(item));
            }
            catch (HttpResponseException err)
            {
                return(err.ToResponse());
            }
            catch (Exception err)
            {
                return(StatusCode(SERVER_ERROR_CODE, err.Message));
            }
        }