2024-11-10 21:12:45 +08:00

130 lines
2.6 KiB
TypeScript

import type { App, RouteContext } from '@kevisual/router';
import { DataTypes, Model } from 'sequelize';
type AppContext = {
import: any;
sequelize: any;
};
type Ctx = RouteContext<AppContext>;
class Favorite extends Model {
declare id: string;
declare title: string;
declare description: string;
declare cover: string;
declare url: string;
declare share: boolean;
declare tags: string[];
declare uid: string;
declare username: string;
}
export const getModel = async (ctx: Ctx) => {
const sequelize = ctx.sequelize;
if (!sequelize) {
ctx.throw?.('sequelize instance not found');
}
Favorite.init(
{
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
},
cover: {
type: DataTypes.TEXT,
allowNull: true,
defaultValue: '',
},
title: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: '',
},
description: {
type: DataTypes.TEXT,
allowNull: true,
},
url: {
type: DataTypes.TEXT,
allowNull: false,
},
share: {
type: DataTypes.BOOLEAN,
defaultValue: false,
},
tags: {
type: DataTypes.JSONB,
defaultValue: [],
},
uid: {
type: DataTypes.UUID,
allowNull: false,
},
username: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: '',
},
},
{
sequelize,
modelName: 'apps_favorite',
},
);
return Favorite;
};
/**
* 初始化模型
* @param ctx
*/
export const initModel = async (ctx: RouteContext<AppContext>) => {
try {
const Favorite = await getModel(ctx);
const res = await Favorite.sync({ alter: true });
ctx.body = 'success';
} catch (error) {
console.error(error);
ctx.throw?.(error.message);
}
};
export const render = (app: App) => {
app
.route({
path: 'nav',
key: 'init',
middleware: ['auth'],
})
.define(initModel)
.addTo(app);
app
.route({
path: 'nav',
key: 'list',
})
.define<AppContext>(async (ctx) => {
const Favorite = await getModel(ctx);
const res = await Favorite.findAll();
ctx.body = res;
})
.addTo(app);
app
.route({
path: 'nav',
key: 'delete',
})
.define(async (ctx) => {
ctx.body = 'success';
})
.addTo(app);
app
.route({
path: 'nav',
key: 'update',
})
.define(async (ctx) => {
ctx.body = 'update success';
}).addTo(app);
};