-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added dapper and category get and get all methods
- Loading branch information
Showing
19 changed files
with
169 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
using System.Data; | ||
using System.Data.Common; | ||
|
||
namespace Application.Abstractions.Data; | ||
|
||
public interface IDbConnectionFactory | ||
{ | ||
IDbConnection GetOpenConnection(); | ||
ValueTask<DbConnection> OpenConnectionAsync(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
using Microsoft.EntityFrameworkCore; | ||
|
||
namespace Application.Abstractions.Models; | ||
public class PaginatedList<T> | ||
{ | ||
public IReadOnlyCollection<T> Items { get; } | ||
public int PageNumber { get; } | ||
public int TotalPages { get; } | ||
public int TotalCount { get; } | ||
|
||
public PaginatedList(IReadOnlyCollection<T> items, int count, int pageNumber, int pageSize) | ||
{ | ||
PageNumber = pageNumber; | ||
TotalPages = (int)Math.Ceiling(count / (double)pageSize); | ||
TotalCount = count; | ||
Items = items; | ||
} | ||
|
||
public bool HasPreviousPage => PageNumber > 1; | ||
|
||
public bool HasNextPage => PageNumber < TotalPages; | ||
|
||
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageNumber, int pageSize) | ||
{ | ||
#pragma warning disable IDE0008 // Use explicit type | ||
var count = await source.CountAsync(); | ||
var items = await source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToListAsync(); | ||
#pragma warning restore IDE0008 // Use explicit type | ||
|
||
return new PaginatedList<T>(items, count, pageNumber, pageSize); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
namespace Application.Categories.Get; | ||
public sealed record CategoryResponse(Guid Id, string Name); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
using Application.Abstractions.Messaging; | ||
|
||
namespace Application.Categories.Get; | ||
public sealed record GetCategoryQuery(Guid CategoryId) : IQuery<CategoryResponse>; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
using System.Data.Common; | ||
using Application.Abstractions.Data; | ||
using Application.Abstractions.Messaging; | ||
using Dapper; | ||
using Domain.Categories; | ||
using SharedKernel; | ||
|
||
namespace Application.Categories.Get; | ||
internal sealed class GetCategoryQueryHandler(IDbConnectionFactory dbConnectionFactory) | ||
: IQueryHandler<GetCategoryQuery, CategoryResponse> | ||
{ | ||
public async Task<Result<CategoryResponse>> Handle(GetCategoryQuery request, CancellationToken cancellationToken) | ||
{ | ||
await using DbConnection connection = await dbConnectionFactory.OpenConnectionAsync(); | ||
|
||
const string sql = | ||
$""" | ||
SELECT | ||
id AS {nameof(CategoryResponse.Id)}, | ||
name AS {nameof(CategoryResponse.Name)} | ||
FROM categories | ||
WHERE id = @CategoryId | ||
"""; | ||
|
||
CategoryResponse? category = await connection.QuerySingleOrDefaultAsync<CategoryResponse>(sql, request); | ||
|
||
if (category is null) | ||
{ | ||
return Result.Failure<CategoryResponse>(CategoryErrors.NotFound(request.CategoryId)); | ||
} | ||
|
||
return category; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
using Application.Abstractions.Messaging; | ||
using Application.Abstractions.Models; | ||
using Application.Categories.Get; | ||
|
||
namespace Application.Categories.GetAll; | ||
public sealed record GetCategoriesQuery(int PageNumber, int PageSize) : IQuery<PaginatedList<CategoryResponse>>; |
44 changes: 44 additions & 0 deletions
44
src/Application/Categories/GetAll/GetCategoriesQueryHandler.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
using System.Data.Common; | ||
using Application.Abstractions.Data; | ||
using Application.Abstractions.Messaging; | ||
using Application.Abstractions.Models; | ||
using Application.Categories.Get; | ||
using Dapper; | ||
using SharedKernel; | ||
|
||
namespace Application.Categories.GetAll; | ||
internal sealed class GetCategoriesQueryHandler(IDbConnectionFactory dbConnectionFactory) | ||
: IQueryHandler<GetCategoriesQuery, PaginatedList<CategoryResponse>> | ||
{ | ||
public async Task<Result<PaginatedList<CategoryResponse>>> Handle(GetCategoriesQuery request, CancellationToken cancellationToken) | ||
{ | ||
await using DbConnection connection = await dbConnectionFactory.OpenConnectionAsync(); | ||
|
||
const string countSql = @" | ||
SELECT COUNT(*) | ||
FROM categories | ||
"; | ||
|
||
const string sql = @" | ||
SELECT | ||
id AS Id, | ||
name AS Name | ||
FROM categories | ||
ORDER BY id | ||
OFFSET @Offset ROWS | ||
FETCH NEXT @PageSize ROWS ONLY | ||
"; | ||
|
||
int totalCount = await connection.ExecuteScalarAsync<int>(countSql); | ||
|
||
#pragma warning disable IDE0008 // Use explicit type | ||
#pragma warning disable IDE0037 // Use inferred member name | ||
var categories = await connection.QueryAsync<CategoryResponse>(sql, new { Offset = (request.PageNumber - 1) * request.PageSize, PageSize = request.PageSize }); | ||
#pragma warning restore IDE0037 // Use inferred member name | ||
#pragma warning restore IDE0008 // Use explicit type | ||
|
||
var paginatedCategories = new PaginatedList<CategoryResponse>(categories.ToList(), totalCount, request.PageNumber, request.PageSize); | ||
|
||
return Result.Success(paginatedCategories); | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,14 @@ | ||
using System.Data; | ||
using System.Data.Common; | ||
using Application.Abstractions.Data; | ||
using Npgsql; | ||
|
||
namespace Infrastructure.Database; | ||
|
||
internal sealed class DbConnectionFactory(NpgsqlDataSource dataSource) : IDbConnectionFactory | ||
{ | ||
public IDbConnection GetOpenConnection() | ||
public async ValueTask<DbConnection> OpenConnectionAsync() | ||
{ | ||
NpgsqlConnection connection = dataSource.OpenConnection(); | ||
|
||
return connection; | ||
return await dataSource.OpenConnectionAsync(); | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
.../20240622151536_InitialCreate.Designer.cs → .../20240623122729_InitialCreate.Designer.cs
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
File renamed without changes.
30 changes: 0 additions & 30 deletions
30
src/Infrastructure/Queries/Categories/GetCategoryByIdQueryHandler.cs
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
using Application.Abstractions.Models; | ||
using Application.Categories.Get; | ||
using Application.Categories.GetAll; | ||
using MediatR; | ||
using SharedKernel; | ||
using Web.Api.Extensions; | ||
using Web.Api.Infrastructure; | ||
|
||
namespace Web.Api.Endpoints.Categories; | ||
|
||
internal sealed class GetAll : IEndpoint | ||
{ | ||
public void MapEndpoint(IEndpointRouteBuilder app) | ||
{ | ||
app.MapGet("categories", async ( | ||
int pageNumber, | ||
int pageSize, | ||
ISender sender, | ||
CancellationToken cancellationToken) => | ||
{ | ||
var query = new GetCategoriesQuery(pageNumber, pageSize); | ||
Result<PaginatedList<CategoryResponse>> result = await sender.Send(query, cancellationToken); | ||
return result.Match(Results.Ok, CustomResults.Problem); | ||
}) | ||
.WithTags(Tags.Categories); | ||
} | ||
} |