ideas-generator/server/models/Message.js
DJP 88d18619bb Complete migration from OpenAI Assistants API to Chat Completions API with Vue.js frontend
Major Features Implemented:
- Full Vue.js 3 admin interface with Vite build system
- OpenAI Chat Completions API integration (replaced deprecated Assistants API)
- PostgreSQL database with Sequelize ORM
- Complete conversation management system
- User authentication system (admin@oliver.agency, user@oliver.agency)
- AI-powered conversation title generation
- Server-Sent Events for streaming responses
- Conversation soft delete functionality
- Rate limiting middleware with development bypass

Backend Infrastructure:
- Node.js/Express server with comprehensive error handling
- Database models: User, Assistant, Conversation, Message
- Chat API endpoints with full conversation history context
- Conversation CRUD operations with soft delete
- Migration and seeding scripts
- Environment-based configuration

Frontend Features:
- Responsive Vue.js interface with router
- Real-time chat with streaming responses
- Conversation sidebar with delete functionality
- Agent selection dropdown
- Persistent user sessions with hash-based user IDs
- Conversation history loading and continuity
- Login system with user role management
- Prominent logout functionality

Technical Improvements:
- Fixed conversation continuity by loading full message history
- Implemented conversation title generation using GPT-4o-mini
- Added conversation persistence mechanisms (periodic refresh, window focus)
- Enhanced error handling and rate limiting
- Proper environment variable management
- Clean project structure with separated concerns

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-03 13:08:26 -04:00

53 lines
No EOL
1.1 KiB
JavaScript

const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');
const Message = sequelize.define('Message', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
conversationId: {
type: DataTypes.UUID,
allowNull: false,
references: {
model: 'conversations',
key: 'id',
},
},
role: {
type: DataTypes.ENUM('user', 'assistant', 'system'),
allowNull: false,
},
content: {
type: DataTypes.TEXT,
allowNull: false,
},
metadata: {
type: DataTypes.JSONB,
defaultValue: {},
},
tokenCount: {
type: DataTypes.INTEGER,
allowNull: true,
},
model: {
type: DataTypes.STRING,
allowNull: true,
},
finishReason: {
type: DataTypes.STRING,
allowNull: true,
},
}, {
tableName: 'messages',
timestamps: true,
indexes: [
{ fields: ['conversationId'] },
{ fields: ['role'] },
{ fields: ['createdAt'] },
{ fields: ['conversationId', 'createdAt'] },
],
});
module.exports = Message;