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

Backpack items 53 #54

Merged
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
using MediatR;
using Microsoft.EntityFrameworkCore;

namespace DeUrgenta.Backpack.Api.CommandsHandlers
namespace DeUrgenta.Backpack.Api.CommandHandlers
{
public class AddBackpackItemHandler : IRequestHandler<AddBackpackItem, Result<BackpackItemModel>>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
using MediatR;
using Microsoft.EntityFrameworkCore;

namespace DeUrgenta.Backpack.Api.CommandsHandlers
namespace DeUrgenta.Backpack.Api.CommandHandlers
{
public class DeleteBackpackItemHandler : IRequestHandler<DeleteBackpackItem, Result>
{
Expand All @@ -29,8 +29,8 @@ public async Task<Result> Handle(DeleteBackpackItem request, CancellationToken c
return Result.Failure<BackpackItemModel>("Validation failed");
}

var backpackItem = await _context.BackpackItem.FirstAsync(x => x.Id == request.ItemId, cancellationToken);
_context.BackpackItem.Remove(backpackItem);
var backpackItem = await _context.BackpackItems.FirstAsync(x => x.Id == request.ItemId, cancellationToken);
_context.BackpackItems.Remove(backpackItem);
await _context.SaveChangesAsync(cancellationToken);

return Result.Success();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
using MediatR;
using Microsoft.EntityFrameworkCore;

namespace DeUrgenta.Backpack.Api.CommandsHandlers
namespace DeUrgenta.Backpack.Api.CommandHandlers
{
public class UpdateBackpackItemHandler : IRequestHandler<UpdateBackpackItem, Result<BackpackItemModel>>
{
Expand All @@ -28,7 +28,7 @@ public async Task<Result<BackpackItemModel>> Handle(UpdateBackpackItem request,
{
return Result.Failure<BackpackItemModel>("Validation failed");
}
var backpackItem = await _context.BackpackItem.FirstAsync(x => x.Id == request.ItemId, cancellationToken);
var backpackItem = await _context.BackpackItems.FirstAsync(x => x.Id == request.ItemId, cancellationToken);
backpackItem.Name = request.BackpackItem.Name;
backpackItem.BackpackCategory = request.BackpackItem.CategoryType ?? backpackItem.BackpackCategory;
backpackItem.Amount = request.BackpackItem.Amount;
Expand Down
8 changes: 5 additions & 3 deletions Src/DeUrgenta.Backpack.Api/Commands/AddBackpackItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ namespace DeUrgenta.Backpack.Api.Commands
{
public class AddBackpackItem : IRequest<Result<BackpackItemModel>>
{
public Guid BackpackId { get; set; }
public BackpackItemRequest BackpackItem { get; set; }
public AddBackpackItem(Guid backpackId, BackpackItemRequest backpackItem)
public string UserSub { get; }
public Guid BackpackId { get; }
public BackpackItemRequest BackpackItem { get; }
public AddBackpackItem(string userSub, Guid backpackId, BackpackItemRequest backpackItem)
{
UserSub = userSub;
BackpackId = backpackId;
BackpackItem = backpackItem;
}
Expand Down
6 changes: 4 additions & 2 deletions Src/DeUrgenta.Backpack.Api/Commands/DeleteBackpackItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ namespace DeUrgenta.Backpack.Api.Commands
{
public class DeleteBackpackItem : IRequest<Result>
{
public Guid ItemId { get; set; }
public DeleteBackpackItem(Guid itemId)
public string UserSub { get; }
public Guid ItemId { get; }
public DeleteBackpackItem(string userSub, Guid itemId)
{
UserSub = userSub;
ItemId = itemId;
}
}
Expand Down
8 changes: 5 additions & 3 deletions Src/DeUrgenta.Backpack.Api/Commands/UpdateBackpackItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ namespace DeUrgenta.Backpack.Api.Commands
{
public class UpdateBackpackItem : IRequest<Result<BackpackItemModel>>
{
public Guid ItemId { get; set; }
public BackpackItemRequest BackpackItem { get; set; }
public UpdateBackpackItem(Guid itemId, BackpackItemRequest backpackItem)
public string UserSub { get; }
public Guid ItemId { get; }
public BackpackItemRequest BackpackItem { get; }
public UpdateBackpackItem(string userSub, Guid itemId, BackpackItemRequest backpackItem)
{
UserSub = userSub;
ItemId = itemId;
BackpackItem = backpackItem;
}
Expand Down
16 changes: 11 additions & 5 deletions Src/DeUrgenta.Backpack.Api/Controllers/BackpackItemController.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Immutable;
using System.Linq;
using System.Threading.Tasks;
using DeUrgenta.Backpack.Api.Commands;
using DeUrgenta.Backpack.Api.Models;
Expand Down Expand Up @@ -42,7 +43,8 @@ public BackpackItemController(IMediator mediator)
[SwaggerResponseExample(StatusCodes.Status500InternalServerError, typeof(ApplicationErrorResponseExample))]
public async Task<ActionResult<IImmutableList<BackpackItemModel>>> GetBackpackItemsAsync([FromRoute] Guid backpackId)
{
var query = new GetBackpackItems(backpackId);
var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;
var query = new GetBackpackItems(sub, backpackId);
var result = await _mediator.Send(query);

if (result.IsFailure)
Expand All @@ -63,7 +65,8 @@ public async Task<ActionResult<IImmutableList<BackpackItemModel>>> GetBackpackIt
[SwaggerResponseExample(StatusCodes.Status500InternalServerError, typeof(ApplicationErrorResponseExample))]
public async Task<ActionResult<IImmutableList<BackpackItemModel>>> GetBackpackCategoryItemsAsync([FromRoute] Guid backpackId, [FromRoute] BackpackCategoryType categoryId)
{
var query = new GetBackpackCategoryItems(backpackId, categoryId);
var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;
var query = new GetBackpackCategoryItems(sub, backpackId, categoryId);
var result = await _mediator.Send(query);

if (result.IsFailure)
Expand All @@ -88,7 +91,8 @@ public async Task<ActionResult<IImmutableList<BackpackItemModel>>> GetBackpackCa
[SwaggerResponseExample(StatusCodes.Status500InternalServerError, typeof(ApplicationErrorResponseExample))]
public async Task<ActionResult<BackpackItemModel>> CreateNewBackpackItemAsync([FromRoute] Guid backpackId, [FromBody] BackpackItemRequest backpackItem)
{
var command = new AddBackpackItem(backpackId, backpackItem);
var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;
var command = new AddBackpackItem(sub, backpackId, backpackItem);
var result = await _mediator.Send(command);

if (result.IsFailure)
Expand All @@ -114,7 +118,8 @@ public async Task<ActionResult<BackpackItemModel>> CreateNewBackpackItemAsync([F
[SwaggerResponseExample(StatusCodes.Status500InternalServerError, typeof(ApplicationErrorResponseExample))]
public async Task<ActionResult<BackpackItemModel>> UpdateBackpackItemAsync([FromRoute] Guid itemId, [FromBody] BackpackItemRequest backpackItem)
{
var command = new UpdateBackpackItem(itemId, backpackItem);
var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;
var command = new UpdateBackpackItem(sub, itemId, backpackItem);
var result = await _mediator.Send(command);

if (result.IsFailure)
Expand All @@ -138,7 +143,8 @@ public async Task<ActionResult<BackpackItemModel>> UpdateBackpackItemAsync([From
[SwaggerResponseExample(StatusCodes.Status500InternalServerError, typeof(ApplicationErrorResponseExample))]
public async Task<ActionResult> DeleteBackpackItemAsync([FromRoute] Guid itemId)
{
var command = new DeleteBackpackItem(itemId);
var sub = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;
var command = new DeleteBackpackItem(sub, itemId);
var result = await _mediator.Send(command);

if (result.IsFailure)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ namespace DeUrgenta.Backpack.Api.Queries
{
public class GetBackpackCategoryItems : IRequest<Result<IImmutableList<BackpackItemModel>>>
{
public string UserSub { get; }
public Guid BackpackId { get; }
public BackpackCategoryType CategoryId { get; }

public GetBackpackCategoryItems(Guid backpackId, BackpackCategoryType categoryId)
public GetBackpackCategoryItems(string userSub, Guid backpackId, BackpackCategoryType categoryId)
{
UserSub = userSub;
BackpackId = backpackId;
CategoryId = categoryId;
}
Expand Down
4 changes: 3 additions & 1 deletion Src/DeUrgenta.Backpack.Api/Queries/GetBackpackItems.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ namespace DeUrgenta.Backpack.Api.Queries
{
public class GetBackpackItems : IRequest<Result<IImmutableList<BackpackItemModel>>>
{
public string UserSub { get; }
public Guid BackpackId { get; }

public GetBackpackItems(Guid backpackId)
public GetBackpackItems(string userSub, Guid backpackId)
{
UserSub = userSub;
BackpackId = backpackId;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
using MediatR;
using Microsoft.EntityFrameworkCore;

namespace DeUrgenta.Backpack.Api.QueriesHandlers
namespace DeUrgenta.Backpack.Api.QueryHandlers
{
public class GetBackpackCategoryItemsHandler : IRequestHandler<GetBackpackCategoryItems, Result<IImmutableList<BackpackItemModel>>>
{
Expand All @@ -31,7 +31,7 @@ public async Task<Result<IImmutableList<BackpackItemModel>>> Handle(GetBackpackC
return Result.Failure<IImmutableList<BackpackItemModel>>("Validation failed");
}

var backpackItems = await _context.BackpackItem
var backpackItems = await _context.BackpackItems
.Where(item => item.BackpackId == request.BackpackId && item.BackpackCategory == request.CategoryId)
.Select(item => new BackpackItemModel
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public async Task<Result<IImmutableList<BackpackItemModel>>> Handle(GetBackpackI
return Result.Failure<IImmutableList<BackpackItemModel>>("Validation failed");
}

var backpackItems = await _context.BackpackItem
var backpackItems = await _context.BackpackItems
.Where(item => item.Backpack.Id == request.BackpackId)
.Select(item => new BackpackItemModel
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,20 @@ public AddBackpackItemValidator(DeUrgentaContext context)
}
public async Task<bool> IsValidAsync(AddBackpackItem request)
{
return await _context.Backpacks.AnyAsync(x => x.Id == request.BackpackId);
var user = await _context.Users.FirstOrDefaultAsync(u => u.Sub == request.UserSub);
if (user == null)
{
return false;
}

var isContributor = await _context.BackpacksToUsers.AnyAsync(btu => btu.User.Id == user.Id && btu.Backpack.Id == request.BackpackId);

if (!isContributor)
{
return false;
}

return true;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,27 @@ public DeleteBackpackItemValidator(DeUrgentaContext context)
}
public async Task<bool> IsValidAsync(DeleteBackpackItem request)
{
return await _context.BackpackItem.AnyAsync(x => x.Id == request.ItemId);
var user = await _context.Users.FirstOrDefaultAsync(u => u.Sub == request.UserSub);
if (user == null)
{
return false;
}

var backpackItem = await _context.BackpackItems.FirstOrDefaultAsync(x => x.Id == request.ItemId);
if (backpackItem == null)
{
return false;
}

var backpack = await _context.Backpacks.FirstOrDefaultAsync(backpack => backpack.Id == backpackItem.BackpackId);

var isContributor = await _context.BackpacksToUsers.AnyAsync(btu => btu.User.Id == user.Id && btu.Backpack.Id == backpack.Id);
if (!isContributor)
{
return false;
}

return true;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,19 @@ public GetBackpackCategoryItemsValidator(DeUrgentaContext context)
}
public async Task<bool> IsValidAsync(GetBackpackCategoryItems request)
{
return await _context.Backpacks.AnyAsync(x => x.Id == request.BackpackId);
var user = await _context.Users.FirstOrDefaultAsync(u => u.Sub == request.UserSub);
if (user == null)
{
return false;
}

var isContributor = await _context.BackpacksToUsers.AnyAsync(btu => btu.User.Id == user.Id && btu.Backpack.Id == request.BackpackId);
if (!isContributor)
{
return false;
}

return true;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,19 @@ public GetBackpackItemsValidator(DeUrgentaContext context)
}
public async Task<bool> IsValidAsync(GetBackpackItems request)
{
return await _context.Backpacks.AnyAsync(x => x.Id == request.BackpackId);
var user = await _context.Users.FirstOrDefaultAsync(u => u.Sub == request.UserSub);
if (user == null)
{
return false;
}

var isContributor = await _context.BackpacksToUsers.AnyAsync(btu => btu.User.Id == user.Id && btu.Backpack.Id == request.BackpackId);
if (!isContributor)
{
return false;
}

return true;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,27 @@ public UpdateBackpackItemValidator(DeUrgentaContext context)
}
public async Task<bool> IsValidAsync(UpdateBackpackItem request)
{
return await _context.BackpackItem.AnyAsync(x => x.Id == request.ItemId);
var user = await _context.Users.FirstOrDefaultAsync(u => u.Sub == request.UserSub);
if (user == null)
{
return false;
}

var backpackItem = await _context.BackpackItems.FirstOrDefaultAsync(x => x.Id == request.ItemId);
if (backpackItem == null)
{
return false;
}

var backpack = await _context.Backpacks.FirstOrDefaultAsync(backpack => backpack.Id == backpackItem.BackpackId);

var isContributor = await _context.BackpacksToUsers.AnyAsync(btu => btu.User.Id == user.Id && btu.Backpack.Id == backpack.Id);
if (!isContributor)
{
return false;
}

return true;
}
}
}
2 changes: 1 addition & 1 deletion Src/DeUrgenta.Domain/DeUrgentaContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public DeUrgentaContext(DbContextOptions<DeUrgentaContext> options) : base(optio
}

public DbSet<Backpack> Backpacks { get; set; }
public DbSet<BackpackItem> BackpackItem { get; set; }
public DbSet<BackpackItem> BackpackItems { get; set; }
public DbSet<Certification> Certifications { get; set; }
public DbSet<Group> Groups { get; set; }
public DbSet<GroupSafeLocation> GroupsSafeLocations { get; set; }
Expand Down
1 change: 1 addition & 0 deletions Src/DeUrgenta.Domain/Entities/Backpack.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace DeUrgenta.Domain.Entities
Expand Down
Loading