Example #1
0
        public object GetAllTours(int id, [FromQuery] int page, [FromQuery] int pageSize)
        {
            var responseModel = new ResponseModel();

            var data = new JArray();

            try
            {
                do
                {
                    var errorCode = _tourInfoService.TryGetTours(id, page, pageSize, out var tours, out var pagination);

                    if (errorCode != ErrorCode.Success)
                    {
                        responseModel.FromErrorCode(errorCode);
                        break;
                    }

                    errorCode = _tourInfoService.TryGetTourInfoById(id, out var tourInfo);

                    if (errorCode != ErrorCode.Success)
                    {
                        responseModel.FromErrorCode(errorCode);
                        break;
                    }

                    if (tourInfo == null)
                    {
                        responseModel.FromErrorCode(ErrorCode.TourNotFound);
                        break;
                    }

                    if (!_userService.TryGetUsers(tourInfo.CreateById, out var host))
                    {
                        responseModel.FromErrorCode(ErrorCode.UserNotFound);
                        break;
                    }

                    // Cast to ClaimsIdentity.
                    var identity = HttpContext.User.Identity as ClaimsIdentity;

                    // Gets list of claims.
                    IEnumerable <Claim> claim = identity?.Claims;

                    // Gets userId from claims. Generally it's an email address.
                    var userIdString = claim
                                       ?.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)
                                       ?.Value;

                    if (string.IsNullOrEmpty(userIdString))
                    {
                        responseModel.FromErrorCode(ErrorCode.UserNotFound);
                        break;
                    }

                    // Convert userId to int
                    var userId = int.Parse(userIdString);

                    var eIsFriend = _friendService.CalculateIsFriend(userId, host.Id);

                    // Add data to Response
                    foreach (var tour in tours)
                    {
                        _ = _tourService.TryGetTotalMember(tour.Id, out var totalMember);

                        data.Add(tour.ToSimpleJson(host, eIsFriend, totalMember, tourInfo));
                    }

                    responseModel.ErrorCode = (int)ErrorCode.Success;
                    responseModel.Message   = Description(responseModel.ErrorCode);
                    responseModel.Data      = data;
                    responseModel.AdditionalProperties["Pagination"] = JObject.FromObject(pagination);
                } while (false);
            }
            catch (Exception ex)
            {
                responseModel.FromException(ex);
            }

            return(responseModel.ToJson());
        }
        public object UpdateTour(int tourInfoId, int tourId, [FromBody] object requestBody)
        {
            var responseModel = new ResponseModel();

            try
            {
                do
                {
                    var body = requestBody != null
                        ? JObject.Parse(requestBody.ToString() ?? "{}")
                        : null;

                    if (!CoreHelper.GetParameter(out var jsonStartDate, body, "StartDay",
                                                 JTokenType.Date, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonEndDate, body, "EndDay",
                                                 JTokenType.Date, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonMaxMember, body, "MaxMember",
                                                 JTokenType.Integer, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonTotalDay, body, "TotalDay",
                                                 JTokenType.Integer, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonTotalNight, body, "TotalNight",
                                                 JTokenType.Integer, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonPrice, body, "Price",
                                                 JTokenType.Float, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonName, body, "Name",
                                                 JTokenType.String, ref responseModel, isNullable: true) ||
                        !CoreHelper.GetParameter(out var jsonTimelines, body, "Timelines",
                                                 JTokenType.Array, ref responseModel) ||
                        !CoreHelper.GetParameter(out var jsonServices, body, "Services",
                                                 JTokenType.Array, ref responseModel, isNullable: true))
                    {
                        break;
                    }

                    if (_tourInfoService.TryGetTourInfoById(tourInfoId, out var tourInfo) != ErrorCode.Success ||
                        tourInfo == null)
                    {
                        throw new ExceptionWithMessage("Tour info not found.");
                    }

                    var userId = CoreHelper.GetUserId(HttpContext, ref responseModel);

                    // User dont have permission
                    if (tourInfo.CreateById != userId)
                    {
                        Response.StatusCode = 403;
                        break;
                    }

                    var name               = jsonName?.ToString();
                    var isStartDayParse    = DateTime.TryParse(jsonStartDate?.ToString(), out var startDate);
                    var isEndDayParse      = DateTime.TryParse(jsonEndDate?.ToString(), out var endDate);
                    var isMaxMemberParse   = int.TryParse(jsonMaxMember?.ToString(), out var maxMember);
                    var isTotalDayParsed   = int.TryParse(jsonTotalDay?.ToString(), out var totalDay);
                    var isTotalNightParsed = int.TryParse(jsonTotalNight?.ToString(), out var totalNight);
                    var isPriceParsed      = float.TryParse(jsonPrice?.ToString(), out var price);
                    var services           = jsonServices != null
                        ? JsonConvert.DeserializeObject <string[]>(jsonServices.ToString())
                        : null;

                    var timelines = jsonTimelines?.ToObject <List <TimeLine> >();

                    if (!_tourService.TryGetTour(userId, tourId, out var tour) || tour == null)
                    {
                        throw new ExceptionWithMessage("Tour not found.");
                    }

                    tour.Update(
                        name: name !,
                        timelines: timelines,
                        startDay: isStartDayParse ? startDate : (DateTime?)null,
                        endDay: isEndDayParse ? endDate : (DateTime?)null,
                        totalDay: isTotalDayParsed ? totalDay : (int?)null,
                        totalNight: isTotalNightParsed ? totalNight : (int?)null,
                        maxMember: isMaxMemberParse ? maxMember : (int?)null,
                        price: isPriceParsed ? price : (float?)null,
                        services: services
                        );

                    if (!_tourService.TryUpdateTour(tour))
                    {
                        responseModel.FromErrorCode(ErrorCode.Fail);
                        break;
                    }

                    responseModel.FromErrorCode(ErrorCode.Success);
                    responseModel.Data = new JArray {
                        JObject.FromObject(tour)
                    };
                } while (false);
            }
            catch (Exception ex)
            {
                responseModel.FromException(ex);
            }

            return(responseModel.ToJson());
        }