Tema
/
Interneto svetainių serverio dalies kūrimas GO

Pasirašytojo puslapis ir pasirašymo srautas

Devyni failai kortelėse, iš apačios į viršų. Pirma užklausos ir rodinio struktūra, tada pasirašytojo puslapiai, valdikliai ir savininko detalės puslapis, dabar rodantis vientisumą. signers.sqldocuments.sqlweb/signing.gosigning.templsigning_view.gosigning.godocuments.godocuments.templrouter.go.

1. internal/db/queries/signers.sql (keitimas) — trys naujos užklausos: GetSignerByToken (žetonas → viena eilutė), SignSigner (status='pending' apsaugotas atnaujinimas, :execrows) ir CountPendingSigners.

2. internal/db/queries/documents.sql (keitimas) — dvi naujos: GetDocument (neapribotas pagal ID — tik žetonu autorizuotiems srautams) ir MarkDocumentCompleted.

3. internal/web/signing.go (keitimas) — pridėk IntegrityView struktūrą (užrašyta maiša prieš dabartinę).

4. internal/web/signing.templ (naujas) — pasirašytojui skirti puslapiai ir du bendri komponentai: integrityBanner (garsi TAMPER DETECTED / tyli patikrinta juosta), signatureCaveat (sąžiningumo pastaba), SignForm, SignDone, SignExpired, SignInvalid. Kiekvienas pasirašymo puslapis įterpia juostą ir įspėjimą.

5. internal/handlers/signing_view.go (keitimas) — pridėk viewIntegrity (atvaizduoja perskaičiuotą maišą į IntegrityView).

6. internal/handlers/signing.go (keitimas) — pasirašytojo srautas, šalia praėjusios pamokos InviteSigners:

  • resolveSigner — žetonas sutampa su vienu pasirašytoju + jo dokumentu (GetSignerByTokenGetDocument); nežinomas žetonas atvaizduoja SignInvalid (404).
  • checkIntegrity — iš naujo maišuoja saugomus baitus ir lygina su file_hash. Kviečiama kiekvienoje peržiūroje ir prieš kiekvieną pasirašymą.
  • SignPage / SignDownload / Sign — peržiūra, atsisiuntimas per žetoną ir pasirašymas. Sign perskaičiuoja maišą, užrašo parašą transakcijoje ir — jei tai buvo paskutinis pasirašytojas — pažymi dokumentą užbaigtu. Dvigubas POST parodo pasirašytą būseną (:execrows sargyba).

7. internal/handlers/documents.go (keitimas) — renderDocumentDetail dabar taip pat apskaičiuoja vientisumą ir paduoda jį puslapiui; o DownloadDocument perdaromas kviesti bendrą streamDocument pagalbininką — pasirašytojo atsisiuntimui reikia to paties srautavimo, tad dabar atsiranda antras skambintojas.

8. internal/web/documents.templ (keitimas) — savininko detalės puslapis įgyja integrityBanner, o pasirašytojų sąrašas įgyja Signed as / Signed at / Hash signed stulpelius su ⚠ differs žyma, kai praeito parašo maiša nebeatitinka failo.

9. internal/handlers/router.go (keitimas) — trys maršrutai autentifikuotos grupės — žetonas yra visa autorizacija:

r.Get("/sign/{token}", h.SignPage)
r.Post("/sign/{token}", h.Sign)
r.Get("/sign/{token}/download", h.SignDownload)

Patikra — perseeduok, paleisk ir išsiųsk dokumentą dviem pasirašytojams (kaip 10 pamokoje). Nukopijuok pasirašymo nuorodą iš konsolės ir atverk (privatus langas — gražus būdas pajusti „be paskyros" dalį):

  • Pasirašymo puslapis rodo žalią Integrity verified juostą, dokumento metaduomenis, Download & review mygtuką ir sąžiningumo įspėjimą.
  • Įvesk vardą, Sign — puslapis rodo ✓ You've signed, maišą, kurią pasirašei, ir įspėjimą dar kartą.
  • Perkrauk pasirašytą nuorodą: vis dar pasirašyta būsena, ne antras pasirašymas (vienkartinis). Iš naujo POST ranka — tas pats rezultatas, nulis atnaujintų eilučių.
  • Pasirašyk kaip antras pasirašytojas. Kai paskutinis pasirašo, savininko detalės puslapis rodo dokumentą kaip completed, o sąrašą kaip 2 of 2 signed.
level=INFO msg="document signed" doc=… signer=alice@example.com hash=4a7d1ed4… remaining=1
level=INFO msg="document signed" doc=… signer=bob@example.com   hash=4a7d1ed4… remaining=0

remaining=0 — akimirka, kai dokumentas užbaigtas.