diff --git a/server/src/entities/session.entity.ts b/server/src/entities/session.entity.ts deleted file mode 100644 index 45856ff2af..0000000000 --- a/server/src/entities/session.entity.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { ExpressionBuilder } from 'kysely'; -import { DB } from 'src/db'; -import { UserEntity } from 'src/entities/user.entity'; - -export class SessionEntity { - id!: string; - token!: string; - userId!: string; - user!: UserEntity; - createdAt!: Date; - updatedAt!: Date; - updateId!: string; - deviceType!: string; - deviceOS!: string; -} - -const userColumns = [ - 'id', - 'email', - 'createdAt', - 'profileImagePath', - 'isAdmin', - 'shouldChangePassword', - 'deletedAt', - 'oauthId', - 'updatedAt', - 'storageLabel', - 'name', - 'quotaSizeInBytes', - 'quotaUsageInBytes', - 'status', - 'profileChangedAt', -] as const; - -export const withUser = (eb: ExpressionBuilder) => { - return eb - .selectFrom('users') - .select(userColumns) - .select((eb) => - eb - .selectFrom('user_metadata') - .whereRef('users.id', '=', 'user_metadata.userId') - .select((eb) => eb.fn('array_agg', [eb.table('user_metadata')]).as('metadata')) - .as('metadata'), - ) - .whereRef('users.id', '=', 'sessions.userId') - .where('users.deletedAt', 'is', null) - .as('user'); -}; diff --git a/server/src/queries/session.repository.sql b/server/src/queries/session.repository.sql index 3d115615fd..fee3bcbd9d 100644 --- a/server/src/queries/session.repository.sql +++ b/server/src/queries/session.repository.sql @@ -45,20 +45,21 @@ from inner join lateral ( select "id", - "email", - "createdAt", - "profileImagePath", - "isAdmin", - "shouldChangePassword", - "deletedAt", - "oauthId", - "updatedAt", - "storageLabel", "name", + "email", + "profileImagePath", + "profileChangedAt", + "createdAt", + "updatedAt", + "deletedAt", + "isAdmin", + "status", + "oauthId", + "profileImagePath", + "shouldChangePassword", + "storageLabel", "quotaSizeInBytes", "quotaUsageInBytes", - "status", - "profileChangedAt", ( select array_agg("user_metadata") as "metadata" diff --git a/server/src/repositories/session.repository.ts b/server/src/repositories/session.repository.ts index 85ea5f890e..390e732c6b 100644 --- a/server/src/repositories/session.repository.ts +++ b/server/src/repositories/session.repository.ts @@ -1,15 +1,30 @@ import { Injectable } from '@nestjs/common'; -import { Insertable, Kysely, Updateable } from 'kysely'; +import { ExpressionBuilder, Insertable, Kysely, Updateable } from 'kysely'; import { jsonObjectFrom } from 'kysely/helpers/postgres'; import { InjectKysely } from 'nestjs-kysely'; import { columns } from 'src/database'; import { DB, Sessions } from 'src/db'; import { DummyValue, GenerateSql } from 'src/decorators'; -import { withUser } from 'src/entities/session.entity'; import { asUuid } from 'src/utils/database'; export type SessionSearchOptions = { updatedBefore: Date }; +const withUser = (eb: ExpressionBuilder) => { + return eb + .selectFrom('users') + .select(columns.userAdmin) + .select((eb) => + eb + .selectFrom('user_metadata') + .whereRef('users.id', '=', 'user_metadata.userId') + .select((eb) => eb.fn('array_agg', [eb.table('user_metadata')]).as('metadata')) + .as('metadata'), + ) + .whereRef('users.id', '=', 'sessions.userId') + .where('users.deletedAt', 'is', null) + .as('user'); +}; + @Injectable() export class SessionRepository { constructor(@InjectKysely() private db: Kysely) {} diff --git a/server/test/fixtures/auth.stub.ts b/server/test/fixtures/auth.stub.ts index f894314258..4201334b41 100644 --- a/server/test/fixtures/auth.stub.ts +++ b/server/test/fixtures/auth.stub.ts @@ -1,6 +1,6 @@ import { AuthDto } from 'src/dtos/auth.dto'; -import { SessionEntity } from 'src/entities/session.entity'; import { SharedLinkEntity } from 'src/entities/shared-link.entity'; +import { SessionItem } from 'src/types'; const authUser = { admin: { @@ -27,7 +27,7 @@ export const authStub = { user: authUser.user1, session: { id: 'token-id', - } as SessionEntity, + } as SessionItem, }), user2: Object.freeze({ user: { @@ -40,7 +40,7 @@ export const authStub = { }, session: { id: 'token-id', - } as SessionEntity, + } as SessionItem, }), adminSharedLink: Object.freeze({ user: authUser.admin, diff --git a/server/test/fixtures/session.stub.ts b/server/test/fixtures/session.stub.ts index af06237473..93eac28c57 100644 --- a/server/test/fixtures/session.stub.ts +++ b/server/test/fixtures/session.stub.ts @@ -1,8 +1,8 @@ -import { SessionEntity } from 'src/entities/session.entity'; +import { SessionItem } from 'src/types'; import { userStub } from 'test/fixtures/user.stub'; export const sessionStub = { - valid: Object.freeze({ + valid: Object.freeze({ id: 'token-id', token: 'auth_token', userId: userStub.user1.id, @@ -13,7 +13,7 @@ export const sessionStub = { deviceOS: '', updateId: 'uuid-v7', }), - inactive: Object.freeze({ + inactive: Object.freeze({ id: 'not_active', token: 'auth_token', userId: userStub.user1.id,