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

Commit

Permalink
Merge pull request #161 from PrivaNoteTeam/server-vault-synchronization
Browse files Browse the repository at this point in the history
Server Vault Synchronization
  • Loading branch information
oliviergoulet5 committed Nov 24, 2021
2 parents f411191 + cb37bb0 commit 31fa069
Show file tree
Hide file tree
Showing 19 changed files with 194 additions and 90 deletions.
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.

0 comments on commit 31fa069

Please sign in to comment.