Пример #1
0
        public async Task <ViewModels.Exercise> CreateAsync(ViewModels.Exercise exercise, CancellationToken ct)
        {
            if (!(await _authorizationService.AuthorizeAsync(_user, null, new ExerciseCreationRequirement())).Succeeded)
            {
                throw new ForbiddenException();
            }

            var exerciseEntity = Mapper.Map <ExerciseEntity>(exercise);

            var exerciseAdminPermission = await _context.Permissions
                                          .Where(p => p.Key == PlayerClaimTypes.ExerciseAdmin.ToString())
                                          .FirstOrDefaultAsync(ct);

            if (exerciseAdminPermission == null)
            {
                throw new EntityNotFoundException <Permission>($"{PlayerClaimTypes.ExerciseAdmin.ToString()} Permission not found.");
            }

            var userId = _user.GetId();

            // Create an Admin team with the caller as a member
            var teamEntity = new TeamEntity()
            {
                Name = "Admin"
            };

            teamEntity.Permissions.Add(new TeamPermissionEntity()
            {
                Permission = exerciseAdminPermission
            });

            var exerciseMembershipEntity = new ExerciseMembershipEntity {
                Exercise = exerciseEntity, UserId = userId
            };

            exerciseEntity.Teams.Add(teamEntity);
            exerciseEntity.Memberships.Add(exerciseMembershipEntity);

            _context.Exercises.Add(exerciseEntity);
            await _context.SaveChangesAsync(ct);

            var teamMembershipEntity = new TeamMembershipEntity {
                Team = teamEntity, UserId = userId, ExerciseMembership = exerciseMembershipEntity
            };

            exerciseMembershipEntity.PrimaryTeamMembership = teamMembershipEntity;
            _context.TeamMemberships.Add(teamMembershipEntity);
            _context.ExerciseMemberships.Update(exerciseMembershipEntity);
            await _context.SaveChangesAsync(ct);

            return(await GetAsync(exerciseEntity.Id, ct));
        }
Пример #2
0
        public async Task <ViewModels.Exercise> UpdateAsync(Guid id, ViewModels.Exercise exercise, CancellationToken ct)
        {
            if (!(await _authorizationService.AuthorizeAsync(_user, null, new ExerciseAdminRequirement(id))).Succeeded)
            {
                throw new ForbiddenException();
            }

            var exerciseToUpdate = await _context.Exercises.SingleOrDefaultAsync(v => v.Id == id, ct);

            if (exerciseToUpdate == null)
            {
                throw new EntityNotFoundException <Exercise>();
            }

            Mapper.Map(exercise, exerciseToUpdate);

            _context.Exercises.Update(exerciseToUpdate);
            await _context.SaveChangesAsync(ct);

            return(_mapper.Map(exerciseToUpdate, exercise));
        }