示例#1
0
        public async Task <dynamic> GetById(string userId, string songId)
        {
            var userCollection = MongoWrapper.Database.GetCollection <Models.Musician>(nameof(Models.User));

            var songFilterBuilder = new FilterDefinitionBuilder <Models.Song>();
            var songFilter        = songFilterBuilder.And
                                    (
                songFilterBuilder.Eq(s => s._id, new ObjectId(songId)),
                GeneralUtils.NotDeactivated(songFilterBuilder)
                                    );

            var userFilterBuilder = new FilterDefinitionBuilder <Models.Musician>();
            var userFilter        = userFilterBuilder.And
                                    (
                userFilterBuilder.Eq(u => u._id, new ObjectId(userId)),
                GeneralUtils.NotDeactivated(userFilterBuilder)
                                    );

            var userProjectionBuilder = new ProjectionDefinitionBuilder <Models.Musician>();
            var userProjection        = userProjectionBuilder
                                        .ElemMatch(m => m.Songs, songFilter);

            var user = (await userCollection.FindAsync(userFilter, new FindOptions <Models.Musician>
            {
                Limit = 1,
                Projection = userProjection,
            })).SingleOrDefault();

            if (user == null)
            {
                Response.StatusCode = (int)HttpStatusCode.NotFound;
                return(new ResponseBody
                {
                    Code = ResponseCode.NotFound,
                    Success = false,
                    Message = "Usuário não encontrado!",
                });
            }

            var song = user.Songs?.SingleOrDefault();

            if (song == default)
            {
                Response.StatusCode = (int)HttpStatusCode.NotFound;
                return(new ResponseBody
                {
                    Code = ResponseCode.NotFound,
                    Success = false,
                    Message = "Música não encontrada!",
                });
            }

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Success = true,
                Message = "Música encontrada com sucesso!",
                Data = ResponseMappingExtensions.BuildSongResponse(song),
            });
        }
示例#2
0
        public async Task <dynamic> GetById(string id)
        {
            var postCollection = MongoWrapper.Database.GetCollection <Models.Post>(nameof(Models.Post));

            var postFilterBuilder = new FilterDefinitionBuilder <Models.Post>();
            var postFilter        = postFilterBuilder.And
                                    (
                postFilterBuilder.Eq(u => u._id, new ObjectId(id)),
                GeneralUtils.NotDeactivated(postFilterBuilder)
                                    );

            var post = (await postCollection.FindAsync(postFilter, new FindOptions <Models.Post>
            {
                Limit = 1,
            })).SingleOrDefault();

            if (post == null)
            {
                Response.StatusCode = (int)HttpStatusCode.NotFound;
                return(new ResponseBody
                {
                    Code = ResponseCode.NotFound,
                    Success = false,
                    Message = "Post não encontrado!",
                });
            }

            Models.User user = await RetrieveAuthor(post);

            EnrichPostWithAuthor(post, user);

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Success = true,
                Message = "Post encontrado com sucesso!",
                Data = ResponseMappingExtensions.BuildPostResponse(post),
            });
        }