diff --git a/DOC/!!! TODO что бы не забыть - для после выходных b/DOC/!!! TODO что бы не забыть - для после выходных new file mode 100644 index 0000000..3a0af39 --- /dev/null +++ b/DOC/!!! TODO что бы не забыть - для после выходных @@ -0,0 +1,54 @@ +0. ПЕРЕДЕЛАТЬ ВСЁ НА НОВЫЙ ФОРМАТ!! + +ВЫНЕСТИ ЭТИ ТРИ ВЕЩИ В ОБЩИЙ ПАРСЕР + * [2] type - тип соощения + * [2] Sиbtype - субтип сообщения + * [2] version - версия формата соощения + +А ОСТАЛЬНОЕ В РЕАЛИЗАЦИЮ + + +ПЕРЕДЕЛАЕМ БД + +1. СДЕЛАЕМ ЛИНИЮ ТОЛЬКО ДЛЯ ТЕХ ТИПОВ КОМУ НАДО (ЛАЙКАМ И ОТВЕТАМ НЕ НАДО) + (НОМЕР СООБЩЕНИЯ В ЛИНИИ ХРАНИТЬ В БЛОКАХ ВРОДЕ И НЕ НАДО ТЕМ БОЛЕЕ ЕГО ПОТОМ ПЕРЕПРОВЕРЯТЬ ВСЁ РАВНО) + А МОЖЕТ И НАДО ТК КАК ПО ОДНОМУ БЛОКУ ( ИЛИ ЧАСТИ БЛОКОВ ПОНЯТЬ КАКАЯ ЭТО ЧАСТЬ ПЕРЕПИСКИ - ВЕДЬ ГЛОБАЛ НОМЕР ВООБЩЕ НЕ ПОКАЗАТЕЛЬ) + + В БД ПОМЕЧАТЬ ЧТО БЛОК ИЗ ЭТОЙ ЛИНИИ (ДЛЯ БЫСТРОГО ПОИСКА) + +А УНИКАЛЬНЫЙ НОМЕР ЛИНИИ ЭТО ПО СУТИ НОМЕР СООБЩЕНИЯ СОЗДАВШЕГО ЛИНИЮ КАНАЛ (НУ И ФОРМАТ СООБЩЕНИЯ НАЧАЛА ЛИНИИ - КАНАЛА) + + +2. МОЖЕТ СДЕЛАТЬ АВТОГЕНЕРАЦИЮ ПРОСТЫНЕЙ ДЛЯ ПАРСЕРОВ (И МОЖЕТ И ХЭНДЛЕРОВ(И ТАМ ЖЕ РЕКВЕСТ ПОДГРУЗИТЬСЯ)) + +3. СООТВЕТСТВЕННО удалить НАПИСАТЬ/ПЕРОВЕРИТЬ НОРМАЛЬНЫЙ SubscriptionsDAO - ТК СТАРЫЙ РАБОТАЛ НО НА ДРУГОМ ФОРМАТЕ И ТИПО КРИВО + +и дальше: +ЗДЕЛАТЬ ТРИ ЗАПРОСА: + СПИСОК КАНАЛОВ НА КОГО ПОДПИСАН И ПО СКОЛЬКО СООБЩЕНИЙ И ПОСЛДНИЙ ТЕКСТ + ДОДЕЛАТЬ И СВЯЗ ПОДПИСАН УЖЕ НЕ ТОЛЬКО НА ЧЕЛА НО И НА КАНАЛ. (И ПОЛУЧАЕТСЯ ЕСТЬ ОБЩИЙ КАНАЛЛ ПОСТОВ (НО НЕКОТОРЫЕ ПОСТЫ В НИКУДА- + А НЕКОТОРЫЕ ПОСТЫ ОБЪЯВЛЕНИЕ КАНАЛА + + СПИСОК СООБЩЕНИЙ В КАНАЛЕ + + ОПСИСАНИЕ ОДНОГО СОООБЩЕНИЯ (С ИСТОРИЕЙ ДО НАЧАЛА ВЕТКИ И СО ВСЕМИ ОТВЕТАМИ НА НЕГО) + + (НУ И В БУДУЩЕМ четвёртый ИСТОРИЮ сообщения ПО ЕДИТУ) + + +И ПОМЯТКА + ВСЕГДА СЧИТАЕМ ПО ПОСЛЕДНЕМУ БЛОКЧЕЙНУ ДОСТУПНОМУ ПОЛЬЗОВАТЕЛЮ + ХОТЯ ССЫЛКА ПО НОМЕРУ БЛОКЧЕЙНА КУДА ДОБАВИЛИ + + ЛАЙКИ И ОТВЕТЫ ПИШЕМ НА НОМЕР СООБЩЕНИЯ ЕДИТА + (СЧИТАЕМ ТРИГЕРОМ И НА ОРИГИНАЛЬНЫЙ СУМАРНОЕ И ОТДЕЛЬНО НА НЕГО, И НА КАЖДЫЙ ЕДИТ ОТДЕЛЬНО) + + ОТВЕТЫ ПОКАЗЫВАЕМ ВСЕ ВРАЗ + + + + + + + + diff --git a/shine-server-blockchain/src/main/java/blockchain/BchBlockEntry.java b/shine-server-blockchain/src/main/java/blockchain/BchBlockEntry.java index dbe629d..fff15f9 100644 --- a/shine-server-blockchain/src/main/java/blockchain/BchBlockEntry.java +++ b/shine-server-blockchain/src/main/java/blockchain/BchBlockEntry.java @@ -10,13 +10,13 @@ import java.util.Arrays; import java.util.Objects; /** - * BchBlockEntry_new — универсальный блок нового формата. + * старый формат * * RAW (BigEndian): * [4] recordSize (int) = размер RAW (включая этот заголовок), БЕЗ signature+hash * [4] recordNumber (int) глобальный номер блока * [8] timestamp (long) unix seconds - * [2] lineIndex (short) + [2] lineIndex (short) * [4] lineNumber (int) * [N] bodyBytes (body, начинается с [type][version]) * @@ -24,6 +24,56 @@ import java.util.Objects; * [64] signature64 (Ed25519) * [32] hash32 (SHA-256) */ + СМОТРИ файл : "!!! TODO что бы не забыть" +/** + * BchBlockEntry — универсальный блок нового формата. + * + * RAW (BigEndian): + * Неизменное заглавие + * [32] prevHash32 (SHA-256) ХЭЩ ПРИВЕДУЩЕГО + * [4] blockSize (int) = размер RAW (включая этот заголовок), БЕЗ signature + * [4] blockNumber (int) номер блока + * [8] timestamp (long) unix seconds + + * Само сообщение + * [2] type - тип соощения + * [2] Sиbtype - субтип сообщения + * [2] version - версия формата соощения + * [4] prevLineNumber НОМЕР ПРИВЕДУЩЕГО СООБЩЕНИЯ В ЛИНИИ - может быть а может и небыть в зависимости от типа сообщения + * [32] prevLineHash ХЭШ ПРИВЕДУЩЕГО СООБЩЕНИЯ В ЛИНИИ - может быть а может и небыть в зависимости от типа сообщения + * [N] bodyBytes (ОСТАЛЬНЫЕ БАЙТЫ]) + + * TAIL (НЕ входит в recordSize): + * [64] signature64 (Ed25519) + * И хэш в конце блока мы не храним, тк он будет в начале следующего блока. А для проверки блока оно не нужно тк мы каждый раз провеяем подпись . А она основана на хэше + * + + + * [32] hash32 (SHA-256) + */ + + + + + + + + + + + + + + + + + + + + + + + public final class BchBlockEntry { public static final int SIGNATURE_LEN = 64; diff --git a/shine-server-blockchain/src/main/java/blockchain/MsgSubType.java b/shine-server-blockchain/src/main/java/blockchain/MsgSubType.java index 0b3cbc4..7e1d9e6 100644 --- a/shine-server-blockchain/src/main/java/blockchain/MsgSubType.java +++ b/shine-server-blockchain/src/main/java/blockchain/MsgSubType.java @@ -1,7 +1,7 @@ -package blockchain; +package shine.db; /** - * shine.db.MsgSubType — единое место для ВСЕХ subType сообщений (msg_sub_type). + * MsgSubType — единое место для ВСЕХ subType сообщений (msg_sub_type). * * Правило: * - НИКАКИХ "магических чисел" subType по проекту. @@ -14,18 +14,23 @@ public final class MsgSubType { private MsgSubType() {} + /* ===================== HEADER (msg_type=0) ===================== */ + + /** HeaderBody: subType всегда 0 (compat). */ + public static final short HEADER_COMPAT = 0; + /* ===================== TEXT (msg_type=1) ===================== */ - /** Новое сообщение (начало ветки). */ + /** Новая публикация. */ public static final short TEXT_NEW = 1; - /** Ответ на сообщение (reply). */ + /** Ответ (reply). */ public static final short TEXT_REPLY = 2; /** Репост (repost). */ public static final short TEXT_REPOST = 3; - /** Редактирование (edit). ВАЖНО: серверное значение = 10. */ + /** Редактирование (edit). */ public static final short TEXT_EDIT = 10; /* ===================== REACTION (msg_type=2) ===================== */ @@ -34,6 +39,11 @@ public final class MsgSubType { public static final short REACTION_LIKE = 1; /* ===================== CONNECTION (msg_type=3) ===================== */ + /** + * Совпадает с ConnectionBody: + * SET: FRIEND=10, CONTACT=20, FOLLOW=30 + * UNSET: UNFRIEND=11, UNCONTACT=21, UNFOLLOW=31 + */ /** Добавить в друзья. */ public static final short CONNECTION_FRIEND = 10; @@ -41,15 +51,22 @@ public final class MsgSubType { /** Удалить из друзей. */ public static final short CONNECTION_UNFRIEND = 11; + /** Добавить в контакты. */ + public static final short CONNECTION_CONTACT = 20; + + /** Удалить из контактов. */ + public static final short CONNECTION_UNCONTACT = 21; + /** Подписаться (follow). */ - public static final short CONNECTION_FOLLOW = 20; + public static final short CONNECTION_FOLLOW = 30; /** Отписаться (unfollow). */ - public static final short CONNECTION_UNFOLLOW = 21; + public static final short CONNECTION_UNFOLLOW = 31; - /** Заблокировать. */ - public static final short CONNECTION_BLOCK = 30; + /* ===================== USER_PARAM (msg_type=4) ===================== */ - /** Разблокировать. */ - public static final short CONNECTION_UNBLOCK = 31; -} \ No newline at end of file + /** Параметр профиля key/value (обе строки). */ + public static final short USER_PARAM_TEXT_TEXT = 1; + + +} diff --git a/shine-server-db/src/main/java/shine/db/MsgSubType.java b/shine-server-db/src/main/java/shine/db/MsgSubType.java index fd12967..dec8936 100644 --- a/shine-server-db/src/main/java/shine/db/MsgSubType.java +++ b/shine-server-db/src/main/java/shine/db/MsgSubType.java @@ -1,31 +1,33 @@ package shine.db; /** - * shine.db.MsgSubType — единое место для ВСЕХ subType сообщений (msg_sub_type). + * MsgSubType — единое место для ВСЕХ subType сообщений (msg_sub_type). * - * Правило: - * - НИКАКИХ "магических чисел" subType по проекту. - * - В тестах, в body-классах и в SQL-триггерах используем только эти константы. - * - * Важно: - * - Значения менять после релиза нельзя (иначе сломается совместимость). + * ВАЖНО: + * - Значения должны совпадать с body-классами (TextBody/ReactionBody/ConnectionBody/UserParamBody/HeaderBody). + * - После релиза менять числа нельзя (иначе ломается совместимость данных). */ public final class MsgSubType { private MsgSubType() {} + /* ===================== HEADER (msg_type=0) ===================== */ + + /** HeaderBody: subType всегда 0 (compat). */ + public static final short HEADER_COMPAT = 0; + /* ===================== TEXT (msg_type=1) ===================== */ - /** Новое сообщение (начало ветки). */ + /** Новая публикация. */ public static final short TEXT_NEW = 1; - /** Ответ на сообщение (reply). */ + /** Ответ (reply). */ public static final short TEXT_REPLY = 2; /** Репост (repost). */ public static final short TEXT_REPOST = 3; - /** Редактирование (edit). ВАЖНО: серверное значение = 10. */ + /** Редактирование (edit). */ public static final short TEXT_EDIT = 10; /* ===================== REACTION (msg_type=2) ===================== */ @@ -34,6 +36,11 @@ public final class MsgSubType { public static final short REACTION_LIKE = 1; /* ===================== CONNECTION (msg_type=3) ===================== */ + /** + * Совпадает с ConnectionBody: + * SET: FRIEND=10, CONTACT=20, FOLLOW=30 + * UNSET: UNFRIEND=11, UNCONTACT=21, UNFOLLOW=31 + */ /** Добавить в друзья. */ public static final short CONNECTION_FRIEND = 10; @@ -41,15 +48,26 @@ public final class MsgSubType { /** Удалить из друзей. */ public static final short CONNECTION_UNFRIEND = 11; + /** Добавить в контакты. */ + public static final short CONNECTION_CONTACT = 20; + + /** Удалить из контактов. */ + public static final short CONNECTION_UNCONTACT = 21; + /** Подписаться (follow). */ public static final short CONNECTION_FOLLOW = 30; /** Отписаться (unfollow). */ public static final short CONNECTION_UNFOLLOW = 31; -// -// /** Заблокировать. */ -// public static final short CONNECTION_BLOCK = 30; -// -// /** Разблокировать. */ -// public static final short CONNECTION_UNBLOCK = 31; + + /* ===================== USER_PARAM (msg_type=4) ===================== */ + + /** Параметр профиля key/value (обе строки). */ + public static final short USER_PARAM_TEXT_TEXT = 1; + + /* ===================== РЕЗЕРВ НА БУДУЩЕЕ ===================== */ + // Если позже захочешь BLOCK/UNBLOCK — лучше добавить НОВЫЕ значения, + // не трогая 10/20/30 и 11/21/31 (например, 40/41). + // public static final short CONNECTION_BLOCK = 40; + // public static final short CONNECTION_UNBLOCK = 41; } \ No newline at end of file