public async Task <IHttpActionResult> Post(TContract contract)
        {
            IEnumerable <string> validationErrors = new List <string>();

            validationErrors = validationErrors.Concat(await ContractValidator.ValidateContract(contract));
            if (validationErrors.Any())
            {
                return(BadRequest(string.Join("\n", validationErrors)));
            }

            contract.CreatedByUserId     = IdPrincipal.Id;
            contract.CreatedOn           = DateTimeOffset.UtcNow;
            contract.LastUpdatedByUserId = null;
            contract.LastUpdatedOn       = null;

            var createdTDto = await Dal.Create(Mapper.Map <TDto>(contract));

            var createdT = Mapper.Map <TContract>(createdTDto);

            return(Created(Url.Link(CreatedRouteName, new { id = createdT.Id, controller = ControllerName }), createdT));
        }
        public async Task <IHttpActionResult> Put(TContract contract)
        {
            IEnumerable <string> validationErrors = new List <string>();

            validationErrors = validationErrors.Concat(await ContractValidator.ValidateContract(contract));
            if (validationErrors.Any())
            {
                return(BadRequest(string.Join("\n", validationErrors)));
            }

            try
            {
                contract.LastUpdatedByUserId = IdPrincipal.Id;
                contract.LastUpdatedOn       = DateTimeOffset.UtcNow;
                var updatedTDto = await Dal.Update(Mapper.Map <TDto>(contract));

                var updatedT = Mapper.Map <TContract>(updatedTDto);
                return(Ok(updatedT));
            }
            catch (ObjectNotFoundException)
            {
                return(NotFound());
            }
        }