feat: create default views on workspace creation + add views seed (#1313)
Closes #1311
This commit is contained in:
111
server/src/core/view/seed-data/views.json
Normal file
111
server/src/core/view/seed-data/views.json
Normal file
@ -0,0 +1,111 @@
|
||||
[
|
||||
{
|
||||
"name": "All Companies",
|
||||
"objectId": "company",
|
||||
"type": "Table",
|
||||
"fields": [
|
||||
{
|
||||
"fieldName": "Name",
|
||||
"sizeInPx": 180,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "URL",
|
||||
"sizeInPx": 100,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Account Owner",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Creation",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Employees",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "LinkedIn",
|
||||
"sizeInPx": 170,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Address",
|
||||
"sizeInPx": 170,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "ICP",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": false
|
||||
},
|
||||
{
|
||||
"fieldName": "ARR",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Twitter",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "All People",
|
||||
"objectId": "person",
|
||||
"type": "Table",
|
||||
"fields": [
|
||||
{
|
||||
"fieldName": "People",
|
||||
"sizeInPx": 210,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Email",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Company",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Phone",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Creation",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "City",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Job title",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "LinkedIn",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
},
|
||||
{
|
||||
"fieldName": "Twitter",
|
||||
"sizeInPx": 150,
|
||||
"isVisible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@ -1,6 +1,9 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import type { ViewType } from '@prisma/client';
|
||||
|
||||
import { PrismaService } from 'src/database/prisma.service';
|
||||
import seedViews from 'src/core/view/seed-data/views.json';
|
||||
|
||||
@Injectable()
|
||||
export class ViewService {
|
||||
@ -36,4 +39,29 @@ export class ViewService {
|
||||
|
||||
// GroupBy
|
||||
groupBy = this.prismaService.client.view.groupBy;
|
||||
|
||||
// Custom
|
||||
createDefaultViews({ workspaceId }: { workspaceId: string }) {
|
||||
return Promise.all(
|
||||
seedViews.map(async ({ fields, ...viewInput }) => {
|
||||
const view = await this.create({
|
||||
data: {
|
||||
...viewInput,
|
||||
type: viewInput.type as ViewType,
|
||||
workspace: { connect: { id: workspaceId } },
|
||||
},
|
||||
});
|
||||
|
||||
await this.prismaService.client.viewField.createMany({
|
||||
data: fields.map((viewField, index) => ({
|
||||
...viewField,
|
||||
objectName: view.objectId,
|
||||
index: index + 1,
|
||||
viewId: view.id,
|
||||
workspaceId,
|
||||
})),
|
||||
});
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,5 +20,6 @@ import { ViewFilterResolver } from './resolvers/view-filter.resolver';
|
||||
ViewFilterResolver,
|
||||
ViewSortResolver,
|
||||
],
|
||||
exports: [ViewService],
|
||||
})
|
||||
export class ViewModule {}
|
||||
|
||||
@ -7,6 +7,7 @@ import { PipelineStageService } from 'src/core/pipeline/services/pipeline-stage.
|
||||
import { PersonService } from 'src/core/person/person.service';
|
||||
import { CompanyService } from 'src/core/company/company.service';
|
||||
import { PipelineProgressService } from 'src/core/pipeline/services/pipeline-progress.service';
|
||||
import { ViewService } from 'src/core/view/services/view.service';
|
||||
|
||||
import { WorkspaceService } from './workspace.service';
|
||||
|
||||
@ -41,6 +42,10 @@ describe('WorkspaceService', () => {
|
||||
provide: PipelineProgressService,
|
||||
useValue: {},
|
||||
},
|
||||
{
|
||||
provide: ViewService,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
|
||||
@ -1,14 +1,15 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { v4 } from 'uuid';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { v4 } from 'uuid';
|
||||
|
||||
import { PipelineStageService } from 'src/core/pipeline/services/pipeline-stage.service';
|
||||
import { PipelineProgressService } from 'src/core/pipeline/services/pipeline-progress.service';
|
||||
import { PipelineService } from 'src/core/pipeline/services/pipeline.service';
|
||||
import { PrismaService } from 'src/database/prisma.service';
|
||||
import { CompanyService } from 'src/core/company/company.service';
|
||||
import { PersonService } from 'src/core/person/person.service';
|
||||
import { PipelineProgressService } from 'src/core/pipeline/services/pipeline-progress.service';
|
||||
import { PipelineStageService } from 'src/core/pipeline/services/pipeline-stage.service';
|
||||
import { PipelineService } from 'src/core/pipeline/services/pipeline.service';
|
||||
import { ViewService } from 'src/core/view/services/view.service';
|
||||
import { PrismaService } from 'src/database/prisma.service';
|
||||
import { assert } from 'src/utils/assert';
|
||||
|
||||
@Injectable()
|
||||
@ -20,6 +21,7 @@ export class WorkspaceService {
|
||||
private readonly personService: PersonService,
|
||||
private readonly pipelineStageService: PipelineStageService,
|
||||
private readonly pipelineProgressService: PipelineProgressService,
|
||||
private readonly viewService: ViewService,
|
||||
) {}
|
||||
|
||||
// Find
|
||||
@ -83,6 +85,11 @@ export class WorkspaceService {
|
||||
workspaceId: workspace.id,
|
||||
});
|
||||
|
||||
// Create default views
|
||||
await this.viewService.createDefaultViews({
|
||||
workspaceId: workspace.id,
|
||||
});
|
||||
|
||||
return workspace;
|
||||
}
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@ import { FileUploadService } from 'src/core/file/services/file-upload.service';
|
||||
import { PipelineModule } from 'src/core/pipeline/pipeline.module';
|
||||
import { CompanyModule } from 'src/core/company/company.module';
|
||||
import { PersonModule } from 'src/core/person/person.module';
|
||||
import { ViewModule } from 'src/core/view/view.module';
|
||||
|
||||
import { WorkspaceService } from './services/workspace.service';
|
||||
import { WorkspaceMemberService } from './services/workspace-member.service';
|
||||
@ -11,7 +12,7 @@ import { WorkspaceMemberResolver } from './resolvers/workspace-member.resolver';
|
||||
import { WorkspaceResolver } from './resolvers/workspace.resolver';
|
||||
|
||||
@Module({
|
||||
imports: [PipelineModule, CompanyModule, PersonModule],
|
||||
imports: [PipelineModule, CompanyModule, PersonModule, ViewModule],
|
||||
providers: [
|
||||
WorkspaceService,
|
||||
FileUploadService,
|
||||
|
||||
Reference in New Issue
Block a user