@@ -30,6 +30,27 @@ class MongoMonitorRepository implements IMonitorRepository {
3030 } ;
3131 } ;
3232
33+ // Create
34+ create = async (
35+ orgId : string ,
36+ userId : string ,
37+ currentTeamId : string ,
38+ monitorData : MonitorEntity
39+ ) => {
40+ const monitorLiteral : Partial < IMonitor > = {
41+ ...monitorData ,
42+ orgId : new mongoose . Types . ObjectId ( orgId ) ,
43+ teamId : new mongoose . Types . ObjectId ( currentTeamId ) ,
44+ createdBy : new mongoose . Types . ObjectId ( userId ) ,
45+ updatedBy : new mongoose . Types . ObjectId ( userId ) ,
46+ notificationChannels : monitorData . notificationChannels ?. map (
47+ ( id ) => new mongoose . Types . ObjectId ( id )
48+ ) ,
49+ } ;
50+ const monitor = await Monitor . create ( monitorLiteral ) ;
51+ return this . toEntity ( monitor ) ;
52+ } ;
53+
3354 // Single fetch
3455 findById = async ( monitorId : string , teamId : string ) => {
3556 const monitor = await Monitor . findOne ( { _id : monitorId , teamId } ) ;
@@ -38,6 +59,11 @@ class MongoMonitorRepository implements IMonitorRepository {
3859 } ;
3960
4061 // Collection fetches
62+ findAll = async ( ) => {
63+ const monitors = await Monitor . find ( ) ;
64+ return monitors . map ( this . toEntity ) ;
65+ } ;
66+
4167 findByTeamId = async ( teamId : string ) => {
4268 const monitors = await Monitor . find ( { teamId } ) ;
4369 return monitors . map ( this . toEntity ) ;
@@ -81,8 +107,10 @@ class MongoMonitorRepository implements IMonitorRepository {
81107
82108 return monitors . map ( this . toEntity ) ;
83109 } ;
110+
84111 findByOrgId = async ( orgId : string ) => {
85- return [ ] ;
112+ const monitors = await Monitor . find ( { orgId } ) ;
113+ return monitors . map ( this . toEntity ) ;
86114 } ;
87115
88116 findMonitorCountsByTeamId = async ( teamId : string ) => {
@@ -115,12 +143,69 @@ class MongoMonitorRepository implements IMonitorRepository {
115143 } ;
116144
117145 // Deletions
118- deleteById = async ( id : string ) => {
119- return false ;
146+ deleteById = async ( monitorId : string , teamId : string ) => {
147+ await Monitor . deleteOne ( { _id : monitorId , teamId } ) ;
148+ return true ;
120149 } ;
121150 deleteByOrgId = async ( orgId : string ) => {
122- return 0 ;
151+ const deleted = await Monitor . deleteMany ( { orgId } ) ;
152+ return deleted . acknowledged ;
123153 } ;
154+
155+ togglePauseById = async (
156+ monitorId : string ,
157+ teamId : string ,
158+ userId : string
159+ ) => {
160+ const monitor = await Monitor . findOneAndUpdate (
161+ { _id : monitorId , teamId } ,
162+ [
163+ {
164+ $set : {
165+ status : {
166+ $cond : {
167+ if : { $eq : [ "$status" , "paused" ] } ,
168+ then : "resuming" ,
169+ else : "paused" ,
170+ } ,
171+ } ,
172+ updatedBy : userId ,
173+ updatedAt : new Date ( ) ,
174+ } ,
175+ } ,
176+ ] ,
177+ { new : true }
178+ ) ;
179+ if ( ! monitor ) return null ;
180+ return this . toEntity ( monitor ) ;
181+ } ;
182+
183+ // Update
184+ updateById = async (
185+ monitorId : string ,
186+ teamId : string ,
187+ userId : string ,
188+ patch : Partial < MonitorEntity >
189+ ) => {
190+ const updatedMonitor = await Monitor . findOneAndUpdate (
191+ { _id : monitorId , teamId } ,
192+ {
193+ $set : {
194+ ...patch ,
195+ updatedAt : new Date ( ) ,
196+ updatedBy : userId ,
197+ } ,
198+ } ,
199+ { new : true , runValidators : true }
200+ ) ;
201+ if ( ! updatedMonitor ) return null ;
202+ return this . toEntity ( updatedMonitor ) ;
203+ } ;
204+
205+ // Counts
206+ countByOrgId ( orgId : string ) : Promise < number > {
207+ return Monitor . countDocuments ( { orgId } ) ;
208+ }
124209}
125210
126211export default MongoMonitorRepository ;
0 commit comments