mirror of
https://github.com/immich-app/immich.git
synced 2025-05-24 01:12:58 -04:00
refactor: remove session entity (#17466)
* refactor: remove session entity * fix: test * update sql * remote export
This commit is contained in:
parent
49be6d7fd8
commit
e5ca79dd44
@ -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",
|
||||||
"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"
|
||||||
|
@ -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>) {}
|
||||||
|
6
server/test/fixtures/auth.stub.ts
vendored
6
server/test/fixtures/auth.stub.ts
vendored
@ -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,
|
||||||
|
6
server/test/fixtures/session.stub.ts
vendored
6
server/test/fixtures/session.stub.ts
vendored
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user