Added types for database/databases

This commit is contained in:
dominicbachmann 2022-04-06 19:45:47 +02:00
parent faeae8fd6c
commit e042c5cfde

View File

@ -1,15 +1,21 @@
import { decrypt, encrypt } from '$lib/crypto'; import { decrypt, encrypt } from '$lib/crypto';
import * as db from '$lib/database';
import cuid from 'cuid'; import cuid from 'cuid';
import { generatePassword } from '.'; import { generatePassword } from '.';
import { prisma, ErrorHandler } from './common'; import { prisma } from './common';
import getPort, { portNumbers } from 'get-port';
import { asyncExecShell, getEngine, removeContainer } from '$lib/common'; import { asyncExecShell, getEngine, removeContainer } from '$lib/common';
import type { Database, DatabaseSettings, DestinationDocker } from '@prisma/client';
export async function listDatabases(teamId) { export async function listDatabases(teamId: string): Promise<Database[]> {
return await prisma.database.findMany({ where: { teams: { some: { id: teamId } } } }); return await prisma.database.findMany({ where: { teams: { some: { id: teamId } } } });
} }
export async function newDatabase({ name, teamId }) {
export async function newDatabase({
name,
teamId
}: {
name: string;
teamId: string;
}): Promise<Database> {
const dbUser = cuid(); const dbUser = cuid();
const dbUserPassword = encrypt(generatePassword()); const dbUserPassword = encrypt(generatePassword());
const rootUser = cuid(); const rootUser = cuid();
@ -30,7 +36,13 @@ export async function newDatabase({ name, teamId }) {
}); });
} }
export async function getDatabase({ id, teamId }) { export async function getDatabase({
id,
teamId
}: {
id: string;
teamId: string;
}): Promise<Database & { destinationDocker: DestinationDocker; settings: DatabaseSettings }> {
const body = await prisma.database.findFirst({ const body = await prisma.database.findFirst({
where: { id, teams: { some: { id: teamId } } }, where: { id, teams: { some: { id: teamId } } },
include: { destinationDocker: true, settings: true } include: { destinationDocker: true, settings: true }
@ -39,16 +51,22 @@ export async function getDatabase({ id, teamId }) {
if (body.dbUserPassword) body.dbUserPassword = decrypt(body.dbUserPassword); if (body.dbUserPassword) body.dbUserPassword = decrypt(body.dbUserPassword);
if (body.rootUserPassword) body.rootUserPassword = decrypt(body.rootUserPassword); if (body.rootUserPassword) body.rootUserPassword = decrypt(body.rootUserPassword);
return { ...body }; return body;
} }
export async function removeDatabase({ id }) { export async function removeDatabase({ id }: { id: string }): Promise<void> {
await prisma.databaseSettings.deleteMany({ where: { databaseId: id } }); await prisma.databaseSettings.deleteMany({ where: { databaseId: id } });
await prisma.database.delete({ where: { id } }); await prisma.database.delete({ where: { id } });
return; return;
} }
export async function configureDatabaseType({ id, type }) { export async function configureDatabaseType({
id,
type
}: {
id: string;
type: string;
}): Promise<Database> {
return await prisma.database.update({ return await prisma.database.update({
where: { id }, where: { id },
data: { type } data: { type }
@ -64,7 +82,7 @@ export async function setDatabase({
version?: string; version?: string;
isPublic?: boolean; isPublic?: boolean;
appendOnly?: boolean; appendOnly?: boolean;
}) { }): Promise<Database> {
return await prisma.database.update({ return await prisma.database.update({
where: { id }, where: { id },
data: { data: {
@ -82,7 +100,16 @@ export async function updateDatabase({
rootUser, rootUser,
rootUserPassword, rootUserPassword,
version version
}) { }: {
id: string;
name: string;
defaultDatabase: string;
dbUser: string;
dbUserPassword: string;
rootUser: string;
rootUserPassword: string;
version: string;
}): Promise<Database> {
const encryptedDbUserPassword = dbUserPassword && encrypt(dbUserPassword); const encryptedDbUserPassword = dbUserPassword && encrypt(dbUserPassword);
const encryptedRootUserPassword = rootUserPassword && encrypt(rootUserPassword); const encryptedRootUserPassword = rootUserPassword && encrypt(rootUserPassword);
return await prisma.database.update({ return await prisma.database.update({
@ -99,7 +126,9 @@ export async function updateDatabase({
}); });
} }
export async function stopDatabase(database) { export async function stopDatabase(
database: Database & { destinationDocker: DestinationDocker }
): Promise<boolean> {
let everStarted = false; let everStarted = false;
const { const {
id, id,