using NetinaShop.Domain.Entities.Blogs; namespace NetinaShop.Api.Controller; public class BlogCategoryController : ICarterModule { public virtual void AddRoutes(IEndpointRouteBuilder app) { var group = app.NewVersionedApi("BlogCategory") .MapGroup($"api/blog/category") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser()); group.MapGet("", GetAllAsync) .WithDisplayName("GetAllCategories") .HasApiVersion(1.0); group.MapGet("{id}", GetAsync) .WithDisplayName("GetBlogCategory") .HasApiVersion(1.0); group.MapPost("", Post) .HasApiVersion(1.0); group.MapPut("", Put) .HasApiVersion(1.0); group.MapDelete("{id}", Delete) .HasApiVersion(1.0); } // GET:Get All Entity public async Task GetAllAsync([FromQuery] int page, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken) => TypedResults.Ok(await repositoryWrapper.SetRepository().TableNoTracking .OrderByDescending(b => b.CreatedAt).Skip(page * 10).Take(10) .Select(BlogCategoryMapper.ProjectToSDto) .ToListAsync(cancellationToken)); // GET:Get An Entity By Id public async Task GetAsync(Guid id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken) => TypedResults.Ok(await repositoryWrapper.SetRepository().TableNoTracking .Where(b => b.Id == id) .Select(BlogCategoryMapper.ProjectToLDto) .FirstOrDefaultAsync(cancellationToken)); // POST:Create Entity public async Task Post([FromBody] BlogCategorySDto dto, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken) { var ent = BlogCategory.Create(dto.Name,dto.Description); repositoryWrapper.SetRepository().Add(ent); await repositoryWrapper.SaveChangesAsync(cancellationToken); return TypedResults.Ok(); } // PUT:Update Entity public async Task Put([FromBody] BlogCategorySDto dto, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken) { var ent = await repositoryWrapper.SetRepository().TableNoTracking .FirstOrDefaultAsync(b => b.Id == dto.Id, cancellationToken); if (ent == null) throw new AppException("Blog not found"); var newEnt = BlogCategory.Create(dto.Name, dto.Description); newEnt.Id = ent.Id; repositoryWrapper.SetRepository().Update(newEnt); await repositoryWrapper.SaveChangesAsync(cancellationToken); return TypedResults.Ok(); } // DELETE:Delete Entity public async Task Delete(Guid id, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken) { var ent = await repositoryWrapper.SetRepository().TableNoTracking .FirstOrDefaultAsync(b => b.Id == id, cancellationToken); if (ent == null) throw new AppException("Blog not found"); repositoryWrapper.SetRepository().Delete(ent); await repositoryWrapper.SaveChangesAsync(cancellationToken); return TypedResults.Ok(); } }