public async Task <CommandResult <List <DownstreamObjectDtoV1_1> > > AggregateObjectsV1_1()
        {
            var request = await _responseProcessor.CreateAsync(HttpMethod.Get, $"{_configs["Servers:Catalog"]}/api/object/v1.1/list", true, true, null);

            try
            {
                var response = await _httpClient.SendAsync(request);

                var objectResult = await _responseProcessor.Process <List <UpstreamObjectDtoV1_1> >(response);

                if (!objectResult.IsSuccessful)
                {
                    return(new CommandResult <List <DownstreamObjectDtoV1_1> >(objectResult.Error));
                }

                var originalUserIds = objectResult.Result.Select(o => o.OwnerId).ToList();
                var users           = await _userService.GetUsersAsync(originalUserIds);

                var callerUserId = _credentialsGetter.GetCuurentUser().UserId;
                return(new CommandResult <List <DownstreamObjectDtoV1_1> >(ReplaceUserIdWithUserV1_1(objectResult.Result, users)));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error When getting list of objects");
                var message = new ErrorMessage
                {
                    ErrorCode  = "CATALOG.OBJECT.LIST.ERROR",
                    Message    = "there were an error while trying to execute your request",
                    StatusCode = System.Net.HttpStatusCode.InternalServerError,
                };
                return(new CommandResult <List <DownstreamObjectDtoV1_1> >(message));
            }
        }
예제 #2
0
        public async Task <CommandResult> SaveImage(IFormFile image)
        {
            var savingResult = await _imageSaver.SaveImage(image);

            if (!savingResult.IsSuccessful)
            {
                return(new CommandResult(savingResult.Error));
            }

            var currentUser = _userCredentialsGetter.GetCuurentUser();

            var photo = new ProfilePhoto
            {
                AddedAtUtc            = DateTime.UtcNow,
                UserId                = currentUser.UserId,
                FilePath              = savingResult.Result.Path,
                AdditionalInformation = QueryString.Create(new Dictionary <string, string>
                {
                    { "Name", savingResult.Result.Name.ToString() },
                    { "Version", "1" }
                }).ToUriComponent(),
            };

            _profileRepo.Add(photo);
            await _profileRepo.SaveChangesAsync();

            return(new CommandResult());
        }
예제 #3
0
        public async Task <CommandResult> DeleteObject(DeleteObjectDto objectDto)
        {
            if (objectDto is null)
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.OBJECT.DELETE.NULL",
                    Message = "Please send a valid data",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }
            var objectOwner = from o in _objectRepository.Table
                              where o.OfferedObjectId == objectDto.ObjectId
                              select o.OwnerLogin.User;

            var currentUser = _credentialsGetter.GetCuurentUser();

            if (currentUser is null || currentUser.UserId != objectOwner.FirstOrDefault()?.UserId.ToString())
            {
                return(new CommandResult(new ErrorMessage
                {
                    ErrorCode = "CATALOG.OBJECT.DELETE.UNAUTHORIZED",
                    Message = "You are unauthorized to delete this object",
                    StatusCode = System.Net.HttpStatusCode.Unauthorized
                }));
            }
            return(await AuthorizedDelete(objectDto));
        }
예제 #4
0
        public async Task <IActionResult> RefreshToken([FromBody] RefreshRegistrationTokenDto tokenRefresh)
        {
            if (tokenRefresh is null)
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.REGISTRATION.REFRESH.NULL",
                    Message = "Please send valid data",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }

            var user = _credentialsGetter.GetCuurentUser();

            if (user == null)
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.REGISTRATION.REFRESH.USER.UNKOWN",
                    Message = "Please login",
                    StatusCode = System.Net.HttpStatusCode.Unauthorized
                }));
            }
            var registrations = from r in _registrationsRepo.Table
                                where r.Object.OriginalObjectId == tokenRefresh.ObjectId && r.RecipientLogin.UserId == Guid.Parse(user.UserId) &&
                                r.Status == ObjectRegistrationStatus.OK && r.ExpiresAtUtc > DateTime.UtcNow && r.ObjectReceiving == null
                                select r;

            if (!registrations.Any())
            {
                return(StatusCode(new ErrorMessage
                {
                    ErrorCode = "TRANSACTION.REGISTRATION.REFRESH.NOT.VALID",
                    Message = "You have no valid registration",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }));
            }

            var token = await _tokenManager.GenerateToken(registrations.FirstOrDefault().ObjectRegistrationId, TokenType.Receiving);

            return(Ok(new RegistrationTokenResultDto
            {
                CreatedAtUtc = token.IssuedAtUtc,
                RegistrationToken = token.Token,
                UseBeforeUtc = token.UseBeforeUtc
            }));
        }
        public async Task <CommandResult <ObjectDetailsDto> > GetObjectDetails(int objectId)
        {
            var filteredObjects = _objectRepo.Table.Where(_queryHelper.IsValidObject);

            var userId = _credentialsGetter.GetCuurentUser()?.UserId;


            var objects = from o in filteredObjects
                          where objectId == o.OfferedObjectId
                          orderby o.OfferedObjectId
                          select new ObjectDetailsDto
            {
                Id = o.OfferedObjectId,
                CountOfImpressions = o.Impressions.Count,
                CountOfViews       = o.Views.Count,
                Description        = o.Description,
                Name          = o.Name,
                Rating        = null,
                OwnerId       = o.OwnerLogin.User.UserId.ToString(),
                Photos        = o.Photos.Select(op => _photoConstructor.Construct(op)).ToList(),
                Tags          = o.Tags.Select(ot => ot.Tag.Name).ToList(),
                Type          = o.CurrentTransactionType,
                CommentsCount = o.Comments.Count,
                LikesCount    = o.Likes.Count,
                IsLikedByMe   = o.Likes.Any(like => like.Login.UserId.ToString() == userId),
                Comments      = (from comment in o.Comments
                                 orderby comment.AddedAtUtc
                                 descending
                                 select new CommentDto
                {
                    UserId = comment.Login.UserId.ToString(),
                    ObjectId = comment.ObjectId,
                    Comment = comment.Comment,
                    CommentedAtUtc = comment.AddedAtUtc,
                    CommentId = comment.ObjectCommentId
                }).Take(10).ToList(),
            };
            var @object = await objects.SingleOrDefaultAsync();

            if (@object is null)
            {
                return(new ErrorMessage
                {
                    Message = "The object you requested does not exists.",
                    ErrorCode = "CATALOG.OBJECT.DETAILS.NOTFOUND",
                    StatusCode = System.Net.HttpStatusCode.BadRequest
                }.ToCommand <ObjectDetailsDto>());
            }
            _ = _viewsManager.AddView(@object.Id);
            return(new CommandResult <ObjectDetailsDto>(@object));
        }
예제 #6
0
        public CommandResult <UserProfileDto> GetUserByIds()
        {
            var user = _credentialsGetter.GetCuurentUser();

            if (user == null)
            {
                return(new ErrorMessage
                {
                    ErrorCode = "USER.PROFILE.USER.UNKOWN",
                    Message = "Please login",
                    StatusCode = System.Net.HttpStatusCode.Unauthorized
                }.ToCommand <UserProfileDto>());
            }
            var users = from u in _usersRepo.Table
                        where u.Id == user.UserId
                        select new UserProfileDto
            {
                Email       = u.Email,
                Name        = u.NormalizedName,
                PictureUrl  = _urlConstructor.ConstructOrDefault(u.Photos.OrderByDescending(pp => pp.AddedAtUtc).FirstOrDefault()),
                Username    = u.UserName,
                Id          = u.Id,
                Gender      = u.Gender.ToString(),
                PhoneNumber = u.PhoneNumber
            };

            var databaseUser = users.FirstOrDefault();

            if (databaseUser is null)
            {
                return(new ErrorMessage
                {
                    ErrorCode = "USER.PROFILE.INTERNAL.ERROR",
                    Message = "There were an error while trying to get the user profile",
                    StatusCode = System.Net.HttpStatusCode.InternalServerError
                }.ToCommand <UserProfileDto>());
            }
            return(new CommandResult <UserProfileDto>(databaseUser));
        }