Beispiel #1
0
        public async Task <IActionResult> Create(string id, [FromBody] ProviderFingerprintCreateModel model)
        {
            if (string.IsNullOrWhiteSpace(id))
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(BadModelResponse(ModelState));
            }

            return(Ok(await _providerManager.CreateFingerprint(id, model)));
        }
        /// <summary>
        /// Create fingerprint for provider
        /// </summary>
        /// <param name="providerId">Target provider id</param>
        /// <param name="model">Create fingerprint model</param>
        /// <returns>Provider fingerprint display model</returns>
        public async Task <ProviderFingerprintDisplayModel> CreateFingerprint(string providerId, ProviderFingerprintCreateModel model)
        {
            if (string.IsNullOrWhiteSpace(providerId))
            {
                throw new ModelDamagedException(nameof(providerId), "is required");
            }

            if (model == null)
            {
                throw new ModelDamagedException(nameof(model), "is required");
            }

            if (string.IsNullOrWhiteSpace(model.Name))
            {
                throw new ModelDamagedException(nameof(model.Name), "is required");
            }

            var entity = await _providerRepository.Get(providerId);

            if (entity == null)
            {
                throw new EntityNotFoundException(providerId, typeof(Provider));
            }

            if (entity.Owner.Id != (await GetCurrentUser())?.Id)
            {
                throw new AccessDeniedException(entity.Id, typeof(Provider));
            }

            if (entity.Fingerprints == null)
            {
                entity.Fingerprints = new List <ProviderFingerprint>();
            }

            if (entity.Fingerprints.Any(x => x.Name.ToLower() == model.Name.ToLower()))
            {
                throw new MRSystemException($"Fingerprint with name {model.Name} already exists");
            }

            if (entity.Fingerprints == null)
            {
                entity.Fingerprints = new List <ProviderFingerprint>();
            }

            var fingerprint = _mapper.Map <ProviderFingerprint>(model);

            fingerprint.Fingerprint           = FingerprintGenerator.Generate();
            fingerprint.FingerprintUpdateTime = DateTime.UtcNow;

            entity.Fingerprints.Add(fingerprint);
            await _providerRepository.UpdateFingerprints(entity);

            return(_mapper.Map <ProviderFingerprintDisplayModel>(fingerprint));
        }