コード例 #1
0
        public bool Create(InfrastructureUpsertDto infrastructure)
        {
            var eventArgs = new CreateInfraEventArgs {
                InfrastructureForPostDto = infrastructure, Created = false
            };

            OnCreateInfrastructure(eventArgs);
            return(eventArgs.Created);
        }
コード例 #2
0
        public async Task <IActionResult> Create(InfrastructureUpsertDto dto)
        {
            var result = await _infrastructureService.CreateAsync(dto);

            switch (result.ClientStatusCode)
            {
            case AppEnums.OperationStatus.Ok:
                return(Ok(result.ReturnedData));

            case AppEnums.OperationStatus.ValidationError:
                return(BadRequest(result.ValidationResults));

            default:
                return(BadRequest(result.ClientMessageContent));
            }
        }
コード例 #3
0
        public async Task<ClientMessage<int>> CreateAsync(InfrastructureUpsertDto postDto)
        {
            #region local parameters
            ClientMessage<int> clientMessage = new ClientMessage<int>();
            var dtoValidator = new InfrastructureUpsertValidator();
            #endregion local parameters

            #region validate payload
            var validationResult = dtoValidator.Validate(postDto);
            if (validationResult != null && validationResult.IsValid == false)
            {
                clientMessage.ClientStatusCode = AppEnums.OperationStatus.ValidationError;
                clientMessage.ValidationResults = validationResult.Errors.Select(modelError => new System.ComponentModel.DataAnnotations.ValidationResult(errorMessage: modelError.ErrorMessage)).ToList();
                return clientMessage;
            }
            #endregion validate payload

            #region Infrastructure already exists
            var alreadyExists = await _context.Infrastructures.Where(t => t.Name == postDto.Name && t.DeletedDate == null)
                .FirstOrDefaultAsync();
            if (alreadyExists != null)
            {
                clientMessage.ClientStatusCode = AppEnums.OperationStatus.ValidationError;
                clientMessage.ClientMessageContent = new List<string> { "Error : Infrastructure already exists" };
                return clientMessage;
            }
            #endregion Infrastructure already exists

            #region create infrastructure on cloud service provider
            var serviceManager = new ServiceManager.ServiceManager();
            var igsProvider = new IGSCloudServices();

            //now we need to notify cloud provider to make them create the infrastructure ,there are 2 methods
            //first method is to use reflection and query assembly and get all service providers then call create method like below
            //var allCloudProvider = typeof(CloudServices).Assembly.ExportedTypes.Where(t =>
            //        typeof(CloudServices).IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract)
            //    .Select(Activator.CreateInstance).Cast<CloudServices>().ToList();
            //allCloudProvider.ForEach(t=>t.OnCreateService(/*method parameters goes here */));

            //second method is to fire event and make all provider subscribe to that event like below
            // all providers must subscribe 
            serviceManager.CreateInfrastructure += igsProvider.OnCreateService;
            var created = serviceManager.Create(postDto);

            if (!created)
            {
                clientMessage.ClientStatusCode = AppEnums.OperationStatus.Error;
                clientMessage.ClientMessageContent = new List<string> { "Error : an error occured while creating infrastructure on provider, or you used unsupported provider" };
                return clientMessage;
            }
            #endregion region create infrastructure on cloud service provider

            #region Add to database
            var infrastructure = _mapper.Map<Infrastructure>(postDto);
            await _context.Infrastructures.AddAsync(infrastructure);

            var effectedRows = _context.SaveChanges();
            if (effectedRows == 0)
            {
                clientMessage.ClientStatusCode = AppEnums.OperationStatus.Error;
                clientMessage.ClientMessageContent = new List<string> { "Error : an error occured while saving infrastructure details to database" };
                return clientMessage;
            }

            clientMessage.ClientStatusCode = AppEnums.OperationStatus.Ok;
            clientMessage.ReturnedData = infrastructure.Id;

            return clientMessage;
            #endregion Add to database


        }