Skip to content

Commit

Permalink
feat: update db table by API request, remove manual restart server
Browse files Browse the repository at this point in the history
  • Loading branch information
antonreshetov committed Apr 6, 2022
1 parent b75d987 commit cdbec6f
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 68 deletions.
5 changes: 2 additions & 3 deletions src/main/preload.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { contextBridge, ipcRenderer } from 'electron'
import { migrate, updateTable } from './services/db'
import { migrate } from './services/db'
import { store } from './store'
import type { ElectronBridge } from '@shared/types/main'

Expand All @@ -22,7 +22,6 @@ contextBridge.exposeInMainWorld('electron', {
}
},
db: {
migrate: (path: string) => migrate(path),
updateTable: (key, data, db) => updateTable(key, data, db)
migrate: (path: string) => migrate(path)
}
} as ElectronBridge)
53 changes: 20 additions & 33 deletions src/main/services/api/server.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,8 @@
import * as jsonServer from '@masscode/json-server'
import { store } from '../../store'
import type { Server } from 'http'
import type { Socket } from 'net'
import { nanoid } from 'nanoid'
import { API_PORT } from '../../config'
import path from 'path'
interface ServerWithDestroy extends Server {
destroy: Function
}

const enableDestroy = (server: ServerWithDestroy) => {
const connections: Record<string, Socket> = {}

server.on('connection', conn => {
const key = conn.remoteAddress + ':' + conn.remotePort
connections[key] = conn
conn.on('close', () => {
delete connections[key]
})
})

server.destroy = () => {
server.close()
for (const key in connections) {
connections[key].destroy()
}
}
}

export const createApiServer = () => {
const db = path.resolve(store.preferences.get('storagePath') + '/db.json')
Expand All @@ -37,12 +13,25 @@ export const createApiServer = () => {
app.use(jsonServer.bodyParser)
app.use(middlewares)

app.get('/restart', (req, res) => {
server.destroy()
createApiServer()
console.log('API server is restart...')
app.post('/db/update/:table', (req, res) => {
const table = req.params.table
const isAllowedTable = ['folders', 'snippets', 'tags'].includes(table)

res.status(200)
if (!isAllowedTable) {
return res.status(400).send('Table is not defined in DB')
}
if (req.body.value?.length === 0) {
res.status(400).send("'value' is required")
} else {
const db: any = router.db.getState()

db[table] = req.body.value

router.db.setState(db)
router.db.write()

res.sendStatus(200)
}
})

app.use((req, res, next) => {
Expand All @@ -60,9 +49,7 @@ export const createApiServer = () => {

app.use(router)

const server = app.listen(API_PORT, () => {
app.listen(API_PORT, () => {
console.log(`API server is running on port ${API_PORT}`)
}) as ServerWithDestroy

enableDestroy(server)
})
}
13 changes: 1 addition & 12 deletions src/main/services/db/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import fs from 'fs-extra'
import readline from 'readline'
import { nestedToFlat } from '../../utils'
import { nanoid } from 'nanoid'
import type { DB, Folder, Snippet, Tag } from '@shared/types/main/db'
import type { Folder, Snippet, Tag } from '@shared/types/main/db'
import { oldLanguageMap } from '../../../renderer/components/editor/languages'

const fileDb = store.preferences.get('storagePath') + '/db.json'
Expand Down Expand Up @@ -55,17 +55,6 @@ const writeToFile = (db: object) => {
fs.writeFileSync(fileDb, data)
}

export const updateTable = (
key: keyof DB,
data: Folder[] | Snippet[] | Tag[],
db: DB
) => {
const clone = JSON.parse(JSON.stringify(db))
clone[key] = data

writeToFile(clone)
}

export const migrate = async (path: string) => {
const files = await fs.readdir(path)
const migrateFiles = ['masscode.db', 'snippets.db', 'tags.db']
Expand Down
4 changes: 2 additions & 2 deletions src/renderer/components/sidebar/TheSidebar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,8 @@ const onAddNewFolder = async () => {
await folderStore.addNewFolder()
}
const onUpdate = () => {
folderStore.updateSort()
const onUpdate = async () => {
await folderStore.updateFoldersTable()
}
</script>

Expand Down
18 changes: 7 additions & 11 deletions src/renderer/store/folders.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useApi } from '@/composable'
import { store, db } from '@/electron'
import { store } from '@/electron'
import { flatToNested } from '@/utils'
import type { Folder, FolderTree } from '@shared/types/main/db'
import { defineStore } from 'pinia'
Expand Down Expand Up @@ -56,18 +56,14 @@ export const useFolderStore = defineStore('folders', {
this.selected = this.findFolderById(id, this.foldersTree)
}
},
async updateSort () {
const { data } = await useApi('/db').get().json()

db.updateTable(
'folders',
[
async updateFoldersTable () {
const body = {
value: [
...JSON.parse(JSON.stringify(this.system)),
...nestedToFlat(this.foldersTree)
],
data.value
)
await useApi('/restart').get()
]
}
await useApi('/db/update/folders').post(body)
},
selectId (id: string) {
this.selectedId = id
Expand Down
5 changes: 0 additions & 5 deletions src/shared/types/main/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,5 @@ export interface ElectronBridge {
}
db: {
migrate: (path: string) => void
updateTable: (
key: keyof DB,
data: Folder[] | Snippet[] | Tag[],
db: DB
) => void
}
}
9 changes: 7 additions & 2 deletions src/shared/types/main/json-server.d.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
declare module '@masscode/json-server' {
import type { NextHandleFunction } from 'connect'
import type { Application, RequestHandler, Router } from 'express'
import type { LowSync } from 'lowdb'
import { LowSync } from 'lowdb'

class LowSyncExtended<T = unknown> extends LowSync {
setState(data: any): void
getState(): T
}

export interface JsonServerRouter<T> extends Router {
db: LowSync<T>
db: LowSyncExtended<T>
}

export interface MiddlewaresOptions {
Expand Down

0 comments on commit cdbec6f

Please sign in to comment.