`LIVIA_PROFIL_UND_PROMPT.md` hält Livia als Exposé Master fest, wie sie vor Runde 8 war: Personalblatt, Aufgabenkatalog, Kanäle und Systeme, das Exposé-Dossier mit elf Bereichen und neun Pflichtfeldern, die `missingFacts`-Regel der Textmaschine — dazu ein System-Prompt, mit dem sich diese Fassung ausserhalb des Repositories rekonstruieren lässt. `archive/livia/` ergänzt die Beschreibung um die Wiederherstellung: die 23 Dateien der Exposé-Funktion als wörtliche Kopie im Original-Pfadlayout sowie ein Manifest jeder Stelle, an der Livia in geteilten Dateien verdrahtet war. Beides ist mit Runde 8 nicht überholt, sondern der Referenzstand: die Exposé-Funktion wurde nicht entfernt, sondern nachgeordnet. Das Manifest beschreibt allerdings den Rückbau eines vollständigen Entfernens und damit ein Szenario, das so nicht eingetreten ist. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import { MockupExposeLeadProvider } from '../provider/MockupExposeLeadProvider'
|
|
import type { CreateExposeLeadInput, ExposeLead } from '../domain/exposeLead'
|
|
import type { ItemResponse, ListResponse } from './types'
|
|
import { throwServiceError } from './errors'
|
|
import { useSessionStore } from '../stores/sessionStore'
|
|
|
|
const provider = MockupExposeLeadProvider
|
|
|
|
export const exposeLeadService = {
|
|
async getAll(): Promise<ListResponse<ExposeLead>> {
|
|
try {
|
|
const data = await provider.getAll()
|
|
return { data, meta: { total: data.length, page: 1, pageSize: data.length, hasMore: false } }
|
|
} catch (err) {
|
|
throwServiceError(err)
|
|
}
|
|
},
|
|
|
|
async getById(id: string): Promise<ItemResponse<ExposeLead | null>> {
|
|
try {
|
|
return { data: await provider.getById(id) }
|
|
} catch (err) {
|
|
throwServiceError(err)
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Weiterleitung von Nora an Livia.
|
|
*
|
|
* Ohne mindestens ein Objekt hätte Livia nichts, woraus sie ein Exposé bauen
|
|
* könnte — deshalb ist die Objektempfehlung Pflicht und keine Kür.
|
|
*/
|
|
async create(input: CreateExposeLeadInput): Promise<ItemResponse<ExposeLead>> {
|
|
try {
|
|
if (input.propertyIds.length === 0) {
|
|
throw new Error('Bitte mindestens ein Objekt auswählen.')
|
|
}
|
|
const user = useSessionStore.getState().currentUser
|
|
const data = await provider.create({
|
|
...input,
|
|
forwardedBy: input.forwardedBy ?? user?.name,
|
|
})
|
|
return { data }
|
|
} catch (err) {
|
|
throwServiceError(err)
|
|
}
|
|
},
|
|
|
|
async archive(id: string): Promise<ItemResponse<ExposeLead>> {
|
|
try {
|
|
return { data: await provider.archive(id) }
|
|
} catch (err) {
|
|
throwServiceError(err)
|
|
}
|
|
},
|
|
}
|