11import {
2+ injectBaseOutboxService ,
23 WithBaseId ,
34 WithBaseSpaceId ,
4- injectBaseOutboxService ,
55 type Base ,
66 type IBaseOutboxService ,
77 type IBaseRepository ,
@@ -10,9 +10,11 @@ import {
1010import { executionContext , mustGetCurrentSpaceId } from "@undb/context/server"
1111import { inject , singleton } from "@undb/di"
1212import { None , Some , type Option } from "@undb/domain"
13+ import { injectTableRepository , TableBaseIdSpecification , type ITableRepository } from "@undb/table"
1314import { getCurrentTransaction } from "../ctx"
1415import type { IQueryBuilder } from "../qb"
1516import { injectQueryBuilder } from "../qb.provider"
17+ import { UnderlyingTableService } from "../underlying/underlying-table.service"
1618import { BaseFilterVisitor } from "./base.filter-visitor"
1719import { BaseMapper } from "./base.mapper"
1820import { BaseMutateVisitor } from "./base.mutate-visitor"
@@ -26,6 +28,10 @@ export class BaseRepository implements IBaseRepository {
2628 private readonly outboxService : IBaseOutboxService ,
2729 @injectQueryBuilder ( )
2830 private readonly qb : IQueryBuilder ,
31+ @injectTableRepository ( )
32+ private readonly tableRepository : ITableRepository ,
33+ @inject ( UnderlyingTableService )
34+ private readonly underlyingTableService : UnderlyingTableService ,
2935 ) { }
3036
3137 async find ( spec : IBaseSpecification ) : Promise < Base [ ] > {
@@ -101,7 +107,37 @@ export class BaseRepository implements IBaseRepository {
101107 await this . outboxService . save ( base )
102108 }
103109
104- deleteOneById ( id : string ) : Promise < void > {
105- throw new Error ( "Method not implemented." )
110+ async deleteOneById ( id : string ) : Promise < void > {
111+ const trx = getCurrentTransaction ( )
112+
113+ const tables = await this . tableRepository . find ( Some ( new TableBaseIdSpecification ( id ) ) )
114+ const tableIds = tables . map ( ( t ) => t . id . value )
115+
116+ await trx
117+ . deleteFrom ( "undb_table_id_mapping" )
118+ . where ( ( eb ) => eb . eb ( "table_id" , "in" , tableIds ) )
119+ . execute ( )
120+
121+ await trx
122+ . deleteFrom ( "undb_rollup_id_mapping" )
123+ . where ( ( eb ) => eb . eb ( "table_id" , "in" , tableIds ) )
124+ . execute ( )
125+
126+ await trx
127+ . deleteFrom ( "undb_reference_id_mapping" )
128+ . where ( ( eb ) => eb . eb ( "table_id" , "in" , tableIds ) )
129+ . execute ( )
130+
131+ await trx
132+ . deleteFrom ( "undb_table" )
133+ . where ( ( eb ) => eb . eb ( "id" , "in" , tableIds ) )
134+ . execute ( )
135+
136+ await trx
137+ . deleteFrom ( "undb_base" )
138+ . where ( ( eb ) => eb . eb ( "id" , "=" , id ) )
139+ . execute ( )
140+
141+ await this . underlyingTableService . deleteTables ( tables )
106142 }
107143}
0 commit comments