feat: create default views on workspace creation + add views seed (#1313)

Closes #1311
This commit is contained in:
Thaïs
2023-08-25 21:17:28 +02:00
committed by GitHub
parent 8a3a176571
commit 209e8b64d9
11 changed files with 356 additions and 16 deletions

View 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
}
]
}
]

View File

@ -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,
})),
});
}),
);
}
}

View File

@ -20,5 +20,6 @@ import { ViewFilterResolver } from './resolvers/view-filter.resolver';
ViewFilterResolver,
ViewSortResolver,
],
exports: [ViewService],
})
export class ViewModule {}

View File

@ -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();

View File

@ -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;
}

View File

@ -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,