feat(bot): add configurable household assistant behavior

This commit is contained in:
2026-03-12 03:22:43 +04:00
parent 146f5294f4
commit 4e7400e908
22 changed files with 4127 additions and 96 deletions

View File

@@ -12,6 +12,7 @@ import {
HOUSEHOLD_MEMBER_LIFECYCLE_STATUSES,
HOUSEHOLD_PAYMENT_BALANCE_ADJUSTMENT_POLICIES,
HOUSEHOLD_TOPIC_ROLES,
type HouseholdAssistantConfigRecord,
type HouseholdMemberAbsencePolicy,
type HouseholdMemberAbsencePolicyRecord,
type HouseholdBillingSettingsRecord,
@@ -245,6 +246,18 @@ function toHouseholdBillingSettingsRecord(row: {
}
}
function toHouseholdAssistantConfigRecord(row: {
householdId: string
assistantContext: string | null
assistantTone: string | null
}): HouseholdAssistantConfigRecord {
return {
householdId: row.householdId,
assistantContext: row.assistantContext,
assistantTone: row.assistantTone
}
}
function toHouseholdUtilityCategoryRecord(row: {
id: string
householdId: string
@@ -957,6 +970,25 @@ export function createDbHouseholdConfigurationRepository(databaseUrl: string): {
return toHouseholdBillingSettingsRecord(row)
},
async getHouseholdAssistantConfig(householdId) {
const rows = await db
.select({
householdId: schema.households.id,
assistantContext: schema.households.assistantContext,
assistantTone: schema.households.assistantTone
})
.from(schema.households)
.where(eq(schema.households.id, householdId))
.limit(1)
const row = rows[0]
if (!row) {
throw new Error('Failed to load household assistant config')
}
return toHouseholdAssistantConfigRecord(row)
},
async updateHouseholdBillingSettings(input) {
await ensureBillingSettings(input.householdId)
@@ -1033,6 +1065,36 @@ export function createDbHouseholdConfigurationRepository(databaseUrl: string): {
return toHouseholdBillingSettingsRecord(row)
},
async updateHouseholdAssistantConfig(input) {
const rows = await db
.update(schema.households)
.set({
...(input.assistantContext !== undefined
? {
assistantContext: input.assistantContext
}
: {}),
...(input.assistantTone !== undefined
? {
assistantTone: input.assistantTone
}
: {})
})
.where(eq(schema.households.id, input.householdId))
.returning({
householdId: schema.households.id,
assistantContext: schema.households.assistantContext,
assistantTone: schema.households.assistantTone
})
const row = rows[0]
if (!row) {
throw new Error('Failed to update household assistant config')
}
return toHouseholdAssistantConfigRecord(row)
},
async listHouseholdUtilityCategories(householdId) {
await ensureUtilityCategories(householdId)