From 19e165fc056589581bcd5e81f2addc288cad5555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20M?= Date: Tue, 18 Jul 2023 19:47:27 +0200 Subject: [PATCH] feat: implementing experience page (#718) * feat: add color scheme toggle * feat: colorScheme stored in UserSettings model * feat: add stories * fix: AnimatePresence exit not working --------- Co-authored-by: Lucas Bordeau --- front/src/App.tsx | 14 +- front/src/generated/graphql.tsx | 161 ++++++++++-- .../src/modules/auth/states/tokenPairState.ts | 23 +- .../settings/components/SettingsNavbar.tsx | 1 - front/src/modules/types/SettingsPath.ts | 1 + .../ui/checkmark/components/Checkmark.tsx | 27 ++ .../components/ColorSchemeCard.tsx | 235 ++++++++++++++++++ .../components/ColorSchemePicker.tsx | 62 +++++ .../__stories__/ColorSchemeCard.stories.tsx | 42 ++++ front/src/modules/ui/themes/colors.ts | 1 + .../ui/themes/components/AppThemeProvider.tsx | 23 +- .../modules/ui/themes/hooks/useColorScheme.ts | 53 ++++ .../ui/themes/hooks/useSystemColorScheme.ts | 39 +++ .../ui/title/components/MainSectionTitle.tsx | 2 +- front/src/modules/users/queries/index.ts | 5 + front/src/modules/users/queries/update.ts | 16 ++ .../src/pages/settings/SettingsExperience.tsx | 42 ++++ front/src/testing/mock-data/users.ts | 32 ++- front/src/utils/index.ts | 4 - front/src/utils/recoil-effects.ts | 37 +++ .../@generated/prisma/color-scheme.enum.ts | 10 + ...or-scheme-field-update-operations.input.ts | 10 + .../prisma/enum-color-scheme-filter.input.ts | 20 ++ ...lor-scheme-with-aggregates-filter.input.ts | 31 +++ .../nested-enum-color-scheme-filter.input.ts | 19 ++ ...lor-scheme-with-aggregates-filter.input.ts | 30 +++ .../aggregate-user-settings.output.ts | 18 ++ .../create-many-user-settings.args.ts | 18 ++ .../create-one-user-settings.args.ts | 15 ++ .../delete-many-user-settings.args.ts | 12 + .../delete-one-user-settings.args.ts | 12 + .../find-first-user-settings-or-throw.args.ts | 31 +++ .../find-first-user-settings.args.ts | 31 +++ .../find-many-user-settings.args.ts | 31 +++ ...find-unique-user-settings-or-throw.args.ts | 12 + .../find-unique-user-settings.args.ts | 12 + .../update-many-user-settings.args.ts | 20 ++ .../update-one-user-settings.args.ts | 20 ++ .../upsert-one-user-settings.args.ts | 22 ++ .../user-settings-count-aggregate.input.ts | 24 ++ .../user-settings-count-aggregate.output.ts | 25 ++ ...settings-count-order-by-aggregate.input.ts | 22 ++ .../user-settings-create-many.input.ts | 26 ++ ...gs-create-nested-one-without-user.input.ts | 22 ++ ...gs-create-or-connect-without-user.input.ts | 17 ++ ...user-settings-create-without-user.input.ts | 26 ++ .../user-settings-create.input.ts | 30 +++ .../user-settings-group-by.args.ts | 43 ++++ .../user-settings-group-by.output.ts | 38 +++ .../user-settings-max-aggregate.input.ts | 21 ++ .../user-settings-max-aggregate.output.ts | 26 ++ ...r-settings-max-order-by-aggregate.input.ts | 22 ++ .../user-settings-min-aggregate.input.ts | 21 ++ .../user-settings-min-aggregate.output.ts | 26 ++ ...r-settings-min-order-by-aggregate.input.ts | 22 ++ ...ettings-order-by-with-aggregation.input.ts | 34 +++ ...r-settings-order-by-with-relation.input.ts | 26 ++ .../user-settings-relation-filter.input.ts | 13 + .../user-settings-scalar-field.enum.ts | 12 + ...ings-scalar-where-with-aggregates.input.ts | 33 +++ ...ngs-unchecked-create-without-user.input.ts | 26 ++ .../user-settings-unchecked-create.input.ts | 30 +++ ...er-settings-unchecked-update-many.input.ts | 24 ++ ...ngs-unchecked-update-without-user.input.ts | 24 ++ .../user-settings-unchecked-update.input.ts | 28 +++ ...ser-settings-update-many-mutation.input.ts | 24 ++ ...-one-required-without-user-nested.input.ts | 32 +++ ...user-settings-update-without-user.input.ts | 24 ++ .../user-settings-update.input.ts | 28 +++ ...user-settings-upsert-without-user.input.ts | 17 ++ .../user-settings-where-unique.input.ts | 9 + .../user-settings-where.input.ts | 37 +++ .../user-settings/user-settings.model.ts | 27 ++ .../user/user-count-aggregate.input.ts | 3 + .../user/user-count-aggregate.output.ts | 3 + .../user-count-order-by-aggregate.input.ts | 3 + .../@generated/user/user-create-many.input.ts | 3 + ...reate-nested-one-without-settings.input.ts | 22 ++ ...reate-or-connect-without-settings.input.ts | 17 ++ ...-without-assigned-comment-threads.input.ts | 4 + ...-without-authored-comment-threads.input.ts | 4 + .../user-create-without-comments.input.ts | 4 + .../user-create-without-companies.input.ts | 4 + ...ser-create-without-refresh-tokens.input.ts | 4 + .../user-create-without-settings.input.ts | 98 ++++++++ ...r-create-without-workspace-member.input.ts | 4 + .../core/@generated/user/user-create.input.ts | 4 + .../@generated/user/user-group-by.output.ts | 3 + .../user/user-max-aggregate.input.ts | 3 + .../user/user-max-aggregate.output.ts | 3 + .../user/user-max-order-by-aggregate.input.ts | 3 + .../user/user-min-aggregate.input.ts | 3 + .../user/user-min-aggregate.output.ts | 3 + .../user/user-min-order-by-aggregate.input.ts | 3 + .../user-order-by-with-aggregation.input.ts | 3 + .../user/user-order-by-with-relation.input.ts | 7 + .../@generated/user/user-scalar-field.enum.ts | 1 + ...user-scalar-where-with-aggregates.input.ts | 3 + .../user/user-settings-aggregate.args.ts | 39 +++ ...reate-nested-one-without-settings.input.ts | 22 ++ ...-without-assigned-comment-threads.input.ts | 3 + ...-without-authored-comment-threads.input.ts | 3 + ...unchecked-create-without-comments.input.ts | 3 + ...nchecked-create-without-companies.input.ts | 3 + ...ked-create-without-refresh-tokens.input.ts | 3 + ...unchecked-create-without-settings.input.ts | 98 ++++++++ ...d-create-without-workspace-member.input.ts | 3 + .../user/user-unchecked-create.input.ts | 3 + .../user/user-unchecked-update-many.input.ts | 3 + ...pdate-one-without-settings-nested.input.ts | 38 +++ ...-without-assigned-comment-threads.input.ts | 3 + ...-without-authored-comment-threads.input.ts | 3 + ...unchecked-update-without-comments.input.ts | 3 + ...nchecked-update-without-companies.input.ts | 3 + ...ked-update-without-refresh-tokens.input.ts | 3 + ...unchecked-update-without-settings.input.ts | 85 +++++++ ...d-update-without-workspace-member.input.ts | 3 + .../user/user-unchecked-update.input.ts | 3 + ...pdate-one-without-settings-nested.input.ts | 38 +++ ...-without-assigned-comment-threads.input.ts | 4 + ...-without-authored-comment-threads.input.ts | 4 + .../user-update-without-comments.input.ts | 4 + .../user-update-without-companies.input.ts | 4 + ...ser-update-without-refresh-tokens.input.ts | 4 + .../user-update-without-settings.input.ts | 85 +++++++ ...r-update-without-workspace-member.input.ts | 4 + .../core/@generated/user/user-update.input.ts | 4 + .../user-upsert-without-settings.input.ts | 17 ++ .../user/user-where-unique.input.ts | 3 + .../core/@generated/user/user-where.input.ts | 7 + server/src/core/@generated/user/user.model.ts | 7 + .../controllers/google-auth.controller.ts | 5 + server/src/core/auth/services/auth.service.ts | 10 + .../migration.sql | 19 ++ server/src/database/schema.prisma | 33 ++- server/src/database/seeds/users.ts | 22 +- .../utils/prisma-select/model-select-map.ts | 1 + 137 files changed, 2792 insertions(+), 75 deletions(-) create mode 100644 front/src/modules/ui/checkmark/components/Checkmark.tsx create mode 100644 front/src/modules/ui/color-scheme/components/ColorSchemeCard.tsx create mode 100644 front/src/modules/ui/color-scheme/components/ColorSchemePicker.tsx create mode 100644 front/src/modules/ui/color-scheme/components/__stories__/ColorSchemeCard.stories.tsx create mode 100644 front/src/modules/ui/themes/hooks/useColorScheme.ts create mode 100644 front/src/modules/ui/themes/hooks/useSystemColorScheme.ts create mode 100644 front/src/pages/settings/SettingsExperience.tsx create mode 100644 front/src/utils/recoil-effects.ts create mode 100644 server/src/core/@generated/prisma/color-scheme.enum.ts create mode 100644 server/src/core/@generated/prisma/enum-color-scheme-field-update-operations.input.ts create mode 100644 server/src/core/@generated/prisma/enum-color-scheme-filter.input.ts create mode 100644 server/src/core/@generated/prisma/enum-color-scheme-with-aggregates-filter.input.ts create mode 100644 server/src/core/@generated/prisma/nested-enum-color-scheme-filter.input.ts create mode 100644 server/src/core/@generated/prisma/nested-enum-color-scheme-with-aggregates-filter.input.ts create mode 100644 server/src/core/@generated/user-settings/aggregate-user-settings.output.ts create mode 100644 server/src/core/@generated/user-settings/create-many-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/create-one-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/delete-many-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/delete-one-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/find-first-user-settings-or-throw.args.ts create mode 100644 server/src/core/@generated/user-settings/find-first-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/find-many-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/find-unique-user-settings-or-throw.args.ts create mode 100644 server/src/core/@generated/user-settings/find-unique-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/update-many-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/update-one-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/upsert-one-user-settings.args.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-count-aggregate.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-count-aggregate.output.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-count-order-by-aggregate.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-create-many.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-create-nested-one-without-user.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-create-or-connect-without-user.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-create-without-user.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-create.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-group-by.args.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-group-by.output.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-max-aggregate.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-max-aggregate.output.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-max-order-by-aggregate.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-min-aggregate.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-min-aggregate.output.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-min-order-by-aggregate.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-order-by-with-aggregation.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-order-by-with-relation.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-relation-filter.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-scalar-field.enum.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-scalar-where-with-aggregates.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-unchecked-create-without-user.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-unchecked-create.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-unchecked-update-many.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-unchecked-update-without-user.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-unchecked-update.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-update-many-mutation.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-update-one-required-without-user-nested.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-update-without-user.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-update.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-upsert-without-user.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-where-unique.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings-where.input.ts create mode 100644 server/src/core/@generated/user-settings/user-settings.model.ts create mode 100644 server/src/core/@generated/user/user-create-nested-one-without-settings.input.ts create mode 100644 server/src/core/@generated/user/user-create-or-connect-without-settings.input.ts create mode 100644 server/src/core/@generated/user/user-create-without-settings.input.ts create mode 100644 server/src/core/@generated/user/user-settings-aggregate.args.ts create mode 100644 server/src/core/@generated/user/user-unchecked-create-nested-one-without-settings.input.ts create mode 100644 server/src/core/@generated/user/user-unchecked-create-without-settings.input.ts create mode 100644 server/src/core/@generated/user/user-unchecked-update-one-without-settings-nested.input.ts create mode 100644 server/src/core/@generated/user/user-unchecked-update-without-settings.input.ts create mode 100644 server/src/core/@generated/user/user-update-one-without-settings-nested.input.ts create mode 100644 server/src/core/@generated/user/user-update-without-settings.input.ts create mode 100644 server/src/core/@generated/user/user-upsert-without-settings.input.ts create mode 100644 server/src/database/migrations/20230718070849_alter_table_user_and_add_table_user_settings/migration.sql diff --git a/front/src/App.tsx b/front/src/App.tsx index 475455d37..5a74ddb33 100644 --- a/front/src/App.tsx +++ b/front/src/App.tsx @@ -15,15 +15,15 @@ import { Index } from '~/pages/auth/Index'; import { PasswordLogin } from '~/pages/auth/PasswordLogin'; import { Verify } from '~/pages/auth/Verify'; import { Companies } from '~/pages/companies/Companies'; +import { CompanyShow } from '~/pages/companies/CompanyShow'; import { Opportunities } from '~/pages/opportunities/Opportunities'; import { People } from '~/pages/people/People'; +import { PersonShow } from '~/pages/people/PersonShow'; +import { SettingsExperience } from '~/pages/settings/SettingsExperience'; import { SettingsProfile } from '~/pages/settings/SettingsProfile'; +import { SettingsWorksapce } from '~/pages/settings/SettingsWorkspace'; import { SettingsWorkspaceMembers } from '~/pages/settings/SettingsWorkspaceMembers'; - -import { CompanyShow } from './pages/companies/CompanyShow'; -import { PersonShow } from './pages/people/PersonShow'; -import { SettingsWorksapce } from './pages/settings/SettingsWorkspace'; -import { AppInternalHooks } from './sync-hooks/AppInternalHooks'; +import { AppInternalHooks } from '~/sync-hooks/AppInternalHooks'; /** * AuthRoutes is used to allow transitions between auth pages with framer-motion. @@ -100,6 +100,10 @@ export function App() { path={SettingsPath.ProfilePage} element={} /> + } + /> } diff --git a/front/src/generated/graphql.tsx b/front/src/generated/graphql.tsx index 9ebf6e2aa..5a59f5ccd 100644 --- a/front/src/generated/graphql.tsx +++ b/front/src/generated/graphql.tsx @@ -75,6 +75,12 @@ export type ClientConfig = { telemetry: Telemetry; }; +export enum ColorScheme { + Dark = 'Dark', + Light = 'Light', + System = 'System' +} + export type Comment = { __typename?: 'Comment'; author: User; @@ -1277,6 +1283,17 @@ export type EnumActivityTypeFilter = { notIn?: InputMaybe>; }; +export type EnumColorSchemeFieldUpdateOperationsInput = { + set?: InputMaybe; +}; + +export type EnumColorSchemeFilter = { + equals?: InputMaybe; + in?: InputMaybe>; + not?: InputMaybe; + notIn?: InputMaybe>; +}; + export type EnumCommentableTypeFieldUpdateOperationsInput = { set?: InputMaybe; }; @@ -1542,6 +1559,13 @@ export type NestedEnumActivityTypeFilter = { notIn?: InputMaybe>; }; +export type NestedEnumColorSchemeFilter = { + equals?: InputMaybe; + in?: InputMaybe>; + not?: InputMaybe; + notIn?: InputMaybe>; +}; + export type NestedEnumCommentableTypeFilter = { equals?: InputMaybe; in?: InputMaybe>; @@ -2843,9 +2867,10 @@ export type User = { id: Scalars['ID']; lastName?: Maybe; lastSeen?: Maybe; - locale: Scalars['String']; metadata?: Maybe; phoneNumber?: Maybe; + settings: UserSettings; + settingsId: Scalars['String']; updatedAt: Scalars['DateTime']; workspaceMember?: Maybe; }; @@ -2909,9 +2934,9 @@ export type UserCreateWithoutAssignedCommentThreadsInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale: Scalars['String']; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings: UserSettingsCreateNestedOneWithoutUserInput; updatedAt?: InputMaybe; }; @@ -2928,9 +2953,9 @@ export type UserCreateWithoutAuthoredCommentThreadsInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale: Scalars['String']; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings: UserSettingsCreateNestedOneWithoutUserInput; updatedAt?: InputMaybe; }; @@ -2947,9 +2972,9 @@ export type UserCreateWithoutCommentsInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale: Scalars['String']; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings: UserSettingsCreateNestedOneWithoutUserInput; updatedAt?: InputMaybe; }; @@ -2967,9 +2992,9 @@ export type UserCreateWithoutWorkspaceMemberInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale: Scalars['String']; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings: UserSettingsCreateNestedOneWithoutUserInput; updatedAt?: InputMaybe; }; @@ -2992,9 +3017,10 @@ export type UserOrderByWithRelationInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale?: InputMaybe; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings?: InputMaybe; + settingsId?: InputMaybe; updatedAt?: InputMaybe; }; @@ -3014,13 +3040,93 @@ export enum UserScalarFieldEnum { Id = 'id', LastName = 'lastName', LastSeen = 'lastSeen', - Locale = 'locale', Metadata = 'metadata', PasswordHash = 'passwordHash', PhoneNumber = 'phoneNumber', + SettingsId = 'settingsId', UpdatedAt = 'updatedAt' } +export type UserSettings = { + __typename?: 'UserSettings'; + colorScheme: ColorScheme; + createdAt: Scalars['DateTime']; + id: Scalars['ID']; + locale: Scalars['String']; + updatedAt: Scalars['DateTime']; + user?: Maybe; +}; + +export type UserSettingsCreateNestedOneWithoutUserInput = { + connect?: InputMaybe; + connectOrCreate?: InputMaybe; + create?: InputMaybe; +}; + +export type UserSettingsCreateOrConnectWithoutUserInput = { + create: UserSettingsCreateWithoutUserInput; + where: UserSettingsWhereUniqueInput; +}; + +export type UserSettingsCreateWithoutUserInput = { + colorScheme?: InputMaybe; + createdAt?: InputMaybe; + id?: InputMaybe; + locale: Scalars['String']; + updatedAt?: InputMaybe; +}; + +export type UserSettingsOrderByWithRelationInput = { + colorScheme?: InputMaybe; + createdAt?: InputMaybe; + id?: InputMaybe; + locale?: InputMaybe; + updatedAt?: InputMaybe; + user?: InputMaybe; +}; + +export type UserSettingsRelationFilter = { + is?: InputMaybe; + isNot?: InputMaybe; +}; + +export type UserSettingsUpdateOneRequiredWithoutUserNestedInput = { + connect?: InputMaybe; + connectOrCreate?: InputMaybe; + create?: InputMaybe; + update?: InputMaybe; + upsert?: InputMaybe; +}; + +export type UserSettingsUpdateWithoutUserInput = { + colorScheme?: InputMaybe; + createdAt?: InputMaybe; + id?: InputMaybe; + locale?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type UserSettingsUpsertWithoutUserInput = { + create: UserSettingsCreateWithoutUserInput; + update: UserSettingsUpdateWithoutUserInput; +}; + +export type UserSettingsWhereInput = { + AND?: InputMaybe>; + NOT?: InputMaybe>; + OR?: InputMaybe>; + colorScheme?: InputMaybe; + createdAt?: InputMaybe; + id?: InputMaybe; + locale?: InputMaybe; + updatedAt?: InputMaybe; + user?: InputMaybe; +}; + +export type UserSettingsWhereUniqueInput = { + id?: InputMaybe; +}; + export type UserUpdateInput = { assignedCommentThreads?: InputMaybe; authoredCommentThreads?: InputMaybe; @@ -3035,9 +3141,9 @@ export type UserUpdateInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale?: InputMaybe; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings?: InputMaybe; updatedAt?: InputMaybe; }; @@ -3092,9 +3198,9 @@ export type UserUpdateWithoutAssignedCommentThreadsInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale?: InputMaybe; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings?: InputMaybe; updatedAt?: InputMaybe; }; @@ -3111,9 +3217,9 @@ export type UserUpdateWithoutAuthoredCommentThreadsInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale?: InputMaybe; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings?: InputMaybe; updatedAt?: InputMaybe; }; @@ -3130,9 +3236,9 @@ export type UserUpdateWithoutCommentsInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale?: InputMaybe; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings?: InputMaybe; updatedAt?: InputMaybe; }; @@ -3150,9 +3256,9 @@ export type UserUpdateWithoutWorkspaceMemberInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale?: InputMaybe; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings?: InputMaybe; updatedAt?: InputMaybe; }; @@ -3193,15 +3299,17 @@ export type UserWhereInput = { id?: InputMaybe; lastName?: InputMaybe; lastSeen?: InputMaybe; - locale?: InputMaybe; metadata?: InputMaybe; phoneNumber?: InputMaybe; + settings?: InputMaybe; + settingsId?: InputMaybe; updatedAt?: InputMaybe; }; export type UserWhereUniqueInput = { email?: InputMaybe; id?: InputMaybe; + settingsId?: InputMaybe; }; export type Verify = { @@ -3737,7 +3845,7 @@ export type SearchCompanyQuery = { __typename?: 'Query', searchResults: Array<{ export type GetCurrentUserQueryVariables = Exact<{ [key: string]: never; }>; -export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typename?: 'User', id: string, email: string, displayName: string, firstName?: string | null, lastName?: string | null, avatarUrl?: string | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, workspace: { __typename?: 'Workspace', id: string, domainName?: string | null, displayName?: string | null, logo?: string | null, inviteHash?: string | null } } | null } }; +export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typename?: 'User', id: string, email: string, displayName: string, firstName?: string | null, lastName?: string | null, avatarUrl?: string | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, workspace: { __typename?: 'Workspace', id: string, domainName?: string | null, displayName?: string | null, logo?: string | null, inviteHash?: string | null } } | null, settings: { __typename?: 'UserSettings', id: string, locale: string, colorScheme: ColorScheme } } }; export type GetUsersQueryVariables = Exact<{ [key: string]: never; }>; @@ -3750,7 +3858,7 @@ export type UpdateUserMutationVariables = Exact<{ }>; -export type UpdateUserMutation = { __typename?: 'Mutation', updateUser: { __typename?: 'User', id: string, email: string, displayName: string, firstName?: string | null, lastName?: string | null, avatarUrl?: string | null } }; +export type UpdateUserMutation = { __typename?: 'Mutation', updateUser: { __typename?: 'User', id: string, email: string, displayName: string, firstName?: string | null, lastName?: string | null, avatarUrl?: string | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, workspace: { __typename?: 'Workspace', id: string, domainName?: string | null, displayName?: string | null, logo?: string | null, inviteHash?: string | null } } | null, settings: { __typename?: 'UserSettings', id: string, locale: string, colorScheme: ColorScheme } } }; export type UploadProfilePictureMutationVariables = Exact<{ file: Scalars['Upload']; @@ -3764,7 +3872,7 @@ export type RemoveProfilePictureMutationVariables = Exact<{ }>; -export type RemoveProfilePictureMutation = { __typename?: 'Mutation', updateUser: { __typename?: 'User', id: string } }; +export type RemoveProfilePictureMutation = { __typename?: 'Mutation', updateUser: { __typename?: 'User', id: string, avatarUrl?: string | null } }; export type GetWorkspaceMembersQueryVariables = Exact<{ [key: string]: never; }>; @@ -5662,6 +5770,11 @@ export const GetCurrentUserDocument = gql` inviteHash } } + settings { + id + locale + colorScheme + } } } `; @@ -5739,6 +5852,21 @@ export const UpdateUserDocument = gql` firstName lastName avatarUrl + workspaceMember { + id + workspace { + id + domainName + displayName + logo + inviteHash + } + } + settings { + id + locale + colorScheme + } } } `; @@ -5804,6 +5932,7 @@ export const RemoveProfilePictureDocument = gql` mutation RemoveProfilePicture($where: UserWhereUniqueInput!) { updateUser(data: {avatarUrl: {set: null}}, where: $where) { id + avatarUrl } } `; diff --git a/front/src/modules/auth/states/tokenPairState.ts b/front/src/modules/auth/states/tokenPairState.ts index 50006547a..2bf851df4 100644 --- a/front/src/modules/auth/states/tokenPairState.ts +++ b/front/src/modules/auth/states/tokenPairState.ts @@ -1,26 +1,7 @@ -import { atom, AtomEffect } from 'recoil'; +import { atom } from 'recoil'; import { AuthTokenPair } from '~/generated/graphql'; -import { cookieStorage } from '~/utils/cookie-storage'; - -const cookieStorageEffect = - (key: string): AtomEffect => - ({ setSelf, onSet }) => { - const savedValue = cookieStorage.getItem(key); - if (savedValue != null && JSON.parse(savedValue)['accessToken']) { - setSelf(JSON.parse(savedValue)); - } - - onSet((newValue, _, isReset) => { - if (!newValue) { - cookieStorage.removeItem(key); - return; - } - isReset - ? cookieStorage.removeItem(key) - : cookieStorage.setItem(key, JSON.stringify(newValue)); - }); - }; +import { cookieStorageEffect } from '~/utils/recoil-effects'; export const tokenPairState = atom({ key: 'tokenPairState', diff --git a/front/src/modules/settings/components/SettingsNavbar.tsx b/front/src/modules/settings/components/SettingsNavbar.tsx index 89841805e..b41aa10d6 100644 --- a/front/src/modules/settings/components/SettingsNavbar.tsx +++ b/front/src/modules/settings/components/SettingsNavbar.tsx @@ -42,7 +42,6 @@ export function SettingsNavbar() { label="Experience" to="/settings/profile/experience" icon={} - soon={true} active={ !!useMatch({ path: useResolvedPath('/settings/profile/experience').pathname, diff --git a/front/src/modules/types/SettingsPath.ts b/front/src/modules/types/SettingsPath.ts index dcf282e03..c15e6d9c3 100644 --- a/front/src/modules/types/SettingsPath.ts +++ b/front/src/modules/types/SettingsPath.ts @@ -1,5 +1,6 @@ export enum SettingsPath { ProfilePage = 'profile', + Experience = 'profile/experience', WorkspaceMembersPage = 'workspace-members', Workspace = 'workspace', } diff --git a/front/src/modules/ui/checkmark/components/Checkmark.tsx b/front/src/modules/ui/checkmark/components/Checkmark.tsx new file mode 100644 index 000000000..6e49180e7 --- /dev/null +++ b/front/src/modules/ui/checkmark/components/Checkmark.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; + +import { IconCheck } from '@/ui/icon'; + +const StyledContainer = styled.div` + align-items: center; + background-color: ${({ theme }) => theme.color.blue}; + border-radius: 50%; + display: flex; + height: 20px; + justify-content: center; + width: 20px; +`; + +export type CheckmarkProps = React.ComponentPropsWithoutRef<'div'>; + +export function Checkmark(props: CheckmarkProps) { + const theme = useTheme(); + + return ( + + + + ); +} diff --git a/front/src/modules/ui/color-scheme/components/ColorSchemeCard.tsx b/front/src/modules/ui/color-scheme/components/ColorSchemeCard.tsx new file mode 100644 index 000000000..42d96e2e8 --- /dev/null +++ b/front/src/modules/ui/color-scheme/components/ColorSchemeCard.tsx @@ -0,0 +1,235 @@ +import React from 'react'; +import styled from '@emotion/styled'; +import { + AnimatePresence, + AnimationControls, + motion, + useAnimation, +} from 'framer-motion'; + +import { Checkmark } from '@/ui/checkmark/components/Checkmark'; +import DarkNoise from '@/ui/themes/assets/dark-noise.png'; +import LightNoise from '@/ui/themes/assets/light-noise.png'; +import { grayScale } from '@/ui/themes/colors'; +import { ColorScheme } from '~/generated/graphql'; + +const StyledColorSchemeBackground = styled.div< + Pick +>` + align-items: flex-end; + background: ${({ variant }) => { + switch (variant) { + case 'dark': + return `url(${DarkNoise.toString()});`; + case 'light': + default: + return `url(${LightNoise.toString()});`; + } + }}; + border: ${({ variant }) => { + switch (variant) { + case 'dark': + return `1px solid ${grayScale.gray65};`; + case 'light': + default: + return `1px solid ${grayScale.gray20};`; + } + }}; + border-radius: ${({ theme }) => theme.border.radius.md}; + box-sizing: border-box; + cursor: pointer; + display: flex; + height: 80px; + justify-content: flex-end; + overflow: hidden; + padding-left: ${({ theme }) => theme.spacing(6)}; + padding-top: ${({ theme }) => theme.spacing(6)}; + width: 120px; +`; + +const StyledColorSchemeContent = styled(motion.div)< + Pick +>` + background: ${({ theme, variant }) => { + switch (variant) { + case 'dark': + return grayScale.gray70; + case 'light': + return theme.color.gray0; + } + }}; + + border-left: ${({ variant }) => { + switch (variant) { + case 'dark': + return `1px solid ${grayScale.gray55};`; + case 'light': + default: + return `1px solid ${grayScale.gray20};`; + } + }}; + border-radius: ${({ theme }) => theme.border.radius.md} 0px 0px 0px; + border-top: ${({ variant }) => { + switch (variant) { + case 'dark': + return `1px solid ${grayScale.gray55};`; + case 'light': + default: + return `1px solid ${grayScale.gray20};`; + } + }}; + box-sizing: border-box; + color: ${({ variant }) => { + switch (variant) { + case 'dark': + return grayScale.gray30; + case 'light': + default: + return grayScale.gray55; + } + }}; + display: flex; + flex: 1; + font-size: 20px; + height: 56px; + padding-left: ${({ theme }) => theme.spacing(2)}; + padding-top: ${({ theme }) => theme.spacing(2)}; +`; + +export type ColorSchemeSegmentProps = { + variant: `${Lowercase}`; + controls: AnimationControls; +} & React.ComponentPropsWithoutRef<'div'>; + +function ColorSchemeSegment({ + variant, + controls, + ...rest +}: ColorSchemeSegmentProps) { + return ( + + + Aa + + + ); +} + +const StyledContainer = styled.div` + position: relative; +`; + +const StyledMixedColorSchemeSegment = styled.div` + border-radius: ${({ theme }) => theme.border.radius.md}; + cursor: pointer; + display: flex; + display: flex; + height: 80px; + overflow: hidden; + width: 120px; +`; + +const StyledCheckmarkContainer = styled(motion.div)` + bottom: 0px; + padding: ${({ theme }) => theme.spacing(2)}; + position: absolute; + right: 0px; +`; + +export type ColorSchemeCardProps = { + variant: `${Lowercase}`; + selected?: boolean; +} & React.ComponentPropsWithoutRef<'div'>; + +const checkmarkAnimationVariants = { + initial: { opacity: 0 }, + animate: { opacity: 1 }, + exit: { opacity: 0 }, +}; + +export function ColorSchemeCard({ + variant, + selected, + ...rest +}: ColorSchemeCardProps) { + const controls = useAnimation(); + + function handleMouseEnter() { + controls.start({ + height: 61, + fontSize: '22px', + transition: { duration: 0.1 }, + }); + } + + function handleMouseLeave() { + controls.start({ + height: 56, + fontSize: '20px', + transition: { duration: 0.1 }, + }); + } + + if (variant === 'system') { + return ( + + + + + + + {selected && ( + + + + )} + + + ); + } + + return ( + + + + {selected && ( + + + + )} + + + ); +} diff --git a/front/src/modules/ui/color-scheme/components/ColorSchemePicker.tsx b/front/src/modules/ui/color-scheme/components/ColorSchemePicker.tsx new file mode 100644 index 000000000..99dd334ae --- /dev/null +++ b/front/src/modules/ui/color-scheme/components/ColorSchemePicker.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +import styled from '@emotion/styled'; + +import { ColorScheme } from '~/generated/graphql'; + +import { ColorSchemeCard } from './ColorSchemeCard'; + +const StyledContainer = styled.div` + display: flex; + flex-direction: row; + > * + * { + margin-left: ${({ theme }) => theme.spacing(4)}; + } +`; + +const CardContainer = styled.div` + display: flex; + flex-direction: column; +`; + +const Label = styled.span` + color: ${({ theme }) => theme.font.color.secondary}; + font-size: ${({ theme }) => theme.font.size.xs}; + font-weight: ${({ theme }) => theme.font.weight.medium}; + margin-top: ${({ theme }) => theme.spacing(2)}; +`; + +export type ColorSchemePickerProps = { + value: ColorScheme; + onChange: (value: ColorScheme) => void; +}; + +export function ColorSchemePicker({ value, onChange }: ColorSchemePickerProps) { + return ( + + + onChange(ColorScheme.Light)} + variant="light" + selected={value === ColorScheme.Light} + /> + + + + onChange(ColorScheme.Dark)} + variant="dark" + selected={value === ColorScheme.Dark} + /> + + + + onChange(ColorScheme.System)} + variant="system" + selected={value === ColorScheme.System} + /> + + + + ); +} diff --git a/front/src/modules/ui/color-scheme/components/__stories__/ColorSchemeCard.stories.tsx b/front/src/modules/ui/color-scheme/components/__stories__/ColorSchemeCard.stories.tsx new file mode 100644 index 000000000..9b72818d7 --- /dev/null +++ b/front/src/modules/ui/color-scheme/components/__stories__/ColorSchemeCard.stories.tsx @@ -0,0 +1,42 @@ +import styled from '@emotion/styled'; +import type { Meta, StoryObj } from '@storybook/react'; + +import { getRenderWrapperForComponent } from '~/testing/renderWrappers'; + +import { ColorSchemeCard } from '../ColorSchemeCard'; + +const Container = styled.div` + display: flex; + flex-direction: row; + > * + * { + margin-left: ${({ theme }) => theme.spacing(4)}; + } +`; + +const meta: Meta = { + title: 'UI/ColorScheme/ColorSchemeCard', + component: ColorSchemeCard, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: getRenderWrapperForComponent( + + + + + , + ), +}; + +export const Selected: Story = { + render: getRenderWrapperForComponent( + + + + + , + ), +}; diff --git a/front/src/modules/ui/themes/colors.ts b/front/src/modules/ui/themes/colors.ts index b4f8fb3f7..f5ba2eb27 100644 --- a/front/src/modules/ui/themes/colors.ts +++ b/front/src/modules/ui/themes/colors.ts @@ -104,6 +104,7 @@ export const color = { orange30: '#f09797', orange20: '#fbc5c5', orange10: '#fde4e4', + // TODO: Why color are not matching with design? gray: grayScale.gray30, gray80: grayScale.gray65, gray70: grayScale.gray60, diff --git a/front/src/modules/ui/themes/components/AppThemeProvider.tsx b/front/src/modules/ui/themes/components/AppThemeProvider.tsx index df7d30fc6..768691d4e 100644 --- a/front/src/modules/ui/themes/components/AppThemeProvider.tsx +++ b/front/src/modules/ui/themes/components/AppThemeProvider.tsx @@ -1,14 +1,29 @@ import { ThemeProvider } from '@emotion/react'; import { darkTheme, lightTheme } from '@/ui/themes/themes'; -import { browserPrefersDarkMode } from '~/utils'; +import { ColorScheme } from '~/generated/graphql'; + +import { useColorScheme } from '../hooks/useColorScheme'; +import { useSystemColorScheme } from '../hooks/useSystemColorScheme'; type OwnProps = { children: JSX.Element; }; -export function AppThemeProvider({ children }: OwnProps) { - const selectedTheme = browserPrefersDarkMode() ? darkTheme : lightTheme; +const themes = { + [ColorScheme.Dark]: darkTheme, + [ColorScheme.Light]: lightTheme, +}; - return {children}; +export function AppThemeProvider({ children }: OwnProps) { + const systemColorScheme = useSystemColorScheme(); + + const { colorScheme } = useColorScheme(); + + const theme = + themes[ + colorScheme === ColorScheme.System ? systemColorScheme : colorScheme + ]; + + return {children}; } diff --git a/front/src/modules/ui/themes/hooks/useColorScheme.ts b/front/src/modules/ui/themes/hooks/useColorScheme.ts new file mode 100644 index 000000000..91bf79d55 --- /dev/null +++ b/front/src/modules/ui/themes/hooks/useColorScheme.ts @@ -0,0 +1,53 @@ +import { useCallback, useMemo } from 'react'; +import { useRecoilState } from 'recoil'; + +import { currentUserState } from '@/auth/states/currentUserState'; +import { ColorScheme, useUpdateUserMutation } from '~/generated/graphql'; + +export function useColorScheme() { + const [currentUser] = useRecoilState(currentUserState); + + const [updateUser] = useUpdateUserMutation(); + + const colorScheme = useMemo(() => { + if (!currentUser?.settings?.colorScheme) { + // Use system color scheme if user is not logged in or has no settings + return ColorScheme.System; + } + + return currentUser.settings.colorScheme; + }, [currentUser?.settings?.colorScheme]); + + const setColorScheme = useCallback( + async (value: ColorScheme) => { + try { + const result = await updateUser({ + variables: { + where: { + id: currentUser?.id, + }, + data: { + settings: { + update: { + colorScheme: { + set: value, + }, + }, + }, + }, + }, + }); + + if (!result.data || result.errors) { + throw result.errors; + } + } catch (err) {} + }, + [currentUser?.id, updateUser], + ); + + return { + colorScheme, + setColorScheme, + }; +} diff --git a/front/src/modules/ui/themes/hooks/useSystemColorScheme.ts b/front/src/modules/ui/themes/hooks/useSystemColorScheme.ts new file mode 100644 index 000000000..6fc4d4497 --- /dev/null +++ b/front/src/modules/ui/themes/hooks/useSystemColorScheme.ts @@ -0,0 +1,39 @@ +import { useEffect, useMemo, useState } from 'react'; + +import { ColorScheme } from '~/generated/graphql'; + +export type SystemColorScheme = ColorScheme.Light | ColorScheme.Dark; + +export function useSystemColorScheme(): SystemColorScheme { + const mediaQuery = useMemo( + () => window.matchMedia('(prefers-color-scheme: dark)'), + [], + ); + + const [preferredColorScheme, setPreferredColorScheme] = + useState( + !window.matchMedia || !mediaQuery.matches + ? ColorScheme.Light + : ColorScheme.Dark, + ); + + useEffect(() => { + if (!window.matchMedia) { + return; + } + + function handleChange(event: MediaQueryListEvent): void { + setPreferredColorScheme( + event.matches ? ColorScheme.Dark : ColorScheme.Light, + ); + } + + mediaQuery.addEventListener('change', handleChange); + + return () => { + mediaQuery.removeEventListener('change', handleChange); + }; + }, [mediaQuery]); + + return preferredColorScheme; +} diff --git a/front/src/modules/ui/title/components/MainSectionTitle.tsx b/front/src/modules/ui/title/components/MainSectionTitle.tsx index a8f5be841..ddd365d42 100644 --- a/front/src/modules/ui/title/components/MainSectionTitle.tsx +++ b/front/src/modules/ui/title/components/MainSectionTitle.tsx @@ -6,7 +6,7 @@ type OwnProps = { }; const StyledMainSectionTitle = styled.h2` - color: ${({ theme }) => theme.font.color.primary}; + color: ${({ theme }) => theme.font.color.tertiary}; font-size: ${({ theme }) => theme.font.size.xl}; font-weight: ${({ theme }) => theme.font.weight.semiBold}; line-height: ${({ theme }) => theme.text.lineHeight.lg}; diff --git a/front/src/modules/users/queries/index.ts b/front/src/modules/users/queries/index.ts index a237ff582..f4681e413 100644 --- a/front/src/modules/users/queries/index.ts +++ b/front/src/modules/users/queries/index.ts @@ -20,6 +20,11 @@ export const GET_CURRENT_USER = gql` inviteHash } } + settings { + id + locale + colorScheme + } } } `; diff --git a/front/src/modules/users/queries/update.ts b/front/src/modules/users/queries/update.ts index 7fec81815..0d11b1338 100644 --- a/front/src/modules/users/queries/update.ts +++ b/front/src/modules/users/queries/update.ts @@ -9,6 +9,21 @@ export const UPDATE_USER = gql` firstName lastName avatarUrl + workspaceMember { + id + workspace { + id + domainName + displayName + logo + inviteHash + } + } + settings { + id + locale + colorScheme + } } } `; @@ -23,6 +38,7 @@ export const REMOVE_PROFILE_PICTURE = gql` mutation RemoveProfilePicture($where: UserWhereUniqueInput!) { updateUser(data: { avatarUrl: { set: null } }, where: $where) { id + avatarUrl } } `; diff --git a/front/src/pages/settings/SettingsExperience.tsx b/front/src/pages/settings/SettingsExperience.tsx new file mode 100644 index 000000000..00a3c5aaa --- /dev/null +++ b/front/src/pages/settings/SettingsExperience.tsx @@ -0,0 +1,42 @@ +import styled from '@emotion/styled'; + +import { ColorSchemePicker } from '@/ui/color-scheme/components/ColorSchemePicker'; +import { NoTopBarContainer } from '@/ui/layout/components/NoTopBarContainer'; +import { useColorScheme } from '@/ui/themes/hooks/useColorScheme'; +import { MainSectionTitle } from '@/ui/title/components/MainSectionTitle'; +import { SubSectionTitle } from '@/ui/title/components/SubSectionTitle'; + +const StyledContainer = styled.div` + display: flex; + flex-direction: column; + padding: ${({ theme }) => theme.spacing(8)}; + padding-bottom: ${({ theme }) => theme.spacing(10)}; + width: 350px; + > * + * { + margin-top: ${({ theme }) => theme.spacing(8)}; + } +`; + +const StyledSectionContainer = styled.div` + > * + * { + margin-top: ${({ theme }) => theme.spacing(4)}; + } +`; + +export function SettingsExperience() { + const { colorScheme, setColorScheme } = useColorScheme(); + + return ( + +
+ + Experience + + + + + +
+
+ ); +} diff --git a/front/src/testing/mock-data/users.ts b/front/src/testing/mock-data/users.ts index d6f45cb15..62a32d82b 100644 --- a/front/src/testing/mock-data/users.ts +++ b/front/src/testing/mock-data/users.ts @@ -1,22 +1,6 @@ -import { User, Workspace, WorkspaceMember } from '~/generated/graphql'; +import { ColorScheme, GetCurrentUserQuery } from '~/generated/graphql'; -type MockedUser = Pick< - User, - | 'id' - | 'email' - | 'displayName' - | 'avatarUrl' - | '__typename' - | 'firstName' - | 'lastName' -> & { - workspaceMember: Pick & { - workspace: Pick< - Workspace, - 'id' | 'displayName' | 'domainName' | 'logo' | 'inviteHash' | '__typename' - >; - }; -}; +type MockedUser = GetCurrentUserQuery['currentUser']; export const mockedUsersData: Array = [ { @@ -39,6 +23,12 @@ export const mockedUsersData: Array = [ logo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACb0lEQVR4nO2VO4taQRTHr3AblbjxEVlwCwVhg7BoqqCIjy/gAyyFWNlYBOxsfH0KuxgQGwXRUkGuL2S7i1barGAgiwbdW93SnGOc4BonPiKahf3DwXFmuP/fPM4ZlvmlTxAhCBdzHnEQWYiv7Mr4C3NeuVYhQYDPzOUUQgDLBQGcLHNhvQK8DACPx8PTxiqVyvISG43GbyaT6Qfpn06n0m63e/tPAPF4vJ1MJu8kEsnWTCkWi1yr1RKGw+GDRqPBOTfr44vFQvD7/Q/lcpmaaVQAr9fLp1IpO22c47hGOBz+MB6PH+Vy+VYDAL8qlUoGtVotzOfzq4MAgsHgE/6KojiQyWR/bKVSqbSszHFM8Pl8z1YK48JsNltCOBwOnrYLO+8AAIjb+nHbycoTiUQfDJ7tFq4YAHiVSmXBxcD41u8flQU8z7fhzO0r83atVns3Go3u9Xr9x0O/RQXo9/tsIBBg6vX606a52Wz+bZ7P5/WwG29gxSJzhKgA6XTaDoFNF+krFAocmC//4yWEcSf2wTm7mCO19xFgSsKOLI16vV7b7XY7mRNoLwA0JymJ5uQIzgIAuX5PzDElT2m+E8BqtQ4ymcx7Yq7T6a6ZE4sKgOadTucaCwkxp1UzlEKh0GDxIXOwDWHAdi6Xe3swQDQa/Q7mywoolUpvsaptymazDWKxmBHTlWXZm405BFZoNpuGgwEmk4mE2SGtVivii4f1AO7J3ZopkQCQj7Ar1FeRChCJRJzVapX6DKNIfSc1Ax+wtQWQ55h6bH8FWDfYV4fO3wlwDr0C/BcADYiTPCxHqIEA2QsCZAkAKnRGkMbKN/sTX5YHPQ1e7SkAAAAASUVORK5CYII=', }, }, + settings: { + id: '7dfbc3f7-6e5e-4128-957e-8d86808cde9y', + __typename: 'UserSettings', + locale: 'en', + colorScheme: ColorScheme.System, + }, }, { id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6c', @@ -59,5 +49,11 @@ export const mockedUsersData: Array = [ logo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACb0lEQVR4nO2VO4taQRTHr3AblbjxEVlwCwVhg7BoqqCIjy/gAyyFWNlYBOxsfH0KuxgQGwXRUkGuL2S7i1barGAgiwbdW93SnGOc4BonPiKahf3DwXFmuP/fPM4ZlvmlTxAhCBdzHnEQWYiv7Mr4C3NeuVYhQYDPzOUUQgDLBQGcLHNhvQK8DACPx8PTxiqVyvISG43GbyaT6Qfpn06n0m63e/tPAPF4vJ1MJu8kEsnWTCkWi1yr1RKGw+GDRqPBOTfr44vFQvD7/Q/lcpmaaVQAr9fLp1IpO22c47hGOBz+MB6PH+Vy+VYDAL8qlUoGtVotzOfzq4MAgsHgE/6KojiQyWR/bKVSqbSszHFM8Pl8z1YK48JsNltCOBwOnrYLO+8AAIjb+nHbycoTiUQfDJ7tFq4YAHiVSmXBxcD41u8flQU8z7fhzO0r83atVns3Go3u9Xr9x0O/RQXo9/tsIBBg6vX606a52Wz+bZ7P5/WwG29gxSJzhKgA6XTaDoFNF+krFAocmC//4yWEcSf2wTm7mCO19xFgSsKOLI16vV7b7XY7mRNoLwA0JymJ5uQIzgIAuX5PzDElT2m+E8BqtQ4ymcx7Yq7T6a6ZE4sKgOadTucaCwkxp1UzlEKh0GDxIXOwDWHAdi6Xe3swQDQa/Q7mywoolUpvsaptymazDWKxmBHTlWXZm405BFZoNpuGgwEmk4mE2SGtVivii4f1AO7J3ZopkQCQj7Ar1FeRChCJRJzVapX6DKNIfSc1Ax+wtQWQ55h6bH8FWDfYV4fO3wlwDr0C/BcADYiTPCxHqIEA2QsCZAkAKnRGkMbKN/sTX5YHPQ1e7SkAAAAASUVORK5CYII=', }, }, + settings: { + id: '7dfbc3f7-6e5e-4128-957e-8d86808cdt7a', + __typename: 'UserSettings', + locale: 'en', + colorScheme: ColorScheme.System, + }, }, ]; diff --git a/front/src/utils/index.ts b/front/src/utils/index.ts index db987e2a4..fcab4d1e0 100644 --- a/front/src/utils/index.ts +++ b/front/src/utils/index.ts @@ -13,7 +13,3 @@ export function formatToHumanReadableDate(date: Date | string) { export const getLogoUrlFromDomainName = (domainName?: string): string => { return `https://api.faviconkit.com/${domainName}/144`; }; - -export const browserPrefersDarkMode = (): boolean => { - return window.matchMedia('(prefers-color-scheme: dark)').matches; -}; diff --git a/front/src/utils/recoil-effects.ts b/front/src/utils/recoil-effects.ts new file mode 100644 index 000000000..6268b06ce --- /dev/null +++ b/front/src/utils/recoil-effects.ts @@ -0,0 +1,37 @@ +import { AtomEffect } from 'recoil'; + +import { cookieStorage } from '~/utils/cookie-storage'; + +export const localStorageEffect = + (key: string): AtomEffect => + ({ setSelf, onSet }) => { + const savedValue = localStorage.getItem(key); + if (savedValue != null) { + setSelf(JSON.parse(savedValue)); + } + + onSet((newValue, _, isReset) => { + isReset + ? localStorage.removeItem(key) + : localStorage.setItem(key, JSON.stringify(newValue)); + }); + }; + +export const cookieStorageEffect = + (key: string): AtomEffect => + ({ setSelf, onSet }) => { + const savedValue = cookieStorage.getItem(key); + if (savedValue != null && JSON.parse(savedValue)['accessToken']) { + setSelf(JSON.parse(savedValue)); + } + + onSet((newValue, _, isReset) => { + if (!newValue) { + cookieStorage.removeItem(key); + return; + } + isReset + ? cookieStorage.removeItem(key) + : cookieStorage.setItem(key, JSON.stringify(newValue)); + }); + }; diff --git a/server/src/core/@generated/prisma/color-scheme.enum.ts b/server/src/core/@generated/prisma/color-scheme.enum.ts new file mode 100644 index 000000000..32683f8b9 --- /dev/null +++ b/server/src/core/@generated/prisma/color-scheme.enum.ts @@ -0,0 +1,10 @@ +import { registerEnumType } from '@nestjs/graphql'; + +export enum ColorScheme { + Light = "Light", + Dark = "Dark", + System = "System" +} + + +registerEnumType(ColorScheme, { name: 'ColorScheme', description: undefined }) diff --git a/server/src/core/@generated/prisma/enum-color-scheme-field-update-operations.input.ts b/server/src/core/@generated/prisma/enum-color-scheme-field-update-operations.input.ts new file mode 100644 index 000000000..3cdcc6f19 --- /dev/null +++ b/server/src/core/@generated/prisma/enum-color-scheme-field-update-operations.input.ts @@ -0,0 +1,10 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from './color-scheme.enum'; + +@InputType() +export class EnumColorSchemeFieldUpdateOperationsInput { + + @Field(() => ColorScheme, {nullable:true}) + set?: keyof typeof ColorScheme; +} diff --git a/server/src/core/@generated/prisma/enum-color-scheme-filter.input.ts b/server/src/core/@generated/prisma/enum-color-scheme-filter.input.ts new file mode 100644 index 000000000..a15900076 --- /dev/null +++ b/server/src/core/@generated/prisma/enum-color-scheme-filter.input.ts @@ -0,0 +1,20 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from './color-scheme.enum'; +import { NestedEnumColorSchemeFilter } from './nested-enum-color-scheme-filter.input'; + +@InputType() +export class EnumColorSchemeFilter { + + @Field(() => ColorScheme, {nullable:true}) + equals?: keyof typeof ColorScheme; + + @Field(() => [ColorScheme], {nullable:true}) + in?: Array; + + @Field(() => [ColorScheme], {nullable:true}) + notIn?: Array; + + @Field(() => NestedEnumColorSchemeFilter, {nullable:true}) + not?: NestedEnumColorSchemeFilter; +} diff --git a/server/src/core/@generated/prisma/enum-color-scheme-with-aggregates-filter.input.ts b/server/src/core/@generated/prisma/enum-color-scheme-with-aggregates-filter.input.ts new file mode 100644 index 000000000..96220c082 --- /dev/null +++ b/server/src/core/@generated/prisma/enum-color-scheme-with-aggregates-filter.input.ts @@ -0,0 +1,31 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from './color-scheme.enum'; +import { NestedEnumColorSchemeWithAggregatesFilter } from './nested-enum-color-scheme-with-aggregates-filter.input'; +import { NestedIntFilter } from './nested-int-filter.input'; +import { NestedEnumColorSchemeFilter } from './nested-enum-color-scheme-filter.input'; + +@InputType() +export class EnumColorSchemeWithAggregatesFilter { + + @Field(() => ColorScheme, {nullable:true}) + equals?: keyof typeof ColorScheme; + + @Field(() => [ColorScheme], {nullable:true}) + in?: Array; + + @Field(() => [ColorScheme], {nullable:true}) + notIn?: Array; + + @Field(() => NestedEnumColorSchemeWithAggregatesFilter, {nullable:true}) + not?: NestedEnumColorSchemeWithAggregatesFilter; + + @Field(() => NestedIntFilter, {nullable:true}) + _count?: NestedIntFilter; + + @Field(() => NestedEnumColorSchemeFilter, {nullable:true}) + _min?: NestedEnumColorSchemeFilter; + + @Field(() => NestedEnumColorSchemeFilter, {nullable:true}) + _max?: NestedEnumColorSchemeFilter; +} diff --git a/server/src/core/@generated/prisma/nested-enum-color-scheme-filter.input.ts b/server/src/core/@generated/prisma/nested-enum-color-scheme-filter.input.ts new file mode 100644 index 000000000..3eef0c3e1 --- /dev/null +++ b/server/src/core/@generated/prisma/nested-enum-color-scheme-filter.input.ts @@ -0,0 +1,19 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from './color-scheme.enum'; + +@InputType() +export class NestedEnumColorSchemeFilter { + + @Field(() => ColorScheme, {nullable:true}) + equals?: keyof typeof ColorScheme; + + @Field(() => [ColorScheme], {nullable:true}) + in?: Array; + + @Field(() => [ColorScheme], {nullable:true}) + notIn?: Array; + + @Field(() => NestedEnumColorSchemeFilter, {nullable:true}) + not?: NestedEnumColorSchemeFilter; +} diff --git a/server/src/core/@generated/prisma/nested-enum-color-scheme-with-aggregates-filter.input.ts b/server/src/core/@generated/prisma/nested-enum-color-scheme-with-aggregates-filter.input.ts new file mode 100644 index 000000000..d96a9ea47 --- /dev/null +++ b/server/src/core/@generated/prisma/nested-enum-color-scheme-with-aggregates-filter.input.ts @@ -0,0 +1,30 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from './color-scheme.enum'; +import { NestedIntFilter } from './nested-int-filter.input'; +import { NestedEnumColorSchemeFilter } from './nested-enum-color-scheme-filter.input'; + +@InputType() +export class NestedEnumColorSchemeWithAggregatesFilter { + + @Field(() => ColorScheme, {nullable:true}) + equals?: keyof typeof ColorScheme; + + @Field(() => [ColorScheme], {nullable:true}) + in?: Array; + + @Field(() => [ColorScheme], {nullable:true}) + notIn?: Array; + + @Field(() => NestedEnumColorSchemeWithAggregatesFilter, {nullable:true}) + not?: NestedEnumColorSchemeWithAggregatesFilter; + + @Field(() => NestedIntFilter, {nullable:true}) + _count?: NestedIntFilter; + + @Field(() => NestedEnumColorSchemeFilter, {nullable:true}) + _min?: NestedEnumColorSchemeFilter; + + @Field(() => NestedEnumColorSchemeFilter, {nullable:true}) + _max?: NestedEnumColorSchemeFilter; +} diff --git a/server/src/core/@generated/user-settings/aggregate-user-settings.output.ts b/server/src/core/@generated/user-settings/aggregate-user-settings.output.ts new file mode 100644 index 000000000..be6cbf81f --- /dev/null +++ b/server/src/core/@generated/user-settings/aggregate-user-settings.output.ts @@ -0,0 +1,18 @@ +import { Field } from '@nestjs/graphql'; +import { ObjectType } from '@nestjs/graphql'; +import { UserSettingsCountAggregate } from './user-settings-count-aggregate.output'; +import { UserSettingsMinAggregate } from './user-settings-min-aggregate.output'; +import { UserSettingsMaxAggregate } from './user-settings-max-aggregate.output'; + +@ObjectType() +export class AggregateUserSettings { + + @Field(() => UserSettingsCountAggregate, {nullable:true}) + _count?: UserSettingsCountAggregate; + + @Field(() => UserSettingsMinAggregate, {nullable:true}) + _min?: UserSettingsMinAggregate; + + @Field(() => UserSettingsMaxAggregate, {nullable:true}) + _max?: UserSettingsMaxAggregate; +} diff --git a/server/src/core/@generated/user-settings/create-many-user-settings.args.ts b/server/src/core/@generated/user-settings/create-many-user-settings.args.ts new file mode 100644 index 000000000..2abf1a0d7 --- /dev/null +++ b/server/src/core/@generated/user-settings/create-many-user-settings.args.ts @@ -0,0 +1,18 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsCreateManyInput } from './user-settings-create-many.input'; +import { Type } from 'class-transformer'; +import { ValidateNested } from 'class-validator'; + +@ArgsType() +export class CreateManyUserSettingsArgs { + + @Field(() => [UserSettingsCreateManyInput], {nullable:false}) + @Type(() => UserSettingsCreateManyInput) + @ValidateNested({each: true}) + @Type(() => UserSettingsCreateManyInput) + data!: Array; + + @Field(() => Boolean, {nullable:true}) + skipDuplicates?: boolean; +} diff --git a/server/src/core/@generated/user-settings/create-one-user-settings.args.ts b/server/src/core/@generated/user-settings/create-one-user-settings.args.ts new file mode 100644 index 000000000..bd9abc82a --- /dev/null +++ b/server/src/core/@generated/user-settings/create-one-user-settings.args.ts @@ -0,0 +1,15 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsCreateInput } from './user-settings-create.input'; +import { Type } from 'class-transformer'; +import { ValidateNested } from 'class-validator'; + +@ArgsType() +export class CreateOneUserSettingsArgs { + + @Field(() => UserSettingsCreateInput, {nullable:false}) + @Type(() => UserSettingsCreateInput) + @ValidateNested({each: true}) + @Type(() => UserSettingsCreateInput) + data!: UserSettingsCreateInput; +} diff --git a/server/src/core/@generated/user-settings/delete-many-user-settings.args.ts b/server/src/core/@generated/user-settings/delete-many-user-settings.args.ts new file mode 100644 index 000000000..3185862ce --- /dev/null +++ b/server/src/core/@generated/user-settings/delete-many-user-settings.args.ts @@ -0,0 +1,12 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereInput } from './user-settings-where.input'; +import { Type } from 'class-transformer'; + +@ArgsType() +export class DeleteManyUserSettingsArgs { + + @Field(() => UserSettingsWhereInput, {nullable:true}) + @Type(() => UserSettingsWhereInput) + where?: UserSettingsWhereInput; +} diff --git a/server/src/core/@generated/user-settings/delete-one-user-settings.args.ts b/server/src/core/@generated/user-settings/delete-one-user-settings.args.ts new file mode 100644 index 000000000..0143d0d1a --- /dev/null +++ b/server/src/core/@generated/user-settings/delete-one-user-settings.args.ts @@ -0,0 +1,12 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { Type } from 'class-transformer'; + +@ArgsType() +export class DeleteOneUserSettingsArgs { + + @Field(() => UserSettingsWhereUniqueInput, {nullable:false}) + @Type(() => UserSettingsWhereUniqueInput) + where!: UserSettingsWhereUniqueInput; +} diff --git a/server/src/core/@generated/user-settings/find-first-user-settings-or-throw.args.ts b/server/src/core/@generated/user-settings/find-first-user-settings-or-throw.args.ts new file mode 100644 index 000000000..ac8153fd4 --- /dev/null +++ b/server/src/core/@generated/user-settings/find-first-user-settings-or-throw.args.ts @@ -0,0 +1,31 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereInput } from './user-settings-where.input'; +import { Type } from 'class-transformer'; +import { UserSettingsOrderByWithRelationInput } from './user-settings-order-by-with-relation.input'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { Int } from '@nestjs/graphql'; +import { UserSettingsScalarFieldEnum } from './user-settings-scalar-field.enum'; + +@ArgsType() +export class FindFirstUserSettingsOrThrowArgs { + + @Field(() => UserSettingsWhereInput, {nullable:true}) + @Type(() => UserSettingsWhereInput) + where?: UserSettingsWhereInput; + + @Field(() => [UserSettingsOrderByWithRelationInput], {nullable:true}) + orderBy?: Array; + + @Field(() => UserSettingsWhereUniqueInput, {nullable:true}) + cursor?: UserSettingsWhereUniqueInput; + + @Field(() => Int, {nullable:true}) + take?: number; + + @Field(() => Int, {nullable:true}) + skip?: number; + + @Field(() => [UserSettingsScalarFieldEnum], {nullable:true}) + distinct?: Array; +} diff --git a/server/src/core/@generated/user-settings/find-first-user-settings.args.ts b/server/src/core/@generated/user-settings/find-first-user-settings.args.ts new file mode 100644 index 000000000..7e837adab --- /dev/null +++ b/server/src/core/@generated/user-settings/find-first-user-settings.args.ts @@ -0,0 +1,31 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereInput } from './user-settings-where.input'; +import { Type } from 'class-transformer'; +import { UserSettingsOrderByWithRelationInput } from './user-settings-order-by-with-relation.input'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { Int } from '@nestjs/graphql'; +import { UserSettingsScalarFieldEnum } from './user-settings-scalar-field.enum'; + +@ArgsType() +export class FindFirstUserSettingsArgs { + + @Field(() => UserSettingsWhereInput, {nullable:true}) + @Type(() => UserSettingsWhereInput) + where?: UserSettingsWhereInput; + + @Field(() => [UserSettingsOrderByWithRelationInput], {nullable:true}) + orderBy?: Array; + + @Field(() => UserSettingsWhereUniqueInput, {nullable:true}) + cursor?: UserSettingsWhereUniqueInput; + + @Field(() => Int, {nullable:true}) + take?: number; + + @Field(() => Int, {nullable:true}) + skip?: number; + + @Field(() => [UserSettingsScalarFieldEnum], {nullable:true}) + distinct?: Array; +} diff --git a/server/src/core/@generated/user-settings/find-many-user-settings.args.ts b/server/src/core/@generated/user-settings/find-many-user-settings.args.ts new file mode 100644 index 000000000..6bfcae91b --- /dev/null +++ b/server/src/core/@generated/user-settings/find-many-user-settings.args.ts @@ -0,0 +1,31 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereInput } from './user-settings-where.input'; +import { Type } from 'class-transformer'; +import { UserSettingsOrderByWithRelationInput } from './user-settings-order-by-with-relation.input'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { Int } from '@nestjs/graphql'; +import { UserSettingsScalarFieldEnum } from './user-settings-scalar-field.enum'; + +@ArgsType() +export class FindManyUserSettingsArgs { + + @Field(() => UserSettingsWhereInput, {nullable:true}) + @Type(() => UserSettingsWhereInput) + where?: UserSettingsWhereInput; + + @Field(() => [UserSettingsOrderByWithRelationInput], {nullable:true}) + orderBy?: Array; + + @Field(() => UserSettingsWhereUniqueInput, {nullable:true}) + cursor?: UserSettingsWhereUniqueInput; + + @Field(() => Int, {nullable:true}) + take?: number; + + @Field(() => Int, {nullable:true}) + skip?: number; + + @Field(() => [UserSettingsScalarFieldEnum], {nullable:true}) + distinct?: Array; +} diff --git a/server/src/core/@generated/user-settings/find-unique-user-settings-or-throw.args.ts b/server/src/core/@generated/user-settings/find-unique-user-settings-or-throw.args.ts new file mode 100644 index 000000000..ca3ef5302 --- /dev/null +++ b/server/src/core/@generated/user-settings/find-unique-user-settings-or-throw.args.ts @@ -0,0 +1,12 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { Type } from 'class-transformer'; + +@ArgsType() +export class FindUniqueUserSettingsOrThrowArgs { + + @Field(() => UserSettingsWhereUniqueInput, {nullable:false}) + @Type(() => UserSettingsWhereUniqueInput) + where!: UserSettingsWhereUniqueInput; +} diff --git a/server/src/core/@generated/user-settings/find-unique-user-settings.args.ts b/server/src/core/@generated/user-settings/find-unique-user-settings.args.ts new file mode 100644 index 000000000..db55f08e5 --- /dev/null +++ b/server/src/core/@generated/user-settings/find-unique-user-settings.args.ts @@ -0,0 +1,12 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { Type } from 'class-transformer'; + +@ArgsType() +export class FindUniqueUserSettingsArgs { + + @Field(() => UserSettingsWhereUniqueInput, {nullable:false}) + @Type(() => UserSettingsWhereUniqueInput) + where!: UserSettingsWhereUniqueInput; +} diff --git a/server/src/core/@generated/user-settings/update-many-user-settings.args.ts b/server/src/core/@generated/user-settings/update-many-user-settings.args.ts new file mode 100644 index 000000000..8c0c48a0d --- /dev/null +++ b/server/src/core/@generated/user-settings/update-many-user-settings.args.ts @@ -0,0 +1,20 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsUpdateManyMutationInput } from './user-settings-update-many-mutation.input'; +import { Type } from 'class-transformer'; +import { ValidateNested } from 'class-validator'; +import { UserSettingsWhereInput } from './user-settings-where.input'; + +@ArgsType() +export class UpdateManyUserSettingsArgs { + + @Field(() => UserSettingsUpdateManyMutationInput, {nullable:false}) + @Type(() => UserSettingsUpdateManyMutationInput) + @ValidateNested({each: true}) + @Type(() => UserSettingsUpdateManyMutationInput) + data!: UserSettingsUpdateManyMutationInput; + + @Field(() => UserSettingsWhereInput, {nullable:true}) + @Type(() => UserSettingsWhereInput) + where?: UserSettingsWhereInput; +} diff --git a/server/src/core/@generated/user-settings/update-one-user-settings.args.ts b/server/src/core/@generated/user-settings/update-one-user-settings.args.ts new file mode 100644 index 000000000..fbb285665 --- /dev/null +++ b/server/src/core/@generated/user-settings/update-one-user-settings.args.ts @@ -0,0 +1,20 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsUpdateInput } from './user-settings-update.input'; +import { Type } from 'class-transformer'; +import { ValidateNested } from 'class-validator'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; + +@ArgsType() +export class UpdateOneUserSettingsArgs { + + @Field(() => UserSettingsUpdateInput, {nullable:false}) + @Type(() => UserSettingsUpdateInput) + @ValidateNested({each: true}) + @Type(() => UserSettingsUpdateInput) + data!: UserSettingsUpdateInput; + + @Field(() => UserSettingsWhereUniqueInput, {nullable:false}) + @Type(() => UserSettingsWhereUniqueInput) + where!: UserSettingsWhereUniqueInput; +} diff --git a/server/src/core/@generated/user-settings/upsert-one-user-settings.args.ts b/server/src/core/@generated/user-settings/upsert-one-user-settings.args.ts new file mode 100644 index 000000000..3a8d2506f --- /dev/null +++ b/server/src/core/@generated/user-settings/upsert-one-user-settings.args.ts @@ -0,0 +1,22 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { Type } from 'class-transformer'; +import { UserSettingsCreateInput } from './user-settings-create.input'; +import { UserSettingsUpdateInput } from './user-settings-update.input'; + +@ArgsType() +export class UpsertOneUserSettingsArgs { + + @Field(() => UserSettingsWhereUniqueInput, {nullable:false}) + @Type(() => UserSettingsWhereUniqueInput) + where!: UserSettingsWhereUniqueInput; + + @Field(() => UserSettingsCreateInput, {nullable:false}) + @Type(() => UserSettingsCreateInput) + create!: UserSettingsCreateInput; + + @Field(() => UserSettingsUpdateInput, {nullable:false}) + @Type(() => UserSettingsUpdateInput) + update!: UserSettingsUpdateInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-count-aggregate.input.ts b/server/src/core/@generated/user-settings/user-settings-count-aggregate.input.ts new file mode 100644 index 000000000..538be1456 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-count-aggregate.input.ts @@ -0,0 +1,24 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; + +@InputType() +export class UserSettingsCountAggregateInput { + + @Field(() => Boolean, {nullable:true}) + id?: true; + + @Field(() => Boolean, {nullable:true}) + colorScheme?: true; + + @Field(() => Boolean, {nullable:true}) + locale?: true; + + @Field(() => Boolean, {nullable:true}) + createdAt?: true; + + @Field(() => Boolean, {nullable:true}) + updatedAt?: true; + + @Field(() => Boolean, {nullable:true}) + _all?: true; +} diff --git a/server/src/core/@generated/user-settings/user-settings-count-aggregate.output.ts b/server/src/core/@generated/user-settings/user-settings-count-aggregate.output.ts new file mode 100644 index 000000000..b73119433 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-count-aggregate.output.ts @@ -0,0 +1,25 @@ +import { Field } from '@nestjs/graphql'; +import { ObjectType } from '@nestjs/graphql'; +import { Int } from '@nestjs/graphql'; + +@ObjectType() +export class UserSettingsCountAggregate { + + @Field(() => Int, {nullable:false}) + id!: number; + + @Field(() => Int, {nullable:false}) + colorScheme!: number; + + @Field(() => Int, {nullable:false}) + locale!: number; + + @Field(() => Int, {nullable:false}) + createdAt!: number; + + @Field(() => Int, {nullable:false}) + updatedAt!: number; + + @Field(() => Int, {nullable:false}) + _all!: number; +} diff --git a/server/src/core/@generated/user-settings/user-settings-count-order-by-aggregate.input.ts b/server/src/core/@generated/user-settings/user-settings-count-order-by-aggregate.input.ts new file mode 100644 index 000000000..1de1b4032 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-count-order-by-aggregate.input.ts @@ -0,0 +1,22 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { SortOrder } from '../prisma/sort-order.enum'; + +@InputType() +export class UserSettingsCountOrderByAggregateInput { + + @Field(() => SortOrder, {nullable:true}) + id?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + colorScheme?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + locale?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + createdAt?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + updatedAt?: keyof typeof SortOrder; +} diff --git a/server/src/core/@generated/user-settings/user-settings-create-many.input.ts b/server/src/core/@generated/user-settings/user-settings-create-many.input.ts new file mode 100644 index 000000000..8f8cadbca --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-create-many.input.ts @@ -0,0 +1,26 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import * as Validator from 'class-validator'; + +@InputType() +export class UserSettingsCreateManyInput { + + @Field(() => String, {nullable:true}) + id?: string; + + @Field(() => ColorScheme, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + colorScheme?: keyof typeof ColorScheme; + + @Field(() => String, {nullable:false}) + @Validator.IsString() + locale!: string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; +} diff --git a/server/src/core/@generated/user-settings/user-settings-create-nested-one-without-user.input.ts b/server/src/core/@generated/user-settings/user-settings-create-nested-one-without-user.input.ts new file mode 100644 index 000000000..45a93829a --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-create-nested-one-without-user.input.ts @@ -0,0 +1,22 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserSettingsCreateWithoutUserInput } from './user-settings-create-without-user.input'; +import { Type } from 'class-transformer'; +import { UserSettingsCreateOrConnectWithoutUserInput } from './user-settings-create-or-connect-without-user.input'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; + +@InputType() +export class UserSettingsCreateNestedOneWithoutUserInput { + + @Field(() => UserSettingsCreateWithoutUserInput, {nullable:true}) + @Type(() => UserSettingsCreateWithoutUserInput) + create?: UserSettingsCreateWithoutUserInput; + + @Field(() => UserSettingsCreateOrConnectWithoutUserInput, {nullable:true}) + @Type(() => UserSettingsCreateOrConnectWithoutUserInput) + connectOrCreate?: UserSettingsCreateOrConnectWithoutUserInput; + + @Field(() => UserSettingsWhereUniqueInput, {nullable:true}) + @Type(() => UserSettingsWhereUniqueInput) + connect?: UserSettingsWhereUniqueInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-create-or-connect-without-user.input.ts b/server/src/core/@generated/user-settings/user-settings-create-or-connect-without-user.input.ts new file mode 100644 index 000000000..2e00203ba --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-create-or-connect-without-user.input.ts @@ -0,0 +1,17 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { Type } from 'class-transformer'; +import { UserSettingsCreateWithoutUserInput } from './user-settings-create-without-user.input'; + +@InputType() +export class UserSettingsCreateOrConnectWithoutUserInput { + + @Field(() => UserSettingsWhereUniqueInput, {nullable:false}) + @Type(() => UserSettingsWhereUniqueInput) + where!: UserSettingsWhereUniqueInput; + + @Field(() => UserSettingsCreateWithoutUserInput, {nullable:false}) + @Type(() => UserSettingsCreateWithoutUserInput) + create!: UserSettingsCreateWithoutUserInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-create-without-user.input.ts b/server/src/core/@generated/user-settings/user-settings-create-without-user.input.ts new file mode 100644 index 000000000..8fdc3054c --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-create-without-user.input.ts @@ -0,0 +1,26 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import * as Validator from 'class-validator'; + +@InputType() +export class UserSettingsCreateWithoutUserInput { + + @Field(() => String, {nullable:true}) + id?: string; + + @Field(() => ColorScheme, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + colorScheme?: keyof typeof ColorScheme; + + @Field(() => String, {nullable:false}) + @Validator.IsString() + locale!: string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; +} diff --git a/server/src/core/@generated/user-settings/user-settings-create.input.ts b/server/src/core/@generated/user-settings/user-settings-create.input.ts new file mode 100644 index 000000000..11e5e2644 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-create.input.ts @@ -0,0 +1,30 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import * as Validator from 'class-validator'; +import { UserCreateNestedOneWithoutSettingsInput } from '../user/user-create-nested-one-without-settings.input'; + +@InputType() +export class UserSettingsCreateInput { + + @Field(() => String, {nullable:true}) + id?: string; + + @Field(() => ColorScheme, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + colorScheme?: keyof typeof ColorScheme; + + @Field(() => String, {nullable:false}) + @Validator.IsString() + locale!: string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; + + @Field(() => UserCreateNestedOneWithoutSettingsInput, {nullable:true}) + user?: UserCreateNestedOneWithoutSettingsInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-group-by.args.ts b/server/src/core/@generated/user-settings/user-settings-group-by.args.ts new file mode 100644 index 000000000..e77a86f33 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-group-by.args.ts @@ -0,0 +1,43 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereInput } from './user-settings-where.input'; +import { Type } from 'class-transformer'; +import { UserSettingsOrderByWithAggregationInput } from './user-settings-order-by-with-aggregation.input'; +import { UserSettingsScalarFieldEnum } from './user-settings-scalar-field.enum'; +import { UserSettingsScalarWhereWithAggregatesInput } from './user-settings-scalar-where-with-aggregates.input'; +import { Int } from '@nestjs/graphql'; +import { UserSettingsCountAggregateInput } from './user-settings-count-aggregate.input'; +import { UserSettingsMinAggregateInput } from './user-settings-min-aggregate.input'; +import { UserSettingsMaxAggregateInput } from './user-settings-max-aggregate.input'; + +@ArgsType() +export class UserSettingsGroupByArgs { + + @Field(() => UserSettingsWhereInput, {nullable:true}) + @Type(() => UserSettingsWhereInput) + where?: UserSettingsWhereInput; + + @Field(() => [UserSettingsOrderByWithAggregationInput], {nullable:true}) + orderBy?: Array; + + @Field(() => [UserSettingsScalarFieldEnum], {nullable:false}) + by!: Array; + + @Field(() => UserSettingsScalarWhereWithAggregatesInput, {nullable:true}) + having?: UserSettingsScalarWhereWithAggregatesInput; + + @Field(() => Int, {nullable:true}) + take?: number; + + @Field(() => Int, {nullable:true}) + skip?: number; + + @Field(() => UserSettingsCountAggregateInput, {nullable:true}) + _count?: UserSettingsCountAggregateInput; + + @Field(() => UserSettingsMinAggregateInput, {nullable:true}) + _min?: UserSettingsMinAggregateInput; + + @Field(() => UserSettingsMaxAggregateInput, {nullable:true}) + _max?: UserSettingsMaxAggregateInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-group-by.output.ts b/server/src/core/@generated/user-settings/user-settings-group-by.output.ts new file mode 100644 index 000000000..117a04c13 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-group-by.output.ts @@ -0,0 +1,38 @@ +import { Field } from '@nestjs/graphql'; +import { ObjectType } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import * as Validator from 'class-validator'; +import { UserSettingsCountAggregate } from './user-settings-count-aggregate.output'; +import { UserSettingsMinAggregate } from './user-settings-min-aggregate.output'; +import { UserSettingsMaxAggregate } from './user-settings-max-aggregate.output'; + +@ObjectType() +export class UserSettingsGroupBy { + + @Field(() => String, {nullable:false}) + id!: string; + + @Field(() => ColorScheme, {nullable:false}) + @Validator.IsString() + @Validator.IsOptional() + colorScheme!: keyof typeof ColorScheme; + + @Field(() => String, {nullable:false}) + @Validator.IsString() + locale!: string; + + @Field(() => Date, {nullable:false}) + createdAt!: Date | string; + + @Field(() => Date, {nullable:false}) + updatedAt!: Date | string; + + @Field(() => UserSettingsCountAggregate, {nullable:true}) + _count?: UserSettingsCountAggregate; + + @Field(() => UserSettingsMinAggregate, {nullable:true}) + _min?: UserSettingsMinAggregate; + + @Field(() => UserSettingsMaxAggregate, {nullable:true}) + _max?: UserSettingsMaxAggregate; +} diff --git a/server/src/core/@generated/user-settings/user-settings-max-aggregate.input.ts b/server/src/core/@generated/user-settings/user-settings-max-aggregate.input.ts new file mode 100644 index 000000000..1ffdd94fb --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-max-aggregate.input.ts @@ -0,0 +1,21 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; + +@InputType() +export class UserSettingsMaxAggregateInput { + + @Field(() => Boolean, {nullable:true}) + id?: true; + + @Field(() => Boolean, {nullable:true}) + colorScheme?: true; + + @Field(() => Boolean, {nullable:true}) + locale?: true; + + @Field(() => Boolean, {nullable:true}) + createdAt?: true; + + @Field(() => Boolean, {nullable:true}) + updatedAt?: true; +} diff --git a/server/src/core/@generated/user-settings/user-settings-max-aggregate.output.ts b/server/src/core/@generated/user-settings/user-settings-max-aggregate.output.ts new file mode 100644 index 000000000..fde7417ef --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-max-aggregate.output.ts @@ -0,0 +1,26 @@ +import { Field } from '@nestjs/graphql'; +import { ObjectType } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import * as Validator from 'class-validator'; + +@ObjectType() +export class UserSettingsMaxAggregate { + + @Field(() => String, {nullable:true}) + id?: string; + + @Field(() => ColorScheme, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + colorScheme?: keyof typeof ColorScheme; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + locale?: string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; +} diff --git a/server/src/core/@generated/user-settings/user-settings-max-order-by-aggregate.input.ts b/server/src/core/@generated/user-settings/user-settings-max-order-by-aggregate.input.ts new file mode 100644 index 000000000..a1daaa75a --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-max-order-by-aggregate.input.ts @@ -0,0 +1,22 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { SortOrder } from '../prisma/sort-order.enum'; + +@InputType() +export class UserSettingsMaxOrderByAggregateInput { + + @Field(() => SortOrder, {nullable:true}) + id?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + colorScheme?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + locale?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + createdAt?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + updatedAt?: keyof typeof SortOrder; +} diff --git a/server/src/core/@generated/user-settings/user-settings-min-aggregate.input.ts b/server/src/core/@generated/user-settings/user-settings-min-aggregate.input.ts new file mode 100644 index 000000000..eb11c22c8 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-min-aggregate.input.ts @@ -0,0 +1,21 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; + +@InputType() +export class UserSettingsMinAggregateInput { + + @Field(() => Boolean, {nullable:true}) + id?: true; + + @Field(() => Boolean, {nullable:true}) + colorScheme?: true; + + @Field(() => Boolean, {nullable:true}) + locale?: true; + + @Field(() => Boolean, {nullable:true}) + createdAt?: true; + + @Field(() => Boolean, {nullable:true}) + updatedAt?: true; +} diff --git a/server/src/core/@generated/user-settings/user-settings-min-aggregate.output.ts b/server/src/core/@generated/user-settings/user-settings-min-aggregate.output.ts new file mode 100644 index 000000000..92f768e7e --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-min-aggregate.output.ts @@ -0,0 +1,26 @@ +import { Field } from '@nestjs/graphql'; +import { ObjectType } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import * as Validator from 'class-validator'; + +@ObjectType() +export class UserSettingsMinAggregate { + + @Field(() => String, {nullable:true}) + id?: string; + + @Field(() => ColorScheme, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + colorScheme?: keyof typeof ColorScheme; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + locale?: string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; +} diff --git a/server/src/core/@generated/user-settings/user-settings-min-order-by-aggregate.input.ts b/server/src/core/@generated/user-settings/user-settings-min-order-by-aggregate.input.ts new file mode 100644 index 000000000..e1bb19891 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-min-order-by-aggregate.input.ts @@ -0,0 +1,22 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { SortOrder } from '../prisma/sort-order.enum'; + +@InputType() +export class UserSettingsMinOrderByAggregateInput { + + @Field(() => SortOrder, {nullable:true}) + id?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + colorScheme?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + locale?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + createdAt?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + updatedAt?: keyof typeof SortOrder; +} diff --git a/server/src/core/@generated/user-settings/user-settings-order-by-with-aggregation.input.ts b/server/src/core/@generated/user-settings/user-settings-order-by-with-aggregation.input.ts new file mode 100644 index 000000000..d48fd0326 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-order-by-with-aggregation.input.ts @@ -0,0 +1,34 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { SortOrder } from '../prisma/sort-order.enum'; +import { UserSettingsCountOrderByAggregateInput } from './user-settings-count-order-by-aggregate.input'; +import { UserSettingsMaxOrderByAggregateInput } from './user-settings-max-order-by-aggregate.input'; +import { UserSettingsMinOrderByAggregateInput } from './user-settings-min-order-by-aggregate.input'; + +@InputType() +export class UserSettingsOrderByWithAggregationInput { + + @Field(() => SortOrder, {nullable:true}) + id?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + colorScheme?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + locale?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + createdAt?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + updatedAt?: keyof typeof SortOrder; + + @Field(() => UserSettingsCountOrderByAggregateInput, {nullable:true}) + _count?: UserSettingsCountOrderByAggregateInput; + + @Field(() => UserSettingsMaxOrderByAggregateInput, {nullable:true}) + _max?: UserSettingsMaxOrderByAggregateInput; + + @Field(() => UserSettingsMinOrderByAggregateInput, {nullable:true}) + _min?: UserSettingsMinOrderByAggregateInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-order-by-with-relation.input.ts b/server/src/core/@generated/user-settings/user-settings-order-by-with-relation.input.ts new file mode 100644 index 000000000..fce8d4e32 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-order-by-with-relation.input.ts @@ -0,0 +1,26 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { SortOrder } from '../prisma/sort-order.enum'; +import { UserOrderByWithRelationInput } from '../user/user-order-by-with-relation.input'; + +@InputType() +export class UserSettingsOrderByWithRelationInput { + + @Field(() => SortOrder, {nullable:true}) + id?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + colorScheme?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + locale?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + createdAt?: keyof typeof SortOrder; + + @Field(() => SortOrder, {nullable:true}) + updatedAt?: keyof typeof SortOrder; + + @Field(() => UserOrderByWithRelationInput, {nullable:true}) + user?: UserOrderByWithRelationInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-relation-filter.input.ts b/server/src/core/@generated/user-settings/user-settings-relation-filter.input.ts new file mode 100644 index 000000000..b7f499055 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-relation-filter.input.ts @@ -0,0 +1,13 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserSettingsWhereInput } from './user-settings-where.input'; + +@InputType() +export class UserSettingsRelationFilter { + + @Field(() => UserSettingsWhereInput, {nullable:true}) + is?: UserSettingsWhereInput; + + @Field(() => UserSettingsWhereInput, {nullable:true}) + isNot?: UserSettingsWhereInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-scalar-field.enum.ts b/server/src/core/@generated/user-settings/user-settings-scalar-field.enum.ts new file mode 100644 index 000000000..36517b6c9 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-scalar-field.enum.ts @@ -0,0 +1,12 @@ +import { registerEnumType } from '@nestjs/graphql'; + +export enum UserSettingsScalarFieldEnum { + id = "id", + colorScheme = "colorScheme", + locale = "locale", + createdAt = "createdAt", + updatedAt = "updatedAt" +} + + +registerEnumType(UserSettingsScalarFieldEnum, { name: 'UserSettingsScalarFieldEnum', description: undefined }) diff --git a/server/src/core/@generated/user-settings/user-settings-scalar-where-with-aggregates.input.ts b/server/src/core/@generated/user-settings/user-settings-scalar-where-with-aggregates.input.ts new file mode 100644 index 000000000..4bd46d95b --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-scalar-where-with-aggregates.input.ts @@ -0,0 +1,33 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringWithAggregatesFilter } from '../prisma/string-with-aggregates-filter.input'; +import { EnumColorSchemeWithAggregatesFilter } from '../prisma/enum-color-scheme-with-aggregates-filter.input'; +import { DateTimeWithAggregatesFilter } from '../prisma/date-time-with-aggregates-filter.input'; + +@InputType() +export class UserSettingsScalarWhereWithAggregatesInput { + + @Field(() => [UserSettingsScalarWhereWithAggregatesInput], {nullable:true}) + AND?: Array; + + @Field(() => [UserSettingsScalarWhereWithAggregatesInput], {nullable:true}) + OR?: Array; + + @Field(() => [UserSettingsScalarWhereWithAggregatesInput], {nullable:true}) + NOT?: Array; + + @Field(() => StringWithAggregatesFilter, {nullable:true}) + id?: StringWithAggregatesFilter; + + @Field(() => EnumColorSchemeWithAggregatesFilter, {nullable:true}) + colorScheme?: EnumColorSchemeWithAggregatesFilter; + + @Field(() => StringWithAggregatesFilter, {nullable:true}) + locale?: StringWithAggregatesFilter; + + @Field(() => DateTimeWithAggregatesFilter, {nullable:true}) + createdAt?: DateTimeWithAggregatesFilter; + + @Field(() => DateTimeWithAggregatesFilter, {nullable:true}) + updatedAt?: DateTimeWithAggregatesFilter; +} diff --git a/server/src/core/@generated/user-settings/user-settings-unchecked-create-without-user.input.ts b/server/src/core/@generated/user-settings/user-settings-unchecked-create-without-user.input.ts new file mode 100644 index 000000000..4192ee950 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-unchecked-create-without-user.input.ts @@ -0,0 +1,26 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import * as Validator from 'class-validator'; + +@InputType() +export class UserSettingsUncheckedCreateWithoutUserInput { + + @Field(() => String, {nullable:true}) + id?: string; + + @Field(() => ColorScheme, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + colorScheme?: keyof typeof ColorScheme; + + @Field(() => String, {nullable:false}) + @Validator.IsString() + locale!: string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; +} diff --git a/server/src/core/@generated/user-settings/user-settings-unchecked-create.input.ts b/server/src/core/@generated/user-settings/user-settings-unchecked-create.input.ts new file mode 100644 index 000000000..04cddbb8b --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-unchecked-create.input.ts @@ -0,0 +1,30 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import * as Validator from 'class-validator'; +import { UserUncheckedCreateNestedOneWithoutSettingsInput } from '../user/user-unchecked-create-nested-one-without-settings.input'; + +@InputType() +export class UserSettingsUncheckedCreateInput { + + @Field(() => String, {nullable:true}) + id?: string; + + @Field(() => ColorScheme, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + colorScheme?: keyof typeof ColorScheme; + + @Field(() => String, {nullable:false}) + @Validator.IsString() + locale!: string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; + + @Field(() => UserUncheckedCreateNestedOneWithoutSettingsInput, {nullable:true}) + user?: UserUncheckedCreateNestedOneWithoutSettingsInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-unchecked-update-many.input.ts b/server/src/core/@generated/user-settings/user-settings-unchecked-update-many.input.ts new file mode 100644 index 000000000..3caab9985 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-unchecked-update-many.input.ts @@ -0,0 +1,24 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input'; +import { EnumColorSchemeFieldUpdateOperationsInput } from '../prisma/enum-color-scheme-field-update-operations.input'; +import { DateTimeFieldUpdateOperationsInput } from '../prisma/date-time-field-update-operations.input'; + +@InputType() +export class UserSettingsUncheckedUpdateManyInput { + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + id?: StringFieldUpdateOperationsInput; + + @Field(() => EnumColorSchemeFieldUpdateOperationsInput, {nullable:true}) + colorScheme?: EnumColorSchemeFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + locale?: StringFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + createdAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + updatedAt?: DateTimeFieldUpdateOperationsInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-unchecked-update-without-user.input.ts b/server/src/core/@generated/user-settings/user-settings-unchecked-update-without-user.input.ts new file mode 100644 index 000000000..c96201c31 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-unchecked-update-without-user.input.ts @@ -0,0 +1,24 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input'; +import { EnumColorSchemeFieldUpdateOperationsInput } from '../prisma/enum-color-scheme-field-update-operations.input'; +import { DateTimeFieldUpdateOperationsInput } from '../prisma/date-time-field-update-operations.input'; + +@InputType() +export class UserSettingsUncheckedUpdateWithoutUserInput { + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + id?: StringFieldUpdateOperationsInput; + + @Field(() => EnumColorSchemeFieldUpdateOperationsInput, {nullable:true}) + colorScheme?: EnumColorSchemeFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + locale?: StringFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + createdAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + updatedAt?: DateTimeFieldUpdateOperationsInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-unchecked-update.input.ts b/server/src/core/@generated/user-settings/user-settings-unchecked-update.input.ts new file mode 100644 index 000000000..d4111c935 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-unchecked-update.input.ts @@ -0,0 +1,28 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input'; +import { EnumColorSchemeFieldUpdateOperationsInput } from '../prisma/enum-color-scheme-field-update-operations.input'; +import { DateTimeFieldUpdateOperationsInput } from '../prisma/date-time-field-update-operations.input'; +import { UserUncheckedUpdateOneWithoutSettingsNestedInput } from '../user/user-unchecked-update-one-without-settings-nested.input'; + +@InputType() +export class UserSettingsUncheckedUpdateInput { + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + id?: StringFieldUpdateOperationsInput; + + @Field(() => EnumColorSchemeFieldUpdateOperationsInput, {nullable:true}) + colorScheme?: EnumColorSchemeFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + locale?: StringFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + createdAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + updatedAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => UserUncheckedUpdateOneWithoutSettingsNestedInput, {nullable:true}) + user?: UserUncheckedUpdateOneWithoutSettingsNestedInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-update-many-mutation.input.ts b/server/src/core/@generated/user-settings/user-settings-update-many-mutation.input.ts new file mode 100644 index 000000000..deae92929 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-update-many-mutation.input.ts @@ -0,0 +1,24 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input'; +import { EnumColorSchemeFieldUpdateOperationsInput } from '../prisma/enum-color-scheme-field-update-operations.input'; +import { DateTimeFieldUpdateOperationsInput } from '../prisma/date-time-field-update-operations.input'; + +@InputType() +export class UserSettingsUpdateManyMutationInput { + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + id?: StringFieldUpdateOperationsInput; + + @Field(() => EnumColorSchemeFieldUpdateOperationsInput, {nullable:true}) + colorScheme?: EnumColorSchemeFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + locale?: StringFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + createdAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + updatedAt?: DateTimeFieldUpdateOperationsInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-update-one-required-without-user-nested.input.ts b/server/src/core/@generated/user-settings/user-settings-update-one-required-without-user-nested.input.ts new file mode 100644 index 000000000..756619345 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-update-one-required-without-user-nested.input.ts @@ -0,0 +1,32 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserSettingsCreateWithoutUserInput } from './user-settings-create-without-user.input'; +import { Type } from 'class-transformer'; +import { UserSettingsCreateOrConnectWithoutUserInput } from './user-settings-create-or-connect-without-user.input'; +import { UserSettingsUpsertWithoutUserInput } from './user-settings-upsert-without-user.input'; +import { UserSettingsWhereUniqueInput } from './user-settings-where-unique.input'; +import { UserSettingsUpdateWithoutUserInput } from './user-settings-update-without-user.input'; + +@InputType() +export class UserSettingsUpdateOneRequiredWithoutUserNestedInput { + + @Field(() => UserSettingsCreateWithoutUserInput, {nullable:true}) + @Type(() => UserSettingsCreateWithoutUserInput) + create?: UserSettingsCreateWithoutUserInput; + + @Field(() => UserSettingsCreateOrConnectWithoutUserInput, {nullable:true}) + @Type(() => UserSettingsCreateOrConnectWithoutUserInput) + connectOrCreate?: UserSettingsCreateOrConnectWithoutUserInput; + + @Field(() => UserSettingsUpsertWithoutUserInput, {nullable:true}) + @Type(() => UserSettingsUpsertWithoutUserInput) + upsert?: UserSettingsUpsertWithoutUserInput; + + @Field(() => UserSettingsWhereUniqueInput, {nullable:true}) + @Type(() => UserSettingsWhereUniqueInput) + connect?: UserSettingsWhereUniqueInput; + + @Field(() => UserSettingsUpdateWithoutUserInput, {nullable:true}) + @Type(() => UserSettingsUpdateWithoutUserInput) + update?: UserSettingsUpdateWithoutUserInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-update-without-user.input.ts b/server/src/core/@generated/user-settings/user-settings-update-without-user.input.ts new file mode 100644 index 000000000..9a2a2cbf3 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-update-without-user.input.ts @@ -0,0 +1,24 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input'; +import { EnumColorSchemeFieldUpdateOperationsInput } from '../prisma/enum-color-scheme-field-update-operations.input'; +import { DateTimeFieldUpdateOperationsInput } from '../prisma/date-time-field-update-operations.input'; + +@InputType() +export class UserSettingsUpdateWithoutUserInput { + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + id?: StringFieldUpdateOperationsInput; + + @Field(() => EnumColorSchemeFieldUpdateOperationsInput, {nullable:true}) + colorScheme?: EnumColorSchemeFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + locale?: StringFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + createdAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + updatedAt?: DateTimeFieldUpdateOperationsInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-update.input.ts b/server/src/core/@generated/user-settings/user-settings-update.input.ts new file mode 100644 index 000000000..400f945eb --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-update.input.ts @@ -0,0 +1,28 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFieldUpdateOperationsInput } from '../prisma/string-field-update-operations.input'; +import { EnumColorSchemeFieldUpdateOperationsInput } from '../prisma/enum-color-scheme-field-update-operations.input'; +import { DateTimeFieldUpdateOperationsInput } from '../prisma/date-time-field-update-operations.input'; +import { UserUpdateOneWithoutSettingsNestedInput } from '../user/user-update-one-without-settings-nested.input'; + +@InputType() +export class UserSettingsUpdateInput { + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + id?: StringFieldUpdateOperationsInput; + + @Field(() => EnumColorSchemeFieldUpdateOperationsInput, {nullable:true}) + colorScheme?: EnumColorSchemeFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + locale?: StringFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + createdAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + updatedAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => UserUpdateOneWithoutSettingsNestedInput, {nullable:true}) + user?: UserUpdateOneWithoutSettingsNestedInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-upsert-without-user.input.ts b/server/src/core/@generated/user-settings/user-settings-upsert-without-user.input.ts new file mode 100644 index 000000000..0ab846dc8 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-upsert-without-user.input.ts @@ -0,0 +1,17 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserSettingsUpdateWithoutUserInput } from './user-settings-update-without-user.input'; +import { Type } from 'class-transformer'; +import { UserSettingsCreateWithoutUserInput } from './user-settings-create-without-user.input'; + +@InputType() +export class UserSettingsUpsertWithoutUserInput { + + @Field(() => UserSettingsUpdateWithoutUserInput, {nullable:false}) + @Type(() => UserSettingsUpdateWithoutUserInput) + update!: UserSettingsUpdateWithoutUserInput; + + @Field(() => UserSettingsCreateWithoutUserInput, {nullable:false}) + @Type(() => UserSettingsCreateWithoutUserInput) + create!: UserSettingsCreateWithoutUserInput; +} diff --git a/server/src/core/@generated/user-settings/user-settings-where-unique.input.ts b/server/src/core/@generated/user-settings/user-settings-where-unique.input.ts new file mode 100644 index 000000000..aec2ddb53 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-where-unique.input.ts @@ -0,0 +1,9 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; + +@InputType() +export class UserSettingsWhereUniqueInput { + + @Field(() => String, {nullable:true}) + id?: string; +} diff --git a/server/src/core/@generated/user-settings/user-settings-where.input.ts b/server/src/core/@generated/user-settings/user-settings-where.input.ts new file mode 100644 index 000000000..502e8df64 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings-where.input.ts @@ -0,0 +1,37 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFilter } from '../prisma/string-filter.input'; +import { EnumColorSchemeFilter } from '../prisma/enum-color-scheme-filter.input'; +import { DateTimeFilter } from '../prisma/date-time-filter.input'; +import { UserRelationFilter } from '../user/user-relation-filter.input'; + +@InputType() +export class UserSettingsWhereInput { + + @Field(() => [UserSettingsWhereInput], {nullable:true}) + AND?: Array; + + @Field(() => [UserSettingsWhereInput], {nullable:true}) + OR?: Array; + + @Field(() => [UserSettingsWhereInput], {nullable:true}) + NOT?: Array; + + @Field(() => StringFilter, {nullable:true}) + id?: StringFilter; + + @Field(() => EnumColorSchemeFilter, {nullable:true}) + colorScheme?: EnumColorSchemeFilter; + + @Field(() => StringFilter, {nullable:true}) + locale?: StringFilter; + + @Field(() => DateTimeFilter, {nullable:true}) + createdAt?: DateTimeFilter; + + @Field(() => DateTimeFilter, {nullable:true}) + updatedAt?: DateTimeFilter; + + @Field(() => UserRelationFilter, {nullable:true}) + user?: UserRelationFilter; +} diff --git a/server/src/core/@generated/user-settings/user-settings.model.ts b/server/src/core/@generated/user-settings/user-settings.model.ts new file mode 100644 index 000000000..11e739c32 --- /dev/null +++ b/server/src/core/@generated/user-settings/user-settings.model.ts @@ -0,0 +1,27 @@ +import { Field } from '@nestjs/graphql'; +import { ObjectType } from '@nestjs/graphql'; +import { ID } from '@nestjs/graphql'; +import { ColorScheme } from '../prisma/color-scheme.enum'; +import { User } from '../user/user.model'; + +@ObjectType() +export class UserSettings { + + @Field(() => ID, {nullable:false}) + id!: string; + + @Field(() => ColorScheme, {nullable:false,defaultValue:'System'}) + colorScheme!: keyof typeof ColorScheme; + + @Field(() => String, {nullable:false}) + locale!: string; + + @Field(() => Date, {nullable:false}) + createdAt!: Date; + + @Field(() => Date, {nullable:false}) + updatedAt!: Date; + + @Field(() => User, {nullable:true}) + user?: User | null; +} diff --git a/server/src/core/@generated/user/user-count-aggregate.input.ts b/server/src/core/@generated/user/user-count-aggregate.input.ts index ed7595ac4..6184d2045 100644 --- a/server/src/core/@generated/user/user-count-aggregate.input.ts +++ b/server/src/core/@generated/user/user-count-aggregate.input.ts @@ -41,6 +41,9 @@ export class UserCountAggregateInput { @Field(() => Boolean, {nullable:true}) metadata?: true; + @Field(() => Boolean, {nullable:true}) + settingsId?: true; + @HideField() deletedAt?: true; diff --git a/server/src/core/@generated/user/user-count-aggregate.output.ts b/server/src/core/@generated/user/user-count-aggregate.output.ts index 9fb8cb0b4..4d6830ec4 100644 --- a/server/src/core/@generated/user/user-count-aggregate.output.ts +++ b/server/src/core/@generated/user/user-count-aggregate.output.ts @@ -42,6 +42,9 @@ export class UserCountAggregate { @Field(() => Int, {nullable:false}) metadata!: number; + @Field(() => Int, {nullable:false}) + settingsId!: number; + @HideField() deletedAt!: number; diff --git a/server/src/core/@generated/user/user-count-order-by-aggregate.input.ts b/server/src/core/@generated/user/user-count-order-by-aggregate.input.ts index c95802e51..3d5615fbb 100644 --- a/server/src/core/@generated/user/user-count-order-by-aggregate.input.ts +++ b/server/src/core/@generated/user/user-count-order-by-aggregate.input.ts @@ -42,6 +42,9 @@ export class UserCountOrderByAggregateInput { @Field(() => SortOrder, {nullable:true}) metadata?: keyof typeof SortOrder; + @Field(() => SortOrder, {nullable:true}) + settingsId?: keyof typeof SortOrder; + @HideField() deletedAt?: keyof typeof SortOrder; diff --git a/server/src/core/@generated/user/user-create-many.input.ts b/server/src/core/@generated/user/user-create-many.input.ts index de3890076..f08e25666 100644 --- a/server/src/core/@generated/user/user-create-many.input.ts +++ b/server/src/core/@generated/user/user-create-many.input.ts @@ -63,6 +63,9 @@ export class UserCreateManyInput { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-create-nested-one-without-settings.input.ts b/server/src/core/@generated/user/user-create-nested-one-without-settings.input.ts new file mode 100644 index 000000000..2cf5aaf66 --- /dev/null +++ b/server/src/core/@generated/user/user-create-nested-one-without-settings.input.ts @@ -0,0 +1,22 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserCreateWithoutSettingsInput } from './user-create-without-settings.input'; +import { Type } from 'class-transformer'; +import { UserCreateOrConnectWithoutSettingsInput } from './user-create-or-connect-without-settings.input'; +import { UserWhereUniqueInput } from './user-where-unique.input'; + +@InputType() +export class UserCreateNestedOneWithoutSettingsInput { + + @Field(() => UserCreateWithoutSettingsInput, {nullable:true}) + @Type(() => UserCreateWithoutSettingsInput) + create?: UserCreateWithoutSettingsInput; + + @Field(() => UserCreateOrConnectWithoutSettingsInput, {nullable:true}) + @Type(() => UserCreateOrConnectWithoutSettingsInput) + connectOrCreate?: UserCreateOrConnectWithoutSettingsInput; + + @Field(() => UserWhereUniqueInput, {nullable:true}) + @Type(() => UserWhereUniqueInput) + connect?: UserWhereUniqueInput; +} diff --git a/server/src/core/@generated/user/user-create-or-connect-without-settings.input.ts b/server/src/core/@generated/user/user-create-or-connect-without-settings.input.ts new file mode 100644 index 000000000..22db14e72 --- /dev/null +++ b/server/src/core/@generated/user/user-create-or-connect-without-settings.input.ts @@ -0,0 +1,17 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserWhereUniqueInput } from './user-where-unique.input'; +import { Type } from 'class-transformer'; +import { UserCreateWithoutSettingsInput } from './user-create-without-settings.input'; + +@InputType() +export class UserCreateOrConnectWithoutSettingsInput { + + @Field(() => UserWhereUniqueInput, {nullable:false}) + @Type(() => UserWhereUniqueInput) + where!: UserWhereUniqueInput; + + @Field(() => UserCreateWithoutSettingsInput, {nullable:false}) + @Type(() => UserCreateWithoutSettingsInput) + create!: UserCreateWithoutSettingsInput; +} diff --git a/server/src/core/@generated/user/user-create-without-assigned-comment-threads.input.ts b/server/src/core/@generated/user/user-create-without-assigned-comment-threads.input.ts index ef3ce990b..9c0be0d3e 100644 --- a/server/src/core/@generated/user/user-create-without-assigned-comment-threads.input.ts +++ b/server/src/core/@generated/user/user-create-without-assigned-comment-threads.input.ts @@ -8,6 +8,7 @@ import { CompanyCreateNestedManyWithoutAccountOwnerInput } from '../company/comp import { RefreshTokenCreateNestedManyWithoutUserInput } from '../refresh-token/refresh-token-create-nested-many-without-user.input'; import { CommentCreateNestedManyWithoutAuthorInput } from '../comment/comment-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAuthorInput } from '../comment-thread/comment-thread-create-nested-many-without-author.input'; +import { UserSettingsCreateNestedOneWithoutUserInput } from '../user-settings/user-settings-create-nested-one-without-user.input'; @InputType() export class UserCreateWithoutAssignedCommentThreadsInput { @@ -91,4 +92,7 @@ export class UserCreateWithoutAssignedCommentThreadsInput { @Field(() => CommentThreadCreateNestedManyWithoutAuthorInput, {nullable:true}) authoredCommentThreads?: CommentThreadCreateNestedManyWithoutAuthorInput; + + @Field(() => UserSettingsCreateNestedOneWithoutUserInput, {nullable:false}) + settings!: UserSettingsCreateNestedOneWithoutUserInput; } diff --git a/server/src/core/@generated/user/user-create-without-authored-comment-threads.input.ts b/server/src/core/@generated/user/user-create-without-authored-comment-threads.input.ts index 5c224e75d..a16344cbd 100644 --- a/server/src/core/@generated/user/user-create-without-authored-comment-threads.input.ts +++ b/server/src/core/@generated/user/user-create-without-authored-comment-threads.input.ts @@ -8,6 +8,7 @@ import { CompanyCreateNestedManyWithoutAccountOwnerInput } from '../company/comp import { RefreshTokenCreateNestedManyWithoutUserInput } from '../refresh-token/refresh-token-create-nested-many-without-user.input'; import { CommentCreateNestedManyWithoutAuthorInput } from '../comment/comment-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAssigneeInput } from '../comment-thread/comment-thread-create-nested-many-without-assignee.input'; +import { UserSettingsCreateNestedOneWithoutUserInput } from '../user-settings/user-settings-create-nested-one-without-user.input'; @InputType() export class UserCreateWithoutAuthoredCommentThreadsInput { @@ -91,4 +92,7 @@ export class UserCreateWithoutAuthoredCommentThreadsInput { @Field(() => CommentThreadCreateNestedManyWithoutAssigneeInput, {nullable:true}) assignedCommentThreads?: CommentThreadCreateNestedManyWithoutAssigneeInput; + + @Field(() => UserSettingsCreateNestedOneWithoutUserInput, {nullable:false}) + settings!: UserSettingsCreateNestedOneWithoutUserInput; } diff --git a/server/src/core/@generated/user/user-create-without-comments.input.ts b/server/src/core/@generated/user/user-create-without-comments.input.ts index 797f504e9..90800bc55 100644 --- a/server/src/core/@generated/user/user-create-without-comments.input.ts +++ b/server/src/core/@generated/user/user-create-without-comments.input.ts @@ -8,6 +8,7 @@ import { CompanyCreateNestedManyWithoutAccountOwnerInput } from '../company/comp import { RefreshTokenCreateNestedManyWithoutUserInput } from '../refresh-token/refresh-token-create-nested-many-without-user.input'; import { CommentThreadCreateNestedManyWithoutAuthorInput } from '../comment-thread/comment-thread-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAssigneeInput } from '../comment-thread/comment-thread-create-nested-many-without-assignee.input'; +import { UserSettingsCreateNestedOneWithoutUserInput } from '../user-settings/user-settings-create-nested-one-without-user.input'; @InputType() export class UserCreateWithoutCommentsInput { @@ -91,4 +92,7 @@ export class UserCreateWithoutCommentsInput { @Field(() => CommentThreadCreateNestedManyWithoutAssigneeInput, {nullable:true}) assignedCommentThreads?: CommentThreadCreateNestedManyWithoutAssigneeInput; + + @Field(() => UserSettingsCreateNestedOneWithoutUserInput, {nullable:false}) + settings!: UserSettingsCreateNestedOneWithoutUserInput; } diff --git a/server/src/core/@generated/user/user-create-without-companies.input.ts b/server/src/core/@generated/user/user-create-without-companies.input.ts index 552674d7d..900e1e7b4 100644 --- a/server/src/core/@generated/user/user-create-without-companies.input.ts +++ b/server/src/core/@generated/user/user-create-without-companies.input.ts @@ -8,6 +8,7 @@ import { RefreshTokenCreateNestedManyWithoutUserInput } from '../refresh-token/r import { CommentCreateNestedManyWithoutAuthorInput } from '../comment/comment-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAuthorInput } from '../comment-thread/comment-thread-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAssigneeInput } from '../comment-thread/comment-thread-create-nested-many-without-assignee.input'; +import { UserSettingsCreateNestedOneWithoutUserInput } from '../user-settings/user-settings-create-nested-one-without-user.input'; @InputType() export class UserCreateWithoutCompaniesInput { @@ -91,4 +92,7 @@ export class UserCreateWithoutCompaniesInput { @Field(() => CommentThreadCreateNestedManyWithoutAssigneeInput, {nullable:true}) assignedCommentThreads?: CommentThreadCreateNestedManyWithoutAssigneeInput; + + @Field(() => UserSettingsCreateNestedOneWithoutUserInput, {nullable:false}) + settings!: UserSettingsCreateNestedOneWithoutUserInput; } diff --git a/server/src/core/@generated/user/user-create-without-refresh-tokens.input.ts b/server/src/core/@generated/user/user-create-without-refresh-tokens.input.ts index e2357836d..a84ddbeac 100644 --- a/server/src/core/@generated/user/user-create-without-refresh-tokens.input.ts +++ b/server/src/core/@generated/user/user-create-without-refresh-tokens.input.ts @@ -8,6 +8,7 @@ import { CompanyCreateNestedManyWithoutAccountOwnerInput } from '../company/comp import { CommentCreateNestedManyWithoutAuthorInput } from '../comment/comment-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAuthorInput } from '../comment-thread/comment-thread-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAssigneeInput } from '../comment-thread/comment-thread-create-nested-many-without-assignee.input'; +import { UserSettingsCreateNestedOneWithoutUserInput } from '../user-settings/user-settings-create-nested-one-without-user.input'; @InputType() export class UserCreateWithoutRefreshTokensInput { @@ -91,4 +92,7 @@ export class UserCreateWithoutRefreshTokensInput { @Field(() => CommentThreadCreateNestedManyWithoutAssigneeInput, {nullable:true}) assignedCommentThreads?: CommentThreadCreateNestedManyWithoutAssigneeInput; + + @Field(() => UserSettingsCreateNestedOneWithoutUserInput, {nullable:false}) + settings!: UserSettingsCreateNestedOneWithoutUserInput; } diff --git a/server/src/core/@generated/user/user-create-without-settings.input.ts b/server/src/core/@generated/user/user-create-without-settings.input.ts new file mode 100644 index 000000000..b6968e538 --- /dev/null +++ b/server/src/core/@generated/user/user-create-without-settings.input.ts @@ -0,0 +1,98 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import * as Validator from 'class-validator'; +import { HideField } from '@nestjs/graphql'; +import { GraphQLJSON } from 'graphql-type-json'; +import { WorkspaceMemberCreateNestedOneWithoutUserInput } from '../workspace-member/workspace-member-create-nested-one-without-user.input'; +import { CompanyCreateNestedManyWithoutAccountOwnerInput } from '../company/company-create-nested-many-without-account-owner.input'; +import { RefreshTokenCreateNestedManyWithoutUserInput } from '../refresh-token/refresh-token-create-nested-many-without-user.input'; +import { CommentCreateNestedManyWithoutAuthorInput } from '../comment/comment-create-nested-many-without-author.input'; +import { CommentThreadCreateNestedManyWithoutAuthorInput } from '../comment-thread/comment-thread-create-nested-many-without-author.input'; +import { CommentThreadCreateNestedManyWithoutAssigneeInput } from '../comment-thread/comment-thread-create-nested-many-without-assignee.input'; + +@InputType() +export class UserCreateWithoutSettingsInput { + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + id?: string; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + firstName?: string; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + lastName?: string; + + @Field(() => String, {nullable:false}) + @Validator.IsEmail() + email!: string; + + @Field(() => Boolean, {nullable:true}) + @Validator.IsBoolean() + @Validator.IsOptional() + emailVerified?: boolean; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + avatarUrl?: string; + + @Field(() => String, {nullable:false}) + @Validator.IsString() + locale!: string; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + phoneNumber?: string; + + @Field(() => Date, {nullable:true}) + @Validator.IsDate() + @Validator.IsOptional() + lastSeen?: Date | string; + + @Field(() => Boolean, {nullable:true}) + @Validator.IsBoolean() + @Validator.IsOptional() + disabled?: boolean; + + @HideField() + passwordHash?: string; + + @Field(() => GraphQLJSON, {nullable:true}) + @Validator.IsJSON() + @Validator.IsOptional() + metadata?: any; + + @HideField() + deletedAt?: Date | string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; + + @HideField() + workspaceMember?: WorkspaceMemberCreateNestedOneWithoutUserInput; + + @Field(() => CompanyCreateNestedManyWithoutAccountOwnerInput, {nullable:true}) + companies?: CompanyCreateNestedManyWithoutAccountOwnerInput; + + @HideField() + refreshTokens?: RefreshTokenCreateNestedManyWithoutUserInput; + + @Field(() => CommentCreateNestedManyWithoutAuthorInput, {nullable:true}) + comments?: CommentCreateNestedManyWithoutAuthorInput; + + @Field(() => CommentThreadCreateNestedManyWithoutAuthorInput, {nullable:true}) + authoredCommentThreads?: CommentThreadCreateNestedManyWithoutAuthorInput; + + @Field(() => CommentThreadCreateNestedManyWithoutAssigneeInput, {nullable:true}) + assignedCommentThreads?: CommentThreadCreateNestedManyWithoutAssigneeInput; +} diff --git a/server/src/core/@generated/user/user-create-without-workspace-member.input.ts b/server/src/core/@generated/user/user-create-without-workspace-member.input.ts index e04530883..5ee9bf4ea 100644 --- a/server/src/core/@generated/user/user-create-without-workspace-member.input.ts +++ b/server/src/core/@generated/user/user-create-without-workspace-member.input.ts @@ -8,6 +8,7 @@ import { RefreshTokenCreateNestedManyWithoutUserInput } from '../refresh-token/r import { CommentCreateNestedManyWithoutAuthorInput } from '../comment/comment-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAuthorInput } from '../comment-thread/comment-thread-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAssigneeInput } from '../comment-thread/comment-thread-create-nested-many-without-assignee.input'; +import { UserSettingsCreateNestedOneWithoutUserInput } from '../user-settings/user-settings-create-nested-one-without-user.input'; @InputType() export class UserCreateWithoutWorkspaceMemberInput { @@ -91,4 +92,7 @@ export class UserCreateWithoutWorkspaceMemberInput { @Field(() => CommentThreadCreateNestedManyWithoutAssigneeInput, {nullable:true}) assignedCommentThreads?: CommentThreadCreateNestedManyWithoutAssigneeInput; + + @Field(() => UserSettingsCreateNestedOneWithoutUserInput, {nullable:false}) + settings!: UserSettingsCreateNestedOneWithoutUserInput; } diff --git a/server/src/core/@generated/user/user-create.input.ts b/server/src/core/@generated/user/user-create.input.ts index 6f5169554..5e137b9ee 100644 --- a/server/src/core/@generated/user/user-create.input.ts +++ b/server/src/core/@generated/user/user-create.input.ts @@ -9,6 +9,7 @@ import { RefreshTokenCreateNestedManyWithoutUserInput } from '../refresh-token/r import { CommentCreateNestedManyWithoutAuthorInput } from '../comment/comment-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAuthorInput } from '../comment-thread/comment-thread-create-nested-many-without-author.input'; import { CommentThreadCreateNestedManyWithoutAssigneeInput } from '../comment-thread/comment-thread-create-nested-many-without-assignee.input'; +import { UserSettingsCreateNestedOneWithoutUserInput } from '../user-settings/user-settings-create-nested-one-without-user.input'; @InputType() export class UserCreateInput { @@ -95,4 +96,7 @@ export class UserCreateInput { @Field(() => CommentThreadCreateNestedManyWithoutAssigneeInput, {nullable:true}) assignedCommentThreads?: CommentThreadCreateNestedManyWithoutAssigneeInput; + + @Field(() => UserSettingsCreateNestedOneWithoutUserInput, {nullable:false}) + settings!: UserSettingsCreateNestedOneWithoutUserInput; } diff --git a/server/src/core/@generated/user/user-group-by.output.ts b/server/src/core/@generated/user/user-group-by.output.ts index a54fabddc..fbaf4e894 100644 --- a/server/src/core/@generated/user/user-group-by.output.ts +++ b/server/src/core/@generated/user/user-group-by.output.ts @@ -66,6 +66,9 @@ export class UserGroupBy { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-max-aggregate.input.ts b/server/src/core/@generated/user/user-max-aggregate.input.ts index 12b5e08d4..3d4aacc08 100644 --- a/server/src/core/@generated/user/user-max-aggregate.input.ts +++ b/server/src/core/@generated/user/user-max-aggregate.input.ts @@ -38,6 +38,9 @@ export class UserMaxAggregateInput { @HideField() passwordHash?: true; + @Field(() => Boolean, {nullable:true}) + settingsId?: true; + @HideField() deletedAt?: true; diff --git a/server/src/core/@generated/user/user-max-aggregate.output.ts b/server/src/core/@generated/user/user-max-aggregate.output.ts index 521b75742..c3488ce38 100644 --- a/server/src/core/@generated/user/user-max-aggregate.output.ts +++ b/server/src/core/@generated/user/user-max-aggregate.output.ts @@ -57,6 +57,9 @@ export class UserMaxAggregate { @HideField() passwordHash?: string; + @Field(() => String, {nullable:true}) + settingsId?: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-max-order-by-aggregate.input.ts b/server/src/core/@generated/user/user-max-order-by-aggregate.input.ts index 56bae017a..8e67f8f0f 100644 --- a/server/src/core/@generated/user/user-max-order-by-aggregate.input.ts +++ b/server/src/core/@generated/user/user-max-order-by-aggregate.input.ts @@ -39,6 +39,9 @@ export class UserMaxOrderByAggregateInput { @HideField() passwordHash?: keyof typeof SortOrder; + @Field(() => SortOrder, {nullable:true}) + settingsId?: keyof typeof SortOrder; + @HideField() deletedAt?: keyof typeof SortOrder; diff --git a/server/src/core/@generated/user/user-min-aggregate.input.ts b/server/src/core/@generated/user/user-min-aggregate.input.ts index 0a87721a4..5553e9f01 100644 --- a/server/src/core/@generated/user/user-min-aggregate.input.ts +++ b/server/src/core/@generated/user/user-min-aggregate.input.ts @@ -38,6 +38,9 @@ export class UserMinAggregateInput { @HideField() passwordHash?: true; + @Field(() => Boolean, {nullable:true}) + settingsId?: true; + @HideField() deletedAt?: true; diff --git a/server/src/core/@generated/user/user-min-aggregate.output.ts b/server/src/core/@generated/user/user-min-aggregate.output.ts index 0b9073efa..f30ac8cfd 100644 --- a/server/src/core/@generated/user/user-min-aggregate.output.ts +++ b/server/src/core/@generated/user/user-min-aggregate.output.ts @@ -57,6 +57,9 @@ export class UserMinAggregate { @HideField() passwordHash?: string; + @Field(() => String, {nullable:true}) + settingsId?: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-min-order-by-aggregate.input.ts b/server/src/core/@generated/user/user-min-order-by-aggregate.input.ts index 3c6c3c7ca..ca6444bd7 100644 --- a/server/src/core/@generated/user/user-min-order-by-aggregate.input.ts +++ b/server/src/core/@generated/user/user-min-order-by-aggregate.input.ts @@ -39,6 +39,9 @@ export class UserMinOrderByAggregateInput { @HideField() passwordHash?: keyof typeof SortOrder; + @Field(() => SortOrder, {nullable:true}) + settingsId?: keyof typeof SortOrder; + @HideField() deletedAt?: keyof typeof SortOrder; diff --git a/server/src/core/@generated/user/user-order-by-with-aggregation.input.ts b/server/src/core/@generated/user/user-order-by-with-aggregation.input.ts index 3835258c5..f492546af 100644 --- a/server/src/core/@generated/user/user-order-by-with-aggregation.input.ts +++ b/server/src/core/@generated/user/user-order-by-with-aggregation.input.ts @@ -45,6 +45,9 @@ export class UserOrderByWithAggregationInput { @Field(() => SortOrder, {nullable:true}) metadata?: keyof typeof SortOrder; + @Field(() => SortOrder, {nullable:true}) + settingsId?: keyof typeof SortOrder; + @HideField() deletedAt?: keyof typeof SortOrder; diff --git a/server/src/core/@generated/user/user-order-by-with-relation.input.ts b/server/src/core/@generated/user/user-order-by-with-relation.input.ts index fe6ce942d..5b4f0292e 100644 --- a/server/src/core/@generated/user/user-order-by-with-relation.input.ts +++ b/server/src/core/@generated/user/user-order-by-with-relation.input.ts @@ -7,6 +7,7 @@ import { CompanyOrderByRelationAggregateInput } from '../company/company-order-b import { RefreshTokenOrderByRelationAggregateInput } from '../refresh-token/refresh-token-order-by-relation-aggregate.input'; import { CommentOrderByRelationAggregateInput } from '../comment/comment-order-by-relation-aggregate.input'; import { CommentThreadOrderByRelationAggregateInput } from '../comment-thread/comment-thread-order-by-relation-aggregate.input'; +import { UserSettingsOrderByWithRelationInput } from '../user-settings/user-settings-order-by-with-relation.input'; @InputType() export class UserOrderByWithRelationInput { @@ -47,6 +48,9 @@ export class UserOrderByWithRelationInput { @Field(() => SortOrder, {nullable:true}) metadata?: keyof typeof SortOrder; + @Field(() => SortOrder, {nullable:true}) + settingsId?: keyof typeof SortOrder; + @HideField() deletedAt?: keyof typeof SortOrder; @@ -73,4 +77,7 @@ export class UserOrderByWithRelationInput { @Field(() => CommentThreadOrderByRelationAggregateInput, {nullable:true}) assignedCommentThreads?: CommentThreadOrderByRelationAggregateInput; + + @Field(() => UserSettingsOrderByWithRelationInput, {nullable:true}) + settings?: UserSettingsOrderByWithRelationInput; } diff --git a/server/src/core/@generated/user/user-scalar-field.enum.ts b/server/src/core/@generated/user/user-scalar-field.enum.ts index 1973c189c..c23e5efe6 100644 --- a/server/src/core/@generated/user/user-scalar-field.enum.ts +++ b/server/src/core/@generated/user/user-scalar-field.enum.ts @@ -13,6 +13,7 @@ export enum UserScalarFieldEnum { disabled = "disabled", passwordHash = "passwordHash", metadata = "metadata", + settingsId = "settingsId", deletedAt = "deletedAt", createdAt = "createdAt", updatedAt = "updatedAt" diff --git a/server/src/core/@generated/user/user-scalar-where-with-aggregates.input.ts b/server/src/core/@generated/user/user-scalar-where-with-aggregates.input.ts index 070acb214..8cf672235 100644 --- a/server/src/core/@generated/user/user-scalar-where-with-aggregates.input.ts +++ b/server/src/core/@generated/user/user-scalar-where-with-aggregates.input.ts @@ -56,6 +56,9 @@ export class UserScalarWhereWithAggregatesInput { @Field(() => JsonNullableWithAggregatesFilter, {nullable:true}) metadata?: JsonNullableWithAggregatesFilter; + @Field(() => StringWithAggregatesFilter, {nullable:true}) + settingsId?: StringWithAggregatesFilter; + @HideField() deletedAt?: DateTimeNullableWithAggregatesFilter; diff --git a/server/src/core/@generated/user/user-settings-aggregate.args.ts b/server/src/core/@generated/user/user-settings-aggregate.args.ts new file mode 100644 index 000000000..7fd06fc71 --- /dev/null +++ b/server/src/core/@generated/user/user-settings-aggregate.args.ts @@ -0,0 +1,39 @@ +import { Field } from '@nestjs/graphql'; +import { ArgsType } from '@nestjs/graphql'; +import { UserSettingsWhereInput } from '../user-settings/user-settings-where.input'; +import { Type } from 'class-transformer'; +import { UserSettingsOrderByWithRelationInput } from '../user-settings/user-settings-order-by-with-relation.input'; +import { UserSettingsWhereUniqueInput } from '../user-settings/user-settings-where-unique.input'; +import { Int } from '@nestjs/graphql'; +import { UserSettingsCountAggregateInput } from '../user-settings/user-settings-count-aggregate.input'; +import { UserSettingsMinAggregateInput } from '../user-settings/user-settings-min-aggregate.input'; +import { UserSettingsMaxAggregateInput } from '../user-settings/user-settings-max-aggregate.input'; + +@ArgsType() +export class UserSettingsAggregateArgs { + + @Field(() => UserSettingsWhereInput, {nullable:true}) + @Type(() => UserSettingsWhereInput) + where?: UserSettingsWhereInput; + + @Field(() => [UserSettingsOrderByWithRelationInput], {nullable:true}) + orderBy?: Array; + + @Field(() => UserSettingsWhereUniqueInput, {nullable:true}) + cursor?: UserSettingsWhereUniqueInput; + + @Field(() => Int, {nullable:true}) + take?: number; + + @Field(() => Int, {nullable:true}) + skip?: number; + + @Field(() => UserSettingsCountAggregateInput, {nullable:true}) + _count?: UserSettingsCountAggregateInput; + + @Field(() => UserSettingsMinAggregateInput, {nullable:true}) + _min?: UserSettingsMinAggregateInput; + + @Field(() => UserSettingsMaxAggregateInput, {nullable:true}) + _max?: UserSettingsMaxAggregateInput; +} diff --git a/server/src/core/@generated/user/user-unchecked-create-nested-one-without-settings.input.ts b/server/src/core/@generated/user/user-unchecked-create-nested-one-without-settings.input.ts new file mode 100644 index 000000000..38702d077 --- /dev/null +++ b/server/src/core/@generated/user/user-unchecked-create-nested-one-without-settings.input.ts @@ -0,0 +1,22 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserCreateWithoutSettingsInput } from './user-create-without-settings.input'; +import { Type } from 'class-transformer'; +import { UserCreateOrConnectWithoutSettingsInput } from './user-create-or-connect-without-settings.input'; +import { UserWhereUniqueInput } from './user-where-unique.input'; + +@InputType() +export class UserUncheckedCreateNestedOneWithoutSettingsInput { + + @Field(() => UserCreateWithoutSettingsInput, {nullable:true}) + @Type(() => UserCreateWithoutSettingsInput) + create?: UserCreateWithoutSettingsInput; + + @Field(() => UserCreateOrConnectWithoutSettingsInput, {nullable:true}) + @Type(() => UserCreateOrConnectWithoutSettingsInput) + connectOrCreate?: UserCreateOrConnectWithoutSettingsInput; + + @Field(() => UserWhereUniqueInput, {nullable:true}) + @Type(() => UserWhereUniqueInput) + connect?: UserWhereUniqueInput; +} diff --git a/server/src/core/@generated/user/user-unchecked-create-without-assigned-comment-threads.input.ts b/server/src/core/@generated/user/user-unchecked-create-without-assigned-comment-threads.input.ts index bb259c558..474b51a37 100644 --- a/server/src/core/@generated/user/user-unchecked-create-without-assigned-comment-threads.input.ts +++ b/server/src/core/@generated/user/user-unchecked-create-without-assigned-comment-threads.input.ts @@ -68,6 +68,9 @@ export class UserUncheckedCreateWithoutAssignedCommentThreadsInput { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-unchecked-create-without-authored-comment-threads.input.ts b/server/src/core/@generated/user/user-unchecked-create-without-authored-comment-threads.input.ts index 99ba215ca..6f7089d24 100644 --- a/server/src/core/@generated/user/user-unchecked-create-without-authored-comment-threads.input.ts +++ b/server/src/core/@generated/user/user-unchecked-create-without-authored-comment-threads.input.ts @@ -68,6 +68,9 @@ export class UserUncheckedCreateWithoutAuthoredCommentThreadsInput { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-unchecked-create-without-comments.input.ts b/server/src/core/@generated/user/user-unchecked-create-without-comments.input.ts index f13dc6773..06f1abf56 100644 --- a/server/src/core/@generated/user/user-unchecked-create-without-comments.input.ts +++ b/server/src/core/@generated/user/user-unchecked-create-without-comments.input.ts @@ -68,6 +68,9 @@ export class UserUncheckedCreateWithoutCommentsInput { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-unchecked-create-without-companies.input.ts b/server/src/core/@generated/user/user-unchecked-create-without-companies.input.ts index 8e1b2d85a..c6211b7f7 100644 --- a/server/src/core/@generated/user/user-unchecked-create-without-companies.input.ts +++ b/server/src/core/@generated/user/user-unchecked-create-without-companies.input.ts @@ -68,6 +68,9 @@ export class UserUncheckedCreateWithoutCompaniesInput { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-unchecked-create-without-refresh-tokens.input.ts b/server/src/core/@generated/user/user-unchecked-create-without-refresh-tokens.input.ts index 1f4cdf87e..f95682dfe 100644 --- a/server/src/core/@generated/user/user-unchecked-create-without-refresh-tokens.input.ts +++ b/server/src/core/@generated/user/user-unchecked-create-without-refresh-tokens.input.ts @@ -68,6 +68,9 @@ export class UserUncheckedCreateWithoutRefreshTokensInput { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-unchecked-create-without-settings.input.ts b/server/src/core/@generated/user/user-unchecked-create-without-settings.input.ts new file mode 100644 index 000000000..c44f7c8e7 --- /dev/null +++ b/server/src/core/@generated/user/user-unchecked-create-without-settings.input.ts @@ -0,0 +1,98 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import * as Validator from 'class-validator'; +import { HideField } from '@nestjs/graphql'; +import { GraphQLJSON } from 'graphql-type-json'; +import { WorkspaceMemberUncheckedCreateNestedOneWithoutUserInput } from '../workspace-member/workspace-member-unchecked-create-nested-one-without-user.input'; +import { CompanyUncheckedCreateNestedManyWithoutAccountOwnerInput } from '../company/company-unchecked-create-nested-many-without-account-owner.input'; +import { RefreshTokenUncheckedCreateNestedManyWithoutUserInput } from '../refresh-token/refresh-token-unchecked-create-nested-many-without-user.input'; +import { CommentUncheckedCreateNestedManyWithoutAuthorInput } from '../comment/comment-unchecked-create-nested-many-without-author.input'; +import { CommentThreadUncheckedCreateNestedManyWithoutAuthorInput } from '../comment-thread/comment-thread-unchecked-create-nested-many-without-author.input'; +import { CommentThreadUncheckedCreateNestedManyWithoutAssigneeInput } from '../comment-thread/comment-thread-unchecked-create-nested-many-without-assignee.input'; + +@InputType() +export class UserUncheckedCreateWithoutSettingsInput { + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + id?: string; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + firstName?: string; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + lastName?: string; + + @Field(() => String, {nullable:false}) + @Validator.IsEmail() + email!: string; + + @Field(() => Boolean, {nullable:true}) + @Validator.IsBoolean() + @Validator.IsOptional() + emailVerified?: boolean; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + avatarUrl?: string; + + @Field(() => String, {nullable:false}) + @Validator.IsString() + locale!: string; + + @Field(() => String, {nullable:true}) + @Validator.IsString() + @Validator.IsOptional() + phoneNumber?: string; + + @Field(() => Date, {nullable:true}) + @Validator.IsDate() + @Validator.IsOptional() + lastSeen?: Date | string; + + @Field(() => Boolean, {nullable:true}) + @Validator.IsBoolean() + @Validator.IsOptional() + disabled?: boolean; + + @HideField() + passwordHash?: string; + + @Field(() => GraphQLJSON, {nullable:true}) + @Validator.IsJSON() + @Validator.IsOptional() + metadata?: any; + + @HideField() + deletedAt?: Date | string; + + @Field(() => Date, {nullable:true}) + createdAt?: Date | string; + + @Field(() => Date, {nullable:true}) + updatedAt?: Date | string; + + @HideField() + workspaceMember?: WorkspaceMemberUncheckedCreateNestedOneWithoutUserInput; + + @Field(() => CompanyUncheckedCreateNestedManyWithoutAccountOwnerInput, {nullable:true}) + companies?: CompanyUncheckedCreateNestedManyWithoutAccountOwnerInput; + + @HideField() + refreshTokens?: RefreshTokenUncheckedCreateNestedManyWithoutUserInput; + + @Field(() => CommentUncheckedCreateNestedManyWithoutAuthorInput, {nullable:true}) + comments?: CommentUncheckedCreateNestedManyWithoutAuthorInput; + + @Field(() => CommentThreadUncheckedCreateNestedManyWithoutAuthorInput, {nullable:true}) + authoredCommentThreads?: CommentThreadUncheckedCreateNestedManyWithoutAuthorInput; + + @Field(() => CommentThreadUncheckedCreateNestedManyWithoutAssigneeInput, {nullable:true}) + assignedCommentThreads?: CommentThreadUncheckedCreateNestedManyWithoutAssigneeInput; +} diff --git a/server/src/core/@generated/user/user-unchecked-create-without-workspace-member.input.ts b/server/src/core/@generated/user/user-unchecked-create-without-workspace-member.input.ts index 98af714ff..055f2acb4 100644 --- a/server/src/core/@generated/user/user-unchecked-create-without-workspace-member.input.ts +++ b/server/src/core/@generated/user/user-unchecked-create-without-workspace-member.input.ts @@ -68,6 +68,9 @@ export class UserUncheckedCreateWithoutWorkspaceMemberInput { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-unchecked-create.input.ts b/server/src/core/@generated/user/user-unchecked-create.input.ts index 1258600e1..1bab850c3 100644 --- a/server/src/core/@generated/user/user-unchecked-create.input.ts +++ b/server/src/core/@generated/user/user-unchecked-create.input.ts @@ -69,6 +69,9 @@ export class UserUncheckedCreateInput { @Validator.IsOptional() metadata?: any; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt?: Date | string; diff --git a/server/src/core/@generated/user/user-unchecked-update-many.input.ts b/server/src/core/@generated/user/user-unchecked-update-many.input.ts index 232edaa25..de3881519 100644 --- a/server/src/core/@generated/user/user-unchecked-update-many.input.ts +++ b/server/src/core/@generated/user/user-unchecked-update-many.input.ts @@ -50,6 +50,9 @@ export class UserUncheckedUpdateManyInput { @Validator.IsOptional() metadata?: any; + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + settingsId?: StringFieldUpdateOperationsInput; + @HideField() deletedAt?: NullableDateTimeFieldUpdateOperationsInput; diff --git a/server/src/core/@generated/user/user-unchecked-update-one-without-settings-nested.input.ts b/server/src/core/@generated/user/user-unchecked-update-one-without-settings-nested.input.ts new file mode 100644 index 000000000..9d70125cd --- /dev/null +++ b/server/src/core/@generated/user/user-unchecked-update-one-without-settings-nested.input.ts @@ -0,0 +1,38 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserCreateWithoutSettingsInput } from './user-create-without-settings.input'; +import { Type } from 'class-transformer'; +import { UserCreateOrConnectWithoutSettingsInput } from './user-create-or-connect-without-settings.input'; +import { UserUpsertWithoutSettingsInput } from './user-upsert-without-settings.input'; +import { UserWhereUniqueInput } from './user-where-unique.input'; +import { UserUpdateWithoutSettingsInput } from './user-update-without-settings.input'; + +@InputType() +export class UserUncheckedUpdateOneWithoutSettingsNestedInput { + + @Field(() => UserCreateWithoutSettingsInput, {nullable:true}) + @Type(() => UserCreateWithoutSettingsInput) + create?: UserCreateWithoutSettingsInput; + + @Field(() => UserCreateOrConnectWithoutSettingsInput, {nullable:true}) + @Type(() => UserCreateOrConnectWithoutSettingsInput) + connectOrCreate?: UserCreateOrConnectWithoutSettingsInput; + + @Field(() => UserUpsertWithoutSettingsInput, {nullable:true}) + @Type(() => UserUpsertWithoutSettingsInput) + upsert?: UserUpsertWithoutSettingsInput; + + @Field(() => Boolean, {nullable:true}) + disconnect?: boolean; + + @Field(() => Boolean, {nullable:true}) + delete?: boolean; + + @Field(() => UserWhereUniqueInput, {nullable:true}) + @Type(() => UserWhereUniqueInput) + connect?: UserWhereUniqueInput; + + @Field(() => UserUpdateWithoutSettingsInput, {nullable:true}) + @Type(() => UserUpdateWithoutSettingsInput) + update?: UserUpdateWithoutSettingsInput; +} diff --git a/server/src/core/@generated/user/user-unchecked-update-without-assigned-comment-threads.input.ts b/server/src/core/@generated/user/user-unchecked-update-without-assigned-comment-threads.input.ts index e2091dea8..e29e770fe 100644 --- a/server/src/core/@generated/user/user-unchecked-update-without-assigned-comment-threads.input.ts +++ b/server/src/core/@generated/user/user-unchecked-update-without-assigned-comment-threads.input.ts @@ -55,6 +55,9 @@ export class UserUncheckedUpdateWithoutAssignedCommentThreadsInput { @Validator.IsOptional() metadata?: any; + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + settingsId?: StringFieldUpdateOperationsInput; + @HideField() deletedAt?: NullableDateTimeFieldUpdateOperationsInput; diff --git a/server/src/core/@generated/user/user-unchecked-update-without-authored-comment-threads.input.ts b/server/src/core/@generated/user/user-unchecked-update-without-authored-comment-threads.input.ts index acc3172cf..1d6c64a6e 100644 --- a/server/src/core/@generated/user/user-unchecked-update-without-authored-comment-threads.input.ts +++ b/server/src/core/@generated/user/user-unchecked-update-without-authored-comment-threads.input.ts @@ -55,6 +55,9 @@ export class UserUncheckedUpdateWithoutAuthoredCommentThreadsInput { @Validator.IsOptional() metadata?: any; + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + settingsId?: StringFieldUpdateOperationsInput; + @HideField() deletedAt?: NullableDateTimeFieldUpdateOperationsInput; diff --git a/server/src/core/@generated/user/user-unchecked-update-without-comments.input.ts b/server/src/core/@generated/user/user-unchecked-update-without-comments.input.ts index 1c8503114..b1fb09dcd 100644 --- a/server/src/core/@generated/user/user-unchecked-update-without-comments.input.ts +++ b/server/src/core/@generated/user/user-unchecked-update-without-comments.input.ts @@ -55,6 +55,9 @@ export class UserUncheckedUpdateWithoutCommentsInput { @Validator.IsOptional() metadata?: any; + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + settingsId?: StringFieldUpdateOperationsInput; + @HideField() deletedAt?: NullableDateTimeFieldUpdateOperationsInput; diff --git a/server/src/core/@generated/user/user-unchecked-update-without-companies.input.ts b/server/src/core/@generated/user/user-unchecked-update-without-companies.input.ts index 8b06410fb..4134a0722 100644 --- a/server/src/core/@generated/user/user-unchecked-update-without-companies.input.ts +++ b/server/src/core/@generated/user/user-unchecked-update-without-companies.input.ts @@ -55,6 +55,9 @@ export class UserUncheckedUpdateWithoutCompaniesInput { @Validator.IsOptional() metadata?: any; + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + settingsId?: StringFieldUpdateOperationsInput; + @HideField() deletedAt?: NullableDateTimeFieldUpdateOperationsInput; diff --git a/server/src/core/@generated/user/user-unchecked-update-without-refresh-tokens.input.ts b/server/src/core/@generated/user/user-unchecked-update-without-refresh-tokens.input.ts index 93ac3ae68..c792bd3aa 100644 --- a/server/src/core/@generated/user/user-unchecked-update-without-refresh-tokens.input.ts +++ b/server/src/core/@generated/user/user-unchecked-update-without-refresh-tokens.input.ts @@ -55,6 +55,9 @@ export class UserUncheckedUpdateWithoutRefreshTokensInput { @Validator.IsOptional() metadata?: any; + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + settingsId?: StringFieldUpdateOperationsInput; + @HideField() deletedAt?: NullableDateTimeFieldUpdateOperationsInput; diff --git a/server/src/core/@generated/user/user-unchecked-update-without-settings.input.ts b/server/src/core/@generated/user/user-unchecked-update-without-settings.input.ts new file mode 100644 index 000000000..15491459d --- /dev/null +++ b/server/src/core/@generated/user/user-unchecked-update-without-settings.input.ts @@ -0,0 +1,85 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFieldUpdateOperationsInput } from '../prisma/string-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'; +import * as Validator from 'class-validator'; +import { DateTimeFieldUpdateOperationsInput } from '../prisma/date-time-field-update-operations.input'; +import { WorkspaceMemberUncheckedUpdateOneWithoutUserNestedInput } from '../workspace-member/workspace-member-unchecked-update-one-without-user-nested.input'; +import { CompanyUncheckedUpdateManyWithoutAccountOwnerNestedInput } from '../company/company-unchecked-update-many-without-account-owner-nested.input'; +import { RefreshTokenUncheckedUpdateManyWithoutUserNestedInput } from '../refresh-token/refresh-token-unchecked-update-many-without-user-nested.input'; +import { CommentUncheckedUpdateManyWithoutAuthorNestedInput } from '../comment/comment-unchecked-update-many-without-author-nested.input'; +import { CommentThreadUncheckedUpdateManyWithoutAuthorNestedInput } from '../comment-thread/comment-thread-unchecked-update-many-without-author-nested.input'; +import { CommentThreadUncheckedUpdateManyWithoutAssigneeNestedInput } from '../comment-thread/comment-thread-unchecked-update-many-without-assignee-nested.input'; + +@InputType() +export class UserUncheckedUpdateWithoutSettingsInput { + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + id?: StringFieldUpdateOperationsInput; + + @Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true}) + firstName?: NullableStringFieldUpdateOperationsInput; + + @Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true}) + lastName?: NullableStringFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + email?: StringFieldUpdateOperationsInput; + + @Field(() => BoolFieldUpdateOperationsInput, {nullable:true}) + emailVerified?: BoolFieldUpdateOperationsInput; + + @Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true}) + avatarUrl?: NullableStringFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + locale?: StringFieldUpdateOperationsInput; + + @Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true}) + phoneNumber?: NullableStringFieldUpdateOperationsInput; + + @Field(() => NullableDateTimeFieldUpdateOperationsInput, {nullable:true}) + lastSeen?: NullableDateTimeFieldUpdateOperationsInput; + + @Field(() => BoolFieldUpdateOperationsInput, {nullable:true}) + disabled?: BoolFieldUpdateOperationsInput; + + @HideField() + passwordHash?: NullableStringFieldUpdateOperationsInput; + + @Field(() => GraphQLJSON, {nullable:true}) + @Validator.IsJSON() + @Validator.IsOptional() + metadata?: any; + + @HideField() + deletedAt?: NullableDateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + createdAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + updatedAt?: DateTimeFieldUpdateOperationsInput; + + @HideField() + workspaceMember?: WorkspaceMemberUncheckedUpdateOneWithoutUserNestedInput; + + @Field(() => CompanyUncheckedUpdateManyWithoutAccountOwnerNestedInput, {nullable:true}) + companies?: CompanyUncheckedUpdateManyWithoutAccountOwnerNestedInput; + + @HideField() + refreshTokens?: RefreshTokenUncheckedUpdateManyWithoutUserNestedInput; + + @Field(() => CommentUncheckedUpdateManyWithoutAuthorNestedInput, {nullable:true}) + comments?: CommentUncheckedUpdateManyWithoutAuthorNestedInput; + + @Field(() => CommentThreadUncheckedUpdateManyWithoutAuthorNestedInput, {nullable:true}) + authoredCommentThreads?: CommentThreadUncheckedUpdateManyWithoutAuthorNestedInput; + + @Field(() => CommentThreadUncheckedUpdateManyWithoutAssigneeNestedInput, {nullable:true}) + assignedCommentThreads?: CommentThreadUncheckedUpdateManyWithoutAssigneeNestedInput; +} diff --git a/server/src/core/@generated/user/user-unchecked-update-without-workspace-member.input.ts b/server/src/core/@generated/user/user-unchecked-update-without-workspace-member.input.ts index 1061c469b..5d462d7c1 100644 --- a/server/src/core/@generated/user/user-unchecked-update-without-workspace-member.input.ts +++ b/server/src/core/@generated/user/user-unchecked-update-without-workspace-member.input.ts @@ -55,6 +55,9 @@ export class UserUncheckedUpdateWithoutWorkspaceMemberInput { @Validator.IsOptional() metadata?: any; + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + settingsId?: StringFieldUpdateOperationsInput; + @HideField() deletedAt?: NullableDateTimeFieldUpdateOperationsInput; diff --git a/server/src/core/@generated/user/user-unchecked-update.input.ts b/server/src/core/@generated/user/user-unchecked-update.input.ts index b3de62461..828179bbd 100644 --- a/server/src/core/@generated/user/user-unchecked-update.input.ts +++ b/server/src/core/@generated/user/user-unchecked-update.input.ts @@ -56,6 +56,9 @@ export class UserUncheckedUpdateInput { @Validator.IsOptional() metadata?: any; + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + settingsId?: StringFieldUpdateOperationsInput; + @HideField() deletedAt?: NullableDateTimeFieldUpdateOperationsInput; diff --git a/server/src/core/@generated/user/user-update-one-without-settings-nested.input.ts b/server/src/core/@generated/user/user-update-one-without-settings-nested.input.ts new file mode 100644 index 000000000..21298c5bb --- /dev/null +++ b/server/src/core/@generated/user/user-update-one-without-settings-nested.input.ts @@ -0,0 +1,38 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserCreateWithoutSettingsInput } from './user-create-without-settings.input'; +import { Type } from 'class-transformer'; +import { UserCreateOrConnectWithoutSettingsInput } from './user-create-or-connect-without-settings.input'; +import { UserUpsertWithoutSettingsInput } from './user-upsert-without-settings.input'; +import { UserWhereUniqueInput } from './user-where-unique.input'; +import { UserUpdateWithoutSettingsInput } from './user-update-without-settings.input'; + +@InputType() +export class UserUpdateOneWithoutSettingsNestedInput { + + @Field(() => UserCreateWithoutSettingsInput, {nullable:true}) + @Type(() => UserCreateWithoutSettingsInput) + create?: UserCreateWithoutSettingsInput; + + @Field(() => UserCreateOrConnectWithoutSettingsInput, {nullable:true}) + @Type(() => UserCreateOrConnectWithoutSettingsInput) + connectOrCreate?: UserCreateOrConnectWithoutSettingsInput; + + @Field(() => UserUpsertWithoutSettingsInput, {nullable:true}) + @Type(() => UserUpsertWithoutSettingsInput) + upsert?: UserUpsertWithoutSettingsInput; + + @Field(() => Boolean, {nullable:true}) + disconnect?: boolean; + + @Field(() => Boolean, {nullable:true}) + delete?: boolean; + + @Field(() => UserWhereUniqueInput, {nullable:true}) + @Type(() => UserWhereUniqueInput) + connect?: UserWhereUniqueInput; + + @Field(() => UserUpdateWithoutSettingsInput, {nullable:true}) + @Type(() => UserUpdateWithoutSettingsInput) + update?: UserUpdateWithoutSettingsInput; +} diff --git a/server/src/core/@generated/user/user-update-without-assigned-comment-threads.input.ts b/server/src/core/@generated/user/user-update-without-assigned-comment-threads.input.ts index 3dde01af1..1db786dd4 100644 --- a/server/src/core/@generated/user/user-update-without-assigned-comment-threads.input.ts +++ b/server/src/core/@generated/user/user-update-without-assigned-comment-threads.input.ts @@ -13,6 +13,7 @@ import { CompanyUpdateManyWithoutAccountOwnerNestedInput } from '../company/comp import { RefreshTokenUpdateManyWithoutUserNestedInput } from '../refresh-token/refresh-token-update-many-without-user-nested.input'; import { CommentUpdateManyWithoutAuthorNestedInput } from '../comment/comment-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAuthorNestedInput } from '../comment-thread/comment-thread-update-many-without-author-nested.input'; +import { UserSettingsUpdateOneRequiredWithoutUserNestedInput } from '../user-settings/user-settings-update-one-required-without-user-nested.input'; @InputType() export class UserUpdateWithoutAssignedCommentThreadsInput { @@ -78,4 +79,7 @@ export class UserUpdateWithoutAssignedCommentThreadsInput { @Field(() => CommentThreadUpdateManyWithoutAuthorNestedInput, {nullable:true}) authoredCommentThreads?: CommentThreadUpdateManyWithoutAuthorNestedInput; + + @Field(() => UserSettingsUpdateOneRequiredWithoutUserNestedInput, {nullable:true}) + settings?: UserSettingsUpdateOneRequiredWithoutUserNestedInput; } diff --git a/server/src/core/@generated/user/user-update-without-authored-comment-threads.input.ts b/server/src/core/@generated/user/user-update-without-authored-comment-threads.input.ts index afccad093..ac65e28c5 100644 --- a/server/src/core/@generated/user/user-update-without-authored-comment-threads.input.ts +++ b/server/src/core/@generated/user/user-update-without-authored-comment-threads.input.ts @@ -13,6 +13,7 @@ import { CompanyUpdateManyWithoutAccountOwnerNestedInput } from '../company/comp import { RefreshTokenUpdateManyWithoutUserNestedInput } from '../refresh-token/refresh-token-update-many-without-user-nested.input'; import { CommentUpdateManyWithoutAuthorNestedInput } from '../comment/comment-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAssigneeNestedInput } from '../comment-thread/comment-thread-update-many-without-assignee-nested.input'; +import { UserSettingsUpdateOneRequiredWithoutUserNestedInput } from '../user-settings/user-settings-update-one-required-without-user-nested.input'; @InputType() export class UserUpdateWithoutAuthoredCommentThreadsInput { @@ -78,4 +79,7 @@ export class UserUpdateWithoutAuthoredCommentThreadsInput { @Field(() => CommentThreadUpdateManyWithoutAssigneeNestedInput, {nullable:true}) assignedCommentThreads?: CommentThreadUpdateManyWithoutAssigneeNestedInput; + + @Field(() => UserSettingsUpdateOneRequiredWithoutUserNestedInput, {nullable:true}) + settings?: UserSettingsUpdateOneRequiredWithoutUserNestedInput; } diff --git a/server/src/core/@generated/user/user-update-without-comments.input.ts b/server/src/core/@generated/user/user-update-without-comments.input.ts index 6722d7c3c..bb716c4ec 100644 --- a/server/src/core/@generated/user/user-update-without-comments.input.ts +++ b/server/src/core/@generated/user/user-update-without-comments.input.ts @@ -13,6 +13,7 @@ import { CompanyUpdateManyWithoutAccountOwnerNestedInput } from '../company/comp import { RefreshTokenUpdateManyWithoutUserNestedInput } from '../refresh-token/refresh-token-update-many-without-user-nested.input'; import { CommentThreadUpdateManyWithoutAuthorNestedInput } from '../comment-thread/comment-thread-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAssigneeNestedInput } from '../comment-thread/comment-thread-update-many-without-assignee-nested.input'; +import { UserSettingsUpdateOneRequiredWithoutUserNestedInput } from '../user-settings/user-settings-update-one-required-without-user-nested.input'; @InputType() export class UserUpdateWithoutCommentsInput { @@ -78,4 +79,7 @@ export class UserUpdateWithoutCommentsInput { @Field(() => CommentThreadUpdateManyWithoutAssigneeNestedInput, {nullable:true}) assignedCommentThreads?: CommentThreadUpdateManyWithoutAssigneeNestedInput; + + @Field(() => UserSettingsUpdateOneRequiredWithoutUserNestedInput, {nullable:true}) + settings?: UserSettingsUpdateOneRequiredWithoutUserNestedInput; } diff --git a/server/src/core/@generated/user/user-update-without-companies.input.ts b/server/src/core/@generated/user/user-update-without-companies.input.ts index 75c21ad46..c85f487e5 100644 --- a/server/src/core/@generated/user/user-update-without-companies.input.ts +++ b/server/src/core/@generated/user/user-update-without-companies.input.ts @@ -13,6 +13,7 @@ import { RefreshTokenUpdateManyWithoutUserNestedInput } from '../refresh-token/r import { CommentUpdateManyWithoutAuthorNestedInput } from '../comment/comment-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAuthorNestedInput } from '../comment-thread/comment-thread-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAssigneeNestedInput } from '../comment-thread/comment-thread-update-many-without-assignee-nested.input'; +import { UserSettingsUpdateOneRequiredWithoutUserNestedInput } from '../user-settings/user-settings-update-one-required-without-user-nested.input'; @InputType() export class UserUpdateWithoutCompaniesInput { @@ -78,4 +79,7 @@ export class UserUpdateWithoutCompaniesInput { @Field(() => CommentThreadUpdateManyWithoutAssigneeNestedInput, {nullable:true}) assignedCommentThreads?: CommentThreadUpdateManyWithoutAssigneeNestedInput; + + @Field(() => UserSettingsUpdateOneRequiredWithoutUserNestedInput, {nullable:true}) + settings?: UserSettingsUpdateOneRequiredWithoutUserNestedInput; } diff --git a/server/src/core/@generated/user/user-update-without-refresh-tokens.input.ts b/server/src/core/@generated/user/user-update-without-refresh-tokens.input.ts index 508b54d82..976fcc263 100644 --- a/server/src/core/@generated/user/user-update-without-refresh-tokens.input.ts +++ b/server/src/core/@generated/user/user-update-without-refresh-tokens.input.ts @@ -13,6 +13,7 @@ import { CompanyUpdateManyWithoutAccountOwnerNestedInput } from '../company/comp import { CommentUpdateManyWithoutAuthorNestedInput } from '../comment/comment-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAuthorNestedInput } from '../comment-thread/comment-thread-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAssigneeNestedInput } from '../comment-thread/comment-thread-update-many-without-assignee-nested.input'; +import { UserSettingsUpdateOneRequiredWithoutUserNestedInput } from '../user-settings/user-settings-update-one-required-without-user-nested.input'; @InputType() export class UserUpdateWithoutRefreshTokensInput { @@ -78,4 +79,7 @@ export class UserUpdateWithoutRefreshTokensInput { @Field(() => CommentThreadUpdateManyWithoutAssigneeNestedInput, {nullable:true}) assignedCommentThreads?: CommentThreadUpdateManyWithoutAssigneeNestedInput; + + @Field(() => UserSettingsUpdateOneRequiredWithoutUserNestedInput, {nullable:true}) + settings?: UserSettingsUpdateOneRequiredWithoutUserNestedInput; } diff --git a/server/src/core/@generated/user/user-update-without-settings.input.ts b/server/src/core/@generated/user/user-update-without-settings.input.ts new file mode 100644 index 000000000..1f3dd4a85 --- /dev/null +++ b/server/src/core/@generated/user/user-update-without-settings.input.ts @@ -0,0 +1,85 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { StringFieldUpdateOperationsInput } from '../prisma/string-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'; +import * as Validator from 'class-validator'; +import { DateTimeFieldUpdateOperationsInput } from '../prisma/date-time-field-update-operations.input'; +import { WorkspaceMemberUpdateOneWithoutUserNestedInput } from '../workspace-member/workspace-member-update-one-without-user-nested.input'; +import { CompanyUpdateManyWithoutAccountOwnerNestedInput } from '../company/company-update-many-without-account-owner-nested.input'; +import { RefreshTokenUpdateManyWithoutUserNestedInput } from '../refresh-token/refresh-token-update-many-without-user-nested.input'; +import { CommentUpdateManyWithoutAuthorNestedInput } from '../comment/comment-update-many-without-author-nested.input'; +import { CommentThreadUpdateManyWithoutAuthorNestedInput } from '../comment-thread/comment-thread-update-many-without-author-nested.input'; +import { CommentThreadUpdateManyWithoutAssigneeNestedInput } from '../comment-thread/comment-thread-update-many-without-assignee-nested.input'; + +@InputType() +export class UserUpdateWithoutSettingsInput { + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + id?: StringFieldUpdateOperationsInput; + + @Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true}) + firstName?: NullableStringFieldUpdateOperationsInput; + + @Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true}) + lastName?: NullableStringFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + email?: StringFieldUpdateOperationsInput; + + @Field(() => BoolFieldUpdateOperationsInput, {nullable:true}) + emailVerified?: BoolFieldUpdateOperationsInput; + + @Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true}) + avatarUrl?: NullableStringFieldUpdateOperationsInput; + + @Field(() => StringFieldUpdateOperationsInput, {nullable:true}) + locale?: StringFieldUpdateOperationsInput; + + @Field(() => NullableStringFieldUpdateOperationsInput, {nullable:true}) + phoneNumber?: NullableStringFieldUpdateOperationsInput; + + @Field(() => NullableDateTimeFieldUpdateOperationsInput, {nullable:true}) + lastSeen?: NullableDateTimeFieldUpdateOperationsInput; + + @Field(() => BoolFieldUpdateOperationsInput, {nullable:true}) + disabled?: BoolFieldUpdateOperationsInput; + + @HideField() + passwordHash?: NullableStringFieldUpdateOperationsInput; + + @Field(() => GraphQLJSON, {nullable:true}) + @Validator.IsJSON() + @Validator.IsOptional() + metadata?: any; + + @HideField() + deletedAt?: NullableDateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + createdAt?: DateTimeFieldUpdateOperationsInput; + + @Field(() => DateTimeFieldUpdateOperationsInput, {nullable:true}) + updatedAt?: DateTimeFieldUpdateOperationsInput; + + @HideField() + workspaceMember?: WorkspaceMemberUpdateOneWithoutUserNestedInput; + + @Field(() => CompanyUpdateManyWithoutAccountOwnerNestedInput, {nullable:true}) + companies?: CompanyUpdateManyWithoutAccountOwnerNestedInput; + + @HideField() + refreshTokens?: RefreshTokenUpdateManyWithoutUserNestedInput; + + @Field(() => CommentUpdateManyWithoutAuthorNestedInput, {nullable:true}) + comments?: CommentUpdateManyWithoutAuthorNestedInput; + + @Field(() => CommentThreadUpdateManyWithoutAuthorNestedInput, {nullable:true}) + authoredCommentThreads?: CommentThreadUpdateManyWithoutAuthorNestedInput; + + @Field(() => CommentThreadUpdateManyWithoutAssigneeNestedInput, {nullable:true}) + assignedCommentThreads?: CommentThreadUpdateManyWithoutAssigneeNestedInput; +} diff --git a/server/src/core/@generated/user/user-update-without-workspace-member.input.ts b/server/src/core/@generated/user/user-update-without-workspace-member.input.ts index 18cf5dac4..37aae6af9 100644 --- a/server/src/core/@generated/user/user-update-without-workspace-member.input.ts +++ b/server/src/core/@generated/user/user-update-without-workspace-member.input.ts @@ -13,6 +13,7 @@ import { RefreshTokenUpdateManyWithoutUserNestedInput } from '../refresh-token/r import { CommentUpdateManyWithoutAuthorNestedInput } from '../comment/comment-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAuthorNestedInput } from '../comment-thread/comment-thread-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAssigneeNestedInput } from '../comment-thread/comment-thread-update-many-without-assignee-nested.input'; +import { UserSettingsUpdateOneRequiredWithoutUserNestedInput } from '../user-settings/user-settings-update-one-required-without-user-nested.input'; @InputType() export class UserUpdateWithoutWorkspaceMemberInput { @@ -78,4 +79,7 @@ export class UserUpdateWithoutWorkspaceMemberInput { @Field(() => CommentThreadUpdateManyWithoutAssigneeNestedInput, {nullable:true}) assignedCommentThreads?: CommentThreadUpdateManyWithoutAssigneeNestedInput; + + @Field(() => UserSettingsUpdateOneRequiredWithoutUserNestedInput, {nullable:true}) + settings?: UserSettingsUpdateOneRequiredWithoutUserNestedInput; } diff --git a/server/src/core/@generated/user/user-update.input.ts b/server/src/core/@generated/user/user-update.input.ts index 7a9f3518a..76849e826 100644 --- a/server/src/core/@generated/user/user-update.input.ts +++ b/server/src/core/@generated/user/user-update.input.ts @@ -14,6 +14,7 @@ import { RefreshTokenUpdateManyWithoutUserNestedInput } from '../refresh-token/r import { CommentUpdateManyWithoutAuthorNestedInput } from '../comment/comment-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAuthorNestedInput } from '../comment-thread/comment-thread-update-many-without-author-nested.input'; import { CommentThreadUpdateManyWithoutAssigneeNestedInput } from '../comment-thread/comment-thread-update-many-without-assignee-nested.input'; +import { UserSettingsUpdateOneRequiredWithoutUserNestedInput } from '../user-settings/user-settings-update-one-required-without-user-nested.input'; @InputType() export class UserUpdateInput { @@ -82,4 +83,7 @@ export class UserUpdateInput { @Field(() => CommentThreadUpdateManyWithoutAssigneeNestedInput, {nullable:true}) assignedCommentThreads?: CommentThreadUpdateManyWithoutAssigneeNestedInput; + + @Field(() => UserSettingsUpdateOneRequiredWithoutUserNestedInput, {nullable:true}) + settings?: UserSettingsUpdateOneRequiredWithoutUserNestedInput; } diff --git a/server/src/core/@generated/user/user-upsert-without-settings.input.ts b/server/src/core/@generated/user/user-upsert-without-settings.input.ts new file mode 100644 index 000000000..383691c85 --- /dev/null +++ b/server/src/core/@generated/user/user-upsert-without-settings.input.ts @@ -0,0 +1,17 @@ +import { Field } from '@nestjs/graphql'; +import { InputType } from '@nestjs/graphql'; +import { UserUpdateWithoutSettingsInput } from './user-update-without-settings.input'; +import { Type } from 'class-transformer'; +import { UserCreateWithoutSettingsInput } from './user-create-without-settings.input'; + +@InputType() +export class UserUpsertWithoutSettingsInput { + + @Field(() => UserUpdateWithoutSettingsInput, {nullable:false}) + @Type(() => UserUpdateWithoutSettingsInput) + update!: UserUpdateWithoutSettingsInput; + + @Field(() => UserCreateWithoutSettingsInput, {nullable:false}) + @Type(() => UserCreateWithoutSettingsInput) + create!: UserCreateWithoutSettingsInput; +} diff --git a/server/src/core/@generated/user/user-where-unique.input.ts b/server/src/core/@generated/user/user-where-unique.input.ts index 67516f1d6..f82b3a2e5 100644 --- a/server/src/core/@generated/user/user-where-unique.input.ts +++ b/server/src/core/@generated/user/user-where-unique.input.ts @@ -13,4 +13,7 @@ export class UserWhereUniqueInput { @Field(() => String, {nullable:true}) @Validator.IsEmail() email?: string; + + @Field(() => String, {nullable:true}) + settingsId?: string; } diff --git a/server/src/core/@generated/user/user-where.input.ts b/server/src/core/@generated/user/user-where.input.ts index b5162556d..63ef5daac 100644 --- a/server/src/core/@generated/user/user-where.input.ts +++ b/server/src/core/@generated/user/user-where.input.ts @@ -12,6 +12,7 @@ import { CompanyListRelationFilter } from '../company/company-list-relation-filt import { RefreshTokenListRelationFilter } from '../refresh-token/refresh-token-list-relation-filter.input'; import { CommentListRelationFilter } from '../comment/comment-list-relation-filter.input'; import { CommentThreadListRelationFilter } from '../comment-thread/comment-thread-list-relation-filter.input'; +import { UserSettingsRelationFilter } from '../user-settings/user-settings-relation-filter.input'; @InputType() export class UserWhereInput { @@ -61,6 +62,9 @@ export class UserWhereInput { @Field(() => JsonNullableFilter, {nullable:true}) metadata?: JsonNullableFilter; + @Field(() => StringFilter, {nullable:true}) + settingsId?: StringFilter; + @HideField() deletedAt?: DateTimeNullableFilter; @@ -87,4 +91,7 @@ export class UserWhereInput { @Field(() => CommentThreadListRelationFilter, {nullable:true}) assignedCommentThreads?: CommentThreadListRelationFilter; + + @Field(() => UserSettingsRelationFilter, {nullable:true}) + settings?: UserSettingsRelationFilter; } diff --git a/server/src/core/@generated/user/user.model.ts b/server/src/core/@generated/user/user.model.ts index b946307eb..452b37a8a 100644 --- a/server/src/core/@generated/user/user.model.ts +++ b/server/src/core/@generated/user/user.model.ts @@ -8,6 +8,7 @@ import { Company } from '../company/company.model'; import { RefreshToken } from '../refresh-token/refresh-token.model'; import { Comment } from '../comment/comment.model'; import { CommentThread } from '../comment-thread/comment-thread.model'; +import { UserSettings } from '../user-settings/user-settings.model'; import { UserCount } from './user-count.output'; @ObjectType() @@ -49,6 +50,9 @@ export class User { @Field(() => GraphQLJSON, {nullable:true}) metadata!: any | null; + @Field(() => String, {nullable:false}) + settingsId!: string; + @HideField() deletedAt!: Date | null; @@ -76,6 +80,9 @@ export class User { @Field(() => [CommentThread], {nullable:true}) assignedCommentThreads?: Array; + @Field(() => UserSettings, {nullable:false}) + settings?: UserSettings; + @HideField() _count?: UserCount; } diff --git a/server/src/core/auth/controllers/google-auth.controller.ts b/server/src/core/auth/controllers/google-auth.controller.ts index 0eaffb590..6fec7e78a 100644 --- a/server/src/core/auth/controllers/google-auth.controller.ts +++ b/server/src/core/auth/controllers/google-auth.controller.ts @@ -38,6 +38,11 @@ export class GoogleAuthController { firstName: firstName ?? '', lastName: lastName ?? '', locale: 'en', + settings: { + create: { + locale: 'en', + }, + }, }, }); diff --git a/server/src/core/auth/services/auth.service.ts b/server/src/core/auth/services/auth.service.ts index a4c9b8420..b3bdaec8e 100644 --- a/server/src/core/auth/services/auth.service.ts +++ b/server/src/core/auth/services/auth.service.ts @@ -82,6 +82,11 @@ export class AuthService { email: signUpInput.email, passwordHash, locale: 'en', + settings: { + create: { + locale: 'en', + }, + }, }, } as Prisma.UserCreateArgs, workspace.id, @@ -93,6 +98,11 @@ export class AuthService { email: signUpInput.email, passwordHash, locale: 'en', + settings: { + create: { + locale: 'en', + }, + }, }, } as Prisma.UserCreateArgs); } diff --git a/server/src/database/migrations/20230718070849_alter_table_user_and_add_table_user_settings/migration.sql b/server/src/database/migrations/20230718070849_alter_table_user_and_add_table_user_settings/migration.sql new file mode 100644 index 000000000..e5aa554ff --- /dev/null +++ b/server/src/database/migrations/20230718070849_alter_table_user_and_add_table_user_settings/migration.sql @@ -0,0 +1,19 @@ +-- Adding 'settingsId' to 'users' table without NOT NULL constraint initially +ALTER TABLE "users" ADD COLUMN "settingsId" TEXT; + +-- Creating 'user_settings' table +CREATE TYPE "ColorScheme" AS ENUM ('Light', 'Dark', 'System'); +CREATE TABLE "user_settings" ( + "id" TEXT NOT NULL, + "colorScheme" "ColorScheme" NOT NULL DEFAULT 'System', + "locale" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "user_settings_pkey" PRIMARY KEY ("id") +); + +-- Applying constraints and indexes +CREATE UNIQUE INDEX "users_settingsId_key" ON "users"("settingsId"); +ALTER TABLE "users" ADD CONSTRAINT "users_settingsId_fkey" FOREIGN KEY ("settingsId") REFERENCES "user_settings"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + diff --git a/server/src/database/schema.prisma b/server/src/database/schema.prisma index 904ee4ec8..1668d04e7 100644 --- a/server/src/database/schema.prisma +++ b/server/src/database/schema.prisma @@ -172,17 +172,42 @@ model User { refreshTokens RefreshToken[] comments Comment[] + authoredCommentThreads CommentThread[] @relation(name: "authoredCommentThreads") + assignedCommentThreads CommentThread[] @relation(name: "assignedCommentThreads") + settings UserSettings @relation(fields: [settingsId], references: [id]) + settingsId String @unique + /// @TypeGraphQL.omit(input: true, output: true) deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - authoredCommentThreads CommentThread[] @relation(name: "authoredCommentThreads") - assignedCommentThreads CommentThread[] @relation(name: "assignedCommentThreads") + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt @@map("users") } +enum ColorScheme { + Light + Dark + System +} + +model UserSettings { + id String @id @default(uuid()) + /// @Validator.IsString() + /// @Validator.IsOptional() + colorScheme ColorScheme @default(System) + /// @Validator.IsString() + locale String + + user User? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@map("user_settings") +} + /// @TypeGraphQL.omit(input: true) model Workspace { /// @Validator.IsString() diff --git a/server/src/database/seeds/users.ts b/server/src/database/seeds/users.ts index a84599d45..23e9df803 100644 --- a/server/src/database/seeds/users.ts +++ b/server/src/database/seeds/users.ts @@ -8,9 +8,14 @@ export const seedUsers = async (prisma: PrismaClient) => { firstName: 'Tim', lastName: 'Apple', email: 'tim@apple.dev', + locale: 'en', passwordHash: '$2b$10$66d.6DuQExxnrfI9rMqOg.U1XIYpagr6Lv05uoWLYbYmtK0HDIvS6', // Applecar2025 - locale: 'en', + settings: { + create: { + locale: 'en', + }, + }, avatarUrl: null, workspaceMember: { connectOrCreate: { @@ -34,6 +39,11 @@ export const seedUsers = async (prisma: PrismaClient) => { lastName: 'Ive', email: 'jony.ive@apple.dev', locale: 'en', + settings: { + create: { + locale: 'en', + }, + }, avatarUrl: null, workspaceMember: { create: { @@ -53,6 +63,11 @@ export const seedUsers = async (prisma: PrismaClient) => { lastName: 'Schiler', email: 'phil.schiler@apple.dev', locale: 'en', + settings: { + create: { + locale: 'en', + }, + }, avatarUrl: null, workspaceMember: { create: { @@ -72,6 +87,11 @@ export const seedUsers = async (prisma: PrismaClient) => { lastName: 'Bochet', email: 'charles@twenty.dev', locale: 'en', + settings: { + create: { + locale: 'en', + }, + }, workspaceMember: { create: { id: 'twenty-dev-7ed9d213-1c25-4d02-bf35-6aeccf7oa419', diff --git a/server/src/utils/prisma-select/model-select-map.ts b/server/src/utils/prisma-select/model-select-map.ts index cfd4be733..46541d929 100644 --- a/server/src/utils/prisma-select/model-select-map.ts +++ b/server/src/utils/prisma-select/model-select-map.ts @@ -3,6 +3,7 @@ import { Prisma } from '@prisma/client'; export type ModelSelectMap = { User: Prisma.UserSelect; + UserSettings: Prisma.UserSettingsSelect; Workspace: Prisma.WorkspaceSelect; WorkspaceMember: Prisma.WorkspaceMemberSelect; Company: Prisma.CompanySelect;