public IActionResult CreateStaffMember([FromBody] StaffMemberForCreationDTO staffMember)
        {
            if (staffMember == null)
            {
                return(BadRequest());
            }

            // Validate data
            if (!ModelState.IsValid || !_supermarketRepository.SupermarketExists(staffMember.SupermarketId))
            {
                // return 422
                return(new UnprocessableEntityObjectResult(ModelState));
            }

            var staffMemberEntity = Mapper.Map <StaffMember>(staffMember);

            _supermarketRepository.AddStaffMember(staffMemberEntity);

            if (!_supermarketRepository.Save())
            {
                throw new Exception("Creating a staff member failed on Save.");
            }

            var staffMemberToReturn = Mapper.Map <StaffMemberDTO>(staffMemberEntity);

            var links = CreateLinksForStaffMember(staffMemberToReturn.Id, null);

            var linkedResourceToReturn = staffMemberToReturn.ShapeData(null)
                                         as IDictionary <string, object>;

            linkedResourceToReturn.Add("links", links);

            return(CreatedAtRoute("GetStaffMember", new { id = linkedResourceToReturn["Id"] }, linkedResourceToReturn));
        }
        public IActionResult CreateStaffMemberCollection([FromBody] IEnumerable <StaffMemberForCreationDTO> staffMemberCollection)
        {
            if (staffMemberCollection == null)
            {
                return(BadRequest());
            }

            // Validate data
            foreach (StaffMemberForCreationDTO s in staffMemberCollection)
            {
                if (!ModelState.IsValid || !_supermarketRepository.SupermarketExists(s.SupermarketId))
                {
                    // return 422
                    return(new UnprocessableEntityObjectResult(ModelState));
                }
            }

            var staffMemberEntities = Mapper.Map <IEnumerable <StaffMember> >(staffMemberCollection);

            foreach (var staffMember in staffMemberEntities)
            {
                _supermarketRepository.AddStaffMember(staffMember);
            }

            if (!_supermarketRepository.Save())
            {
                throw new Exception("Creating a staff member collection failed on save.");
            }

            var staffMemberCollectionToReturn = Mapper.Map <IEnumerable <StaffMemberDTO> >(staffMemberEntities);
            var idsAsString = string.Join(",", staffMemberCollectionToReturn.Select(s => s.Id));

            return(CreatedAtRoute("GetStaffMemberCollection",
                                  new { ids = idsAsString },
                                  staffMemberCollectionToReturn));
        }