Esempio n. 1
0
        public async Task <IActionResult> Create([FromBody] VmCreateForm form, CancellationToken ct)
        {
            if (!ModelState.IsValid)
            {
                throw new InvalidOperationException();
            }

            var createdVm = await _vmService.CreateAsync(form, ct);

            return(CreatedAtAction(nameof(this.Get), new { id = createdVm.Id }, createdVm));
        }
Esempio n. 2
0
        public async Task <Vm> CreateAsync(VmCreateForm form, CancellationToken ct)
        {
            if (_context.Vms.Where(v => v.Id == form.Id).Any())
            {
                throw new ForbiddenException("Vm already exists");
            }

            var vmEntity  = _mapper.Map <Domain.Models.Vm>(form);
            var formTeams = vmEntity.VmTeams.Select(v => v.TeamId).Distinct();

            if (!formTeams.Any())
            {
                throw new ForbiddenException("Must include at least 1 team");
            }

            if (!(await _playerService.CanManageTeamsAsync(formTeams, true, ct)))
            {
                throw new ForbiddenException();
            }

            if (!(await _permissionsService.CanWrite(formTeams, ct)))
            {
                throw new ForbiddenException();
            }

            var teamList = await _context.Teams
                           .Where(t => formTeams.Contains(t.Id))
                           .Select(t => t.Id)
                           .ToListAsync(ct);

            foreach (var vmTeam in vmEntity.VmTeams)
            {
                if (!teamList.Contains(vmTeam.TeamId))
                {
                    _context.Teams.Add(new Domain.Models.Team()
                    {
                        Id = vmTeam.TeamId
                    });
                }
            }

            _context.Vms.Add(vmEntity);
            await _context.SaveChangesAsync(ct);

            return(_mapper.Map <Vm>(vmEntity));
        }