- Implemented routes for listing, retrieving, updating, and deleting containers. - Added ContainerModel with necessary fields and methods for data handling. - Created utility functions for fetching container data by ID. feat(page): enhance page management with CRUD and publish functionality - Developed routes for managing pages, including listing, updating, and deleting. - Integrated caching and zip file generation for page exports. - Added publish functionality to manage app versions and file uploads. feat(prompts): implement prompt management with CRUD operations - Created routes for listing, updating, and deleting prompts. - Added pagination and search capabilities for prompt listing. test: add common query utilities and prompt tests - Implemented common query utilities for API interactions. - Added tests for prompt listing functionality.
109 lines
2.5 KiB
TypeScript
109 lines
2.5 KiB
TypeScript
import { CustomError } from '@kevisual/router';
|
|
import { app } from '../../app.ts';
|
|
import { ContainerModel, ContainerData, Container } from './models/index.ts';
|
|
|
|
app
|
|
.route({
|
|
path: 'container',
|
|
key: 'list',
|
|
middleware: ['auth'],
|
|
})
|
|
.define(async (ctx) => {
|
|
const tokenUser = ctx.state.tokenUser;
|
|
const list = await ContainerModel.findAll({
|
|
order: [['updatedAt', 'DESC']],
|
|
where: {
|
|
uid: tokenUser.id,
|
|
},
|
|
attributes: { exclude: ['code'] },
|
|
});
|
|
ctx.body = list;
|
|
return ctx;
|
|
})
|
|
.addTo(app);
|
|
|
|
app
|
|
.route({
|
|
path: 'container',
|
|
key: 'get',
|
|
middleware: ['auth'],
|
|
})
|
|
.define(async (ctx) => {
|
|
const tokenUser = ctx.state.tokenUser;
|
|
const id = ctx.query.id;
|
|
if (!id) {
|
|
throw new CustomError('id is required');
|
|
}
|
|
const container = await ContainerModel.findByPk(id);
|
|
if (!container) {
|
|
throw new CustomError('container not found');
|
|
}
|
|
if (container.uid !== tokenUser.id) {
|
|
throw new CustomError('container not found');
|
|
}
|
|
ctx.body = container;
|
|
return ctx;
|
|
})
|
|
.addTo(app);
|
|
|
|
app
|
|
.route({
|
|
path: 'container',
|
|
key: 'update',
|
|
middleware: ['auth'],
|
|
})
|
|
.define(async (ctx) => {
|
|
const tokenUser = ctx.state.tokenUser;
|
|
const data = ctx.query.data;
|
|
const { id, ...container } = data;
|
|
let containerModel: ContainerModel | null = null;
|
|
if (id) {
|
|
containerModel = await ContainerModel.findByPk(id);
|
|
if (containerModel) {
|
|
containerModel.update({
|
|
...container,
|
|
publish: {
|
|
...containerModel.publish,
|
|
...container.publish,
|
|
},
|
|
});
|
|
await containerModel.save();
|
|
}
|
|
} else {
|
|
try {
|
|
containerModel = await ContainerModel.create({
|
|
...container,
|
|
uid: tokenUser.id,
|
|
});
|
|
} catch (e) {
|
|
console.log('error', e);
|
|
}
|
|
console.log('containerModel', container);
|
|
}
|
|
ctx.body = containerModel;
|
|
return ctx;
|
|
})
|
|
.addTo(app);
|
|
|
|
app
|
|
.route({
|
|
path: 'container',
|
|
key: 'delete',
|
|
middleware: ['auth'],
|
|
})
|
|
.define(async (ctx) => {
|
|
const tokenUser = ctx.state.tokenUser;
|
|
const id = ctx.query.id;
|
|
const container = await ContainerModel.findByPk(id);
|
|
if (!container) {
|
|
throw new CustomError('container not found');
|
|
}
|
|
if (container.uid !== tokenUser.id) {
|
|
throw new CustomError('container not found');
|
|
}
|
|
await container.destroy();
|
|
ctx.body = container;
|
|
return ctx;
|
|
})
|
|
.addTo(app);
|