220 lines
6.1 KiB
TypeScript
220 lines
6.1 KiB
TypeScript
import { Context } from 'hono';
|
|
import { FeatureComputationService } from '../services/FeatureComputationService';
|
|
import { Logger } from '@stock-bot/utils';
|
|
import {
|
|
ComputationJob,
|
|
CreateComputationJobRequest,
|
|
UpdateComputationJobRequest
|
|
} from '../types/FeatureStore';
|
|
|
|
export class ComputationController {
|
|
constructor(
|
|
private computationService: FeatureComputationService,
|
|
private logger: Logger
|
|
) {}
|
|
|
|
async createComputationJob(c: Context) {
|
|
try {
|
|
const request: CreateComputationJobRequest = await c.req.json();
|
|
|
|
const job = await this.computationService.createComputationJob(request);
|
|
|
|
this.logger.info('Computation job created', { jobId: job.id });
|
|
|
|
return c.json({
|
|
success: true,
|
|
data: job
|
|
}, 201);
|
|
} catch (error) {
|
|
this.logger.error('Failed to create computation job', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
|
|
async getComputationJob(c: Context) {
|
|
try {
|
|
const jobId = c.req.param('id');
|
|
|
|
const job = await this.computationService.getComputationJob(jobId);
|
|
|
|
if (!job) {
|
|
return c.json({
|
|
success: false,
|
|
error: 'Computation job not found'
|
|
}, 404);
|
|
}
|
|
|
|
return c.json({
|
|
success: true,
|
|
data: job
|
|
});
|
|
} catch (error) {
|
|
this.logger.error('Failed to get computation job', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
|
|
async updateComputationJob(c: Context) {
|
|
try {
|
|
const jobId = c.req.param('id');
|
|
const request: UpdateComputationJobRequest = await c.req.json();
|
|
|
|
const job = await this.computationService.updateComputationJob(jobId, request);
|
|
|
|
if (!job) {
|
|
return c.json({
|
|
success: false,
|
|
error: 'Computation job not found'
|
|
}, 404);
|
|
}
|
|
|
|
this.logger.info('Computation job updated', { jobId });
|
|
|
|
return c.json({
|
|
success: true,
|
|
data: job
|
|
});
|
|
} catch (error) {
|
|
this.logger.error('Failed to update computation job', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
|
|
async deleteComputationJob(c: Context) {
|
|
try {
|
|
const jobId = c.req.param('id');
|
|
|
|
await this.computationService.deleteComputationJob(jobId);
|
|
|
|
this.logger.info('Computation job deleted', { jobId });
|
|
|
|
return c.json({
|
|
success: true,
|
|
message: 'Computation job deleted successfully'
|
|
});
|
|
} catch (error) {
|
|
this.logger.error('Failed to delete computation job', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
|
|
async listComputationJobs(c: Context) {
|
|
try {
|
|
const featureGroupId = c.req.query('featureGroupId');
|
|
const status = c.req.query('status');
|
|
|
|
const jobs = await this.computationService.listComputationJobs({
|
|
featureGroupId,
|
|
status: status as any
|
|
});
|
|
|
|
return c.json({
|
|
success: true,
|
|
data: jobs
|
|
});
|
|
} catch (error) {
|
|
this.logger.error('Failed to list computation jobs', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
|
|
async executeComputationJob(c: Context) {
|
|
try {
|
|
const jobId = c.req.param('id');
|
|
|
|
const result = await this.computationService.executeComputationJob(jobId);
|
|
|
|
this.logger.info('Computation job executed', { jobId, result });
|
|
|
|
return c.json({
|
|
success: true,
|
|
data: result
|
|
});
|
|
} catch (error) {
|
|
this.logger.error('Failed to execute computation job', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
|
|
async scheduleComputationJob(c: Context) {
|
|
try {
|
|
const jobId = c.req.param('id');
|
|
const { schedule } = await c.req.json();
|
|
|
|
await this.computationService.scheduleComputationJob(jobId, schedule);
|
|
|
|
this.logger.info('Computation job scheduled', { jobId, schedule });
|
|
|
|
return c.json({
|
|
success: true,
|
|
message: 'Computation job scheduled successfully'
|
|
});
|
|
} catch (error) {
|
|
this.logger.error('Failed to schedule computation job', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
|
|
async unscheduleComputationJob(c: Context) {
|
|
try {
|
|
const jobId = c.req.param('id');
|
|
|
|
await this.computationService.unscheduleComputationJob(jobId);
|
|
|
|
this.logger.info('Computation job unscheduled', { jobId });
|
|
|
|
return c.json({
|
|
success: true,
|
|
message: 'Computation job unscheduled successfully'
|
|
});
|
|
} catch (error) {
|
|
this.logger.error('Failed to unschedule computation job', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
|
|
async getComputationJobHistory(c: Context) {
|
|
try {
|
|
const jobId = c.req.param('id');
|
|
const limit = parseInt(c.req.query('limit') || '10');
|
|
const offset = parseInt(c.req.query('offset') || '0');
|
|
|
|
const history = await this.computationService.getComputationJobHistory(jobId, limit, offset);
|
|
|
|
return c.json({
|
|
success: true,
|
|
data: history
|
|
});
|
|
} catch (error) {
|
|
this.logger.error('Failed to get computation job history', { error });
|
|
return c.json({
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Unknown error'
|
|
}, 500);
|
|
}
|
|
}
|
|
}
|