- Add controllers (Auth, Chat, Event) with placeholder implementations - Add services (Auth, Chat, Event) with business logic interfaces - Add repositories with MongoDB/Mongoose models (User, Event, Chat) - Add middleware for JWT authentication - Add Claude AI adapter implementing AIProvider interface - Add utility modules for JWT and password handling - Add shared types and DTOs for User, CalendarEvent, ChatMessage - Configure routes with proper endpoint structure - Update app.ts with dependency injection setup - Add required dependencies: mongoose, bcrypt, jsonwebtoken, @anthropic-ai/sdk
75 lines
1.8 KiB
TypeScript
75 lines
1.8 KiB
TypeScript
import mongoose, { Schema, Document } from 'mongoose';
|
|
import { ChatMessage, Conversation, CreateEventDTO } from '@caldav/shared';
|
|
|
|
export interface ChatMessageDocument extends Omit<ChatMessage, 'id'>, Document {}
|
|
export interface ConversationDocument extends Omit<Conversation, 'id'>, Document {}
|
|
|
|
const ProposedEventSchema = new Schema<CreateEventDTO>(
|
|
{
|
|
title: { type: String, required: true },
|
|
description: { type: String },
|
|
startTime: { type: Date, required: true },
|
|
endTime: { type: Date, required: true },
|
|
note: { type: String },
|
|
isRecurring: { type: Boolean },
|
|
recurrenceRule: { type: String },
|
|
},
|
|
{ _id: false }
|
|
);
|
|
|
|
const ChatMessageSchema = new Schema<ChatMessageDocument>(
|
|
{
|
|
conversationId: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
sender: {
|
|
type: String,
|
|
enum: ['user', 'assistant'],
|
|
required: true,
|
|
},
|
|
content: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
proposedEvent: {
|
|
type: ProposedEventSchema,
|
|
},
|
|
},
|
|
{
|
|
timestamps: true,
|
|
toJSON: {
|
|
transform: (_, ret: Record<string, unknown>) => {
|
|
ret.id = String(ret._id);
|
|
delete ret._id;
|
|
delete ret.__v;
|
|
return ret;
|
|
},
|
|
},
|
|
}
|
|
);
|
|
|
|
const ConversationSchema = new Schema<ConversationDocument>(
|
|
{
|
|
userId: {
|
|
type: String,
|
|
required: true,
|
|
index: true,
|
|
},
|
|
},
|
|
{
|
|
timestamps: true,
|
|
toJSON: {
|
|
transform: (_, ret: Record<string, unknown>) => {
|
|
ret.id = String(ret._id);
|
|
delete ret._id;
|
|
delete ret.__v;
|
|
return ret;
|
|
},
|
|
},
|
|
}
|
|
);
|
|
|
|
export const ChatMessageModel = mongoose.model<ChatMessageDocument>('ChatMessage', ChatMessageSchema);
|
|
export const ConversationModel = mongoose.model<ConversationDocument>('Conversation', ConversationSchema);
|