refactor: remove session entity (#17466)

* refactor: remove session entity

* fix: test

* update sql

* remote export
This commit is contained in:
Alex 2025-04-08 11:04:07 -05:00 committed by GitHub
parent 49be6d7fd8
commit e5ca79dd44
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 35 additions and 68 deletions

View File

@ -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<DB, 'sessions'>) => {
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');
};

View File

@ -45,20 +45,21 @@ from
inner join lateral ( inner join lateral (
select select
"id", "id",
"email",
"createdAt",
"profileImagePath",
"isAdmin",
"shouldChangePassword",
"deletedAt",
"oauthId",
"updatedAt",
"storageLabel",
"name", "name",
"email",
"profileImagePath",
"profileChangedAt",
"createdAt",
"updatedAt",
"deletedAt",
"isAdmin",
"status",
"oauthId",
"profileImagePath",
"shouldChangePassword",
"storageLabel",
"quotaSizeInBytes", "quotaSizeInBytes",
"quotaUsageInBytes", "quotaUsageInBytes",
"status",
"profileChangedAt",
( (
select select
array_agg("user_metadata") as "metadata" array_agg("user_metadata") as "metadata"

View File

@ -1,15 +1,30 @@
import { Injectable } from '@nestjs/common'; 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 { jsonObjectFrom } from 'kysely/helpers/postgres';
import { InjectKysely } from 'nestjs-kysely'; import { InjectKysely } from 'nestjs-kysely';
import { columns } from 'src/database'; import { columns } from 'src/database';
import { DB, Sessions } from 'src/db'; import { DB, Sessions } from 'src/db';
import { DummyValue, GenerateSql } from 'src/decorators'; import { DummyValue, GenerateSql } from 'src/decorators';
import { withUser } from 'src/entities/session.entity';
import { asUuid } from 'src/utils/database'; import { asUuid } from 'src/utils/database';
export type SessionSearchOptions = { updatedBefore: Date }; export type SessionSearchOptions = { updatedBefore: Date };
const withUser = (eb: ExpressionBuilder<DB, 'sessions'>) => {
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() @Injectable()
export class SessionRepository { export class SessionRepository {
constructor(@InjectKysely() private db: Kysely<DB>) {} constructor(@InjectKysely() private db: Kysely<DB>) {}

View File

@ -1,6 +1,6 @@
import { AuthDto } from 'src/dtos/auth.dto'; import { AuthDto } from 'src/dtos/auth.dto';
import { SessionEntity } from 'src/entities/session.entity';
import { SharedLinkEntity } from 'src/entities/shared-link.entity'; import { SharedLinkEntity } from 'src/entities/shared-link.entity';
import { SessionItem } from 'src/types';
const authUser = { const authUser = {
admin: { admin: {
@ -27,7 +27,7 @@ export const authStub = {
user: authUser.user1, user: authUser.user1,
session: { session: {
id: 'token-id', id: 'token-id',
} as SessionEntity, } as SessionItem,
}), }),
user2: Object.freeze<AuthDto>({ user2: Object.freeze<AuthDto>({
user: { user: {
@ -40,7 +40,7 @@ export const authStub = {
}, },
session: { session: {
id: 'token-id', id: 'token-id',
} as SessionEntity, } as SessionItem,
}), }),
adminSharedLink: Object.freeze<AuthDto>({ adminSharedLink: Object.freeze<AuthDto>({
user: authUser.admin, user: authUser.admin,

View File

@ -1,8 +1,8 @@
import { SessionEntity } from 'src/entities/session.entity'; import { SessionItem } from 'src/types';
import { userStub } from 'test/fixtures/user.stub'; import { userStub } from 'test/fixtures/user.stub';
export const sessionStub = { export const sessionStub = {
valid: Object.freeze<SessionEntity>({ valid: Object.freeze<SessionItem>({
id: 'token-id', id: 'token-id',
token: 'auth_token', token: 'auth_token',
userId: userStub.user1.id, userId: userStub.user1.id,
@ -13,7 +13,7 @@ export const sessionStub = {
deviceOS: '', deviceOS: '',
updateId: 'uuid-v7', updateId: 'uuid-v7',
}), }),
inactive: Object.freeze<SessionEntity>({ inactive: Object.freeze<SessionItem>({
id: 'not_active', id: 'not_active',
token: 'auth_token', token: 'auth_token',
userId: userStub.user1.id, userId: userStub.user1.id,