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), }); }
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), }); }