mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.8 KiB
115 lines
2.8 KiB
import { Injectable } from '@nestjs/common'; |
|
import { T } from 'nc-help'; |
|
import { v4 as uuidv4 } from 'uuid'; |
|
import { validatePayload } from '../helpers'; |
|
import { NcError } from '../helpers/catchError'; |
|
import { Project } from '../models'; |
|
|
|
// todo: load from config |
|
const config = { |
|
dashboardPath: '/nc', |
|
}; |
|
|
|
@Injectable() |
|
export class SharedBasesService { |
|
async createSharedBaseLink(param: { |
|
projectId: string; |
|
roles: string; |
|
password: string; |
|
siteUrl: string; |
|
}): Promise<any> { |
|
validatePayload('swagger.json#/components/schemas/SharedBaseReq', param); |
|
|
|
const project = await Project.get(param.projectId); |
|
|
|
let roles = param?.roles; |
|
if (!roles || (roles !== 'editor' && roles !== 'viewer')) { |
|
roles = 'viewer'; |
|
} |
|
|
|
if (!project) { |
|
NcError.badRequest('Invalid project id'); |
|
} |
|
|
|
const data: any = { |
|
uuid: uuidv4(), |
|
password: param?.password, |
|
roles, |
|
}; |
|
|
|
await Project.update(project.id, data); |
|
|
|
data.url = `${param.siteUrl}${config.dashboardPath}#/nc/base/${data.uuid}`; |
|
delete data.password; |
|
T.emit('evt', { evt_type: 'sharedBase:generated-link' }); |
|
return data; |
|
} |
|
|
|
async updateSharedBaseLink(param: { |
|
projectId: string; |
|
roles: string; |
|
password: string; |
|
siteUrl: string; |
|
}): Promise<any> { |
|
validatePayload('swagger.json#/components/schemas/SharedBaseReq', param); |
|
|
|
const project = await Project.get(param.projectId); |
|
|
|
let roles = param.roles; |
|
if (!roles || (roles !== 'editor' && roles !== 'viewer')) { |
|
roles = 'viewer'; |
|
} |
|
|
|
if (!project) { |
|
NcError.badRequest('Invalid project id'); |
|
} |
|
const data: any = { |
|
uuid: project.uuid || uuidv4(), |
|
password: param.password, |
|
roles, |
|
}; |
|
|
|
await Project.update(project.id, data); |
|
|
|
data.url = `${param.siteUrl}${config.dashboardPath}#/nc/base/${data.uuid}`; |
|
delete data.password; |
|
T.emit('evt', { evt_type: 'sharedBase:generated-link' }); |
|
return data; |
|
} |
|
|
|
async disableSharedBaseLink(param: { projectId: string }): Promise<any> { |
|
const project = await Project.get(param.projectId); |
|
|
|
if (!project) { |
|
NcError.badRequest('Invalid project id'); |
|
} |
|
const data: any = { |
|
uuid: null, |
|
}; |
|
|
|
await Project.update(project.id, data); |
|
|
|
T.emit('evt', { evt_type: 'sharedBase:disable-link' }); |
|
|
|
return { uuid: null }; |
|
} |
|
|
|
async getSharedBaseLink(param: { |
|
projectId: string; |
|
siteUrl: string; |
|
}): Promise<any> { |
|
const project = await Project.get(param.projectId); |
|
|
|
if (!project) { |
|
NcError.badRequest('Invalid project id'); |
|
} |
|
const data: any = { |
|
uuid: project.uuid, |
|
roles: project.roles, |
|
}; |
|
if (data.uuid) |
|
data.url = `${param.siteUrl}${config.dashboardPath}#/nc/base/${data.shared_base_id}`; |
|
|
|
return data; |
|
} |
|
}
|
|
|