Пример #1
0
        // Beacuse we wil receive an IFoormFile for the picture
        // we change [FromBody] binding to [FromForm]
        public async Task <ActionResult> Post([FromForm] PersonCreationDTO personCreation)
        {
            var person = mapper.Map <Person>(personCreation);

            if (personCreation.Picture != null)
            {
                using (var memoryStream = new MemoryStream())
                {
                    await personCreation.Picture.CopyToAsync(memoryStream);

                    var content   = memoryStream.ToArray();
                    var extension = Path.GetExtension(personCreation.Picture.FileName);
                    person.Picture =
                        await fileStorageService.SaveFile(content, extension,
                                                          containerName, personCreation.Picture.ContentType);
                }
            }

            context.Add(person);
            await context.SaveChangesAsync();

            var personDTO = mapper.Map <PersonDTO>(person);

            return(new CreatedAtRouteResult("GetPersonById", new { personDTO.Id }, personDTO));
        }
Пример #2
0
        public async Task <ActionResult> Put(int Id, [FromForm] PersonCreationDTO personCreation)
        {
            var personFromDb = await context.Persons.FirstOrDefaultAsync(x => x.Id == Id);

            if (personFromDb == null)
            {
                return(NotFound());
            }

            personFromDb = mapper.Map(personCreation, personFromDb);

            if (personCreation.Picture != null)
            {
                using (var memoryStream = new MemoryStream())
                {
                    await personCreation.Picture.CopyToAsync(memoryStream);

                    var content   = memoryStream.ToArray();
                    var extension = Path.GetExtension(personCreation.Picture.FileName);
                    personFromDb.Picture =
                        await fileStorageService.EditFile(content, extension, containerName,
                                                          personFromDb.Picture,
                                                          personCreation.Picture.ContentType);
                }
            }
            await context.SaveChangesAsync();

            return(NoContent());
        }
Пример #3
0
        public async Task <ActionResult> Put(int id, [FromForm] PersonCreationDTO personCreationDTO)
        {
            var personDB = await _context.People.FirstOrDefaultAsync(x => x.Id == id);

            if (personDB == null)
            {
                return(NotFound());
            }
            personDB = _mapper.Map(personCreationDTO, personDB);
            if (personCreationDTO.Picture != null)
            {
                using (var memeoryStream = new MemoryStream())
                {
                    await personCreationDTO.Picture.CopyToAsync(memeoryStream);

                    var content   = memeoryStream.ToArray();
                    var extention = Path.GetExtension(personCreationDTO.Picture.FileName);     //.Split(".")[1];
                    personDB.Picture =
                        await _fileStorageService.EditFile(content,
                                                           extention,
                                                           containerName,
                                                           personDB.Picture,
                                                           personCreationDTO.Picture.ContentType);
                }
            }
            await _context.SaveChangesAsync();

            return(NoContent());
        }
Пример #4
0
        public async Task CreatePersonWithoutImage()
        {
            var databaseName = Guid.NewGuid().ToString();
            var context      = BuildContext(databaseName);
            var mapper       = BuildMap();

            var newPerson = new PersonCreationDTO()
            {
                Name = "New Genre", Biography = "abc", DateOfBirth = DateTime.Now
            };

            var mock = new Mock <IFileStorageService>();

            mock.Setup(x => x.SaveFile(null, null, null, null))
            .Returns(Task.FromResult("url"));

            var controller = new PeopleController(context, mapper, mock.Object);
            var response   = await controller.Post(newPerson);

            var result = response as CreatedAtRouteResult;

            Assert.AreEqual(201, result.StatusCode);

            var context2 = BuildContext(databaseName);
            var list     = await context2.People.ToListAsync();

            Assert.AreEqual(1, list.Count);
            Assert.IsNull(list[0].Picture);

            Assert.AreEqual(0, mock.Invocations.Count);
        }
Пример #5
0
        public async Task <ActionResult <PersonDTO> > Put(int id, [FromForm] PersonCreationDTO personCreationDTO)
        {
            var personDB = await context.Persons.FirstOrDefaultAsync(x => x.Id == id);

            if (personDB == null)
            {
                return(NoContent());
            }
            personDB = mapper.Map(personCreationDTO, personDB); //So only updated properties in will be updated inside personDB


            if (personCreationDTO.Picture != null)
            {
                using (var memorystream = new MemoryStream())
                {
                    await personCreationDTO.Picture.CopyToAsync(memorystream);

                    var content   = memorystream.ToArray();
                    var extension = Path.GetExtension(personCreationDTO.Picture.FileName);
                    personDB.Picture =
                        await fileStorageService.EditFile(content, extension, containerName, personDB.Picture, personCreationDTO.Picture.ContentType);
                }
            }
            await context.SaveChangesAsync();

            return(NoContent());
        }
Пример #6
0
        public async Task <ActionResult> Post([FromForm] PersonCreationDTO personCreation)
        {
            var person = mapper.Map <Person>(personCreation);

            if (personCreation.Picture != null)
            {
                //Representing file as byte array
                using (var memoryStream = new MemoryStream())
                {
                    await personCreation.Picture.CopyToAsync(memoryStream);

                    var content = memoryStream.ToArray();
                    //var extension = personCreation.Picture.FileName.Split(".")[1];
                    var extension = Path.GetExtension(personCreation.Picture.FileName);
                    person.Picture =
                        await fileStorageService.SaveFile(content, extension, containerName, personCreation.Picture.ContentType);
                }
            }

            context.Add(person);
            await context.SaveChangesAsync();

            var personDTO = mapper.Map <PersonDTO>(person);

            //Return location of created resource: route name to access tne newly created resource,
            //route values of action with such route name and created object itself
            return(new CreatedAtRouteResult("getPerson", new { person.Id }, personDTO));
        }
        public async Task <ActionResult> Post([FromBody] PersonCreationDTO personCreationDTO)
        {
            var person = mapper.Map <Person>(personCreationDTO);

            context.Add(person);
            await context.SaveChangesAsync();

            var personDTO = mapper.Map <PersonDTO>(person);

            return(CreatedAtRoute("GetPerson", new { id = person.Id }, personDTO));
        }
Пример #8
0
        public async Task <ActionResult> Post([FromForm] PersonCreationDTO personCreation)
        {
            var person = _mapper.Map <Person>(personCreation);

            _db.Add(person);
            await _db.SaveChangesAsync();

            var persondto = _mapper.Map <PersonDTO>(person);

            return(new CreatedAtRouteResult("GetPerson", new { Id = person.Id }, persondto));
        }
Пример #9
0
        public async Task <ActionResult> Put(int id, [FromForm] PersonCreationDTO personCreationDTO)
        {
            var result = await _peopleService.UpdatePersonAsync(id, personCreationDTO);

            if (result == -1)
            {
                return(NotFound());
            }
            else if (result == 0)
            {
                return(BadRequest("Failed to save changes."));
            }

            return(NoContent());
        }
Пример #10
0
        private async Task <List <Category> > ListCategories(PersonCreationDTO personCreationDTO)
        {
            if (personCreationDTO.CategoriesId == null)
            {
                return(null);
            }

            var result     = new List <Category>();
            var categories = await _dbContext.Categories.ToListAsync();

            foreach (var id in personCreationDTO.CategoriesId)
            {
                result.Add(categories.FirstOrDefault(x => x.Id == id));
            }
            return(result);
        }
Пример #11
0
        public async Task <int> UpdatePersonAsync(int id, PersonCreationDTO personCreationDTO)
        {
            var personDb = await _dbContext.People.Include(x => x.Categories)
                           .Include(x => x.Country)
                           .FirstOrDefaultAsync(p => p.Id == id);

            if (personDb == null)
            {
                _logger.LogWarn($"Person with ID {id} was not found");
                return(-1);
            }

            personDb            = _mapper.Map(personCreationDTO, personDb);
            personDb.Categories = await ListCategories(personCreationDTO);

            if (personCreationDTO.Picture != null)
            {
                using (var memoryStream = new MemoryStream())
                {
                    await personCreationDTO.Picture.CopyToAsync(memoryStream);

                    var content   = memoryStream.ToArray();
                    var extension = Path.GetExtension(personCreationDTO.Picture.FileName);
                    personDb.Picture = await _fileStorageService.EditFile(content,
                                                                          extension,
                                                                          _containerName,
                                                                          personDb.Picture,
                                                                          personCreationDTO.Picture.ContentType);
                }
            }

            try
            {
                await this.SaveChangesAsync();

                _logger.LogInfo($"Person with ID {id} was updated successfully");
                return(1);
            }
            catch (Exception ex)
            {
                _logger.LogWarn($"Failed to update person with ID {id}. Exception: {ex}");
                return(0);
            }
        }
Пример #12
0
        public async Task CreatePersonWithImage()
        {
            var databaseName = Guid.NewGuid().ToString();
            var context      = BuildContext(databaseName);
            var mapper       = BuildMap();

            var content = Encoding.UTF8.GetBytes("This is a  dummy image");
            var file    = new FormFile(new MemoryStream(content), 0, content.Length, "Data", "dummy.jpg");

            file.Headers     = new HeaderDictionary();
            file.ContentType = "image/jpg";

            var newPerson = new PersonCreationDTO()
            {
                Name        = "New Person",
                Biography   = "abc",
                DateOfBirth = DateTime.Now,
                Picture     = file
            };

            var mock = new Mock <IFileStorageService>();

            mock.Setup(x => x.SaveFile(content, ".jpg", "people", file.ContentType))
            .Returns(Task.FromResult("url"));

            var controller = new PeopleController(context, mapper, mock.Object);
            var response   = await controller.Post(newPerson);

            var result = response as CreatedAtRouteResult;

            Assert.AreEqual(201, result.StatusCode);

            var context2 = BuildContext(databaseName);
            var list     = await context2.People.ToListAsync();

            Assert.AreEqual(1, list.Count);
            Assert.AreEqual("url", list[0].Picture);
            Assert.AreEqual(1, mock.Invocations.Count);
        }
Пример #13
0
        public async Task <PersonDTO> AddPersonAsync(PersonCreationDTO personCreationDTO)
        {
            var person = _mapper.Map <Person>(personCreationDTO);

            person.Categories = await ListCategories(personCreationDTO);

            if (personCreationDTO.Picture != null)
            {
                using (var memoryStream = new MemoryStream())
                {
                    await personCreationDTO.Picture.CopyToAsync(memoryStream);

                    var content   = memoryStream.ToArray();
                    var extension = Path.GetExtension(personCreationDTO.Picture.FileName);
                    person.Picture = await _fileStorageService.SaveFile(content,
                                                                        extension,
                                                                        _containerName,
                                                                        personCreationDTO.Picture.ContentType);
                }
            }

            _dbContext.Add(person);

            try
            {
                await _dbContext.SaveChangesAsync();

                _logger.LogInfo($"Person \"{personCreationDTO.Name}\" was added successfully.");
            }
            catch (Exception ex)
            {
                _logger.LogWarn($"Failed to add person \"{personCreationDTO.Name}\". Exception: {ex}");
            }

            return(_mapper.Map <PersonDTO>(person));
        }
Пример #14
0
        public async Task <ActionResult> Put(int id, [FromBody] PersonCreationDTO personCreationDTO)
        {
            var personDB = await repository.GetPersonById(id);

            if (personDB == null)
            {
                return(NotFound());
            }
            personDB = mapper.Map(personCreationDTO, personDB);
            if (personCreationDTO.Picture != null)
            {
                using (var memoryStream = new MemoryStream())
                {
                    await personCreationDTO.Picture.CopyToAsync(memoryStream);

                    var content   = memoryStream.ToArray();
                    var extension = Path.GetExtension(personCreationDTO.Picture.FileName);
                    personDB.Picture = await fileStorageService.EditFile(content, extension, containterName, personDB.Picture, personCreationDTO.Picture.ContentType);
                }
            }
            await repository.UpdatePerson(personDB);

            return(NoContent());
        }
Пример #15
0
        public async Task <ActionResult> Post([FromForm] PersonCreationDTO personCreationDTO)
        {
            var personDTO = await _peopleService.AddPersonAsync(personCreationDTO);

            return(new CreatedAtRouteResult("getPerson", new { id = personDTO.Id }, personDTO));
        }