diff --git a/server/.env.example b/server/.env.example index d4c7a53bc202a6dd7a9d3f99af9fdbbca52b222b..9f793649d14c5df66f9304a2f709ec81f3d737f5 100644 --- a/server/.env.example +++ b/server/.env.example @@ -3,5 +3,5 @@ DB_NAME=postgres DB_USER=postgres DB_HOST=localhost DB_DRIVER=postgres -DB_PASSWORD=postgres +DB_PASSWORD=123456 TEST_DB_NAME=test diff --git a/server/package.json b/server/package.json index 1baa38110e32688b3795f0dcefe151cf3902bbda..1c811ecac158ab416fe328abbc7cb4fab5b6d62f 100644 --- a/server/package.json +++ b/server/package.json @@ -2,10 +2,11 @@ "name": "server", "version": "1.0.0", "description": "", - "main": "./src/server.ts", + "main": "./src/server.js", "scripts": { "dev": "nodemon", "build": "tsc", + "server": "nodemon server --ignore client", "start": "node ./dist/server.js", "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/server/src/db/config.ts b/server/src/db/config.js similarity index 72% rename from server/src/db/config.ts rename to server/src/db/config.js index 7a4f2b4fa91819e9f2197712fea9aa70c070a82a..b657f3b292af0b1f3ad794837065e4de66896edf 100644 --- a/server/src/db/config.ts +++ b/server/src/db/config.js @@ -1,12 +1,12 @@ -import { Dialect, Sequelize } from 'sequelize' +const { Sequelize } = require('sequelize') const dbName = process.env.DB_NAME const dbUser = process.env.DB_USER const dbHost = process.env.DB_HOST -const dbDriver = process.env.DB_DRIVER as Dialect +const dbDriver = process.env.DB_DRIVER const dbPassword = process.env.DB_PASSWORD -if (!dbName || !dbUser || !dbHost || !dbDriver || !dbPassword){ +if (!dbName || !dbUser || !dbHost || !dbDriver || !dbPassword) { console.error(`Error while reading DB Environment variables! Is maybe the .env file missing? DB Name: "${dbName}", Host: "${dbHost}", User: "${dbUser}", DB Driver(e.g. postgres): "${dbDriver}"`) process.exit(9) @@ -18,4 +18,4 @@ const sequelizeConnection = new Sequelize(dbName, dbUser, dbPassword, { logging: false }) -export default sequelizeConnection +module.exports = sequelizeConnection diff --git a/server/src/db/db_init.js b/server/src/db/db_init.js new file mode 100644 index 0000000000000000000000000000000000000000..c3ee3cd26b46eb85bd39558eefa46d1d05b5f337 --- /dev/null +++ b/server/src/db/db_init.js @@ -0,0 +1,18 @@ +const Customer = require('./models/customer'); +const Boat = require('./models/boat'); +const Person = require('./models/person'); +const Checkin = require('./models/checkin'); +const Checkout = require('./models/checkout'); + +const isDev = process.env.NODE_ENV === 'development' + +const dbInit = () => Promise.all([ + Customer.sync({ alter: isDev }), + Boat.sync({alter: isDev}), + Person.sync({ alter: isDev }), + Checkin.sync({alter: isDev}), + Checkout.sync({ alter: isDev }) + +]); + +module.exports = dbInit; diff --git a/server/src/db/db_init.ts b/server/src/db/db_init.ts deleted file mode 100644 index 0f82494ccd996dbaf288abf026973c4181980413..0000000000000000000000000000000000000000 --- a/server/src/db/db_init.ts +++ /dev/null @@ -1,12 +0,0 @@ -import User from './models/User'; -import VehicleType from './models/VehicleTypes'; - - -const isDev = process.env.NODE_ENV === 'development' - -const dbInit = () => Promise.all([ - User.sync({ alter: isDev }), - VehicleType.sync({ alter: isDev }) -]); - -export default dbInit diff --git a/server/src/db/models/User.ts b/server/src/db/models/User.ts deleted file mode 100644 index 9fb8d8d57fb18a471525eb2b42ae811797393fee..0000000000000000000000000000000000000000 --- a/server/src/db/models/User.ts +++ /dev/null @@ -1,89 +0,0 @@ -import sequelizeConnection from '../config' -import {DataTypes, Model, Optional} from "sequelize"; - -interface UserAttributes { - id: number; - name: string; - isBootsWart: boolean; - isCoordinator: boolean; - email: string; - notifications: boolean -} -export interface UserInput extends Optional<UserAttributes, 'id'> {} -export interface UserOutput extends Required<UserAttributes> {} -class User extends Model<UserAttributes> implements UserAttributes { - public id!: number; - public name!: string; - public isBootsWart: boolean; - public isCoordinator: boolean; - public email: string; - public notifications: boolean; - - public readonly createdAt!: Date; - public readonly updatedAt!: Date; -} -User.init( - { - id: { - type: DataTypes.INTEGER, - autoIncrement: true, - primaryKey: true, - }, - name: { - type: new DataTypes.STRING, - allowNull: false, - }, - isBootsWart: { - type: DataTypes.BOOLEAN, - allowNull: false, - }, - isCoordinator: { - type: DataTypes.BOOLEAN, - allowNull: false, - }, - email: { - type: new DataTypes.STRING, - allowNull: false, - }, - notifications: { - type: DataTypes.BOOLEAN, - allowNull: false, - } - }, - { - tableName: "users", - sequelize: sequelizeConnection, - } -); - -export const create = async (payload: User): Promise<UserOutput> => { - return await User.create(payload) -} -export const update = async (id: number, payload: Partial<UserInput>): Promise<UserOutput> => { - const user = await User.findByPk(id) - if (!user) { - throw new Error('not found') - } - return await (user as User).update(payload) -} -export const getById = async (id: number): Promise<UserInput> => { - const user = await User.findByPk(id) - if (!user) { - throw new Error('not found') - } - return user -} -const deleteById = async (id: number): Promise<boolean> => { - const deletedUserCount = await User.destroy({ - where: {id} - }) - return !!deletedUserCount -} -export const getAll = async (): Promise<UserOutput[]> => { - return User.findAll() -} -export const UserService = { - create, update, getById, deleteById, getAll -} - -export default User diff --git a/server/src/db/models/VehicleTypes.ts b/server/src/db/models/VehicleTypes.ts deleted file mode 100644 index c97d04991241167bee87e715319873bc913f26a8..0000000000000000000000000000000000000000 --- a/server/src/db/models/VehicleTypes.ts +++ /dev/null @@ -1,75 +0,0 @@ -import sequelizeConnection from '../config' -import {DataTypes, Model, Optional} from "sequelize"; - -interface VehicleTypeAttributes { - id: number; - name: string; - seats: number; -} -export interface VehicleTypeAttributesInput extends Optional<VehicleTypeAttributes, 'id'> {} -export interface VehicleTypeAttributesOutput extends Required<VehicleTypeAttributes> {} -class VehicleType extends Model<VehicleTypeAttributes> implements VehicleTypeAttributes { - public id!: number; - public name!: string; - public seats: number; - - public readonly createdAt!: Date; - public readonly updatedAt!: Date; -} -VehicleType.init( - { - id: { - type: DataTypes.INTEGER, - autoIncrement: true, - primaryKey: true, - }, - name: { - type: new DataTypes.STRING, - allowNull: false, - }, - seats: { - type: new DataTypes.INTEGER, - allowNull: false, - }, - }, - { - tableName: "vehicleTypes", - sequelize: sequelizeConnection, - } -); - -export const create = async (payload: VehicleType): Promise<VehicleTypeAttributesOutput> => { - return await VehicleType.create(payload) -} - -export const update = async (id: number, payload: Partial<VehicleTypeAttributesInput>): Promise<VehicleTypeAttributesOutput> => { - const type = await VehicleType.findByPk(id) - if (!type) { - throw new Error('not found') - } - return await (type as VehicleType).update(payload) -} - -export const getById = async (id: number): Promise<VehicleType> => { - const type = await VehicleType.findByPk(id) - if (!type) { - throw new Error('not found') - } - return type -} - -export const deleteById = async (id: number): Promise<boolean> => { - const deletedTypeCount = await VehicleType.destroy({ - where: {id} - }) - return !!deletedTypeCount -} - -export const getAll = async (): Promise<VehicleTypeAttributesOutput[]> => { - return VehicleType.findAll() -} -export const VehicleTypeService = { - create, update, getById, deleteById, getAll -} - -export default VehicleType diff --git a/server/src/db/models/boat.js b/server/src/db/models/boat.js new file mode 100755 index 0000000000000000000000000000000000000000..b357c53179f44804bb2b436c8cdcba77e7133ddf --- /dev/null +++ b/server/src/db/models/boat.js @@ -0,0 +1,39 @@ +const Sequelize = require('sequelize') +const db = require('../config') + +const Boat = db.define('boat', { + + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + name: { + allowNull: false, + type: Sequelize.STRING + }, + status: { + allowNull: false, + type: Sequelize.BOOLEAN, + }, + active: { + allowNull: false, + type: Sequelize.BOOLEAN + }, + class: { + allowNull: false, + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }, {freezeTableName: true} //to force keeping chosen table-names +) + +module.exports = Boat diff --git a/server/src/db/models/checkin.js b/server/src/db/models/checkin.js new file mode 100755 index 0000000000000000000000000000000000000000..3917fc6b936f7f3862393cbf3bb772f4c311d0cf --- /dev/null +++ b/server/src/db/models/checkin.js @@ -0,0 +1,59 @@ +const Sequelize = require('sequelize') +const db = require('../config') + +const Checkin = db.define('checkin', { + startTime: { + + + primaryKey: true, + type: Sequelize.DATE + }, + endTime: { + + primaryKey: true, + type: Sequelize.DATE + }, + clientID: { + + primaryKey: true, + type: Sequelize.INTEGER, + references: { + model: 'customer', + key: 'id', + } + + }, + + boatID: { + + // primaryKey: true, + type: Sequelize.INTEGER, + references: { + model: 'boat', + key: 'id', + } + + }, + + destination: { + + type: Sequelize.STRING + }, + + note: { + + type: Sequelize.STRING + }, + + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }, {freezeTableName: true} //to force keeping chosen table-names +) + +module.exports = Checkin diff --git a/server/src/db/models/checkout.js b/server/src/db/models/checkout.js new file mode 100755 index 0000000000000000000000000000000000000000..d3da04eb55562c35768f8e71769a83caf62af454 --- /dev/null +++ b/server/src/db/models/checkout.js @@ -0,0 +1,48 @@ +const Sequelize = require('sequelize') +const db = require('../config') + +const Checkout = db.define('checkout', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + clientId: { + type: Sequelize.INTEGER, + // primaryKey: true, + type: Sequelize.INTEGER, + references: { + model: 'customer', + key: 'id', + } + + }, + boatId: { + type: Sequelize.INTEGER, + // primaryKey: true, + type: Sequelize.INTEGER, + references: { + model: 'boat', + key: 'id', + } + }, + timeStamp: { + type: Sequelize.DATE, + primaryKey: true + }, + note: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }, {freezeTableName: true} //to force keeping chosen table-names +) + +module.exports = Checkout diff --git a/server/src/db/models/customer.js b/server/src/db/models/customer.js new file mode 100644 index 0000000000000000000000000000000000000000..fd62676c746ca00ef99bf031e63a45684fcaaaeb --- /dev/null +++ b/server/src/db/models/customer.js @@ -0,0 +1,27 @@ +const Sequelize = require('sequelize') +const db = require('../config') + +const Customer = db.define('customer', { + //attributes + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + firstName: { + allowNull: false, + type: Sequelize.STRING + }, + lastName: { + allowNull: false, + type: Sequelize.STRING + }, + email: { + allowNull: false, + type: Sequelize.STRING + } + }, {freezeTableName: true} //to force keeping chosen table-names +) + +module.exports = Customer diff --git a/server/src/db/models/person.js b/server/src/db/models/person.js new file mode 100755 index 0000000000000000000000000000000000000000..5b84fc2a1909669440210f3c33e35445ec23d12d --- /dev/null +++ b/server/src/db/models/person.js @@ -0,0 +1,34 @@ +const Sequelize = require('sequelize') +const db = require('../config') + +const Person = db.define('person', { + + email: { + type: Sequelize.STRING, + primaryKey: true + + }, + firstName: { + type: Sequelize.STRING + }, + lastName: { + type: Sequelize.STRING + }, + pass: { + type: Sequelize.STRING + }, + role: { + type: Sequelize.STRING + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + } , {freezeTableName: true} //to force keeping chosen table-names +) + +module.exports = Person diff --git a/server/src/routes.ts b/server/src/routes.ts index 8d68c465d181f2169cc141be52bf6ee6b62942ef..03add246ef4dde0a4644c92f47e4bba7ec0bfaf2 100644 --- a/server/src/routes.ts +++ b/server/src/routes.ts @@ -1,79 +1,77 @@ -import * as express from 'express'; -import {UserService} from "./db/models/User"; -import {VehicleTypeService} from "./db/models/VehicleTypes"; +// import * as express from 'express'; -const router = express.Router(); +// const router = express.Router(); -// Vehicle Type -router.get('/api/vehicleType/:id', async (req, res) => { - const id = Number(req.params.id) - const result = await VehicleTypeService.getById(id) - return res.status(200).send(result) -}); -router.post('/api/vehicleType/', async (req, res) => { - const payload = req.body - const result = await VehicleTypeService.create(payload) - return res.status(200).send(result) -}); -router.put('/api/vehicleType/:id', async (req, res) => { - const id = Number(req.params.id) - const payload = req.body - const result = await VehicleTypeService.update(id, payload) - return res.status(201).send(result) -}); -router.delete('/api/vehicleType/:id', async (req, res) => { - const id = Number(req.params.id) - const result = await VehicleTypeService.deleteById(id) - return res.status(204).send({ - success: result - }) -}); -router.get('/api/vehicleType/', async (req, res) => { - const results = await VehicleTypeService.getAll() - return res.status(200).send(results) -}); +// // Vehicle Type +// router.get('/api/vehicleType/:id', async (req, res) => { +// const id = Number(req.params.id) +// const result = await VehicleTypeService.getById(id) +// return res.status(200).send(result) +// }); +// router.post('/api/vehicleType/', async (req, res) => { +// const payload = req.body +// const result = await VehicleTypeService.create(payload) +// return res.status(200).send(result) +// }); +// router.put('/api/vehicleType/:id', async (req, res) => { +// const id = Number(req.params.id) +// const payload = req.body +// const result = await VehicleTypeService.update(id, payload) +// return res.status(201).send(result) +// }); +// router.delete('/api/vehicleType/:id', async (req, res) => { +// const id = Number(req.params.id) +// const result = await VehicleTypeService.deleteById(id) +// return res.status(204).send({ +// success: result +// }) +// }); +// router.get('/api/vehicleType/', async (req, res) => { +// const results = await VehicleTypeService.getAll() +// return res.status(200).send(results) +// }); -// USER -router.get('/api/user/:id', async (req, res) => { - const id = Number(req.params.id) - const result = await UserService.getById(id) - return res.status(200).send(result) -}); -router.post('/api/user/', async (req, res) => { - const payload = req.body - const result = await UserService.create(payload) - return res.status(200).send(result) -}); -router.put('/api/user/:id', async (req, res) => { - const id = Number(req.params.id) - const payload = req.body - const result = await UserService.update(id, payload) - return res.status(201).send(result) -}); -router.delete('/api/user/:id', async (req, res) => { - const id = Number(req.params.id) - const result = await UserService.deleteById(id) - return res.status(204).send({ - success: result - }) -}); -router.get('/api/user/', async (req, res) => { - const results = await UserService.getAll() - return res.status(200).send(results) -}); +// // USER +// router.get('/api/user/:id', async (req, res) => { +// const id = Number(req.params.id) +// const result = await UserService.getById(id) +// return res.status(200).send(result) +// }); +// router.post('/api/user/', async (req, res) => { +// const payload = req.body +// const result = await UserService.create(payload) +// return res.status(200).send(result) +// }); +// router.put('/api/user/:id', async (req, res) => { +// const id = Number(req.params.id) +// const payload = req.body +// const result = await UserService.update(id, payload) +// return res.status(201).send(result) +// }); +// router.delete('/api/user/:id', async (req, res) => { +// const id = Number(req.params.id) +// const result = await UserService.deleteById(id) +// return res.status(204).send({ +// success: result +// }) +// }); +// router.get('/api/user/', async (req, res) => { +// const results = await UserService.getAll() +// return res.status(200).send(results) +// }); -// Other TODO -/* -router.get('/api/login', (req, res) => { - console.log(req.body) - res.json({'success': true, data: []}); -}); - */ -router.post('/api/logEntry', (req, res) => { - console.log(req.body) - res.json({'success': true}); -}); +// // Other TODO +// /* +// router.get('/api/login', (req, res) => { +// console.log(req.body) +// res.json({'success': true, data: []}); +// }); +// */ +// router.post('/api/logEntry', (req, res) => { +// console.log(req.body) +// res.json({'success': true}); +// }); -export default router; +// export default router; diff --git a/server/src/server.ts b/server/src/server.js similarity index 53% rename from server/src/server.ts rename to server/src/server.js index bad4cd10df712d506cde9424d0090058295c7bf8..badacf27e7b4b6193872ac27162d792e04b372ea 100644 --- a/server/src/server.ts +++ b/server/src/server.js @@ -1,16 +1,16 @@ -import "dotenv/config"; -import express from "express"; -import dbInit from "./db/db_init"; -import apiRouter from "./routes"; +require("dotenv/config"); +const express = require("express"); +const dbInit = require("./db/db_init"); +//const apiRou = require("./routes"); let init = async () => { await dbInit(); const app = express(); app.use(express.json()); - app.use(apiRouter); + // app.use(apiRouter); const port = process.env.PORT || 4000; app.listen(port, () => console.log(`Server listening on port: ${port}`)); }; -init().then(() => {}); +init().then(() => { }); diff --git a/server/tsconfig.json b/server/tsconfig.json index 0e254f35cc551a02110d4c10f961282ff1c92599..397bc04453e92e9ff35dfc6070c46ea8713834bc 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -1,20 +1,20 @@ -{ - "compilerOptions": { - "module": "commonjs", - "esModuleInterop": true, - "target": "es6", - "noImplicitAny": true, - "moduleResolution": "node", - "sourceMap": true, - "outDir": "dist", - "baseUrl": ".", - "paths": { - "*": [ - "node_modules/*" - ] - } - }, - "include": [ - "src/**/*" - ] -} +// { +// "compilerOptions": { +// "module": "commonjs", +// "esModuleInterop": true, +// "target": "es6", +// "noImplicitAny": true, +// "moduleResolution": "node", +// "sourceMap": true, +// "outDir": "dist", +// "baseUrl": ".", +// "paths": { +// "*": [ +// "node_modules/*" +// ] +// } +// }, +// "include": [ +// "src/**/*" +// ] +// }