diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt index f1f97bd9a37ab52478720c9bdb97ad6a4ed96ab8..7d9e08d4e9b0964966c005d785c27b10de465d10 100644 --- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt @@ -7,28 +7,27 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Controller import org.springframework.ui.Model import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import java.util.UUID.fromString import java.util.UUID.randomUUID +import kotlin.random.Random @Controller +@RequestMapping("/cinemas") class CinemasController { @Autowired var cinemaService: CinemaService? = null - @Autowired - var cinemaRepository: CinemaRepository? = null - - - @GetMapping("/cinemas") + @GetMapping("/list") fun getCinemasBrowsePage(model: Model): String? { model.addAttribute("cinemas", cinemaService?.findAll()) return "cinemas/list" } - @GetMapping("/cinema") + @GetMapping("/edit") fun getCinemaEditPage(@RequestParam(name = "id", required = false, defaultValue = "") id: String, model: Model): String? { - var cinema: Cinema? = null + val cinema: Cinema? if (id.isEmpty()) { cinema = Cinema() cinema.id = randomUUID() diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt new file mode 100644 index 0000000000000000000000000000000000000000..b900b4cf24b55cd81704df182ae3d7b52b5239ee --- /dev/null +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt @@ -0,0 +1,39 @@ +package com.s3ai.corporate_app2.controllers; + +import com.s3ai.corporate_app2.entities.Ticket +import com.s3ai.corporate_app2.entities.User +import com.s3ai.corporate_app2.services.TicketService +import com.s3ai.corporate_app2.services.UserService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Controller +import org.springframework.ui.Model +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import java.util.* + +@Controller +@RequestMapping("/tickets") +class TicketsController { + @Autowired + var ticketService: TicketService? = null + + @GetMapping("/list") + fun getTicketsBrowsePage(model: Model): String? { + model.addAttribute("tickets", ticketService?.findAll()) + return "tickets/list" + } + + @GetMapping("/edit") + fun getTicketEditPage(@RequestParam(name = "id", required = false, defaultValue = "") id: String, model: Model): String? { + val ticket: Ticket? + if (id.isEmpty()) { + ticket = Ticket() + ticket.id = UUID.randomUUID() + } else { + ticket = ticketService?.findOne(UUID.fromString(id)) + } + model.addAttribute("ticket", ticket) + return "tickets/edit" + } +} diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UserController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UserController.kt deleted file mode 100644 index 260fbaa6016c1ac348eb27f6f50f36d25bc2a11f..0000000000000000000000000000000000000000 --- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UserController.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.s3ai.corporate_app2.controllers - -import org.springframework.stereotype.Controller -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.RequestMapping - -@Controller -@RequestMapping("/users") -class UserController { - - @GetMapping("/list") - fun getUsersList(): String? { - return "index" - } - - @GetMapping("/edit") - fun getUsersEditPage(): String? { - return "index" - } -} \ No newline at end of file diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt new file mode 100644 index 0000000000000000000000000000000000000000..2cd3f89feb18b5c5d138e49d9242cdbe972b5cad --- /dev/null +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt @@ -0,0 +1,39 @@ +package com.s3ai.corporate_app2.controllers + +import com.s3ai.corporate_app2.entities.Cinema +import com.s3ai.corporate_app2.entities.User +import com.s3ai.corporate_app2.services.CinemaService +import com.s3ai.corporate_app2.services.UserService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Controller +import org.springframework.ui.Model +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import java.util.* + +@Controller +@RequestMapping("/users") +class UsersController { + @Autowired + var userService: UserService? = null + + @GetMapping("/list") + fun getUsersBrowsePage(model: Model): String? { + model.addAttribute("users", userService?.findAll()) + return "users/list" + } + + @GetMapping("/edit") + fun getUSerEditPage(@RequestParam(name = "id", required = false, defaultValue = "") id: String, model: Model): String? { + val user: User? + if (id.isEmpty()) { + user = User() + user.id = UUID.randomUUID() + } else { + user = userService?.findOne(UUID.fromString(id)) + } + model.addAttribute("user", user) + return "users/edit" + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt new file mode 100644 index 0000000000000000000000000000000000000000..3eb3eda21bbd7d5f3b51295fb064329fe6e12d13 --- /dev/null +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt @@ -0,0 +1,34 @@ +package com.s3ai.corporate_app2.controllers.rest + +import com.s3ai.corporate_app2.entities.Cinema +import com.s3ai.corporate_app2.services.CinemaService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController +import java.util.* +import kotlin.random.Random + +@RestController +@RequestMapping("/api/cinemas") +class CinemaApiController{ + @Autowired + var cinemaService: CinemaService? = null + + @GetMapping("/fill") + fun fillCinemas(): String? { + val locations : List<String> = listOf("Samara", "Izhevsk", "NeoTokyo", "Bangladesh", "Moscow", "Grozny"); + val names : List<String> = listOf("Nol", "Tcelkoviy", "Polushka", "Chekushka", "Osmushka", "Pudovichok", "Mediachok", "Silverchok", "Goldenchok", "Deviatichek", "Desatichek"); + var generatedNames: MutableList<String> = mutableListOf() + for (i in 0..300) { + val cinema = Cinema(); + cinema.id = UUID.randomUUID(); + cinema.name = names.random(); + generatedNames.add(cinema.name.toString()) + cinema.seatsCount = Random.nextInt(50, 300); + cinema.location = locations.random(); + cinemaService?.save(cinema); + } + return generatedNames.toString() + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt new file mode 100644 index 0000000000000000000000000000000000000000..a9660d2d1ae5248e286d7dbddb3082331d0c343d --- /dev/null +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt @@ -0,0 +1,46 @@ +package com.s3ai.corporate_app2.controllers.rest; + +import com.s3ai.corporate_app2.entities.Ticket +import com.s3ai.corporate_app2.entities.User +import com.s3ai.corporate_app2.services.CinemaService +import com.s3ai.corporate_app2.services.TicketService +import com.s3ai.corporate_app2.services.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController +import java.util.* +import kotlin.random.Random + +@RestController +@RequestMapping("/api/tickets") +class TicketApiController { + @Autowired + var userService: UserService? = null + @Autowired + var ticketService: TicketService? = null + @Autowired + var cinemaService: CinemaService? = null + + @GetMapping("/fill") + fun fillTickets(): String? { + val wordsFirst = arrayOf("Pirates", "Ladies", "Goblins", "Gangsters", "Programmers", "Hackers", "Wrestlers", "Animals", "Guardians") + val wordsSecond = arrayOf("of the", "in", "from") + val wordsThird = arrayOf("Galaxy", "America", "Russia", "Japan", "Ocean", "Deep", "Caribbean", "Matrix", "Internet", "Woods", "Caves") + + val users = userService?.findAll() + val cinemas = cinemaService?.findAll() + + var generatedNames: MutableList<String> = mutableListOf() + for (i in 0..300) { + val ticket = Ticket(); + ticket.id = UUID.randomUUID(); + ticket.movie = "${wordsFirst.random()} ${wordsSecond.random()} ${wordsThird.random()}"; + generatedNames.add(ticket.movie.toString()) + ticket.user = users?.random() + ticket.cinema = cinemas?.random() + ticketService?.save(ticket); + } + return generatedNames.toString() + } +} diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt new file mode 100644 index 0000000000000000000000000000000000000000..7d8266200c4d3f09b59ab5b44888dd833733231f --- /dev/null +++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt @@ -0,0 +1,35 @@ +package com.s3ai.corporate_app2.controllers.rest; + +import com.s3ai.corporate_app2.entities.Cinema +import com.s3ai.corporate_app2.entities.User +import com.s3ai.corporate_app2.services.UserService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController +import java.util.* +import kotlin.random.Random + +@RestController +@RequestMapping("/api/users") +class UserApiController { + @Autowired + var userService: UserService? = null + + @GetMapping("/fill") + fun fillCinemas(): String? { + val names = arrayOf("Jane", "Mary", "Paul", "Jason", "Keanu", "Andrew", "Joseph", "Jotaro", "Ivan", "Jolyne", "Walther"); + val surnames = arrayOf("Doe", "Reeves", "Statham", "Bourne", "Joestar", "Kujoh", "White", "Van Hallen", "Black", "Smith"); + var generatedNames: MutableList<String> = mutableListOf() + for (i in 0..300) { + val user = User(); + user.id = UUID.randomUUID(); + user.name = "${names.random()} ${surnames.random()}"; + generatedNames.add(user.name.toString()) + user.age = Random.nextInt(15, 70); + userService?.save(user); + } + return generatedNames.toString() + } + +} diff --git a/src/main/kotlin/com/s3ai/corporate_app2/entities/Ticket.kt b/src/main/kotlin/com/s3ai/corporate_app2/entities/Ticket.kt index 0a2417942d17b4edd0370f8cbbe1a96dde2a0be8..4b4c209d511ce626e074e5f5477d112cb574f4a3 100644 --- a/src/main/kotlin/com/s3ai/corporate_app2/entities/Ticket.kt +++ b/src/main/kotlin/com/s3ai/corporate_app2/entities/Ticket.kt @@ -11,7 +11,7 @@ class Ticket { @GeneratedValue(strategy = GenerationType.AUTO) var id: UUID? = null @OneToOne - private var user: User? = null + var user: User? = null @OneToOne var cinema: Cinema? = null @Column(name = "movie") diff --git a/src/main/kotlin/com/s3ai/corporate_app2/services/CinemaService.kt b/src/main/kotlin/com/s3ai/corporate_app2/services/CinemaService.kt index 9a1b8fd27dc89557ff90659cfbf8863f4fbc0350..58830812d46a763298c8256d32aa68d2bc8a938a 100644 --- a/src/main/kotlin/com/s3ai/corporate_app2/services/CinemaService.kt +++ b/src/main/kotlin/com/s3ai/corporate_app2/services/CinemaService.kt @@ -16,4 +16,4 @@ class CinemaService(private val cinemaRepository: CinemaRepository) { fun save(cinema: Cinema) = cinemaRepository.save(cinema) fun delete(cinema: Cinema) = cinemaRepository.delete(cinema) -} +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 4870cd859b37719de78c88e25902686a74985dbb..2b046747b6b61873c2a783b6c5240ea6750b4f25 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.thymeleaf.cache=false spring.datasource.driver-class-name=org.postgresql.Driver -spring.datasource.url=jdbc:postgresql://corporate_db2:5432/cinema?useSSL=false +spring.datasource.url=jdbc:postgresql://corporate_db2:5432/cinema spring.datasource.username=postgres spring.datasource.password=postgres spring.datasource.platform=postgres diff --git a/src/main/resources/static/coffee/cinemas.coffee b/src/main/resources/static/coffee/cinemas.coffee index 6c22ba16dfd0ab22f8da0f56a69d4e7f30f5f1e6..bce38c41a45519f71af9943ec6b94225940bd165 100644 --- a/src/main/resources/static/coffee/cinemas.coffee +++ b/src/main/resources/static/coffee/cinemas.coffee @@ -15,7 +15,7 @@ hrefToEdit = (event) -> removeCinema = (event) -> cinema_id = $("#modal_id").text() $.ajax - url: "#{context_url}/cinema/?id=#{cinema_id}", + url: "/api/cinemas/delete?id=#{cinema_id}", type: 'DELETE' error: (jqXHR, textStatus, errorThrown) -> console.log "AJAX Error: #{textStatus}" diff --git a/src/main/resources/static/coffee/tickets.coffee b/src/main/resources/static/coffee/tickets.coffee new file mode 100644 index 0000000000000000000000000000000000000000..fb73d380532325dc7a484e2b4cfbdcb18855e2a7 --- /dev/null +++ b/src/main/resources/static/coffee/tickets.coffee @@ -0,0 +1,31 @@ +fill_modal = (event) -> + target = $(this) + ticket_id = target.attr 'ticket_id' + if undefined != ticket_id and "" != ticket_id + $("#modal_id").text ticket_id + $("#modal_movie").text target.find("[attr_name='movie']").text() + $("#modal_cinema_id").text target.find("[attr_name='cinema_id']").text() + $("#modal_user_id").text target.find("[attr_name='user_id']").text() + $("#ticketModal").modal('toggle') + +hrefToEdit = (event) -> + ticket_id = $("#modal_id").text() + window.location.replace "#{context_url}/ticket/?id=#{ticket_id}" + +removeCinema = (event) -> + ticket_id = $("#modal_id").text() + $.ajax + url: "#{context_url}/ticket/?id=#{ticket_id}", + type: 'DELETE' + error: (jqXHR, textStatus, errorThrown) -> + console.log "AJAX Error: #{textStatus}" + success: (data, textStatus, jqXHR) -> + $("tr[ticket_id='#{ticket_id}").remove() + $("#ticketModal").modal('toggle') + +addListeners = -> + $('tr').on 'click', fill_modal + $('#edit_ticket').on 'click', hrefToEdit + $('#delete_ticket').on 'click', removeCinema + +$(document).ready(addListeners) \ No newline at end of file diff --git a/src/main/resources/static/js/cinemas.js b/src/main/resources/static/js/cinemas.js index 46c7d97974aeef1b8445a536bb46bdca77d3f12c..be966d3cef88cd38b4a03a920f40be0f8e9f8ceb 100644 --- a/src/main/resources/static/js/cinemas.js +++ b/src/main/resources/static/js/cinemas.js @@ -25,7 +25,7 @@ var cinema_id; cinema_id = $("#modal_id").text(); return $.ajax({ - url: `${context_url}/cinema/?id=${cinema_id}`, + url: `/api/cinemas/delete?id=${cinema_id}`, type: 'DELETE', error: function(jqXHR, textStatus, errorThrown) { return console.log(`AJAX Error: ${textStatus}`); diff --git a/src/main/resources/static/js/tickets.js b/src/main/resources/static/js/tickets.js new file mode 100644 index 0000000000000000000000000000000000000000..2878d4916074df080e756a7c013e9b8b3591e6bb --- /dev/null +++ b/src/main/resources/static/js/tickets.js @@ -0,0 +1,48 @@ +// Generated by CoffeeScript 2.4.1 +(function() { + var addListeners, fill_modal, hrefToEdit, removeCinema; + + fill_modal = function(event) { + var target, ticket_id; + target = $(this); + ticket_id = target.attr('ticket_id'); + if (void 0 !== ticket_id && "" !== ticket_id) { + $("#modal_id").text(ticket_id); + $("#modal_movie").text(target.find("[attr_name='movie']").text()); + $("#modal_cinema_id").text(target.find("[attr_name='cinema_id']").text()); + $("#modal_user_id").text(target.find("[attr_name='user_id']").text()); + return $("#ticketModal").modal('toggle'); + } + }; + + hrefToEdit = function(event) { + var ticket_id; + ticket_id = $("#modal_id").text(); + return window.location.replace(`${context_url}/ticket/?id=${ticket_id}`); + }; + + removeCinema = function(event) { + var ticket_id; + ticket_id = $("#modal_id").text(); + return $.ajax({ + url: `${context_url}/ticket/?id=${ticket_id}`, + type: 'DELETE', + error: function(jqXHR, textStatus, errorThrown) { + return console.log(`AJAX Error: ${textStatus}`); + }, + success: function(data, textStatus, jqXHR) { + $(`tr[ticket_id='${ticket_id}`).remove(); + return $("#ticketModal").modal('toggle'); + } + }); + }; + + addListeners = function() { + $('tr').on('click', fill_modal); + $('#edit_ticket').on('click', hrefToEdit); + return $('#delete_ticket').on('click', removeCinema); + }; + + $(document).ready(addListeners); + +}).call(this); diff --git a/src/main/resources/templates/cinemas/list.html b/src/main/resources/templates/cinemas/list.html index 6976b4dd23be241e2ca8ca8c6df804ae61c579a7..cbcbf4c9dcae4fe4469139c628d50da7988264c9 100644 --- a/src/main/resources/templates/cinemas/list.html +++ b/src/main/resources/templates/cinemas/list.html @@ -1,10 +1,77 @@ -<!DOCTYPE html> -<html lang="en"> +<html xmlns:th="http://www.thymeleaf.org"> <head> - <meta charset="UTF-8"> - <title>Title</title> + <title>Cinemas list</title> + <link rel="stylesheet" href="/css/cinemas.css"> + <head th:include="commons/imports"></head> </head> -<body> -Listing +<body class="themed-gradient"> +<body th:include="commons/header"></body> +<div class="container-fluid"> + <div class="row table-padding justify-content-center"> + <table class="table shadow col-6 table-striped table-dark"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Name</th> + <th scope="col">Location</th> + <th scope="col">Seats count</th> + </tr> + </thead> + <tbody> + <tr th:each="sb : ${cinemas}" th:with="mycounter = 0"> + <td th:text="${mycounter}" th:with="mycounter = ${mycounter + 1}">#</td> + <td th:text="${sb.getName()}">Name</td> + <td th:text="${sb.getLocation()}">Location</td> + <td th:text="${sb.getSeatsCount()}">Seats</td> + </tr> + </tbody> + </table> + </div> + <div class="modal fade" id="cinemaModal" tabindex="-1" role="dialog" + aria-labelledby="cinemaModalTitle" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalLongTitle">Cinema info</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <div class="d-flex flex-column"> + <div class="d-flex flex-row justify-content-between"> + <p>ID:</p> + <p id="modal_id"></p> + </div> + <div class="d-flex flex-row justify-content-between"> + <p>Name:</p> + <p id="modal_name"></p> + </div> + <div class="d-flex flex-row justify-content-between"> + <p>Location:</p> + <p id="modal_location">value</p> + </div> + <div class="d-flex flex-row justify-content-between"> + <p>Seats count:</p> + <p id="modal_seats">value</p> + </div> + </div> + </div> + <div class="modal-footer"> + <button type="button" id="edit_cinema" class="btn btn-primary"><i class="fas fa-edit"></i> Edit + cinema + </button> + <button type="button" id="delete_cinema" class="btn btn-danger"><i class="fas fa-trash-alt"></i> + Delete cinema + </button> + <button type="button" class="btn btn-secondary" data-dismiss="modal"><i class="fas fa-times"></i> + Close + </button> + </div> + </div> + </div> + </div> +</div> </body> -</html> \ No newline at end of file +<script src="js/cinemas.js"></script> +</html> diff --git a/src/main/resources/templates/commons/header.html b/src/main/resources/templates/commons/header.html index 5d8d23e9f39ac111c521dd833e8cd0e2f24bd147..29055b77bc3599e4aac2cb74403e865cc11ceebf 100644 --- a/src/main/resources/templates/commons/header.html +++ b/src/main/resources/templates/commons/header.html @@ -16,8 +16,8 @@ Cinemas </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownCinema"> - <a class="dropdown-item" href="/cinema">Create</a> - <a class="dropdown-item" href="/cinemas">View</a> + <a class="dropdown-item" href="/cinemas/edit">Create</a> + <a class="dropdown-item" href="/cinemas/list">View</a> </div> </li> @@ -27,8 +27,8 @@ Tickets </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownTicket"> - <a class="dropdown-item" href="/ticket">Create</a> - <a class="dropdown-item" href="/tickets">View</a> + <a class="dropdown-item" href="/tickets/edit">Create</a> + <a class="dropdown-item" href="/tickets/list">View</a> </div> </li> @@ -38,8 +38,8 @@ Users </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownUser"> - <a class="dropdown-item" href="/user">Create</a> - <a class="dropdown-item" href="/users">View</a> + <a class="dropdown-item" href="/users/edit">Create</a> + <a class="dropdown-item" href="/users/list">View</a> </div> </li> </ul> diff --git a/src/main/resources/templates/tickets/edit.html b/src/main/resources/templates/tickets/edit.html new file mode 100644 index 0000000000000000000000000000000000000000..566549bdf8fae810809c1a81066000687cb338f6 --- /dev/null +++ b/src/main/resources/templates/tickets/edit.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Title</title> +</head> +<body> + +</body> +</html> \ No newline at end of file diff --git a/src/main/resources/templates/tickets/list.html b/src/main/resources/templates/tickets/list.html new file mode 100644 index 0000000000000000000000000000000000000000..d47ffdd95070e44cb7e5a6f79335035e59785d26 --- /dev/null +++ b/src/main/resources/templates/tickets/list.html @@ -0,0 +1,80 @@ +<html xmlns:th="http://www.thymeleaf.org"> +<head> + <title>Tickets list</title> + <link rel="stylesheet" href="/css/tickets.css"> + <head th:include="commons/imports"></head> +</head> +<body class="themed-gradient"> +<body th:include="commons/header"></body> +<div class="container-fluid"> + <div class="row table-padding justify-content-center"> + <table class="table shadow col-6 table-striped table-dark"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Movie</th> + <th scope="col">Cinema</th> + <th scope="col">User</th> + </tr> + </thead> + <tbody th:with="mycounter = 0"> + <tr th:each="sb : ${tickets}"> + <td th:text="${mycounter}" th:with="mycounter = ${mycounter + 1}">#</td> + <td th:text="${sb.getMovie()}">Movie</td> + <td th:text="${sb.getCinema()}">Cinema</td> + <td th:text="${sb.getUser()}">User</td> + </tr> + </tbody> + </table> + </div> + <div class="modal fade" id="ticketModal" tabindex="-1" role="dialog" + aria-labelledby="ticketModalTitle" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalLongTitle">Ticket info</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <div class="d-flex flex-column"> + <div class="d-flex flex-row justify-content-between"> + <p>ID:</p> + <p id="modal_id"></p> + </div> + <div class="d-flex flex-row justify-content-between"> + <p>Movie:</p> + <p id="modal_movie"></p> + </div> + <div class="d-flex flex-row justify-content-between"> + <p>User:</p> + <p id="modal_user_id">value</p> + </div> + <div class="d-flex flex-row justify-content-between"> + <p>Cinema:</p> + <p id="modal_cinema_id">value</p> + </div> + </div> + </div> + <div class="modal-footer"> + <button type="button" id="edit_ticket" class="btn btn-primary"><i class="fas fa-edit"></i> Edit + ticket + </button> + <button type="button" id="delete_ticket" class="btn btn-danger"><i class="fas fa-trash-alt"></i> + Delete ticket + </button> + <button type="button" class="btn btn-secondary" data-dismiss="modal"><i class="fas fa-times"></i> + Close + </button> + </div> + </div> + </div> + </div> +</div> +</body> +<script> + let context_url = "${pageContext.request.contextPath}" +</script> +<script src="js/tickets.js"></script> +</html> diff --git a/src/main/resources/templates/users/edit.html b/src/main/resources/templates/users/edit.html new file mode 100644 index 0000000000000000000000000000000000000000..566549bdf8fae810809c1a81066000687cb338f6 --- /dev/null +++ b/src/main/resources/templates/users/edit.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Title</title> +</head> +<body> + +</body> +</html> \ No newline at end of file diff --git a/src/main/resources/templates/users/list.html b/src/main/resources/templates/users/list.html new file mode 100644 index 0000000000000000000000000000000000000000..7a6ba794766e087d91c009d81048f9463e13661b --- /dev/null +++ b/src/main/resources/templates/users/list.html @@ -0,0 +1,75 @@ +<html xmlns:th="http://www.thymeleaf.org"> +<head> + <title>Users list</title> + <link rel="stylesheet" href="/css/users.css"> + <head th:include="commons/imports"></head> +</head> +<body class="themed-gradient"> +<body th:include="commons/header"></body> + +<div class="container-fluid"> + <div class="row table-padding justify-content-center"> + <table class="table col-4 table-striped table-dark"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Name</th> + <th scope="col">Age</th> + </tr> + </thead> + <tbody> + <tr th:each="sb : ${users}" th:with="mycounter = 0"> + <td th:text="${mycounter}" th:with="mycounter = ${mycounter + 1}">#</td> + <td th:text="${sb.getName()}">Name</td> + <td th:text="${sb.getAge()}">Age</td> + </tr> + </tbody> + </table> + </div> + <div class="modal fade" id="userModal" tabindex="-1" role="dialog" + aria-labelledby="userModalTitle" aria-hidden="true"> + <div class="modal-dialog modal-dialog-centered" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalLongTitle">Cinema info</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <div class="d-flex flex-column"> + <div class="d-flex flex-row justify-content-between"> + <p>ID:</p> + <p id="modal_id"></p> + </div> + <div class="d-flex flex-row justify-content-between"> + <p>Name:</p> + <p id="modal_name"></p> + </div> + <div class="d-flex flex-row justify-content-between"> + <p>Age:</p> + <p id="modal_age"></p> + </div> + </div> + </div> + <div class="modal-footer"> + <button type="button" id="edit_user" class="btn btn-primary"><i class="fas fa-edit"></i> + Edit User + </button> + <button type="button" id="delete_user" class="btn btn-danger"><i class="fas fa-trash-alt"></i> + Delete User + </button> + <button type="button" class="btn btn-secondary" data-dismiss="modal"><i class="fas fa-times"></i> + Close + </button> + </div> + </div> + </div> + </div> +</div> +</body> +<script> + let context_url = "${pageContext.request.contextPath}" +</script> +<script src="js/users.js"></script> +</html>