Beispiel #1
0
        public async Task <CreateContestResponse> CreateAsync(CreateContestRequest contest)
        {
            var exists = await _contestRepository.FindByTopicAsync(contest.Topic);

            if (exists != null)
            {
                throw new Exception("A contest with the same Topic already exists.");
            }

            var result =
                await _contestRepository.CreateAsync(ContestMapper.MapCreateContestRequestToContestStorage(contest));

            if (contest.Current)
            {
                await _contestRepository.SetCurrentAsync(result);

                // Schedule contest closing job
                var job = new SimpleJob(async scheduledTime =>
                {
                    await UpdateAsync(result, new UpdateContestRequest
                    {
                        Closed = true
                    });
                });

                _singularity.ScheduleJob(new RunOnceSchedule(TimeSpan.FromMinutes(1)), job, false);
            }

            return(new CreateContestResponse {
                Id = result
            });
        }
Beispiel #2
0
        public async Task <IActionResult> Create([FromBody] CreateContestRequest createContestRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            return(Ok(await _contestService.CreateAsync(createContestRequest)));
        }
Beispiel #3
0
        public static ContestStorage MapCreateContestRequestToContestStorage(CreateContestRequest createContestRequest)
        {
            if (createContestRequest == null)
            {
                return(null);
            }

            return(new ContestStorage
            {
                CreatedAt = DateTime.UtcNow,
                Topic = createContestRequest.Topic
            });
        }