tududi/backend/models/view.js
Chris b0b613f7bd
Reorder elements (#687)
* Reorder elements

* Enhance global search
2025-12-09 10:51:51 +02:00

104 lines
3 KiB
JavaScript

const { DataTypes } = require('sequelize');
const { uid } = require('../utils/uid');
module.exports = (sequelize) => {
const View = sequelize.define(
'View',
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
uid: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
defaultValue: uid,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
user_id: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'users',
key: 'id',
},
},
search_query: {
type: DataTypes.STRING,
allowNull: true,
},
filters: {
type: DataTypes.TEXT,
allowNull: true,
get() {
const rawValue = this.getDataValue('filters');
return rawValue ? JSON.parse(rawValue) : [];
},
set(value) {
this.setDataValue('filters', JSON.stringify(value));
},
},
priority: {
type: DataTypes.STRING,
allowNull: true,
},
due: {
type: DataTypes.STRING,
allowNull: true,
},
defer: {
type: DataTypes.STRING,
allowNull: true,
},
tags: {
type: DataTypes.TEXT,
allowNull: true,
get() {
const rawValue = this.getDataValue('tags');
return rawValue ? JSON.parse(rawValue) : [];
},
set(value) {
this.setDataValue('tags', JSON.stringify(value));
},
},
extras: {
type: DataTypes.TEXT,
allowNull: true,
get() {
const rawValue = this.getDataValue('extras');
return rawValue ? JSON.parse(rawValue) : [];
},
set(value) {
this.setDataValue('extras', JSON.stringify(value));
},
},
recurring: {
type: DataTypes.STRING,
allowNull: true,
},
is_pinned: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
},
{
tableName: 'views',
indexes: [
{
fields: ['user_id'],
},
{
fields: ['user_id', 'is_pinned'],
},
],
}
);
return View;
};