Browse Source

backend: typescript models

Joystream Stats 4 years ago
parent
commit
3345e6cf11

+ 1 - 1
package.json

@@ -36,7 +36,7 @@
     "prod": "node server",
     "test": "react-scripts test --env=jsdom",
     "eject": "react-scripts eject",
-    "seed": "node server/db/seed.js"
+    "seed": "ts-node server/db/seed.ts"
   },
   "eslintConfig": {
     "extends": "react-app"

+ 0 - 19
server/db/db.js

@@ -1,19 +0,0 @@
-const Sequelize = require("sequelize");
-const pkg = require("../../package.json");
-
-const databaseName =
-  pkg.name + (process.env.NODE_ENV === "test" ? "-test" : "");
-
-const createDB = () => {
-  const db = new Sequelize(
-    process.env.DATABASE_URL || `postgres://localhost:5432/${databaseName}`,
-    {
-      logging: false
-    }
-  );
-  return db;
-};
-
-const db = createDB();
-
-module.exports = db;

+ 6 - 0
server/db/db.ts

@@ -0,0 +1,6 @@
+const Sequelize = require('sequelize')
+const pkg = require('../../package.json')
+
+const dbName = pkg.name + (process.env.NODE_ENV === 'test' ? '-test' : '')
+const dbUrl = process.env.DATABASE_URL || `postgres://localhost:5432/${dbName}`
+export default new Sequelize(dbUrl, { logging: false })

+ 0 - 6
server/db/index.js

@@ -1,6 +0,0 @@
-const db = require('./db')
-
-// register models
-require('./models')
-
-module.exports = db

+ 5 - 0
server/db/index.ts

@@ -0,0 +1,5 @@
+import db from './db'
+
+require('./models')
+
+module.exports = db

+ 0 - 14
server/db/models/block.js

@@ -1,14 +0,0 @@
-const Sequelize = require('sequelize')
-const db = require('../db')
-
-const Block = db.define('block', {
-  id: {
-    type: Sequelize.INTEGER,
-    primaryKey: true,
-  },
-  timestamp: Sequelize.DATE,
-  blocktime: Sequelize.INTEGER,
-  author: Sequelize.STRING,
-})
-
-module.exports = Block

+ 14 - 0
server/db/models/block.ts

@@ -0,0 +1,14 @@
+import db from '../db'
+import { DataTypes } from 'sequelize'
+
+const Block = db.define('block', {
+  id: {
+    type: DataTypes.INTEGER,
+    primaryKey: true,
+  },
+  timestamp: DataTypes.DATE,
+  blocktime: DataTypes.INTEGER,
+  author: DataTypes.STRING,
+})
+
+export default Block

+ 16 - 0
server/db/models/category.ts

@@ -0,0 +1,16 @@
+import db from '../db'
+import { DataTypes } from 'sequelize'
+
+const Category = db.define('category', {
+  id: {
+    type: DataTypes.INTEGER,
+    primaryKey: true,
+  },
+  title: DataTypes.STRING,
+  description: DataTypes.STRING,
+  position: DataTypes.INTEGER,
+  deleted: DataTypes.BOOLEAN,
+  archived: DataTypes.BOOLEAN,
+})
+
+export default Category

+ 14 - 0
server/db/models/channel.ts

@@ -0,0 +1,14 @@
+import db from '../db'
+import { DataTypes } from 'sequelize'
+
+const Channel = db.define('channel', {
+  id: {
+    type: DataTypes.INTEGER,
+    primaryKey: true,
+  },
+  timestamp: DataTypes.DATE,
+  blocktime: DataTypes.INTEGER,
+  author: DataTypes.STRING,
+})
+
+export default Channel

+ 14 - 0
server/db/models/council.ts

@@ -0,0 +1,14 @@
+import db from '../db'
+import { DataTypes } from 'sequelize'
+
+const Council = db.define('council', {
+  id: {
+    type: DataTypes.INTEGER,
+    primaryKey: true,
+  },
+  timestamp: DataTypes.DATE,
+  blocktime: DataTypes.INTEGER,
+  author: DataTypes.STRING,
+})
+
+export default Council

+ 0 - 3
server/db/models/index.js

@@ -1,3 +0,0 @@
-const Block = require("./block");
-
-module.exports = { Block };

+ 19 - 0
server/db/models/index.ts

@@ -0,0 +1,19 @@
+import Block from './block'
+import Channel from './channel'
+import Council from './council'
+import Proposal from './proposal'
+import Member from './member'
+
+import Category from './category'
+import Thread from './thread'
+import Post from './post'
+
+Category.hasMany(Thread)
+Category.belongsTo(Member, { as: 'moderator' })
+Thread.belongsTo(Category)
+Thread.belongsTo(Member, { as: 'author' })
+Thread.hasMany(Post)
+Post.belongsTo(Thread)
+Post.belongsTo(Member, { as: 'author' })
+
+export { Block, Channel, Council, Member, Proposal, Category, Thread, Post }

+ 14 - 0
server/db/models/member.ts

@@ -0,0 +1,14 @@
+import db from '../db'
+import { DataTypes } from 'sequelize'
+
+const Member = db.define('member', {
+  id: {
+    type: DataTypes.INTEGER,
+    primaryKey: true,
+  },
+  timestamp: DataTypes.DATE,
+  blocktime: DataTypes.INTEGER,
+  author: DataTypes.STRING,
+})
+
+export default Member

+ 13 - 0
server/db/models/post.ts

@@ -0,0 +1,13 @@
+import db from '../db'
+import { DataTypes } from 'sequelize'
+
+const Post = db.define('post', {
+  id: {
+    type: DataTypes.INTEGER,
+    primaryKey: true,
+  },
+  text: DataTypes.STRING,
+  createdAt: DataTypes.DATE,
+})
+
+export default Post

+ 19 - 0
server/db/models/proposal.ts

@@ -0,0 +1,19 @@
+import db from '../db'
+import { DataTypes } from 'sequelize'
+
+const Proposal = db.define('proposal', {
+  id: {
+    type: DataTypes.INTEGER,
+    primaryKey: true,
+  },
+  createdAt: DataTypes.DATE,
+  finalizedAt: DataTypes.DATE,
+  title: DataTypes.STRING,
+  type: DataTypes.STRING,
+  stage: DataTypes.STRING,
+  result: DataTypes.STRING,
+  executed: DataTypes.STRING,
+  parameters: DataTypes.STRING,
+})
+
+export default Proposal

+ 14 - 0
server/db/models/thread.ts

@@ -0,0 +1,14 @@
+import db from '../db'
+import { DataTypes } from 'sequelize'
+
+const Thread = db.define('thread', {
+  id: {
+    type: DataTypes.INTEGER,
+    primaryKey: true,
+  },
+  title: DataTypes.STRING,
+  nrInCategory: DataTypes.INTEGER,
+  moderation: DataTypes.STRING  
+})
+
+export default Thread

+ 0 - 19
server/db/seed.js

@@ -1,19 +0,0 @@
-const db = require('../db')
-const { Block } = require('./models')
-
-async function runSeed() {
-  await db.sync({ force: true })
-  console.log('db synced!')
-  console.log('seeding...')
-  try {
-  } catch (err) {
-    console.error(`sequelize error:`, err)
-    process.exitCode = 1
-  } finally {
-    console.log('closing db connection')
-    await db.close()
-    console.log('db connection closed')
-  }
-}
-
-runSeed()

+ 35 - 0
server/db/seed.ts

@@ -0,0 +1,35 @@
+import db from './db'
+import {
+  Block,
+  Category,
+  Channel,
+  Council,
+  Member,
+  Post,
+  Proposal,
+  Thread,
+} from './models'
+
+const blocks = [] //require('../../blocks.json')
+
+async function runSeed() {
+  await db.sync({ force: true })
+  console.log('db synced!')
+  console.log('seeding...')
+  try {
+    if (blocks.length) {
+      console.log('importing blocks')
+      const b = await Block.bulkCreate(blocks)
+      console.log(`${b.length} blocks imported`)
+    }
+  } catch (err) {
+    console.error(`sequelize error:`, err)
+    process.exitCode = 1
+  } finally {
+    console.log('closing db connection')
+    await db.close()
+    console.log('db connection closed')
+  }
+}
+
+runSeed()

+ 42 - 50
server/index.ts

@@ -1,38 +1,31 @@
-//import express from "express"
+const db = require('./db')
+const pg = require('pg')
+delete pg.native
 
-const PORT = process.env.PORT || 3500;
-//const URL = ["http://localhost:3050"];
-
-const express = require("express")
-const app = express();
-
-  const server = app.listen(PORT, () => {
-    console.log(chalk.blue(`[Express] Listening on port ${PORT}`));
-  });
-
-const socketio = require("socket.io");
-const io = socketio(server);
-require("./socket")(io);
-
-
-const path = require("path");
+const express = require('express')
+const app = express()
+const path = require('path')
+const morgan = require('morgan')
+const socketio = require('socket.io')
 
 //const cors = require("cors");
-const morgan = require("morgan");
-
-const pg = require("pg");
-delete pg.native;
-const db = require("./db");
-const chalk = require("chalk");
-
 //const passport = require('passport')
 //const LocalStrategy = require('passport-local')
 //const session = require('express-session')
 //const SequelizeStore = require('connect-session-sequelize')(session.Store)
 //const sessionStore = new SequelizeStore({ db })
-//const bot = require('../ircbot')
 
-app.use(morgan("dev"));
+const PORT = process.env.PORT || 3500
+//const URL = ["http://localhost:3050"];
+
+const server = app.listen(PORT, () => {
+  console.log(`[Express] Listening on port ${PORT}`)
+})
+
+const io = socketio(server)
+require('./socket')(io)
+
+app.use(morgan('dev'))
 //app.use(cors({ credentials: true, origin: URL }))
 // passport.use(
 //   new LocalStrategy(async (username, password, done) => {
@@ -82,39 +75,38 @@ app.use(morgan("dev"));
 // app.use(passport.session())
 
 // body parsing middleware
-app.use(express.json());
-app.use(express.urlencoded({ extended: true }));
-app.use(require("body-parser").text());
+app.use(express.json())
+app.use(express.urlencoded({ extended: true }))
+app.use(require('body-parser').text())
 //app.use("/api", require("./api"));
 //app.use('/auth', require('./auth'))
 app.use(
-  "/static",
-  express.static(path.resolve(__dirname, "..", "build", "static"))
-);
-app.get("/manifest.json", (req:any, res:any) => {
-  res.sendFile(path.resolve(__dirname, "..", "build", "manifest.json"));
-});
-app.get("/favicon.png", (req:any, res:any) => {
-  res.sendFile(path.resolve(__dirname, "..", "build", "favicon.png"));
-});
-app.use("*", express.static(path.resolve(__dirname, "..", "build")));
+  '/static',
+  express.static(path.resolve(__dirname, '..', 'build', 'static'))
+)
+app.get('/manifest.json', (req: any, res: any) => {
+  res.sendFile(path.resolve(__dirname, '..', 'build', 'manifest.json'))
+})
+app.get('/favicon.png', (req: any, res: any) => {
+  res.sendFile(path.resolve(__dirname, '..', 'build', 'favicon.png'))
+})
+app.use('*', express.static(path.resolve(__dirname, '..', 'build')))
 
 // error handling endware
-app.use((err :any, req:any, res:any, next:any) => {
-  console.error(err);
-  console.error(err.stack);
-  res.status(err.status || 500).send(err.message || "Internal server error.");
-  next();
-});
+app.use((err: any, req: any, res: any, next: any) => {
+  console.error(err)
+  console.error(err.stack)
+  res.status(err.status || 500).send(err.message || 'Internal server error.')
+  next()
+})
 
-const startListening = () => {
-};
+const startListening = () => {}
 
 const startApp = async () => {
   //await sessionStore.sync();
-  await startListening();
-};
+  await startListening()
+}
 
-startApp();
+startApp()
 
 module.exports = {}