feat(offers): asking price on lots, published with sale offers (schema v11)

The data model always meant sale offers to carry an informational price
(data-model §2.8, sharing-model §4.4); with offer state collapsed onto
the Lot, the price lives there. Null amount on a sell lot = 'to be
agreed' — the NIP-99 event simply omits the price tag.

- schema v11: Lots.price_amount/price_currency, guarded migration,
  schema dump + generated schema_v11 for the round-trip test
- ShareableLot/VarietyLot carry the price (sell-only in shareableLots);
  addLot/updateLot persist it and clear it when the lot leaves sale
- OffersCubit.publishLots forwards it (outbox flush picks it up free)
- lot sheet: price + currency inputs revealed only on 'For sale', with
  the €/Ğ1/hours quick-picks extracted to a shared CurrencyQuickPicks
  widget (reused by the sale sheet)
- backup JSON round-trips the new columns
- i18n share.price/priceHint in en/es/pt/ast
This commit is contained in:
vjrj 2026-07-11 07:24:23 +02:00
parent 5ecdd1222a
commit 1103b6ce15
25 changed files with 4690 additions and 31 deletions

View file

@ -547,6 +547,8 @@ class _Translations$share$ast extends Translations$share$en {
@override String get add => '¿Compártesla?';
@override String get title => '¿Compártesla?';
@override String get nudge => 'Tienes a esgaya: podríes compartir un poco.';
@override String get price => 'Preciu';
@override String get priceHint => 'Déxalu baleru p\'alcordalu depués';
@override String get private => 'Namás pa min';
@override String get gift => 'Pa regalar';
@override String get exchange => 'Pa trocar';
@ -1501,6 +1503,8 @@ extension on TranslationsAst {
'share.add' => '¿Compártesla?',
'share.title' => '¿Compártesla?',
'share.nudge' => 'Tienes a esgaya: podríes compartir un poco.',
'share.price' => 'Preciu',
'share.priceHint' => 'Déxalu baleru p\'alcordalu depués',
'share.private' => 'Namás pa min',
'share.gift' => 'Pa regalar',
'share.exchange' => 'Pa trocar',