public override async Task <Start> add(AddStartRequest request, ServerCallContext context) { var start = new Data.Start() { RaceId = request.RaceId }; UpdateStart(start, request.Start); dbContext.Starts.Add(start); await dbContext.SaveChangesAsync(); return(ToProtoStart(start)); }
private void UpdateStart(Data.Start entity, Start model) { // update only properties edited in form entity.DelayMarksAfterStartMinutes = model.DelayMarksAfterStartMinutes; entity.Name = model.Name; entity.PlannedStart = model.PlannedStart?.ToDateTime(); entity.Type = model.Type.FromProto(); Utils.UpdateCollection( entity.Categories, model.Categories, (e, m) => e.Category.Id == m.Id, (m) => new Data.StartCategory { Start = entity, Category = dbContext.RaceCategories.Find(m.Id) } ); }
private static Start ToProtoStart(Data.Start start) { var result = new Start { DelayMarksAfterStartMinutes = start.DelayMarksAfterStartMinutes, End = start.End.ToTimestamp(), Name = start.Name, Id = start.Id, PlannedStart = start.PlannedStart.ToTimestamp(), RealStart = start.RealStart.ToTimestamp(), Type = start.Type.ToProto(), RaceId = start.RaceId, // ReSharper disable once ConstantConditionalAccessQualifier RaceName = start.Race?.Name ?? string.Empty }; result.Categories.AddRange(start.Categories.Select(c => new Start.Types.Category { Id = c.Category.Id, Code = c.Category.Code, Name = c.Category.Name })); return(result); }