Ejemplo n.º 1
0
        private static string /*letter id*/ CreateLetterInternal(string board_id, string discussion_id,
                                                                 string creator, string words, Subtype subtype, string delta_flags)
        {
            string partition_key = SandId.CombineId(board_id, discussion_id);

            if (NextIdStore.GetLastId(Warehouse.DiscussionLoadTable, partition_key) >= HeartsConfiguration.MAX_NUM_OF_LETTERS_IN_A_DISCUSSION)
            {
                Util.ThrowBadRequestException("留言數超過上限(" + HeartsConfiguration.MAX_NUM_OF_LETTERS_IN_A_DISCUSSION + ")則。");
            }

            int    next_id   = NextIdStore.Next(Warehouse.DiscussionLoadTable, partition_key);                  // null reference exception for nonexistent board id.
            string letter_id = SandId.MakeLetterId(next_id);
            // if exception is thrown after getting id, the id is lost.

            DynamicTableEntity entity = new DynamicTableEntity(partition_key, letter_id);

            LetterConverter.CreateLetterEntity(entity, creator, words, subtype, delta_flags, board_id, discussion_id);
            //
            Warehouse.DiscussionLoadPond.Get(board_id, discussion_id).AddLetter(entity);
            Warehouse.DiscussionSummaryPond.Get(board_id, discussion_id).AddLetter(entity);

            Warehouse.DiscussionLoadTable.Execute(TableOperation.Insert(entity));
            //
            return(letter_id);
        }
Ejemplo n.º 2
0
        public static void GetLastLetters(string board_id, string discussion_id, int cnt, Action <DynamicTableEntity> act)
        {
            string partition_key = SandId.CombineId(board_id, discussion_id);

            int last_id = NextIdStore.GetLastId(Warehouse.DiscussionLoadTable, partition_key);

            if (last_id != -1)
            {
                Warehouse.DiscussionLoadTable.EnumerateRowRange(partition_key, SandId.LETTER_ID_PREFIX, last_id - cnt + 1, cnt, act);
            }
        }
Ejemplo n.º 3
0
        public static void GetLastDiscussions(string board_id, int cnt, Action <DynamicTableEntity> act)
        {
            string partition_key = board_id;

            int last_id = NextIdStore.GetLastId(Warehouse.DiscussionListTable, partition_key);

            if (last_id != -1)
            {
                Warehouse.DiscussionListTable.EnumerateRowRange(partition_key, SandId.DISCUSSION_ID_PREFIX, last_id - cnt + 1, cnt, act);
            }
        }