Пример #1
0
        public async Task <IActionResult> AcceptSolvedPin([FromBody] SolvedPinDTO solvedPinDTO)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                ResponseDTO answer = await moderationPinService.SolvedProblemPinAccept(solvedPinDTO);

                logger.LogInformation($"Модератор: {solvedPinDTO.ModeratorLogin}: {solvedPinDTO.ModeratorId}, проверил работу команды *** над пином: {solvedPinDTO.Id}");
                return(Ok(answer));
            }
            catch (ObjectNotFoundException ex)
            {
                logger.LogError(ex.Message);
                return(StatusCode(404, new ResponseDTO()
                {
                    Message = "Пин не найден", Status = false
                }));
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message);
                return(StatusCode(500, new ResponseDTO()
                {
                    Message = "На данный момент на стороне сервера ошибка сообщите администратору",
                    Status = false
                }));
            }
        }
Пример #2
0
        public async Task <ResponseDTO> SolvedProblemPinAccept(SolvedPinDTO solvedPinDTO)
        {
            //Remove from Moderation database table
            ProblemPin foundedPin = await publicPinContext.ProblemPins.Include(problemPin => problemPin.Images).FirstOrDefaultAsync(pins => pins.Id == solvedPinDTO.Id);

            publicPinContext.ProblemPins.Remove(foundedPin);
            // Add to Solved pins DataBase
            if (solvedPinDTO.Files.Count > 0)
            {
                SolvedPin solvedPin = new SolvedPin()
                {
                    Id                 = foundedPin.Id,
                    UserKeyId          = foundedPin.UserKeyId,
                    Name               = foundedPin.Name,
                    ProblemDescription = foundedPin.ProblemDescription,
                    CreationDate       = foundedPin.CreationDate,
                    Images             = foundedPin.Images,
                    Lat                = foundedPin.Lat,
                    Lng                = foundedPin.Lng,
                    Report             = solvedPinDTO.Report,
                    Team               = solvedPinDTO.Team,
                    ModeratorId        = foundedPin.ModeratorId,
                    SolvedModerator    = solvedPinDTO.ModeratorId
                };
                List <SolvedImages> uploadedImages = new List <SolvedImages>();

                foreach (var file in solvedPinDTO.Files)
                {
                    FileInfo fileInfo = new FileInfo(file.FileName);
                    string   fileName = Guid.NewGuid().ToString() + fileInfo.Extension;
                    if (!Directory.Exists(environment.WebRootPath + "\\PinPublicImages\\" + $"\\{solvedPin.Id}\\"))
                    {
                        Directory.CreateDirectory(environment.WebRootPath + "\\PinPublicImages\\" + $"\\{solvedPin.Id}\\");
                    }
                    FileStream filestream = File.Create(environment.WebRootPath + "\\PinPublicImages\\" + $"\\{solvedPin.Id}\\" + fileName);
                    await file.CopyToAsync(filestream);

                    await filestream.FlushAsync();

                    SolvedImages image = new SolvedImages
                    {
                        Alt          = fileName,
                        ImagePath    = $"\\PinPublicImages\\{solvedPin.Id}\\{fileName}",
                        WebImagePath = "http://localhost:54968/PinPublicImages/" + solvedPin.Id + "/" + fileName,
                        SolvedPin    = solvedPin,
                        solvedPinId  = solvedPin.Id
                    };
                    uploadedImages.Add(image);
                }

                solvedPin.SolvedImages = uploadedImages;

                await publicPinContext.SolvedPins.AddAsync(solvedPin);

                int count = await publicPinContext.SaveChangesAsync();

                if (count > 0)
                {
                    cache.Set(solvedPin.Id, solvedPin, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(5)));
                }
                return(new ResponseDTO()
                {
                    Message = "Решение пина успешно подтверждено, пин добавлен в базу решённых пинов", Status = true
                });
            }
            else
            {
                return(new ResponseDTO()
                {
                    Message = "Ошибка с загрузкой фотографий", Status = false
                });;
            }
        }