Files
sena_db_api_layer/models/Vocab.js
silverpro89 2c7b4675a7 update
2026-01-26 20:23:08 +07:00

91 lines
2.4 KiB
JavaScript

const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');
const Vocab = sequelize.define('Vocab', {
vocab_id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
comment: 'Unique identifier for vocabulary entry'
},
vocab_code: {
type: DataTypes.STRING(50),
unique: true,
allowNull: false,
comment: 'Unique code for vocabulary (e.g., vocab-001-eat)'
},
base_word: {
type: DataTypes.STRING(100),
allowNull: false,
comment: 'Base form of the word'
},
translation: {
type: DataTypes.STRING(200),
allowNull: false,
comment: 'Vietnamese translation'
},
difficulty_score: {
type: DataTypes.INTEGER,
defaultValue: 1,
comment: 'Difficulty level (1-10)'
},
category: {
type: DataTypes.STRING(100),
comment: 'Category of the word (e.g., Action Verbs, Nouns)'
},
images: {
type: DataTypes.JSON,
comment: 'Array of image URLs'
},
tags: {
type: DataTypes.JSON,
comment: 'Array of tags for categorization'
},
syntax: {
type: DataTypes.JSON,
comment: 'Syntax roles for Grammar Engine (is_subject, is_verb, is_object, is_be, is_adj, is_adv, is_article, verb_type, article_type, adv_type, position, priority, etc.)'
},
semantics: {
type: DataTypes.JSON,
comment: 'Semantic constraints (can_be_subject_type, can_take_object_type, can_modify, cannot_modify, word_type, is_countable, person_type, etc.)'
},
constraints: {
type: DataTypes.JSON,
comment: 'Grammar constraints (followed_by, match_subject, match_with, phonetic_rules, etc.)'
},
is_active: {
type: DataTypes.BOOLEAN,
defaultValue: true,
comment: 'Whether this vocab entry is active'
},
created_at: {
type: DataTypes.DATE,
defaultValue: DataTypes.NOW
},
updated_at: {
type: DataTypes.DATE,
defaultValue: DataTypes.NOW
}
}, {
tableName: 'vocab',
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at',
indexes: [
{
name: 'idx_vocab_code',
fields: ['vocab_code']
},
{
name: 'idx_base_word',
fields: ['base_word']
},
{
name: 'idx_category',
fields: ['category']
}
]
});
module.exports = Vocab;