feat: initial conversational flow #37

Merged
talksik merged 39 commits from 33-conversational-flow-for-streams---story-mode into master 2026-03-19 23:29:41 +00:00
2 changed files with 6 additions and 7 deletions
Showing only changes of commit 2c2e56d5e9 - Show all commits
+6 -3
View File
@@ -67,12 +67,18 @@ export const StreamPropertiesSchema = z.object({
name: z.string(),
status: z.enum(["open", "closed"]),
description: z.string().optional(),
// e.g. ["human:[email protected]", "human:[email protected]"] - visible only to Aron and John
// e.g. ["network:123"] - visible to everyone in the network
visible_to: z.array(z.string())
});
export type StreamProperties = z.infer<typeof StreamPropertiesSchema>;
export const FolderPropertiesSchema = z.object({
name: z.string(),
color: z.string().optional(),
// e.g. ["human:[email protected]", "human:[email protected]"] - visible only to Aron and John
// e.g. ["network:123"] - visible to everyone in the network
visible_to: z.array(z.string())
});
export type FolderProperties = z.infer<typeof FolderPropertiesSchema>;
@@ -128,9 +134,6 @@ const ParticleBaseSchema = z.object({
created_at: z.coerce.date(),
created_by_email: z.string().email(),
updated_at: z.coerce.date().optional(),
// e.g. ["human:[email protected]", "human:[email protected]"] - visible only to Aron and John
// e.g. ["network:123"] - visible to everyone in the network
visible_to: z.array(z.string())
});
export const ParticleSchema = z.discriminatedUnion("type", [
-4
View File
@@ -92,7 +92,6 @@ export async function createParticle<T extends ParticleType>(
type: T,
properties: ParticlePropertiesMap[T],
createdByEmail: string,
visibleTo: string[],
): Promise<string> {
const particle: Particle = ParticleSchema.parse({
id: "", // ignored by toFirestore, but needed to satisfy the type
@@ -101,7 +100,6 @@ export async function createParticle<T extends ParticleType>(
created_at: new Date(),
created_by_email: createdByEmail,
updated_at: null,
visible_to: visibleTo,
});
const ref = await addDoc(typedCollection(collectionPath), particle);
return ref.id;
@@ -111,7 +109,6 @@ export async function createParticle<T extends ParticleType>(
export async function updateParticle<T extends ParticleType>(
docPath: string,
properties: Partial<ParticlePropertiesMap[T]>,
visibleTo?: string[],
): Promise<void> {
const particleRef = typedDoc(docPath);
// Take the partial and create a new object with dot notation
@@ -123,6 +120,5 @@ export async function updateParticle<T extends ParticleType>(
await updateDoc(particleRef, {
...updatedProperties,
updated_at: serverTimestamp(),
...(visibleTo ? { visible_to: visibleTo } : {}),
});
}