commit
This commit is contained in:
parent
9d40b79426
commit
076bd4e61b
@ -17,8 +17,6 @@ jar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(':front'))
|
|
||||||
|
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||||
implementation 'com.h2database:h2:2.1.210'
|
implementation 'com.h2database:h2:2.1.210'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||||
|
26
front/.gitignore
vendored
26
front/.gitignore
vendored
@ -1,26 +0,0 @@
|
|||||||
# Logs
|
|
||||||
logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
pnpm-debug.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
|
|
||||||
node_modules
|
|
||||||
dist
|
|
||||||
dist-ssr
|
|
||||||
*.local
|
|
||||||
|
|
||||||
# Editor directories and files
|
|
||||||
.vscode/*
|
|
||||||
!.vscode/extensions.json
|
|
||||||
.idea
|
|
||||||
.DS_Store
|
|
||||||
*.suo
|
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.sw?
|
|
||||||
|
|
||||||
.parcel-cache
|
|
@ -1,66 +0,0 @@
|
|||||||
import com.github.gradle.node.util.PlatformHelper
|
|
||||||
import groovy.text.SimpleTemplateEngine
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id 'java'
|
|
||||||
id 'com.github.node-gradle.node' version '3.5.1'
|
|
||||||
id "de.undercouch.download" version '5.3.1'
|
|
||||||
}
|
|
||||||
|
|
||||||
//task wrapper(type: Wrapper){
|
|
||||||
// gradleVersion = '7.2'
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//task prepareKotlinBuildScriptModel {
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
|
|
||||||
node {
|
|
||||||
version = '18.15.0'
|
|
||||||
download = true
|
|
||||||
}
|
|
||||||
|
|
||||||
jar.dependsOn 'npmBuild'
|
|
||||||
|
|
||||||
clean.dependsOn 'npmClean'
|
|
||||||
|
|
||||||
nodeSetup.dependsOn 'downloadNode'
|
|
||||||
|
|
||||||
jar {
|
|
||||||
from 'dist'
|
|
||||||
into 'static'
|
|
||||||
final devHost = 'http://localhost:8080'
|
|
||||||
final prodHost = ''
|
|
||||||
filesMatching('index.html') {
|
|
||||||
filter { line -> line.replaceAll(devHost, prodHost) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
task downloadNode(type: Download) {
|
|
||||||
final helper = new PlatformHelper()
|
|
||||||
final templateData = [
|
|
||||||
"url" : node.distBaseUrl.get(),
|
|
||||||
"version": node.version.get(),
|
|
||||||
"os" : helper.osName,
|
|
||||||
"arch" : helper.osArch,
|
|
||||||
"ext" : helper.windows ? 'zip' : 'tar.gz'
|
|
||||||
]
|
|
||||||
final urlTemplate = '${url}/v${version}/node-v${version}-${os}-${arch}.${ext}'
|
|
||||||
final engine = new SimpleTemplateEngine()
|
|
||||||
final url = engine.createTemplate(urlTemplate).make(templateData).toString()
|
|
||||||
final String destDir = '.gradle/'
|
|
||||||
file(destDir).mkdirs()
|
|
||||||
src url
|
|
||||||
dest destDir
|
|
||||||
overwrite false
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register('npmBuild', NpmTask) {
|
|
||||||
dependsOn npmInstall
|
|
||||||
args = ['run-script', 'build']
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register('npmClean', NpmTask) {
|
|
||||||
dependsOn npmInstall
|
|
||||||
args = ['run-script', 'clean']
|
|
||||||
}
|
|
BIN
front/gradle/wrapper/gradle-wrapper.jar
vendored
BIN
front/gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
@ -1,5 +0,0 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
|
||||||
distributionPath=wrapper/dists
|
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
|
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
|
||||||
zipStorePath=wrapper/dists
|
|
2898
front/package-lock.json
generated
2898
front/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "int-prog",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"source": "src/index.html",
|
|
||||||
"scripts": {
|
|
||||||
"start": "parcel --port 3000",
|
|
||||||
"build": "npm run clean && parcel build",
|
|
||||||
"clean": "rimraf dist"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"bootstrap": "5.2.3"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"parcel": "2.8.3",
|
|
||||||
"rimraf": "4.4.0"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,74 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="ru">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport"
|
|
||||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
||||||
<title>REST Client Example</title>
|
|
||||||
<script type="module" src="../node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
|
|
||||||
<link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header class="d-flex justify-content-center py-3">
|
|
||||||
<ul class="nav nav-pills">
|
|
||||||
<li class="nav-item"><a href="./index.html" class="nav-link active" aria-current="page">Customer</a></li>
|
|
||||||
<li class="nav-item"><a href="./ticket.html" class="nav-link">Ticket</a></li>
|
|
||||||
<li class="nav-item"><a href="./order.html" class="nav-link">Order</a></li>
|
|
||||||
</ul>
|
|
||||||
</header>
|
|
||||||
<div class="container">
|
|
||||||
<form id="form" novalidate>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<label for="login" class="form-label">login</label>
|
|
||||||
<input type="text" class="form-control" id="login" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<label for="password" class="form-label">password</label>
|
|
||||||
<input type="password" class="form-control" id="password" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="d-grid col-sm-4 mx-auto">
|
|
||||||
<button type="submit" class="btn btn-success">Add</button>
|
|
||||||
</div>
|
|
||||||
<div class="d-grid col-sm-4 mx-auto mt-3 mt-sm-0">
|
|
||||||
<button id="testError" type="button" class="btn btn-danger">Test</button>
|
|
||||||
</div>
|
|
||||||
<div class="d-grid col-sm-4 mx-auto mt-3 mt-sm-0">
|
|
||||||
<button id="testNormal" type="button" class="btn btn-secondary">Test</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<label for="id" class="form-label">id</label>
|
|
||||||
<input type="number" class="form-control" id="id" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="d-grid col-sm-2">
|
|
||||||
<button id="editBtn" class="btn btn-primary">Edit</button>
|
|
||||||
</div>
|
|
||||||
<div class="d-grid col-sm-2">
|
|
||||||
<button id="removeBtn" class="btn btn-danger">Remove</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row table-responsive">
|
|
||||||
<table class="table mt-3">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">#</th>
|
|
||||||
<th scope="col">Login</th>
|
|
||||||
<th scope="col">Password</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="tbody">
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
<script src="script.js"></script>
|
|
||||||
</html>
|
|
@ -1,72 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="ru">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport"
|
|
||||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
||||||
<title>REST Client Example</title>
|
|
||||||
<script type="module" src="../node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
|
|
||||||
<link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header class="d-flex justify-content-center py-3">
|
|
||||||
<ul class="nav nav-pills">
|
|
||||||
<li class="nav-item"><a href="./index.html" class="nav-link" aria-current="page">Customer</a></li>
|
|
||||||
<li class="nav-item"><a href="./ticket.html" class="nav-link">Ticket</a></li>
|
|
||||||
<li class="nav-item"><a href="./order.html" class="nav-link active">Order</a></li>
|
|
||||||
</ul>
|
|
||||||
</header>
|
|
||||||
<div class="container">
|
|
||||||
<form id="form" novalidate>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<label for="id" class="form-label">id</label>
|
|
||||||
<input type="number" class="form-control" id="id" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<label for="customer" class="form-label">customer id</label>
|
|
||||||
<input type="text" class="form-control" id="customer" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="d-grid col-sm-6">
|
|
||||||
<button id="removeBtn" class="btn btn-danger">Remove</button>
|
|
||||||
</div>
|
|
||||||
<div class="d-grid col-sm-6 mx-auto">
|
|
||||||
<button type="submit" class="btn btn-success">Add order</button>
|
|
||||||
</div>
|
|
||||||
<!--<div class="d-grid col-sm-6">
|
|
||||||
<button id="relateBtn" class="btn btn-primary">Relate</button>
|
|
||||||
</div>-->
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<label for="ticket" class="form-label">ticket id</label>
|
|
||||||
<input type="text" class="form-control" id="ticket" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="d-grid col-sm-6">
|
|
||||||
<button id="ticketBtn" class="btn btn-danger">Add ticket</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<div class="row table-responsive">
|
|
||||||
<table class="table mt-3">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">#</th>
|
|
||||||
<th scope="col">Customer</th>
|
|
||||||
<th scope="col">Date Of Purchase</th>
|
|
||||||
<th scope="col">Tickets</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="tbody">
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
<script src="order.js"></script>
|
|
||||||
</html>
|
|
@ -1,75 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
window.addEventListener('DOMContentLoaded', function () {
|
|
||||||
const host = "http://localhost:8080";
|
|
||||||
const table = document.getElementById("tbody");
|
|
||||||
const form = document.getElementById("form");
|
|
||||||
const customerInput = document.getElementById("customer");
|
|
||||||
const idInput = document.getElementById("id");
|
|
||||||
const removeBtn = document.getElementById("removeBtn");
|
|
||||||
|
|
||||||
const getData = async function () {
|
|
||||||
table.innerHTML = "";
|
|
||||||
const response = await fetch(host + "/order");
|
|
||||||
const data = await response.json();
|
|
||||||
data.forEach(order => {
|
|
||||||
let temp = "<select>";
|
|
||||||
order.tickets.forEach(ticket => {
|
|
||||||
temp += `<option>${ticket.name + " " + ticket.price + " " + ticket.timestamp}</option>`
|
|
||||||
})
|
|
||||||
table.innerHTML +=
|
|
||||||
`<tr>
|
|
||||||
<th scope="row">${order.id}</th>
|
|
||||||
<td>${order.customer}</td>
|
|
||||||
<td>${order.dateOfPurchase}</td>
|
|
||||||
<td>${temp}</td>
|
|
||||||
</tr>`;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
async function create(customer) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
'Accept': 'application/json',
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/order?customer=${customer}`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
async function remove(id) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "DELETE",
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/order/${id}`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
async function editCustomer(id) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "PUT",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/order/${id}/updcustomer`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
|
|
||||||
form.addEventListener("submit", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
create(customerInput.value).then(() => {
|
|
||||||
getData();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
removeBtn.addEventListener("click", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
remove(idInput.value).then((result) => {
|
|
||||||
getData();
|
|
||||||
customerInput.value = "";
|
|
||||||
idInput.value = "";
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
getData();
|
|
||||||
});
|
|
@ -1,114 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
window.addEventListener('DOMContentLoaded', function () {
|
|
||||||
const host = "http://localhost:8080";
|
|
||||||
const table = document.getElementById("tbody");
|
|
||||||
const form = document.getElementById("form");
|
|
||||||
const passwordInput = document.getElementById("password");
|
|
||||||
const loginInput = document.getElementById("login");
|
|
||||||
const idInput = document.getElementById("id");
|
|
||||||
const removeBtn = document.getElementById("removeBtn");
|
|
||||||
const editBtn = document.getElementById("editBtn");
|
|
||||||
const testErrorBtn = document.getElementById("testError");
|
|
||||||
const testNormalBtn = document.getElementById("testNormal");
|
|
||||||
|
|
||||||
const getData = async function () {
|
|
||||||
table.innerHTML = "";
|
|
||||||
const response = await fetch(host + "/customer");
|
|
||||||
const data = await response.json();
|
|
||||||
data.forEach(customer => {
|
|
||||||
table.innerHTML +=
|
|
||||||
`<tr>
|
|
||||||
<th scope="row">${customer.id}</th>
|
|
||||||
<td>${customer.login}</td>
|
|
||||||
<td>${customer.password}</td>
|
|
||||||
</tr>`;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const create = async function (login, password) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/customer?login=${login}&password=${password}`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
async function remove(id) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "DELETE",
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/customer/${id}`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
async function edit(id, login, password) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "PUT",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/customer/${id}?login=${login}&password=${password}`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
const test = async function (testObject) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
body: JSON.stringify(testObject),
|
|
||||||
};
|
|
||||||
const response = await fetch(host + "/test", requestParams);
|
|
||||||
if (response.status === 200) {
|
|
||||||
const data = await response.json();
|
|
||||||
alert(`TestDto=[id=${data.id}, name=${data.name}, data=${data.data}]`);
|
|
||||||
}
|
|
||||||
if (response.status === 400) {
|
|
||||||
const data = await response.text();
|
|
||||||
alert(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
form.addEventListener("submit", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
create(loginInput.value, passwordInput.value).then((result) => {
|
|
||||||
getData();
|
|
||||||
loginInput.value = "";
|
|
||||||
passwordInput.value = "";
|
|
||||||
alert(`Customer[id=${result.id}, login=${result.login}, password=${result.password}]`);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
testErrorBtn.addEventListener("click", function () {
|
|
||||||
test({});
|
|
||||||
});
|
|
||||||
|
|
||||||
testNormalBtn.addEventListener("click", function () {
|
|
||||||
test({id: 10, name: "test"});
|
|
||||||
});
|
|
||||||
|
|
||||||
removeBtn.addEventListener("click", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
remove(idInput.value).then((result) => {
|
|
||||||
getData();
|
|
||||||
loginInput.value = "";
|
|
||||||
passwordInput.value = "";
|
|
||||||
idInput.value = "";
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
editBtn.addEventListener("click", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
edit(idInput.value, loginInput.value, passwordInput.value).then((result) => {
|
|
||||||
getData();
|
|
||||||
loginInput.value = "";
|
|
||||||
passwordInput.value = "";
|
|
||||||
idInput.value = "";
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
getData();
|
|
||||||
});
|
|
@ -1,74 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="ru">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport"
|
|
||||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
||||||
<title>REST Client Example</title>
|
|
||||||
<script type="module" src="../node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
|
|
||||||
<link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header class="d-flex justify-content-center py-3">
|
|
||||||
<ul class="nav nav-pills">
|
|
||||||
<li class="nav-item"><a href="./index.html" class="nav-link" aria-current="page">Customer</a></li>
|
|
||||||
<li class="nav-item"><a href="./ticket.html" class="nav-link active">Ticket</a></li>
|
|
||||||
<li class="nav-item"><a href="./order.html" class="nav-link">Order</a></li>
|
|
||||||
</ul>
|
|
||||||
</header>
|
|
||||||
<div class="container">
|
|
||||||
<form id="form" novalidate>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<label for="name" class="form-label">name</label>
|
|
||||||
<input type="text" class="form-control" id="name" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<label for="price" class="form-label">price</label>
|
|
||||||
<input type="number" step="0.01" class="form-control" id="price" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<label for="timestamp" class="form-label">timestamp</label>
|
|
||||||
<input type="datetime-local" class="form-control" id="timestamp" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="d-grid col-sm-4 mx-auto">
|
|
||||||
<button type="submit" class="btn btn-success">Add</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<label for="id" class="form-label">id</label>
|
|
||||||
<input type="number" class="form-control" id="id" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="d-grid col-sm-2">
|
|
||||||
<button id="editBtn" class="btn btn-primary">Edit</button>
|
|
||||||
</div>
|
|
||||||
<div class="d-grid col-sm-2">
|
|
||||||
<button id="removeBtn" class="btn btn-danger">Remove</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<div class="row table-responsive">
|
|
||||||
<table class="table mt-3">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">#</th>
|
|
||||||
<th scope="col">Name</th>
|
|
||||||
<th scope="col">Price</th>
|
|
||||||
<th scope="col">Timestamp</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="tbody">
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
<script src="ticket.js"></script>
|
|
||||||
</html>
|
|
@ -1,89 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
window.addEventListener('DOMContentLoaded', function () {
|
|
||||||
const host = "http://localhost:8080";
|
|
||||||
const table = document.getElementById("tbody");
|
|
||||||
const form = document.getElementById("form");
|
|
||||||
const priceInput = document.getElementById("price");
|
|
||||||
const nameInput = document.getElementById("name");
|
|
||||||
const idInput = document.getElementById("id");
|
|
||||||
const removeBtn = document.getElementById("removeBtn");
|
|
||||||
const editBtn = document.getElementById("editBtn");
|
|
||||||
const timestampInput = document.getElementById("timestamp");
|
|
||||||
|
|
||||||
const getData = async function () {
|
|
||||||
table.innerHTML = "";
|
|
||||||
const response = await fetch(host + "/ticket");
|
|
||||||
const data = await response.json();
|
|
||||||
data.forEach(ticket => {
|
|
||||||
table.innerHTML +=
|
|
||||||
`<tr>
|
|
||||||
<th scope="row">${ticket.id}</th>
|
|
||||||
<td>${ticket.name}</td>
|
|
||||||
<td>${ticket.price}</td>
|
|
||||||
<td>${ticket.timestamp}</td>
|
|
||||||
</tr>`;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
async function create(name, price, timestamp) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "POST",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/ticket?name=${name}&price=${price}×tamp=${timestamp}`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
async function remove(id) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "DELETE",
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/ticket/${id}`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
async function edit(id, name, price) {
|
|
||||||
const requestParams = {
|
|
||||||
method: "PUT",
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const response = await fetch(host + `/ticket/${id}?name=${name}&price=${price}`, requestParams);
|
|
||||||
return await response.json();
|
|
||||||
}
|
|
||||||
|
|
||||||
form.addEventListener("submit", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
create(nameInput.value, priceInput.value, timestampInput.value).then((result) => {
|
|
||||||
getData();
|
|
||||||
nameInput.value = "";
|
|
||||||
priceInput.value = "";
|
|
||||||
timestampInput.value = "";
|
|
||||||
//alert(`Ticket[id=${result.id}, name=${result.name}, price=${result.price}, timestamp=${result.timetamp}]`);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
removeBtn.addEventListener("click", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
remove(idInput.value).then((result) => {
|
|
||||||
getData();
|
|
||||||
nameInput.value = "";
|
|
||||||
priceInput.value = "";
|
|
||||||
timestampInput.value = "";
|
|
||||||
idInput.value = "";
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
editBtn.addEventListener("click", function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
edit(idInput.value, nameInput.value, priceInput.value).then((result) => {
|
|
||||||
getData();
|
|
||||||
nameInput.value = "";
|
|
||||||
priceInput.value = "";
|
|
||||||
idInput.value = "";
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
getData();
|
|
||||||
});
|
|
@ -1,6 +1,7 @@
|
|||||||
package com.labwork1.app.student.controller;
|
package com.labwork1.app.student.controller;
|
||||||
|
|
||||||
import com.labwork1.app.student.service.CinemaService;
|
import com.labwork1.app.student.service.CinemaService;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -27,14 +28,13 @@ public class CinemaController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public CinemaDto createCinema(@RequestParam("name") String name) {
|
public CinemaDto createCinema(@RequestBody @Valid CinemaDto cinemaDto) {
|
||||||
return new CinemaDto(cinemaService.addCinema(name));
|
return new CinemaDto(cinemaService.addCinema(cinemaDto));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/{id}")
|
@PutMapping("/{id}")
|
||||||
public CinemaDto updateCinema(@PathVariable Long id,
|
public CinemaDto updateCinema(@RequestBody @Valid CinemaDto cinemaDto) {
|
||||||
@RequestParam("name") String name) {
|
return new CinemaDto(cinemaService.updateCinema(cinemaDto));
|
||||||
return new CinemaDto(cinemaService.updateCinema(id, name));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
@DeleteMapping("/{id}")
|
||||||
|
@ -2,25 +2,31 @@ package com.labwork1.app.student.controller;
|
|||||||
|
|
||||||
import com.labwork1.app.student.model.Cinema;
|
import com.labwork1.app.student.model.Cinema;
|
||||||
|
|
||||||
import java.util.List;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
public class CinemaDto {
|
public class CinemaDto {
|
||||||
private final long id;
|
private long id;
|
||||||
private final String name;
|
private String name;
|
||||||
private final List<SessionDto> sessions;
|
private String image;
|
||||||
|
|
||||||
|
public CinemaDto() {
|
||||||
|
}
|
||||||
|
|
||||||
public CinemaDto(Cinema cinema) {
|
public CinemaDto(Cinema cinema) {
|
||||||
this.id = cinema.getId();
|
this.id = cinema.getId();
|
||||||
this.name = cinema.getName();
|
this.name = cinema.getName();
|
||||||
this.sessions = cinema.getSessions().stream()
|
this.image = new String(cinema.getImage(), StandardCharsets.UTF_8);
|
||||||
.map(SessionDto::new).toList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getImage() {
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
public List<SessionDto> getSessions() {
|
|
||||||
return sessions;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -2,31 +2,44 @@ package com.labwork1.app.student.controller;
|
|||||||
|
|
||||||
import com.labwork1.app.student.model.Customer;
|
import com.labwork1.app.student.model.Customer;
|
||||||
import com.labwork1.app.student.model.Order;
|
import com.labwork1.app.student.model.Order;
|
||||||
|
import com.labwork1.app.student.model.OrderSession;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class CustomerDto {
|
public class CustomerDto {
|
||||||
private final long id;
|
private long id;
|
||||||
private final String login;
|
private String login;
|
||||||
private final String password;
|
private String password;
|
||||||
private final List<Order> orders;
|
private List<OrderDto> orders;
|
||||||
|
|
||||||
|
public CustomerDto() {
|
||||||
|
}
|
||||||
|
|
||||||
public CustomerDto(Customer customer) {
|
public CustomerDto(Customer customer) {
|
||||||
this.id = customer.getId();
|
this.id = customer.getId();
|
||||||
this.login = customer.getLogin();
|
this.login = customer.getLogin();
|
||||||
this.password = customer.getPassword();
|
this.password = customer.getPassword();
|
||||||
this.orders = customer.getOrders();
|
this.orders = new ArrayList<>();
|
||||||
|
if (customer.getOrders() != null) {
|
||||||
|
orders = customer.getOrders().stream()
|
||||||
|
.map(OrderDto::new).toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLogin() {
|
public String getLogin() {
|
||||||
return login;
|
return login;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPassword() {
|
public String getPassword() {
|
||||||
return password;
|
return password;
|
||||||
}
|
}
|
||||||
public List<Order> getOrders() {
|
|
||||||
|
public List<OrderDto> getOrders() {
|
||||||
return orders;
|
return orders;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,34 +2,43 @@ package com.labwork1.app.student.controller;
|
|||||||
|
|
||||||
import com.labwork1.app.student.model.Customer;
|
import com.labwork1.app.student.model.Customer;
|
||||||
import com.labwork1.app.student.model.Order;
|
import com.labwork1.app.student.model.Order;
|
||||||
|
import com.labwork1.app.student.model.OrderSession;
|
||||||
|
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class OrderDto {
|
public class OrderDto {
|
||||||
private final long id;
|
private long id;
|
||||||
private final Date dateOfPurchase;
|
private Date dateOfPurchase;
|
||||||
private final Customer customer;
|
private Customer customer;
|
||||||
private final List<OrderSessionDto> sessions;
|
private List<OrderSessionDto> sessions;
|
||||||
|
|
||||||
|
public OrderDto() {
|
||||||
|
}
|
||||||
|
|
||||||
public OrderDto(Order order) {
|
public OrderDto(Order order) {
|
||||||
this.id = order.getId();
|
this.id = order.getId();
|
||||||
this.dateOfPurchase = order.getDateOfPurchase();
|
this.dateOfPurchase = order.getDateOfPurchase();
|
||||||
this.customer = order.getCustomer();
|
this.customer = order.getCustomer();
|
||||||
this.sessions = order.getSessions()
|
if (order.getSessions() != null && order.getSessions().size() > 0)
|
||||||
.stream()
|
this.sessions = order.getSessions()
|
||||||
.map(x -> new OrderSessionDto(x.getId().getSessionId(),
|
.stream()
|
||||||
x.getId().getOrderId(), x.getCount())).toList();
|
.map(x -> new OrderSessionDto(x.getId().getSessionId(),
|
||||||
|
x.getId().getOrderId(), x.getCount())).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getDateOfPurchase() {
|
public Date getDateOfPurchase() {
|
||||||
return dateOfPurchase;
|
return dateOfPurchase;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Customer getCustomer() {
|
public Customer getCustomer() {
|
||||||
return customer;
|
return customer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<OrderSessionDto> getSessions() {
|
public List<OrderSessionDto> getSessions() {
|
||||||
return sessions;
|
return sessions;
|
||||||
}
|
}
|
||||||
|
@ -7,17 +7,21 @@ public class OrderSessionDto {
|
|||||||
|
|
||||||
public OrderSessionDto() {
|
public OrderSessionDto() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public OrderSessionDto(Long sessionId, Long orderId, Integer count) {
|
public OrderSessionDto(Long sessionId, Long orderId, Integer count) {
|
||||||
this.sessionId = sessionId;
|
this.sessionId = sessionId;
|
||||||
this.orderId = orderId;
|
this.orderId = orderId;
|
||||||
this.count = count;
|
this.count = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getSessionId() {
|
public Long getSessionId() {
|
||||||
return sessionId;
|
return sessionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getOrderId() {
|
public Long getOrderId() {
|
||||||
return orderId;
|
return orderId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getCount() {
|
public Integer getCount() {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -1,43 +1,51 @@
|
|||||||
package com.labwork1.app.student.controller;
|
package com.labwork1.app.student.controller;
|
||||||
|
|
||||||
|
import com.labwork1.app.student.model.Cinema;
|
||||||
import com.labwork1.app.student.model.Session;
|
import com.labwork1.app.student.model.Session;
|
||||||
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class SessionDto {
|
public class SessionDto {
|
||||||
private final long id;
|
private long id;
|
||||||
private Double price;
|
private Double price;
|
||||||
private Timestamp timestamp;
|
private Timestamp timestamp;
|
||||||
private final List<OrderSessionDto> orders;
|
private CinemaDto cinema;
|
||||||
private final CinemaDto cinema;
|
private int capacity;
|
||||||
private final int capacity;
|
private int maxCount;
|
||||||
|
|
||||||
|
public SessionDto() {
|
||||||
|
}
|
||||||
|
|
||||||
public SessionDto(Session session) {
|
public SessionDto(Session session) {
|
||||||
this.id = session.getId();
|
this.id = session.getId();
|
||||||
this.price = session.getPrice();
|
this.price = session.getPrice();
|
||||||
this.timestamp = session.getTimestamp();
|
this.timestamp = session.getTimestamp();
|
||||||
this.capacity = session.getCapacity();
|
this.capacity = session.getCapacity();
|
||||||
this.cinema = new CinemaDto(session.getCinema());
|
this.maxCount = session.getMaxCount();
|
||||||
this.orders = session.getOrders()
|
if (session.getCinema() != null) this.cinema = new CinemaDto(session.getCinema());
|
||||||
.stream()
|
else this.cinema = null;
|
||||||
.map(x -> new OrderSessionDto(x.getId().getSessionId(),
|
|
||||||
x.getId().getOrderId(), x.getCount())).toList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMaxCount() {
|
||||||
|
return maxCount;
|
||||||
|
}
|
||||||
|
|
||||||
public int getCapacity() {
|
public int getCapacity() {
|
||||||
return capacity;
|
return capacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Double getPrice() {
|
public Double getPrice() {
|
||||||
return price;
|
return price;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Timestamp getTimestamp() {
|
public Timestamp getTimestamp() {
|
||||||
return timestamp;
|
return timestamp;
|
||||||
}
|
}
|
||||||
public List<OrderSessionDto> getOrders() {
|
|
||||||
return orders;
|
|
||||||
}
|
|
||||||
public CinemaDto getCinema() {
|
public CinemaDto getCinema() {
|
||||||
return cinema;
|
return cinema;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package com.labwork1.app.student.model;
|
package com.labwork1.app.student.model;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
|
import com.labwork1.app.student.controller.CinemaDto;
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
|
||||||
@ -15,7 +17,11 @@ public class Cinema {
|
|||||||
@Column
|
@Column
|
||||||
private String name;
|
private String name;
|
||||||
@OneToMany(fetch = FetchType.EAGER, mappedBy = "cinema", cascade = CascadeType.REMOVE)
|
@OneToMany(fetch = FetchType.EAGER, mappedBy = "cinema", cascade = CascadeType.REMOVE)
|
||||||
|
@JsonIgnore
|
||||||
private List<Session> sessions;
|
private List<Session> sessions;
|
||||||
|
@Lob
|
||||||
|
private byte[] image;
|
||||||
|
|
||||||
public Cinema() {
|
public Cinema() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,6 +30,20 @@ public class Cinema {
|
|||||||
this.sessions = new ArrayList<>();
|
this.sessions = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Cinema(CinemaDto cinemaDto) {
|
||||||
|
this.name = cinemaDto.getName();
|
||||||
|
this.image = cinemaDto.getImage().getBytes();
|
||||||
|
this.sessions = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getImage() {
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setImage(byte[] image) {
|
||||||
|
this.image = image;
|
||||||
|
}
|
||||||
|
|
||||||
public List<Session> getSessions() {
|
public List<Session> getSessions() {
|
||||||
return sessions;
|
return sessions;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.labwork1.app.student.model;
|
package com.labwork1.app.student.model;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
@ -19,6 +20,7 @@ public class Order {
|
|||||||
private Date dateOfPurchase;
|
private Date dateOfPurchase;
|
||||||
@ManyToOne(fetch = FetchType.EAGER)
|
@ManyToOne(fetch = FetchType.EAGER)
|
||||||
@JoinColumn(name = "customer_fk")
|
@JoinColumn(name = "customer_fk")
|
||||||
|
@JsonIgnore
|
||||||
private Customer customer;
|
private Customer customer;
|
||||||
@OneToMany(mappedBy = "order", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
|
@OneToMany(mappedBy = "order", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
|
||||||
private List<OrderSession> sessions;
|
private List<OrderSession> sessions;
|
||||||
|
@ -1,19 +1,23 @@
|
|||||||
package com.labwork1.app.student.model;
|
package com.labwork1.app.student.model;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "order_session")
|
@Table(name = "order_session")
|
||||||
public class OrderSession {
|
public class OrderSession {
|
||||||
@EmbeddedId
|
@EmbeddedId
|
||||||
|
@JsonIgnore
|
||||||
private OrderSessionKey id;
|
private OrderSessionKey id;
|
||||||
@ManyToOne
|
@ManyToOne
|
||||||
@MapsId("sessionId")
|
@MapsId("sessionId")
|
||||||
@JoinColumn(name = "session_id")
|
@JoinColumn(name = "session_id")
|
||||||
|
@JsonIgnore
|
||||||
private Session session;
|
private Session session;
|
||||||
@ManyToOne
|
@ManyToOne
|
||||||
@MapsId("orderId")
|
@MapsId("orderId")
|
||||||
@JoinColumn(name = "order_id")
|
@JoinColumn(name = "order_id")
|
||||||
|
@JsonIgnore
|
||||||
private Order order;
|
private Order order;
|
||||||
@Column(name = "count")
|
@Column(name = "count")
|
||||||
private Integer count;
|
private Integer count;
|
||||||
|
@ -53,7 +53,7 @@ public class OrderRepositoryImpl implements OrderRepositoryExtension {
|
|||||||
new OrderSessionKey(currentSession.getId(), currentOrder.getId()));
|
new OrderSessionKey(currentSession.getId(), currentOrder.getId()));
|
||||||
|
|
||||||
if (currentSession.getCapacity() < count ||
|
if (currentSession.getCapacity() < count ||
|
||||||
(orderSession != null && orderSession.getCount() + count > currentSession.getCapacity())) {
|
(orderSession != null && orderSession.getCount() + count > currentSession.getMaxCount())) {
|
||||||
throw new IllegalArgumentException("No more tickets in session. Capacity - "+currentSession.getCapacity()+". Count - "+count);
|
throw new IllegalArgumentException("No more tickets in session. Capacity - "+currentSession.getCapacity()+". Count - "+count);
|
||||||
}
|
}
|
||||||
if (orderSession == null)
|
if (orderSession == null)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.labwork1.app.student.service;
|
package com.labwork1.app.student.service;
|
||||||
|
|
||||||
|
import com.labwork1.app.student.controller.CinemaDto;
|
||||||
import com.labwork1.app.student.model.Cinema;
|
import com.labwork1.app.student.model.Cinema;
|
||||||
import com.labwork1.app.student.repository.CinemaRepository;
|
import com.labwork1.app.student.repository.CinemaRepository;
|
||||||
import com.labwork1.app.util.validation.ValidatorUtil;
|
import com.labwork1.app.util.validation.ValidatorUtil;
|
||||||
@ -13,11 +14,19 @@ import java.util.Optional;
|
|||||||
public class CinemaService {
|
public class CinemaService {
|
||||||
private final CinemaRepository cinemaRepository;
|
private final CinemaRepository cinemaRepository;
|
||||||
private final ValidatorUtil validatorUtil;
|
private final ValidatorUtil validatorUtil;
|
||||||
|
|
||||||
public CinemaService(CinemaRepository cinemaRepository, ValidatorUtil validatorUtil) {
|
public CinemaService(CinemaRepository cinemaRepository, ValidatorUtil validatorUtil) {
|
||||||
this.cinemaRepository = cinemaRepository;
|
this.cinemaRepository = cinemaRepository;
|
||||||
this.validatorUtil = validatorUtil;
|
this.validatorUtil = validatorUtil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public Cinema addCinema(CinemaDto dto) {
|
||||||
|
final Cinema cinema = new Cinema(dto);
|
||||||
|
validatorUtil.validate(cinema);
|
||||||
|
return cinemaRepository.save(cinema);
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Cinema addCinema(String name) {
|
public Cinema addCinema(String name) {
|
||||||
final Cinema cinema = new Cinema(name);
|
final Cinema cinema = new Cinema(name);
|
||||||
@ -37,9 +46,10 @@ public class CinemaService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Cinema updateCinema(Long id, String name) {
|
public Cinema updateCinema(CinemaDto cinema) {
|
||||||
final Cinema currentCinema = findCinema(id);
|
final Cinema currentCinema = findCinema(cinema.getId());
|
||||||
currentCinema.setName(name);
|
currentCinema.setName(cinema.getName());
|
||||||
|
currentCinema.setImage(cinema.getImage().getBytes());
|
||||||
validatorUtil.validate(currentCinema);
|
validatorUtil.validate(currentCinema);
|
||||||
return cinemaRepository.save(currentCinema);
|
return cinemaRepository.save(currentCinema);
|
||||||
}
|
}
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
package com.labwork1.app.test.controller;
|
|
||||||
|
|
||||||
import com.labwork1.app.test.model.TestDto;
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/test")
|
|
||||||
public class TestController {
|
|
||||||
@PostMapping
|
|
||||||
public TestDto testValidation(@RequestBody @Valid TestDto testDto) {
|
|
||||||
return testDto;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
package com.labwork1.app.test.model;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import jakarta.validation.constraints.NotBlank;
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
|
|
||||||
public class TestDto {
|
|
||||||
@NotNull(message = "Id can't be null")
|
|
||||||
private Long id;
|
|
||||||
@NotBlank(message = "Name can't be null or empty")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
|
||||||
public String getData() {
|
|
||||||
return String.format("%s %s", id, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@JsonIgnore
|
|
||||||
public String getAnotherData() {
|
|
||||||
return "Test";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,4 +1,3 @@
|
|||||||
/*
|
|
||||||
package com.labwork1.app;
|
package com.labwork1.app;
|
||||||
|
|
||||||
import com.labwork1.app.student.model.Customer;
|
import com.labwork1.app.student.model.Customer;
|
||||||
@ -48,6 +47,8 @@ public class JpaCustomerTests {
|
|||||||
.findCinema(cinema1.getId()).getSessions().size(), 2);
|
.findCinema(cinema1.getId()).getSessions().size(), 2);
|
||||||
// 1 покупатель
|
// 1 покупатель
|
||||||
final Customer customer1 = customerService.addCustomer("Родион", "Иванов");
|
final Customer customer1 = customerService.addCustomer("Родион", "Иванов");
|
||||||
|
customerService.updateCustomer(customer1.getId(), "Пчел", "Пчелов");
|
||||||
|
Assertions.assertEquals(customerService.findCustomer(customer1.getId()).getLogin(), "Пчел");
|
||||||
// 1 заказ, 1 копия заказа
|
// 1 заказ, 1 копия заказа
|
||||||
final Order order0 = orderService.addOrder(customerService.findCustomer(customer1.getId()).getId());
|
final Order order0 = orderService.addOrder(customerService.findCustomer(customer1.getId()).getId());
|
||||||
final Order order1 = orderService.findOrder(order0.getId());
|
final Order order1 = orderService.findOrder(order0.getId());
|
||||||
@ -118,4 +119,3 @@ public class JpaCustomerTests {
|
|||||||
cinemaService.deleteCinema(cinema2.getId());
|
cinemaService.deleteCinema(cinema2.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
Loading…
Reference in New Issue
Block a user