Anticlaw / src /memory /db.ts
Luis Milke
Include all missing source files for cloud
3180829
import mongoose from 'mongoose';
import { env } from '../config.js';
// Define the Memory schema and model
const memorySchema = new mongoose.Schema({
content: { type: String, required: true },
timestamp: { type: String, required: true }
});
// Create index for faster text search
memorySchema.index({ content: 'text' });
memorySchema.index({ timestamp: -1 });
export const MemoryModel = mongoose.model('Memory', memorySchema);
// Define Session schema and model
const sessionSchema = new mongoose.Schema({
id: { type: String, required: true, unique: true },
title: { type: String, required: true },
history: { type: Array, default: [] }, // Stores the ollama.Message[]
createdAt: { type: String, required: true },
updatedAt: { type: String, required: true }
});
export const SessionModel = mongoose.model('Session', sessionSchema);
// Define Timer schema and model
const timerSchema = new mongoose.Schema({
id: { type: String, required: true, unique: true },
triggerAt: { type: String, required: true }, // ISO Date
message: { type: String, required: true }
});
export const TimerModel = mongoose.model('Timer', timerSchema);
// Define Cron schema and model
const cronSchema = new mongoose.Schema({
id: { type: String, required: true, unique: true },
cronExpression: { type: String, required: true },
message: { type: String, required: true }
});
export const CronModel = mongoose.model('Cron', cronSchema);
export async function initDatabase() {
try {
console.log("Connecting to MongoDB Atlas...");
await mongoose.connect(env.MONGODB_URI);
console.log("✓ MongoDB connected successfully.");
} catch (error) {
console.error("❌ MongoDB connection error:", error);
process.exit(1);
}
}
export async function getAllMemories(): Promise<{ content: string, timestamp: string }[]> {
try {
const memories = await MemoryModel.find().sort({ timestamp: -1 }).lean();
return memories as { content: string, timestamp: string }[];
} catch (e) {
console.error("Error fetching all memories:", e);
return [];
}
}
// Ensure clean exit
process.on('exit', () => mongoose.disconnect());
process.on('SIGHUP', async () => { await mongoose.disconnect(); process.exit(128 + 1); });
process.on('SIGINT', async () => { await mongoose.disconnect(); process.exit(128 + 2); });
process.on('SIGTERM', async () => { await mongoose.disconnect(); process.exit(128 + 15); });