Exemple #1
0
        public async Task <IntegrationEditResponse> EditIntegration(IntegrationEditRequest request)
        {
            var response = new IntegrationEditResponse();

            var currentUser = _cacheManager.GetCachedCurrentUser(request.CurrentUserId);

            if (!currentUser.IsAdmin)
            {
                response.SetInvalid();
                return(response);
            }

            if (await _organizationRepository.Any(x => x.Id == currentUser.OrganizationId && !x.IsActive))
            {
                response.SetInvalid();
                return(response);
            }

            var integration = await _integrationRepository.Select(x => x.Uid == request.IntegrationUid);

            if (integration.IsNotExist())
            {
                response.SetInvalidBecauseEntityNotFound();
                return(response);
            }

            if (integration.OrganizationId != currentUser.OrganizationId)
            {
                response.SetInvalid();
                return(response);
            }

            var trimName = request.Name.Trim();

            if (await _integrationRepository.Any(x => x.Name == trimName &&
                                                 x.OrganizationId == currentUser.OrganizationId &&
                                                 x.Uid != request.IntegrationUid))
            {
                response.Status = ResponseStatus.Failed;
                response.ErrorMessages.Add("integration_name_must_be_unique");
                return(response);
            }

            var updatedEntity = _integrationFactory.CreateEntityFromRequest(request, integration);
            var result        = await _integrationRepository.Update(request.CurrentUserId, updatedEntity);

            if (result)
            {
                response.Item   = _integrationFactory.CreateDtoFromEntity(updatedEntity);
                response.Status = ResponseStatus.Success;
                return(response);
            }

            response.SetFailed();
            return(response);
        }
        public async override Task <int> HandleCommand(IntegrationBaseCommand <T> request, CancellationToken cancellationToken)
        {
            //0: success; -1: error; 1: BadRequest.

            //todo check data rule
            var model = GlobalConfiguration.IntegrationTemplate.ModelTemplates.FirstOrDefault(m => m.Name == typeof(T).Name);

            if (model == null)
            {
                throw new BusinessException($"Type '{typeof(T).Name}' doesn't have in ModelTemplates");
            }

            T    value = null;
            long id    = 0;

            switch (request.Type)
            {
            case IntergrationHandleType.Insert:
                request.Value = CreateBuild(request.Value, request.LoginSession);
                return(await repository.Write(request.LoginSession, request.Value));

            case IntergrationHandleType.Update:
                id    = (int)typeof(T).GetProperty("Id").GetValue(request.Value);
                value = await queries.Get(id);

                if (value == null)
                {
                    throw new BusinessException($" {typeof(T).Name} with value: {id} doesn't existed");
                }
                request.Value             = UpdateBuild(request.Value, request.LoginSession);
                request.Value.CreatedBy   = value.CreatedBy;
                request.Value.CreatedDate = value.CreatedDate;
                return(await repository.Update(request.LoginSession, request.Value));

            case IntergrationHandleType.Delete:
                id    = (int)typeof(T).GetProperty("Id").GetValue(request.Value);
                value = await queries.Get(id);

                if (value == null)
                {
                    throw new BusinessException($" {typeof(T).Name} with value: {id} doesn't existed");
                }
                request.Value.CreatedBy   = value.CreatedBy;
                request.Value.CreatedDate = value.CreatedDate;
                request.Value             = DeleteBuild(request.Value, request.LoginSession);
                return(await repository.Delete(request.LoginSession, request.Value));

            default:
                return(-1);
            }
        }