diff --git a/backend/.gitignore b/backend/.gitignore index 7749bac53..90ee96052 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,7 +1,7 @@ /node_modules/ /.env /build/ - +package-json.lock coverage # emacs *~ \ No newline at end of file diff --git a/backend/src/graphql/models/User.ts b/backend/src/graphql/models/User.ts index 622eef38e..21bf1b464 100644 --- a/backend/src/graphql/models/User.ts +++ b/backend/src/graphql/models/User.ts @@ -69,6 +69,9 @@ export class User { @Field(() => Number) publisherId: number + @Field(() => Boolean) + coinanimation: boolean + @Field(() => KlickTipp) klickTipp: KlickTipp } diff --git a/backend/src/graphql/resolvers/UserResolver.ts b/backend/src/graphql/resolvers/UserResolver.ts index 4f7d6d133..039500719 100644 --- a/backend/src/graphql/resolvers/UserResolver.ts +++ b/backend/src/graphql/resolvers/UserResolver.ts @@ -43,8 +43,15 @@ export class UserResolver { key: 'token', value: encode(result.data.session_id, result.data.user.public_hex), }) - - return new User(result.data.user) + const user = new User(result.data.user) + // read additional settings from settings table + const userSettingRepository = getCustomRepository(UserSettingRepository) + const userEntity = await dbUser.findByPubkeyHex(user.pubkey) + const coinanimation = await userSettingRepository.readBoolean(userEntity.id, Setting.COIN_ANIMATION).catch((error) => { + throw new Error(error) + }) + user.coinanimation = coinanimation + return user } @Query(() => LoginViaVerificationCode) @@ -133,7 +140,6 @@ export class UserResolver { async updateUserInfos( @Args() { - email, firstName, lastName, description, @@ -148,7 +154,6 @@ export class UserResolver { ): Promise { const payload = { session_id: context.sessionId, - email, update: { 'User.first_name': firstName || undefined, 'User.last_name': lastName || undefined, @@ -190,7 +195,9 @@ export class UserResolver { userEntity.id, Setting.COIN_ANIMATION, coinanimation.toString(), - ) + ).catch((error) => { + throw new Error(error) + }) if (!response) { response = new UpdateUserInfosResponse({ valid_values: 1 }) diff --git a/backend/src/typeorm/entity/UserSetting.ts b/backend/src/typeorm/entity/UserSetting.ts index 02d2236c2..79c10b4c8 100644 --- a/backend/src/typeorm/entity/UserSetting.ts +++ b/backend/src/typeorm/entity/UserSetting.ts @@ -2,7 +2,7 @@ import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 't import { User } from './User' @Entity() -export class UserSetting extends BaseEntity { +export class UserSetting { //extends BaseEntity { @PrimaryGeneratedColumn() id: number diff --git a/backend/src/typeorm/repository/UserSettingRepository.ts b/backend/src/typeorm/repository/UserSettingRepository.ts index 1783ee55a..f4d4ea849 100644 --- a/backend/src/typeorm/repository/UserSettingRepository.ts +++ b/backend/src/typeorm/repository/UserSettingRepository.ts @@ -3,8 +3,9 @@ import { UserSetting } from '../entity/UserSetting' import { Setting } from '../../types' import { isStringBoolean } from '../../util/validate' -@EntityRepository() +@EntityRepository(UserSetting) export class UserSettingRepository extends Repository { + async setOrUpdate(userId: number, key: Setting, value: string): Promise { switch (key) { case Setting.COIN_ANIMATION: @@ -23,4 +24,12 @@ export class UserSettingRepository extends Repository { entity.value = value return this.save(entity) } + + async readBoolean(userId: number, key: Setting): Promise { + let entity = await this.findOne({ userId: userId, key: key }) + if(!entity || !isStringBoolean(entity.value)) { + return false + } + return entity.value.toLowerCase() === 'true' + } } diff --git a/database/migrations/0002-add_settings.ts b/database/migrations/0002-add_settings.ts index 28acd1206..ecf4b47a8 100644 --- a/database/migrations/0002-add_settings.ts +++ b/database/migrations/0002-add_settings.ts @@ -12,7 +12,7 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { await queryFn(` - CREATE TABLE IF NOT EXISTS \`userSetting\` ( + CREATE TABLE IF NOT EXISTS \`user_setting\` ( \`id\` int(10) unsigned NOT NULL AUTO_INCREMENT, \`userId\` int(11) NOT NULL, \`key\` varchar(255) NOT NULL, @@ -23,6 +23,6 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { // write downgrade logic as parameter of queryFn - await queryFn(`DROP TABLE IF EXISTS \`userSettings\`;`) + await queryFn(`DROP TABLE IF EXISTS \`user_setting\`;`) } \ No newline at end of file diff --git a/frontend/src/graphql/mutations.js b/frontend/src/graphql/mutations.js index 939d5babe..d5e9c4228 100644 --- a/frontend/src/graphql/mutations.js +++ b/frontend/src/graphql/mutations.js @@ -20,7 +20,6 @@ export const resetPassword = gql` export const updateUserInfos = gql` mutation( - $email: String! $firstName: String $lastName: String $description: String @@ -28,9 +27,9 @@ export const updateUserInfos = gql` $password: String $passwordNew: String $locale: String + $coinanimation: Boolean ) { updateUserInfos( - email: $email firstName: $firstName lastName: $lastName description: $description @@ -38,6 +37,7 @@ export const updateUserInfos = gql` password: $password passwordNew: $passwordNew language: $locale + coinanimation: $coinanimation ) { validValues } diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index c11abee50..fe1c58e1b 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -9,6 +9,7 @@ export const login = gql` lastName language description + coinanimation klickTipp { newsletterState } diff --git a/frontend/src/views/Pages/UserProfile/UserCard_CoinAnimation.vue b/frontend/src/views/Pages/UserProfile/UserCard_CoinAnimation.vue index 3f76a12f9..e5322a89f 100644 --- a/frontend/src/views/Pages/UserProfile/UserCard_CoinAnimation.vue +++ b/frontend/src/views/Pages/UserProfile/UserCard_CoinAnimation.vue @@ -17,6 +17,7 @@ v-model="CoinAnimationStatus" name="check-button" switch + @change="onSubmit" > {{ CoinAnimationStatus @@ -30,7 +31,7 @@