feat: default pipeline provisioning at workspace creation (#728)

* feat: default pipeline and pipeline stage on workspace creation

* Create seed data files, typo

* Naming

---------

Co-authored-by: Emilien <emilien.chauvet.enpc@gmail.com>
This commit is contained in:
Jérémy M
2023-07-18 19:30:59 +02:00
committed by GitHub
parent f65d2f418e
commit 4ec93d4b6a
10 changed files with 141 additions and 18 deletions

View File

@ -2,9 +2,10 @@ import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserResolver } from './user.resolver';
import { FileModule } from '../file/file.module';
import { WorkspaceModule } from '../workspace/workspace.module';
@Module({
imports: [FileModule],
imports: [FileModule, WorkspaceModule],
providers: [UserService, UserResolver],
exports: [UserService],
})

View File

@ -2,6 +2,7 @@ import { Test, TestingModule } from '@nestjs/testing';
import { UserService } from './user.service';
import { PrismaService } from 'src/database/prisma.service';
import { prismaMock } from 'src/database/client-mock/jest-prisma-singleton';
import { WorkspaceService } from '../workspace/services/workspace.service';
describe('UserService', () => {
let service: UserService;
@ -14,6 +15,10 @@ describe('UserService', () => {
provide: PrismaService,
useValue: prismaMock,
},
{
provide: WorkspaceService,
useValue: {},
},
],
}).compile();

View File

@ -2,6 +2,7 @@ import { BadRequestException, Injectable } from '@nestjs/common';
import { PrismaService } from 'src/database/prisma.service';
import { Prisma } from '@prisma/client';
import { assert } from 'src/utils/assert';
import { WorkspaceService } from '../workspace/services/workspace.service';
export type UserPayload = {
displayName: string | undefined | null;
@ -10,7 +11,10 @@ export type UserPayload = {
@Injectable()
export class UserService {
constructor(private readonly prismaService: PrismaService) {}
constructor(
private readonly prismaService: PrismaService,
private readonly workspaceService: WorkspaceService,
) {}
// Find
findFirst = this.prismaService.user.findFirst;
@ -50,6 +54,18 @@ export class UserService {
): Promise<Prisma.UserGetPayload<T>> {
assert(args.data.email, 'email is missing', BadRequestException);
// Create workspace if not exists
const workspace = workspaceId
? await this.workspaceService.findUnique({
where: {
id: workspaceId,
},
})
: await this.workspaceService.createDefaultWorkspace();
assert(workspace, 'workspace is missing', BadRequestException);
// Create user
const user = await this.prismaService.user.upsert({
where: {
email: args.data.email,
@ -57,22 +73,13 @@ export class UserService {
create: {
...(args.data as Prisma.UserCreateInput),
workspaceMember: workspaceId
? {
create: {
workspace: {
connect: { id: workspaceId },
},
},
}
: // Assign the user to a new workspace by default
{
create: {
workspace: {
create: {},
},
},
workspaceMember: {
create: {
workspace: {
connect: { id: workspace.id },
},
},
},
locale: 'en',
},
update: {},