mirror of https://github.com/nocodb/nocodb
mertmit
1 year ago
8 changed files with 156 additions and 280 deletions
@ -0,0 +1,70 @@ |
|||||||
|
import { |
||||||
|
Controller, |
||||||
|
HttpCode, |
||||||
|
Inject, |
||||||
|
Param, |
||||||
|
Post, |
||||||
|
Request, |
||||||
|
UseGuards, |
||||||
|
} from '@nestjs/common'; |
||||||
|
import { GlobalGuard } from '~/guards/global/global.guard'; |
||||||
|
import { Acl } from '~/middlewares/extract-ids/extract-ids.middleware'; |
||||||
|
import { NcError } from '~/helpers/catchError'; |
||||||
|
import { JobTypes } from '~/interface/Jobs'; |
||||||
|
|
||||||
|
@Controller() |
||||||
|
@UseGuards(GlobalGuard) |
||||||
|
export class MetaSyncController { |
||||||
|
constructor(@Inject('JobsService') private readonly jobsService) {} |
||||||
|
|
||||||
|
@Post('/api/v1/db/meta/projects/:projectId/meta-diff') |
||||||
|
@HttpCode(200) |
||||||
|
@Acl('metaDiffSync') |
||||||
|
async metaDiffSync(@Param('projectId') projectId: string, @Request() req) { |
||||||
|
const jobs = await this.jobsService.jobList(); |
||||||
|
const fnd = jobs.find( |
||||||
|
(j) => j.name === JobTypes.MetaSync && j.data.projectId === projectId, |
||||||
|
); |
||||||
|
|
||||||
|
if (fnd) { |
||||||
|
NcError.badRequest('Meta sync already in progress for this project'); |
||||||
|
} |
||||||
|
|
||||||
|
const job = await this.jobsService.add(JobTypes.MetaSync, { |
||||||
|
projectId, |
||||||
|
baseId: 'all', |
||||||
|
user: req.user, |
||||||
|
}); |
||||||
|
|
||||||
|
return { id: job.id }; |
||||||
|
} |
||||||
|
|
||||||
|
@Post('/api/v1/db/meta/projects/:projectId/meta-diff/:baseId') |
||||||
|
@HttpCode(200) |
||||||
|
@Acl('baseMetaDiffSync') |
||||||
|
async baseMetaDiffSync( |
||||||
|
@Param('projectId') projectId: string, |
||||||
|
@Param('baseId') baseId: string, |
||||||
|
@Request() req, |
||||||
|
) { |
||||||
|
const jobs = await this.jobsService.jobList(); |
||||||
|
const fnd = jobs.find( |
||||||
|
(j) => |
||||||
|
j.name === JobTypes.MetaSync && |
||||||
|
j.data.projectId === projectId && |
||||||
|
(j.data.baseId === baseId || j.data.baseId === 'all'), |
||||||
|
); |
||||||
|
|
||||||
|
if (fnd) { |
||||||
|
NcError.badRequest('Meta sync already in progress for this project'); |
||||||
|
} |
||||||
|
|
||||||
|
const job = await this.jobsService.add(JobTypes.MetaSync, { |
||||||
|
projectId, |
||||||
|
baseId, |
||||||
|
user: req.user, |
||||||
|
}); |
||||||
|
|
||||||
|
return { id: job.id }; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
import debug from 'debug'; |
||||||
|
import { Process, Processor } from '@nestjs/bull'; |
||||||
|
import { Job } from 'bull'; |
||||||
|
import { JOBS_QUEUE, JobTypes } from '~/interface/Jobs'; |
||||||
|
import { MetaDiffsService } from '~/services/meta-diffs.service'; |
||||||
|
|
||||||
|
@Processor(JOBS_QUEUE) |
||||||
|
export class MetaSyncProcessor { |
||||||
|
private readonly debugLog = debug('nc:meta-sync:processor'); |
||||||
|
|
||||||
|
constructor(private readonly metaDiffsService: MetaDiffsService) {} |
||||||
|
|
||||||
|
@Process(JobTypes.MetaSync) |
||||||
|
async job(job: Job) { |
||||||
|
const info: { |
||||||
|
projectId: string; |
||||||
|
baseId: string; |
||||||
|
user: any; |
||||||
|
} = job.data; |
||||||
|
|
||||||
|
if (info.baseId === 'all') { |
||||||
|
await this.metaDiffsService.metaDiffSync({ projectId: info.projectId }); |
||||||
|
} else { |
||||||
|
await this.metaDiffsService.baseMetaDiffSync({ |
||||||
|
projectId: info.projectId, |
||||||
|
baseId: info.baseId, |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue