1- import { SurveyType } from "../models/survey.model.js" ;
21import mongoose from 'mongoose' ;
32import SequenceService from './sequence.service.js' ;
43import logger from "./logger.js" ;
54
5+ // Define the SurveyType interface here instead of importing it
6+ export interface SurveyType {
7+ id : number ;
8+ userId : string ;
9+ org ?: string ;
10+ repo ?: string ;
11+ prNumber ?: number ;
12+ usedCopilot ?: boolean ;
13+ percentTimeSaved ?: number ;
14+ reason ?: string ;
15+ timeUsedFor ?: string ;
16+ kudos ?: number ;
17+ status ?: string ;
18+ hits ?: number ;
19+ createdAt ?: Date ;
20+ updatedAt ?: Date ;
21+ }
22+
623class SurveyService {
724
825 async createSurvey ( survey : SurveyType ) {
@@ -48,6 +65,49 @@ class SurveyService {
4865 }
4966 } ) . sort ( { updatedAt : - 1 } ) . limit ( 20 ) . exec ( ) ;
5067 }
68+
69+ /**
70+ * Get all surveys based on filtering criteria
71+ */
72+ async getAllSurveys ( params : {
73+ org ?: string ;
74+ team ?: string ;
75+ reasonLength ?: string ;
76+ since ?: string ;
77+ until ?: string ;
78+ status ?: string ;
79+ } ) {
80+ const { org, team, reasonLength, since, until, status } = params ;
81+
82+ const dateFilter : mongoose . FilterQuery < {
83+ $gte : Date ;
84+ $lte : Date ;
85+ } > = { } ;
86+
87+ if ( since ) {
88+ dateFilter . $gte = new Date ( since ) ;
89+ }
90+ if ( until ) {
91+ dateFilter . $lte = new Date ( until ) ;
92+ }
93+
94+ const query = {
95+ filter : {
96+ ...( org ? { org : String ( org ) } : { } ) ,
97+ ...( team ? { team : String ( team ) } : { } ) ,
98+ ...( reasonLength ? { $expr : { $and : [ { $gt : [ { $strLenCP : { $ifNull : [ '$reason' , '' ] } } , 40 ] } , { $ne : [ '$reason' , null ] } ] } } : { } ) ,
99+ ...( Object . keys ( dateFilter ) . length > 0 ? { createdAt : dateFilter } : { } ) ,
100+ ...( status ? { status } : { } ) ,
101+ } ,
102+ projection : {
103+ _id : 0 ,
104+ __v : 0 ,
105+ }
106+ } ;
107+
108+ const Survey = mongoose . model ( 'Survey' ) ;
109+ return Survey . find ( query . filter , query . projection ) ;
110+ }
51111}
52112
53113export default new SurveyService ( ) ;
0 commit comments