public async Task <CreateDiaryEntryResult> CreateDiaryEntryAsync(string userId, DateTime start, DateTime end, DiaryEntryType type) { var request = new CreateDiaryEntryRequest { UserId = userId, Start = start, End = end, EntryType = type, }; return(await PostAsync <CreateDiaryEntryRequest, CreateDiaryEntryResult>($"{BaseUrl}creatediaryentry", request)); }
public async Task <CreateDiaryEntryResult> CreateDiaryEntriesAsync(string userId, DateTime start, DateTime end, DiaryEntryType type) { if (end < start || end - start >= TimeSpan.FromDays(30)) { throw new ArgumentOutOfRangeException(nameof(start), "Invalid start/end dates"); } start = start.Date; end = end.Date; var candidate = _dbContext.Candidates.First(x => x.Id == Guid.Parse(userId)); var existingEntries = await _dbContext.CandidateDiarys .Where(x => x.Candidate == candidate && x.When >= start && x.When <= end) .ToListAsync(); var newEvents = new List <CandidateDiary>(); var currentDay = start; while (currentDay != end) { // Make sure we don't overwrite any existing entries if (existingEntries.FirstOrDefault(x => x.When.Date == currentDay) == null) { var entity = new CandidateDiary { Candidate = candidate, EntryType = type, When = currentDay, }; newEvents.Add(entity); _dbContext.CandidateDiarys.Add(entity); } currentDay = currentDay.AddDays(1); } await _dbContext.SaveChangesAsync(); return(new CreateDiaryEntryResult { Events = newEvents.Select(x => new CreateDiaryEntryResult.EventItem { Id = x.Id, Result = CreateEventResult.Success, When = x.When, }).ToList(), }); }