Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions motomate/src/lib/db/repositories/workflow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import { CreateWorkflowRuleSchema, UpdateWorkflowTriggerSchema } from '../../val
import type { InsertWorkflowRule, WorkflowRule, RuleTrigger } from '../schema.js';
import { generateId } from '../../utils/id.js';
import { PRESET_RULES } from '../../workflow/rules.js';
import { normalizeWorkflowTrigger } from '../../workflow/triggers.js';

export async function createWorkflowRule(userId: string, input: unknown): Promise<WorkflowRule> {
const parsed = CreateWorkflowRuleSchema.parse(input);
normalizeWorkflowTrigger(parsed.trigger);
const id = generateId();
const row: InsertWorkflowRule = { ...parsed, id, user_id: userId };
await db.insert(workflow_rules).values(row);
Expand Down Expand Up @@ -46,6 +48,7 @@ export async function updateWorkflowRuleTrigger(
trigger: RuleTrigger
): Promise<void> {
const { trigger: validatedTrigger } = UpdateWorkflowTriggerSchema.parse({ id, trigger });
normalizeWorkflowTrigger(validatedTrigger);
await db
.update(workflow_rules)
.set({ trigger: validatedTrigger, updated_at: new Date().toISOString() })
Expand All @@ -58,10 +61,14 @@ export async function seedPresetRulesForUser(userId: string): Promise<void> {
for (const preset of PRESET_RULES) {
const existingRule = existingByName.get(preset.name);
if (existingRule) {
// Refresh action template so existing users get updated notification bodies
// Refresh action template and description so existing users get updated workflow copy.
await db
.update(workflow_rules)
.set({ actions: preset.actions, updated_at: new Date().toISOString() })
.set({
description: preset.description,
actions: preset.actions,
updated_at: new Date().toISOString()
})
.where(eq(workflow_rules.id, existingRule.id));
} else {
await createWorkflowRule(userId, {
Expand Down
9 changes: 5 additions & 4 deletions motomate/src/lib/i18n/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -771,8 +771,8 @@
"loadPresets": "Voreinstellungen wiederherstellen",
"empty": "Noch keine Regeln. Stellen Sie die Voreinstellungen wieder her oder erstellen Sie eigene Regeln.",
"presets": {
"maintenanceDueSoonKm": "Wartung bald fällig (km)",
"maintenanceOverdueKm": "Wartung überfällig (km)",
"maintenanceDueSoonKm": "Wartung bald fällig",
"maintenanceOverdueKm": "Wartung überfällig",
"maintenanceDueSoonDate": "Wartung bald fällig (Datum)",
"maintenanceOverdueDate": "Wartung überfällig (Datum)",
"odometerNudge": "Kilometerstand-Erinnerung"
Expand Down Expand Up @@ -873,6 +873,7 @@
"cooldown": "Wartet bis {date}",
"waiting": "Wartet auf nächsten Service-Eintrag",
"inKm": "In {km} km",
"inMeasurement": "In {value} {unit}",
"onDate": "Ab {date}",
"trackerLabel": "({tracker})",
"noData": "Keine Daten"
Expand Down Expand Up @@ -941,11 +942,11 @@
"notifications": {
"maintenanceDueSoonKm": {
"title": "Wartung bald fällig",
"body": "'{{tracker_name}}' bei {{vehicle_name}} ist in {{km_remaining}} km fällig."
"body": "'{{tracker_name}}' bei {{vehicle_name}} ist in {{measurement_value}} {{measurement_unit}} fällig."
},
"maintenanceOverdueKm": {
"title": "Wartung überfällig",
"body": "'{{tracker_name}}' bei {{vehicle_name}} ist {{km_over}} km überfällig."
"body": "'{{tracker_name}}' bei {{vehicle_name}} ist {{measurement_value}} {{measurement_unit}} überfällig."
},
"maintenanceDueSoonDate": {
"title": "Wartung bald fällig",
Expand Down
9 changes: 5 additions & 4 deletions motomate/src/lib/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -781,8 +781,8 @@
"loadPresets": "Restore preset rules",
"empty": "No rules yet. Restore the preset rules to get started, or create your own.",
"presets": {
"maintenanceDueSoonKm": "Maintenance due soon (km)",
"maintenanceOverdueKm": "Maintenance overdue (km)",
"maintenanceDueSoonKm": "Maintenance due soon",
"maintenanceOverdueKm": "Maintenance overdue",
"maintenanceDueSoonDate": "Maintenance due soon (date)",
"maintenanceOverdueDate": "Maintenance overdue (date)",
"odometerNudge": "Odometer nudge"
Expand Down Expand Up @@ -883,6 +883,7 @@
"cooldown": "Cooling down until {date}",
"waiting": "Waiting for next service log",
"inKm": "In {km} km",
"inMeasurement": "In {value} {unit}",
"onDate": "From {date}",
"trackerLabel": "({tracker})",
"noData": "No data"
Expand Down Expand Up @@ -1005,11 +1006,11 @@
"notifications": {
"maintenanceDueSoonKm": {
"title": "Maintenance due soon",
"body": "'{{tracker_name}}' on {{vehicle_name}} is due in {{km_remaining}} km."
"body": "'{{tracker_name}}' on {{vehicle_name}} is due in {{measurement_value}} {{measurement_unit}}."
},
"maintenanceOverdueKm": {
"title": "Maintenance overdue",
"body": "'{{tracker_name}}' on {{vehicle_name}} is {{km_over}} km overdue."
"body": "'{{tracker_name}}' on {{vehicle_name}} is {{measurement_value}} {{measurement_unit}} overdue."
},
"maintenanceDueSoonDate": {
"title": "Maintenance due soon",
Expand Down
9 changes: 5 additions & 4 deletions motomate/src/lib/i18n/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -770,8 +770,8 @@
"loadPresets": "Restaurar reglas predeterminadas",
"empty": "Sin reglas todavía. Restaura las reglas predeterminadas para empezar, o crea las tuyas.",
"presets": {
"maintenanceDueSoonKm": "Mantenimiento próximo (km)",
"maintenanceOverdueKm": "Mantenimiento vencido (km)",
"maintenanceDueSoonKm": "Mantenimiento próximo",
"maintenanceOverdueKm": "Mantenimiento vencido",
"maintenanceDueSoonDate": "Mantenimiento próximo (fecha)",
"maintenanceOverdueDate": "Mantenimiento vencido (fecha)",
"odometerNudge": "Recordatorio de odómetro"
Expand Down Expand Up @@ -872,6 +872,7 @@
"cooldown": "En espera hasta {date}",
"waiting": "Esperando el próximo registro de servicio",
"inKm": "En {km} km",
"inMeasurement": "En {value} {unit}",
"onDate": "A partir del {date}",
"trackerLabel": "({tracker})",
"noData": "Sin datos"
Expand Down Expand Up @@ -940,11 +941,11 @@
"notifications": {
"maintenanceDueSoonKm": {
"title": "Mantenimiento próximo",
"body": "'{{tracker_name}}' en {{vehicle_name}} vence en {{km_remaining}} km."
"body": "'{{tracker_name}}' en {{vehicle_name}} vence en {{measurement_value}} {{measurement_unit}}."
},
"maintenanceOverdueKm": {
"title": "Mantenimiento vencido",
"body": "'{{tracker_name}}' en {{vehicle_name}} está {{km_over}} km vencido."
"body": "'{{tracker_name}}' en {{vehicle_name}} está {{measurement_value}} {{measurement_unit}} vencido."
},
"maintenanceDueSoonDate": {
"title": "Mantenimiento próximo",
Expand Down
9 changes: 5 additions & 4 deletions motomate/src/lib/i18n/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -771,8 +771,8 @@
"loadPresets": "Restaurer les règles préréglées",
"empty": "Aucune règle pour l'instant. Restaurez les règles préréglées ou créez les vôtres.",
"presets": {
"maintenanceDueSoonKm": "Entretien bientôt dû (km)",
"maintenanceOverdueKm": "Entretien en retard (km)",
"maintenanceDueSoonKm": "Entretien bientôt dû",
"maintenanceOverdueKm": "Entretien en retard",
"maintenanceDueSoonDate": "Entretien bientôt dû (date)",
"maintenanceOverdueDate": "Entretien en retard (date)",
"odometerNudge": "Rappel kilométrage"
Expand Down Expand Up @@ -873,6 +873,7 @@
"cooldown": "En attente jusqu'au {date}",
"waiting": "En attente du prochain journal de service",
"inKm": "Dans {km} km",
"inMeasurement": "Dans {value} {unit}",
"onDate": "À partir du {date}",
"trackerLabel": "({tracker})",
"noData": "Aucune donnée"
Expand Down Expand Up @@ -941,11 +942,11 @@
"notifications": {
"maintenanceDueSoonKm": {
"title": "Entretien bientôt dû",
"body": "'{{tracker_name}}' sur {{vehicle_name}} arrive à échéance dans {{km_remaining}} km."
"body": "'{{tracker_name}}' sur {{vehicle_name}} arrive à échéance dans {{measurement_value}} {{measurement_unit}}."
},
"maintenanceOverdueKm": {
"title": "Entretien en retard",
"body": "'{{tracker_name}}' sur {{vehicle_name}} est en retard de {{km_over}} km."
"body": "'{{tracker_name}}' sur {{vehicle_name}} est en retard de {{measurement_value}} {{measurement_unit}}."
},
"maintenanceDueSoonDate": {
"title": "Entretien bientôt dû",
Expand Down
9 changes: 5 additions & 4 deletions motomate/src/lib/i18n/locales/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -770,8 +770,8 @@
"loadPresets": "Ripristina regole predefinite",
"empty": "Nessuna regola ancora. Ripristina le regole predefinite per iniziare, o creane di tue.",
"presets": {
"maintenanceDueSoonKm": "Manutenzione imminente (km)",
"maintenanceOverdueKm": "Manutenzione scaduta (km)",
"maintenanceDueSoonKm": "Manutenzione imminente",
"maintenanceOverdueKm": "Manutenzione scaduta",
"maintenanceDueSoonDate": "Manutenzione imminente (data)",
"maintenanceOverdueDate": "Manutenzione scaduta (data)",
"odometerNudge": "Promemoria chilometri"
Expand Down Expand Up @@ -872,6 +872,7 @@
"cooldown": "In attesa fino al {date}",
"waiting": "In attesa del prossimo registro di servizio",
"inKm": "Tra {km} km",
"inMeasurement": "Tra {value} {unit}",
"onDate": "Dal {date}",
"trackerLabel": "({tracker})",
"noData": "Nessun dato"
Expand Down Expand Up @@ -940,11 +941,11 @@
"notifications": {
"maintenanceDueSoonKm": {
"title": "Manutenzione in scadenza",
"body": "'{{tracker_name}}' su {{vehicle_name}} è in scadenza tra {{km_remaining}} km."
"body": "'{{tracker_name}}' su {{vehicle_name}} è in scadenza tra {{measurement_value}} {{measurement_unit}}."
},
"maintenanceOverdueKm": {
"title": "Manutenzione scaduta",
"body": "'{{tracker_name}}' su {{vehicle_name}} è scaduta di {{km_over}} km."
"body": "'{{tracker_name}}' su {{vehicle_name}} è scaduta di {{measurement_value}} {{measurement_unit}}."
},
"maintenanceDueSoonDate": {
"title": "Manutenzione in scadenza",
Expand Down
9 changes: 5 additions & 4 deletions motomate/src/lib/i18n/locales/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -771,8 +771,8 @@
"loadPresets": "Standaardregels herstellen",
"empty": "Nog geen regels. Herstel de standaardregels om te beginnen, of maak je eigen.",
"presets": {
"maintenanceDueSoonKm": "Onderhoud binnenkort (km)",
"maintenanceOverdueKm": "Onderhoud achterstallig (km)",
"maintenanceDueSoonKm": "Onderhoud binnenkort",
"maintenanceOverdueKm": "Onderhoud achterstallig",
"maintenanceDueSoonDate": "Onderhoud binnenkort (datum)",
"maintenanceOverdueDate": "Onderhoud achterstallig (datum)",
"odometerNudge": "Kilometerstand herinnering"
Expand Down Expand Up @@ -873,6 +873,7 @@
"cooldown": "Wacht tot {date}",
"waiting": "Wacht op volgend service-log",
"inKm": "Over {km} km",
"inMeasurement": "Over {value} {unit}",
"onDate": "Vanaf {date}",
"trackerLabel": "({tracker})",
"noData": "Geen gegevens"
Expand Down Expand Up @@ -941,11 +942,11 @@
"notifications": {
"maintenanceDueSoonKm": {
"title": "Onderhoud binnenkort vereist",
"body": "'{{tracker_name}}' op {{vehicle_name}} is over {{km_remaining}} km vereist."
"body": "'{{tracker_name}}' op {{vehicle_name}} is over {{measurement_value}} {{measurement_unit}} vereist."
},
"maintenanceOverdueKm": {
"title": "Onderhoud achterstallig",
"body": "'{{tracker_name}}' op {{vehicle_name}} is {{km_over}} km achterstallig."
"body": "'{{tracker_name}}' op {{vehicle_name}} is {{measurement_value}} {{measurement_unit}} achterstallig."
},
"maintenanceDueSoonDate": {
"title": "Onderhoud binnenkort vereist",
Expand Down
9 changes: 5 additions & 4 deletions motomate/src/lib/i18n/locales/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -770,8 +770,8 @@
"loadPresets": "Restaurar regras predefinidas",
"empty": "Ainda sem regras. Restaure as regras predefinidas para começar, ou crie as suas próprias.",
"presets": {
"maintenanceDueSoonKm": "Manutenção em breve (km)",
"maintenanceOverdueKm": "Manutenção em atraso (km)",
"maintenanceDueSoonKm": "Manutenção em breve",
"maintenanceOverdueKm": "Manutenção em atraso",
"maintenanceDueSoonDate": "Manutenção em breve (data)",
"maintenanceOverdueDate": "Manutenção em atraso (data)",
"odometerNudge": "Lembrete do odómetro"
Expand Down Expand Up @@ -872,6 +872,7 @@
"cooldown": "A aguardar até {date}",
"waiting": "A aguardar o próximo registo de serviço",
"inKm": "Em {km} km",
"inMeasurement": "Em {value} {unit}",
"onDate": "A partir de {date}",
"trackerLabel": "({tracker})",
"noData": "Sem dados"
Expand Down Expand Up @@ -940,11 +941,11 @@
"notifications": {
"maintenanceDueSoonKm": {
"title": "Manutenção em breve",
"body": "'{{tracker_name}}' em {{vehicle_name}} vence em {{km_remaining}} km."
"body": "'{{tracker_name}}' em {{vehicle_name}} vence em {{measurement_value}} {{measurement_unit}}."
},
"maintenanceOverdueKm": {
"title": "Manutenção em atraso",
"body": "'{{tracker_name}}' em {{vehicle_name}} está {{km_over}} km em atraso."
"body": "'{{tracker_name}}' em {{vehicle_name}} está {{measurement_value}} {{measurement_unit}} em atraso."
},
"maintenanceDueSoonDate": {
"title": "Manutenção em breve",
Expand Down
Loading
Loading