2024-09-04 00:22:27 +00:00
|
|
|
import 'reflect-metadata'
|
2024-09-01 19:22:00 +00:00
|
|
|
import { CredentialsType, credentialsTable } from '$lib/server/api/databases/tables/credentials.table'
|
2024-09-04 23:04:41 +00:00
|
|
|
import { DrizzleService } from '$lib/server/api/services/drizzle.service'
|
2024-09-01 19:22:00 +00:00
|
|
|
import { type InferInsertModel, and, eq } from 'drizzle-orm'
|
2024-08-31 00:36:22 +00:00
|
|
|
import { inject, injectable } from 'tsyringe'
|
2024-09-04 23:04:41 +00:00
|
|
|
import { takeFirstOrThrow } from '../common/utils/repository'
|
2024-07-31 01:50:46 +00:00
|
|
|
|
2024-08-31 00:36:22 +00:00
|
|
|
export type CreateCredentials = InferInsertModel<typeof credentialsTable>
|
|
|
|
|
export type UpdateCredentials = Partial<CreateCredentials>
|
2024-09-13 19:11:41 +00:00
|
|
|
export type DeleteCredentials = Pick<CreateCredentials, 'id'>
|
2024-07-31 01:50:46 +00:00
|
|
|
|
2024-08-10 17:03:30 +00:00
|
|
|
@injectable()
|
2024-09-04 23:04:41 +00:00
|
|
|
export class CredentialsRepository {
|
|
|
|
|
constructor(@inject(DrizzleService) private readonly drizzle: DrizzleService) {}
|
2024-07-31 01:50:46 +00:00
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async findOneByUserId(userId: string, db = this.drizzle.db) {
|
|
|
|
|
return db.query.credentialsTable.findFirst({
|
2024-08-31 00:36:22 +00:00
|
|
|
where: eq(credentialsTable.user_id, userId),
|
|
|
|
|
})
|
2024-08-01 16:26:42 +00:00
|
|
|
}
|
|
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async findOneByUserIdAndType(userId: string, type: CredentialsType, db = this.drizzle.db) {
|
|
|
|
|
return db.query.credentialsTable.findFirst({
|
2024-08-31 00:36:22 +00:00
|
|
|
where: and(eq(credentialsTable.user_id, userId), eq(credentialsTable.type, type)),
|
|
|
|
|
})
|
2024-08-29 23:12:40 +00:00
|
|
|
}
|
|
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async findPasswordCredentialsByUserId(userId: string, db = this.drizzle.db) {
|
|
|
|
|
return db.query.credentialsTable.findFirst({
|
2024-08-31 00:36:22 +00:00
|
|
|
where: and(eq(credentialsTable.user_id, userId), eq(credentialsTable.type, CredentialsType.PASSWORD)),
|
|
|
|
|
})
|
2024-08-01 16:26:42 +00:00
|
|
|
}
|
|
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async findTOTPCredentialsByUserId(userId: string, db = this.drizzle.db) {
|
|
|
|
|
return db.query.credentialsTable.findFirst({
|
2024-08-31 00:36:22 +00:00
|
|
|
where: and(eq(credentialsTable.user_id, userId), eq(credentialsTable.type, CredentialsType.TOTP)),
|
|
|
|
|
})
|
2024-08-01 16:26:42 +00:00
|
|
|
}
|
|
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async findOneById(id: string, db = this.drizzle.db) {
|
|
|
|
|
return db.query.credentialsTable.findFirst({
|
2024-08-31 00:36:22 +00:00
|
|
|
where: eq(credentialsTable.id, id),
|
|
|
|
|
})
|
2024-07-31 01:50:46 +00:00
|
|
|
}
|
|
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async findOneByIdOrThrow(id: string, db = this.drizzle.db) {
|
2024-08-31 00:36:22 +00:00
|
|
|
const credentials = await this.findOneById(id)
|
|
|
|
|
if (!credentials) throw Error('Credentials not found')
|
|
|
|
|
return credentials
|
2024-07-31 01:50:46 +00:00
|
|
|
}
|
|
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async create(data: CreateCredentials, db = this.drizzle.db) {
|
|
|
|
|
return db.insert(credentialsTable).values(data).returning().then(takeFirstOrThrow)
|
2024-07-31 01:50:46 +00:00
|
|
|
}
|
|
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async update(id: string, data: UpdateCredentials, db = this.drizzle.db) {
|
|
|
|
|
return db.update(credentialsTable).set(data).where(eq(credentialsTable.id, id)).returning().then(takeFirstOrThrow)
|
2024-07-31 01:50:46 +00:00
|
|
|
}
|
2024-08-29 23:12:40 +00:00
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async delete(id: string, db = this.drizzle.db) {
|
|
|
|
|
return db.delete(credentialsTable).where(eq(credentialsTable.id, id))
|
2024-08-29 23:12:40 +00:00
|
|
|
}
|
|
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async deleteByUserId(userId: string, db = this.drizzle.db) {
|
|
|
|
|
return db.delete(credentialsTable).where(eq(credentialsTable.user_id, userId))
|
2024-08-29 23:12:40 +00:00
|
|
|
}
|
2024-08-31 00:36:22 +00:00
|
|
|
|
2024-09-04 23:04:41 +00:00
|
|
|
async deleteByUserIdAndType(userId: string, type: CredentialsType, db = this.drizzle.db) {
|
|
|
|
|
return db.delete(credentialsTable).where(and(eq(credentialsTable.user_id, userId), eq(credentialsTable.type, type)))
|
2024-09-01 19:22:00 +00:00
|
|
|
}
|
2024-08-31 00:36:22 +00:00
|
|
|
}
|