예제 #1
0
        public async Task <IActionResult> AddTechnology(
            [FromServices] IEntityRepository entityRepository,
            [FromServices] IQueue queue,
            [FromServices] ITechnologyRepository technologyRepository,
            [FromBody] EntityTechnology entityTechnology,
            string id)
        {
            try
            {
                var user = HttpContext.User;
                if (!_validation.Validate(entityTechnology))
                {
                    return(BadRequest());
                }
                await entityRepository.AddTechnology(entityTechnology, id, technologyRepository);

                var author = user.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
                queue.PublishAsync("history", JsonConvert.SerializeObject(
                                       new HistoryMessage()
                {
                    Id   = entityTechnology.Id,
                    Data = JsonConvert.SerializeObject(
                        entityTechnology,
                        new JsonSerializerSettings
                    {
                        NullValueHandling = NullValueHandling.Ignore
                    }
                        ),
                    Type   = "entity-technology",
                    Author = author
                }
                                       ));
                return(NoContent());
            }
            catch (ArgumentException ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
            catch (MongoWriteException exception)
            {
                if (exception.WriteError.Category == ServerErrorCategory.DuplicateKey)
                {
                    return(Conflict(new { message = "This technology is already in your entity" }));
                }
                return(BadRequest());
            }
        }