private async Task <Unit> TryToHandle(LeaveGroupCommand request)
        {
            User user = await _context.Users.FindAsync(request.UserId) ?? throw new InvalidCommandException($"El usuario con id {request.UserId} no existe");

            Group group = await _context.Groups.Include(group1 => group1.Admin).FirstOrDefaultAsync(g => g.Id == request.GroupId) ?? throw new InvalidCommandException($"El grupo con id {request.GroupId} no existe");

            if (group.Admin.Id == request.UserId)
            {
                throw new InvalidCommandException("El administrador no puede irse del grupo");
            }
            Domain.Membership membership = await _context.Memberships.FirstOrDefaultAsync(m => m.Group.Id == group.Id && m.User.Id == user.Id) ?? throw new InvalidCommandException($"Usuario no es parte del grupo");

            group.Memberships.Remove(membership);
            _context.Memberships.Remove(membership);

            var toDelete = _context.Participants.Where(p => p.Purchase.Group.Id == group.Id && p.UserId == user.Id);

            _context.Participants.RemoveRange(toDelete);

            var cantLeave = _context.Purchases.Any(p => p.Purchaser.Id == user.Id && p.Group.Id == group.Id);

            if (cantLeave)
            {
                throw new InvalidCommandException("No te podes ir del grupo si compraste algo");
            }

            await _context.SaveChangesAsync();

            return(Unit.Value);
        }
Exemple #2
0
        private async Task <Domain.Membership> GetMemberships(int userId, Group group)
        {
            User user = await _context.Users.FindAsync(userId) ?? throw new InvalidCommandException($"Miembro del grupo con id {userId} no existe");

            Domain.Membership membership = await _context.Memberships.FirstOrDefaultAsync(mem => mem.UserId == user.Id && group.Id == mem.GroupId);

            return(membership
                   ?? new Domain.Membership()
            {
                User = user,
                UserId = user.Id,
                Group = group,
                GroupId = group.Id
            });
        }