Esempio n. 1
0
 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);
Esempio n. 2
0
        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));
        }