public bool SaveHangar(HangarDetailView hangar, out string message, out HttpStatusCode code)
        {
            message = ErrorCode.CONNECTION_FAILED;

            Api().CreateAuthenticated($"api/hangar", "post")
            .WithBody(hangar)
            .Execute(out HttpWebResponse response);

            if (response.TryGetStatusCode(out code) && code == HttpStatusCode.OK)
            {
                ValidatedView validatedView = response.GetReponseString()
                                              .DeserializeJsonSafe <ValidatedView>();
                if (validatedView == null)
                {
                    message = ErrorCode.ERROR_WHILE_READING_RESULT;
                }
                else
                {
                    message = validatedView.Message;
                    return(validatedView.IsValid);
                }
            }

            return(false);
        }
        public bool RetrieveHangarDetailView(int hangarId, out HangarDetailView hangarDetailView, out string message, out HttpStatusCode code)
        {
            message          = ErrorCode.CONNECTION_FAILED;
            hangarDetailView = null;

            Api().CreateAuthenticated($"api/hangar/{hangarId}", "get")
            .Execute(out HttpWebResponse response);

            if (response.TryGetStatusCode(out code) && code == HttpStatusCode.OK)
            {
                ValidatedView <HangarDetailView> validatedView = response.GetReponseString()
                                                                 .DeserializeJsonSafe <ValidatedView <HangarDetailView> >();
                if (validatedView == null)
                {
                    message = ErrorCode.ERROR_WHILE_READING_RESULT;
                }
                else
                {
                    hangarDetailView = validatedView.Object;
                    message          = validatedView.Message;
                    return(validatedView.IsValid);
                }
            }

            return(false);
        }
 public async Task <IActionResult> Post([FromBody] HangarDetailView hangarDetailView)
 {
     if (HttpContext.TryGetCurrentSession(out AccountSessionView accountSessionView))
     {
         return(Ok(await HangarService.UpdateHangar(accountSessionView.AccountID, hangarDetailView)));
     }
     return(Ok(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED)));
 }
        public static async Task <ValidatedView> UpdateHangar(int accountId, HangarDetailView hangarDetailView)
        {
            if (!hangarDetailView.IsValid(out string message))
            {
                return(ValidatedView.Invalid(message));
            }

            try {
                if (GameManager.Get(accountId, out PlayerController controller) && !controller.ZoneAssembly.CanEquip)
                {
                    return(ValidatedView.Invalid(ErrorCode.EQUIPMENT_NOT_POSSIBLE));
                }

                HangarModel hangarModel = await Model <HangarModel> .AsQueryable()
                                          .FirstOrDefault(x => x.AccountID == accountId && x.ShipID == hangarDetailView.ShipID);

                if (hangarModel == null)
                {
                    return(ValidatedView <HangarView> .Invalid(ErrorCode.NO_HANGAR_FOUND));
                }

                if (controller != null && controller.HangarAssembly.Ship.ID == hangarDetailView.ShipID)
                {
                    HangarView hangarView = Mapper <HangarModel> .Map <HangarView>(hangarModel);

                    hangarView.Configuration_1 = hangarDetailView.Configuration_1;
                    hangarView.Configuration_2 = hangarDetailView.Configuration_2;

                    UpdateHangarIngame(accountId, hangarView);
                }
                else
                {
                    hangarModel.Configuration_1 = Mapper <ConfigurationView> .Map <Configuration>(hangarDetailView.Configuration_1);

                    hangarModel.Configuration_2 = Mapper <ConfigurationView> .Map <Configuration>(hangarDetailView.Configuration_2);

                    ReplaceOneResult result = await Model <HangarModel> .AsCollection()
                                              .ReplaceOneAsync(x => x.AccountID == accountId && x.ShipID == hangarDetailView.ShipID, hangarModel);
                }

                return(ValidatedView.Valid());
            } catch (Exception e) {
                GameContext.Logger.LogError(e);
            }
            return(ValidatedView.Invalid(ErrorCode.OPERATION_FAILED));
        }
        public static async Task <ValidatedView <HangarDetailView> > RetrieveHangarDetailView(int accountId, int shipId)
        {
            try {
                ValidatedView <HangarView> validatedHangarView = await RetrieveHangar(accountId, shipId);

                if (!validatedHangarView.IsValid)
                {
                    return(ValidatedView <HangarDetailView> .Invalid(validatedHangarView.Message));
                }

                HangarDetailView hangarDetailView = Mapper <HangarView> .Map <HangarDetailView>(validatedHangarView.Object);

                hangarDetailView.IsActive = await Model <AccountModel> .AsQueryable()
                                            .Any(x => x.ID == accountId && x.ActiveShipID == shipId);

                return(ValidatedView <HangarDetailView> .Valid(hangarDetailView));
            } catch (Exception e) {
                GameContext.Logger.LogError(e);
            }
            return(ValidatedView <HangarDetailView> .Invalid(ErrorCode.OPERATION_FAILED));
        }
 public bool RetrieveHangarDetailView(int hangarId, out HangarDetailView hangarDetailView, out string message)
 {
     return(RetrieveHangarDetailView(hangarId, out hangarDetailView, out message, out _));
 }
 public bool SaveHangar(HangarDetailView hangar, out string message)
 {
     return(SaveHangar(hangar, out message, out _));
 }