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