Exemple #1
0
        private static async Task BindToDomainEntityAndValidate(
            DatabaseContext context,
            Domain.Team domainEntity,
            TeamRequest request,
            CancellationToken cancellationToken)
        {
            if (domainEntity == null)
            {
                throw new ArgumentNullException(nameof(domainEntity));
            }

            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var teamsWithSameName = await context
                                    .EntitySet <Domain.Team>()
                                    .GetTeamsByName(request.Name)
                                    .ToArrayAsync(cancellationToken);

            if (teamsWithSameName.Any(i => i.Id != domainEntity.Id))
            {
                ThrowTeamWithSameNameException(request);
            }

            domainEntity.ChangeName(request.Name);
        }
Exemple #2
0
        private static async Task <Domain.Team> GenerateAndValidateDomainEntity(
            DatabaseContext context,
            TeamRequest request,
            CancellationToken cancellationToken)
        {
            var teamName          = request.Name.Trim();
            var teamsWithSameName = await LookupTeamByName(context, request, cancellationToken);

            if (teamsWithSameName.Any())
            {
                ThrowTeamWithSameNameException(request);
            }

            return(Domain.Team.CreateTeam(teamName));
        }
Exemple #3
0
        public async Task <IActionResult> Post(
            [FromBody] TeamRequest request,
            CancellationToken cancellationToken = default)
        {
            using (var context = this.contextFactory.CreateDbContext())
            {
                var team = await GenerateAndValidateDomainEntity(context, request, cancellationToken);

                context.Set <Domain.Team>()
                .Add(team);

                await context.SaveChangesAsync(cancellationToken);

                return(this.Ok(team.Id));
            }
        }
Exemple #4
0
        public async Task <IActionResult> Put(
            [FromRoute] long id,
            [FromBody] TeamRequest request,
            CancellationToken cancellationToken = default)
        {
            using (var context = this.contextFactory.CreateDbContext())
            {
                var team = await LookupTeamId(context, id, cancellationToken);

                if (team == null)
                {
                    return(this.NotFound());
                }

                await BindToDomainEntityAndValidate(context, team, request, cancellationToken);

                await context.SaveChangesAsync(cancellationToken);

                return(this.Ok());
            }
        }