Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

091724/samples api view #9038

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions src/dotnet/APIView/APIViewWeb/Helpers/APIHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,17 @@ public int PageSize
}
}

public class ReviewFilterAndSortParams
public class FilterAndSortParams
{
public string Name { get; set; }
public IEnumerable<string> Languages { get; set; }
public string SortField { get; set; } = "LastUpdatedOn";
public int SortOrder { get; set; } = 1;
public bool? IsApproved { get; set; }
}

public class APIRevisionsFilterAndSortParams : ReviewFilterAndSortParams
{
public bool IsDeleted { get; set; }
public bool AssignedToMe { get; set; }
public string Label { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string ReviewId { get; set; }
public bool WithTreeStyleTokens { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,26 @@ public APIRevisionsController(ILogger<APIRevisionsController> logger,
}

/// <summary>
/// Endpoint used by Client SPA for listing reviews.
/// Get the APIRevisions for a Review filtered by query parameters
/// </summary>
/// <param name="reviewId"></param>
/// <param name="apiRevisionType"></param>
/// <returns></returns>
[HttpGet("{reviewId}/latest", Name = "GetAPIRevision")]
public async Task<ActionResult<APIRevisionListItemModel>> GetLatestAPIRevisionAsync(string reviewId, APIRevisionType apiRevisionType = APIRevisionType.All)
{
var result = await _apiRevisionsManager.GetLatestAPIRevisionsAsync(reviewId: reviewId, apiRevisionType: apiRevisionType);
return new LeanJsonResult(result, StatusCodes.Status200OK);
}

/// <summary>
/// Endpoint used by Client SPA for listing API Revisions.
/// </summary>
/// <param name="pageParams"></param>
/// <param name="filterAndSortParams"></param>
/// <returns></returns>
[HttpPost(Name = "GetAPIRevisions")]
public async Task<ActionResult<PagedList<APIRevisionListItemModel>>> GetAPIRevisionsAsync([FromQuery] PageParams pageParams, [FromBody] APIRevisionsFilterAndSortParams filterAndSortParams)
public async Task<ActionResult<PagedList<APIRevisionListItemModel>>> GetAPIRevisionsAsync([FromQuery] PageParams pageParams, [FromBody] FilterAndSortParams filterAndSortParams)
{
var result = await _apiRevisionsManager.GetAPIRevisionsAsync(User, pageParams, filterAndSortParams);
Response.AddPaginationHeader(new PaginationHeader(result.NoOfItemsRead, result.PageSize, result.TotalCount));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public ReviewsController(ILogger<ReviewsController> logger,
/// <param name="filterAndSortParams"></param>
/// <returns></returns>
[HttpGet(Name = "GetReviews")]
public async Task<ActionResult<PagedList<ReviewListItemModel>>> GetReviewsAsync([FromQuery] PageParams pageParams, [FromQuery] ReviewFilterAndSortParams filterAndSortParams)
public async Task<ActionResult<PagedList<ReviewListItemModel>>> GetReviewsAsync([FromQuery] PageParams pageParams, [FromQuery] FilterAndSortParams filterAndSortParams)
{
var result = await _reviewManager.GetReviewsAsync(pageParams, filterAndSortParams);
Response.AddPaginationHeader(new PaginationHeader(result.NoOfItemsRead, result.PageSize, result.TotalCount));
Expand Down Expand Up @@ -151,7 +151,7 @@ public async Task<ActionResult<CodePanelData>> GetReviewContentAsync(string revi

if (activeAPIRevision.Files[0].ParserStyle == ParserStyle.Tree)
{
var comments = await _commentsManager.GetCommentsAsync(reviewId);
var comments = await _commentsManager.GetCommentsAsync(reviewId, commentType: CommentType.APIRevision);
var activeRevisionReviewCodeFile = await _codeFileRepository.GetCodeFileFromStorageAsync(revisionId: activeAPIRevision.Id, codeFileId: activeAPIRevision.Files[0].FileId);

var codePanelRawData = new CodePanelRawData()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using Microsoft.Extensions.Logging;
using APIViewWeb.Helpers;
using APIViewWeb.LeanModels;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using APIViewWeb.Managers;
using APIViewWeb.Extensions;

namespace APIViewWeb.LeanControllers
{
public class SamplesRevisionsController : BaseApiController
{
private readonly ILogger<SamplesRevisionsController> _logger;
private readonly ISamplesRevisionsManager _samplesRevisionsManager;
private readonly ICommentsManager _commentsManager;

public SamplesRevisionsController(ILogger<SamplesRevisionsController> logger,
ISamplesRevisionsManager samplesRevisionsManager, ICommentsManager commentsManager)
{
_logger = logger;
_samplesRevisionsManager = samplesRevisionsManager;
_commentsManager = commentsManager;
}


/// <summary>
/// Endpoint used by Client SPA for listing samples revisions.
/// </summary>
/// <param name="pageParams"></param>
/// <param name="filterAndSortParams"></param>
/// <returns></returns>
[HttpPost(Name = "GetSamplesRevisions")]
public async Task<ActionResult<PagedList<SamplesRevisionModel>>> GetSamplesRevisionsAsync([FromQuery] PageParams pageParams, [FromBody] FilterAndSortParams filterAndSortParams)
{
var result = await _samplesRevisionsManager.GetSamplesRevisionsAsync(User, pageParams, filterAndSortParams);
Response.AddPaginationHeader(new PaginationHeader(result.NoOfItemsRead, result.PageSize, result.TotalCount));
return new LeanJsonResult(result, StatusCodes.Status200OK);
}

[Route("{reviewId}/content")]
[HttpGet]
public async Task<ActionResult<string>> GetSamplesContentAsync(string reviewId, [FromQuery] string activeSamplesRevisionId)
{
var activeSamplesRevision = await _samplesRevisionsManager.GetSamplesRevisionAsync(reviewId, activeSamplesRevisionId);

if (activeSamplesRevision != null)
{
var comments = await _commentsManager.GetCommentsAsync(reviewId, commentType: CommentType.SampleRevision);

string samplesContent = await _samplesRevisionsManager.GetSamplesRevisionContentAsync(activeSamplesRevision.OriginalFileId);

return new LeanJsonResult(samplesContent, StatusCodes.Status200OK);
}

return new LeanJsonResult("Invalid SamplesRevision", StatusCodes.Status500InternalServerError);
}
}
}
3 changes: 0 additions & 3 deletions src/dotnet/APIView/APIViewWeb/LeanModels/CodePanelModels.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
using APIView.TreeToken;
using APIView;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using APIView.Model.V2;
using ApiView;
using Microsoft.CodeAnalysis;
using System.Text;

namespace APIViewWeb.LeanModels
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,8 @@ public string PackageVersion
}


public class SamplesRevisionModel
public class SamplesRevisionModel : BaseListitemModel
{
[JsonProperty("id")]
public string Id { get; set; } = IdHelper.GenerateId();
public string ReviewId { get; set; }
public string FileId { get; set; } = IdHelper.GenerateId();
public string OriginalFileId { get; set; } = IdHelper.GenerateId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public APIRevisionsManager(
/// <param name="pageParams"></param> Contains paginationinfo
/// <param name="filterAndSortParams"></param> Contains filter and sort parameters
/// <returns></returns>
public async Task<PagedList<APIRevisionListItemModel>> GetAPIRevisionsAsync(ClaimsPrincipal user, PageParams pageParams, APIRevisionsFilterAndSortParams filterAndSortParams)
public async Task<PagedList<APIRevisionListItemModel>> GetAPIRevisionsAsync(ClaimsPrincipal user, PageParams pageParams, FilterAndSortParams filterAndSortParams)
{
return await _apiRevisionsRepository.GetAPIRevisionsAsync(user, pageParams, filterAndSortParams);
}
Expand Down
6 changes: 2 additions & 4 deletions src/dotnet/APIView/APIViewWeb/Managers/CommentsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,8 @@
using Microsoft.AspNetCore.Authorization;
using Newtonsoft.Json;
using Microsoft.Extensions.Options;
using Microsoft.TeamFoundation.Common;
using APIViewWeb.LeanModels;
using APIViewWeb.Helpers;
using Microsoft.AspNetCore.Mvc.ViewEngines;

namespace APIViewWeb.Managers
{
Expand Down Expand Up @@ -74,9 +72,9 @@ public async void LoadTaggableUsers()
TaggableUsers = new HashSet<GithubUser>(TaggableUsers.OrderBy(g => g.Login));
}

public async Task<IEnumerable<CommentItemModel>> GetCommentsAsync(string reviewId, bool isDeleted = false)
public async Task<IEnumerable<CommentItemModel>> GetCommentsAsync(string reviewId, bool isDeleted = false, CommentType? commentType = null)
{
return await _commentsRepository.GetCommentsAsync(reviewId, isDeleted);
return await _commentsRepository.GetCommentsAsync(reviewId, isDeleted, commentType);
}

public async Task<ReviewCommentsModel> GetReviewCommentsAsync(string reviewId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace APIViewWeb.Managers.Interfaces
public interface IAPIRevisionsManager
{
public Task<IEnumerable<APIRevisionListItemModel>> GetAPIRevisionsAsync(string reviewId, string packageVersion = "", APIRevisionType apiRevisionType = APIRevisionType.All);
public Task<PagedList<APIRevisionListItemModel>> GetAPIRevisionsAsync(ClaimsPrincipal user, PageParams pageParams, APIRevisionsFilterAndSortParams filterAndSortParams);
public Task<PagedList<APIRevisionListItemModel>> GetAPIRevisionsAsync(ClaimsPrincipal user, PageParams pageParams, FilterAndSortParams filterAndSortParams);
public Task<APIRevisionListItemModel> GetLatestAPIRevisionsAsync(string reviewId = null, IEnumerable<APIRevisionListItemModel> apiRevisions = null, APIRevisionType apiRevisionType = APIRevisionType.All);
public Task<APIRevisionListItemModel> GetAPIRevisionAsync(ClaimsPrincipal user, string apiRevisionId);
public Task<APIRevisionListItemModel> GetAPIRevisionAsync(string apiRevisionId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace APIViewWeb.Managers
public interface ICommentsManager
{
public void LoadTaggableUsers();
public Task<IEnumerable<CommentItemModel>> GetCommentsAsync(string reviewId, bool isDeleted = false);
public Task<IEnumerable<CommentItemModel>> GetCommentsAsync(string reviewId, bool isDeleted = false, CommentType? commentType = null);
public Task<ReviewCommentsModel> GetReviewCommentsAsync(string reviewId);
public Task<ReviewCommentsModel> GetUsageSampleCommentsAsync(string reviewId);
public Task AddCommentAsync(ClaimsPrincipal user, CommentItemModel comment);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace APIViewWeb.Managers
{
public interface IReviewManager
{
public Task<PagedList<ReviewListItemModel>> GetReviewsAsync(PageParams pageParams, ReviewFilterAndSortParams filterAndSortParams);
public Task<PagedList<ReviewListItemModel>> GetReviewsAsync(PageParams pageParams, FilterAndSortParams filterAndSortParams);
public Task<IEnumerable<ReviewListItemModel>> GetReviewsAsync(string language, bool? isClosed = false);
public Task<ReviewListItemModel> GetReviewAsync(string language, string packageName, bool? isClosed = false);
public Task<(IEnumerable<ReviewListItemModel> Reviews, int TotalCount, int TotalPages, int CurrentPage, int? PreviousPage, int? NextPage)> GetPagedReviewListAsync(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@
using System.IO;
using System.Security.Claims;
using System.Threading.Tasks;
using APIViewWeb.Helpers;
using APIViewWeb.LeanModels;

namespace APIViewWeb.Managers
{
public interface ISamplesRevisionsManager
{
public Task<SamplesRevisionModel> GetSamplesRevisionAsync(string reviewId, string samplesRevisionId);
public Task<IEnumerable<SamplesRevisionModel>> GetSamplesRevisionsAsync(string reviewId);
public Task<PagedList<SamplesRevisionModel>> GetSamplesRevisionsAsync(ClaimsPrincipal user, PageParams pageParams, FilterAndSortParams filterAndSortParams);
public Task<string> GetSamplesRevisionContentAsync(string fileId);
public Task<SamplesRevisionModel> UpsertSamplesRevisionsAsync(ClaimsPrincipal user, string reviewId, string sample, string revisionTitle, string FileName = null);
public Task<SamplesRevisionModel> UpsertSamplesRevisionsAsync(ClaimsPrincipal user, string reviewId, Stream fileStream, string revisionTitle, string FileName);
Expand Down
2 changes: 1 addition & 1 deletion src/dotnet/APIView/APIViewWeb/Managers/ReviewManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ public Task<ReviewListItemModel> GetReviewAsync(string language, string packageN
/// <param name="pageParams"></param> Contains paginationinfo
/// <param name="filterAndSortParams"></param> Contains filter and sort parameters
/// <returns></returns>
public async Task<PagedList<ReviewListItemModel>> GetReviewsAsync(PageParams pageParams, ReviewFilterAndSortParams filterAndSortParams)
public async Task<PagedList<ReviewListItemModel>> GetReviewsAsync(PageParams pageParams, FilterAndSortParams filterAndSortParams)
{
return await _reviewsRepository.GetReviewsAsync(pageParams, filterAndSortParams);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using System.Collections.Generic;
using APIViewWeb.Repositories;
using APIViewWeb.LeanModels;
using APIViewWeb.Helpers;

namespace APIViewWeb.Managers
{
Expand All @@ -36,11 +37,28 @@ public SamplesRevisionsManager(
_commentsManager = commentManager;
}

public async Task<SamplesRevisionModel> GetSamplesRevisionAsync(string reviewId, string samplesRevisionId)
{
return await _samplesRevisionsRepository.GetSamplesRevisionAsync(reviewId, samplesRevisionId);
}

public async Task<IEnumerable<SamplesRevisionModel>> GetSamplesRevisionsAsync(string reviewId)
{
return await _samplesRevisionsRepository.GetSamplesRevisionsAsync(reviewId);
}

/// <summary>
/// Retrieve Revisions from the Revisions container in CosmosDb after applying filter to the query.
/// </summary>
/// <param name="user"></param>
/// <param name="pageParams"></param> Contains pagination info
/// <param name="filterAndSortParams"></param> Contains filter and sort parameters
/// <returns></returns>
public async Task<PagedList<SamplesRevisionModel>> GetSamplesRevisionsAsync(ClaimsPrincipal user, PageParams pageParams, FilterAndSortParams filterAndSortParams)
{
return await _samplesRevisionsRepository.GetSamplesRevisionsAsync(user, pageParams, filterAndSortParams);
}

public async Task<string> GetSamplesRevisionContentAsync(string fileId)
{
var file = await _sampleFilesRepository.GetUsageSampleAsync(fileId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public async Task UpsertAPIRevisionAsync(APIRevisionListItemModel revision)
/// <param name="pageParams"></param> Contains paginationinfo
/// <param name="filterAndSortParams"></param> Contains filter and sort parameters
/// <returns></returns>
public async Task<PagedList<APIRevisionListItemModel>> GetAPIRevisionsAsync(ClaimsPrincipal user, PageParams pageParams, APIRevisionsFilterAndSortParams filterAndSortParams)
public async Task<PagedList<APIRevisionListItemModel>> GetAPIRevisionsAsync(ClaimsPrincipal user, PageParams pageParams, FilterAndSortParams filterAndSortParams)
{
var queryStringBuilder = new StringBuilder(@"SELECT * FROM Revisions c");
queryStringBuilder.Append($" WHERE c.IsDeleted = {filterAndSortParams.IsDeleted.ToString().ToLower()}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT License.

using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using APIViewWeb.LeanModels;
using APIViewWeb.Repositories;
Expand All @@ -19,9 +20,15 @@ public CosmosCommentsRepository(IConfiguration configuration, CosmosClient cosmo
_commentsContainer = cosmosClient.GetContainer(configuration["CosmosDBName"], "Comments");
}

public async Task<IEnumerable<CommentItemModel>> GetCommentsAsync(string reviewId, bool isDeleted = false)
public async Task<IEnumerable<CommentItemModel>> GetCommentsAsync(string reviewId, bool isDeleted = false, CommentType? commentType = null)
{
return await GetCommentsFromQueryAsync($"SELECT * FROM Comments c WHERE c.ReviewId = '{reviewId}' AND c.IsDeleted = {isDeleted.ToString().ToLower()}");
StringBuilder query = new StringBuilder($"SELECT * FROM Comments c WHERE c.ReviewId = '{reviewId}' AND c.IsDeleted = {isDeleted.ToString().ToLower()}");

if (commentType != null)
{
query.Append($" AND c.CommentType = '{commentType.ToString()}'");
}
return await GetCommentsFromQueryAsync(query.ToString());
}

public async Task UpsertCommentAsync(CommentItemModel commentModel)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ public async Task<ReviewListItemModel> GetReviewAsync(string language, string pa
return result;
}

public async Task<PagedList<ReviewListItemModel>> GetReviewsAsync(PageParams pageParams, ReviewFilterAndSortParams filterAndSortParams)
public async Task<PagedList<ReviewListItemModel>> GetReviewsAsync(PageParams pageParams, FilterAndSortParams filterAndSortParams)
{
var queryStringBuilder = new StringBuilder(@"
SELECT VALUE {
Expand Down
Loading
Loading