/// <summary> /// Add an entry to the context /// </summary> /// <param name="model">The model to add</param> /// <returns>A response model containing any validation results, and the new model if successfully created</returns> public async Task <RepositoryActionResultModel <TModel> > Add(TModel model) { // Could add some validation to see if the user is allowed to create this type of entity // as part of a rule based system...? // Validate the incoming model against the registered validator var validationResult = await _validator.ValidateAdd(model); // Return a new result model if validation has failed if (!validationResult.IsValid) { return(new RepositoryActionResultModel <TModel> { CurrentVersion = model, ResultType = ResultTypeEnum.FailedValidation, ValidationResult = validationResult }); } // If passed, assume all ok and create a new entity var newEntity = _mapper.CreateEntity <TEntity>(model); // Assign a few defaults, guid and who created it newEntity.Id = Guid.NewGuid(); newEntity.DateCreated = DateTime.UtcNow; newEntity.CreatedByUserId = _authenticatedUser.UserId; newEntity.EntityStatus = EntityStatusEnum.Active; // Add the entity await _context.AddEntity(newEntity); // Save to the db, this could be done in a // unit of work pattern and saved later await _context.SaveChangesAsync(); // Create a result containing old and new version, and return return(new RepositoryActionResultModel <TModel> { ResultType = ResultTypeEnum.Success, PreviousVersion = null, CurrentVersion = _mapper.CreateModel(newEntity) }); }