Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions backend/src/core/api/analysis/analysis.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { AnalysisService } from 'core/modules/analysis/service/analysis.service';
import { ValidHttpResponse } from 'packages/handler/response/validHttp.response';

class Controller {
constructor() {
this.service = AnalysisService;
}

getAnalysisHistoryDetail = async req => {
const userId = req.user.payload.id;
const analysisId = req.params.id;
const data = await this.service.getAnalysisHistoryDetail(userId, analysisId);
return ValidHttpResponse.toOkResponse(data);
};
}

export const AnalysisController = new Controller();
21 changes: 21 additions & 0 deletions backend/src/core/api/analysis/analysis.resolver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { Module } from 'packages/handler/Module';
import { RecordId } from '../../common/swagger/record-id';
import { AnalysisController } from './analysis.controller';

export const AnalysisResolver = Module.builder()
.addPrefix({
prefixPath: '/analysis',
tag: 'analysis',
module: 'AnalysisModule'
})
.register([
{
route: '/history/:id',
method: 'get',
params: [RecordId],
controller: AnalysisController.getAnalysisHistoryDetail,
preAuthorization: true
}
]);


1 change: 1 addition & 0 deletions backend/src/core/api/analysis/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './analysis.resolver';
5 changes: 4 additions & 1 deletion backend/src/core/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { DocumentResolver } from 'core/api/document';
import { HandlerResolver } from '../../packages/handler/HandlerResolver';
import { AuthResolver } from './auth/auth.resolver';
import { LawResolver } from './law/law.resolver';
import { AnalysisResolver } from './analysis/analysis.resolver';

export const ModuleResolver = HandlerResolver
.builder()
Expand All @@ -20,6 +21,8 @@ export const ModuleResolver = HandlerResolver
UploadResolver,
LawResolver,
TemplateResolver,
DocumentResolver
DocumentResolver,
AnalysisResolver
]);


26 changes: 26 additions & 0 deletions backend/src/core/modules/analysis/analysis.repository.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import prisma from 'core/database';
import { BaseRepository } from '../../common/base.repository';

class Repository extends BaseRepository {
constructor() {
super('analysis');
}

async findAnalysisWithMessages(userId, analysisId) {
return prisma.analysis.findFirst({
where: {
id: analysisId,
user_id: userId,
deleted_at: null,
},
include: {
ai_messages: {
where: { deleted_at: null },
orderBy: { created_at: 'asc' },
},
},
});
}
}

export const AnalysisRepository = new Repository();
2 changes: 2 additions & 0 deletions backend/src/core/modules/analysis/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './analysis.repository';
export * from './service';
34 changes: 34 additions & 0 deletions backend/src/core/modules/analysis/service/analysis.service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { NotFoundException } from 'packages/httpException';
import { AnalysisRepository } from '../analysis.repository';

class Service {
constructor() {
this.repository = AnalysisRepository;
}

async getAnalysisHistoryDetail(userId, analysisId) {
const analysis = await this.repository.findAnalysisWithMessages(userId, analysisId);
if (!analysis) {
throw new NotFoundException(`Analysis with ID "${analysisId}" not found`);
}

return {
id: analysis.id,
userId: analysis.user_id,
inputData: analysis.input_data,
result: analysis.result,
contextSummary: analysis.context_summary,
createdAt: analysis.created_at,
updatedAt: analysis.updated_at,
aiMessages: (analysis.ai_messages || []).map(msg => ({
id: msg.id,
role: msg.role,
content: msg.content,
createdAt: msg.created_at,
updatedAt: msg.updated_at,
})),
};
}
}

export const AnalysisService = new Service();
1 change: 1 addition & 0 deletions backend/src/core/modules/analysis/service/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './analysis.service';
Loading