diff --git a/Docs/Modeli podataka I perzistencije - Faza 2.docx b/Docs/Modeli podataka I perzistencije - Faza 2.docx new file mode 100644 index 0000000..c29dcfa Binary files /dev/null and b/Docs/Modeli podataka I perzistencije - Faza 2.docx differ diff --git a/dotnet/AipsCore/Application/Abstract/UserContext/IUserContext.cs b/dotnet/AipsCore/Application/Abstract/UserContext/IUserContext.cs new file mode 100644 index 0000000..3366347 --- /dev/null +++ b/dotnet/AipsCore/Application/Abstract/UserContext/IUserContext.cs @@ -0,0 +1,8 @@ +using AipsCore.Domain.Models.User.ValueObjects; + +namespace AipsCore.Application.Abstract.UserContext; + +public interface IUserContext +{ + UserId GetCurrentUserId(); +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommand.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommand.cs new file mode 100644 index 0000000..b47059f --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommand.cs @@ -0,0 +1,5 @@ +using AipsCore.Application.Abstract.Command; + +namespace AipsCore.Application.Models.Whiteboard.Command.BanUserFromWhiteboard; + +public record BanUserFromWhiteboardCommand(string UserId, string WhiteboardId) : ICommand; \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommandErrors.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommandErrors.cs new file mode 100644 index 0000000..303a529 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommandErrors.cs @@ -0,0 +1,18 @@ +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.ValueObjects; + +namespace AipsCore.Application.Models.Whiteboard.Command.BanUserFromWhiteboard; + +public static class BanUserFromWhiteboardCommandErrors +{ + public static ValidationError WhiteboardMembershipNotFound(WhiteboardId whiteboardId, UserId userId) + => new ValidationError( + Code: "whiteboard_membership_not_found", + Message: $"User with id '{userId.IdValue}' is not a member of whiteboard with id '{whiteboardId.IdValue}'"); + + public static ValidationError WhiteboardNotFound(WhiteboardId whiteboardId) + => new ValidationError( + Code: "whiteboard_not_found", + Message: $"Whiteboard with id '{whiteboardId.IdValue}' not found."); +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommandHandler.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommandHandler.cs new file mode 100644 index 0000000..efcc9a9 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/BanUserFromWhiteboard/BanUserFromWhiteboardCommandHandler.cs @@ -0,0 +1,55 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Application.Abstract.UserContext; +using AipsCore.Domain.Abstract; +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.External; +using AipsCore.Domain.Models.Whiteboard.ValueObjects; +using AipsCore.Domain.Models.WhiteboardMembership.External; + +namespace AipsCore.Application.Models.Whiteboard.Command.BanUserFromWhiteboard; + +public class BanUserFromWhiteboardCommandHandler : ICommandHandler +{ + private readonly IWhiteboardRepository _whiteboardRepository; + private readonly IWhiteboardMembershipRepository _whiteboardMembershipRepository; + private readonly IUserContext _userContext; + private readonly IUnitOfWork _unitOfWork; + + public BanUserFromWhiteboardCommandHandler( + IWhiteboardRepository whiteboardRepository, + IWhiteboardMembershipRepository whiteboardMembershipRepository, + IUserContext userContext, + IUnitOfWork unitOfWork) + { + _whiteboardMembershipRepository = whiteboardMembershipRepository; + _userContext = userContext; + _unitOfWork = unitOfWork; + _whiteboardRepository = whiteboardRepository; + } + + public async Task Handle(BanUserFromWhiteboardCommand command, CancellationToken cancellationToken = default) + { + var whiteboardId = new WhiteboardId(command.WhiteboardId); + var userId = new UserId(command.UserId); + + var whiteboard = await _whiteboardRepository.GetByIdAsync(whiteboardId, cancellationToken); + + if (whiteboard is null) + { + throw new ValidationException(BanUserFromWhiteboardCommandErrors.WhiteboardNotFound(whiteboardId)); + } + + var membership = await _whiteboardMembershipRepository.GetByWhiteboardAndUserAsync(whiteboardId, userId, cancellationToken); + + if (membership is null) + { + throw new ValidationException(BanUserFromWhiteboardCommandErrors.WhiteboardMembershipNotFound(whiteboardId, userId)); + } + + whiteboard.BanUser(_userContext.GetCurrentUserId(), membership); + + await _whiteboardMembershipRepository.SaveAsync(membership, cancellationToken); + await _unitOfWork.SaveChangesAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommand.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommand.cs new file mode 100644 index 0000000..647f83a --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommand.cs @@ -0,0 +1,5 @@ +using AipsCore.Application.Abstract.Command; + +namespace AipsCore.Application.Models.Whiteboard.Command.KickUserFromWhiteboard; + +public record KickUserFromWhiteboardCommand(string UserId, string WhiteboardId) : ICommand; \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommandErrors.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommandErrors.cs new file mode 100644 index 0000000..dbc5489 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommandErrors.cs @@ -0,0 +1,18 @@ +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.ValueObjects; + +namespace AipsCore.Application.Models.Whiteboard.Command.KickUserFromWhiteboard; + +public static class KickUserFromWhiteboardCommandErrors +{ + public static ValidationError WhiteboardMembershipNotFound(WhiteboardId whiteboardId, UserId userId) + => new ValidationError( + Code: "whiteboard_membership_not_found", + Message: $"User with id '{userId}' is not a member of whiteboard with id '{whiteboardId}'"); + + public static ValidationError WhiteboardNotFound(WhiteboardId whiteboardId) + => new ValidationError( + Code: "whiteboard_not_found", + Message: $"Whiteboard with id '{whiteboardId}' not found."); +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommandHandler.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommandHandler.cs new file mode 100644 index 0000000..b30b825 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/KickUserFromWhiteboard/KickUserFromWhiteboardCommandHandler.cs @@ -0,0 +1,55 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Application.Abstract.UserContext; +using AipsCore.Domain.Abstract; +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.External; +using AipsCore.Domain.Models.Whiteboard.ValueObjects; +using AipsCore.Domain.Models.WhiteboardMembership.External; + +namespace AipsCore.Application.Models.Whiteboard.Command.KickUserFromWhiteboard; + +public class KickUserFromWhiteboardCommandHandler : ICommandHandler +{ + private readonly IWhiteboardRepository _whiteboardRepository; + private readonly IWhiteboardMembershipRepository _whiteboardMembershipRepository; + private readonly IUserContext _userContext; + private readonly IUnitOfWork _unitOfWork; + + public KickUserFromWhiteboardCommandHandler( + IWhiteboardRepository whiteboardRepository, + IWhiteboardMembershipRepository whiteboardMembershipRepository, + IUserContext userContext, + IUnitOfWork unitOfWork) + { + _whiteboardMembershipRepository = whiteboardMembershipRepository; + _userContext = userContext; + _unitOfWork = unitOfWork; + _whiteboardRepository = whiteboardRepository; + } + + public async Task Handle(KickUserFromWhiteboardCommand command, CancellationToken cancellationToken = default) + { + var whiteboardId = new WhiteboardId(command.WhiteboardId); + var userId = new UserId(command.UserId); + + var whiteboard = await _whiteboardRepository.GetByIdAsync(whiteboardId, cancellationToken); + + if (whiteboard is null) + { + throw new ValidationException(KickUserFromWhiteboardCommandErrors.WhiteboardNotFound(whiteboardId)); + } + + var membership = await _whiteboardMembershipRepository.GetByWhiteboardAndUserAsync(whiteboardId, userId, cancellationToken); + + if (membership is null) + { + throw new ValidationException(KickUserFromWhiteboardCommandErrors.WhiteboardMembershipNotFound(whiteboardId, userId)); + } + + whiteboard.KickUser(_userContext.GetCurrentUserId(), membership); + + await _whiteboardMembershipRepository.SaveAsync(membership, cancellationToken); + await _unitOfWork.SaveChangesAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommand.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommand.cs new file mode 100644 index 0000000..f0a1be2 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommand.cs @@ -0,0 +1,5 @@ +using AipsCore.Application.Abstract.Command; + +namespace AipsCore.Application.Models.Whiteboard.Command.UnbanUserFromWhiteboard; + +public record UnbanUserFromWhiteboardCommand(string UserId, string WhiteboardId) : ICommand; \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommandErrors.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommandErrors.cs new file mode 100644 index 0000000..f04e3d9 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommandErrors.cs @@ -0,0 +1,18 @@ +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.ValueObjects; + +namespace AipsCore.Application.Models.Whiteboard.Command.UnbanUserFromWhiteboard; + +public static class UnbanUserFromWhiteboardCommandErrors +{ + public static ValidationError WhiteboardMembershipNotFound(WhiteboardId whiteboardId, UserId userId) + => new ValidationError( + Code: "whiteboard_membership_not_found", + Message: $"User with id '{userId}' is not a member of whiteboard with id '{whiteboardId}'"); + + public static ValidationError WhiteboardNotFound(WhiteboardId whiteboardId) + => new ValidationError( + Code: "whiteboard_not_found", + Message: $"Whiteboard with id '{whiteboardId}' not found."); +} \ No newline at end of file diff --git a/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommandHandler.cs b/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommandHandler.cs new file mode 100644 index 0000000..326a5b3 --- /dev/null +++ b/dotnet/AipsCore/Application/Models/Whiteboard/Command/UnbanUserFromWhiteboard/UnbanUserFromWhiteboardCommandHandler.cs @@ -0,0 +1,55 @@ +using AipsCore.Application.Abstract.Command; +using AipsCore.Application.Abstract.UserContext; +using AipsCore.Domain.Abstract; +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.External; +using AipsCore.Domain.Models.Whiteboard.ValueObjects; +using AipsCore.Domain.Models.WhiteboardMembership.External; + +namespace AipsCore.Application.Models.Whiteboard.Command.UnbanUserFromWhiteboard; + +public class UnbanUserFromWhiteboardCommandHandler : ICommandHandler +{ + private readonly IWhiteboardRepository _whiteboardRepository; + private readonly IWhiteboardMembershipRepository _whiteboardMembershipRepository; + private readonly IUserContext _userContext; + private readonly IUnitOfWork _unitOfWork; + + public UnbanUserFromWhiteboardCommandHandler( + IWhiteboardRepository whiteboardRepository, + IWhiteboardMembershipRepository whiteboardMembershipRepository, + IUserContext userContext, + IUnitOfWork unitOfWork) + { + _whiteboardRepository = whiteboardRepository; + _whiteboardMembershipRepository = whiteboardMembershipRepository; + _userContext = userContext; + _unitOfWork = unitOfWork; + } + + public async Task Handle(UnbanUserFromWhiteboardCommand command, CancellationToken cancellationToken = default) + { + var whiteboardId = new WhiteboardId(command.WhiteboardId); + var userId = new UserId(command.UserId); + + var whiteboard = await _whiteboardRepository.GetByIdAsync(whiteboardId, cancellationToken); + + if (whiteboard is null) + { + throw new ValidationException(UnbanUserFromWhiteboardCommandErrors.WhiteboardNotFound(whiteboardId)); + } + + var membership = await _whiteboardMembershipRepository.GetByWhiteboardAndUserAsync(whiteboardId, userId, cancellationToken); + + if (membership is null) + { + throw new ValidationException(UnbanUserFromWhiteboardCommandErrors.WhiteboardMembershipNotFound(whiteboardId, userId)); + } + + whiteboard.UnbanUser(_userContext.GetCurrentUserId(), membership); + + await _whiteboardMembershipRepository.SaveAsync(membership, cancellationToken); + await _unitOfWork.SaveChangesAsync(cancellationToken); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Common/ValueObjects/DomainId.cs b/dotnet/AipsCore/Domain/Common/ValueObjects/DomainId.cs index 9f60074..c638377 100644 --- a/dotnet/AipsCore/Domain/Common/ValueObjects/DomainId.cs +++ b/dotnet/AipsCore/Domain/Common/ValueObjects/DomainId.cs @@ -22,9 +22,4 @@ public record DomainId : AbstractValueObject new MinLengthRule(IdValue, 5) ]; } - - public override string ToString() - { - return IdValue; - } } \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Models/Whiteboard/Validation/WhiteboardErrors.cs b/dotnet/AipsCore/Domain/Models/Whiteboard/Validation/WhiteboardErrors.cs index b06bafc..262e72b 100644 --- a/dotnet/AipsCore/Domain/Models/Whiteboard/Validation/WhiteboardErrors.cs +++ b/dotnet/AipsCore/Domain/Models/Whiteboard/Validation/WhiteboardErrors.cs @@ -14,5 +14,28 @@ public class WhiteboardErrors : AbstractErrors return CreateValidationError(code, message); } + + public static ValidationError OnlyOwnerCanBanOtherUsers(UserId currentUserId) + { + string code = "only_owner_can_ban_other_users"; + string message = $"Only owner of whiteboard can ban other users. Current user id: '{currentUserId}' is not the owner."; + return CreateValidationError(code, message); + } + + public static ValidationError OnlyOwnerCanUnbanOtherUsers(UserId currentUserId) + { + string code = "only_owner_can_unban_other_users"; + string message = $"Only owner of whiteboard can unban other users. Current user id: '{currentUserId}' is not the owner."; + + return CreateValidationError(code, message); + } + + public static ValidationError OnlyOwnerCanKickOtherUsers(UserId currentUserId) + { + string code = "only_owner_can_unban_other_users"; + string message = $"Only owner of whiteboard can kick other users. Current user id: '{currentUserId}' is not the owner."; + + return CreateValidationError(code, message); + } } \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.BanUser.cs b/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.BanUser.cs new file mode 100644 index 0000000..57d5dfb --- /dev/null +++ b/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.BanUser.cs @@ -0,0 +1,18 @@ +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.Validation; + +namespace AipsCore.Domain.Models.Whiteboard; + +public partial class Whiteboard +{ + public void BanUser(UserId currentUserId, WhiteboardMembership.WhiteboardMembership whiteboardMembership) + { + if (WhiteboardOwnerId != currentUserId) + { + throw new ValidationException(WhiteboardErrors.OnlyOwnerCanBanOtherUsers(currentUserId)); + } + + whiteboardMembership.Ban(); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.KickUser.cs b/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.KickUser.cs new file mode 100644 index 0000000..e9d4579 --- /dev/null +++ b/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.KickUser.cs @@ -0,0 +1,18 @@ +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.Validation; + +namespace AipsCore.Domain.Models.Whiteboard; + +public partial class Whiteboard +{ + public void KickUser(UserId currentUserId, WhiteboardMembership.WhiteboardMembership whiteboardMembership) + { + if (WhiteboardOwnerId != currentUserId) + { + throw new ValidationException(WhiteboardErrors.OnlyOwnerCanKickOtherUsers(currentUserId)); + } + + whiteboardMembership.Kick(); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.UnbanUser.cs b/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.UnbanUser.cs new file mode 100644 index 0000000..dabc832 --- /dev/null +++ b/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.UnbanUser.cs @@ -0,0 +1,18 @@ +using AipsCore.Domain.Common.Validation; +using AipsCore.Domain.Models.User.ValueObjects; +using AipsCore.Domain.Models.Whiteboard.Validation; + +namespace AipsCore.Domain.Models.Whiteboard; + +public partial class Whiteboard +{ + public void UnbanUser(UserId currentUserId, WhiteboardMembership.WhiteboardMembership whiteboardMembership) + { + if (WhiteboardOwnerId != currentUserId) + { + throw new ValidationException(WhiteboardErrors.OnlyOwnerCanUnbanOtherUsers(currentUserId)); + } + + whiteboardMembership.Unban(); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Ban.cs b/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Ban.cs new file mode 100644 index 0000000..6befd88 --- /dev/null +++ b/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Ban.cs @@ -0,0 +1,11 @@ +using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects; + +namespace AipsCore.Domain.Models.WhiteboardMembership; + +public partial class WhiteboardMembership +{ + public void Ban() + { + IsBanned = new WhiteboardMembershipIsBanned(true); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Kick.cs b/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Kick.cs new file mode 100644 index 0000000..92acf4a --- /dev/null +++ b/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Kick.cs @@ -0,0 +1,11 @@ +using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects; + +namespace AipsCore.Domain.Models.WhiteboardMembership; + +public partial class WhiteboardMembership +{ + public void Kick() + { + CanJoin = new WhiteboardMembershipCanJoin(false); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Unban.cs b/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Unban.cs new file mode 100644 index 0000000..9072889 --- /dev/null +++ b/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.Unban.cs @@ -0,0 +1,11 @@ +using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects; + +namespace AipsCore.Domain.Models.WhiteboardMembership; + +public partial class WhiteboardMembership +{ + public void Unban() + { + IsBanned = new WhiteboardMembershipIsBanned(false); + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.cs b/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.cs index 9cc612b..bfad6da 100644 --- a/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.cs +++ b/dotnet/AipsCore/Domain/Models/WhiteboardMembership/WhiteboardMembership.cs @@ -5,7 +5,7 @@ using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects; namespace AipsCore.Domain.Models.WhiteboardMembership; -public class WhiteboardMembership : DomainModel +public partial class WhiteboardMembership : DomainModel { public WhiteboardId WhiteboardId { get; private set; } public UserId UserId { get; private set; } diff --git a/dotnet/AipsCore/Infrastructure/DI/AipsRegistrationExtensions.cs b/dotnet/AipsCore/Infrastructure/DI/AipsRegistrationExtensions.cs index 7c7e515..a213b5d 100644 --- a/dotnet/AipsCore/Infrastructure/DI/AipsRegistrationExtensions.cs +++ b/dotnet/AipsCore/Infrastructure/DI/AipsRegistrationExtensions.cs @@ -1,8 +1,5 @@ using AipsCore.Application.Abstract; -using AipsCore.Application.Abstract.Command; using AipsCore.Application.Common.Dispatcher; -using AipsCore.Application.Models.User.Command.CreateUser; -using AipsCore.Domain.Models.User.ValueObjects; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -16,6 +13,8 @@ public static class AipsRegistrationExtensions services.AddTransient(); services.AddPersistence(configuration); + + services.AddUserContext(); return services; } diff --git a/dotnet/AipsCore/Infrastructure/DI/UserContextRegistrationExtension.cs b/dotnet/AipsCore/Infrastructure/DI/UserContextRegistrationExtension.cs new file mode 100644 index 0000000..7513690 --- /dev/null +++ b/dotnet/AipsCore/Infrastructure/DI/UserContextRegistrationExtension.cs @@ -0,0 +1,14 @@ +using AipsCore.Application.Abstract.UserContext; +using Microsoft.Extensions.DependencyInjection; + +namespace AipsCore.Infrastructure.DI; + +public static class UserContextRegistrationExtension +{ + public static IServiceCollection AddUserContext(this IServiceCollection services) + { + services.AddTransient(); + + return services; + } +} \ No newline at end of file diff --git a/dotnet/AipsCore/Infrastructure/Persistence/WhiteboardMembership/WhiteboardMembershipRepository.cs b/dotnet/AipsCore/Infrastructure/Persistence/WhiteboardMembership/WhiteboardMembershipRepository.cs index 58c7952..52bd6ba 100644 --- a/dotnet/AipsCore/Infrastructure/Persistence/WhiteboardMembership/WhiteboardMembershipRepository.cs +++ b/dotnet/AipsCore/Infrastructure/Persistence/WhiteboardMembership/WhiteboardMembershipRepository.cs @@ -57,8 +57,8 @@ public class WhiteboardMembershipRepository { var whiteboardMembership = await Context.WhiteboardMemberships .FirstOrDefaultAsync((entity) => - entity.WhiteboardId.ToString() == whiteboardId.ToString() && - entity.UserId.ToString() == userId.ToString(), + entity.WhiteboardId.ToString() == whiteboardId.IdValue && + entity.UserId.ToString() == userId.IdValue, cancellationToken); if (whiteboardMembership is null) return null; diff --git a/dotnet/AipsCore/Infrastructure/UserContext.cs b/dotnet/AipsCore/Infrastructure/UserContext.cs new file mode 100644 index 0000000..41bc36e --- /dev/null +++ b/dotnet/AipsCore/Infrastructure/UserContext.cs @@ -0,0 +1,14 @@ +using AipsCore.Application.Abstract.UserContext; +using AipsCore.Domain.Models.User.ValueObjects; + +namespace AipsCore.Infrastructure; + +public class UserContext : IUserContext +{ + public UserId GetCurrentUserId() + { + return new UserId(new Guid("52a1810c-802f-48b0-a74c-7b517807e392").ToString()); + } +} + +//Ovo je samo trenutno resenje \ No newline at end of file diff --git a/dotnet/AipsWebApi/Controllers/WhiteboardController.cs b/dotnet/AipsWebApi/Controllers/WhiteboardController.cs index 8ab1888..9989266 100644 --- a/dotnet/AipsWebApi/Controllers/WhiteboardController.cs +++ b/dotnet/AipsWebApi/Controllers/WhiteboardController.cs @@ -1,6 +1,9 @@ using AipsCore.Application.Abstract; using AipsCore.Application.Models.Whiteboard.Command.AddUserToWhiteboard; +using AipsCore.Application.Models.Whiteboard.Command.BanUserFromWhiteboard; using AipsCore.Application.Models.Whiteboard.Command.CreateWhiteboard; +using AipsCore.Application.Models.Whiteboard.Command.KickUserFromWhiteboard; +using AipsCore.Application.Models.Whiteboard.Command.UnbanUserFromWhiteboard; using AipsCore.Application.Models.Whiteboard.Query.GetRecentWhiteboards; using AipsCore.Domain.Models.Whiteboard; using Microsoft.AspNetCore.Mvc; @@ -40,4 +43,25 @@ public class WhiteboardController : ControllerBase return Ok(result); } + + [HttpPut("banUser")] + public async Task BanUserFromWhiteboard(BanUserFromWhiteboardCommand command, IDispatcher dispatcher, CancellationToken cancellationToken) + { + await dispatcher.Execute(command, cancellationToken); + return Ok(); + } + + [HttpPut("unbanUser")] + public async Task UnbanUserFromWhiteboard(UnbanUserFromWhiteboardCommand command, IDispatcher dispatcher, CancellationToken cancellationToken) + { + await dispatcher.Execute(command, cancellationToken); + return Ok(); + } + + [HttpPut("kickUser")] + public async Task KickUserFromWhiteboard(KickUserFromWhiteboardCommand command, IDispatcher dispatcher, CancellationToken cancellationToken) + { + await dispatcher.Execute(command, cancellationToken); + return Ok(); + } } \ No newline at end of file