docs(chat): define owner editor conflict, history, and patch contracts
This commit is contained in:
1 parent
e3ea2ef78f
commit
98741e47d8
1 file changed
+13
-6
+13
-6
@@ -337,26 +337,33 @@ void chat_core_set_my_avatar_trampoline(void* arg);
|
||||
|
||||
struct chat_member_tags;
|
||||
|
||||
// Загрузить текущие adm_tags мембера в память. Возвращает NULL если мембера нет.
|
||||
/* Загрузить проверенный owner-снимок полного участника:NULL при отсутствии/placeholder/SQL/подписи/формате.
|
||||
* Объект принадлежит caller до free,используется в uasync и освобождается до остановки chat-сервиса. */
|
||||
struct chat_member_tags* chat_member_tags_load(struct UTUN_INSTANCE* inst, const char* ch_id, uint64_t node_id);
|
||||
|
||||
// Установить ключ. val=NULL → удалить ключ. ver — особый, автоинкремент при commit.
|
||||
/* Изменить желаемое поле:0/-1;отказ не меняет editor. val=NULL удаляет поле;admin/moder принимают yes/no.
|
||||
* Пустой ключ/ver запрещены,версию выбирает commit;место для ver резервируется в лимите16 ключей. */
|
||||
int chat_member_tags_set(struct chat_member_tags* t, const char* key, const char* val);
|
||||
|
||||
// Получить значение ключа. Возвращает NULL если ключ не найден.
|
||||
const char* chat_member_tags_get(struct chat_member_tags* t, const char* key);
|
||||
|
||||
// Заменить все теги данными из JSON-строки (плоский, строковые значения).
|
||||
/* Заменить желаемые теги:0/-1,при отказе editor не меняется. Весь объект<=8192 байта,уникальные
|
||||
* непустые ключи,только строки;admin/moder yes/no. Необязательный ver обязан совпадать с исходным снимком. */
|
||||
int chat_member_tags_replace(struct chat_member_tags* t, const char* json);
|
||||
|
||||
/* Сохранить: сериализовать в JSON, инкрементировать ver, подписать канальным Ed25519,
|
||||
* записать через member_sync_put() → синхронизируется всем. */
|
||||
/* Собственный BEGIN IMMEDIATE проверяет исходный owner-снимок и фиксирует новую подпись/версию/Merkle.
|
||||
* 0 — committed/no-op,-2 — конфликт с изменившимся owner-блоком,-1 — прочий отказ;чужая транзакция запрещена.
|
||||
* Отказ сохраняет editor/БД,успех обновляет editor для следующей правки. No-op сохраняет версию/подпись.
|
||||
* Версия1..INT_MAX;admin/moder сохраняют историю,отключение дописывает d<seconds>. Приватный ключ очищается.
|
||||
* Уведомления после commit без cursor;при неудачном rollback запрашивается stop/закрытие БД владельцем. */
|
||||
int chat_member_tags_commit(struct UTUN_INSTANCE* inst, struct chat_member_tags* t);
|
||||
|
||||
// Освободить без сохранения.
|
||||
void chat_member_tags_free(struct chat_member_tags* t);
|
||||
|
||||
// Трамплин для gui_bridge: arg = struct chat_member_tags_req* (доверенная память).
|
||||
/* Трамплин для gui_bridge:владеет req/u_free. json — частичный объект желаемых полей,неуказанные сохраняются;
|
||||
* необязательный ver проверяет снимок формы. Пустая строка — no-op;ошибки логируются без commit. */
|
||||
struct chat_member_tags_req {
|
||||
struct UTUN_INSTANCE* inst;
|
||||
char ch_id[64];
|
||||
|
||||
Reference in new issue
Block a user