feat: onboarding & profile edition (#507)
* feat: wip onboarding * fix: generate graphql front * wip: onboarding * feat: login/register and edit profile * fix: unused import * fix: test * Use DEBUG_MODE instead of STAGE and mute typescript depth exceed errors * Fix seeds * Fix onboarding when coming from google * Fix * Fix lint * Fix ci * Fix tests --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -12,13 +12,15 @@ export class UserCreateManyInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserCreateWithoutCommentsInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserCreateWithoutCompaniesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserCreateWithoutRefreshTokensInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserCreateWithoutWorkspaceMemberInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -16,13 +16,15 @@ export class UserCreateInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserGroupBy {
|
||||
@Validator.IsOptional()
|
||||
id!: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -13,10 +13,12 @@ export class UserMaxAggregate {
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
|
||||
@ -13,10 +13,12 @@ export class UserMinAggregate {
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringWithAggregatesFilter } from '../prisma/string-with-aggregates-filter.input';
|
||||
import { BoolWithAggregatesFilter } from '../prisma/bool-with-aggregates-filter.input';
|
||||
import { StringNullableWithAggregatesFilter } from '../prisma/string-nullable-with-aggregates-filter.input';
|
||||
import { BoolWithAggregatesFilter } from '../prisma/bool-with-aggregates-filter.input';
|
||||
import { DateTimeNullableWithAggregatesFilter } from '../prisma/date-time-nullable-with-aggregates-filter.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { JsonNullableWithAggregatesFilter } from '../prisma/json-nullable-with-aggregates-filter.input';
|
||||
@ -23,11 +23,11 @@ export class UserScalarWhereWithAggregatesInput {
|
||||
@Field(() => StringWithAggregatesFilter, {nullable:true})
|
||||
id?: StringWithAggregatesFilter;
|
||||
|
||||
@Field(() => StringWithAggregatesFilter, {nullable:true})
|
||||
firstName?: StringWithAggregatesFilter;
|
||||
@Field(() => StringNullableWithAggregatesFilter, {nullable:true})
|
||||
firstName?: StringNullableWithAggregatesFilter;
|
||||
|
||||
@Field(() => StringWithAggregatesFilter, {nullable:true})
|
||||
lastName?: StringWithAggregatesFilter;
|
||||
@Field(() => StringNullableWithAggregatesFilter, {nullable:true})
|
||||
lastName?: StringNullableWithAggregatesFilter;
|
||||
|
||||
@Field(() => StringWithAggregatesFilter, {nullable:true})
|
||||
email?: StringWithAggregatesFilter;
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserUncheckedCreateWithoutCommentsInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserUncheckedCreateWithoutCompaniesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserUncheckedCreateWithoutRefreshTokensInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -15,13 +15,15 @@ export class UserUncheckedCreateWithoutWorkspaceMemberInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -16,13 +16,15 @@ export class UserUncheckedCreateInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
firstName!: string;
|
||||
@Validator.IsOptional()
|
||||
firstName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
lastName!: string;
|
||||
@Validator.IsOptional()
|
||||
lastName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Validator.IsEmail()
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -15,11 +15,11 @@ export class UserUncheckedUpdateManyInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -18,11 +18,11 @@ export class UserUncheckedUpdateWithoutCommentsInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -18,11 +18,11 @@ export class UserUncheckedUpdateWithoutCompaniesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -18,11 +18,11 @@ export class UserUncheckedUpdateWithoutRefreshTokensInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -18,11 +18,11 @@ export class UserUncheckedUpdateWithoutWorkspaceMemberInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -19,11 +19,11 @@ export class UserUncheckedUpdateInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -15,11 +15,11 @@ export class UserUpdateManyMutationInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -18,11 +18,11 @@ export class UserUpdateWithoutCommentsInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -18,11 +18,11 @@ export class UserUpdateWithoutCompaniesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -18,11 +18,11 @@ export class UserUpdateWithoutRefreshTokensInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -18,11 +18,11 @@ export class UserUpdateWithoutWorkspaceMemberInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableStringFieldUpdateOperationsInput } from '../prisma/nullable-string-field-update-operations.input';
|
||||
import { BoolFieldUpdateOperationsInput } from '../prisma/bool-field-update-operations.input';
|
||||
import { NullableDateTimeFieldUpdateOperationsInput } from '../prisma/nullable-date-time-field-update-operations.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { GraphQLJSON } from 'graphql-type-json';
|
||||
@ -19,11 +19,11 @@ export class UserUpdateInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
firstName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
lastName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
email?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { Field } from '@nestjs/graphql';
|
||||
import { InputType } from '@nestjs/graphql';
|
||||
import { StringFilter } from '../prisma/string-filter.input';
|
||||
import { BoolFilter } from '../prisma/bool-filter.input';
|
||||
import { StringNullableFilter } from '../prisma/string-nullable-filter.input';
|
||||
import { BoolFilter } from '../prisma/bool-filter.input';
|
||||
import { DateTimeNullableFilter } from '../prisma/date-time-nullable-filter.input';
|
||||
import { HideField } from '@nestjs/graphql';
|
||||
import { JsonNullableFilter } from '../prisma/json-nullable-filter.input';
|
||||
@ -27,11 +27,11 @@ export class UserWhereInput {
|
||||
@Field(() => StringFilter, {nullable:true})
|
||||
id?: StringFilter;
|
||||
|
||||
@Field(() => StringFilter, {nullable:true})
|
||||
firstName?: StringFilter;
|
||||
@Field(() => StringNullableFilter, {nullable:true})
|
||||
firstName?: StringNullableFilter;
|
||||
|
||||
@Field(() => StringFilter, {nullable:true})
|
||||
lastName?: StringFilter;
|
||||
@Field(() => StringNullableFilter, {nullable:true})
|
||||
lastName?: StringNullableFilter;
|
||||
|
||||
@Field(() => StringFilter, {nullable:true})
|
||||
email?: StringFilter;
|
||||
|
||||
@ -15,11 +15,11 @@ export class User {
|
||||
@Field(() => ID, {nullable:false})
|
||||
id!: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
firstName!: string;
|
||||
@Field(() => String, {nullable:true})
|
||||
firstName!: string | null;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
lastName!: string;
|
||||
@Field(() => String, {nullable:true})
|
||||
lastName!: string | null;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
email!: string;
|
||||
|
||||
@ -11,13 +11,15 @@ export class WorkspaceCreateManyInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceCreateWithoutCommentThreadsInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceCreateWithoutCommentsInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceCreateWithoutCompaniesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceCreateWithoutPeopleInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceCreateWithoutPipelineProgressesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceCreateWithoutPipelineStagesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceCreateWithoutPipelinesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceCreateWithoutWorkspaceMemberInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -19,13 +19,15 @@ export class WorkspaceCreateInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -14,13 +14,15 @@ export class WorkspaceGroupBy {
|
||||
@Validator.IsOptional()
|
||||
id!: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -13,10 +13,12 @@ export class WorkspaceMaxAggregate {
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
|
||||
@ -13,10 +13,12 @@ export class WorkspaceMinAggregate {
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
|
||||
@ -21,11 +21,11 @@ export class WorkspaceScalarWhereWithAggregatesInput {
|
||||
@Field(() => StringWithAggregatesFilter, {nullable:true})
|
||||
id?: StringWithAggregatesFilter;
|
||||
|
||||
@Field(() => StringWithAggregatesFilter, {nullable:true})
|
||||
domainName?: StringWithAggregatesFilter;
|
||||
@Field(() => StringNullableWithAggregatesFilter, {nullable:true})
|
||||
domainName?: StringNullableWithAggregatesFilter;
|
||||
|
||||
@Field(() => StringWithAggregatesFilter, {nullable:true})
|
||||
displayName?: StringWithAggregatesFilter;
|
||||
@Field(() => StringNullableWithAggregatesFilter, {nullable:true})
|
||||
displayName?: StringNullableWithAggregatesFilter;
|
||||
|
||||
@Field(() => StringNullableWithAggregatesFilter, {nullable:true})
|
||||
logo?: StringNullableWithAggregatesFilter;
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceUncheckedCreateWithoutCommentThreadsInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceUncheckedCreateWithoutCommentsInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceUncheckedCreateWithoutCompaniesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceUncheckedCreateWithoutPeopleInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceUncheckedCreateWithoutPipelineProgressesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceUncheckedCreateWithoutPipelineStagesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceUncheckedCreateWithoutPipelinesInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -18,13 +18,15 @@ export class WorkspaceUncheckedCreateWithoutWorkspaceMemberInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -19,13 +19,15 @@ export class WorkspaceUncheckedCreateInput {
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName!: string;
|
||||
@Validator.IsOptional()
|
||||
domainName?: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
displayName!: string;
|
||||
@Validator.IsOptional()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
|
||||
@ -12,11 +12,11 @@ export class WorkspaceUncheckedUpdateManyInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUncheckedUpdateWithoutCommentThreadsInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUncheckedUpdateWithoutCommentsInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUncheckedUpdateWithoutCompaniesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUncheckedUpdateWithoutPeopleInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUncheckedUpdateWithoutPipelineProgressesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUncheckedUpdateWithoutPipelineStagesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUncheckedUpdateWithoutPipelinesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUncheckedUpdateWithoutWorkspaceMemberInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -20,11 +20,11 @@ export class WorkspaceUncheckedUpdateInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -12,11 +12,11 @@ export class WorkspaceUpdateManyMutationInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUpdateWithoutCommentThreadsInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUpdateWithoutCommentsInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUpdateWithoutCompaniesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUpdateWithoutPeopleInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUpdateWithoutPipelineProgressesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUpdateWithoutPipelineStagesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUpdateWithoutPipelinesInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -19,11 +19,11 @@ export class WorkspaceUpdateWithoutWorkspaceMemberInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -20,11 +20,11 @@ export class WorkspaceUpdateInput {
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
id?: StringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
domainName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => StringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: StringFieldUpdateOperationsInput;
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
displayName?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true})
|
||||
logo?: NullableStringFieldUpdateOperationsInput;
|
||||
|
||||
@ -9,8 +9,4 @@ export class WorkspaceWhereUniqueInput {
|
||||
@Validator.IsString()
|
||||
@Validator.IsOptional()
|
||||
id?: string;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
@Validator.IsString()
|
||||
domainName?: string;
|
||||
}
|
||||
|
||||
@ -29,11 +29,11 @@ export class WorkspaceWhereInput {
|
||||
@Field(() => StringFilter, {nullable:true})
|
||||
id?: StringFilter;
|
||||
|
||||
@Field(() => StringFilter, {nullable:true})
|
||||
domainName?: StringFilter;
|
||||
@Field(() => StringNullableFilter, {nullable:true})
|
||||
domainName?: StringNullableFilter;
|
||||
|
||||
@Field(() => StringFilter, {nullable:true})
|
||||
displayName?: StringFilter;
|
||||
@Field(() => StringNullableFilter, {nullable:true})
|
||||
displayName?: StringNullableFilter;
|
||||
|
||||
@Field(() => StringNullableFilter, {nullable:true})
|
||||
logo?: StringNullableFilter;
|
||||
|
||||
@ -18,11 +18,11 @@ export class Workspace {
|
||||
@Field(() => ID, {nullable:false})
|
||||
id!: string;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
domainName!: string;
|
||||
@Field(() => String, {nullable:true})
|
||||
domainName!: string | null;
|
||||
|
||||
@Field(() => String, {nullable:false})
|
||||
displayName!: string;
|
||||
@Field(() => String, {nullable:true})
|
||||
displayName!: string | null;
|
||||
|
||||
@Field(() => String, {nullable:true})
|
||||
logo!: string | null;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Args, Mutation, Resolver, Query} from '@nestjs/graphql';
|
||||
import { AuthTokens, ClientConfig} from './dto/token.entity';
|
||||
import { Args, Mutation, Resolver, Query } from '@nestjs/graphql';
|
||||
import { AuthTokens, ClientConfig } from './dto/token.entity';
|
||||
import { TokenService } from './services/token.service';
|
||||
import { RefreshTokenInput } from './dto/refresh-token.input';
|
||||
import { BadRequestException } from '@nestjs/common';
|
||||
@ -74,4 +74,4 @@ export class AuthResolver {
|
||||
|
||||
return Promise.resolve(clientConfig);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,12 @@
|
||||
import { ArgsType, Field } from '@nestjs/graphql';
|
||||
import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
|
||||
import {
|
||||
IsEmail,
|
||||
IsNotEmpty,
|
||||
IsString,
|
||||
Matches,
|
||||
MinLength,
|
||||
} from 'class-validator';
|
||||
import { PASSWORD_REGEX } from '../auth.util';
|
||||
|
||||
@ArgsType()
|
||||
export class ChallengeInput {
|
||||
@ -11,5 +18,7 @@ export class ChallengeInput {
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
@MinLength(8)
|
||||
@Matches(PASSWORD_REGEX, { message: 'password too weak' })
|
||||
password: string;
|
||||
}
|
||||
|
||||
@ -1,43 +0,0 @@
|
||||
import {
|
||||
IsEmail,
|
||||
IsNotEmpty,
|
||||
IsOptional,
|
||||
IsString,
|
||||
Matches,
|
||||
MinLength,
|
||||
} from 'class-validator';
|
||||
import { PASSWORD_REGEX } from '../auth.util';
|
||||
import { ArgsType, Field } from '@nestjs/graphql';
|
||||
|
||||
@ArgsType()
|
||||
export class RegisterInput {
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
@IsEmail()
|
||||
email: string;
|
||||
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
@MinLength(8)
|
||||
@Matches(PASSWORD_REGEX, { message: 'password too weak' })
|
||||
password: string;
|
||||
|
||||
@Field(() => String, {
|
||||
deprecationReason: 'Deprecated, please use firstName and lastName instead',
|
||||
nullable: true,
|
||||
})
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
displayName?: string;
|
||||
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
firstName: string;
|
||||
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
lastName: string;
|
||||
}
|
||||
@ -31,4 +31,4 @@ export class ClientConfig {
|
||||
|
||||
@Field(() => Boolean)
|
||||
prefill_login_with_seed: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,6 @@ import {
|
||||
import { ChallengeInput } from '../dto/challenge.input';
|
||||
import { UserService } from 'src/core/user/user.service';
|
||||
import { assert } from 'src/utils/assert';
|
||||
import { RegisterInput } from '../dto/register.input';
|
||||
import { PASSWORD_REGEX, compareHash, hashPassword } from '../auth.util';
|
||||
import { Verify } from '../dto/verify.entity';
|
||||
import { TokenService } from './token.service';
|
||||
@ -26,42 +25,31 @@ export class AuthService {
|
||||
private readonly userService: UserService,
|
||||
) {}
|
||||
|
||||
async register(registerInput: RegisterInput) {
|
||||
const existingUser = await this.userService.findUnique({
|
||||
where: {
|
||||
email: registerInput.email,
|
||||
},
|
||||
});
|
||||
|
||||
assert(!existingUser, 'This user already exist', NotFoundException);
|
||||
async challenge(challengeInput: ChallengeInput) {
|
||||
assert(
|
||||
PASSWORD_REGEX.test(registerInput.password),
|
||||
PASSWORD_REGEX.test(challengeInput.password),
|
||||
'Password too weak',
|
||||
BadRequestException,
|
||||
);
|
||||
|
||||
const passwordHash = await hashPassword(registerInput.password);
|
||||
|
||||
const user = await this.userService.createUser({
|
||||
data: {
|
||||
firstName: registerInput.firstName,
|
||||
lastName: registerInput.lastName,
|
||||
email: registerInput.email,
|
||||
passwordHash,
|
||||
locale: 'en',
|
||||
},
|
||||
});
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
async challenge(challengeInput: ChallengeInput) {
|
||||
const user = await this.userService.findUnique({
|
||||
let user = await this.userService.findUnique({
|
||||
where: {
|
||||
email: challengeInput.email,
|
||||
},
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
const passwordHash = await hashPassword(challengeInput.password);
|
||||
|
||||
user = await this.userService.createUser({
|
||||
data: {
|
||||
email: challengeInput.email,
|
||||
passwordHash,
|
||||
locale: 'en',
|
||||
},
|
||||
} as Prisma.UserCreateArgs);
|
||||
}
|
||||
|
||||
assert(user, "This user doesn't exist", NotFoundException);
|
||||
assert(user.passwordHash, 'Incorrect login method', ForbiddenException);
|
||||
|
||||
|
||||
@ -9,7 +9,6 @@ import { CreateOneCommentThreadGuard } from '../../../guards/create-one-comment-
|
||||
import { FindManyCommentThreadArgs } from '../../../core/@generated/comment-thread/find-many-comment-thread.args';
|
||||
import { CommentThreadService } from '../services/comment-thread.service';
|
||||
import { UpdateOneCommentThreadArgs } from 'src/core/@generated/comment-thread/update-one-comment-thread.args';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import {
|
||||
PrismaSelector,
|
||||
PrismaSelect,
|
||||
@ -27,6 +26,7 @@ import { AppAbility } from 'src/ability/ability.factory';
|
||||
import { accessibleBy } from '@casl/prisma';
|
||||
import { AffectedRows } from 'src/core/@generated/prisma/affected-rows.output';
|
||||
import { DeleteManyCommentThreadArgs } from 'src/core/@generated/comment-thread/delete-many-comment-thread.args';
|
||||
import { Prisma } from '@prisma/client';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => CommentThread)
|
||||
@ -75,7 +75,8 @@ export class CommentThreadResolver {
|
||||
prismaSelect: PrismaSelect<'CommentThread'>,
|
||||
): Promise<Partial<CommentThread>> {
|
||||
const updatedCommentThread = await this.commentThreadService.update({
|
||||
...args,
|
||||
where: args.where,
|
||||
data: args.data,
|
||||
select: prismaSelect.value,
|
||||
} as Prisma.CommentThreadUpdateArgs);
|
||||
|
||||
@ -92,11 +93,15 @@ export class CommentThreadResolver {
|
||||
prismaSelect: PrismaSelect<'CommentThread'>,
|
||||
): Promise<Partial<CommentThread>[]> {
|
||||
const result = await this.commentThreadService.findMany({
|
||||
...args,
|
||||
where: {
|
||||
...args.where,
|
||||
AND: [accessibleBy(ability).CommentThread],
|
||||
},
|
||||
orderBy: args.orderBy,
|
||||
cursor: args.cursor,
|
||||
take: args.take,
|
||||
skip: args.skip,
|
||||
distinct: args.distinct,
|
||||
select: prismaSelect.value,
|
||||
});
|
||||
|
||||
@ -112,7 +117,7 @@ export class CommentThreadResolver {
|
||||
@Args() args: DeleteManyCommentThreadArgs,
|
||||
): Promise<AffectedRows> {
|
||||
return this.commentThreadService.deleteMany({
|
||||
...args,
|
||||
where: args.where,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,6 @@ import { AuthWorkspace } from '../../../decorators/auth-workspace.decorator';
|
||||
import { CreateOneCommentArgs } from '../../../core/@generated/comment/create-one-comment.args';
|
||||
import { Comment } from '../../../core/@generated/comment/comment.model';
|
||||
import { CreateOneCommentGuard } from '../../../guards/create-one-comment.guard';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { CommentService } from '../services/comment.service';
|
||||
import {
|
||||
PrismaSelector,
|
||||
@ -17,6 +16,7 @@ import { CheckAbilities } from 'src/decorators/check-abilities.decorator';
|
||||
import { CreateCommentAbilityHandler } from 'src/ability/handlers/comment.ability-handler';
|
||||
import { AuthUser } from 'src/decorators/auth-user.decorator';
|
||||
import { User } from 'src/core/@generated/user/user.model';
|
||||
import { Prisma } from '@prisma/client';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => Comment)
|
||||
|
||||
@ -8,8 +8,7 @@ import { UpdateOneCompanyArgs } from '../../core/@generated/company/update-one-c
|
||||
import { CreateOneCompanyArgs } from '../../core/@generated/company/create-one-company.args';
|
||||
import { AffectedRows } from '../../core/@generated/prisma/affected-rows.output';
|
||||
import { DeleteManyCompanyArgs } from '../../core/@generated/company/delete-many-company.args';
|
||||
import { Workspace } from '@prisma/client';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { Prisma, Workspace } from '@prisma/client';
|
||||
import { UpdateOneGuard } from '../../guards/update-one.guard';
|
||||
import { DeleteManyGuard } from '../../guards/delete-many.guard';
|
||||
import { CreateOneGuard } from '../../guards/create-one.guard';
|
||||
@ -45,12 +44,16 @@ export class CompanyResolver {
|
||||
prismaSelect: PrismaSelect<'Company'>,
|
||||
): Promise<Partial<Company>[]> {
|
||||
return this.companyService.findMany({
|
||||
...args,
|
||||
where: args.where
|
||||
? {
|
||||
AND: [args.where, accessibleBy(ability).Company],
|
||||
}
|
||||
: accessibleBy(ability).Company,
|
||||
orderBy: args.orderBy,
|
||||
cursor: args.cursor,
|
||||
take: args.take,
|
||||
skip: args.skip,
|
||||
distinct: args.distinct,
|
||||
select: prismaSelect.value,
|
||||
});
|
||||
}
|
||||
@ -71,7 +74,8 @@ export class CompanyResolver {
|
||||
}
|
||||
|
||||
return this.companyService.update({
|
||||
...args,
|
||||
where: args.where,
|
||||
data: args.data,
|
||||
select: prismaSelect.value,
|
||||
} as Prisma.CompanyUpdateArgs);
|
||||
}
|
||||
@ -86,7 +90,7 @@ export class CompanyResolver {
|
||||
@Args() args: DeleteManyCompanyArgs,
|
||||
): Promise<AffectedRows> {
|
||||
return this.companyService.deleteMany({
|
||||
...args,
|
||||
where: args.where,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -9,7 +9,6 @@ import { AffectedRows } from '../../core/@generated/prisma/affected-rows.output'
|
||||
import { DeleteManyPersonArgs } from '../../core/@generated/person/delete-many-person.args';
|
||||
import { Workspace } from '../../core/@generated/workspace/workspace.model';
|
||||
import { AuthWorkspace } from '../../decorators/auth-workspace.decorator';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { UpdateOneGuard } from '../../guards/update-one.guard';
|
||||
import { DeleteManyGuard } from '../../guards/delete-many.guard';
|
||||
import { CreateOneGuard } from '../../guards/create-one.guard';
|
||||
@ -29,6 +28,7 @@ import {
|
||||
import { UserAbility } from 'src/decorators/user-ability.decorator';
|
||||
import { AppAbility } from 'src/ability/ability.factory';
|
||||
import { accessibleBy } from '@casl/prisma';
|
||||
import { Prisma } from '@prisma/client';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => Person)
|
||||
@ -47,12 +47,16 @@ export class PersonResolver {
|
||||
prismaSelect: PrismaSelect<'Person'>,
|
||||
): Promise<Partial<Person>[]> {
|
||||
return this.personService.findMany({
|
||||
...args,
|
||||
where: args.where
|
||||
? {
|
||||
AND: [args.where, accessibleBy(ability).Person],
|
||||
}
|
||||
: accessibleBy(ability).Person,
|
||||
orderBy: args.orderBy,
|
||||
cursor: args.cursor,
|
||||
take: args.take,
|
||||
skip: args.skip,
|
||||
distinct: args.distinct,
|
||||
select: prismaSelect.value,
|
||||
});
|
||||
}
|
||||
@ -73,7 +77,8 @@ export class PersonResolver {
|
||||
}
|
||||
|
||||
return this.personService.update({
|
||||
...args,
|
||||
where: args.where,
|
||||
data: args.data,
|
||||
select: prismaSelect.value,
|
||||
} as Prisma.PersonUpdateArgs);
|
||||
}
|
||||
@ -88,7 +93,7 @@ export class PersonResolver {
|
||||
@Args() args: DeleteManyPersonArgs,
|
||||
): Promise<AffectedRows> {
|
||||
return this.personService.deleteMany({
|
||||
...args,
|
||||
where: args.where,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -7,7 +7,6 @@ import { AuthWorkspace } from '../../../decorators/auth-workspace.decorator';
|
||||
import { FindManyPipelineProgressArgs } from '../../@generated/pipeline-progress/find-many-pipeline-progress.args';
|
||||
import { PipelineProgress } from '../../@generated/pipeline-progress/pipeline-progress.model';
|
||||
import { UpdateOnePipelineProgressArgs } from '../../@generated/pipeline-progress/update-one-pipeline-progress.args';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { AffectedRows } from '../../@generated/prisma/affected-rows.output';
|
||||
import { DeleteManyPipelineProgressArgs } from '../../@generated/pipeline-progress/delete-many-pipeline-progress.args';
|
||||
import { CreateOnePipelineProgressArgs } from '../../@generated/pipeline-progress/create-one-pipeline-progress.args';
|
||||
@ -26,6 +25,7 @@ import {
|
||||
PrismaSelector,
|
||||
PrismaSelect,
|
||||
} from 'src/decorators/prisma-select.decorator';
|
||||
import { Prisma } from '@prisma/client';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => PipelineProgress)
|
||||
@ -40,14 +40,21 @@ export class PipelineProgressResolver {
|
||||
async findManyPipelineProgress(
|
||||
@Args() args: FindManyPipelineProgressArgs,
|
||||
@UserAbility() ability: AppAbility,
|
||||
@PrismaSelector({ modelName: 'PipelineProgress' })
|
||||
prismaSelect: PrismaSelect<'PipelineProgress'>,
|
||||
): Promise<Partial<PipelineProgress>[]> {
|
||||
return this.pipelineProgressService.findMany({
|
||||
...args,
|
||||
where: args.where
|
||||
? {
|
||||
AND: [args.where, accessibleBy(ability).PipelineProgress],
|
||||
}
|
||||
: accessibleBy(ability).PipelineProgress,
|
||||
orderBy: args.orderBy,
|
||||
cursor: args.cursor,
|
||||
take: args.take,
|
||||
skip: args.skip,
|
||||
distinct: args.distinct,
|
||||
select: prismaSelect.value,
|
||||
});
|
||||
}
|
||||
|
||||
@ -62,7 +69,8 @@ export class PipelineProgressResolver {
|
||||
prismaSelect: PrismaSelect<'PipelineProgress'>,
|
||||
): Promise<Partial<PipelineProgress> | null> {
|
||||
return this.pipelineProgressService.update({
|
||||
...args,
|
||||
where: args.where,
|
||||
data: args.data,
|
||||
select: prismaSelect.value,
|
||||
} as Prisma.PipelineProgressUpdateArgs);
|
||||
}
|
||||
@ -76,7 +84,7 @@ export class PipelineProgressResolver {
|
||||
@Args() args: DeleteManyPipelineProgressArgs,
|
||||
): Promise<AffectedRows> {
|
||||
return this.pipelineProgressService.deleteMany({
|
||||
...args,
|
||||
where: args.where,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -30,12 +30,16 @@ export class PipelineStageResolver {
|
||||
prismaSelect: PrismaSelect<'PipelineStage'>,
|
||||
): Promise<Partial<PipelineStage>[]> {
|
||||
return this.pipelineStageService.findMany({
|
||||
...args,
|
||||
where: args.where
|
||||
? {
|
||||
AND: [args.where, accessibleBy(ability).PipelineStage],
|
||||
}
|
||||
: accessibleBy(ability).PipelineStage,
|
||||
orderBy: args.orderBy,
|
||||
cursor: args.cursor,
|
||||
take: args.take,
|
||||
skip: args.skip,
|
||||
distinct: args.distinct,
|
||||
select: prismaSelect.value,
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { UserService } from './user.service';
|
||||
import { UserResolver } from './user.resolver';
|
||||
import { WorkspaceModule } from '../workspace/workspace.module';
|
||||
|
||||
@Module({
|
||||
imports: [WorkspaceModule],
|
||||
imports: [],
|
||||
providers: [UserService, UserResolver],
|
||||
exports: [UserService],
|
||||
})
|
||||
|
||||
@ -1,4 +1,11 @@
|
||||
import { Args, Resolver, Query, ResolveField, Parent } from '@nestjs/graphql';
|
||||
import {
|
||||
Args,
|
||||
Resolver,
|
||||
Query,
|
||||
ResolveField,
|
||||
Parent,
|
||||
Mutation,
|
||||
} from '@nestjs/graphql';
|
||||
import { UserService } from './user.service';
|
||||
import { FindManyUserArgs } from 'src/core/@generated/user/find-many-user.args';
|
||||
import { User } from 'src/core/@generated/user/user.model';
|
||||
@ -11,16 +18,40 @@ import {
|
||||
} from 'src/decorators/prisma-select.decorator';
|
||||
import { AbilityGuard } from 'src/guards/ability.guard';
|
||||
import { CheckAbilities } from 'src/decorators/check-abilities.decorator';
|
||||
import { ReadUserAbilityHandler } from 'src/ability/handlers/user.ability-handler';
|
||||
import {
|
||||
ReadUserAbilityHandler,
|
||||
UpdateUserAbilityHandler,
|
||||
} from 'src/ability/handlers/user.ability-handler';
|
||||
import { UserAbility } from 'src/decorators/user-ability.decorator';
|
||||
import { AppAbility } from 'src/ability/ability.factory';
|
||||
import { accessibleBy } from '@casl/prisma';
|
||||
import { AuthUser } from 'src/decorators/auth-user.decorator';
|
||||
import { assert } from 'src/utils/assert';
|
||||
import { UpdateOneUserArgs } from '../@generated/user/update-one-user.args';
|
||||
import { Prisma } from '@prisma/client';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => User)
|
||||
export class UserResolver {
|
||||
constructor(private readonly userService: UserService) {}
|
||||
|
||||
@Query(() => User)
|
||||
async currentUser(
|
||||
@AuthUser() { id }: User,
|
||||
@PrismaSelector({ modelName: 'User' })
|
||||
prismaSelect: PrismaSelect<'User'>,
|
||||
) {
|
||||
const user = await this.userService.findUnique({
|
||||
where: {
|
||||
id,
|
||||
},
|
||||
select: prismaSelect.value,
|
||||
});
|
||||
assert(user, 'User not found');
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
@UseFilters(ExceptionFilter)
|
||||
@Query(() => [User], {
|
||||
nullable: false,
|
||||
@ -34,16 +65,44 @@ export class UserResolver {
|
||||
prismaSelect: PrismaSelect<'User'>,
|
||||
): Promise<Partial<User>[]> {
|
||||
return await this.userService.findMany({
|
||||
...args,
|
||||
where: args.where
|
||||
? {
|
||||
AND: [args.where, accessibleBy(ability).User],
|
||||
}
|
||||
: accessibleBy(ability).User,
|
||||
orderBy: args.orderBy,
|
||||
cursor: args.cursor,
|
||||
take: args.take,
|
||||
skip: args.skip,
|
||||
distinct: args.distinct,
|
||||
select: prismaSelect.value,
|
||||
});
|
||||
}
|
||||
|
||||
@Mutation(() => User)
|
||||
@UseGuards(AbilityGuard)
|
||||
@CheckAbilities(UpdateUserAbilityHandler)
|
||||
async updateUser(
|
||||
@Args() args: UpdateOneUserArgs,
|
||||
@AuthUser() { id }: User,
|
||||
@PrismaSelector({ modelName: 'User' })
|
||||
prismaSelect: PrismaSelect<'User'>,
|
||||
) {
|
||||
const user = await this.userService.findUnique({
|
||||
where: {
|
||||
id,
|
||||
},
|
||||
select: prismaSelect.value,
|
||||
});
|
||||
assert(user, 'User not found');
|
||||
|
||||
return this.userService.update({
|
||||
where: args.where,
|
||||
data: args.data,
|
||||
select: prismaSelect.value,
|
||||
} as Prisma.UserUpdateArgs);
|
||||
}
|
||||
|
||||
@ResolveField(() => String, {
|
||||
nullable: false,
|
||||
})
|
||||
|
||||
@ -2,8 +2,6 @@ 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';
|
||||
import { WorkspaceMemberService } from '../workspace/services/workspace-member.service';
|
||||
|
||||
describe('UserService', () => {
|
||||
let service: UserService;
|
||||
@ -16,14 +14,6 @@ describe('UserService', () => {
|
||||
provide: PrismaService,
|
||||
useValue: prismaMock,
|
||||
},
|
||||
{
|
||||
provide: WorkspaceService,
|
||||
useValue: {},
|
||||
},
|
||||
{
|
||||
provide: WorkspaceMemberService,
|
||||
useValue: {},
|
||||
},
|
||||
],
|
||||
}).compile();
|
||||
|
||||
|
||||
@ -1,10 +1,5 @@
|
||||
import {
|
||||
BadRequestException,
|
||||
ForbiddenException,
|
||||
Injectable,
|
||||
} from '@nestjs/common';
|
||||
import { BadRequestException, Injectable } from '@nestjs/common';
|
||||
import { PrismaService } from 'src/database/prisma.service';
|
||||
import { WorkspaceService } from 'src/core/workspace/services/workspace.service';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { assert } from 'src/utils/assert';
|
||||
|
||||
@ -15,10 +10,7 @@ export type UserPayload = {
|
||||
|
||||
@Injectable()
|
||||
export class UserService {
|
||||
constructor(
|
||||
private readonly prismaService: PrismaService,
|
||||
private readonly workspaceService: WorkspaceService,
|
||||
) {}
|
||||
constructor(private readonly prismaService: PrismaService) {}
|
||||
|
||||
// Find
|
||||
findFirst = this.prismaService.user.findFirst;
|
||||
@ -56,22 +48,6 @@ export class UserService {
|
||||
args: Prisma.SelectSubset<T, Prisma.UserCreateArgs>,
|
||||
): Promise<Prisma.UserGetPayload<T>> {
|
||||
assert(args.data.email, 'email is missing', BadRequestException);
|
||||
assert(args.data.firstName, 'firstName is missing', BadRequestException);
|
||||
assert(args.data.lastName, 'lastName is missing', BadRequestException);
|
||||
|
||||
const emailDomain = args.data.email.split('@')[1];
|
||||
|
||||
assert(emailDomain, 'Email is malformed', BadRequestException);
|
||||
|
||||
const workspace = await this.workspaceService.findUnique({
|
||||
where: { domainName: emailDomain },
|
||||
});
|
||||
|
||||
assert(
|
||||
workspace,
|
||||
'User email domain does not match an existing workspace',
|
||||
ForbiddenException,
|
||||
);
|
||||
|
||||
const user = await this.prismaService.user.upsert({
|
||||
where: {
|
||||
@ -79,10 +55,12 @@ export class UserService {
|
||||
},
|
||||
create: {
|
||||
...(args.data as Prisma.UserCreateInput),
|
||||
// Assign the user to a new workspace by default
|
||||
workspaceMember: {
|
||||
connectOrCreate: {
|
||||
where: { id: workspace.id },
|
||||
create: { workspaceId: workspace.id },
|
||||
create: {
|
||||
workspace: {
|
||||
create: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
locale: 'en',
|
||||
@ -90,7 +68,7 @@ export class UserService {
|
||||
update: {},
|
||||
...(args.select ? { select: args.select } : {}),
|
||||
...(args.include ? { include: args.include } : {}),
|
||||
});
|
||||
} as Prisma.UserUpsertArgs);
|
||||
|
||||
return user as Prisma.UserGetPayload<T>;
|
||||
}
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { WorkspaceResolver } from './workspace.resolver';
|
||||
import { WorkspaceService } from '../services/workspace.service';
|
||||
|
||||
describe('WorkspaceMemberResolver', () => {
|
||||
let resolver: WorkspaceResolver;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
WorkspaceResolver,
|
||||
{ provide: WorkspaceService, useValue: {} },
|
||||
],
|
||||
}).compile();
|
||||
|
||||
resolver = module.get<WorkspaceResolver>(WorkspaceResolver);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(resolver).toBeDefined();
|
||||
});
|
||||
});
|
||||
36
server/src/core/workspace/resolvers/workspace.resolver.ts
Normal file
36
server/src/core/workspace/resolvers/workspace.resolver.ts
Normal file
@ -0,0 +1,36 @@
|
||||
import { Args, Mutation, Resolver } from '@nestjs/graphql';
|
||||
import { UseGuards } from '@nestjs/common';
|
||||
import { Workspace } from 'src/core/@generated/workspace/workspace.model';
|
||||
import { WorkspaceService } from '../services/workspace.service';
|
||||
import {
|
||||
PrismaSelect,
|
||||
PrismaSelector,
|
||||
} from 'src/decorators/prisma-select.decorator';
|
||||
import { AuthWorkspace } from 'src/decorators/auth-workspace.decorator';
|
||||
import { WorkspaceUpdateInput } from 'src/core/@generated/workspace/workspace-update.input';
|
||||
import { JwtAuthGuard } from 'src/guards/jwt.auth.guard';
|
||||
import { Prisma } from '@prisma/client';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Resolver(() => Workspace)
|
||||
export class WorkspaceResolver {
|
||||
constructor(private readonly workspaceService: WorkspaceService) {}
|
||||
|
||||
@Mutation(() => Workspace)
|
||||
async updateWorkspace(
|
||||
@Args('data') data: WorkspaceUpdateInput,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
@PrismaSelector({ modelName: 'Workspace' })
|
||||
prismaSelect: PrismaSelect<'Workspace'>,
|
||||
) {
|
||||
return this.workspaceService.update({
|
||||
where: {
|
||||
id: workspace.id,
|
||||
},
|
||||
data: {
|
||||
...data,
|
||||
},
|
||||
select: prismaSelect.value,
|
||||
} as Prisma.WorkspaceUpdateArgs);
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,16 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { WorkspaceService } from './services/workspace.service';
|
||||
import { WorkspaceMemberService } from './services/workspace-member.service';
|
||||
import { WorkspaceMemberResolver } from './resolvers/workspace-member.resolver';
|
||||
import { WorkspaceResolver } from './resolvers/workspace.resolver';
|
||||
|
||||
@Module({
|
||||
providers: [WorkspaceService, WorkspaceMemberService],
|
||||
providers: [
|
||||
WorkspaceService,
|
||||
WorkspaceMemberService,
|
||||
WorkspaceMemberResolver,
|
||||
WorkspaceResolver,
|
||||
],
|
||||
exports: [WorkspaceService, WorkspaceMemberService],
|
||||
})
|
||||
export class WorkspaceModule {}
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
-- DropIndex
|
||||
DROP INDEX "workspaces_domainName_key";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "workspaces" ALTER COLUMN "domainName" DROP NOT NULL,
|
||||
ALTER COLUMN "displayName" DROP NOT NULL;
|
||||
@ -0,0 +1,3 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "users" ALTER COLUMN "firstName" DROP NOT NULL,
|
||||
ALTER COLUMN "lastName" DROP NOT NULL;
|
||||
@ -1,6 +1,14 @@
|
||||
import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common';
|
||||
import {
|
||||
INestApplication,
|
||||
Injectable,
|
||||
Logger,
|
||||
OnModuleInit,
|
||||
} from '@nestjs/common';
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import { createPrismaQueryEventHandler } from 'prisma-query-log';
|
||||
import { EnvironmentService } from 'src/integrations/environment/environment.service';
|
||||
|
||||
// TODO: Check if this is still needed
|
||||
if (!global.prisma) {
|
||||
global.prisma = new PrismaClient();
|
||||
}
|
||||
@ -8,6 +16,36 @@ export default global.prisma;
|
||||
|
||||
@Injectable()
|
||||
export class PrismaService extends PrismaClient implements OnModuleInit {
|
||||
private readonly logger = new Logger(PrismaService.name);
|
||||
|
||||
constructor(private readonly environmentService: EnvironmentService) {
|
||||
const debugMode = environmentService.getDebugMode();
|
||||
super({
|
||||
errorFormat: 'minimal',
|
||||
log: debugMode
|
||||
? [
|
||||
{
|
||||
level: 'query',
|
||||
emit: 'event',
|
||||
},
|
||||
]
|
||||
: undefined,
|
||||
});
|
||||
|
||||
if (debugMode) {
|
||||
const logHandler = createPrismaQueryEventHandler({
|
||||
logger: (query: string) => {
|
||||
this.logger.log(query, 'PrismaClient');
|
||||
},
|
||||
format: false,
|
||||
colorQuery: '\u001B[96m',
|
||||
colorParameter: '\u001B[90m',
|
||||
});
|
||||
|
||||
this.$on('query' as any, logHandler);
|
||||
}
|
||||
}
|
||||
|
||||
async onModuleInit() {
|
||||
await this.$connect();
|
||||
}
|
||||
|
||||
@ -135,9 +135,11 @@ model User {
|
||||
/// @Validator.IsOptional()
|
||||
id String @id @default(uuid())
|
||||
/// @Validator.IsString()
|
||||
firstName String
|
||||
/// @Validator.IsOptional()
|
||||
firstName String?
|
||||
/// @Validator.IsString()
|
||||
lastName String
|
||||
/// @Validator.IsOptional()
|
||||
lastName String?
|
||||
/// @Validator.IsEmail()
|
||||
email String @unique
|
||||
/// @Validator.IsBoolean()
|
||||
@ -185,9 +187,11 @@ model Workspace {
|
||||
/// @Validator.IsOptional()
|
||||
id String @id @default(uuid())
|
||||
/// @Validator.IsString()
|
||||
domainName String @unique
|
||||
/// @Validator.IsOptional()
|
||||
domainName String?
|
||||
/// @Validator.IsString()
|
||||
displayName String
|
||||
/// @Validator.IsOptional()
|
||||
displayName String?
|
||||
/// @Validator.IsString()
|
||||
/// @Validator.IsOptional()
|
||||
logo String?
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -2,7 +2,7 @@ import { ConfigurableModuleBuilder } from '@nestjs/common';
|
||||
|
||||
export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } =
|
||||
new ConfigurableModuleBuilder({
|
||||
moduleName: 'Environment',
|
||||
moduleName: 'Prisma',
|
||||
})
|
||||
.setClassMethodName('forRoot')
|
||||
.build();
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user