示例#1
0
 public override async Task <Picture?> FindAsync(params object[] id)
 {
     if (!(id[0] is int))
     {
         return(null);
     }
     return(PictureMapper.MapFromDomain(await RepositoryDbSet.AsNoTracking().FirstOrDefaultAsync(pic => pic.Id == (int)id[0])));
 }
示例#2
0
        public async Task <ReadPictureListResponse> ReadAllAsync(string cursor, string contest)
        {
            if (contest != null)
            {
                return(PictureMapper.MapPictureStorageListToReadPictureResponseList(
                           await _pictureRepository.ReadAllByContestAsync(cursor, contest)));
            }

            return(PictureMapper.MapPictureStorageListToReadPictureResponseList(
                       await _pictureRepository.ReadAllAsync(cursor)));
        }
示例#3
0
        public async Task <CreatePictureResponse> CreateAsync(IFormFile picture, string userId,
                                                              CreatePictureRequest createPictureRequest)
        {
            var filePath = Path.GetFullPath(Environment.CurrentDirectory + "/Uploads/" + picture.FileName);

            if (picture.Length > 0)
            {
                using (var stream = new FileStream(filePath, FileMode.Create))
                    await picture.CopyToAsync(stream);
            }

            var result = await _pictureRepository.CreateAsync(
                PictureMapper.MapCreatePictureRequestToPictureStorage(createPictureRequest, picture.FileName, userId));

            return(new CreatePictureResponse {
                Id = result
            });
        }
示例#4
0
        public async Task <bool> UpdateAsync(string pictureId, string userId, UpdatePictureRequest updatePictureRequest)
        {
            var pictureStorage = PictureMapper.MapUpdatePictureRequestToPictureStorage(updatePictureRequest);

            var previousPicture = await _pictureRepository.ReadAsync(pictureId);

            var pictureContest = await _contestRepository.ReadAsync(previousPicture.ContestId);

            var currentContest = await _contestRepository.ReadSettingsAsync("current");

            // Vote has been cast, picture belongs to current contest, user has not already voted for contest
            if (updatePictureRequest.Vote &&
                pictureContest.Id == currentContest.CurrentId &&
                (pictureContest.Voters == null ||
                 pictureContest.Voters.All(x => x != userId)))
            {
                if (pictureContest.Voters == null)
                {
                    pictureContest.Voters = new List <string>();
                }

                pictureContest.Voters.Add(userId);
                pictureStorage.Votes = previousPicture.Votes + 1;

                await _contestRepository.UpdateAsync(pictureContest.Id, new ContestStorage
                {
                    Voters = pictureContest.Voters
                });

                await _pictureRepository.UpdateAsync(pictureId, pictureStorage);

                return(true);
            }
            if (updatePictureRequest.Caption != null)
            {
                await _pictureRepository.UpdateAsync(pictureId, pictureStorage);

                return(true);
            }

            return(false);
        }
示例#5
0
 public async Task <IEnumerable <Picture> > FindPicturesByPathAsync(string path)
 {
     return(await RepositoryDbSet.Where(pic => pic.Path == path).AsNoTracking()
            .Select(p => PictureMapper.MapFromDomain(p)).ToListAsync());
 }
示例#6
0
 public async Task <ReadPictureResponse> ReadAsync(string id)
 {
     return(PictureMapper.MapPictureStorageToReadPictureResponse(await _pictureRepository.ReadAsync(id)));
 }