Ejemplo n.º 1
0
        public async Task <ViewModels.ApplicationInstance> UpdateInstanceAsync(Guid id, ViewModels.ApplicationInstanceForm form, CancellationToken ct)
        {
            var instanceToUpdate = await _context.ApplicationInstances
                                   .Include(ai => ai.Team)
                                   .SingleOrDefaultAsync(v => v.Id == id, ct);

            if (instanceToUpdate == null)
            {
                throw new EntityNotFoundException <ApplicationInstance>();
            }

            if (!(await _authorizationService.AuthorizeAsync(_user, null, new ExerciseAdminRequirement(instanceToUpdate.Team.ExerciseId))).Succeeded)
            {
                throw new ForbiddenException();
            }

            Mapper.Map(form, instanceToUpdate);

            _context.ApplicationInstances.Update(instanceToUpdate);
            await _context.SaveChangesAsync(ct);

            var instance = await _context.ApplicationInstances
                           .ProjectTo <ViewModels.ApplicationInstance>()
                           .SingleOrDefaultAsync(i => i.Id == instanceToUpdate.Id, ct);

            return(instance);
        }
Ejemplo n.º 2
0
        public async Task <ViewModels.ApplicationInstance> CreateInstanceAsync(Guid teamId, ViewModels.ApplicationInstanceForm form, CancellationToken ct)
        {
            var team = await _context.Teams.Where(e => e.Id == teamId).SingleOrDefaultAsync(ct);

            if (team == null)
            {
                throw new EntityNotFoundException <Team>();
            }

            if (!(await _authorizationService.AuthorizeAsync(_user, null, new ExerciseAdminRequirement(team.ExerciseId))).Succeeded)
            {
                throw new ForbiddenException();
            }

            var instanceEntity = Mapper.Map <ApplicationInstanceEntity>(form);

            _context.ApplicationInstances.Add(instanceEntity);
            await _context.SaveChangesAsync(ct);

            var instance = await _context.ApplicationInstances
                           .ProjectTo <ViewModels.ApplicationInstance>()
                           .SingleOrDefaultAsync(i => i.Id == instanceEntity.Id, ct);

            return(instance);
        }