public async Task <ActionResult <IEnumerable <ItemList> > > GetItemLists([FromQuery] GetListRequest request)
        {
            var itemList = await _context.ItemLists.Where(il => il.AccessCode == request.AccessCode).FirstAsync();

            itemList.Items = await _context.Items.Where(i => i.ListId == itemList.Id).ToListAsync();

            var items     = itemList.Items.Select(i => new { i.Id, i.Name, i.IsDone });
            var isStarred = false;

            try
            {
                var userId = UserIdGetter.getIdFromToken(Request, _context);
                isStarred = _context.UserLists.Where(ul => ul.ListId == itemList.Id)
                            .Select(ul => ul.UserId)
                            .Contains(userId);
            }
            catch {
            }
            if (itemList.IsPublic || itemList.ListPassword == request.ListPassword)
            {
                return(Ok(new SuccessfulGetListResponse()
                {
                    Name = itemList.Name,
                    AccessCode = itemList.AccessCode,
                    IsPublic = itemList.IsPublic,
                    Items = items,
                    IsStarred = isStarred
                }));
            }
            return(BadRequest("Wrong list access code or password"));
        }
        public async Task <ActionResult> GetStarred()
        {
            try
            {
                /*var tokenBearerEmail = TokenBearerValueGetter.getValue(Request, "email");
                 * var userId = await _context.Users.Where(u => u.Email == tokenBearerEmail)
                 *                               .Select(u => u.Id)
                 *                               .FirstAsync();*/
                var userId          = UserIdGetter.getIdFromToken(Request, _context);
                var starredListsIds = await _context.UserLists.Where(ul => ul.UserId == userId)
                                      .Select(ul => ul.ListId)
                                      .ToListAsync();

                var starredLists = await _context.ItemLists.Where(il => starredListsIds.Contains(il.Id))
                                   .Select(il => new { il.Name, il.AccessCode })
                                   .ToListAsync();

                return(Ok(starredLists));
            }
            catch {
                return(BadRequest("Nothing found"));
            }
        }
        public async Task <ActionResult> DeleteStarred(StarListRequest request)
        {
            var list = await _context.ItemLists.Where(il => il.AccessCode == request.AccessCode).FirstAsync();

            var listAccessCode = list.AccessCode;

            if (listAccessCode != request.AccessCode)
            {
                return(BadRequest("Invalid request: pass"));
            }
            try
            {
                var userId           = UserIdGetter.getIdFromToken(Request, _context);
                var userListToDelete = await _context.UserLists.Where(ul => ul.ListId == list.Id && ul.UserId == userId).FirstAsync();

                _context.UserLists.Remove(userListToDelete);
                await _context.SaveChangesAsync();

                return(Ok("Unstarred a list"));
            }
            catch {
                return(BadRequest("Not logged in"));
            }
        }