Backend Layer
OpenTree backend provides API service and scheduled tasks.
API Service
GET /api/keychain # Get all keys
POST /api/keychain # Create key
PUT /api/keychain/:id # Update key
DELETE /api/keychain/:id # Delete key
GET /api/favorites # Get favorites
POST /api/favorites # Add favorite
PUT /api/favorites/:id # Update favorite
DELETE /api/favorites/:id # Delete favorite
GET /api/music # Get music
POST /api/music/play/:id # Play music
...
Database
Uses SQLite + Sequelize ORM:
// packages/main/src/database/models/Keychain.ts
export const Keychain = sequelize.define('Keychain', {
id: { type: DataTypes.UUID, primaryKey: true },
name: { type: DataTypes.STRING, allowNull: false },
url: { type: DataTypes.STRING },
phone: { type: DataTypes.STRING },
email: { type: DataTypes.STRING },
password: { type: DataTypes.STRING, allowNull: false },
note: { type: DataTypes.TEXT },
createdAt: { type: DataTypes.DATE },
updatedAt: { type: DataTypes.DATE },
})
Scheduled Tasks
// Check-in reminder
cron.schedule('0 9 * * *', () => checkinReminder())
// Mail check
cron.schedule('*/10 * * * *', () => checkNewMails())
// Countdown reminder
cron.schedule('0 8 * * *', () => checkCountdowns())