From 4eb8a87fdd5f2f37fec11199b875bebc1da8af7e Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 30 Nov 2025 14:36:59 +0100 Subject: [PATCH] revert not neccessary changes, to reduce review noise --- .github/workflows/test_e2e.yml | 21 ++++++++++++++++--- backend/src/graphql/model/Transaction.ts | 4 ++-- .../graphql/resolver/ContributionResolver.ts | 7 ++++--- .../resolver/TransactionLinkResolver.ts | 11 +++++----- .../graphql/resolver/TransactionResolver.ts | 6 ++++-- .../src/graphql/resolver/UserResolver.test.ts | 6 +++--- .../AbstractUnconfirmedContribution.role.ts | 2 +- .../UnconfirmedContributionAdmin.role.ts | 2 +- ...nfirmedContributionAdminAddMessage.role.ts | 2 +- .../UnconfirmedContributionUser.role.ts | 2 +- ...onfirmedContributionUserAddMessage.role.ts | 2 +- backend/src/seeds/community/index.ts | 14 ++++++++++--- backend/src/util/virtualTransactions.ts | 3 ++- core/src/graphql/enum/TransactionTypeId.ts | 1 + .../src/graphql/logic/processXComSendCoins.ts | 14 ++++--------- core/src/util/utilities.ts | 2 +- database/migration/clear.ts | 2 -- database/package.json | 1 - database/src/seeds/factory/user.ts | 1 + 19 files changed, 62 insertions(+), 41 deletions(-) diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 5d7e1f8be..a670e485d 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -30,7 +30,12 @@ jobs: sudo cp ./nginx/e2e-test.conf /etc/nginx/sites-available/default - name: Boot up test system | seed backend - run: bun turbo seed --env-mode=loose + run: bun turbo seed + + - name: Moving logs after seeding + run: | + mkdir -p /home/runner/work/gradido/gradido/logs/backend/seed + mv /home/runner/work/gradido/gradido/logs/backend/*.log /home/runner/work/gradido/gradido/logs/backend/seed/ - name: Boot up test system | docker-compose backend, frontend run: | @@ -130,7 +135,7 @@ jobs: sudo cp ./nginx/e2e-test.conf /etc/nginx/sites-available/default - name: Boot up test system | seed backend - run: bun turbo seed --env-mode=loose + run: bun turbo seed - name: copy test config run: | @@ -139,6 +144,11 @@ jobs: cd ../backend cp .env.test_e2e .env + - name: Moving logs after seeding + run: | + mkdir -p /home/runner/work/gradido/gradido/logs/backend/seed + mv /home/runner/work/gradido/gradido/logs/backend/*.log /home/runner/work/gradido/gradido/logs/backend/seed/ + - name: Boot up test system | docker-compose backend, frontend run: | bun turbo backend#build frontend#build --env-mode=loose @@ -210,7 +220,12 @@ jobs: sudo cp ./nginx/e2e-test.conf /etc/nginx/sites-available/default - name: Boot up test system | seed backend - run: bun turbo seed --env-mode=loose + run: bun turbo seed + + - name: Moving logs after seeding + run: | + mkdir -p /home/runner/work/gradido/gradido/logs/backend/seed + mv /home/runner/work/gradido/gradido/logs/backend/*.log /home/runner/work/gradido/gradido/logs/backend/seed/ - name: Boot up test system | docker-compose backend, frontend run: | diff --git a/backend/src/graphql/model/Transaction.ts b/backend/src/graphql/model/Transaction.ts index 312c67b15..0560cef54 100644 --- a/backend/src/graphql/model/Transaction.ts +++ b/backend/src/graphql/model/Transaction.ts @@ -1,8 +1,8 @@ -import { Transaction as dbTransaction, TransactionTypeId } from 'database' +import { Transaction as dbTransaction } from 'database' import { Decimal } from 'decimal.js-light' import { Field, Int, ObjectType } from 'type-graphql' -import { Decay } from 'core' +import { Decay, TransactionTypeId } from 'core' import { User } from './User' diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 8faf03480..180c22cfb 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -1,7 +1,6 @@ import { Contribution as DbContribution, Transaction as DbTransaction, - TransactionTypeId, User as DbUser, DltTransaction as DbDltTransaction, UserContact, @@ -17,16 +16,19 @@ import { ContributionArgs } from '@arg/ContributionArgs' import { Paginated } from '@arg/Paginated' import { SearchContributionsFilterArgs } from '@arg/SearchContributionsFilterArgs' import { ContributionStatus } from '@enum/ContributionStatus' +import { ContributionType } from '@enum/ContributionType' import { AdminUpdateContribution } from '@model/AdminUpdateContribution' import { Contribution, ContributionListResult } from '@model/Contribution' import { OpenCreation } from '@model/OpenCreation' import { UnconfirmedContribution } from '@model/UnconfirmedContribution' import { RIGHTS } from '@/auth/RIGHTS' import { + fullName, sendContributionChangedByModeratorEmail, sendContributionConfirmedEmail, sendContributionDeletedEmail, sendContributionDeniedEmail, + TransactionTypeId } from 'core' import { EVENT_ADMIN_CONTRIBUTION_CONFIRM, @@ -42,11 +44,10 @@ import { UpdateUnconfirmedContributionContext } from '@/interactions/updateUncon import { LogError } from '@/server/LogError' import { Context, getClientTimezoneOffset, getUser } from '@/server/context' import { TRANSACTIONS_LOCK } from 'database' -import { calculateDecay, Decay, fullName } from 'shared' +import { calculateDecay, Decay } from 'shared' import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const' import { ContributionMessageType } from '@enum/ContributionMessageType' -import { ContributionType } from '@enum/ContributionType' import { AppDatabase } from 'database' import { getLogger } from 'log4js' import { diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index eac60b9e3..869104bae 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -3,15 +3,16 @@ import { randomBytes } from 'crypto' import { Paginated } from '@arg/Paginated' import { TransactionLinkArgs } from '@arg/TransactionLinkArgs' import { TransactionLinkFilters } from '@arg/TransactionLinkFilters' -import { ContributionType } from '@enum/ContributionType' +import { ContributionCycleType } from '@enum/ContributionCycleType' import { ContributionStatus } from '@enum/ContributionStatus' +import { ContributionType } from '@enum/ContributionType' import { Community } from '@model/Community' import { ContributionLink } from '@model/ContributionLink' import { RedeemJwtLink } from '@model/RedeemJwtLink' import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink' import { User } from '@model/User' import { QueryLinkResult } from '@union/QueryLinkResult' -import { Decay, interpretEncryptedTransferArgs, EncryptedTransferArgs } from 'core' +import { Decay, interpretEncryptedTransferArgs, TransactionTypeId } from 'core' import { AppDatabase, Contribution as DbContribution, ContributionLink as DbContributionLink, @@ -19,13 +20,11 @@ import { DltTransaction as DbDltTransaction, Transaction as DbTransaction, TransactionLink as DbTransactionLink, - TransactionTypeId, User as DbUser, findModeratorCreatingContributionLink, findTransactionLinkByCode, getHomeCommunity } from 'database' -import { ContributionCycleType } from '@/graphql/enum/ContributionCycleType' import { Decimal } from 'decimal.js-light' import { Arg, Args, Authorized, Ctx, Int, Mutation, Query, Resolver } from 'type-graphql' @@ -39,6 +38,7 @@ import { import { LogError } from '@/server/LogError' import { Context, getClientTimezoneOffset, getUser } from '@/server/context' import { calculateBalance } from '@/util/validate' +import { fullName } from 'core' import { TRANSACTION_LINK_LOCK, TRANSACTIONS_LOCK } from 'database' import { calculateDecay, @@ -53,6 +53,7 @@ import { import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const' import { DisbursementClient as V1_0_DisbursementClient } from '@/federation/client/1_0/DisbursementClient' import { DisbursementClientFactory } from '@/federation/client/DisbursementClientFactory' +import { EncryptedTransferArgs } from 'core' import { getLastTransaction } from 'database' import { getLogger, Logger } from 'log4js' import { randombytes_random } from 'sodium-native' @@ -64,7 +65,7 @@ import { } from './util/communities' import { getUserCreation, validateContribution } from './util/creations' import { transactionLinkList } from './util/transactionLinkList' -import { fullName, SignedTransferPayloadType } from 'shared' +import { SignedTransferPayloadType } from 'shared' import { contributionTransaction, deferredTransferTransaction, redeemDeferredTransferTransaction } from '@/apis/dltConnector' import { CODE_VALID_DAYS_DURATION } from './const/const' diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index c82eabf8b..923971743 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -18,9 +18,11 @@ import { Transaction } from '@model/Transaction' import { TransactionList } from '@model/TransactionList' import { User } from '@model/User' import { + fullName, processXComCompleteTransaction, sendTransactionLinkRedeemedEmail, sendTransactionReceivedEmail, + TransactionTypeId } from 'core' import { RIGHTS } from '@/auth/RIGHTS' import { CONFIG } from '@/config' @@ -31,10 +33,10 @@ import { Context, getUser } from '@/server/context' import { communityUser } from '@/util/communityUser' import { calculateBalance } from '@/util/validate' import { virtualDecayTransaction, virtualLinkTransaction } from '@/util/virtualTransactions' -import { fullName } from 'shared' +import { TRANSACTIONS_LOCK } from 'database' import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const' -import { getLastTransaction, TRANSACTIONS_LOCK, TransactionTypeId } from 'database' +import { getLastTransaction } from 'database' import { getLogger, Logger } from 'log4js' import { BalanceResolver } from './BalanceResolver' import { GdtResolver } from './GdtResolver' diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index b64b66370..e19eff8c5 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -67,7 +67,7 @@ import { printTimeDuration } from '@/util/time' import { objectValuesToArray } from 'core' import { LOG4JS_BASE_CATEGORY_NAME } from '@/config/const' -import { clearLogs, getLogger, printLogs } from 'config-schema/test/testSetup' +import { getLogger } from 'config-schema/test/testSetup' import { Location2Point } from './util/Location2Point' jest.mock('@/apis/humhub/HumHubClient') @@ -738,7 +738,7 @@ describe('UserResolver', () => { hasElopage: false, hideAmountGDD: false, hideAmountGDT: false, - humhubAllowed: false, + humhubAllowed: true, humhubPublishName: 'PUBLISH_NAME_ALIAS_OR_INITALS', klickTipp: { newsletterState: false, @@ -1610,7 +1610,7 @@ describe('UserResolver', () => { hasElopage: false, hideAmountGDD: false, hideAmountGDT: false, - humhubAllowed: false, + humhubAllowed: true, humhubPublishName: 'PUBLISH_NAME_ALIAS_OR_INITALS', klickTipp: { newsletterState: false, diff --git a/backend/src/interactions/updateUnconfirmedContribution/AbstractUnconfirmedContribution.role.ts b/backend/src/interactions/updateUnconfirmedContribution/AbstractUnconfirmedContribution.role.ts index c3bed06ab..dd85e3fb6 100644 --- a/backend/src/interactions/updateUnconfirmedContribution/AbstractUnconfirmedContribution.role.ts +++ b/backend/src/interactions/updateUnconfirmedContribution/AbstractUnconfirmedContribution.role.ts @@ -1,10 +1,10 @@ import { Contribution, User } from 'database' import { Decimal } from 'decimal.js-light' -import { ContributionStatus } from '@enum/ContributionStatus' import { Role } from '@/auth/Role' import { ContributionLogic } from '@/data/Contribution.logic' import { ContributionMessageBuilder } from '@/data/ContributionMessage.builder' +import { ContributionStatus } from '@/graphql/enum/ContributionStatus' import { LogError } from '@/server/LogError' import { Context, getClientTimezoneOffset } from '@/server/context' import { Logger, getLogger } from 'log4js' diff --git a/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionAdmin.role.ts b/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionAdmin.role.ts index 368abf461..f160966d3 100644 --- a/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionAdmin.role.ts +++ b/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionAdmin.role.ts @@ -1,10 +1,10 @@ import { Contribution, User } from 'database' -import { ContributionStatus } from '@enum/ContributionStatus' import { RIGHTS } from '@/auth/RIGHTS' import { Role } from '@/auth/Role' import { ContributionMessageBuilder } from '@/data/ContributionMessage.builder' import { AdminUpdateContributionArgs } from '@/graphql/arg/AdminUpdateContributionArgs' +import { ContributionStatus } from '@/graphql/enum/ContributionStatus' import { LogError } from '@/server/LogError' import { AbstractUnconfirmedContributionRole } from './AbstractUnconfirmedContribution.role' diff --git a/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionAdminAddMessage.role.ts b/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionAdminAddMessage.role.ts index 887c2d7ad..dcc10091f 100644 --- a/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionAdminAddMessage.role.ts +++ b/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionAdminAddMessage.role.ts @@ -1,11 +1,11 @@ import { Contribution, User } from 'database' -import { ContributionStatus } from '@enum/ContributionStatus' import { RIGHTS } from '@/auth/RIGHTS' import { Role } from '@/auth/Role' import { ContributionMessageBuilder } from '@/data/ContributionMessage.builder' import { ContributionMessageArgs } from '@/graphql/arg/ContributionMessageArgs' import { ContributionMessageType } from '@/graphql/enum/ContributionMessageType' +import { ContributionStatus } from '@/graphql/enum/ContributionStatus' import { LogError } from '@/server/LogError' import { AbstractUnconfirmedContributionRole } from './AbstractUnconfirmedContribution.role' diff --git a/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionUser.role.ts b/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionUser.role.ts index 8dee35b2c..6955cbfa7 100644 --- a/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionUser.role.ts +++ b/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionUser.role.ts @@ -1,8 +1,8 @@ import { Contribution, User } from 'database' -import { ContributionStatus } from '@enum/ContributionStatus' import { ContributionMessageBuilder } from '@/data/ContributionMessage.builder' import { ContributionArgs } from '@/graphql/arg/ContributionArgs' +import { ContributionStatus } from '@/graphql/enum/ContributionStatus' import { LogError } from '@/server/LogError' import { AbstractUnconfirmedContributionRole } from './AbstractUnconfirmedContribution.role' diff --git a/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionUserAddMessage.role.ts b/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionUserAddMessage.role.ts index 319639f12..0440762f3 100644 --- a/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionUserAddMessage.role.ts +++ b/backend/src/interactions/updateUnconfirmedContribution/UnconfirmedContributionUserAddMessage.role.ts @@ -1,9 +1,9 @@ import { Contribution, User } from 'database' -import { ContributionStatus } from '@enum/ContributionStatus' import { ContributionMessageBuilder } from '@/data/ContributionMessage.builder' import { ContributionMessageArgs } from '@/graphql/arg/ContributionMessageArgs' import { ContributionMessageType } from '@/graphql/enum/ContributionMessageType' +import { ContributionStatus } from '@/graphql/enum/ContributionStatus' import { LogError } from '@/server/LogError' import { AbstractUnconfirmedContributionRole } from './AbstractUnconfirmedContribution.role' diff --git a/backend/src/seeds/community/index.ts b/backend/src/seeds/community/index.ts index 0d3b44d88..d51eafc31 100644 --- a/backend/src/seeds/community/index.ts +++ b/backend/src/seeds/community/index.ts @@ -1,19 +1,27 @@ import { Community as DbCommunity } from 'database' +import { v4 as uuidv4 } from 'uuid' import { CONFIG } from '@/config' - export async function writeHomeCommunityEntry(): Promise { try { // check for existing homeCommunity entry let homeCom = await DbCommunity.findOne({ where: { foreign: false } }) - if (!homeCom) { + if (homeCom) { + // simply update the existing entry, but it MUST keep the ID and UUID because of possible relations + homeCom.publicKey = Buffer.from('public-key-data-seeding') // keyPair.publicKey + // homeCom.privateKey = keyPair.secretKey + homeCom.url = 'http://localhost/api/' + homeCom.name = CONFIG.COMMUNITY_NAME + homeCom.description = CONFIG.COMMUNITY_DESCRIPTION + await DbCommunity.save(homeCom) + } else { // insert a new homecommunity entry including a new ID and a new but ensured unique UUID homeCom = new DbCommunity() homeCom.foreign = false homeCom.publicKey = Buffer.from('public-key-data-seeding') // keyPair.publicKey // homeCom.privateKey = keyPair.secretKey - homeCom.communityUuid = 'beac216d-73ae-427f-9678-0209af4936ce' // await newCommunityUuid() + homeCom.communityUuid = uuidv4() // await newCommunityUuid() homeCom.url = 'http://localhost/api/' homeCom.name = CONFIG.COMMUNITY_NAME homeCom.description = CONFIG.COMMUNITY_DESCRIPTION diff --git a/backend/src/util/virtualTransactions.ts b/backend/src/util/virtualTransactions.ts index c54e265cd..a3bbbe042 100644 --- a/backend/src/util/virtualTransactions.ts +++ b/backend/src/util/virtualTransactions.ts @@ -1,7 +1,8 @@ -import { Transaction as dbTransaction, TransactionTypeId } from 'database' +import { Transaction as dbTransaction } from 'database' import { Decimal } from 'decimal.js-light' import { RemoveOptions, SaveOptions } from 'typeorm' +import { TransactionTypeId } from 'core' import { Transaction } from '@model/Transaction' import { User } from '@model/User' diff --git a/core/src/graphql/enum/TransactionTypeId.ts b/core/src/graphql/enum/TransactionTypeId.ts index 740a93d5b..c6c188c5f 100644 --- a/core/src/graphql/enum/TransactionTypeId.ts +++ b/core/src/graphql/enum/TransactionTypeId.ts @@ -1,5 +1,6 @@ import { registerEnumType } from 'type-graphql' import { TransactionTypeId } from 'database' +export { TransactionTypeId } registerEnumType(TransactionTypeId, { name: 'TransactionTypeId', // this one is mandatory diff --git a/core/src/graphql/logic/processXComSendCoins.ts b/core/src/graphql/logic/processXComSendCoins.ts index 51ddcda73..bdbf24928 100644 --- a/core/src/graphql/logic/processXComSendCoins.ts +++ b/core/src/graphql/logic/processXComSendCoins.ts @@ -10,28 +10,22 @@ import { findUserByIdentifier, getCommunityByUuid, PendingTransactionLoggingView, - UserLoggingView, - TransactionTypeId, + UserLoggingView } from 'database' import { Decimal } from 'decimal.js-light' import { CONFIG as CONFIG_CORE } from '../../config' import { LOG4JS_BASE_CATEGORY_NAME } from '../../config/const' -import { - encryptAndSign, - fullName, - PendingTransactionState, - SendCoinsJwtPayloadType, - SendCoinsResponseJwtPayloadType, - verifyAndDecrypt -} from 'shared' +import { encryptAndSign, PendingTransactionState, SendCoinsJwtPayloadType, SendCoinsResponseJwtPayloadType, verifyAndDecrypt } from 'shared' import { SendCoinsClient as V1_0_SendCoinsClient } from '../../federation/client/1_0/SendCoinsClient' import { SendCoinsResult } from '../../federation/client/1_0/model/SendCoinsResult' import { SendCoinsClientFactory } from '../../federation/client/SendCoinsClientFactory' +import { TransactionTypeId } from '../../graphql/enum/TransactionTypeId' // import { LogError } from '@server/LogError' import { getLogger } from 'log4js' import { calculateSenderBalance } from '../../util/calculateSenderBalance' +import { fullName } from '../../util/utilities' import { randombytes_random } from 'sodium-native' import { SendCoinsResultLoggingView } from '../../federation/client/1_0/logging/SendCoinsResultLogging.view' diff --git a/core/src/util/utilities.ts b/core/src/util/utilities.ts index 09fd2f343..cfec3d37a 100644 --- a/core/src/util/utilities.ts +++ b/core/src/util/utilities.ts @@ -2,6 +2,7 @@ import { promisify } from 'util' import { Decimal } from 'decimal.js-light' import { i18n } from '../locales/localization' +export { fullName } from 'shared' export const objectValuesToArray = (obj: Record): string[] => Object.keys(obj).map((key) => obj[key]) @@ -15,7 +16,6 @@ export const decimalSeparatorByLanguage = (a: Decimal, language: string): string } // Function to reset an interface by chatGPT - export function resetInterface>(obj: T): T { // Iterate over all properties of the object for (const key in obj) { diff --git a/database/migration/clear.ts b/database/migration/clear.ts index 9c2f5b364..a78d35890 100644 --- a/database/migration/clear.ts +++ b/database/migration/clear.ts @@ -4,8 +4,6 @@ import { connectToDatabaseServer } from './prepare' import { MIGRATIONS_TABLE } from '../src/config/const' export async function truncateTables(connection: Connection) { - const databaseName = CONFIG.DB_DATABASE - await connection.query(`USE \`${databaseName}\``) const [tables] = await connection.query('SHOW TABLES') const tableNames = (tables as any[]).map((table) => Object.values(table)[0]) diff --git a/database/package.json b/database/package.json index ada327ba9..03ba57869 100644 --- a/database/package.json +++ b/database/package.json @@ -25,7 +25,6 @@ "up": "cross-env TZ=UTC tsx migration/index.ts up", "down": "cross-env TZ=UTC tsx migration/index.ts down", "reset": "cross-env TZ=UTC tsx migration/index.ts reset", - "seed": "cross-env TZ=UTC NODE_ENV=development bun src/seeds/seed.ts", "up:test": "cross-env TZ=UTC DB_DATABASE=gradido_test tsx migration/index.ts up", "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend tsx migration/index.ts up", "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation tsx migration/index.ts up", diff --git a/database/src/seeds/factory/user.ts b/database/src/seeds/factory/user.ts index 009c007df..4d16c009e 100644 --- a/database/src/seeds/factory/user.ts +++ b/database/src/seeds/factory/user.ts @@ -82,6 +82,7 @@ export async function createUser(user: UserInterface, homeCommunity?: Community dbUser.createdAt = user.createdAt ?? new Date() dbUser.deletedAt = user.deletedAt ?? null dbUser.publisherId = user.publisherId ?? 0 + dbUser.humhubAllowed = true dbUser.gradidoID = v4() if (user.emailChecked) {