diff --git a/software/backend/database.ts b/software/backend/database.ts
index c5a0551..fbe9012 100644
--- a/software/backend/database.ts
+++ b/software/backend/database.ts
@@ -1,11 +1,11 @@
import { Sequelize } from "sequelize-typescript"
// Models
-import { Categories } from "./models/categories.model"
+import { Category } from "./models/category.model"
import { OrderedItem } from "./models/orderedItem.model"
-import { Orders } from "./models/orders.model"
-import { Products } from "./models/products.model"
-import { Users } from "./models/users.model"
+import { Order } from "./models/order.model"
+import { Product } from "./models/product.model"
+import { Account } from "./models/account.model"
const dbName = "database"
const dbUser = "root"
@@ -18,12 +18,12 @@ export const sequelize = new Sequelize({
username: dbUser,
password: dbPassword,
storage: "database.sqlite",
- models: [ Categories, OrderedItem, Orders, Products, Users ]
+ models: [ Category, Product, Account, Order, OrderedItem ]
})
export function startDatabase() {
// Create database and tables
- sequelize.sync({ force: false })
+ sequelize.sync({ force: true })
.then(() => {
console.log(`Database & tables created!`)
})
diff --git a/software/backend/models/users.model.ts b/software/backend/models/account.model.ts
similarity index 67%
rename from software/backend/models/users.model.ts
rename to software/backend/models/account.model.ts
index 3f10261..04683d7 100644
--- a/software/backend/models/users.model.ts
+++ b/software/backend/models/account.model.ts
@@ -1,8 +1,8 @@
import { Table, Column, Model, HasMany } from 'sequelize-typescript';
-import { Orders } from './orders.model';
+import { Order } from './order.model';
@Table
-export class Users extends Model {
+export class Account extends Model {
@Column
username: string
@@ -19,6 +19,6 @@ export class Users extends Model {
lastName: string
// Relations
- @HasMany(() => Orders)
- orders: Orders[]
+ @HasMany(() => Order)
+ orders: Order[]
}
\ No newline at end of file
diff --git a/software/backend/models/categories.model.ts b/software/backend/models/categories.model.ts
deleted file mode 100644
index 8cb3c68..0000000
--- a/software/backend/models/categories.model.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Table, Column, Model, BelongsTo, ForeignKey } from 'sequelize-typescript';
-import { Products } from './products.model';
-
-@Table
-export class Categories extends Model {
- @Column
- name: string
-
- @ForeignKey(() => Products)
- productId: number
-
- @BelongsTo(() => Products)
- product: Products
-}
\ No newline at end of file
diff --git a/software/backend/models/category.model.ts b/software/backend/models/category.model.ts
new file mode 100644
index 0000000..b8169cc
--- /dev/null
+++ b/software/backend/models/category.model.ts
@@ -0,0 +1,14 @@
+import { Table, Column, Model, BelongsTo, ForeignKey, HasMany } from 'sequelize-typescript';
+import { Product } from './product.model';
+
+@Table
+export class Category extends Model {
+ @Column
+ name: string
+
+ @Column
+ icon: string
+
+ @HasMany(() => Product)
+ product: Product
+}
\ No newline at end of file
diff --git a/software/backend/models/order.model.ts b/software/backend/models/order.model.ts
new file mode 100644
index 0000000..2ed5f74
--- /dev/null
+++ b/software/backend/models/order.model.ts
@@ -0,0 +1,21 @@
+import { Table, Column, Model, BelongsTo, ForeignKey, HasMany, BelongsToMany } from 'sequelize-typescript';
+import { Account } from './account.model';
+import { OrderedItem } from './orderedItem.model';
+import { Product } from './product.model';
+
+@Table
+export class Order extends Model {
+ @Column
+ @ForeignKey(() => Account)
+ accountId: number
+
+ @Column
+ totalPrice: number
+
+ // Relations
+ @BelongsTo(() => Account)
+ user: Account
+
+ @BelongsToMany(() => Product, () => OrderedItem)
+ orderedItems: OrderedItem
+}
\ No newline at end of file
diff --git a/software/backend/models/orderedItem.model.ts b/software/backend/models/orderedItem.model.ts
index 5ce24da..eae41b9 100644
--- a/software/backend/models/orderedItem.model.ts
+++ b/software/backend/models/orderedItem.model.ts
@@ -1,15 +1,15 @@
import { Table, Column, Model, BelongsTo, ForeignKey, HasMany } from 'sequelize-typescript';
-import { Orders } from './orders.model';
-import { Products } from './products.model';
+import { Order } from './order.model';
+import { Product } from './product.model';
@Table
export class OrderedItem extends Model {
@Column
- @ForeignKey(() => Orders)
+ @ForeignKey(() => Order)
orderId: number
@Column
- @ForeignKey(() => Products)
+ @ForeignKey(() => Product)
productId: number
@Column
@@ -17,11 +17,4 @@ export class OrderedItem extends Model {
@Column
totalPrice: number
-
- // Relations
- @BelongsTo(() => Orders)
- order: Orders
-
- @HasMany(() => Products)
- products: Products[]
}
\ No newline at end of file
diff --git a/software/backend/models/orders.model.ts b/software/backend/models/orders.model.ts
deleted file mode 100644
index d9ddbab..0000000
--- a/software/backend/models/orders.model.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Table, Column, Model, BelongsTo, ForeignKey, HasMany } from 'sequelize-typescript';
-import { Users } from './users.model';
-import { OrderedItem } from './orderedItem.model';
-
-@Table
-export class Orders extends Model {
- @Column
- @ForeignKey(() => Users)
- userNameId: number
-
- @Column
- totalPrice: number
-
- // Relations
- @BelongsTo(() => Users)
- user: Users
-
- @HasMany(() => OrderedItem)
- orderedItems: OrderedItem
-}
\ No newline at end of file
diff --git a/software/backend/models/product.model.ts b/software/backend/models/product.model.ts
new file mode 100644
index 0000000..d5a1885
--- /dev/null
+++ b/software/backend/models/product.model.ts
@@ -0,0 +1,30 @@
+import { Table, Column, Model, ForeignKey, BelongsTo, BelongsToMany } from 'sequelize-typescript';
+import { Category } from './category.model';
+import { OrderedItem } from './orderedItem.model';
+import { Order } from './order.model';
+
+@Table
+export class Product extends Model {
+ @Column
+ brand: string
+
+ @Column
+ name: string
+
+ @Column
+ @ForeignKey(() => Category)
+ categoryId: number
+
+ @Column
+ price: number
+
+ @Column
+ discount: number
+
+ // Relations
+ @BelongsTo(() => Category)
+ category: Category
+
+ @BelongsToMany(() => Order,() => OrderedItem)
+ orderedItem: OrderedItem
+}
\ No newline at end of file
diff --git a/software/backend/models/products.model.ts b/software/backend/models/products.model.ts
deleted file mode 100644
index 55f0319..0000000
--- a/software/backend/models/products.model.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { Table, Column, Model, ForeignKey, BelongsTo, HasOne } from 'sequelize-typescript';
-import { Categories } from './categories.model';
-import { OrderedItem } from './orderedItem.model';
-
-@Table
-export class Products extends Model {
- @Column
- name: string
-
- @Column
- @ForeignKey(() => Categories)
- categoryId: number
-
- @Column
- @ForeignKey(() => OrderedItem)
- orderedItemId: number
-
- @Column
- price: number
-
- @Column
- discount: number
-
- // Relations
- @BelongsTo(() => OrderedItem)
- orderedItem: OrderedItem
-
- @HasOne(() => Categories)
- category: Categories
-}
\ No newline at end of file
diff --git a/software/backend/routes/account.routes.ts b/software/backend/routes/account.routes.ts
new file mode 100644
index 0000000..3271de6
--- /dev/null
+++ b/software/backend/routes/account.routes.ts
@@ -0,0 +1,12 @@
+import { Router, Request, Response, NextFunction } from "express";
+import { Account } from "../models/account.model";
+
+export const account = Router()
+
+account.get("/", (req: Request, res: Response, next: NextFunction)=> {
+ Account.findAll()
+ .then(accounts => {
+ res.json(accounts)
+ })
+ .catch(next)
+})
\ No newline at end of file
diff --git a/software/backend/routes/api.routes.ts b/software/backend/routes/api.routes.ts
index 97c5241..a975a0f 100644
--- a/software/backend/routes/api.routes.ts
+++ b/software/backend/routes/api.routes.ts
@@ -1,7 +1,80 @@
import { Request, Response, NextFunction, Router } from 'express'
+import { Category } from '../models/category.model'
+import { OrderedItem } from '../models/orderedItem.model'
+import { Order } from '../models/order.model'
+import { Product } from '../models/product.model'
+import { Account } from '../models/account.model'
export const api = Router()
api.get("/", (req: Request, res: Response, next: NextFunction) => {
res.send("Hello World!")
+})
+
+api.post("/resetdatabase", (req: Request, res: Response, next: NextFunction) => {
+ // Step 1: Delete all data tables
+ Category.destroy({ truncate: true })
+ OrderedItem.destroy({ truncate: true })
+ Order.destroy({ truncate: true })
+ Product.destroy({ truncate: true })
+ Account.destroy({ truncate: true })
+
+ // Step 2: Prepopulate with default values
+ Category.bulkCreate(
+ [
+ { id: 0, icon: "mdi-chip", name: "Electronic" },
+ { id: 1, icon: "mdi-soccer", name: "Sports" },
+ { id: 2, icon: "mdi-tshirt-crew", name: "Clothes" },
+ { id: 3, icon: "mdi-bookshelf", name: "Books" }
+ ]
+ )
+
+ Product.bulkCreate(
+ [
+ { id: 0, brand: "Tuxedo", name: "Hypherion Ultra Max", price: 999.99, categoryId: 0, discount: 0 },
+ { id: 1, brand: "Puma", name: "Men's Shirt", price: 14.99, categoryId: 2, discount: 0 },
+ { id: 2, brand: "Puma", name: "Woman's Shirt", price: 14.99, categoryId: 2, discount: 0 },
+ { id: 3, brand: "George Orwell", name: "1984", price: 9.99, categoryId: 3, discount: 0 },
+ { id: 4, brand: "Johann W. Goethe", name: "Faust", price: 4.99, categoryId: 3, discount: 0 },
+ { id: 5, brand: "Theodor Sturm", name: "Der Schimmelreiter", price: 4.99, categoryId: 3, discount: 0 },
+ { id: 6, brand: "Aldous Huxley", name: "Brave New World", price: 7.99, categoryId: 3, discount: 0 },
+ ]
+ )
+
+ Account.bulkCreate(
+ [
+ { id: 0, username: "hagemeister93", password: "Xjt3qb5t", address: "Laportestraße 22, 30449 Hannover", firstName: "Laurin", lastName: "Hagemeister" },
+ { id: 1, username: "katjaStoiber", password: "target123", address: "Gustav-Adolf-Straße 30, 30167 Hannover", firstName: "Katja", lastName: "Stoiber" },
+ { id: 2, username: "oetkerohnek", password: "iloveyou", address: "Eckermannstraße 1, 30625 Hannover", firstName: "Luna", lastName: "Oeter" },
+ { id: 3, username: "duranduran", password: "H4nn0ver", address: "Schlägerstraße 36, 30171 Hannover", firstName: "Jürgen", lastName: "Durand" },
+ { id: 4, username: "guitarhero", password: "gwerty123", address: "Steinmetzstraße 12, 30163 Hannover", firstName: "Frederik", lastName: "Furtwängler" },
+ { id: 5, username: "herbstMareike", password: "qhsrbpgrs", address: "Allerweg 33, 30851 Langenhagen", firstName: "Mareike", lastName: "Herbst" },
+ { id: 6, username: "seibertmitb", password: "{jkz+WvQe", address: "Marktstraße 26, 30880 Laatzen", firstName: "Janna", lastName: "Seibert" },
+ ]
+ )
+
+ Order.bulkCreate(
+ [
+ { id: 0, accountId: 0, totalPrice: 0 },
+ { id: 1, accountId: 1, totalPrice: 0 },
+ { id: 2, accountId: 1, totalPrice: 0 },
+ { id: 3, accountId: 2, totalPrice: 0 },
+ { id: 4, accountId: 2, totalPrice: 0 },
+ { id: 5, accountId: 3, totalPrice: 0 },
+ { id: 6, accountId: 3, totalPrice: 0 },
+ { id: 7, accountId: 3, totalPrice: 0 },
+ { id: 8, accountId: 4, totalPrice: 0 },
+ { id: 9, accountId: 5, totalPrice: 0 },
+ { id: 10, accountId: 6, totalPrice: 0 },
+ { id: 11, accountId: 6, totalPrice: 0 },
+ ]
+ )
+
+ OrderedItem.bulkCreate(
+ [
+ { orderId: 0, productId: 4, quantity: 2, totalPrice: 0 }
+ ]
+ )
+
+ res.send("Success")
})
\ No newline at end of file
diff --git a/software/backend/routes/categories.routes.ts b/software/backend/routes/categories.routes.ts
deleted file mode 100644
index f79001e..0000000
--- a/software/backend/routes/categories.routes.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Router, Request, Response, NextFunction } from "express";
-import { Categories } from "../models/categories.model";
-
-export const categories = Router()
-
-categories.get("/", (req: Request, res: Response, next: NextFunction) => {
- Categories.findAll()
- .then(categories => res.json(categories))
- .catch(next)
-})
-
-categories.post("/", (req: Request, res: Response, next: NextFunction) => {
- try {
- console.log(req.body)
- const category = Categories.create(req.body)
- res.status(201).json(category)
- } catch (e) {
- next(e)
- }
-})
\ No newline at end of file
diff --git a/software/backend/routes/category.routes.ts b/software/backend/routes/category.routes.ts
new file mode 100644
index 0000000..5c563dd
--- /dev/null
+++ b/software/backend/routes/category.routes.ts
@@ -0,0 +1,22 @@
+import { Router, Request, Response, NextFunction } from "express";
+import { Category } from "../models/category.model";
+
+export const category = Router()
+
+category.get("/", (req: Request, res: Response, next: NextFunction) => {
+ Category.findAll()
+ .then(categories => {
+ res.json(categories)
+ })
+ .catch(next)
+})
+
+category.post("/", (req: Request, res: Response, next: NextFunction) => {
+ try {
+ console.log(req.body)
+ const category = Category.create(req.body)
+ res.status(201).json(category)
+ } catch (e) {
+ next(e)
+ }
+})
\ No newline at end of file
diff --git a/software/backend/routes/order.routes.ts b/software/backend/routes/order.routes.ts
new file mode 100644
index 0000000..7b89e92
--- /dev/null
+++ b/software/backend/routes/order.routes.ts
@@ -0,0 +1,12 @@
+import { Router, Request, Response, NextFunction } from "express";
+import { Order } from "../models/order.model";
+
+export const order = Router()
+
+order.get("/", (req: Request, res: Response, next: NextFunction) => {
+ Order.findAll()
+ .then(orders => {
+ res.json(orders)
+ })
+ .catch(next)
+})
\ No newline at end of file
diff --git a/software/backend/routes/orderedItem.routes.ts b/software/backend/routes/orderedItem.routes.ts
new file mode 100644
index 0000000..f1ca2f8
--- /dev/null
+++ b/software/backend/routes/orderedItem.routes.ts
@@ -0,0 +1,12 @@
+import { Router, Request, Response, NextFunction } from "express";
+import { OrderedItem } from "../models/orderedItem.model";
+
+export const orderedItem = Router()
+
+orderedItem.get("/", (req: Request, res: Response, next: NextFunction) => {
+ OrderedItem.findAll()
+ .then(orderedItems => {
+ res.json(orderedItems)
+ })
+ .catch(next)
+})
\ No newline at end of file
diff --git a/software/backend/routes/product.routes.ts b/software/backend/routes/product.routes.ts
new file mode 100644
index 0000000..4faaa81
--- /dev/null
+++ b/software/backend/routes/product.routes.ts
@@ -0,0 +1,12 @@
+import { Router, Request, Response, NextFunction } from "express";
+import { Product } from "../models/product.model";
+
+export const product = Router()
+
+product.get("/", (req: Request, res: Response, next: NextFunction)=> {
+ Product.findAll()
+ .then(products => {
+ res.json(products)
+ })
+ .catch(next)
+})
\ No newline at end of file
diff --git a/software/backend/server.ts b/software/backend/server.ts
index 36ffaf2..980951a 100644
--- a/software/backend/server.ts
+++ b/software/backend/server.ts
@@ -2,8 +2,12 @@ import express from 'express'
import cors from 'cors'
import bodyParser from 'body-parser'
import { api } from './routes/api.routes'
-import { categories } from './routes/categories.routes'
import { startDatabase } from './database'
+import { category } from './routes/category.routes'
+import { product } from './routes/product.routes'
+import { order } from './routes/order.routes'
+import { orderedItem } from './routes/orderedItem.routes'
+import { account } from './routes/account.routes'
const app = express()
const port = 3000
@@ -19,7 +23,11 @@ startDatabase()
// Routes
app.use("/api", api)
-app.use("/categories", categories)
+app.use("/categories", category)
+app.use("/products", product)
+app.use("/orders", order)
+app.use("/ordereditems", orderedItem)
+app.use("/accounts", account)
// Start server
app.listen(port, () => {
diff --git a/software/db.svg b/software/db.svg
new file mode 100644
index 0000000..2dd62bb
--- /dev/null
+++ b/software/db.svg
@@ -0,0 +1,58 @@
+
+
+
+
+
diff --git a/software/package-lock.json b/software/package-lock.json
index 466c8e6..a4aa785 100644
--- a/software/package-lock.json
+++ b/software/package-lock.json
@@ -18,6 +18,7 @@
"sequelize": "^6.37.3",
"sequelize-typescript": "^2.1.6",
"sqlite3": "^5.1.7",
+ "ts-node": "^10.9.2",
"vue": "^3.4.29",
"vuetify": "^3.7.1",
"wait-on": "^8.0.0"
@@ -90,6 +91,18 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
@@ -503,12 +516,31 @@
"@hapi/hoek": "^9.0.0"
}
},
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"license": "MIT"
},
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@mdi/font": {
"version": "7.4.47",
"resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz",
@@ -796,6 +828,30 @@
"node": ">= 6"
}
},
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+ "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "license": "MIT"
+ },
"node_modules/@types/body-parser": {
"version": "1.19.5",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
@@ -1075,6 +1131,30 @@
"node": ">= 0.6"
}
},
+ "node_modules/acorn": {
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.3",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz",
+ "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==",
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@@ -1200,6 +1280,12 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "license": "MIT"
+ },
"node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -1626,6 +1712,12 @@
"node": ">= 0.10"
}
},
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "license": "MIT"
+ },
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -1742,6 +1834,15 @@
"node": ">=8"
}
},
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
"node_modules/dottie": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz",
@@ -2631,6 +2732,12 @@
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "license": "ISC"
+ },
"node_modules/make-fetch-happen": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
@@ -4129,6 +4236,49 @@
"tree-kill": "cli.js"
}
},
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
"node_modules/tslib": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
@@ -4165,7 +4315,6 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
"license": "Apache-2.0",
- "optional": true,
"peer": true,
"bin": {
"tsc": "bin/tsc",
@@ -4241,6 +4390,12 @@
"uuid": "dist/bin/uuid"
}
},
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "license": "MIT"
+ },
"node_modules/validator": {
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz",
@@ -4488,6 +4643,15 @@
"engines": {
"node": ">=12"
}
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
}
}
}
diff --git a/software/package.json b/software/package.json
index 6fe5a7b..2caa3b1 100644
--- a/software/package.json
+++ b/software/package.json
@@ -6,13 +6,14 @@
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
- "dev-server": "concurrently \"nodemon\" \"wait-on http://localhost:3000/api/ && vite\""
+ "server": "nodemon",
+ "serve": "concurrently \"nodemon\" \"wait-on http://localhost:3000/api/ && vite\""
},
"nodemonConfig": {
"watch": [
"backend"
],
- "exec": "tsc && node ./build/dist/server.js",
+ "exec": "ts-node --project ./tsconfig.server.json --files ./backend/server.ts && node ./build/dist/server.js",
"ext": "ts, js, json"
},
"dependencies": {
diff --git a/software/src/App.vue b/software/src/App.vue
index c48c03b..797523c 100644
--- a/software/src/App.vue
+++ b/software/src/App.vue
@@ -1,16 +1,16 @@
-
-
+
HackMyCart
-
-
+
+
+ Shop Kategorien
+
+ {{ category.name }}
+
+
+ Account & Hilfe
+
+
+
+
@@ -42,17 +57,12 @@ requestAllCategories()
-
+
Hinzufügen
-
-
-
-
-
- {{ category.name }}
-
-
+
+ Datenbank zurücksetzen
+
diff --git a/software/tsconfig.json b/software/tsconfig.json
index 8b84c60..5a09a36 100644
--- a/software/tsconfig.json
+++ b/software/tsconfig.json
@@ -8,12 +8,10 @@
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
+ "baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
},
- "exclude": ["node_modules", "dist"],
- "include": [
- "backend/**/*.ts",
- ]
+ "exclude": ["node_modules", "dist"]
}
\ No newline at end of file
diff --git a/software/tsconfig.server.json b/software/tsconfig.server.json
new file mode 100644
index 0000000..069a37f
--- /dev/null
+++ b/software/tsconfig.server.json
@@ -0,0 +1,17 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "module": "commonjs",
+ "moduleResolution": "node",
+ "isolatedModules": false,
+ "outDir": "build/dist",
+ "esModuleInterop": true,
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": true,
+ "baseUrl": "."
+ },
+ "exclude": ["node_modules", "dist"],
+ "include": [
+ "backend/**/*.ts"
+ ]
+}
\ No newline at end of file