Co-authored-by: Jason Woltje <jason@diversecanvas.com> Co-committed-by: Jason Woltje <jason@diversecanvas.com>
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
HttpCode,
|
|
HttpStatus,
|
|
NotFoundException,
|
|
Param,
|
|
Patch,
|
|
Post,
|
|
UseGuards,
|
|
} from '@nestjs/common';
|
|
import { SkillsService } from './skills.service.js';
|
|
import { AuthGuard } from '../auth/auth.guard.js';
|
|
import type { CreateSkillDto, UpdateSkillDto } from './skills.dto.js';
|
|
|
|
@Controller('api/skills')
|
|
@UseGuards(AuthGuard)
|
|
export class SkillsController {
|
|
constructor(private readonly skills: SkillsService) {}
|
|
|
|
@Get()
|
|
async list() {
|
|
return this.skills.findAll();
|
|
}
|
|
|
|
@Get(':id')
|
|
async findOne(@Param('id') id: string) {
|
|
const skill = await this.skills.findById(id);
|
|
if (!skill) throw new NotFoundException('Skill not found');
|
|
return skill;
|
|
}
|
|
|
|
@Post()
|
|
async create(@Body() dto: CreateSkillDto) {
|
|
return this.skills.create({
|
|
name: dto.name,
|
|
description: dto.description,
|
|
version: dto.version,
|
|
source: dto.source,
|
|
config: dto.config,
|
|
enabled: dto.enabled,
|
|
});
|
|
}
|
|
|
|
@Patch(':id')
|
|
async update(@Param('id') id: string, @Body() dto: UpdateSkillDto) {
|
|
const skill = await this.skills.update(id, dto);
|
|
if (!skill) throw new NotFoundException('Skill not found');
|
|
return skill;
|
|
}
|
|
|
|
@Patch(':id/toggle')
|
|
async toggle(@Param('id') id: string, @Body() body: { enabled: boolean }) {
|
|
const skill = await this.skills.toggle(id, body.enabled);
|
|
if (!skill) throw new NotFoundException('Skill not found');
|
|
return skill;
|
|
}
|
|
|
|
@Delete(':id')
|
|
@HttpCode(HttpStatus.NO_CONTENT)
|
|
async remove(@Param('id') id: string) {
|
|
const deleted = await this.skills.remove(id);
|
|
if (!deleted) throw new NotFoundException('Skill not found');
|
|
}
|
|
}
|