diff --git a/api/src/auth/auth.resolver.ts b/api/src/auth/auth.resolver.ts
index 27c2694fc1d1a07873d3e18a5927ce2bc5359f0e..bca4f7f9921f5cb30241f8ee5c2042fcd043ad7d 100644
--- a/api/src/auth/auth.resolver.ts
+++ b/api/src/auth/auth.resolver.ts
@@ -92,9 +92,9 @@ export class AuthResolver {
if (user) {
this.logger.verbose(`${user.username} logged out`);
try {
- if (this.engineService.has('logout')) {
+ if (this.engineService.has('logout'))
await this.engineService.logout(req);
- }
+
this.authService.logout(user);
} catch (e) {
this.logger.warn(
diff --git a/api/src/auth/auth.service.ts b/api/src/auth/auth.service.ts
index fd2110714baf44e5f64f12dfd059039b2f6dfa15..343f0efb7a59f007303db5ae8a00856422d7ab61 100644
--- a/api/src/auth/auth.service.ts
+++ b/api/src/auth/auth.service.ts
@@ -55,7 +55,7 @@ export class AuthService {
const hashRefresh = await this.getHash(refreshToken);
- this.usersService.update(user.id, {
+ this.usersService.save(user.id, {
refreshToken: hashRefresh,
});
@@ -71,8 +71,8 @@ export class AuthService {
*/
async logout(user: User): Promise<void> {
try {
- if (user.id)
- await this.usersService.update(user.id, { refreshToken: null });
+ if (!user || !user.id) return;
+ await this.usersService.update(user.id, { refreshToken: null });
} catch (err) {
//user not found or others errors
AuthService.logger.debug('Error while logging out user', err);
diff --git a/api/src/users/users.service.spec.ts b/api/src/users/users.service.spec.ts
index 47fa24b93094f81116aa6d5657b322dc16b15db2..b4227b2ee91f346552b29bbf08d130f8fc54f283 100644
--- a/api/src/users/users.service.spec.ts
+++ b/api/src/users/users.service.spec.ts
@@ -65,12 +65,12 @@ describe('UsersService', () => {
});
});
- describe('updateUser', () => {
- it('should return an updated user', async () => {
+ describe('saveUser', () => {
+ it('should return an user', async () => {
const expectedUser = { ...user, ...updateData };
usersRepository.save.mockResolvedValue(expectedUser);
- const result = await service.update('idThatExist', updateData);
+ const result = await service.save('idThatExist', updateData);
expect(result).toStrictEqual(expectedUser);
});
diff --git a/api/src/users/users.service.ts b/api/src/users/users.service.ts
index 773a77019e755044f1de87f4daba20d6939d4b22..271725157aa9ada6aae49d318d3100954d0e1d16 100644
--- a/api/src/users/users.service.ts
+++ b/api/src/users/users.service.ts
@@ -1,6 +1,6 @@
import { Injectable, Logger, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
-import { Repository } from 'typeorm';
+import { Repository, UpdateResult } from 'typeorm';
import { UpdateUserInput } from './inputs/update-user.input';
import { User } from './models/user.model';
@@ -37,7 +37,18 @@ export class UsersService {
* @param {UserDataUpdate} data - update params
* @returns The updated user.
*/
- async update(id: string, data: UserDataUpdate): Promise<InternalUser> {
+ async update(id: string, data: UserDataUpdate): Promise<UpdateResult> {
+ return this.userRepository.update({ id }, data);
+ }
+
+ /**
+ * Saves user in the database.
+ * If user does not exist in the database then inserts, otherwise updates.
+ * @param {string} id - The id of the user to update.
+ * @param {UserDataUpdate} data - update params
+ * @returns The updated user.
+ */
+ async save(id: string, data: UserDataUpdate): Promise<InternalUser> {
const updateData = {
id,
...data,