public async Task <LabExecution> CreateLabExecutionAsync(LabExecution labExecution, bool updateExisting, CancellationToken cancellationToken) { // Update existing one? LabExecutionEntity labExecutionEntity; if (updateExisting && (labExecutionEntity = await _dbContext.LabExecutions.FindAsync(new object[] { labExecution.GroupId, labExecution.LabId }, cancellationToken)) != null) { labExecutionEntity.PreStart = labExecution.PreStart; labExecutionEntity.Start = labExecution.Start; labExecutionEntity.End = labExecution.End; } else { // Create new labExecution labExecutionEntity = _dbContext.LabExecutions.Add(new LabExecutionEntity { GroupId = labExecution.GroupId, LabId = labExecution.LabId, PreStart = labExecution.PreStart, Start = labExecution.Start, End = labExecution.End }).Entity; } // Apply changes await _dbContext.SaveChangesAsync(cancellationToken); return(_mapper.Map <LabExecution>(labExecutionEntity)); }
public async Task <Slot> CreateSlotAsync(Slot slot, CancellationToken cancellationToken = default) { // Create new Slot var slotEntity = _dbContext.Slots.Add(new SlotEntity { Name = slot.Name, Groups = new List <GroupEntity>() }).Entity; // Apply changes await _dbContext.SaveChangesAsync(cancellationToken); return(_mapper.Map <Slot>(slotEntity)); }
public async Task <Lab> CreateLabAsync(Lab lab, CancellationToken cancellationToken = default) { // Create new lab var labEntity = _dbContext.Labs.Add(new LabEntity { Name = lab.Name, ApiCode = lab.ApiCode, ServerBaseUrl = lab.ServerBaseUrl, MaxPoints = lab.MaxPoints, MaxFlagPoints = lab.MaxFlagPoints, Exercises = new List <ExerciseEntity>(), Flags = new List <FlagEntity>(), Executions = new List <LabExecutionEntity>() }).Entity; // Apply changes await _dbContext.SaveChangesAsync(cancellationToken); return(_mapper.Map <Lab>(labEntity)); }
private async Task AddOrUpdateConfigItem <TValue>(string key, TValue value, CancellationToken cancellationToken) { // Write updated config to database string cacheKey = "config-" + key; var config = await _dbContext.ConfigurationItems.FindAsync(new object[] { key }, cancellationToken); if (config == null) { await _dbContext.ConfigurationItems.AddAsync(new ConfigurationItemEntity { Key = key, Value = value.ToString() }, cancellationToken); } else { config.Value = value.ToString(); } await _dbContext.SaveChangesAsync(cancellationToken); // Update cache _cache.Set(cacheKey, value.ToString()); }
public async Task <Exercise> CreateExerciseAsync(Exercise exercise, CancellationToken cancellationToken) { // Create new exercise var exerciseEntity = _dbContext.Exercises.Add(new ExerciseEntity { LabId = exercise.LabId, ExerciseNumber = exercise.ExerciseNumber, Name = exercise.Name, IsMandatory = exercise.IsMandatory, IsPreStartAvailable = exercise.IsPreStartAvailable, BasePoints = exercise.BasePoints, PenaltyPoints = exercise.PenaltyPoints, Submissions = new List <ExerciseSubmissionEntity>() }).Entity; // Apply changes await _dbContext.SaveChangesAsync(cancellationToken); return(_mapper.Map <Exercise>(exerciseEntity)); }
public async Task <Flag> CreateFlagAsync(Flag flag, CancellationToken cancellationToken = default) { // Create new Flag var flagEntity = _dbContext.Flags.Add(new FlagEntity { Code = flag.Code, Description = flag.Description, BasePoints = flag.BasePoints, IsBounty = flag.IsBounty, LabId = flag.LabId, Submissions = new List <FlagSubmissionEntity>() }).Entity; // Apply changes await _dbContext.SaveChangesAsync(cancellationToken); return(_mapper.Map <Flag>(flagEntity)); }
public async Task <User> CreateUserAsync(User user, CancellationToken cancellationToken = default) { // Create new user var userEntity = _dbContext.Users.Add(new UserEntity { DisplayName = user.DisplayName, MoodleUserId = user.MoodleUserId, MoodleName = user.MoodleName, IsAdmin = user.IsAdmin, IsTutor = user.IsTutor, GroupFindingCode = user.GroupFindingCode, ExerciseSubmissions = new List <ExerciseSubmissionEntity>(), FlagSubmissions = new List <FlagSubmissionEntity>() }).Entity; // Apply changes await _dbContext.SaveChangesAsync(cancellationToken); return(_mapper.Map <User>(userEntity)); }