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); }
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)); }
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)); } }
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()); } }