public ValidationData ValidateCreateQCEvent(ClaimsPrincipal principal,
                                                    CreateQCEventModel model)
        {
            var validationData = new ValidationData();

            if (model.Details != null)
            {
                foreach (var d in model.Details)
                {
                    if (!Data.Constants.DefectTypeCode.ALL.Contains(d.DefectTypeCode))
                    {
                        validationData = validationData.Fail("Invalid defect type",
                                                             code: Constants.AppResultCode.FailValidation);
                    }
                }
            }
            DateTime createdTime;

            if (!DateTime.TryParseExact(
                    model.CreatedTimeStr, model.DateFormat, CultureInfo.InvariantCulture,
                    DateTimeStyles.AdjustToUniversal, out createdTime))
            {
                validationData = validationData.Fail("Invalid datetime", code: Constants.AppResultCode.FailValidation);
            }
            else
            {
                validationData.TempData[nameof(createdTime)] = createdTime;
            }
            return(validationData);
        }
        public QCEvent CreateQCEvent(CreateQCEventModel model, DateTime createdTime)
        {
            var entity = model.ToDest();

            entity.CreatedTime = createdTime;
            entity.SideImages  = model.SideImages == null ? null :
                                 JsonConvert.SerializeObject(model.SideImages);
            PrepareCreate(entity);
            return(context.QCEvent.Add(entity).Entity);
        }
        public IActionResult Create(CreateQCEventModel model)
        {
            var validationData = _service.ValidateCreateQCEvent(User, model);

            if (!validationData.IsValid)
            {
                return(BadRequest(AppResult.FailValidation(data: validationData)));
            }
            DateTime createdTime;

            createdTime = validationData.GetTempData <DateTime>(nameof(createdTime));
            var entity = _service.CreateQCEvent(model, createdTime);

            context.SaveChanges();
            if (Startup.KafkaProducer != null)
            {
                _service.ProduceEventToKafkaServer(Startup.KafkaProducer,
                                                   entity, Startup.CurrentConfig, Settings.Instance.QCEventImageFolderPath,
                                                   Constants.Paths.STATE_PATH);
            }
            return(Created($"/{Business.Constants.ApiEndpoint.RESOURCE_API}?id={entity.Id}",
                           AppResult.Success(entity.Id)));
        }