118 lines
2.5 KiB
TypeScript
118 lines
2.5 KiB
TypeScript
import { sequelize } from '../../../modules/sequelize.ts';
|
||
import { DataTypes, Model } from 'sequelize';
|
||
|
||
type AppPermissionType = 'public' | 'private' | 'protected';
|
||
export interface AppData {
|
||
files: { name: string; path: string }[];
|
||
permission?: {
|
||
// 访问权限
|
||
type: AppPermissionType; // public, private(Only Self), protected(protected, 通过配置访问)
|
||
users?: string[];
|
||
orgs?: string[];
|
||
};
|
||
}
|
||
export type AppType = 'web-single' | 'web-module'; // 可以做到网页代理
|
||
export enum AppStatus {
|
||
running = 'running',
|
||
stop = 'stop',
|
||
}
|
||
export type App = Partial<InstanceType<typeof AppModel>>;
|
||
|
||
/**
|
||
* APP 管理
|
||
*/
|
||
export class AppModel extends Model {
|
||
declare id: string;
|
||
declare data: AppData;
|
||
declare title: string;
|
||
declare description: string;
|
||
declare version: string;
|
||
declare domain: string;
|
||
declare appType: string;
|
||
declare key: string;
|
||
declare type: string;
|
||
declare uid: string;
|
||
declare pid: string;
|
||
// 是否是history路由代理模式。静态的直接转minio,而不需要缓存下来。
|
||
declare proxy: boolean;
|
||
declare user: string;
|
||
declare status: string;
|
||
}
|
||
AppModel.init(
|
||
{
|
||
id: {
|
||
type: DataTypes.UUID,
|
||
primaryKey: true,
|
||
defaultValue: DataTypes.UUIDV4,
|
||
comment: 'id',
|
||
},
|
||
title: {
|
||
type: DataTypes.STRING,
|
||
defaultValue: '',
|
||
},
|
||
description: {
|
||
type: DataTypes.STRING,
|
||
defaultValue: '',
|
||
},
|
||
data: {
|
||
type: DataTypes.JSONB,
|
||
defaultValue: {},
|
||
},
|
||
version: {
|
||
type: DataTypes.STRING,
|
||
defaultValue: '',
|
||
},
|
||
domain: {
|
||
type: DataTypes.STRING,
|
||
defaultValue: '',
|
||
},
|
||
appType: {
|
||
type: DataTypes.STRING,
|
||
defaultValue: '',
|
||
},
|
||
key: {
|
||
type: DataTypes.STRING,
|
||
// 和 uid 组合唯一
|
||
},
|
||
type: {
|
||
type: DataTypes.STRING,
|
||
defaultValue: '',
|
||
},
|
||
uid: {
|
||
type: DataTypes.UUID,
|
||
allowNull: true,
|
||
},
|
||
pid: {
|
||
type: DataTypes.UUID,
|
||
allowNull: true,
|
||
},
|
||
proxy: {
|
||
type: DataTypes.BOOLEAN,
|
||
defaultValue: false,
|
||
},
|
||
user: {
|
||
type: DataTypes.STRING,
|
||
allowNull: true,
|
||
},
|
||
status: {
|
||
type: DataTypes.STRING,
|
||
defaultValue: 'running', // stop, running
|
||
},
|
||
},
|
||
{
|
||
sequelize,
|
||
tableName: 'kv_app',
|
||
paranoid: true,
|
||
indexes: [
|
||
{
|
||
unique: true,
|
||
fields: ['key', 'uid'],
|
||
},
|
||
],
|
||
},
|
||
);
|
||
|
||
AppModel.sync({ alter: true, logging: false }).catch((e) => {
|
||
console.error('AppModel sync', e);
|
||
});
|