Merge SQL Scripts (flyway is for cowards)

This commit is contained in:
Tim
2025-06-03 23:14:59 +02:00
parent 6a4224f1ac
commit 62b8374c89
9 changed files with 83 additions and 127 deletions

View File

@@ -18,7 +18,7 @@ public class Account {
private Long id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "customerId", nullable = false)
@JoinColumn(name = "customer_id", nullable = false)
private Customer customer;
@Column(nullable = false, unique = true)

View File

@@ -1,25 +1,23 @@
package de.htwsaar.webshop.repository.entities;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@Table(name = "Images")
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
@Column(name = "id", nullable = false, insertable = false, updatable = false, unique = true)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "articleId", referencedColumnName = "id", nullable = false)
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "article_id", referencedColumnName = "id", nullable = false)
private Article article;
@Column(name = "uri", nullable = false)

View File

@@ -20,7 +20,7 @@ public class Order {
private Long id;
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity = Customer.class)
@JoinColumn(name = "customerId")
@JoinColumn(name = "customer_id")
private Customer customer;
@Column(name = "time", nullable = false)

View File

@@ -26,13 +26,13 @@ public class OrderItem {
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("orderId")
@JoinColumn(name = "orderId", referencedColumnName = "id", nullable = false)
@JoinColumn(name = "order_id", referencedColumnName = "id", nullable = false)
@OnDelete(action = org.hibernate.annotations.OnDeleteAction.CASCADE)
private Order order;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("articleId")
@JoinColumn(name = "articleId", referencedColumnName = "id", nullable = false)
@JoinColumn(name = "article_id", referencedColumnName = "id", nullable = false)
@OnDelete(action = org.hibernate.annotations.OnDeleteAction.SET_NULL)
private Article article;
}

View File

@@ -1,56 +0,0 @@
CREATE TABLE IF NOT EXISTS ArticleConfigurations(
id INTEGER PRIMARY KEY NOT NULL,
articleId INTEGER NOT NULL,
name TEXT NOT NULL,
FOREIGN KEY (articleId) REFERENCES Articles(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS Customers(
id INTEGER PRIMARY KEY NOT NULL,
name TEXT NOT NULL, --nachname
surname TEXT NOT NULL, --vorname,
address TEXT NOT NULL,
country TEXT NOT NULL,
zip TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS Orders(
id INTEGER PRIMARY KEY NOT NULL,
customerId INTEGER NOT NULL,
time INTEGER NOT NULL, --unix millis or epoch, TBD
FOREIGN KEY (customerId) REFERENCES Customers(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
-- Each Article-Configuration in the order gets their own of this one
CREATE TABLE IF NOT EXISTS OrderItems(
orderId INTEGER NOT NULL,
articleId INTEGER NOT NULL,
articleConfId INTEGER NULL,
amount INTEGER NOT NULL,
CONSTRAINT cAmount CHECK (amount > 0),
FOREIGN KEY (orderId) REFERENCES Orders(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (articleId) REFERENCES Articles(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
FOREIGN KEY (articleConfId) REFERENCES ArticleConfigurations(id)
ON DELETE SET NULL
ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS Accounts(
id INTEGER PRIMARY KEY NOT NULL,
customerId INTEGER NOT NULL,
email TEXT NOT NULL,
password TEXT NOT NULL,
lang_i18n TEXT NOT NULL,
FOREIGN KEY (customerId) REFERENCES Customers(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);

View File

@@ -1,20 +0,0 @@
DROP TABLE IF EXISTS OrderItems;
CREATE TABLE IF NOT EXISTS OrderItems(
orderId INTEGER NOT NULL,
articleId INTEGER NOT NULL,
articleConfId INTEGER NULL,
amount INTEGER NOT NULL,
PRIMARY KEY (orderId, articleId, articleConfId), -- added
CONSTRAINT cAmount CHECK (amount > 0),
FOREIGN KEY (orderId) REFERENCES Orders(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (articleId) REFERENCES Articles(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
FOREIGN KEY (articleConfId) REFERENCES ArticleConfigurations(id)
ON DELETE SET NULL
ON UPDATE CASCADE
);

View File

@@ -1,20 +0,0 @@
DROP TABLE IF EXISTS ArticleConfigurations;
DROP TABLE OrderItems;
CREATE TABLE IF NOT EXISTS OrderItems
(
id INTEGER NOT NULL PRIMARY KEY, --composite pk was wrong
orderId INTEGER NOT NULL,
articleId INTEGER NOT NULL,
amount INTEGER NOT NULL,
-- art conf not needed
CONSTRAINT cAmount CHECK (amount > 0),
FOREIGN KEY (orderId) REFERENCES Orders (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (articleId) REFERENCES Articles (id)
ON DELETE SET NULL
ON UPDATE CASCADE
);

View File

@@ -1,30 +1,84 @@
-- articles
CREATE TABLE IF NOT EXISTS Articles(
id INTEGER PRIMARY KEY NOT NULL,
uuid TEXT UNIQUE NOT NULL, -- UUID
stock INTEGER NOT NULL DEFAULT 0,
name TEXT NOT NULL,
description TEXT NULL, --in html
price100 INTEGER NOT NULL, -- in cents
discount100 INTEGER NULL, -- in percent
category TEXT NULL,
CREATE TABLE IF NOT EXISTS Articles
(
id INTEGER PRIMARY KEY NOT NULL,
uuid TEXT UNIQUE NOT NULL, -- UUID
stock INTEGER NOT NULL DEFAULT 0,
name TEXT NOT NULL,
description TEXT NULL, --in html
price100 INTEGER NOT NULL, -- in cents
discount100 INTEGER NULL, -- in percent
category TEXT NULL,
CONSTRAINT c_stock CHECK ( stock >= 0 )
);
-- article images
CREATE TABLE IF NOT EXISTS Images(
id INTEGER PRIMARY KEY NOT NULL,
articleId INTEGER NOT NULL,
uri TEXT NOT NULL,
FOREIGN KEY (articleId) REFERENCES Articles(id)
CREATE TABLE IF NOT EXISTS Images
(
id INTEGER PRIMARY KEY NOT NULL,
article_id INTEGER NOT NULL,
uri TEXT NOT NULL,
FOREIGN KEY (article_id) REFERENCES Articles (id)
);
CREATE TABLE IF NOT EXISTS Reviews(
id INTEGER PRIMARY KEY NOT NULL,
articleId INTEGER NOT NULL,
rating INTEGER NOT NULL,
content TEXT NULL,
FOREIGN KEY (articleId) REFERENCES Articles(id),
CREATE TABLE IF NOT EXISTS Reviews
(
id INTEGER PRIMARY KEY NOT NULL,
article_id INTEGER NOT NULL,
rating INTEGER NOT NULL,
content TEXT NULL,
FOREIGN KEY (article_id) REFERENCES Articles (id),
CONSTRAINT c_rating CHECK ( rating >= 0 AND rating <= 10)
);
CREATE TABLE IF NOT EXISTS Customers
(
id INTEGER PRIMARY KEY NOT NULL,
name TEXT NOT NULL, --nachname
surname TEXT NOT NULL, --vorname,
address TEXT NOT NULL,
country TEXT NOT NULL,
zip TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS Orders
(
id INTEGER PRIMARY KEY NOT NULL,
customer_id INTEGER NOT NULL,
time INTEGER NOT NULL, --unix millis or epoch, TBD
FOREIGN KEY (customer_id) REFERENCES Customers (id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS Accounts
(
id INTEGER PRIMARY KEY NOT NULL,
customer_id INTEGER NOT NULL,
email TEXT NOT NULL,
password TEXT NOT NULL,
lang_i18n TEXT NOT NULL,
FOREIGN KEY (customer_id) REFERENCES Customers (id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE IF NOT EXISTS OrderItems
(
id INTEGER NOT NULL PRIMARY KEY,
order_id INTEGER NOT NULL,
article_id INTEGER NOT NULL,
amount INTEGER NOT NULL,
-- art conf not needed
CONSTRAINT cAmount CHECK (amount > 0),
FOREIGN KEY (order_id) REFERENCES Orders (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (article_id) REFERENCES Articles (id)
ON DELETE SET NULL
ON UPDATE CASCADE
);