Автор и последний редактор: профили из довідника CRM, аватары как в CRM
This commit is contained in:
12
README.md
12
README.md
@@ -46,9 +46,19 @@
|
||||
```ts
|
||||
type Node = { id, parentId: string|null, kind: "folder"|"page", title, version: number,
|
||||
createdAt, updatedAt, updatedBy /* uid */, updatedByName };
|
||||
type Page = Node & { markdown: string, path: { id, kind, title }[] /* папки от корня */ };
|
||||
type Page = Node & { markdown: string, path: { id, kind, title }[] /* папки от корня */,
|
||||
author: Person | null /* кто создал (createdAt) */,
|
||||
lastEditor: Person | null /* кто последний правил (updatedAt) */ };
|
||||
type Person = { id /* uid Supabase */, name: string|null, email: string|null,
|
||||
avatarUrl: string|null /* публичный https-URL или data:image */, color: string|null /* кружок с инициалами */ };
|
||||
```
|
||||
|
||||
### Автор
|
||||
|
||||
У каждой страницы и папки хранятся автор (`created_by` = uid из проверенного токена, `createdAt`) и последний редактор (`updated_by`, `updatedAt`); перенос и переименование тоже считаются правкой. Агенты (бот «Лана» и т. п.) — такие же авторы, как люди. Поля `author` и `lastEditor` есть в ответах `GET /api/pages/{id}`, `GET /api/nodes/{id}` и в ответах на создание и сохранение; в `/api/tree` их нет. Если автор неизвестен, поле `null`; если uid известен, а профиля нет, `name`/`avatarUrl` будут `null`.
|
||||
|
||||
Профиль берётся там же, где его берёт CRM: довідник виконавців в `app_config` (`id = 'main'`, `data.assignees[]`: `{ id, name, email, uid, avatar, color }`), запрос с токеном пользователя (RLS), сопоставление по `uid`, затем по email. Обновляется не чаще раза в 10 минут на пользователя и хранится в таблице `users` вики. Аватар — URL из `avatar`: CRM кладёт фото в публичный бакет Storage `logos` (`avatars/<id записи>`) и сохраняет `getPublicUrl`, поэтому картинка грузится без токена. Принимаются только `https://` и `data:image/`. Нет фото — кружок с инициалами на цвете `color` (свой цвет записи или `colorOf(id)`, как в CRM). Нет записи в довіднику (например, бот) — имя из токена (`user_metadata.name` → email), инициалы.
|
||||
|
||||
Формат текста — Markdown (GFM: таблицы, списки задач). Ссылка на другую страницу: `[текст](/p/<id>)`, картинка: ``. Ссылки по id не ломаются при переименовании и переносе.
|
||||
|
||||
Пример (агент или скрипт):
|
||||
|
||||
Reference in New Issue
Block a user