public async Task <uint> AddWaifuRequest(WaifuRequestAddDto waifuRequestAddDto) => await _soraTransactor.DoInTransactionAndGetAsync(async context => { WaifuRequest req = new WaifuRequest() { Name = waifuRequestAddDto.Name, ImageUrl = waifuRequestAddDto.ImageUrl, Rarity = waifuRequestAddDto.Rarity, RequestState = RequestState.Pending, RequestTime = DateTime.UtcNow, UserId = ulong.Parse(waifuRequestAddDto.UserId), }; context.WaifuRequests.Add(req); await context.SaveChangesAsync().ConfigureAwait(false); return(req.Id); }).ConfigureAwait(false);
public async Task <ActionResult <WaifuRequestDto> > PostWaifuRequest(ulong userId, [FromBody] WaifuRequestAddDto waifuRequestAddDto) { // Check if Url is valid Uri if (!Helper.UrlValidUri(waifuRequestAddDto.ImageUrl) || Helper.LinkIsNoImage(waifuRequestAddDto.ImageUrl)) { return(BadRequest("ImageUrl is not a valid image URL")); } // Check if valid rarity if (!Enum.IsDefined(typeof(WaifuRarity), waifuRequestAddDto.Rarity)) { return(BadRequest("Invalid Waifu rarity")); } if (await _waifuRequestRepo.UserRequestCountLast24Hours(userId) >= 3) { return(this.BadRequest( "You already have 3 pending requests in the last 24 hours. Wait for them to be processed or after 24 hours have passed.")); } // Check if waifu already exists waifuRequestAddDto.Name = waifuRequestAddDto.Name.Trim(); if (await _waifuRequestRepo.WaifuExists(waifuRequestAddDto.Name.Trim())) { return(BadRequest("Waifu already exists")); } var reqId = await _waifuRequestRepo.AddWaifuRequest(waifuRequestAddDto); // Fetch newly created request var req = await _waifuRequestRepo.GetWaifuRequest(reqId); if (!req) { return(StatusCode(StatusCodes.Status500InternalServerError, new { error = "Failed to save waifu request" })); } var reqToReturn = _mapper.Map <WaifuRequestDto>(req.Some()); return(Ok(reqToReturn)); }