Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- export class FirestoreSessionStore<S extends MyState = MyState> implements SessionStore<S> {
- private sessionsCollection: CollectionReference;
- private collectionPath: string = '/genkit_sessions';
- constructor(firestoreDb: Firestore) {
- this.sessionsCollection = firestoreDb.collection(this.collectionPath);
- }
- async get(sessionId: string): Promise<SessionData<S> | undefined> {
- try {
- const docRef = this.sessionsCollection.doc(sessionId);
- const docSnap = await docRef.get();
- if (!docSnap.exists) {
- return undefined;
- }
- // Data from Firestore directly matches FirestoreSessionDoc structure
- const firestoreDoc = docSnap.data() as FirestoreSessionDoc<S>;
- // Reconstruct SessionData. state.formattedRecipe is already an object.
- const sessionData: SessionData<S> = {
- id: firestoreDoc.id,
- };
- if (firestoreDoc.state !== undefined) {
- // No special conversion needed for state.formattedRecipe
- sessionData.state = firestoreDoc.state;
- }
- if (firestoreDoc.threads !== undefined) {
- sessionData.threads = firestoreDoc.threads;
- }
- return sessionData;
- } catch (error: any) {
- if (error.code === "5" || error.code === "404") {
- console.error(`Error fetching session '${sessionId}' from Firestore:`, error.code);
- return undefined;
- } else {
- throw new Error(String(error));
- }
- }
- }
- async save(sessionId: string, sessionData: SessionData<S>): Promise<void> {
- try {
- const docRef = this.sessionsCollection.doc(sessionId);
- // Data to save. state.formattedRecipe is already an object.
- const dataToSave: FirestoreSessionDoc<S> = {
- id: sessionId, // or sessionData.id
- updatedAt: FieldValue.serverTimestamp(),
- };
- if (sessionData.state !== undefined) {
- // No special conversion needed for state.formattedRecipe
- dataToSave.state = sessionData.state;
- }
- if (sessionData.threads !== undefined) {
- dataToSave.threads = sessionData.threads;
- }
- await docRef.set(dataToSave);
- } catch (error: any) {
- console.error(`Error saving session '${sessionId}' to Firestore:`, error.code);
- if (error.code === "5" || error.code === "404") {
- return undefined;
- } else {
- throw new Error(String(error));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement