From 2dda42b7ba16be33bc5d76a1d4ec68fc922f5577 Mon Sep 17 00:00:00 2001
From: elit04 <elit04@fu-berlin.de>
Date: Tue, 23 Nov 2021 17:56:20 -0500
Subject: [PATCH] Sequelize Database in Typescript

---
 server/src/db/{config.js => config.ts} |   6 +-
 server/src/db/db_init.js               |  18 ----
 server/src/db/db_init.ts               |  16 +++
 server/src/db/models/Boat.ts           |  94 ++++++++++++++++
 server/src/db/models/CheckIn.ts        | 114 ++++++++++++++++++++
 server/src/db/models/Customer.ts       |  88 +++++++++++++++
 server/src/db/models/Worker.ts         |  94 ++++++++++++++++
 server/src/db/models/boat.js           |  41 -------
 server/src/db/models/checkin.js        |  53 ---------
 server/src/db/models/checkout.js       |  50 ---------
 server/src/db/models/customer.js       |  30 ------
 server/src/db/models/person.js         |  35 ------
 server/src/routes.ts                   | 144 ++++++++++++-------------
 server/src/{server.js => server.ts}    |  10 +-
 14 files changed, 486 insertions(+), 307 deletions(-)
 rename server/src/db/{config.js => config.ts} (80%)
 delete mode 100644 server/src/db/db_init.js
 create mode 100644 server/src/db/db_init.ts
 create mode 100644 server/src/db/models/Boat.ts
 create mode 100644 server/src/db/models/CheckIn.ts
 create mode 100644 server/src/db/models/Customer.ts
 create mode 100644 server/src/db/models/Worker.ts
 delete mode 100755 server/src/db/models/boat.js
 delete mode 100755 server/src/db/models/checkin.js
 delete mode 100755 server/src/db/models/checkout.js
 delete mode 100644 server/src/db/models/customer.js
 delete mode 100755 server/src/db/models/person.js
 rename server/src/{server.js => server.ts} (59%)

diff --git a/server/src/db/config.js b/server/src/db/config.ts
similarity index 80%
rename from server/src/db/config.js
rename to server/src/db/config.ts
index 26fd962..151a843 100644
--- a/server/src/db/config.js
+++ b/server/src/db/config.ts
@@ -1,9 +1,9 @@
-const { Sequelize } = require("sequelize");
+import { Dialect, Sequelize } from "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;
+const dbDriver = process.env.DB_DRIVER as Dialect;
 const dbPassword = process.env.DB_PASSWORD;
 
 if (!dbName || !dbUser || !dbHost || !dbDriver || !dbPassword) {
@@ -18,4 +18,4 @@ const sequelizeConnection = new Sequelize(dbName, dbUser, dbPassword, {
   logging: false,
 });
 
-module.exports = sequelizeConnection;
+export default sequelizeConnection;
diff --git a/server/src/db/db_init.js b/server/src/db/db_init.js
deleted file mode 100644
index 170e712..0000000
--- a/server/src/db/db_init.js
+++ /dev/null
@@ -1,18 +0,0 @@
-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
new file mode 100644
index 0000000..bdffe46
--- /dev/null
+++ b/server/src/db/db_init.ts
@@ -0,0 +1,16 @@
+import Customer from "./models/Customer";
+import Boat from "./models/Boat";
+import Worker from "./models/Worker";
+import CheckIn from "./models/CheckIn";
+
+const isDev = process.env.NODE_ENV === "development";
+
+const dbInit = () =>
+  Promise.all([
+    Customer.sync({ alter: isDev }),
+    Boat.sync({ alter: isDev }),
+    Worker.sync({ alter: isDev }),
+    CheckIn.sync({ alter: isDev }),
+  ]);
+
+export default dbInit;
diff --git a/server/src/db/models/Boat.ts b/server/src/db/models/Boat.ts
new file mode 100644
index 0000000..2dcd291
--- /dev/null
+++ b/server/src/db/models/Boat.ts
@@ -0,0 +1,94 @@
+import sequelizeConnection from "../config";
+import { DataTypes, Model, Optional } from "sequelize";
+
+interface BoatAttributes {
+  id: number;
+  name: string;
+  status: boolean;
+  active: boolean;
+  seats: number;
+}
+
+export interface BoatAttributesInput extends Optional<BoatAttributes, "id"> {}
+export interface BoatAttributesOutput extends Required<BoatAttributes> {}
+class Boat extends Model<BoatAttributes> implements BoatAttributes {
+  public id!: number;
+  public name!: string;
+  public status: boolean;
+  public active: boolean;
+  public seats: number;
+
+  public readonly createdAt!: Date;
+  public readonly updatedAt!: Date;
+}
+Boat.init(
+  {
+    id: {
+      type: DataTypes.INTEGER,
+      primaryKey: true,
+    },
+    name: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+    },
+    status: {
+      type: DataTypes.BOOLEAN,
+      allowNull: false,
+    },
+    active: {
+      type: DataTypes.BOOLEAN,
+      allowNull: false,
+    },
+    seats: {
+      type: new DataTypes.INTEGER(),
+      allowNull: false,
+    },
+  },
+  {
+    tableName: "boat",
+    sequelize: sequelizeConnection,
+  }
+);
+
+export const create = async (payload: Boat): Promise<BoatAttributesOutput> => {
+  return await Boat.create(payload);
+};
+
+export const update = async (
+  id: number,
+  payload: Partial<BoatAttributesInput>
+): Promise<BoatAttributesOutput> => {
+  const boat = await Boat.findByPk(id);
+  if (!boat) {
+    throw new Error("not found");
+  }
+  return await (boat as Boat).update(payload);
+};
+
+export const getById = async (id: number): Promise<Boat> => {
+  const boat = await Boat.findByPk(id);
+  if (!boat) {
+    throw new Error("not found");
+  }
+  return boat;
+};
+
+export const deleteById = async (id: number): Promise<boolean> => {
+  const deletedBoatCount = await Boat.destroy({
+    where: { id },
+  });
+  return !!deletedBoatCount;
+};
+
+export const getAll = async (): Promise<BoatAttributesOutput[]> => {
+  return Boat.findAll();
+};
+export const BoatService = {
+  create,
+  update,
+  getById,
+  deleteById,
+  getAll,
+};
+
+export default Boat;
diff --git a/server/src/db/models/CheckIn.ts b/server/src/db/models/CheckIn.ts
new file mode 100644
index 0000000..53fb815
--- /dev/null
+++ b/server/src/db/models/CheckIn.ts
@@ -0,0 +1,114 @@
+import sequelizeConnection from "../config";
+import { DataTypes, Model, Optional } from "sequelize";
+
+interface CheckInAttributes {
+  id: number;
+  checkin: Date;
+  checkout: Date;
+  clientID: number;
+  boatID: number;
+  destination: string;
+  note: string;
+}
+export interface CheckInAttributesInput
+  extends Optional<CheckInAttributes, "id"> {}
+export interface CheckInAttributesOutput extends Required<CheckInAttributes> {}
+class CheckIn extends Model<CheckInAttributes> implements CheckInAttributes {
+  public id!: number;
+  public checkin: Date;
+  public checkout: Date;
+  public clientID: number;
+  public boatID: number;
+  public destination: string;
+  public note: string;
+
+  public readonly createdAt!: Date;
+  public readonly updatedAt!: Date;
+}
+CheckIn.init(
+  {
+    id: {
+      type: DataTypes.INTEGER,
+      primaryKey: true,
+    },
+    checkin: {
+      type: DataTypes.DATE,
+      allowNull: false,
+      //  primaryKey: true,
+    },
+    checkout: {
+      type: DataTypes.DATE,
+      allowNull: false,
+      //   primaryKey: true
+    },
+    clientID: {
+      type: DataTypes.INTEGER,
+      //   primaryKey: true,
+      references: {
+        model: "customer",
+        key: "id",
+      },
+    },
+    boatID: {
+      type: DataTypes.INTEGER,
+      references: {
+        model: "boat",
+        key: "id",
+      },
+    },
+    destination: {
+      type: new DataTypes.STRING(),
+    },
+    note: {
+      type: new DataTypes.STRING(),
+    },
+  },
+  {
+    tableName: "checkIn",
+    sequelize: sequelizeConnection,
+  }
+);
+
+export const create = async (
+  payload: CheckIn
+): Promise<CheckInAttributesOutput> => {
+  return await CheckIn.create(payload);
+};
+
+export const update = async (
+  id: number,
+  payload: Partial<CheckInAttributesInput>
+): Promise<CheckInAttributesOutput> => {
+  const checkin = await CheckIn.findByPk(id);
+  if (!checkin) {
+    throw new Error("not found");
+  }
+  return await (checkin as CheckIn).update(payload);
+};
+
+export const getById = async (id: number): Promise<CheckIn> => {
+  const checkin = await CheckIn.findByPk(id);
+  if (!checkin) {
+    throw new Error("not found");
+  }
+  return checkin;
+};
+
+const deleteById = async (id: number): Promise<boolean> => {
+  const deletedCheckInCount = await CheckIn.destroy({
+    where: { id },
+  });
+  return !!deletedCheckInCount;
+};
+export const getAll = async (): Promise<CheckInAttributesOutput[]> => {
+  return CheckIn.findAll();
+};
+export const CheckInService = {
+  create,
+  update,
+  getById,
+  deleteById,
+  getAll,
+};
+
+export default CheckIn;
diff --git a/server/src/db/models/Customer.ts b/server/src/db/models/Customer.ts
new file mode 100644
index 0000000..49de900
--- /dev/null
+++ b/server/src/db/models/Customer.ts
@@ -0,0 +1,88 @@
+import sequelizeConnection from "../config";
+import { DataTypes, Model, Optional } from "sequelize";
+
+interface CustomerAttributes {
+  id: number;
+  firstName: string;
+  lastName: string;
+  email: string;
+}
+export interface CustomerInput extends Optional<CustomerAttributes, "id"> {}
+export interface CustomerOutput extends Required<CustomerAttributes> {}
+class Customer extends Model<CustomerAttributes> implements CustomerAttributes {
+  public id!: number;
+  public firstName!: string;
+  public lastName: string;
+  public email: string;
+
+  public readonly createdAt!: Date;
+  public readonly updatedAt!: Date;
+}
+Customer.init(
+  {
+    id: {
+      type: DataTypes.INTEGER,
+      allowNull: false,
+      primaryKey: true,
+    },
+    firstName: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+    },
+    lastName: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+    },
+    email: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+      unique: true,
+    },
+  },
+  {
+    tableName: "customer",
+    sequelize: sequelizeConnection,
+  }
+);
+
+export const create = async (payload: Customer): Promise<CustomerOutput> => {
+  return await Customer.create(payload);
+};
+
+export const update = async (
+  id: number,
+  payload: Partial<CustomerInput>
+): Promise<CustomerOutput> => {
+  const customer = await Customer.findByPk(id);
+  if (!customer) {
+    throw new Error("not found");
+  }
+  return await (customer as Customer).update(payload);
+};
+
+export const getById = async (id: number): Promise<CustomerInput> => {
+  const customer = await Customer.findByPk(id);
+  if (!customer) {
+    throw new Error("not found");
+  }
+  return customer;
+};
+
+const deleteById = async (id: number): Promise<boolean> => {
+  const deletedCustomerCount = await Customer.destroy({
+    where: { id },
+  });
+  return !!deletedCustomerCount;
+};
+export const getAll = async (): Promise<CustomerOutput[]> => {
+  return Customer.findAll();
+};
+export const CustomerService = {
+  create,
+  update,
+  getById,
+  deleteById,
+  getAll,
+};
+
+export default Customer;
diff --git a/server/src/db/models/Worker.ts b/server/src/db/models/Worker.ts
new file mode 100644
index 0000000..6ba033c
--- /dev/null
+++ b/server/src/db/models/Worker.ts
@@ -0,0 +1,94 @@
+import sequelizeConnection from "../config";
+import { DataTypes, Model, Optional } from "sequelize";
+
+interface WorkerAttributes {
+  email: string;
+  firstName: string;
+  lastName: string;
+  password: string;
+  role: string;
+}
+export interface WorkerInput extends Optional<WorkerAttributes, "email"> {}
+export interface WorkerOutput extends Required<WorkerAttributes> {}
+class Worker extends Model<WorkerAttributes> implements WorkerAttributes {
+  public email!: string;
+  public firstName: string;
+  public lastName: string;
+  public password: string;
+  public role: string;
+
+  public readonly createdAt!: Date;
+  public readonly updatedAt!: Date;
+}
+Worker.init(
+  {
+    email: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+      primaryKey: true,
+      unique: true,
+    },
+    firstName: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+    },
+    lastName: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+    },
+    password: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+    },
+    role: {
+      type: new DataTypes.STRING(),
+      allowNull: false,
+    },
+  },
+  {
+    tableName: "worker",
+    sequelize: sequelizeConnection,
+  }
+);
+
+export const create = async (payload: Worker): Promise<WorkerOutput> => {
+  return await Worker.create(payload);
+};
+
+export const update = async (
+  email: string,
+  payload: Partial<WorkerInput>
+): Promise<WorkerOutput> => {
+  const worker = await Worker.findByPk(email);
+  if (!worker) {
+    throw new Error("not found");
+  }
+  return await (worker as Worker).update(payload);
+};
+
+export const getById = async (email: string): Promise<WorkerInput> => {
+  const worker = await Worker.findByPk(email);
+  if (!worker) {
+    throw new Error("not found");
+  }
+  return worker;
+};
+
+const deleteById = async (email: string): Promise<boolean> => {
+  const deletedWorkerCount = await Worker.destroy({
+    where: { email },
+  });
+  return !!deletedWorkerCount;
+};
+export const getAll = async (): Promise<WorkerOutput[]> => {
+  return Worker.findAll();
+};
+export const WorkerService = {
+  create,
+  update,
+  getById,
+  deleteById,
+  getAll,
+};
+
+export default Worker;
diff --git a/server/src/db/models/boat.js b/server/src/db/models/boat.js
deleted file mode 100755
index 829783d..0000000
--- a/server/src/db/models/boat.js
+++ /dev/null
@@ -1,41 +0,0 @@
-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
deleted file mode 100755
index 46469a6..0000000
--- a/server/src/db/models/checkin.js
+++ /dev/null
@@ -1,53 +0,0 @@
-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
deleted file mode 100755
index 4ca98b2..0000000
--- a/server/src/db/models/checkout.js
+++ /dev/null
@@ -1,50 +0,0 @@
-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
deleted file mode 100644
index b2d933e..0000000
--- a/server/src/db/models/customer.js
+++ /dev/null
@@ -1,30 +0,0 @@
-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
deleted file mode 100755
index 835a1ca..0000000
--- a/server/src/db/models/person.js
+++ /dev/null
@@ -1,35 +0,0 @@
-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 03add24..1188bc5 100644
--- a/server/src/routes.ts
+++ b/server/src/routes.ts
@@ -1,77 +1,77 @@
-// import * as express from 'express';
+import * as express from "express";
+import { UserService } from "./db/models/User";
+import { VehicleTypeService } from "./db/models/VehicleTypes";
 
-// 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.js b/server/src/server.ts
similarity index 59%
rename from server/src/server.js
rename to server/src/server.ts
index 5117a70..feb841c 100644
--- a/server/src/server.js
+++ b/server/src/server.ts
@@ -1,14 +1,14 @@
-require("dotenv/config");
-const express = require("express");
-const dbInit = require("./db/db_init");
-//const apiRou = require("./routes");
+import "dotenv/config";
+import express from "express";
+import dbInit from "./db/db_init";
+//import apiRouter from "./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}`));
 };
-- 
GitLab