Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

Server Vault Synchronization #161

Merged
merged 4 commits into from
Nov 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 5 additions & 72 deletions server/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,6 @@ datasource db {
url = env("DATABASE_URL")
}

model Attachment {
attachmentID Int @id @default(autoincrement())
createdAt DateTime @db.Timestamp(0)
fileName String @unique(map: "fileName") @db.VarChar(255)
mimeType String @db.VarChar(255)
blobValue String
NotebookbookID Int
Notebook Notebook @relation(fields: [NotebookbookID], references: [bookID], onDelete: Cascade, onUpdate: NoAction, map: "attached")
Attachment_Page Attachment_Page[]

@@index([NotebookbookID], map: "attached")
}

model Attachment_Page {
AttachmentattachmentID Int
PagepageID Int
Attachment Attachment @relation(fields: [AttachmentattachmentID], references: [attachmentID], onDelete: Cascade, onUpdate: NoAction, map: "related to page")
Page Page @relation(fields: [PagepageID], references: [pageID], onDelete: Cascade, onUpdate: NoAction, map: "may involve")

@@id([AttachmentattachmentID, PagepageID])
@@index([PagepageID], map: "may involve")
}

model CloudStorage {
storageID Int @id @default(autoincrement())
name String @db.VarChar(255)
description String
}

model EditorSettings {
editorID Int @id @default(autoincrement())
spellCheck Boolean @db.Boolean
Expand All @@ -50,35 +21,6 @@ model EditorSettings {
@@index([SettingssettingsID], map: "covers 1")
}

model Folder {
folderID Int @id @default(autoincrement())
name String @db.VarChar(255)
createdAt DateTime @db.Timestamp(0)
updatedAt DateTime @db.Timestamp(0)
NotebookbookID Int
ParentfolderID Int?
Notebook Notebook @relation(fields: [NotebookbookID], references: [bookID], onDelete: Cascade, onUpdate: NoAction, map: "contains")
Folder Folder? @relation("FolderToFolder_ParentfolderID", fields: [ParentfolderID], references: [folderID], onDelete: Cascade, onUpdate: NoAction, map: "includes")
other_Folder Folder[] @relation("FolderToFolder_ParentfolderID")
Page Page[]

@@index([NotebookbookID], map: "contains")
@@index([ParentfolderID], map: "includes")
}

model Notebook {
bookID Int @id @default(autoincrement())
createdAt DateTime @db.Timestamp(0)
updatedAt DateTime @db.Timestamp(0)
name String @unique(map: "name") @db.VarChar(255)
UseruserID Int
User User @relation(fields: [UseruserID], references: [userID], onDelete: Cascade, onUpdate: NoAction, map: "writes in")
Attachment Attachment[]
Folder Folder[]

@@index([UseruserID], map: "writes in")
}

model OneTimeVerificationCode {
codeID Int @id @default(autoincrement())
code String @db.Char(6)
Expand All @@ -89,19 +31,6 @@ model OneTimeVerificationCode {
@@index([UseruserID], map: "completes")
}

model Page {
pageID Int @id @default(autoincrement())
name String @db.VarChar(255)
createdAt DateTime @db.Timestamp(0)
updatedAt DateTime @db.Timestamp(0)
content String
FolderfolderID Int
Folder Folder @relation(fields: [FolderfolderID], references: [folderID], onDelete: Cascade, onUpdate: NoAction, map: "consists of")
Attachment_Page Attachment_Page[]

@@index([FolderfolderID], map: "consists of")
}

model Settings {
settingsID Int @id @default(autoincrement())
UseruserID Int
Expand All @@ -128,7 +57,6 @@ model User {
email String @unique(map: "email") @db.VarChar(255)
password String @db.VarChar(255)
verified Boolean
Notebook Notebook[]
OneTimeVerificationCode OneTimeVerificationCode[]
Settings Settings[]
VaultSubscription VaultSubscription[]
Expand All @@ -147,6 +75,11 @@ model VaultSubscription {
@@index([UseruserID], map: "has")
}

model NotebookItem {
id String @unique @id
content String @db.Text
}

model session {
sid String @id @db.VarChar
sess Json @db.Json
Expand Down
2 changes: 1 addition & 1 deletion server/src/controllers/userController/user.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Response, Request } from 'express';

export const user = async (req: Request, res: Response) => {
if (req.session.user) {
if (!req.session.user) {
res.json({ message: 'no authenticated user' });

return;
Expand Down
2 changes: 1 addition & 1 deletion server/src/controllers/userController/verify.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Response, Request } from 'express';
import { verifyUserValidation } from '../../Validation/verifyUserValidation';
import { verifyUserValidation } from '../../validation/verifyUserValidation';
import {
retrieveVerificationCode,
verifyUser
Expand Down
25 changes: 25 additions & 0 deletions server/src/controllers/vaultController/addItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Request, Response } from 'express';
import { db } from '../../database/sync';
import { Item } from '../../types';

export const addItem = async (req: Request, res: Response) => {
if (!req.session.user) {
return res.status(400).send(`Not authenticated to Vault.`);
}

const item: Item = req.body.item;
const notebookStructure: Item = req.body.notebookStructure;

const response = await db.addItem(
req.ctx!,
item
);

await db.updateNotebookStructure(req.ctx!, notebookStructure);

response
? res.status(200).send(`Item ${item.id} was created successfully.`)
: res.status(400).send(`Item ${item.id} could not be created.`);

return;
}
13 changes: 13 additions & 0 deletions server/src/controllers/vaultController/createNotebook.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { Response, Request } from 'express';
import { Item } from '../../types';
import { db } from '../../database/sync';

export const createNotebook = async (req: Request, __: Response) => {
console.log(req.body.notebookStructure);

const notebookStructure: Item[] = req.body.notebookStructure;

notebookStructure.forEach((item) => {
db.addItem(req.ctx!, item);
});
};
15 changes: 15 additions & 0 deletions server/src/controllers/vaultController/deleteItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Request, Response } from 'express';
import { db } from '../../database/sync';
import {Item} from '../../types';

export const deleteItem = async (req: Request, res: Response) => {
const itemId: string = req.body.itemId;
const notebookStructure: Item = req.body.notebookStructure;

const response = await db.deleteItem(req.ctx!, itemId);
db.updateNotebookStructure(req.ctx!, notebookStructure);

response
? res.status(200).send(`Deleted file ${itemId}`)
: res.status(400).send('An error occurred when deleting file.');
}
14 changes: 14 additions & 0 deletions server/src/controllers/vaultController/downloadItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Request, Response } from 'express';
import { db } from '../../database/sync';

export const downloadItem = async (req: Request, res: Response) => {
const itemId: string = req.query.itemId as unknown as string;

const response = await db.downloadItem(req.ctx!, itemId);

response
? res.status(200).json({
content: response.content
})
: res.status(400).send(`Item ${itemId} could not be downloaded.`);
}
13 changes: 11 additions & 2 deletions server/src/controllers/vaultController/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
import { createNotebook } from './notebook';
import { createNotebook } from './createNotebook';

import { deleteItem } from './deleteItem';
import { updateItem } from './updateItem';
import { addItem } from './addItem';
import { downloadItem } from './downloadItem';
export const vaultController = {
createNotebook
createNotebook,

addItem,
updateItem,
deleteItem,
downloadItem
};
9 changes: 0 additions & 9 deletions server/src/controllers/vaultController/notebook.ts

This file was deleted.

19 changes: 19 additions & 0 deletions server/src/controllers/vaultController/updateItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Request, Response } from 'express';
import { db } from '../../database/sync';
import { Item } from '../../types';

export const updateItem = async (req: Request, res: Response) => {
const item: Item = req.body.item;
const notebookStructure: Item = req.body.notebookStructure;

const response = await db.updateItem(
req.ctx!,
item
);

await db.updateNotebookStructure(req.ctx!, notebookStructure);

response
? res.status(200).send(`File ${item.id} was updated successfully.`)
: res.status(400).send(`File ${item.id} could not be updated.`);
}
12 changes: 12 additions & 0 deletions server/src/database/sync/addItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Context, Item } from "../../types";

export async function addItem(ctx: Context, item: Item) {
const response = await ctx.prisma.notebookItem.create({
data: {
id: item.id,
content: item.content
}
});

return response !== undefined;
}
11 changes: 11 additions & 0 deletions server/src/database/sync/deleteItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Context } from '../../types';

export async function deleteItem(ctx: Context, itemId: string) {
const response = await ctx.prisma.notebookItem.delete({
where: {
id: itemId
}
});

return response !== undefined;
}
12 changes: 12 additions & 0 deletions server/src/database/sync/downloadItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Context } from '../../types';

export async function downloadItem(ctx: Context, itemId: string) {
console.log(itemId);
const response = await ctx.prisma.notebookItem.findUnique({
where: {
id: itemId
}
})

return response !== null ? response : undefined;
}
13 changes: 13 additions & 0 deletions server/src/database/sync/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { deleteItem } from './deleteItem';
import { addItem } from './addItem';
import { updateItem } from './updateItem';
import { downloadItem } from './downloadItem';
import { updateNotebookStructure } from './updateNotebookStructure';

export const db = {
addItem,
deleteItem,
updateItem,
downloadItem,
updateNotebookStructure
};
14 changes: 14 additions & 0 deletions server/src/database/sync/updateItem.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Context, Item } from '../../types';

export async function updateItem(ctx: Context, item: Item) {
const response = await ctx.prisma.notebookItem.update({
data: {
content: item.content
},
where: {
id: item.id
}
});

return response !== undefined;
}
14 changes: 14 additions & 0 deletions server/src/database/sync/updateNotebookStructure.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import {Context, Item} from '../../types';

export async function updateNotebookStructure(ctx: Context, notebookStructure: Item) {
const response = await ctx.prisma.notebookItem.update({
data: {
content: notebookStructure.content
},
where: {
id: notebookStructure.id
}
})

return response !== undefined;
}
12 changes: 7 additions & 5 deletions server/src/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,24 @@ import { vaultController } from './controllers';

const router = Router();

// Auth
router.post('/verify', userController.verify);

router.post('/register', userController.register);

router.post('/login', userController.login);

router.post('/logout', userController.logout);

router.get('/user', userController.user);

router.post('/forgot-password', userController.forgotPassword);

router.post('/reset-password', userController.resetPassword);

router.get('/google-drive/get-token', providerController.googleGetAuthCode);

router.post('/vault/notebook', vaultController.createNotebook);
// Vault
router.post('/vault/create-notebook', vaultController.createNotebook);
router.post('/vault/add', vaultController.addItem);
router.post('/vault/update', vaultController.updateItem);
router.post('/vault/delete', vaultController.deleteItem);
router.get('/vault/download', vaultController.downloadItem)

export { router };
7 changes: 7 additions & 0 deletions server/src/types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,10 @@ export interface CreateUserData {
}
export type RegisterData = CreateUserData;
export type LoginData = CreateUserData; // need to refactor

export interface Item {
id: string;
content: string;
}

export type NotebookStructure = NotebookItem[];
Empty file.