refactor: simplify — мёртвые поля контента, общие хелперы api и тестов, липкая CTA без site в бандле
landing: - site.ts: убраны неиспользуемые roast, brew, priceDisplay, hero.eyebrow, footer.phone (Footer берёт CONTACT_PHONE) - form.ts: убраны FORM_TEXT.title/lead, CTAS, CtaPreset - StickyCta получает тексты пропсами от layout: клиентский чанк больше не тащит все тексты страницы - LeadForm/useLeadForm: без неиспользуемой подмены sendLead и className; leadPrefill без счётчика seq - Stamp без мёртвого tone; убраны data-interest, data-hot, класс lead-form (ничем не читались) - одно LEAD_FIELDS на sendLead и leadFormModel; регэксп typo вынесен из вызова; дубль фона body api: - changedFields и Version общие для leads и outbox; countLeads и leadStamps без копий SQL - errorMessage в system.ts вместо четырёх копий; take() для ожидающих подтверждений - backup: один Intl.DateTimeFormat на модуль, без невызываемых параметров timeZone/hour - без мёртвых LOOPBACK '::ffff:127.0.0.1', client.call, Pick<BackupCommands> со всеми ключами - testing.ts: validLead, addLead, count, leadIds вместо копий в тестах deploy.sh: deployed_field и цикл по REPOS вместо повторов имён
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { ValidLead } from '@kvarta/shared/lead';
|
||||
import type { Interest, ValidLead } from '@kvarta/shared/lead';
|
||||
import type { Db } from './db/index.js';
|
||||
import type { ClarifiedField, LeadEvent } from './notifier.js';
|
||||
|
||||
@@ -12,10 +12,15 @@ export type SaveResult =
|
||||
| { kind: 'clarified'; event: LeadEvent }
|
||||
| { kind: 'unchanged'; leadId: number };
|
||||
|
||||
type Version = { name: string; interest: string; comment: string | null };
|
||||
/** Версия заявки: сама заявка или уточнение к ней. */
|
||||
export type Version = { name: string; interest: Interest; comment: string | null };
|
||||
|
||||
const CLARIFIED_FIELDS: readonly ClarifiedField[] = ['name', 'interest', 'comment'];
|
||||
|
||||
export function changedFields(previous: Version, next: Version): ClarifiedField[] {
|
||||
return CLARIFIED_FIELDS.filter((field) => previous[field] !== next[field]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Новая заявка, уточнение к заявке из окна или повтор без изменений.
|
||||
* Поиск и запись в одной IMMEDIATE-транзакции: два одновременных запроса с одного телефона
|
||||
@@ -63,7 +68,7 @@ export function saveLead(db: Db, lead: ValidLead, meta: SaveMeta): SaveResult {
|
||||
)
|
||||
.get(open.id) as Version | undefined) ?? open;
|
||||
|
||||
const changed = CLARIFIED_FIELDS.filter((field) => previous[field] !== lead[field]);
|
||||
const changed = changedFields(previous, lead);
|
||||
if (changed.length === 0) return { kind: 'unchanged', leadId: open.id };
|
||||
|
||||
const { lastInsertRowid } = db
|
||||
|
||||
Reference in New Issue
Block a user