SHA256
02 01 25
Сделал что бы в базу писался msgSubType и поля to (to login, toBlockchainName и т.д.)
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package blockchain.body;
|
||||
|
||||
/**
|
||||
* BodyToFields — дополнительный интерфейс для body, которые "ссылаются" на цель (to-поля).
|
||||
*
|
||||
* Идея:
|
||||
* - Не все body имеют "to".
|
||||
* - Но для индексации и удобства запросов в БД мы хотим единообразно доставать:
|
||||
* toLogin, toBchName, toBlockGlobalNumber, toBlockHashe
|
||||
*
|
||||
* Важно:
|
||||
* - Все методы могут возвращать null.
|
||||
* - toLogin может отсутствовать в самом формате body (например, ReactionBody, TextBody reply/repost),
|
||||
* но в БД мы пишем toLogin "про запас".
|
||||
* Поэтому writer может:
|
||||
* - взять toLogin из body (если есть),
|
||||
* - либо попытаться вычислить из toBchName.
|
||||
*/
|
||||
public interface BodyHasTarget {
|
||||
|
||||
/** login цели (nullable). */
|
||||
String toLogin();
|
||||
|
||||
/** blockchainName цели (nullable). */
|
||||
String toBchName();
|
||||
|
||||
/** globalNumber цели (nullable). */
|
||||
Integer toBlockGlobalNumber();
|
||||
|
||||
/** hash цели в HEX(64) (nullable). */
|
||||
String toBlockHashe();
|
||||
}
|
||||
@@ -42,7 +42,7 @@ import java.util.Objects;
|
||||
* ЛИНИЯ:
|
||||
* - строго lineIndex=3 (выделяем отдельную линию под связи).
|
||||
*/
|
||||
public final class ConnectionBody implements BodyRecord {
|
||||
public final class ConnectionBody implements BodyRecord, BodyHasTarget {
|
||||
|
||||
public static final short TYPE = 3;
|
||||
public static final short VER = 1;
|
||||
@@ -279,4 +279,16 @@ public final class ConnectionBody implements BodyRecord {
|
||||
}
|
||||
return new String(out);
|
||||
}
|
||||
|
||||
/* ===================================================================== */
|
||||
/* ====================== BodyToFields контракт ========================= */
|
||||
/* ===================================================================== */
|
||||
|
||||
@Override public String toLogin() { return toLogin; }
|
||||
|
||||
@Override public String toBchName() { return toBlockchainName; }
|
||||
|
||||
@Override public Integer toBlockGlobalNumber() { return toBlockGlobalNumber; }
|
||||
|
||||
@Override public String toBlockHashe() { return toBlockHashHex(); }
|
||||
}
|
||||
@@ -31,7 +31,7 @@ import java.util.Objects;
|
||||
* - Здесь мы НЕ проверяем, существует ли цель реакции.
|
||||
* - Мы проверяем только корректность формата и целостность полей.
|
||||
*/
|
||||
public final class ReactionBody implements BodyRecord {
|
||||
public final class ReactionBody implements BodyRecord, BodyHasTarget {
|
||||
|
||||
public static final short TYPE = 2;
|
||||
public static final short VER = 1;
|
||||
@@ -172,11 +172,11 @@ public final class ReactionBody implements BodyRecord {
|
||||
hash цели (hex) : %s
|
||||
}
|
||||
""".formatted(
|
||||
st,
|
||||
toBlockchainName,
|
||||
toBlockGlobalNumber,
|
||||
toBlockHashHex()
|
||||
);
|
||||
st,
|
||||
toBlockchainName,
|
||||
toBlockGlobalNumber,
|
||||
toBlockHashHex()
|
||||
);
|
||||
}
|
||||
|
||||
public String toBlockHashHex() {
|
||||
@@ -189,4 +189,17 @@ public final class ReactionBody implements BodyRecord {
|
||||
}
|
||||
return new String(out);
|
||||
}
|
||||
|
||||
/* ===================================================================== */
|
||||
/* ====================== BodyToFields контракт ========================= */
|
||||
/* ===================================================================== */
|
||||
|
||||
/** В самом формате ReactionBody login цели не хранится => null. */
|
||||
@Override public String toLogin() { return null; }
|
||||
|
||||
@Override public String toBchName() { return toBlockchainName; }
|
||||
|
||||
@Override public Integer toBlockGlobalNumber() { return toBlockGlobalNumber; }
|
||||
|
||||
@Override public String toBlockHashe() { return toBlockHashHex(); }
|
||||
}
|
||||
@@ -41,7 +41,7 @@ import java.util.Objects;
|
||||
* - для subType=NEW запрещены поля ссылки и запрещены любые “лишние байты” в хвосте
|
||||
* - для subType=REPLY/REPOST хвост обязан быть ровно по формату и без мусора в конце
|
||||
*/
|
||||
public final class TextBody implements BodyRecord {
|
||||
public final class TextBody implements BodyRecord, BodyHasTarget {
|
||||
|
||||
public static final short TYPE = 1;
|
||||
public static final short VER = 1;
|
||||
@@ -219,8 +219,6 @@ public final class TextBody implements BodyRecord {
|
||||
|
||||
@Override public short type() { return TYPE; }
|
||||
@Override public short version() { return VER; }
|
||||
|
||||
/** ✅ ВАЖНО: теперь BodyRecord требует subType() */
|
||||
@Override public short subType() { return subType; }
|
||||
|
||||
@Override
|
||||
@@ -363,4 +361,26 @@ public final class TextBody implements BodyRecord {
|
||||
}
|
||||
return new String(out);
|
||||
}
|
||||
|
||||
/* ===================================================================== */
|
||||
/* ====================== BodyToFields контракт ========================= */
|
||||
/* ===================================================================== */
|
||||
|
||||
/** В формате TextBody login цели не хранится => null. */
|
||||
@Override public String toLogin() { return null; }
|
||||
|
||||
@Override
|
||||
public String toBchName() {
|
||||
return (subType == SUB_REPLY || subType == SUB_REPOST) ? toBlockchainName : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer toBlockGlobalNumber() {
|
||||
return (subType == SUB_REPLY || subType == SUB_REPOST) ? toBlockGlobalNumber : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toBlockHashe() {
|
||||
return (subType == SUB_REPLY || subType == SUB_REPOST) ? toBlockHashHex() : null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user