Пример #1
0
        public virtual IHttpActionResult Put(string id)
        {
            try
            {
                if (string.IsNullOrEmpty(id))
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, Messages.IdIsMissing)));
                }

                View view = GetView(null);
                if (view == null)
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, string.Format(Messages.ViewNameNotFound, AppViewName))));
                }
                if (!view.IsEditable())
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Forbidden, Messages.ActionIsUnauthorized)));
                }

                int?appId = Maps.Instance.AppExists(id, Convert.ToInt32(Maps.Instance.DuradosMap.Database.GetUserID()));
                if (!appId.HasValue)
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, string.Format(Messages.ItemWithIdNotFound, id, AppViewName))));
                }

                string json = System.Web.HttpContext.Current.Server.UrlDecode(Request.Content.ReadAsStringAsync().Result);

                Dictionary <string, object> values = RestHelper.Deserialize(view, json);
                if (values.ContainsKey("settings") && values["settings"] is Dictionary <string, object> )
                {
                    databaseSettings = (Dictionary <string, object>)values["settings"];
                }

                appName = id;

                if (values.ContainsKey("Name") && values["Name"].ToString() != appName)
                {
                    if (!Maps.IsDevUser())
                    {
                        return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Conflict, "The app Name cannot be changed.")));
                    }

                    newAppName = GetCleanName(values["Name"].ToString());
                    if (string.IsNullOrEmpty(newAppName))
                    {
                        return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Conflict, "The app Name cannot be empty")));
                    }

                    if (Maps.Instance.AppExists(newAppName).HasValue)
                    {
                        return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Conflict, "An app by this name already exists")));
                    }
                }


                view.Update(values, appId.Value.ToString(), false, view_BeforeEdit, view_BeforeEditInDatabase, view_AfterEditBeforeCommit, view_AfterEditAfterCommit);

                try
                {
                    RestHelper.Refresh(id);

                    FarmCachingSingeltone.Instance.ClearMachinesCache(id);
                }
                catch (Exception exception)
                {
                    Map.Logger.Log("myApps", "delete", "refresh", exception, 1, string.Empty);
                }

                return(Ok());
            }
            catch (Exception exception)
            {
                throw new BackAndApiUnexpectedResponseException(exception, this);
            }
        }
Пример #2
0
        public virtual IHttpActionResult Post()
        {
            string appName = "";

            try
            {
                View view = GetView(null);
                if (view == null)
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.NotFound, string.Format(Messages.ViewNameNotFound, AppViewName))));
                }
                if (!view.IsCreatable() && !view.IsDuplicatable())
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Forbidden, Messages.ActionIsUnauthorized)));
                }

                string json = System.Web.HttpContext.Current.Server.UrlDecode(Request.Content.ReadAsStringAsync().Result);

                Dictionary <string, object> values = RestHelper.Deserialize(view, json);

                const string Creator        = "Creator";
                const string DatabaseStatus = "DatabaseStatus";
                const string Name           = "Name";
                const string Title          = "Title";
                const string Environment    = "Environment";


                if (values.ContainsKey(Name))
                {
                    try
                    {
                        values[Name] = GetCleanName(values[Name].ToString());
                    }
                    catch (Exception)
                    {
                        return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Conflict, Messages.AppNameInvalid)));
                    }
                }
                else
                {
                    values.Add(Name, GetDefaultAppName());
                    //return ResponseMessage(Request.CreateResponse(HttpStatusCode.Conflict, Messages.AppNameCannotBeNull));
                }
                if (!values.ContainsKey(Title))
                {
                    values.Add(Title, values[Name]);
                }
                else if (values[Title] == null || values[Title].Equals(string.Empty))
                {
                    values[Title] = values[Name];
                }
                if (values.ContainsKey(Creator))
                {
                    values.Remove(Creator);
                }
                if (!values.ContainsKey(Environment))
                {
                    values.Add(Environment, "development");
                }
                values.Add(Creator, view.Database.GetUserID());
                values.Add(DatabaseStatus, (int)OnBoardingStatus.NotStarted);

                appName = values[Name].ToString();

                string key = view.Create(values, false, view_BeforeCreate, view_BeforeCreateInDatabase, view_AfterCreateBeforeCommit, view_AfterCreateAfterCommit);



                return(Ok(new { __metadata = new { id = key, appName = appName } }));
            }
            catch (System.Data.SqlClient.SqlException exception)
            {
                const int DuplicateUniqueIndex = 2601;
                if (exception.Number == DuplicateUniqueIndex)
                {
                    return(ResponseMessage(Request.CreateResponse(HttpStatusCode.Conflict, string.Format(Messages.AppNameAlreadyExists, appName))));
                }
                else
                {
                    throw new BackAndApiUnexpectedResponseException(exception, this);
                }
            }
            catch (Exception exception)
            {
                throw new BackAndApiUnexpectedResponseException(exception, this);
            }
        }