11import { type FastifyReply , type FastifyRequest } from 'fastify' ;
22import { type Static } from '@sinclair/typebox'
3- import { TaskSchema } from '../schemas/taskSchema'
4- import TaskManager from '../TaskManager '
5- import { Task } from '../../../objects/BoardTask' ;
3+ import { TaskSchema } from '../schemas/taskSchema.ts '
4+ import TaskBoardIPFS from '../../ipfs/TaskBoardIPFS.ts '
5+ import { Task } from '../../../objects/BoardTask.ts ' ;
66
77type TaskBody = Static < typeof TaskSchema >
88
9- const IPFS = new TaskManager ( )
9+ const IPFS = TaskBoardIPFS . getInstance ( )
1010
1111export async function createTaskController (
1212 request : FastifyRequest < { Body : TaskBody } > ,
1313 reply : FastifyReply
1414) {
15- const task = new Task ( request . body )
16- const cid = await IPFS . addTask ( task )
17- reply . code ( 201 ) . send ( { ...task . toJSON ( ) , createdAt : task . createdAt , ipfsCid : cid } )
15+ try {
16+ const task = new Task ( request . body )
17+ const cid = await IPFS . addTask ( task )
18+ return reply . code ( 201 ) . send ( { ...task . toJSON ( ) , createdAt : task . createdAt , ipfsCid : cid } )
19+ } catch ( error ) {
20+ request . log . error ( error )
21+ return reply . code ( 500 ) . send ( {
22+ error : 'Failed to create task' ,
23+ message : 'Could not create task. Please try again later.'
24+ } )
25+ }
26+
1827}
1928
2029
2130export async function getTasksController (
2231 request : FastifyRequest < { Querystring : { limit ?: number ; offset ?: number ; difficulty ?: string } } > ,
2332 reply : FastifyReply
2433) {
25- const { limit = 10 , offset = 0 , difficulty } = request . query
26- const filters : any = { }
27- if ( difficulty ) filters . difficulty = difficulty
34+ try {
35+ const { limit = 10 , offset = 0 , difficulty } = request . query
36+ const filters : any = { }
37+ if ( difficulty ) filters . difficulty = difficulty
2838
29- const tasks = await IPFS . getTasks ( limit , offset , filters )
30- reply . send ( tasks . map ( t => ( { ...t . toJSON ( ) , createdAt : t . createdAt , ipfsCid : t . ipfsCid } ) ) )
39+ const tasks = await IPFS . getTasks ( limit , offset , filters )
40+
41+ if ( tasks . length === 0 ) {
42+ return reply . code ( 404 ) . send ( {
43+ error : 'No tasks found' ,
44+ message : 'No tasks match the provided criteria.'
45+ } )
46+ } else {
47+ reply . code ( 200 ) . send ( tasks . map ( t => ( { ...t . toJSON ( ) , createdAt : t . createdAt , ipfsCid : t . ipfsCid } ) ) )
48+ }
49+ } catch ( error ) {
50+ reply . code ( 500 ) . send ( {
51+ error : 'Failed to fetch tasks' ,
52+ message : 'Could not retrieve tasks. Please try again later.'
53+ } )
54+ }
3155}
3256
3357
3458export async function deleteTaskController (
3559 request : FastifyRequest < { Params : { cid : string } } > ,
3660 reply : FastifyReply
3761) {
38- await IPFS . deleteTask ( request . params . cid )
39- reply . code ( 204 ) . send ( )
62+ try {
63+ const { cid } = request . params
64+ await IPFS . deleteTask ( cid )
65+ return reply . code ( 204 ) . send ( )
66+ } catch ( error ) {
67+ request . log . error ( error )
68+ return reply . code ( 500 ) . send ( {
69+ error : 'Failed to delete task' ,
70+ message : 'Could not delete task. Please try again later.'
71+ } )
72+ }
4073}
0 commit comments