Пример #1
0
        public async Task <EntityOperationResult <TBase> > CreateItemAsync(TDto basketCreateDto)
        {
            string errors = CheckAndGetErrors(basketCreateDto);

            if (!string.IsNullOrEmpty(errors))
            {
                return(EntityOperationResult <TBase> .Failure().AddError(errors));
            }
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                try
                {
                    TBase value  = _mapper.Map <TBase>(basketCreateDto);
                    var   entity = await unitOfWork.GetRepository <TBase>().AddAsync(value);

                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <TBase> .Success(entity));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <TBase> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #2
0
        public async Task <EntityOperationResult <User> > Authenticate(string username, string password)
        {
            var result = new EntityOperationResult <User>();

            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
            {
                result.AddError("Login fail", "Name or Password are empty");
                return(result);
            }

            var user = await _context.Users.FirstOrDefaultAsync(x => x.Name == username);

            if (user == null)
            {
                result.AddError("User inexistent", "User is nor registered");
                return(result);
            }

            if (!VerifyPasswordHash(password, user.PasswordHash, user.PasswordSalt))
            {
                result.AddError("User invalid", "User password invalid");
                return(result);
            }

            // authentication successful
            return(new EntityOperationResult <User>(user));
        }
Пример #3
0
        public async Task <EntityOperationResult <TBase> > DeleteItemAsync(int id)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                try
                {
                    TBase value = unitOfWork.GetRepository <TBase>().GetById(id);
                    if (value == null)
                    {
                        return(EntityOperationResult <TBase> .Failure().AddError("Не найдена запись"));
                    }
                    string error = CkeckBefforDelet(value);
                    if (!string.IsNullOrEmpty(error))
                    {
                        return(EntityOperationResult <TBase> .Failure().AddError(error));
                    }
                    unitOfWork.GetRepository <TBase>().Delete(value);
                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <TBase> .Success(value));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <TBase> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #4
0
        private EntityOperationResult UpdateInternal(EntityUpdate update)
        {
            if (!RunInspection(update))
            {
                return(EntityOperationResult.FailResult(new EntityOperationError("Insufficient rights to perform this operation.", EntityOperationError.ACCESS_VIOLATION)));
            }

            EntityOperationContext ctx = new EntityOperationContext();

            this.AppyLogicBefore(update, ctx);

            var entity = update.ToEntity();
            EntityOperationResult result = null;
            bool created = false;

            try
            {
                if (update.Id.HasValue)
                {
                    if (update.PropertyUpdates.Count > 0)
                    {
                        _repository.Update(entity);
                    }
                }
                else
                {
                    update.Id = _repository.Create(entity);
                    created   = true;
                }

                //Order by operation - process detach first
                foreach (var relUpdate in update.RelationUpdates.OrderByDescending(ru => ru.Operation))
                {
                    if (relUpdate.Operation == RelationOperation.Attach)
                    {
                        _repository.Attach(entity, relUpdate.ToRelation());
                    }
                    else if (relUpdate.Operation == RelationOperation.Detach)
                    {
                        _repository.Detach(entity, relUpdate.ToRelation());
                    }
                    else if (relUpdate.PropertyUpdates.Count > 0)
                    {
                        _repository.UpdateRelation(entity, relUpdate.ToRelation());
                    }
                }

                result = EntityOperationResult.SuccessResult();
                if (created)
                {
                    result.Data.Add("Created", update.Id.Value);
                }
            }
            catch (UniqueRuleViolationException rex)
            {
                result = EntityOperationResult.FailResult(new EntityOperationError(rex.Message, EntityOperationError.UNIQUE_RULE_VIOLATION));
            }
            this.AppyLogicAfter(update, ctx, result);
            return(result);
        }
Пример #5
0
        public async Task <EntityOperationResult <TBase> > DeleteItemAsync(List <int> idList)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                try
                {
                    if (idList == null || idList.Count == 0)
                    {
                        return(EntityOperationResult <TBase> .Failure().AddError("Не задан лист с id"));
                    }
                    List <TBase> listVal = await unitOfWork.GetRepository <TBase>().GetAllOfIdAsync(idList);

                    if (listVal == null || listVal.Count == 0)
                    {
                        return(EntityOperationResult <TBase> .Failure().AddError("Не найдена запись"));
                    }
                    string error = CkeckBefforDeleteList(listVal);
                    if (!string.IsNullOrEmpty(error))
                    {
                        return(EntityOperationResult <TBase> .Failure().AddError(error));
                    }
                    unitOfWork.GetRepository <TBase>().DeleteALot(listVal);
                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <TBase> .Success(listVal[0]));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <TBase> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #6
0
        public async Task <EntityOperationResult <TBase> > CreateItemAsync(TDto basketCreateDto)
        {
            // Валидацию модели можно сделать через атрибуты валидации, которые ты вешаешь на свойства класса.
            // Взывать проверку на основе атрибутов можно своим кодом. Я уже такой писал:
            // https://github.com/maximgorbatyuk/net-blank-app/blob/master/src/Utils/Validators/EntityValidator.cs
            string errors = CheckAndGetErrors(basketCreateDto);

            if (!string.IsNullOrEmpty(errors))
            {
                return(EntityOperationResult <TBase> .Failure().AddError(errors));
            }
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                try
                {
                    TBase value  = _mapper.Map <TBase>(basketCreateDto);
                    var   entity = await unitOfWork.GetRepository <TBase>().AddAsync(value);

                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <TBase> .Success(entity));
                }
                catch (Exception ex)
                {
                    // Если ты хочешь использовать подход с классом-прокси EntityOperationResult,
                    // То я бы сохранял и передавал выше еще и сам объект ex, потому что в эксепшене важно не только месседж,
                    // но и стектрейс, и дополнительная инфа, и тип класса исключения.
                    // Но я бы отказался от такого прокси-класса и пробрасывал бы исключение наверх дальше, даже
                    // не отлавливая его здесь.
                    // Исключения ты отлавливаешь в одной точке - в созданной специально для этого middleware.
                    // а узнать, что это такое, ты можешь либо из нашего курса, либо на сайте metanit.com
                    return(EntityOperationResult <TBase> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #7
0
        public virtual async Task <EntityOperationResult <TDto> > CreateAsync(TDtoCreate createDto)
        {
            string errors = CheckBeforeModification(createDto);

            if (!string.IsNullOrEmpty(errors))
            {
                return(EntityOperationResult <TDto> .Failure().AddError(errors));
            }

            try
            {
                TEntity value  = mapper.Map <TEntity>(createDto);
                var     entity = await repositoryBase.AddAsync(value);

                await repositoryBase.SaveAsync();

                var dto = mapper.Map <TDto>(entity);

                return(EntityOperationResult <TDto> .Success(dto));
            }
            catch (Exception ex)
            {
                return(EntityOperationResult <TDto> .Failure().AddError(ex.Message));
            }
        }
Пример #8
0
        public async Task <EntityOperationResult <AgeCategory> > EditAsync(AgeCategoryDto editDto)
        {
            string errors = CheckBeforeModification(editDto, false);

            if (!string.IsNullOrEmpty(errors))
            {
                return(EntityOperationResult <AgeCategory> .Failure().AddError(errors));
            }

            try
            {
                var value = await repositoryBaseId.GetByIdAsync(editDto.Id);

                value.AgeBegin = editDto.AgeBegin;
                value.AgeEnd   = editDto.AgeEnd;
                repositoryBaseId.Update(value);
                await repositoryBaseId.SaveAsync();

                return(EntityOperationResult <AgeCategory> .Success(value));
            }
            catch (Exception ex)
            {
                return(EntityOperationResult <AgeCategory> .Failure().AddError(ex.Message));
            }
        }
        private EntityOperationResult <Project> Check(ProjectDto project)
        {
            if (project.Name == string.Empty)
            {
                return(EntityOperationResult <Project>
                       .Failure()
                       .AddError("Не указано наименование"));
            }
            if (project.ContractorCompany == string.Empty)
            {
                return(EntityOperationResult <Project>
                       .Failure()
                       .AddError("Не указано наименование компании-исполнителя"));
            }
            if (project.CustomerCompany == string.Empty)
            {
                return(EntityOperationResult <Project>
                       .Failure()
                       .AddError("Не указано наименование компании-заказчика"));
            }
            if (project.DateBegin == null || project.DateEnd == null)
            {
                return(EntityOperationResult <Project>
                       .Failure()
                       .AddError("Не указан период"));
            }
            if (project.SupervisorUser == null)
            {
                return(EntityOperationResult <Project>
                       .Failure()
                       .AddError("Не указаны руководитель проекта"));
            }

            return(null);
        }
Пример #10
0
        public async Task <EntityOperationResult <Language> > EditItemAsync(LanguageDto basketEditDto)
        {
            string errors = CheckAndGetErrors(basketEditDto, false);

            if (!string.IsNullOrEmpty(errors))
            {
                return(EntityOperationResult <Language> .Failure().AddError(errors));
            }
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                try
                {
                    var language = unitOfWork.Language.GetById(basketEditDto.Id);
                    if (language == null)
                    {
                        return(EntityOperationResult <Language> .Failure().AddError("Не найдена запись"));
                    }
                    language.Name = basketEditDto.Name;
                    unitOfWork.Language.Update(language);
                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <Language> .Success(language));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Language> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #11
0
        public EntityOperationResult updateEmployeeRecord(EmployeeDTO emp)
        {
            EntityOperationResult ret = new EntityOperationResult();

            try
            {
                var dbObj = dbContext.employees.FirstOrDefault(x => x.id == emp.id);
                if (dbObj != null)
                {
                    dbObj.emp_name = emp.emp_name;

                    dbContext.SaveChanges();
                    ret.id        = dbObj.id;
                    ret.isSuccess = true;
                    ret.message   = "Successfully update";
                }
                else
                {
                    ret.id        = emp.id;
                    ret.isSuccess = false;
                    ret.message   = "Record not found";
                }
            }
            catch (Exception ex)
            {
                ret.id        = 0;
                ret.isSuccess = false;
                ret.message   = ex.Message;
            }

            return(ret);
        }
Пример #12
0
        public async Task <EntityOperationResult <Dish> > DeleeteItemAsync(DishDeleteDto deleteDto, string path)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                try
                {
                    var dish = unitOfWork.Dish.GetById(deleteDto.Id);
                    unitOfWork.Dish.Delete(dish);
                    await unitOfWork.CompleteAsync();

                    if (dish.PictureName?.Length > 0)
                    {
                        FileService fileService = new FileService(null, path + "\\" + dish.PictureName,
                                                                  string.Empty, dish.PictureFormat);
                        fileService.AddOrDelete(true);
                    }

                    return(EntityOperationResult <Dish> .Success(dish));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Dish> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #13
0
        public EntityOperationResult daleteTask(long taskid)
        {
            EntityOperationResult ret = new EntityOperationResult();

            try
            {
                var dbObj = dbContext.employeeTasks.FirstOrDefault(x => x.id == taskid);

                if (dbObj != null)
                {
                    dbContext.Remove(dbObj);
                    dbContext.SaveChanges();
                    ret.isSuccess = true;
                    ret.message   = "Successfully delete";
                }
                else
                {
                    ret.isSuccess = false;
                    ret.message   = "Record not found plz try again";
                }
            }
            catch (Exception ex)
            {
                ret.isSuccess = false;
                ret.message   = ex.Message;
            }

            return(ret);
        }
Пример #14
0
        public EntityOperationResult saveEmployeeRecord(EmployeeDTO emp)
        {
            EntityOperationResult ret = new EntityOperationResult();

            try
            {
                var dbObj = new Employee();
                dbObj.emp_name = emp.emp_name;

                dbContext.employees.Add(dbObj);
                dbContext.SaveChanges();

                ret.id        = dbObj.id;
                ret.isSuccess = true;
                ret.message   = "Successfully Save";
            }
            catch (Exception ex)
            {
                ret.id        = 0;
                ret.isSuccess = false;
                ret.message   = ex.Message;
            }

            return(ret);
        }
Пример #15
0
        public EntityOperationResult updaeTask(EmployeeTaskDTO empTask)
        {
            EntityOperationResult ret = new EntityOperationResult();

            try
            {
                var dbObj = dbContext.employeeTasks.FirstOrDefault(x => x.id == empTask.id);

                if (dbObj != null)
                {
                    dbObj.title            = empTask.title;
                    dbObj.description      = empTask.description;
                    dbObj.estimate         = empTask.estimate;
                    dbObj.prioritylevel_id = empTask.prioritylevel_id;
                    dbObj.state_id         = empTask.state_id;

                    dbContext.SaveChanges();
                    ret.id        = dbObj.emp_id;
                    ret.isSuccess = true;
                    ret.message   = "Successfully Save";
                }
                else
                {
                    ret.isSuccess = false;
                    ret.message   = "Record not found plz try again";
                }
            }
            catch (Exception ex)
            {
                ret.isSuccess = false;
                ret.message   = ex.Message;
            }

            return(ret);
        }
Пример #16
0
        public EntityOperationResult addTask(EmployeeTaskDTO empTask)
        {
            EntityOperationResult ret = new EntityOperationResult();

            try
            {
                var dbObj = new EmployeeTask();

                dbObj.title            = empTask.title;
                dbObj.emp_id           = empTask.emp_id;
                dbObj.description      = empTask.description;
                dbObj.estimate         = empTask.estimate;
                dbObj.prioritylevel_id = empTask.prioritylevel_id;
                dbObj.state_id         = empTask.state_id;

                dbContext.employeeTasks.Add(dbObj);
                dbContext.SaveChanges();
                ret.id        = dbObj.emp_id;
                ret.isSuccess = true;
                ret.message   = "Successfully Save";
            }
            catch (Exception ex)
            {
                ret.isSuccess = false;
                ret.message   = ex.Message;
            }

            return(ret);
        }
Пример #17
0
        public async Task <EntityOperationResult <Author> > EditAsync(AuthorDto editDto)
        {
            string errors = CheckBeforeModification(editDto, false);

            if (!string.IsNullOrEmpty(errors))
            {
                return(EntityOperationResult <Author> .Failure().AddError(errors));
            }

            try
            {
                var value = await repositoryBaseId.GetByIdAsync(editDto.Id);

                value.FirstName  = editDto.FirstName;
                value.MiddleName = editDto.MiddleName;
                value.SurName    = editDto.SurName;
                repositoryBaseId.Update(value);
                await repositoryBaseId.SaveAsync();

                return(EntityOperationResult <Author> .Success(value));
            }
            catch (Exception ex)
            {
                return(EntityOperationResult <Author> .Failure().AddError(ex.Message));
            }
        }
Пример #18
0
 public void After(EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
 {
     if (!result.Success)
     {
         return;
     }
 }
        public async Task <EntityOperationResult <Project> > DeleteItemAsync(ProjectDto projectDeleteDto)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                var project = unitOfWork.Project.GetById(projectDeleteDto.Id);

                if (project.ProjectUsers.Any(x => projectDeleteDto.ProjectTasks.Count > 0))
                {
                    return(EntityOperationResult <Project>
                           .Failure()
                           .AddError($"Есть задания удалите сперва их"));
                }

                try
                {
                    SetProjectIdToList(project.ProjectUsers, project.Id);
                    unitOfWork.Project.UpdateProjectUsers(null, project.ProjectUsers);
                    unitOfWork.Project.Delete(project);
                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <Project> .Success(project));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Project> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #20
0
        public void After(EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
        {
            if (operation.IsEntity(Notification.ENTITY) &&
                operation is EntityUpdate &&
                context.Get <bool>(CTXKEY_CREATENOTIFICATION) &&
                result.Success)
            {
                var update = operation as EntityUpdate;
                var method = ReplyMethods.ByNotification;//default
                if (update.ContainsProperty("Method"))
                {
                    method = update.Get <ReplyMethods>("Method");
                }



                var recipientUpdate = update.GetRelationUpdate(User.ENTITY, Roles.Recipient);
                var attachments     = update.GetMultipleRelationUpdates(NbuLibrary.Core.Domain.File.ENTITY, Roles.Attachment);
                if (attachments != null)
                {
                    foreach (var att in attachments)
                    {
                        _fileService.GrantAccess(att.Id.Value, FileAccessType.Read, new User(recipientUpdate.Id.Value));
                    }
                }

                var recipientQuery = new EntityQuery2(User.ENTITY, recipientUpdate.Id.Value);
                recipientQuery.AddProperty("Email");
                var recipient = _repository.Read(recipientQuery);
                var to        = recipient.GetData <string>("Email");
                var body      = update.Get <string>("Body");
                var subject   = update.Get <string>("Subject");
            }
        }
Пример #21
0
        public async Task <EntityOperationResult <Organization> > DeleeteItemAsync(OrganizationDeleteDto deleteDto, string path)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                if (unitOfWork.Organization.IsHasDishesh(deleteDto.Id))
                {
                    return(EntityOperationResult <Organization>
                           .Failure()
                           .AddError($"Кафе с именем {deleteDto.Name} имеет блюда"));
                }
                try
                {
                    var         organization = unitOfWork.Organization.GetById(deleteDto.Id);
                    FileService fileService  = new FileService(null, path + "/Org/\\" + organization.PictureName,
                                                               string.Empty, organization.PictureFormat);
                    fileService.AddOrDelete(true);
                    unitOfWork.Organization.Delete(organization);
                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <Organization> .Success(organization));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Organization> .Failure().AddError(ex.Message));
                }
            }
        }
        public async Task <EntityOperationResult <ProjectTask> > EditItemAsync(ProjectTaskDto projectTaskEditDto)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                var result = Check(projectTaskEditDto);
                if (result != null)
                {
                    return(result);
                }
                var projectTask = unitOfWork.ProjectTask.GetById(projectTaskEditDto.Id);


                try
                {
                    projectTask.Name       = projectTaskEditDto.Name;
                    projectTask.AuthorId   = projectTaskEditDto.Author.Id;
                    projectTask.ExecutorId = projectTaskEditDto.Executor.Id;
                    projectTask.Status     = (int)projectTaskEditDto.Status;
                    projectTask.ProjectId  = projectTaskEditDto.Project.Id;
                    projectTask.Priority   = projectTaskEditDto.Priority;
                    projectTask.Comment    = projectTaskEditDto.Comment;

                    unitOfWork.ProjectTask.Update(projectTask);
                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <ProjectTask> .Success(projectTask));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <ProjectTask> .Failure().AddError(ex.Message));
                }
            }
        }
        public async Task <EntityOperationResult <Project> > EditItemAsync(ProjectDto projectEditDto)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                var result = Check(projectEditDto);
                if (result != null)
                {
                    return(result);
                }
                var project = unitOfWork.Project.GetById(projectEditDto.Id);
                for (int i = 0; i < projectEditDto.ProjectUsers.Count; i++)
                {
                    if (projectEditDto.ProjectUsers[i].Status == ProjectUserStatus.New)
                    {
                        if (project.ProjectUsers.Count(x => x.UserId == projectEditDto.ProjectUsers[i].Id) > 0)
                        {
                            return(EntityOperationResult <Project>
                                   .Failure()
                                   .AddError($"Пользователь {projectEditDto.ProjectUsers[i].Name} уже есть в базе"));
                        }
                    }
                }

                try
                {
                    GetProjectDtoToProject(projectEditDto, project);

                    unitOfWork.Project.Update(project);
                    await unitOfWork.CompleteAsync();

                    var projectUserList = Mapper.Map <List <ProjectUser> >(projectEditDto.ProjectUsers
                                                                           .Where(x => x.Status == ProjectUserStatus.New)
                                                                           .ToList());
                    SetProjectIdToList(projectUserList, project.Id);
                    List <int> deleteList = projectEditDto.ProjectUsers
                                            .Where(x => x.Status == ProjectUserStatus.Delete)
                                            .Select(x => x.Id).ToList();
                    var projectUserDeleteList = new List <ProjectUser>();
                    if (deleteList?.Count > 0)
                    {
                        projectUserDeleteList = project.ProjectUsers
                                                .Where(y => deleteList.Any(x => x == y.Id)).ToList();
                    }
                    SetProjectIdToList(projectUserDeleteList, project.Id);
                    unitOfWork.Project.UpdateProjectUsers(projectUserList, projectUserDeleteList);
                    await unitOfWork.CompleteAsync();

                    return(EntityOperationResult <Project> .Success(project));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Project> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #24
0
        private async Task <EntityOperationResult <CurrencyDto> > GetDataFromHtmlAsync(string htmlPage, DateTime date)
        {
            var result   = new EntityOperationResult <CurrencyDto>();
            var parser   = new HtmlParser();
            var document = parser.ParseDocument(htmlPage);

            if (document.GetElementsByClassName("sinResultados").Any())
            {
                Logger.LogInformation("Creating Currency object with No Price.");
                result.Entity = CreateCurrency(date, "0", ServiceSettings.CurrencyCode, "0");

                return(result);
            }

            var titleValidation = document.GetElementsByTagName("tr").ElementAtOrDefault(1);

            if (titleValidation == null)
            {
                await SendSlackNotification(htmlPage, date, CurrencyCodeEnum.Ars);

                result.AddError("Html error", $"Error getting HTML, not exist currency USD. Check Date {date.ToUniversalTime().ToShortDateString()}.");
                return(result);
            }

            var tableRows   = document.QuerySelectorAll("table > tbody > tr");
            var usdCurrency = GetCurrencyByDate(tableRows, date);

            if (usdCurrency == null)
            {
                Logger.LogInformation("Creating Currency object with No Price.");
                result.Entity = CreateCurrency(date, "0", ServiceSettings.CurrencyCode, "0");

                return(result);
            }

            var columns    = usdCurrency.GetElementsByTagName("td");
            var buyColumn  = columns.ElementAtOrDefault(1);
            var saleColumn = columns.ElementAtOrDefault(2);
            var dateColumn = columns.ElementAtOrDefault(3);

            if (buyColumn != null && saleColumn != null && dateColumn != null)
            {
                Logger.LogInformation("Creating Currency object to returned to the client.");
                result.Entity = CreateCurrency(date, saleColumn.InnerHtml, ServiceSettings.CurrencyCode, buyColumn.InnerHtml);

                return(result);
            }

            await SendSlackNotification(htmlPage, date, CurrencyCodeEnum.Ars);

            result.AddError("Error Bna", "Error getting currency, please check HTML.");
            return(result);
        }
Пример #25
0
        public async Task <EntityOperationResult <T> > UpdateAsync(TDto dto)
        {
            try
            {
                T value = mapper.Map <T>(dto);
                repositoryBase.Update(value);

                return(EntityOperationResult <T> .Success(value));
            }
            catch (Exception ex)
            {
                return(EntityOperationResult <T> .Failure().AddError(ex.Message));
            }
        }
Пример #26
0
        public override async Task <EntityOperationResult <AuthorDto> > GetByIdDeteilsAsync(Guid id)
        {
            try
            {
                var entity = await authorRepository.GetByIdAsync(id, GetOptionsForDeteils());

                var dto = mapper.Map <AuthorDto>(entity);
                return(EntityOperationResult <AuthorDto> .Success(dto));
            }
            catch (Exception ex)
            {
                return(EntityOperationResult <AuthorDto> .Failure().AddError(ex.Message));
            }
        }
Пример #27
0
        public async Task <EntityOperationResult <Dish> > EditItemAsync(DishEditDto editDto, string path)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                if (unitOfWork.Dish.IsExistByNAme(editDto.Id, editDto.Name, editDto.OrganizationId))
                {
                    return(EntityOperationResult <Dish>
                           .Failure()
                           .AddError($"Блюдо с именем {editDto.Name} уже существует"));
                }
                if (editDto.Price <= 0)
                {
                    return(EntityOperationResult <Dish>
                           .Failure()
                           .AddError("Цена не может быть меньше или равняться нулю"));
                }

                try
                {
                    var    dish             = unitOfWork.Dish.GetById(editDto.Id);
                    string oldPictureFormat = dish.PictureFormat;
                    var    fileService      = new FileService(editDto.File, path + "\\" + dish.PictureName,
                                                              editDto.PictureName, dish.PictureFormat);
                    dish.Name  = editDto.Name;
                    dish.Price = editDto.Price;
                    if (editDto.File?.Length > 0 && !editDto.IsPictureDelete)
                    {
                        dish.PictureFormat = fileService.GetTypeFile();
                    }
                    else if (editDto.IsPictureDelete)
                    {
                        dish.PictureFormat = string.Empty;
                    }
                    dish.Comment = editDto.Comment;

                    unitOfWork.Dish.Update(dish);
                    await unitOfWork.CompleteAsync();

                    fileService.AddOrDelete(editDto.IsPictureDelete);

                    return(EntityOperationResult <Dish> .Success(dish));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Dish> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #28
0
        public async Task GetCurrency_ShouldBeHttpStatusCodeBadRequest_WhenResponseReturnAnError()
        {
            //Arrange
            var result = new EntityOperationResult <CurrencyDto>();

            result.AddError("", "");
            _testServer.CurrencyServiceMock.Setup(x => x.GetCurrencyByCurrencyCodeAndDate(
                                                      It.IsAny <DateTime>(),
                                                      It.IsAny <CurrencyCodeEnum>()))
            .ReturnsAsync(result);

            // Act
            var response = await _client.GetAsync("conversion/Ars/01-02-2012");

            // Assert
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
        }
Пример #29
0
        public async Task GetCurrency_ShouldBeHttpStatusCodeBadRequest_WhenUrlDoesHaveInvalidCurrencyCode()
        {
            //Arrange
            const string currencyCode = "Test";
            var          result       = new EntityOperationResult <CurrencyDto>();

            result.AddError("Currency code invalid", $"Currency code invalid: {currencyCode}");
            _testServer.CurrencyServiceMock.Setup(x => x.GetCurrencyByCurrencyCodeAndDate(
                                                      It.IsAny <DateTime>(),
                                                      It.IsAny <CurrencyCodeEnum>()))
            .ReturnsAsync(result);

            // Act
            var response = await _client.GetAsync("conversion/TEST/02-02-2020");

            // Assert
            Assert.False(response.IsSuccessStatusCode);
        }
Пример #30
0
        public async Task <EntityOperationResult <Dish> > CreateItemAsync(DishCreateDto createDto, string path)
        {
            using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork())
            {
                if (unitOfWork.Dish.IsExistByNAme(createDto.Name, createDto.OrganizationId))
                {
                    return(EntityOperationResult <Dish>
                           .Failure()
                           .AddError($"Блюдо с именем {createDto.Name} уже существует"));
                }
                if (createDto.Price <= 0)
                {
                    return(EntityOperationResult <Dish>
                           .Failure()
                           .AddError("Цена не может быть меньше или равняться нулю"));
                }
                try
                {
                    var dish = new Dish
                    {
                        Name           = createDto.Name,
                        OrganizationId = createDto.OrganizationId,
                        Price          = createDto.Price,
                        PictureName    = System.Guid.NewGuid().ToString(),
                        Comment        = createDto.Comment
                    };

                    var fileService = new FileService(createDto.File, path + "\\" +
                                                      dish.PictureName, createDto.PictureName);
                    dish.PictureFormat = fileService.GetTypeFile();
                    var entity = await unitOfWork.Dish.AddAsync(dish);

                    await unitOfWork.CompleteAsync();

                    fileService.Add();

                    return(EntityOperationResult <Dish> .Success(entity));
                }
                catch (Exception ex)
                {
                    return(EntityOperationResult <Dish> .Failure().AddError(ex.Message));
                }
            }
        }
Пример #31
0
        public void After(EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
        {
            if (!result.Success)
                return;

            if (operation.IsEntity(EntityConsts.Issue) && operation is EntityUpdate)
            {
                var update = operation as EntityUpdate;
                if (context.Get<bool>(CTXKEY_SEND_ISSUE))
                {
                    SendIssueToSubscribers(operation as EntityUpdate);
                }

                if (update.ContainsRelation(File.ENTITY, Roles.Content))
                {
                    var filesAttached = update.GetMultipleRelationUpdates(File.ENTITY, Roles.Content).Where(fu => fu.Operation == RelationOperation.Attach);
                    if (filesAttached.Count() > 0)
                    {
                        var issue = update.ToEntity();
                        var q = new EntityQuery2(EntityConsts.Magazine);
                        q.WhereRelated(new RelationQuery(EntityConsts.Issue, Roles.Issue, issue.Id));
                        q.Include(User.ENTITY, Roles.Subscriber);
                        var mag = _repository.Read(q);
                        var subscribers = mag.GetManyRelations(User.ENTITY, Roles.Subscriber).Select(r => new User(r.Entity));
                        foreach (var subscriber in subscribers)
                        {
                            foreach (var fileUpdate in filesAttached)
                            {
                                if (!_fileService.HasAccess(subscriber, fileUpdate.Id.Value))
                                    _fileService.GrantAccess(fileUpdate.Id.Value, FileAccessType.Read, subscriber);
                            }
                        }
                    }
                }
            }
            else if (operation is EntityUpdate)
            {
                var update = operation as EntityUpdate;
                if (update.IsEntity(User.ENTITY) && update.ContainsRelation(EntityConsts.Magazine, Roles.Subscriber))
                {
                    var rus = update.GetMultipleRelationUpdates(EntityConsts.Magazine, Roles.Subscriber).Where(ru => ru.Operation == RelationOperation.Attach);
                    foreach (var ru in rus)
                    {
                        var q = new EntityQuery2(EntityConsts.Issue);
                        q.WhereRelated(new RelationQuery(EntityConsts.Magazine, Roles.Issue, ru.Id.Value));
                        q.Include(File.ENTITY, Roles.Content);
                        var issues = _repository.Search(q);
                        foreach (var issue in issues)
                        {
                            //The user cannot give himself an access to file - only owner or administrator can.
                            using (_securityService.BeginSystemContext())
                            {
                                GiveFileAccessForIssue(issue, new User(update.ToEntity()));
                            }
                        }
                    }
                }
                else if (update.IsEntity(EntityConsts.Magazine) && update.ContainsRelation(User.ENTITY, Roles.Subscriber))
                {
                    var rus = update.GetMultipleRelationUpdates(User.ENTITY, Roles.Subscriber).Where(ru => ru.Operation == RelationOperation.Attach);

                    if (rus.Count() > 0)
                    {
                        var q = new EntityQuery2(EntityConsts.Issue);
                        q.WhereRelated(new RelationQuery(EntityConsts.Magazine, Roles.Issue, update.Id.Value));
                        q.Include(File.ENTITY, Roles.Content);
                        var issues = _repository.Search(q);
                        foreach (var ru in rus)
                        {
                            foreach (var issue in issues)
                                GiveFileAccessForIssue(issue, new User(ru.Id.Value));
                        }
                    }
                }
                else if (update.IsEntity(EntityConsts.Magazine) && update.ContainsProperty("IsActive"))
                {
                    var isActiveNew = update.Get<bool>("IsActive");
                    if (isActiveNew == false && context.Get<bool>(CTXKEY_ISACTIVEOLD))
                    {
                        SendMagazineNotActiveToSubscribers(update);
                    }
                }
            }
        }
Пример #32
0
 private void AppyLogicAfter(EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
 {
     foreach (var logic in _logics)
         logic.After(operation, context, result);
 }
Пример #33
0
        public void After(EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
        {
            if (operation.IsEntity(Notification.ENTITY)
                && operation is EntityUpdate
                && context.Get<bool>(CTXKEY_CREATENOTIFICATION)
                && result.Success)
            {
                var update = operation as EntityUpdate;
                var method = ReplyMethods.ByNotification;//default
                if (update.ContainsProperty("Method"))
                    method = update.Get<ReplyMethods>("Method");

                var recipientUpdate = update.GetRelationUpdate(User.ENTITY, Roles.Recipient);
                var attachments = update.GetMultipleRelationUpdates(NbuLibrary.Core.Domain.File.ENTITY, Roles.Attachment);
                if (attachments != null)
                    foreach (var att in attachments)
                    {
                        _fileService.GrantAccess(att.Id.Value, FileAccessType.Read, new User(recipientUpdate.Id.Value));
                    }

                var recipientQuery = new EntityQuery2(User.ENTITY, recipientUpdate.Id.Value);
                recipientQuery.AddProperty("Email");
                var recipient = _repository.Read(recipientQuery);
                var to = recipient.GetData<string>("Email");
                var body = update.Get<string>("Body");
                var subject = update.Get<string>("Subject");
            }
        }
Пример #34
0
        public void After(Core.Services.tmp.EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
        {
            if (!result.Success)
                return;

            var update = operation as EntityUpdate;
            if (operation.IsEntity(EntityConsts.BibliographicListQuery) && update != null && update.ContainsProperty("Status") && update.Get<QueryStatus>("Status") == QueryStatus.Completed)
            {
                var q = new EntityQuery2(EntityConsts.BibliographicListQuery, update.Id.Value) { AllProperties = true };
                q.Include(User.ENTITY, Roles.Customer);
                var biblListQuery = _repository.Read(q);
                var user = new User(biblListQuery.GetSingleRelation(User.ENTITY, Roles.Customer).Entity);
                var template = _templateService.Get(new Guid(NotificationTemplates.QUERY_COMPLETED));
                string subject = null, body = null;
                Dictionary<string, Entity> templateContext = new Dictionary<string, Entity>(StringComparer.InvariantCultureIgnoreCase);
                templateContext.Add("Customer", user);
                templateContext.Add("Query", biblListQuery);

                _templateService.Render(template, templateContext, out subject, out body);
                var withEmail = biblListQuery.GetData<ReplyMethods>("ReplyMethod") == ReplyMethods.ByEmail;
                _notificationService.SendNotification(withEmail, new User[] { user }, subject, body, null, new Relation[] { new Relation(Notification.ROLE, biblListQuery) });
            }
            else if (operation.IsEntity(Payment.ENTITY) && update != null && update.ContainsProperty("Status") && update.Get<PaymentStatus>("Status") == PaymentStatus.Paid)
            {
                var q = new EntityQuery2(EntityConsts.BibliographicListQuery);
                q.AddProperties("Number");
                q.WhereRelated(new RelationQuery(Payment.ENTITY, Roles.Payment, update.Id.Value));
                q.Include(User.ENTITY, Roles.Customer);
                q.Include(File.ENTITY, Roles.File);
                var biblListQuery = _repository.Read(q);
                if (biblListQuery != null)
                {
                    var file = new File(biblListQuery.GetSingleRelation(File.ENTITY, Roles.File).Entity);
                    var user = new User(biblListQuery.GetSingleRelation(User.ENTITY, Roles.Customer).Entity);

                    var template = _templateService.Get(new Guid(NotificationTemplates.PAYMENT_COMPLETED));

                    string subject = null, body = null;
                    Dictionary<string, Entity> templateContext = new Dictionary<string, Entity>(StringComparer.InvariantCultureIgnoreCase);
                    templateContext.Add("Customer", user);
                    templateContext.Add("Query", biblListQuery);

                    _templateService.Render(template, templateContext, out subject, out body);

                    var withEmail = biblListQuery.GetData<ReplyMethods>("ReplyMethod") == ReplyMethods.ByEmail;
                    _notificationService.SendNotification(withEmail, new User[] { user }, subject, body, new File[] { file }, new Relation[] { new Relation(Notification.ROLE, biblListQuery) });
                    //_fileService.GrantAccess(file.Id, FileAccessType.Read, new User(biblQuery.GetSingleRelation(User.ENTITY, Roles.Customer).Entity));

                }
            }
        }
Пример #35
0
 public void After(EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
 {
     if (!result.Success)
         return;
 }
Пример #36
0
 public void After(Services.tmp.EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
 {
 }
Пример #37
0
 public void After(Services.tmp.EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
 {
     if (operation.IsEntity(NbuLibrary.Core.Domain.File.ENTITY)
         && operation is EntityDelete
         && result.Success)
     {
         var file = context.Get<NbuLibrary.Core.Domain.File>(CTXKEY_FILEDELETION);
         if (file != null)
             _fileService.DeleteFileContent(Guid.Parse(file.ContentPath));
     }
 }
Пример #38
0
        public void After(EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
        {
            if (!result.Success)
                return;

            if (!operation.IsEntity(User.ENTITY))
                return;

            var update = operation as EntityUpdate;
            if (update == null)
                return;

            if (context.Get<bool>(CTXKEY_USER_PASSWORDRECOVERY))
            {
                var user = new User(_repository.Read(new EntityQuery2(update.Entity, update.Id.Value) { AllProperties = true }));
                var template = _templateService.Get(new Guid(NotificationTemplates.USER_PASSWORDRECOVERY));

                string subject = null, body = null;
                Dictionary<string, Entity> templateContext = new Dictionary<string, Entity>(StringComparer.InvariantCultureIgnoreCase);
                templateContext.Add("User", user);

                _templateService.Render(template, templateContext, out subject, out body);

                //TODO: async execution
                _notificationService.SendEmail(user.Email, subject, body, null);

            }

            if (context.Get<bool>(CTXKEY_USER_CREATION))
            {
                var user = new User(_repository.Read(new EntityQuery2(update.Entity, update.Id.Value) { AllProperties = true }));

                var pwd = context.Get<string>(CTXKEY_PASSWORD_UPDATE);
                user.SetData<String>("Password", pwd);

                var template = _templateService.Get(new Guid(NotificationTemplates.USER_CREATED));

                string subject = null, body = null;
                Dictionary<string, Entity> templateContext = new Dictionary<string, Entity>(StringComparer.InvariantCultureIgnoreCase);
                templateContext.Add("User", user);

                _templateService.Render(template, templateContext, out subject, out body);

                //TODO: async execution
                _notificationService.SendEmail(user.Email, subject, body, null);
                if (update.ContainsProperty("IsActive") && update.Get<bool>("IsActive"))
                    SendUserActivationEmail(user);
            }
            else if (update.ContainsProperty("IsActive") && update.Get<bool>("IsActive"))
            {
                var user = new User(_repository.Read(new EntityQuery2(update.Entity, update.Id.Value) { AllProperties = true }));
                SendUserActivationEmail(user);
            }
            else if (context.Get<int>(CTXKEY_UPDATE_PROFILE) > 0)
            {
                if (update.ContainsRelation("UserGroup", "UserGroup")
                    || update.ContainsProperty("FacultyNumber")
                    || update.ContainsProperty("CardNumber"))
                {
                    var user = new User(context.Get<int>(CTXKEY_UPDATE_PROFILE));
                    user.IsActive = false;
                    _repository.Update(user);
                    _securityService.Logout();
                    result.Data.Add("account_warning_logged_out", true);
                }
                if (update.ContainsProperty("Email"))
                {
                    _securityService.UpdateCurrentUserEmail(update.Get<string>("Email"));
                    result.Data.Add("account_event_email_changed", update.Get<string>("Email"));
                }
            }
        }
Пример #39
0
        public void After(Services.tmp.EntityOperation operation, EntityOperationContext context, EntityOperationResult result)
        {
            if (!result.Success)
                return;

            using (var dbContext = _dbService.GetDatabaseContext(true))
            {
                if (operation is EntityDelete)
                {
                    LogOperation(operation.Entity, operation.Id.Value, HistoryOperation.Deleted, DateTime.Now, dbContext.Connection);
                }
                else if (operation is EntityUpdate)
                {
                    var update = operation as EntityUpdate;
                    bool created = result.Data.ContainsKey("Created");
                    var now = DateTime.Now;
                    int opId = LogOperation(update.Entity, update.Id.Value, created ? HistoryOperation.Created : HistoryOperation.Modified, now, dbContext.Connection);
                    foreach (var propUpdate in update.PropertyUpdates)
                    {
                        LogPropertyChange(opId, propUpdate.Key, propUpdate.Value, dbContext.Connection);
                    }

                    foreach (var relUpdate in update.RelationUpdates)
                    {
                        int relChangeId = LogRelationChange(opId, relUpdate.Entity, relUpdate.Role, relUpdate.Id.Value, relUpdate.Operation, dbContext.Connection);
                        foreach (var propUpdate in relUpdate.PropertyUpdates)
                        {
                            LogRelationPropertyChange(relChangeId, propUpdate.Key, propUpdate.Value, dbContext.Connection);
                        }
                    }
                }

                dbContext.Complete();
            }
        }