Exemple #1
0
        public async Task <ActionResult <ApiResponse> > UpdateEntity(int id, NewAppEntityModel model)
        {
            try
            {
                var entity = await _repo.GetEntityByIdAsync(id, true);

                if (entity == null)
                {
                    return(NotFound(new ApiResponse(StatusCodes.Status404NotFound, "Erro! Essa entidade não existe.")));
                }

                entity.Type = await _repo.GetEntityTypeByIdAsync(model.TypeId);

                if (entity.Type == null)
                {
                    return(NotFound(new ApiResponse(StatusCodes.Status404NotFound, "Erro! Essa tipo de entidade não existe.")));
                }

                if (model.Fields == null || model.Fields.Count == 0)
                {
                    return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro! Entidade precisa de pelo menos um campo.")));
                }

                if (model.Fields.Where(t => t.Name == "Nome").Count() == 0)
                {
                    return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro! É obrigatório ter um campo com o nome de campo: 'Nome'.")));
                }

                foreach (var item in entity.Fields)
                {
                    if (item.GetType().Name == "AppEntityDataFieldCombobox")
                    {
                        _repo.RemoveDataFieldComboboxOptionsRange(await _repo.GetDataFieldComboboxOptionsAsync(item.Id));
                    }
                }

                bool modelErrors = false;
                entity.Fields = new List <AppEntityDataField>();
                foreach (var field in model.Fields)
                {
                    if (field.FieldType < 0 || field.FieldType > DataFieldTypeEnum.Boolean || string.IsNullOrWhiteSpace(field.Name) || string.IsNullOrWhiteSpace(field.Section))
                    {
                        return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro! Verifique o modelo e tente novamente.")));
                    }

                    if (field.FieldType == DataFieldTypeEnum.Text)
                    {
                        if (string.IsNullOrWhiteSpace(field.TextValue))
                        {
                            modelErrors = true; break;
                        }
                        entity.Fields.Add(new AppEntityDataFieldText()
                        {
                            Entity  = entity,
                            Name    = field.Name,
                            Section = field.Section,
                            Value   = field.TextValue
                        });
                    }
                    else if (field.FieldType == DataFieldTypeEnum.Number)
                    {
                        if (field.NumberValue == decimal.MinValue)
                        {
                            modelErrors = true; break;
                        }
                        entity.Fields.Add(new AppEntityDataFieldNumber()
                        {
                            Entity  = entity,
                            Name    = field.Name,
                            Section = field.Section,
                            Value   = field.NumberValue
                        });
                    }
                    else if (field.FieldType == DataFieldTypeEnum.Date)
                    {
                        if (field.DateValue == null)
                        {
                            modelErrors = true; break;
                        }
                        entity.Fields.Add(new AppEntityDataFieldDate()
                        {
                            Entity  = entity,
                            Name    = field.Name,
                            Section = field.Section,
                            Value   = new DateTime(int.Parse(field.DateValue.Split("-")[0]), int.Parse(field.DateValue.Split("-")[1]), int.Parse(field.DateValue.Split("-")[2]))
                        });
                    }
                    else if (field.FieldType == DataFieldTypeEnum.Combobox)
                    {
                        var newField = new AppEntityDataFieldCombobox()
                        {
                            Entity         = entity,
                            Name           = field.Name,
                            Section        = field.Section,
                            Options        = new List <AppEntityDataFieldComboboxOption>(),
                            SelectedOption = field.ComboboxSelected
                        };

                        if (field.ComboboxOptions == null || field.ComboboxOptions.Length == 0 || field.ComboboxSelected < 0)
                        {
                            modelErrors = true; break;
                        }
                        for (int i = 0; i < field.ComboboxOptions.Length; i++)
                        {
                            var newOption = new AppEntityDataFieldComboboxOption()
                            {
                                Name     = field.ComboboxOptions[i],
                                Combobox = newField
                            };

                            newField.Options.Add(newOption);
                        }

                        entity.Fields.Add(newField);
                    }
                    else if (field.FieldType == DataFieldTypeEnum.Boolean)
                    {
                        entity.Fields.Add(new AppEntityDataFieldBoolean()
                        {
                            Entity  = entity,
                            Name    = field.Name,
                            Section = field.Section,
                            Value   = field.BooleanValue
                        });
                    }
                }

                if (entity.Fields.Count >= 20)
                {
                    return(Conflict(new ApiResponse(StatusCodes.Status409Conflict, "Erro! Limite artificial atingido.")));
                }

                _repo.RemoveRelationsRange(await _repo.GetEntityRelationsAsync(entity.Id));
                entity.Relations = new List <AppEntityRelation>();
                foreach (var relation in model.Relations)
                {
                    var relatedEntity = await _repo.GetEntityByIdAsync(relation.RelatedEntity.Id, false);

                    if (relatedEntity == null)
                    {
                        modelErrors = true;
                        break;
                    }

                    AppEntityRelation newRelation = new AppEntityRelation()
                    {
                        Description     = relation.Description,
                        Entity          = entity,
                        relatedEntityId = relatedEntity.Id
                    };

                    entity.Relations.Add(newRelation);
                }

                if (modelErrors)
                {
                    return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro! Verifique o modelo e tente novamente.")));
                }

                _repo.UpdateEntity(entity);

                bool saved = await _repo.SaveChangesAsync();

                if (!saved)
                {
                    return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro ao tentar atualizar entidade. Verifique o modelo e tente novamente.")));
                }

                return(Ok(new ApiResponse(StatusCodes.Status200OK, "Sucesso! Entidade foi atualizada.")));
            }
            catch (Exception)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, "Erro interno do servidor."));
            }
        }
Exemple #2
0
        public async Task <ActionResult <ApiResponse> > AddEntity(NewAppEntityModel model)
        {
            try
            {
                if (model.TypeId <= 0 || model.Fields == null || model.Fields.Count == 0)
                {
                    return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro! Verifique o modelo e tente novamente.")));
                }

                if (model.Fields.Where(t => t.Name == "Nome").Count() == 0)
                {
                    return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro! É obrigatório ter um campo com o nome de campo: 'Nome'.")));
                }

                if (_repo.GetEntityExistsByName(model.Fields.First(t => t.Name == "Nome").TextValue))
                {
                    return(Conflict(new ApiResponse(StatusCodes.Status409Conflict, "Erro! Uma entidade com esse nome já existe.")));
                }

                if ((await _repo.GetAllEntitiesAsync()).Count() >= 50)
                {
                    return(Conflict(new ApiResponse(StatusCodes.Status409Conflict, "Erro! Limite artificial atingido.")));
                }

                AppEntity newEntity = new AppEntity();
                newEntity.Type = await _repo.GetEntityTypeByIdAsync(model.TypeId);

                if (newEntity.Type == null)
                {
                    return(NotFound(new ApiResponse(StatusCodes.Status404NotFound, "Erro! Esse tipo de entidade não existe.")));
                }

                newEntity.Fields = new List <AppEntityDataField>();
                bool modelErrors = false;
                foreach (var field in model.Fields)
                {
                    if (field.FieldType < 0 || field.FieldType > DataFieldTypeEnum.Boolean || string.IsNullOrWhiteSpace(field.Name) || string.IsNullOrWhiteSpace(field.Section))
                    {
                        return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro! Verifique o modelo e tente novamente.")));
                    }

                    if (field.FieldType == DataFieldTypeEnum.Text)
                    {
                        if (string.IsNullOrWhiteSpace(field.TextValue))
                        {
                            modelErrors = true; break;
                        }
                        newEntity.Fields.Add(new AppEntityDataFieldText()
                        {
                            Entity  = newEntity,
                            Name    = field.Name,
                            Section = field.Section,
                            Value   = field.TextValue
                        });
                    }
                    else if (field.FieldType == DataFieldTypeEnum.Number)
                    {
                        if (field.NumberValue == decimal.MinValue)
                        {
                            modelErrors = true; break;
                        }
                        newEntity.Fields.Add(new AppEntityDataFieldNumber()
                        {
                            Entity  = newEntity,
                            Name    = field.Name,
                            Section = field.Section,
                            Value   = field.NumberValue
                        });
                    }
                    else if (field.FieldType == DataFieldTypeEnum.Date)
                    {
                        if (field.DateValue == null)
                        {
                            modelErrors = true; break;
                        }
                        newEntity.Fields.Add(new AppEntityDataFieldDate()
                        {
                            Entity  = newEntity,
                            Name    = field.Name,
                            Section = field.Section,
                            Value   = new DateTime(int.Parse(field.DateValue.Split("-")[0]), int.Parse(field.DateValue.Split("-")[1]), int.Parse(field.DateValue.Split("-")[2]))
                        });
                    }
                    else if (field.FieldType == DataFieldTypeEnum.Combobox)
                    {
                        var newField = new AppEntityDataFieldCombobox()
                        {
                            Entity         = newEntity,
                            Name           = field.Name,
                            Section        = field.Section,
                            Options        = new List <AppEntityDataFieldComboboxOption>(),
                            SelectedOption = field.ComboboxSelected
                        };

                        if (field.ComboboxOptions == null || field.ComboboxOptions.Length == 0 || field.ComboboxSelected < 0)
                        {
                            modelErrors = true; break;
                        }
                        for (int i = 0; i < field.ComboboxOptions.Length; i++)
                        {
                            var newOption = new AppEntityDataFieldComboboxOption()
                            {
                                Name     = field.ComboboxOptions[i],
                                Combobox = newField
                            };

                            newField.Options.Add(newOption);
                        }

                        newEntity.Fields.Add(newField);
                    }
                    else if (field.FieldType == DataFieldTypeEnum.Boolean)
                    {
                        newEntity.Fields.Add(new AppEntityDataFieldBoolean()
                        {
                            Entity  = newEntity,
                            Name    = field.Name,
                            Section = field.Section,
                            Value   = field.BooleanValue
                        });
                    }
                }

                if (modelErrors)
                {
                    return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro! Verifique o modelo e tente novamente.")));
                }

                _repo.AddEntity(newEntity);

                bool saved = await _repo.SaveChangesAsync();

                if (!saved)
                {
                    return(BadRequest(new ApiResponse(StatusCodes.Status400BadRequest, "Erro ao tentar criar uma nova entidade. Verifique o modelo e tente novamente.")));
                }

                return(Created("", new ApiResponse(StatusCodes.Status201Created, "Sucesso! Nova entidade criada com sucesso.")));
            }
            catch (Exception)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, "Erro interno do servidor."));
            }
        }