From faf9d321f311951796291532948c2e8d0df5839e Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Tue, 25 Aug 2020 18:48:21 -0500 Subject: [PATCH] =?UTF-8?q?feat(directory):=20=E2=9C=A8=20finish=20fleshin?= =?UTF-8?q?g=20out=20base=20GET=20endpoints?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/LanguagesController.cs | 26 ++++++++ .../Controllers/SoftwareController.cs | 26 ++++++++ .../Controllers/SyntaxesController.cs | 26 ++++++++ .../Controllers/TagsController.cs | 26 ++++++++ .../Queries/GetLanguages.cs | 55 +++++++++++++++++ .../Queries/GetLicenses.cs | 2 +- .../Queries/GetSoftware.cs | 60 +++++++++++++++++++ .../Queries/GetSyntaxes.cs | 59 ++++++++++++++++++ .../Queries/GetTags.cs | 56 +++++++++++++++++ 9 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 services/directory/src/FilterLists.Directory.Api/Controllers/LanguagesController.cs create mode 100644 services/directory/src/FilterLists.Directory.Api/Controllers/SoftwareController.cs create mode 100644 services/directory/src/FilterLists.Directory.Api/Controllers/SyntaxesController.cs create mode 100644 services/directory/src/FilterLists.Directory.Api/Controllers/TagsController.cs create mode 100644 services/directory/src/FilterLists.Directory.Application/Queries/GetLanguages.cs create mode 100644 services/directory/src/FilterLists.Directory.Application/Queries/GetSoftware.cs create mode 100644 services/directory/src/FilterLists.Directory.Application/Queries/GetSyntaxes.cs create mode 100644 services/directory/src/FilterLists.Directory.Application/Queries/GetTags.cs diff --git a/services/directory/src/FilterLists.Directory.Api/Controllers/LanguagesController.cs b/services/directory/src/FilterLists.Directory.Api/Controllers/LanguagesController.cs new file mode 100644 index 000000000..75399ce77 --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Api/Controllers/LanguagesController.cs @@ -0,0 +1,26 @@ +using System.Threading; +using System.Threading.Tasks; +using FilterLists.Directory.Application.Queries; +using MediatR; +using Microsoft.AspNetCore.Mvc; + +namespace FilterLists.Directory.Api.Controllers +{ + [ApiController] + [Route("v1/[controller]")] + public class LanguagesController : ControllerBase + { + private readonly IMediator _mediator; + + public LanguagesController(IMediator mediator) + { + _mediator = mediator; + } + + [HttpGet] + public async Task Get(CancellationToken cancellationToken) + { + return Ok(await _mediator.Send(new GetLanguages.Query(), cancellationToken)); + } + } +} \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Api/Controllers/SoftwareController.cs b/services/directory/src/FilterLists.Directory.Api/Controllers/SoftwareController.cs new file mode 100644 index 000000000..e0698dbae --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Api/Controllers/SoftwareController.cs @@ -0,0 +1,26 @@ +using System.Threading; +using System.Threading.Tasks; +using FilterLists.Directory.Application.Queries; +using MediatR; +using Microsoft.AspNetCore.Mvc; + +namespace FilterLists.Directory.Api.Controllers +{ + [ApiController] + [Route("v1/[controller]")] + public class SoftwareController : ControllerBase + { + private readonly IMediator _mediator; + + public SoftwareController(IMediator mediator) + { + _mediator = mediator; + } + + [HttpGet] + public async Task Get(CancellationToken cancellationToken) + { + return Ok(await _mediator.Send(new GetSoftware.Query(), cancellationToken)); + } + } +} \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Api/Controllers/SyntaxesController.cs b/services/directory/src/FilterLists.Directory.Api/Controllers/SyntaxesController.cs new file mode 100644 index 000000000..d4d778843 --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Api/Controllers/SyntaxesController.cs @@ -0,0 +1,26 @@ +using System.Threading; +using System.Threading.Tasks; +using FilterLists.Directory.Application.Queries; +using MediatR; +using Microsoft.AspNetCore.Mvc; + +namespace FilterLists.Directory.Api.Controllers +{ + [ApiController] + [Route("v1/[controller]")] + public class SyntaxesController : ControllerBase + { + private readonly IMediator _mediator; + + public SyntaxesController(IMediator mediator) + { + _mediator = mediator; + } + + [HttpGet] + public async Task Get(CancellationToken cancellationToken) + { + return Ok(await _mediator.Send(new GetSyntaxes.Query(), cancellationToken)); + } + } +} \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Api/Controllers/TagsController.cs b/services/directory/src/FilterLists.Directory.Api/Controllers/TagsController.cs new file mode 100644 index 000000000..a9d4d502b --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Api/Controllers/TagsController.cs @@ -0,0 +1,26 @@ +using System.Threading; +using System.Threading.Tasks; +using FilterLists.Directory.Application.Queries; +using MediatR; +using Microsoft.AspNetCore.Mvc; + +namespace FilterLists.Directory.Api.Controllers +{ + [ApiController] + [Route("v1/[controller]")] + public class TagsController : ControllerBase + { + private readonly IMediator _mediator; + + public TagsController(IMediator mediator) + { + _mediator = mediator; + } + + [HttpGet] + public async Task Get(CancellationToken cancellationToken) + { + return Ok(await _mediator.Send(new GetTags.Query(), cancellationToken)); + } + } +} \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Application/Queries/GetLanguages.cs b/services/directory/src/FilterLists.Directory.Application/Queries/GetLanguages.cs new file mode 100644 index 000000000..3fe57a6d1 --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Application/Queries/GetLanguages.cs @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using AutoMapper; +using AutoMapper.QueryableExtensions; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; +using MediatR; +using Microsoft.EntityFrameworkCore; + +namespace FilterLists.Directory.Application.Queries +{ + public static class GetLanguages + { + public class Query : IRequest> + { + } + + public class Handler : IRequestHandler> + { + private readonly IQueryContext _context; + private readonly IMapper _mapper; + + public Handler(IQueryContext context, IMapper mapper) + { + _context = context; + _mapper = mapper; + } + + public async Task> Handle( + Query request, + CancellationToken cancellationToken) + { + return await _context.Languages + .ProjectTo(_mapper.ConfigurationProvider) + .ToListAsync(cancellationToken); + } + } + + public class LicenseViewModelProfile : Profile + { + public LicenseViewModelProfile() + { + CreateMap(); + } + } + + public class LanguageViewModel + { + public string Iso6391 { get; private set; } = null!; + public string Name { get; private set; } = null!; + public IEnumerable? FilterListIds { get; private set; } + } + } +} \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Application/Queries/GetLicenses.cs b/services/directory/src/FilterLists.Directory.Application/Queries/GetLicenses.cs index 86a30ed30..b6a3ee34c 100644 --- a/services/directory/src/FilterLists.Directory.Application/Queries/GetLicenses.cs +++ b/services/directory/src/FilterLists.Directory.Application/Queries/GetLicenses.cs @@ -32,7 +32,7 @@ public async Task> Handle( Query request, CancellationToken cancellationToken) { - return await _context.Maintainers + return await _context.Licenses .ProjectTo(_mapper.ConfigurationProvider) .ToListAsync(cancellationToken); } diff --git a/services/directory/src/FilterLists.Directory.Application/Queries/GetSoftware.cs b/services/directory/src/FilterLists.Directory.Application/Queries/GetSoftware.cs new file mode 100644 index 000000000..caa129d1b --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Application/Queries/GetSoftware.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using AutoMapper; +using AutoMapper.QueryableExtensions; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; +using MediatR; +using Microsoft.EntityFrameworkCore; + +namespace FilterLists.Directory.Application.Queries +{ + public static class GetSoftware + { + public class Query : IRequest> + { + } + + public class Handler : IRequestHandler> + { + private readonly IQueryContext _context; + private readonly IMapper _mapper; + + public Handler(IQueryContext context, IMapper mapper) + { + _context = context; + _mapper = mapper; + } + + public async Task> Handle( + Query request, + CancellationToken cancellationToken) + { + return await _context.Software + .ProjectTo(_mapper.ConfigurationProvider) + .ToListAsync(cancellationToken); + } + } + + public class SoftwareViewModelProfile : Profile + { + public SoftwareViewModelProfile() + { + CreateMap(); + } + } + + public class SoftwareViewModel + { + public int Id { get; private set; } + public string Name { get; private set; } = null!; + public string? Description { get; private set; } + public Uri? HomeUrl { get; private set; } + public Uri? DownloadUrl { get; private set; } + public bool SupportsAbpUrlScheme { get; private set; } + public IEnumerable? SyntaxIds { get; private set; } + } + } +} \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Application/Queries/GetSyntaxes.cs b/services/directory/src/FilterLists.Directory.Application/Queries/GetSyntaxes.cs new file mode 100644 index 000000000..d36bf5139 --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Application/Queries/GetSyntaxes.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using AutoMapper; +using AutoMapper.QueryableExtensions; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; +using MediatR; +using Microsoft.EntityFrameworkCore; + +namespace FilterLists.Directory.Application.Queries +{ + public static class GetSyntaxes + { + public class Query : IRequest> + { + } + + public class Handler : IRequestHandler> + { + private readonly IQueryContext _context; + private readonly IMapper _mapper; + + public Handler(IQueryContext context, IMapper mapper) + { + _context = context; + _mapper = mapper; + } + + public async Task> Handle( + Query request, + CancellationToken cancellationToken) + { + return await _context.Syntaxes + .ProjectTo(_mapper.ConfigurationProvider) + .ToListAsync(cancellationToken); + } + } + + public class SyntaxViewModelProfile : Profile + { + public SyntaxViewModelProfile() + { + CreateMap(); + } + } + + public class SyntaxViewModel + { + public int Id { get; private set; } + public string Name { get; private set; } = null!; + public string? Description { get; private set; } + public Uri? Url { get; private set; } + public IEnumerable? FilterListIds { get; private set; } + public IEnumerable? SoftwareIds { get; private set; } + } + } +} \ No newline at end of file diff --git a/services/directory/src/FilterLists.Directory.Application/Queries/GetTags.cs b/services/directory/src/FilterLists.Directory.Application/Queries/GetTags.cs new file mode 100644 index 000000000..fa46d3173 --- /dev/null +++ b/services/directory/src/FilterLists.Directory.Application/Queries/GetTags.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using AutoMapper; +using AutoMapper.QueryableExtensions; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; +using MediatR; +using Microsoft.EntityFrameworkCore; + +namespace FilterLists.Directory.Application.Queries +{ + public static class GetTags + { + public class Query : IRequest> + { + } + + public class Handler : IRequestHandler> + { + private readonly IQueryContext _context; + private readonly IMapper _mapper; + + public Handler(IQueryContext context, IMapper mapper) + { + _context = context; + _mapper = mapper; + } + + public async Task> Handle( + Query request, + CancellationToken cancellationToken) + { + return await _context.Tags + .ProjectTo(_mapper.ConfigurationProvider) + .ToListAsync(cancellationToken); + } + } + + public class TagViewModelProfile : Profile + { + public TagViewModelProfile() + { + CreateMap(); + } + } + + public class TagViewModel + { + public int Id { get; private set; } + public string Name { get; private set; } = null!; + public string? Description { get; private set; } + public IEnumerable? FilterListIds { get; private set; } + } + } +} \ No newline at end of file