예제 #1
0
        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));
        }
예제 #2
0
        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(),
            });
        }