v4.0.6 0 Simplicity focus
This commit is contained in:
@@ -61,11 +61,37 @@ class WelcomePackEmailRequest(BaseModel):
|
||||
# Owner-set subject line. Defaults to "Goodwalk Onboarding - <Dog Name>" when
|
||||
# blank (resolved server-side so scheduled sends keep a sensible subject too).
|
||||
subject: str = ""
|
||||
serviceType: str
|
||||
priceDetails: str
|
||||
startDate: str
|
||||
# Structured offer details rendered in the details table. Now fully optional —
|
||||
# the owner can hide the table entirely (showDetails=False) and write a free
|
||||
# email instead. Left blank, a row is simply omitted from the table.
|
||||
serviceType: str = ""
|
||||
priceDetails: str = ""
|
||||
startDate: str = ""
|
||||
# Free-text customisation. All blank => the email falls back to the original
|
||||
# default copy, so existing callers keep working unchanged. `{first_name}`
|
||||
# and `{dog_name}` tokens are substituted server-side.
|
||||
heading: str = ""
|
||||
intro: str = ""
|
||||
outro: str = ""
|
||||
tagLabel: str = ""
|
||||
# Customisable button block. Defaults to "Complete onboarding" pointing at the
|
||||
# client onboarding portal. Clearing either field hides the button.
|
||||
ctaLabel: str = ""
|
||||
ctaUrl: str = ""
|
||||
# Whether to render the Service / Price / Start date table at all.
|
||||
showDetails: bool = True
|
||||
# Rich-text (WYSIWYG) message body. When present it replaces the
|
||||
# heading/intro/outro copy above and is sanitised to an email-safe subset of
|
||||
# HTML server-side. `includeButton` toggles the onboarding button beneath it.
|
||||
bodyHtml: str = ""
|
||||
includeButton: bool = True
|
||||
preview: bool = False
|
||||
previewRecipients: list[EmailStr] = []
|
||||
# When sending for real (not a preview), also copy the owner so they keep a
|
||||
# record of exactly what the client received. CC is visible to the client;
|
||||
# BCC is hidden. Independent. Ignored on previews and scheduled sends.
|
||||
ccOwner: bool = False
|
||||
bccOwner: bool = False
|
||||
# ISO 8601 local datetime (e.g. "2026-06-20T14:30"). When set on a non-preview
|
||||
# request, the welcome email is queued for reliable delivery at that time
|
||||
# instead of being sent immediately.
|
||||
@@ -84,6 +110,9 @@ class ScheduledEmailRescheduleRequest(BaseModel):
|
||||
class BirthdayEmailRequest(BaseModel):
|
||||
email: EmailStr
|
||||
dogId: str | None = None
|
||||
# Owner-editable subject line. Blank falls back to the default
|
||||
# "Happy birthday <dog>" subject.
|
||||
subject: str = ""
|
||||
preview: bool = False
|
||||
previewRecipients: list[EmailStr] = []
|
||||
|
||||
@@ -124,6 +153,12 @@ class ResetOnboardingRequest(BaseModel):
|
||||
email: EmailStr
|
||||
|
||||
|
||||
class DeleteClientRequest(BaseModel):
|
||||
"""Owner-initiated permanent deletion of a client and their access."""
|
||||
|
||||
email: EmailStr
|
||||
|
||||
|
||||
class NewClientRequest(BaseModel):
|
||||
"""Owner-initiated client creation (e.g. leads from Instagram / Facebook
|
||||
that never came through the public enquiry form). Registers the email so
|
||||
@@ -138,6 +173,9 @@ class NewClientRequest(BaseModel):
|
||||
dogAge: str = ""
|
||||
# Where the client came from, e.g. "Instagram", "Facebook", "Referral".
|
||||
source: str = ""
|
||||
# The date the client joined Goodwalk (ISO yyyy-mm-dd). Owner-supplied, since
|
||||
# only the owner knows it. Used to surface joining anniversaries.
|
||||
joiningDate: str = ""
|
||||
# When true (and the MYOB integration is configured), also create the client
|
||||
# as a customer contact in MYOB. Non-fatal: a MYOB failure never blocks the
|
||||
# local client from being created.
|
||||
|
||||
Reference in New Issue
Block a user