feat(knex): create database interfaces and knexjs nest integration

Co-authored-by: Philip Molares <philip.molares@udo.edu>
Signed-off-by: Philip Molares <philip.molares@udo.edu>
Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
Erik Michelson 2025-03-06 12:59:59 +01:00
parent 902abf72e6
commit a9183e82bf
No known key found for this signature in database
GPG key ID: DB99ADDDC5C0AF82
93 changed files with 760 additions and 2927 deletions

View file

@ -1,63 +0,0 @@
/*
* SPDX-FileCopyrightText: 2024 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import {
Column,
CreateDateColumn,
Entity,
ManyToOne,
PrimaryGeneratedColumn,
} from 'typeorm';
import { User } from '../users/user.entity';
@Entity()
export class ApiToken {
@PrimaryGeneratedColumn()
id: number;
@Column({ unique: true })
keyId: string;
@ManyToOne((_) => User, (user) => user.apiTokens, {
onDelete: 'CASCADE', // This deletes the PublicAuthToken, when the associated User is deleted
})
user: Promise<User>;
@Column()
label: string;
@CreateDateColumn()
createdAt: Date;
@Column({ unique: true })
hash: string;
@Column()
validUntil: Date;
@Column({
nullable: true,
type: 'date',
})
lastUsedAt: Date | null;
public static create(
keyId: string,
user: User,
label: string,
tokenString: string,
validUntil: Date,
): Omit<ApiToken, 'id' | 'createdAt'> {
const token = new ApiToken();
token.keyId = keyId;
token.user = Promise.resolve(user);
token.label = label;
token.hash = tokenString;
token.validUntil = validUntil;
token.lastUsedAt = null;
return token;
}
}

View file

@ -12,6 +12,7 @@ import { Repository } from 'typeorm';
import { Identity } from '../auth/identity.entity';
import appConfigMock from '../config/mock/app.config.mock';
import authConfigMock from '../config/mock/auth.config.mock';
import { User } from '../database/user.entity';
import {
NotInDBError,
TokenNotValidError,
@ -19,7 +20,6 @@ import {
} from '../errors/errors';
import { LoggerModule } from '../logger/logger.module';
import { Session } from '../sessions/session.entity';
import { User } from '../users/user.entity';
import { UsersModule } from '../users/users.module';
import { ApiToken } from './api-token.entity';
import { ApiTokenService } from './api-token.service';

View file

@ -10,13 +10,13 @@ import { InjectRepository } from '@nestjs/typeorm';
import { createHash, randomBytes, timingSafeEqual } from 'crypto';
import { Repository } from 'typeorm';
import { User } from '../database/user.entity';
import {
NotInDBError,
TokenNotValidError,
TooManyTokensError,
} from '../errors/errors';
import { ConsoleLoggerService } from '../logger/console-logger.service';
import { User } from '../users/user.entity';
import { bufferToBase64Url } from '../utils/password';
import { ApiToken } from './api-token.entity';

View file

@ -6,7 +6,7 @@
import { ExecutionContext, Injectable } from '@nestjs/common';
import { CompleteRequest } from '../api/utils/request.type';
import { User } from '../users/user.entity';
import { User } from '../database/user.entity';
import { UsersService } from '../users/users.service';
@Injectable()