split per app
This commit is contained in:
		
							
								
								
									
										10
									
								
								lib/api/get-app.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								lib/api/get-app.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const db = require ('../db');
 | 
				
			||||||
 | 
					const { http } = require ('@sapphirecode/consts');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = async (req, res) => {
 | 
				
			||||||
 | 
					  const apps = await db.app.get_all ();
 | 
				
			||||||
 | 
					  res.status (http.status_ok)
 | 
				
			||||||
 | 
					    .json (apps);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@@ -4,6 +4,15 @@ const db = require ('../db');
 | 
				
			|||||||
const { http } = require ('@sapphirecode/consts');
 | 
					const { http } = require ('@sapphirecode/consts');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = async (req, res) => {
 | 
					module.exports = async (req, res) => {
 | 
				
			||||||
  res.status (http.status_ok)
 | 
					  if (
 | 
				
			||||||
    .json (await db.get_all ());
 | 
					    typeof req.headers.app_id === 'undefined'
 | 
				
			||||||
 | 
					    || isNaN (parseInt (req.headers.app_id))
 | 
				
			||||||
 | 
					  ) {
 | 
				
			||||||
 | 
					    res.status (http.status_bad_request)
 | 
				
			||||||
 | 
					      .end ();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else {
 | 
				
			||||||
 | 
					    res.status (http.status_ok)
 | 
				
			||||||
 | 
					      .json (await db.log.get_all (parseInt (req.headers.app_id)));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,5 +4,6 @@ const router = require ('express')
 | 
				
			|||||||
  .Router ();
 | 
					  .Router ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
router.get ('/log', require ('./get-log'));
 | 
					router.get ('/log', require ('./get-log'));
 | 
				
			||||||
 | 
					router.get ('/app', require ('./get-app'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = router;
 | 
					module.exports = router;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								lib/db/app.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								lib/db/app.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = (get_db) => ({
 | 
				
			||||||
 | 
					  get_all () {
 | 
				
			||||||
 | 
					    const knex = get_db ();
 | 
				
			||||||
 | 
					    return knex ('app')
 | 
				
			||||||
 | 
					      .select ();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@@ -18,9 +18,11 @@ async function init (use_fake_seed) {
 | 
				
			|||||||
    await db.seed.run ({ specific: 'fake.js' });
 | 
					    await db.seed.run ({ specific: 'fake.js' });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function get_all () {
 | 
					function get_db () {
 | 
				
			||||||
  return db ('log')
 | 
					  return db;
 | 
				
			||||||
    .select ();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = { init, get_all };
 | 
					const log = require ('./log') (get_db);
 | 
				
			||||||
 | 
					const app = require ('./app') (get_db);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = { init, log, app };
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								lib/db/log.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								lib/db/log.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = (get_db) => ({
 | 
				
			||||||
 | 
					  get_all (app_id) {
 | 
				
			||||||
 | 
					    const knex = get_db ();
 | 
				
			||||||
 | 
					    return knex.select (
 | 
				
			||||||
 | 
					      'id',
 | 
				
			||||||
 | 
					      'message',
 | 
				
			||||||
 | 
					      'data',
 | 
				
			||||||
 | 
					      'timestamp'
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					      .from ('log')
 | 
				
			||||||
 | 
					      .where ({ app_id });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@@ -1,15 +1,29 @@
 | 
				
			|||||||
'use strict';
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function up (knex) {
 | 
					async function create_app (knex) {
 | 
				
			||||||
 | 
					  await knex.schema.createTable ('app', (table) => {
 | 
				
			||||||
 | 
					    table.increments ('id');
 | 
				
			||||||
 | 
					    table.string ('name');
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function create_log (knex) {
 | 
				
			||||||
  await knex.schema.createTable ('log', (table) => {
 | 
					  await knex.schema.createTable ('log', (table) => {
 | 
				
			||||||
    table.increments ('id');
 | 
					    table.increments ('id');
 | 
				
			||||||
    table.string ('app');
 | 
					    table.integer ('app_id')
 | 
				
			||||||
 | 
					      .references ('id')
 | 
				
			||||||
 | 
					      .inTable ('app');
 | 
				
			||||||
    table.string ('message');
 | 
					    table.string ('message');
 | 
				
			||||||
    table.json ('data');
 | 
					    table.json ('data');
 | 
				
			||||||
    table.timestamp ('timestamp');
 | 
					    table.timestamp ('timestamp');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function up (knex) {
 | 
				
			||||||
 | 
					  await create_app (knex);
 | 
				
			||||||
 | 
					  await create_log (knex);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function down () {
 | 
					function down () {
 | 
				
			||||||
  // noop
 | 
					  // noop
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,16 @@
 | 
				
			|||||||
const faker = require ('faker');
 | 
					const faker = require ('faker');
 | 
				
			||||||
const sn = require ('simplex-noise');
 | 
					const sn = require ('simplex-noise');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const apps = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function create_app (knex) {
 | 
				
			||||||
 | 
					  const [ id ] = await knex ('app')
 | 
				
			||||||
 | 
					    .insert (
 | 
				
			||||||
 | 
					      { name: faker.random.word () }
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  apps.push (id);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function create_log (index, simplex) {
 | 
					function create_log (index, simplex) {
 | 
				
			||||||
  const data = {
 | 
					  const data = {
 | 
				
			||||||
    num1: faker.random.number (),
 | 
					    num1: faker.random.number (),
 | 
				
			||||||
@@ -10,7 +20,7 @@ function create_log (index, simplex) {
 | 
				
			|||||||
    num3: simplex.noise2D (index * 0.1, 1000)
 | 
					    num3: simplex.noise2D (index * 0.1, 1000)
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    app:       faker.random.word (),
 | 
					    app_id:       faker.random.arrayElement (apps),
 | 
				
			||||||
    message:   faker.random.words (),
 | 
					    message:   faker.random.words (),
 | 
				
			||||||
    data:      JSON.stringify (data),
 | 
					    data:      JSON.stringify (data),
 | 
				
			||||||
    timestamp: faker.date.recent ()
 | 
					    timestamp: faker.date.recent ()
 | 
				
			||||||
@@ -18,14 +28,21 @@ function create_log (index, simplex) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function seed (knex) {
 | 
					async function seed (knex) {
 | 
				
			||||||
 | 
					  await knex ('log')
 | 
				
			||||||
 | 
					    .del ();
 | 
				
			||||||
 | 
					  await knex ('app')
 | 
				
			||||||
 | 
					    .del ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // eslint-disable-next-line no-console
 | 
					  // eslint-disable-next-line no-console
 | 
				
			||||||
  console.log ('creating seeds');
 | 
					  console.log ('creating seeds');
 | 
				
			||||||
 | 
					  for (let i = 0; i < 5; i++)
 | 
				
			||||||
 | 
					    // eslint-disable-next-line no-await-in-loop
 | 
				
			||||||
 | 
					    await create_app (knex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const simplex = (new sn);
 | 
					  const simplex = (new sn);
 | 
				
			||||||
  const log = (Array (20))
 | 
					  const log = (Array (20))
 | 
				
			||||||
    .fill (() => null)
 | 
					    .fill (() => null)
 | 
				
			||||||
    .map ((a, index) => create_log (index, simplex));
 | 
					    .map ((a, index) => create_log (index, simplex));
 | 
				
			||||||
  await knex ('log')
 | 
					 | 
				
			||||||
    .del ();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  await knex.batchInsert ('log', log, 10);
 | 
					  await knex.batchInsert ('log', log, 10);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,10 +11,16 @@ import Vue from 'vue';
 | 
				
			|||||||
import VueRouter from 'vue-router';
 | 
					import VueRouter from 'vue-router';
 | 
				
			||||||
import AppView from '../views/AppView.vue';
 | 
					import AppView from '../views/AppView.vue';
 | 
				
			||||||
import NotFound from '../views/NotFound.vue';
 | 
					import NotFound from '../views/NotFound.vue';
 | 
				
			||||||
 | 
					import Home from '../views/Home.vue';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Vue.use (VueRouter);
 | 
					Vue.use (VueRouter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes = [
 | 
					const routes = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    path:      '/',
 | 
				
			||||||
 | 
					    name:      'Home',
 | 
				
			||||||
 | 
					    component: Home
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path:      '/app/:id',
 | 
					    path:      '/app/:id',
 | 
				
			||||||
    name:      'AppView',
 | 
					    name:      'AppView',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,8 +18,8 @@ export default new Vuex.Store ({
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  actions:   {
 | 
					  actions:   {
 | 
				
			||||||
    async get_log ({ commit }) {
 | 
					    async get_log ({ commit }, { app_id }) {
 | 
				
			||||||
      const log = await fetch ('/log')
 | 
					      const log = await fetch ('/log', { headers: { app_id } })
 | 
				
			||||||
        .then ((res) => res.json ());
 | 
					        .then ((res) => res.json ());
 | 
				
			||||||
      commit ('set_log', log);
 | 
					      commit ('set_log', log);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,7 @@ export default {
 | 
				
			|||||||
    ...Vuex.mapState ({ log: (state) => state.log })
 | 
					    ...Vuex.mapState ({ log: (state) => state.log })
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  mounted () {
 | 
					  mounted () {
 | 
				
			||||||
    this.get_log ();
 | 
					    this.get_log ({ app_id: this.$route.params.id });
 | 
				
			||||||
    document.body.addEventListener ('keydown', (ev) => {
 | 
					    document.body.addEventListener ('keydown', (ev) => {
 | 
				
			||||||
      if (ev.key === 's' && ev.ctrlKey) {
 | 
					      if (ev.key === 's' && ev.ctrlKey) {
 | 
				
			||||||
        this.save_config ();
 | 
					        this.save_config ();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								src/views/Home.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/views/Home.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <ul>
 | 
				
			||||||
 | 
					    <li
 | 
				
			||||||
 | 
					      v-for="(app,key) in apps"
 | 
				
			||||||
 | 
					      :key="key"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <a
 | 
				
			||||||
 | 
					        :href="'/app/' + app.id"
 | 
				
			||||||
 | 
					        v-text="app.name"
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    </li>
 | 
				
			||||||
 | 
					  </ul>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  data () {
 | 
				
			||||||
 | 
					    return { apps: [] };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  async mounted () {
 | 
				
			||||||
 | 
					    this.apps = await fetch ('/app')
 | 
				
			||||||
 | 
					      .then ((res) => res.json ());
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user