refactor: remove session entity (#17466)

* refactor: remove session entity

* fix: test

* update sql

* remote export
pull/17468/head
Alex 2025-04-08 11:04:07 +07: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 31 additions and 64 deletions

@ -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');
};

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

@ -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>) {}

@ -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,

@ -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,