feat(noter): en delt note tager de noter med, den peger på
Den anden halvdel af den melding, der begyndte det her: linkene i en delt note førte ingen steder hen, fordi det, de pegede på, ikke var delt. At dele en note er at dele det, den *siger*, og et link er en del af det. note_shares får en `linked`-søjle. 0 er en deling, nogen har valgt; 1 er en, der er udledt af et link. Skellet er hele modellen. Fladen kan sige *hvorfor* en person har en note — "fulgte med" er en anden sætning end "du delte den" — og de udledte rækker kan regnes forfra efter hver ændring, uden at røre dem, ejeren selv har sat. SyncLinkedShares regner billedet om fra bunden efter enhver af ejerens egne handlinger: en deling, en fjernet deling, en gemning der har ændret links eller titel, en sletning. Hele kæden følger med, ikke kun første led, med et loft på hundrede noter — "del denne ene note" må ikke kunne blive til fire hundrede. Rollen arves fra den note, man kom fra, og stærkest vinder, når en note kan nås ad to veje. Kun ejerens egne noter følger med, og det er ikke en optimering: et link peger på en titel, og en medredaktør må skrive titler. Kunne et link hente hvad som helst, kunne den, man har delt med, skrive [[Bankoplysninger]] og læse med. Derfor slås der kun op blandt ejerens egne noter, og derfor regner kun ejerens egne gemninger om. Begge dele har en Go-prøve. Det lukker ikke hullet helt: skriver medredaktøren linket, og gemmer ejeren bagefter sin egen note, følger den note med dér. Det, der står imod, er synlighed — linket står som tekst i ejerens egen note, og panelet viser hver note, der er fulgt med, og hvem der har den. Udregningen åbner hver af ejerens noter, fordi titlerne er forseglet. Derfor to værn: har man ikke delt noget, svares der med det samme ud fra ét EXISTS, og en gemning regner kun om, når links eller titel faktisk har flyttet sig. Uden det første kostede "Ny note" halvfems millisekunder, og i det hul nåede e2e-prøven for monospace at taste sin titel ind i den forrige note, som editoren så tegnede væk. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013r4DxpUZcSShxfCZZaeMGZ
This commit is contained in:
co-authored by
Claude Opus 5
parent
ff75302cf8
commit
916a0c0224
+37
-1
@@ -3126,10 +3126,20 @@ paths:
|
||||
candidates:
|
||||
type: array
|
||||
items: { $ref: "#/components/schemas/Person" }
|
||||
follows:
|
||||
description: >
|
||||
The notes this one points at with [[links]], which are shared
|
||||
alongside it. Owner's own notes only.
|
||||
type: array
|
||||
items: { $ref: "#/components/schemas/NoteFollow" }
|
||||
"404": { $ref: "#/components/responses/NotFound" }
|
||||
post:
|
||||
tags: [notes]
|
||||
summary: Share a note with a person, or change the role they hold.
|
||||
description: >
|
||||
The notes this one points at with [[links]] are shared with the same person
|
||||
and the same role, so a link in a shared note leads somewhere. Only notes
|
||||
the sharer owns follow, and the response lists them.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
@@ -3141,7 +3151,16 @@ paths:
|
||||
user_id: { type: string }
|
||||
role: { type: string, enum: [viewer, editor] }
|
||||
responses:
|
||||
"204": { description: Shared }
|
||||
"200":
|
||||
description: Shared
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
follows:
|
||||
type: array
|
||||
items: { $ref: "#/components/schemas/NoteFollow" }
|
||||
"404": { $ref: "#/components/responses/NotFound" }
|
||||
"422": { $ref: "#/components/responses/Validation" }
|
||||
|
||||
@@ -4035,6 +4054,23 @@ components:
|
||||
properties:
|
||||
user: { $ref: "#/components/schemas/Person" }
|
||||
role: { type: string, enum: [viewer, editor] }
|
||||
linked:
|
||||
description: >
|
||||
True when the person has this note because another shared note points
|
||||
at it, rather than because it was shared with them on its own. Such a
|
||||
grant is taken back by removing the link or the share it came from, not
|
||||
by removing it here.
|
||||
type: boolean
|
||||
via:
|
||||
description: The title of the shared note that points at this one.
|
||||
type: string
|
||||
|
||||
NoteFollow:
|
||||
type: object
|
||||
description: A note that is shared alongside another because that one links to it.
|
||||
properties:
|
||||
note_id: { type: string }
|
||||
title: { type: string }
|
||||
|
||||
Mailbox:
|
||||
type: object
|
||||
|
||||
Reference in New Issue
Block a user