diff --git a/backend/log4js-config.json b/backend/log4js-config.json index 1c4b3fb6d..451da56ab 100644 --- a/backend/log4js-config.json +++ b/backend/log4js-config.json @@ -13,6 +13,14 @@ { "type": "dateFile", "filename": "../logs/backend/apollo.log", + "pattern": "%d{ISO8601} %p %c %m", + "keepFileExt" : true, + "fileNameSep" : "_" + }, + "backend": + { + "type": "dateFile", + "filename": "../logs/backend/backend.log", "pattern": "%d{ISO8601} %p %c %X{user} %f:%l %m", "keepFileExt" : true, "fileNameSep" : "_" @@ -31,24 +39,52 @@ "level": "error", "appender": "errorFile" }, - "out": + "out": { "type": "stdout", "layout": { "type": "pattern", "pattern": "%d{ISO8601} %p %c %X{user} %f:%l %m" } - - } + }, + "apolloOut": + { + "type": "stdout", + "layout": + { + "type": "pattern", "pattern": "%d{ISO8601} %p %c %m" + } + } }, - "categories": + "categories": { "default": { "appenders": [ "out", + "errors" + ], + "level": "debug", + "enableCallStack": true + }, + "apollo": + { + "appenders": + [ "apollo", + "apolloOut", + "errors" + ], + "level": "debug", + "enableCallStack": true + }, + "backend": + { + "appenders": + [ + "backend", + "out", "errors" ], "level": "debug", diff --git a/backend/src/graphql/arg/UpdateUserInfosArgs.ts b/backend/src/graphql/arg/UpdateUserInfosArgs.ts index d1e95ebef..81c07a329 100644 --- a/backend/src/graphql/arg/UpdateUserInfosArgs.ts +++ b/backend/src/graphql/arg/UpdateUserInfosArgs.ts @@ -19,7 +19,4 @@ export default class UpdateUserInfosArgs { @Field({ nullable: true }) passwordNew?: string - - @Field({ nullable: true }) - coinanimation?: boolean } diff --git a/backend/src/graphql/enum/Setting.ts b/backend/src/graphql/enum/Setting.ts deleted file mode 100644 index 8efeec72d..000000000 --- a/backend/src/graphql/enum/Setting.ts +++ /dev/null @@ -1,5 +0,0 @@ -enum Setting { - COIN_ANIMATION = 'coinanimation', -} - -export { Setting } diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index 4f577f60a..86c56312f 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -15,8 +15,6 @@ export class User { this.language = user.language this.publisherId = user.publisherId this.isAdmin = user.isAdmin - // TODO - this.coinanimation = null this.klickTipp = null this.hasElopage = null } @@ -61,11 +59,6 @@ export class User { @Field(() => Date, { nullable: true }) isAdmin: Date | null - // TODO this is a bit inconsistent with what we query from the database - // therefore all those fields are now nullable with default value null - @Field(() => Boolean, { nullable: true }) - coinanimation: boolean | null - @Field(() => KlickTipp, { nullable: true }) klickTipp: KlickTipp | null diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 1afce832b..78b630834 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -344,7 +344,6 @@ describe('UserResolver', () => { expect.objectContaining({ data: { login: { - coinanimation: true, email: 'bibi@bloxberg.de', firstName: 'Bibi', hasElopage: false, @@ -479,7 +478,6 @@ describe('UserResolver', () => { firstName: 'Bibi', lastName: 'Bloxberg', language: 'de', - coinanimation: true, klickTipp: { newsletterState: false, }, diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 7080ad68b..9b42d76b5 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -3,7 +3,7 @@ import { backendLogger as logger } from '@/server/logger' import { Context, getUser } from '@/server/context' import { Resolver, Query, Args, Arg, Authorized, Ctx, UseMiddleware, Mutation } from 'type-graphql' -import { getConnection, getCustomRepository } from '@dbTools/typeorm' +import { getConnection } from '@dbTools/typeorm' import CONFIG from '@/config' import { User } from '@model/User' import { User as DbUser } from '@entity/User' @@ -13,8 +13,6 @@ import CreateUserArgs from '@arg/CreateUserArgs' import UnsecureLoginArgs from '@arg/UnsecureLoginArgs' import UpdateUserInfosArgs from '@arg/UpdateUserInfosArgs' import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware' -import { UserSettingRepository } from '@repository/UserSettingRepository' -import { Setting } from '@enum/Setting' import { OptInType } from '@enum/OptInType' import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' import { sendResetPasswordEmail as sendResetPasswordEmailMailer } from '@/mailer/sendResetPasswordEmail' @@ -228,15 +226,6 @@ export class UserResolver { // Elopage Status & Stored PublisherId user.hasElopage = await this.hasElopage(context) - // coinAnimation - const userSettingRepository = getCustomRepository(UserSettingRepository) - const coinanimation = await userSettingRepository - .readBoolean(userEntity.id, Setting.COIN_ANIMATION) - .catch((error) => { - logger.error('error:', error) - throw new Error(error) - }) - user.coinanimation = coinanimation logger.debug(`verifyLogin... successful: ${user.firstName}.${user.lastName}, ${user.email}`) return user } @@ -294,15 +283,6 @@ export class UserResolver { DbUser.save(dbUser) } - // coinAnimation - const userSettingRepository = getCustomRepository(UserSettingRepository) - const coinanimation = await userSettingRepository - .readBoolean(dbUser.id, Setting.COIN_ANIMATION) - .catch((error) => { - throw new Error(error) - }) - user.coinanimation = coinanimation - context.setHeaders.push({ key: 'token', value: encode(dbUser.pubKey), @@ -598,12 +578,10 @@ export class UserResolver { @Mutation(() => Boolean) async updateUserInfos( @Args() - { firstName, lastName, language, password, passwordNew, coinanimation }: UpdateUserInfosArgs, + { firstName, lastName, language, password, passwordNew }: UpdateUserInfosArgs, @Ctx() context: Context, ): Promise { - logger.info( - `updateUserInfos(${firstName}, ${lastName}, ${language}, ***, ***, ${coinanimation})...`, - ) + logger.info(`updateUserInfos(${firstName}, ${lastName}, ${language}, ***, ***)...`) const userEntity = getUser(context) if (firstName) { @@ -655,15 +633,6 @@ export class UserResolver { await queryRunner.startTransaction('READ UNCOMMITTED') try { - if (coinanimation !== null && coinanimation !== undefined) { - queryRunner.manager - .getCustomRepository(UserSettingRepository) - .setOrUpdate(userEntity.id, Setting.COIN_ANIMATION, coinanimation.toString()) - .catch((error) => { - throw new Error('error saving coinanimation: ' + error) - }) - } - await queryRunner.manager.save(userEntity).catch((error) => { throw new Error('error saving user: ' + error) }) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index 4598cbbe2..6e1fe9174 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -31,7 +31,6 @@ export const updateUserInfos = gql` $password: String $passwordNew: String $locale: String - $coinanimation: Boolean ) { updateUserInfos( firstName: $firstName @@ -39,7 +38,6 @@ export const updateUserInfos = gql` password: $password passwordNew: $passwordNew language: $locale - coinanimation: $coinanimation ) } ` diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts index 82067c968..16b2b71ae 100644 --- a/backend/src/seeds/graphql/queries.ts +++ b/backend/src/seeds/graphql/queries.ts @@ -8,7 +8,6 @@ export const login = gql` firstName lastName language - coinanimation klickTipp { newsletterState } @@ -26,7 +25,6 @@ export const verifyLogin = gql` firstName lastName language - coinanimation klickTipp { newsletterState } diff --git a/backend/src/server/logger.ts b/backend/src/server/logger.ts index 939d7eaba..27d0cf75b 100644 --- a/backend/src/server/logger.ts +++ b/backend/src/server/logger.ts @@ -12,7 +12,6 @@ log4js.configure(options) const apolloLogger = log4js.getLogger('apollo') const backendLogger = log4js.getLogger('backend') -apolloLogger.addContext('user', 'unknown') backendLogger.addContext('user', 'unknown') export { apolloLogger, backendLogger } diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts index f3067d44a..134ca1bb9 100644 --- a/backend/src/server/plugins.ts +++ b/backend/src/server/plugins.ts @@ -32,16 +32,16 @@ const logPlugin = { requestDidStart(requestContext: any) { const { logger } = requestContext const { query, mutation, variables } = requestContext.request - logger.trace(`Request: + logger.info(`Request: ${mutation || query}variables: ${JSON.stringify(filterVariables(variables), null, 2)}`) return { willSendResponse(requestContext: any) { - if (requestContext.context.user) logger.trace(`User ID: ${requestContext.context.user.id}`) + if (requestContext.context.user) logger.info(`User ID: ${requestContext.context.user.id}`) if (requestContext.response.data) - logger.trace(`Response-Data: + logger.info(`Response-Data: ${JSON.stringify(requestContext.response.data, null, 2)}`) if (requestContext.response.errors) - logger.trace(`Response-Errors: + logger.error(`Response-Errors: ${JSON.stringify(requestContext.response.errors, null, 2)}`) return requestContext }, diff --git a/backend/src/typeorm/repository/UserSettingRepository.ts b/backend/src/typeorm/repository/UserSettingRepository.ts index 528090ff2..f911cfd1a 100644 --- a/backend/src/typeorm/repository/UserSettingRepository.ts +++ b/backend/src/typeorm/repository/UserSettingRepository.ts @@ -1,33 +1,22 @@ import { EntityRepository, Repository } from '@dbTools/typeorm' import { UserSetting } from '@entity/UserSetting' -import { Setting } from '@enum/Setting' import { isStringBoolean } from '@/util/validate' @EntityRepository(UserSetting) export class UserSettingRepository extends Repository { - async setOrUpdate(userId: number, key: Setting, value: string): Promise { - switch (key) { - case Setting.COIN_ANIMATION: - if (!isStringBoolean(value)) { - throw new Error("coinanimation value isn't boolean") - } - break - default: - throw new Error("key isn't defined: " + key) - } - let entity = await this.findOne({ userId: userId, key: key }) + async setOrUpdate(userId: number, value: string): Promise { + let entity = await this.findOne({ userId: userId }) if (!entity) { entity = new UserSetting() entity.userId = userId - entity.key = key } entity.value = value return this.save(entity) } - async readBoolean(userId: number, key: Setting): Promise { - const entity = await this.findOne({ userId: userId, key: key }) + async readBoolean(userId: number): Promise { + const entity = await this.findOne({ userId: userId }) if (!entity || !isStringBoolean(entity.value)) { return true } diff --git a/docu/Concepts/BusinessRequirements/graphics/Creation_Flowchart.drawio b/docu/Concepts/BusinessRequirements/graphics/Creation_Flowchart.drawio new file mode 100644 index 000000000..4c401e10e --- /dev/null +++ b/docu/Concepts/BusinessRequirements/graphics/Creation_Flowchart.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docu/Concepts/BusinessRequirements/image/Creation_flowchart.drawio.png b/docu/Concepts/BusinessRequirements/image/Creation_flowchart.drawio.png new file mode 100644 index 000000000..1e5b21d75 Binary files /dev/null and b/docu/Concepts/BusinessRequirements/image/Creation_flowchart.drawio.png differ diff --git a/frontend/public/img/template/Foto_01_2400_small.jpg b/frontend/public/img/template/Foto_01_2400_small.jpg index 90b24d99a..834ec73df 100644 Binary files a/frontend/public/img/template/Foto_01_2400_small.jpg and b/frontend/public/img/template/Foto_01_2400_small.jpg differ diff --git a/frontend/public/img/template/Foto_02_2400_small.jpg b/frontend/public/img/template/Foto_02_2400_small.jpg index 48489347f..fc66d9bed 100644 Binary files a/frontend/public/img/template/Foto_02_2400_small.jpg and b/frontend/public/img/template/Foto_02_2400_small.jpg differ diff --git a/frontend/public/img/template/Foto_03_2400_small.jpg b/frontend/public/img/template/Foto_03_2400_small.jpg index b6f6829c7..d81b4c3f4 100644 Binary files a/frontend/public/img/template/Foto_03_2400_small.jpg and b/frontend/public/img/template/Foto_03_2400_small.jpg differ diff --git a/frontend/public/img/template/Foto_04_2400_small.jpg b/frontend/public/img/template/Foto_04_2400_small.jpg deleted file mode 100644 index 958824ddc..000000000 Binary files a/frontend/public/img/template/Foto_04_2400_small.jpg and /dev/null differ diff --git a/frontend/src/assets/scss/gradido-template.scss b/frontend/src/assets/scss/gradido-template.scss index e932774c0..09c8588e9 100644 --- a/frontend/src/assets/scss/gradido-template.scss +++ b/frontend/src/assets/scss/gradido-template.scss @@ -17,10 +17,17 @@ body { /* Navbar */ a, -.navbar-light .navbar-nav .nav-link { +.navbar-light, +.navbar-nav, +.nav-link { color: #047006; } +a:hover, +.nav-link:hover { + color: #383838 !important; +} + .navbar-light .navbar-nav .nav-link.active { color: rgb(35 121 188 / 90%); } @@ -36,13 +43,11 @@ a, /* Button */ .btn { border-radius: 25px; - padding-right: 50px; - padding-left: 50px; } .btn-gradido { display: inline-block; - padding: 1em 3em; + padding: 0.6em 3em; letter-spacing: 0.05em; color: #fff; transition: all 0.5s ease; @@ -50,6 +55,9 @@ a, background: linear-gradient(135deg, rgb(249 205 105 / 100%) 2%, rgb(197 141 56 / 100%) 55%); box-shadow: rgb(0 0 0 / 40%) 0 30px 90px; border-radius: 26px; + padding-right: 50px; + padding-left: 50px; + border-style: none; } .btn-gradido:hover { @@ -62,7 +70,7 @@ a, } .btn-gradido-disable { - padding: 1em 3em; + padding: 0.6em 3em; letter-spacing: 0.05em; color: #fff; transition: all 0.5s ease; @@ -70,6 +78,9 @@ a, background: linear-gradient(135deg, rgb(180 180 180 / 100%) 46%, rgb(180 180 180 / 100%) 99%); box-shadow: rgb(0 0 0 / 40%) 0 30px 90px; border-radius: 26px; + padding-right: 50px; + padding-left: 50px; + border-style: none; } .btn-gradido-disable:hover { diff --git a/frontend/src/components/Auth/AuthCarousel.vue b/frontend/src/components/Auth/AuthCarousel.vue index d46352c59..db3037828 100644 --- a/frontend/src/components/Auth/AuthCarousel.vue +++ b/frontend/src/components/Auth/AuthCarousel.vue @@ -1,10 +1,9 @@ @@ -25,5 +24,10 @@ export default { .carousel-inner { height: 100%; border-radius: 0% 49% 49% 0% / 0% 51% 49% 0%; + -webkit-border-radius: 0% 49% 49% 0% / 0% 51% 49% 0%; + backface-visibility: hidden; + -webkit-backface-visibility: hidden; + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); } diff --git a/frontend/src/components/Auth/AuthFooter.vue b/frontend/src/components/Auth/AuthFooter.vue index 02268f4f6..dae1218d8 100644 --- a/frontend/src/components/Auth/AuthFooter.vue +++ b/frontend/src/components/Auth/AuthFooter.vue @@ -1,5 +1,5 @@