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 7d9e08d4e9b0964966c005d785c27b10de465d10..50729cb63a01863a8ccd6f022be263f506a9dcb8 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/CinemasController.kt
@@ -1,8 +1,7 @@
 package com.s3ai.corporate_app2.controllers
 
-import com.s3ai.corporate_app2.entities.Cinema
-import com.s3ai.corporate_app2.repos.CinemaRepository
-import com.s3ai.corporate_app2.services.CinemaService
+import com.s3ai.corporate_app2.Cinema
+import com.s3ai.corporate_app2.CinemaService
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Controller
 import org.springframework.ui.Model
@@ -11,17 +10,16 @@ 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
+    lateinit var cinemaService: CinemaService
 
     @GetMapping("/list")
     fun getCinemasBrowsePage(model: Model): String? {
-        model.addAttribute("cinemas", cinemaService?.findAll())
+        model.addAttribute("cinemas", cinemaService.findAll())
         return "cinemas/list"
     }
 
@@ -32,7 +30,7 @@ class CinemasController {
             cinema = Cinema()
             cinema.id = randomUUID()
         } else {
-            cinema = cinemaService?.findOne(fromString(id))
+            cinema = cinemaService.findById(fromString(id))
         }
         model.addAttribute("cinema", cinema)
         return "cinemas/edit"
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt
index b900b4cf24b55cd81704df182ae3d7b52b5239ee..01c85f0bbfdd87d58aa9c465c7c0390ac82add9b 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/TicketsController.kt
@@ -1,9 +1,7 @@
 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 com.s3ai.corporate_app2.Ticket
+import com.s3ai.corporate_app2.TicketService
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Controller
 import org.springframework.ui.Model
@@ -16,11 +14,11 @@ import java.util.*
 @RequestMapping("/tickets")
 class TicketsController {
     @Autowired
-    var ticketService: TicketService? = null
+    lateinit var ticketService: TicketService
 
     @GetMapping("/list")
     fun getTicketsBrowsePage(model: Model): String? {
-        model.addAttribute("tickets", ticketService?.findAll())
+        model.addAttribute("tickets", ticketService.findAll())
         return "tickets/list"
     }
 
@@ -31,7 +29,7 @@ class TicketsController {
             ticket = Ticket()
             ticket.id = UUID.randomUUID()
         } else {
-            ticket = ticketService?.findOne(UUID.fromString(id))
+            ticket = ticketService.findById(UUID.fromString(id))
         }
         model.addAttribute("ticket", ticket)
         return "tickets/edit"
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt
index 2cd3f89feb18b5c5d138e49d9242cdbe972b5cad..e77ba34422e483847f9cfe08c378e8585d0248ad 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/UsersController.kt
@@ -1,9 +1,7 @@
 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 com.s3ai.corporate_app2.User
+import com.s3ai.corporate_app2.UserService
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Controller
 import org.springframework.ui.Model
@@ -16,11 +14,11 @@ import java.util.*
 @RequestMapping("/users")
 class UsersController {
     @Autowired
-    var userService: UserService? = null
+    lateinit var userService: UserService
 
     @GetMapping("/list")
     fun getUsersBrowsePage(model: Model): String? {
-        model.addAttribute("users", userService?.findAll())
+        model.addAttribute("users", userService.findAll())
         return "users/list"
     }
 
@@ -31,7 +29,7 @@ class UsersController {
             user = User()
             user.id = UUID.randomUUID()
         } else {
-            user = userService?.findOne(UUID.fromString(id))
+            user = userService.findById(UUID.fromString(id))
         }
         model.addAttribute("user", user)
         return "users/edit"
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/controllers/controllerUtils.kt b/src/main/kotlin/com/s3ai/corporate_app2/controllers/controllerUtils.kt
new file mode 100644
index 0000000000000000000000000000000000000000..74018cd1127b9b8f5a01fcd3b1c83c48c5a38887
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/controllerUtils.kt
@@ -0,0 +1,23 @@
+package com.s3ai.corporate_app2.controllers
+
+import com.s3ai.corporate_app2.CinemaServices
+import org.springframework.ui.Model
+import java.util.*
+import javax.servlet.http.HttpServletResponse
+
+fun <T> deleteInstance(id: String, instanceName: String, jpaService: CinemaServices<T>, response: HttpServletResponse): String? {
+    var responseString: String? = null
+    try {
+        val itemId = UUID.fromString(id)
+        val user = jpaService.findById(itemId)
+        if (null != user) jpaService.delete(user)
+        else {
+            response.status = HttpServletResponse.SC_NOT_FOUND
+            responseString = "$instanceName was not Found"
+        }
+    } catch (e: IllegalArgumentException) {
+        response.status = HttpServletResponse.SC_BAD_REQUEST
+        responseString = e.localizedMessage
+    }
+    return responseString
+}
\ 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
index 3eb3eda21bbd7d5f3b51295fb064329fe6e12d13..c563ba15e501de38f058369e56af12d4795c0156 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/CinemaApiController.kt
@@ -1,25 +1,25 @@
 package com.s3ai.corporate_app2.controllers.rest
 
-import com.s3ai.corporate_app2.entities.Cinema
-import com.s3ai.corporate_app2.services.CinemaService
+import com.s3ai.corporate_app2.Cinema
+import com.s3ai.corporate_app2.CinemaService
+import com.s3ai.corporate_app2.controllers.deleteInstance
 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 org.springframework.web.bind.annotation.*
 import java.util.*
+import javax.servlet.http.HttpServletResponse
 import kotlin.random.Random
 
 @RestController
 @RequestMapping("/api/cinemas")
-class CinemaApiController{
+class CinemaApiController {
     @Autowired
-    var cinemaService: CinemaService? = null
+    lateinit var cinemaService: CinemaService
 
     @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()
+        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");
+        val generatedNames: MutableList<String> = mutableListOf()
         for (i in 0..300) {
             val cinema = Cinema();
             cinema.id = UUID.randomUUID();
@@ -27,8 +27,14 @@ class CinemaApiController{
             generatedNames.add(cinema.name.toString())
             cinema.seatsCount = Random.nextInt(50, 300);
             cinema.location = locations.random();
-            cinemaService?.save(cinema);
+            cinemaService.save(cinema);
         }
         return generatedNames.toString()
     }
+
+    @DeleteMapping("/delete")
+    fun deleteUser(@RequestParam(name = "id", required = true) id: String, response: HttpServletResponse): String? {
+        return deleteInstance(id, "Cinema", cinemaService, response)
+    }
+
 }
\ 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
index a9660d2d1ae5248e286d7dbddb3082331d0c343d..439a0457d82fc3b887801b85d25936567c1394b1 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/TicketApiController.kt
@@ -1,26 +1,24 @@
 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 com.s3ai.corporate_app2.CinemaService
+import com.s3ai.corporate_app2.Ticket
+import com.s3ai.corporate_app2.TicketService
+import com.s3ai.corporate_app2.UserService
+import com.s3ai.corporate_app2.controllers.deleteInstance
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.web.bind.annotation.*
 import java.util.*
-import kotlin.random.Random
+import javax.servlet.http.HttpServletResponse
 
 @RestController
 @RequestMapping("/api/tickets")
 class TicketApiController {
     @Autowired
-    var userService: UserService? = null
+    lateinit var userService: UserService
     @Autowired
-    var ticketService: TicketService? = null
+    lateinit var ticketService: TicketService
     @Autowired
-    var cinemaService: CinemaService? = null
+    lateinit var cinemaService: CinemaService
 
     @GetMapping("/fill")
     fun fillTickets(): String? {
@@ -28,19 +26,25 @@ class TicketApiController {
         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()
+        val users = userService.findAll()
+        val cinemas = cinemaService.findAll()
 
-        var generatedNames: MutableList<String> = mutableListOf()
+        val 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);
+            ticket.user = users.random()
+            ticket.cinema = cinemas.random()
+            ticketService.save(ticket);
         }
         return generatedNames.toString()
     }
+
+    @DeleteMapping("/delete")
+    fun deleteUser(@RequestParam(name = "id", required = true) id: String, response: HttpServletResponse): String? {
+        return deleteInstance(id, "Ticket", ticketService, response)
+    }
+
 }
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
index 7d8266200c4d3f09b59ab5b44888dd833733231f..b9a0a8ca1612c25436ca6f78f8441506a585c79e 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/controllers/rest/UserApiController.kt
@@ -1,35 +1,38 @@
 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 com.s3ai.corporate_app2.User
+import com.s3ai.corporate_app2.UserService
+import com.s3ai.corporate_app2.controllers.deleteInstance
 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 org.springframework.web.bind.annotation.*
 import java.util.*
+import javax.servlet.http.HttpServletResponse
 import kotlin.random.Random
 
 @RestController
 @RequestMapping("/api/users")
 class UserApiController {
     @Autowired
-    var userService: UserService? = null
+    lateinit var userService: UserService
 
     @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()
+        val 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);
+            userService.save(user);
         }
         return generatedNames.toString()
     }
 
+    @DeleteMapping("/delete")
+    fun deleteUser(@RequestParam(name = "id", required = true) id: String, response: HttpServletResponse): String? {
+        return deleteInstance(id, "User", userService, response)
+    }
 }
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/entities.kt b/src/main/kotlin/com/s3ai/corporate_app2/entities.kt
new file mode 100644
index 0000000000000000000000000000000000000000..9eeb22c512264e1d766c5db121bd14809b3b14df
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/entities.kt
@@ -0,0 +1,61 @@
+package com.s3ai.corporate_app2
+
+import java.util.*
+import javax.persistence.*
+
+@Entity
+@Table(name = "cinema")
+class Cinema {
+    @Id
+    @Column(name = "ID")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    var id: UUID? = null
+    @Column(name = "name")
+    var name: String? = null
+    @Column(name = "seats_count")
+    var seatsCount: Int? = null
+    @Column(name = "location")
+    var location: String? = null
+
+    override fun toString(): String {
+        return "Cinema{id=$id, name='$name', seatsCount=$seatsCount, location='$location'}"
+    }
+
+}
+
+@Entity
+@Table(name = "cinema_user")
+class User {
+    @Id
+    @Column(name = "ID")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    var id: UUID? = null
+    @Column(name = "name")
+    var name: String? = null
+    @Column(name = "age")
+    var age: Int? = null
+
+    override fun toString(): String {
+        return "User{id=$id, name='$name', age=$age}"
+    }
+}
+
+@Entity
+@Table(name = "ticket")
+class Ticket {
+    @Id
+    @Column(name = "ID")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    var id: UUID? = null
+    @OneToOne
+    var user: User? = null
+    @OneToOne
+    var cinema: Cinema? = null
+    @Column(name = "movie")
+    var movie: String? = null
+
+    override fun toString(): String {
+        return "Ticket{id=$id, user=$user, cinema=$cinema, movie='$movie'}"
+    }
+}
+
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/entities/Cinema.kt b/src/main/kotlin/com/s3ai/corporate_app2/entities/Cinema.kt
deleted file mode 100644
index 582729c19e32c67b90ed79e12ca17e999ddb2dc8..0000000000000000000000000000000000000000
--- a/src/main/kotlin/com/s3ai/corporate_app2/entities/Cinema.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.s3ai.corporate_app2.entities
-
-import java.util.*
-import javax.persistence.*
-
-@Entity
-@Table(name = "cinema")
-class Cinema {
-    @Id
-    @Column(name = "ID")
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    var id: UUID? = null
-    @Column(name = "name")
-    var name: String? = null
-    @Column(name = "seats_count")
-    var seatsCount: Int? = null
-    @Column(name = "location")
-    var location: String? = null
-
-    override fun toString(): String {
-        return "Cinema{id=$id, name='$name', seatsCount=$seatsCount, location='$location'}"
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/entities/Ticket.kt b/src/main/kotlin/com/s3ai/corporate_app2/entities/Ticket.kt
deleted file mode 100644
index 4b4c209d511ce626e074e5f5477d112cb574f4a3..0000000000000000000000000000000000000000
--- a/src/main/kotlin/com/s3ai/corporate_app2/entities/Ticket.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.s3ai.corporate_app2.entities
-
-import java.util.*
-import javax.persistence.*
-
-@Entity
-@Table(name = "ticket")
-class Ticket {
-    @Id
-    @Column(name = "ID")
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    var id: UUID? = null
-    @OneToOne
-    var user: User? = null
-    @OneToOne
-    var cinema: Cinema? = null
-    @Column(name = "movie")
-    var movie: String? = null
-
-    override fun toString(): String {
-        return "Ticket{id=$id, user=$user, cinema=$cinema, movie='$movie'}"
-    }
-}
-
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/entities/User.kt b/src/main/kotlin/com/s3ai/corporate_app2/entities/User.kt
deleted file mode 100644
index a9b7fe0256e63e8e9879dbbd24b09a9b412f9703..0000000000000000000000000000000000000000
--- a/src/main/kotlin/com/s3ai/corporate_app2/entities/User.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.s3ai.corporate_app2.entities
-
-import java.util.*
-import javax.persistence.*
-
-@Entity
-@Table(name = "cinema_user")
-class User {
-    @Id
-    @Column(name = "ID")
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    var id: UUID? = null
-    @Column(name = "name")
-    var name: String? = null
-    @Column(name = "age")
-    var age: Int? = null
-
-    override fun toString(): String {
-        return "User{id=$id, name='$name', age=$age}"
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/repos/TicketRepository.kt b/src/main/kotlin/com/s3ai/corporate_app2/repos/TicketRepository.kt
deleted file mode 100644
index 02b5fda8f5ee542c353ad2b349e55fb17bed22b9..0000000000000000000000000000000000000000
--- a/src/main/kotlin/com/s3ai/corporate_app2/repos/TicketRepository.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.s3ai.corporate_app2.repos
-
-import com.s3ai.corporate_app2.entities.Ticket
-import org.springframework.data.jpa.repository.JpaRepository
-import org.springframework.stereotype.Repository
-import java.util.*
-
-@Repository
-interface TicketRepository : JpaRepository<Ticket, UUID> {
-
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/repos/UserRepository.kt b/src/main/kotlin/com/s3ai/corporate_app2/repos/UserRepository.kt
deleted file mode 100644
index 3677813b906b3280da1a12f1c9ba683046ba9339..0000000000000000000000000000000000000000
--- a/src/main/kotlin/com/s3ai/corporate_app2/repos/UserRepository.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.s3ai.corporate_app2.repos
-
-import com.s3ai.corporate_app2.entities.User
-import org.springframework.data.jpa.repository.JpaRepository
-import org.springframework.stereotype.Repository
-import java.util.*
-
-
-@Repository
-interface UserRepository : JpaRepository<User, UUID> {
-
-}
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/repos/CinemaRepository.kt b/src/main/kotlin/com/s3ai/corporate_app2/repositories.kt
similarity index 52%
rename from src/main/kotlin/com/s3ai/corporate_app2/repos/CinemaRepository.kt
rename to src/main/kotlin/com/s3ai/corporate_app2/repositories.kt
index cccc402833d74139e978599b09629681775ef5c4..6077d0af27e30232e62504301f20b3cf4d1769ac 100644
--- a/src/main/kotlin/com/s3ai/corporate_app2/repos/CinemaRepository.kt
+++ b/src/main/kotlin/com/s3ai/corporate_app2/repositories.kt
@@ -1,6 +1,5 @@
-package com.s3ai.corporate_app2.repos
+package com.s3ai.corporate_app2
 
-import com.s3ai.corporate_app2.entities.Cinema
 import org.springframework.data.jpa.repository.JpaRepository
 import org.springframework.stereotype.Repository
 import java.util.*
@@ -9,4 +8,15 @@ import java.util.*
 @Repository
 interface CinemaRepository : JpaRepository<Cinema, UUID> {
 
-}
\ No newline at end of file
+}
+
+@Repository
+interface TicketRepository : JpaRepository<Ticket, UUID> {
+
+}
+
+
+@Repository
+interface UserRepository : JpaRepository<User, UUID> {
+
+}
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/services.kt b/src/main/kotlin/com/s3ai/corporate_app2/services.kt
new file mode 100644
index 0000000000000000000000000000000000000000..51cf0fbcd93065f44c259907c8861916d8f35ad9
--- /dev/null
+++ b/src/main/kotlin/com/s3ai/corporate_app2/services.kt
@@ -0,0 +1,36 @@
+package com.s3ai.corporate_app2
+
+import org.springframework.stereotype.Service
+import java.util.*
+
+
+interface CinemaServices<T> {
+    fun findAll(): MutableList<T>
+    fun findById(id: UUID): T?
+    fun save(item: T): T
+    fun delete(item: T)
+}
+
+@Service
+class CinemaService(private val cinemaRepository: CinemaRepository) : CinemaServices<Cinema> {
+    override fun findAll(): MutableList<Cinema> = cinemaRepository.findAll()
+    override fun findById(id: UUID): Cinema? = cinemaRepository.findById(id).orElse(null)
+    override fun save(item: Cinema): Cinema = cinemaRepository.save(item)
+    override fun delete(item: Cinema) = cinemaRepository.delete(item)
+}
+
+@Service
+class UserService(private val userRepository: UserRepository) : CinemaServices<User> {
+    override fun findAll(): MutableList<User> = userRepository.findAll()
+    override fun findById(id: UUID): User? = userRepository.findById(id).orElse(null)
+    override fun save(item: User): User = userRepository.save(item)
+    override fun delete(item: User) = userRepository.delete(item)
+}
+
+@Service
+class TicketService(private val ticketRepository: TicketRepository) : CinemaServices<Ticket> {
+    override fun findAll(): MutableList<Ticket> = ticketRepository.findAll()
+    override fun findById(id: UUID): Ticket? = ticketRepository.findById(id).orElse(null)
+    override fun save(item: Ticket): Ticket = ticketRepository.save(item)
+    override fun delete(item: Ticket) = ticketRepository.delete(item)
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/services/CinemaService.kt b/src/main/kotlin/com/s3ai/corporate_app2/services/CinemaService.kt
deleted file mode 100644
index 58830812d46a763298c8256d32aa68d2bc8a938a..0000000000000000000000000000000000000000
--- a/src/main/kotlin/com/s3ai/corporate_app2/services/CinemaService.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.s3ai.corporate_app2.services
-
-import com.s3ai.corporate_app2.entities.Cinema
-import com.s3ai.corporate_app2.repos.CinemaRepository
-import org.springframework.stereotype.Service
-import java.util.*
-
-
-@Service
-class CinemaService(private val cinemaRepository: CinemaRepository) {
-
-    fun findAll(): MutableList<Cinema> = cinemaRepository.findAll()
-
-    fun findOne(id: UUID): Cinema? = cinemaRepository.findById(id).orElse(null)
-
-    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/kotlin/com/s3ai/corporate_app2/services/TicketService.kt b/src/main/kotlin/com/s3ai/corporate_app2/services/TicketService.kt
deleted file mode 100644
index 36f201638c442d4cf281bf34462ac7b23db3c2aa..0000000000000000000000000000000000000000
--- a/src/main/kotlin/com/s3ai/corporate_app2/services/TicketService.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.s3ai.corporate_app2.services
-
-import com.s3ai.corporate_app2.entities.Ticket
-import com.s3ai.corporate_app2.repos.TicketRepository
-import org.springframework.stereotype.Service
-import java.util.*
-
-@Service
-class TicketService(private val ticketRepository: TicketRepository) {
-
-    fun findAll(): MutableList<Ticket> = ticketRepository.findAll()
-
-    fun findOne(id: UUID): Ticket? = ticketRepository.findById(id).orElse(null)
-
-    fun save(ticket: Ticket) = ticketRepository.save(ticket)
-
-    fun delete(ticket: Ticket) = ticketRepository.delete(ticket)
-}
diff --git a/src/main/kotlin/com/s3ai/corporate_app2/services/UserService.kt b/src/main/kotlin/com/s3ai/corporate_app2/services/UserService.kt
deleted file mode 100644
index fa212be334160c5f9f4fe443fc767bda9c31d11b..0000000000000000000000000000000000000000
--- a/src/main/kotlin/com/s3ai/corporate_app2/services/UserService.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.s3ai.corporate_app2.services
-
-import com.s3ai.corporate_app2.entities.User
-import com.s3ai.corporate_app2.repos.UserRepository
-import org.springframework.stereotype.Service
-import java.util.*
-
-@Service
-class UserService(private val userRepository: UserRepository) {
-
-    fun findAll(): MutableList<User> = userRepository.findAll()
-
-    fun findOne(id: UUID): User? = userRepository.findById(id).orElse(null)
-
-    fun save(user: User) = userRepository.save(user)
-
-    fun delete(user: User) = userRepository.delete(user)
-}
\ No newline at end of file
diff --git a/src/main/resources/static/coffee/cinemas.coffee b/src/main/resources/static/coffee/cinemas.coffee
index bce38c41a45519f71af9943ec6b94225940bd165..0d9d412e0f37c3527e8a03bacb17f85aca004fdb 100644
--- a/src/main/resources/static/coffee/cinemas.coffee
+++ b/src/main/resources/static/coffee/cinemas.coffee
@@ -18,7 +18,11 @@ removeCinema = (event) ->
     url: "/api/cinemas/delete?id=#{cinema_id}",
     type: 'DELETE'
     error: (jqXHR, textStatus, errorThrown) ->
-      console.log "AJAX Error: #{textStatus}"
+      $.toast
+        icon: 'error',
+        hideAfter: 5000,
+        heading: "Cannot delete cinema",
+        text: "#{jqXHR.responseText}"
     success: (data, textStatus, jqXHR) ->
       $("tr[cinema_id='#{cinema_id}").remove()
       $("#cinemaModal").modal('toggle')
diff --git a/src/main/resources/static/coffee/tickets.coffee b/src/main/resources/static/coffee/tickets.coffee
index fb73d380532325dc7a484e2b4cfbdcb18855e2a7..c643493bb6e5a13c0760fe8770206a53bae0e633 100644
--- a/src/main/resources/static/coffee/tickets.coffee
+++ b/src/main/resources/static/coffee/tickets.coffee
@@ -10,15 +10,19 @@ fill_modal = (event) ->
 
 hrefToEdit = (event) ->
   ticket_id = $("#modal_id").text()
-  window.location.replace "#{context_url}/ticket/?id=#{ticket_id}"
+  window.location.replace "/tickets/edit?id=#{ticket_id}"
 
 removeCinema = (event) ->
   ticket_id = $("#modal_id").text()
   $.ajax
-    url: "#{context_url}/ticket/?id=#{ticket_id}",
+    url: "/api/tickets/delete?id=#{ticket_id}",
     type: 'DELETE'
     error: (jqXHR, textStatus, errorThrown) ->
-      console.log "AJAX Error: #{textStatus}"
+      $.toast
+        icon: 'error',
+        hideAfter: 5000,
+        heading: "Cannot delete ticket",
+        text: "#{jqXHR.responseText}"
     success: (data, textStatus, jqXHR) ->
       $("tr[ticket_id='#{ticket_id}").remove()
       $("#ticketModal").modal('toggle')
diff --git a/src/main/resources/static/coffee/users.coffee b/src/main/resources/static/coffee/users.coffee
index fb94baab59719ba3595ae0589893b349314f50ce..f9f187903ec8aa65bc073e2781c2f5aeb40843ca 100644
--- a/src/main/resources/static/coffee/users.coffee
+++ b/src/main/resources/static/coffee/users.coffee
@@ -9,12 +9,12 @@ fill_modal = (event) ->
 
 hrefToEdit = (event) ->
   user_id = $("#modal_id").text()
-  window.location.replace "#{context_url}/user/?id=#{user_id}"
+  window.location.replace "/users/edit?id=#{user_id}"
 
 removeCinema = (event) ->
   user_id = $("#modal_id").text()
   $.ajax
-    url: "#{context_url}/user/?id=#{user_id}",
+    url: "/api/users/delete?id=#{user_id}",
     type: 'DELETE'
     error: (jqXHR, textStatus, errorThrown) ->
       $.toast
diff --git a/src/main/resources/static/js/cinemas.js b/src/main/resources/static/js/cinemas.js
index be966d3cef88cd38b4a03a920f40be0f8e9f8ceb..127a899270bf962fbb6094c26fd6ea959b2ef400 100644
--- a/src/main/resources/static/js/cinemas.js
+++ b/src/main/resources/static/js/cinemas.js
@@ -28,7 +28,12 @@
       url: `/api/cinemas/delete?id=${cinema_id}`,
       type: 'DELETE',
       error: function(jqXHR, textStatus, errorThrown) {
-        return console.log(`AJAX Error: ${textStatus}`);
+        return $.toast({
+          icon: 'error',
+          hideAfter: 5000,
+          heading: "Cannot delete cinema",
+          text: `${jqXHR.responseText}`
+        });
       },
       success: function(data, textStatus, jqXHR) {
         $(`tr[cinema_id='${cinema_id}`).remove();
diff --git a/src/main/resources/static/js/tickets.js b/src/main/resources/static/js/tickets.js
index 2878d4916074df080e756a7c013e9b8b3591e6bb..14c63cf4764c9413ec5431a2f85239f63a1e1653 100644
--- a/src/main/resources/static/js/tickets.js
+++ b/src/main/resources/static/js/tickets.js
@@ -18,17 +18,22 @@
   hrefToEdit = function(event) {
     var ticket_id;
     ticket_id = $("#modal_id").text();
-    return window.location.replace(`${context_url}/ticket/?id=${ticket_id}`);
+    return window.location.replace(`/tickets/edit?id=${ticket_id}`);
   };
 
   removeCinema = function(event) {
     var ticket_id;
     ticket_id = $("#modal_id").text();
     return $.ajax({
-      url: `${context_url}/ticket/?id=${ticket_id}`,
+      url: `/api/tickets/delete?id=${ticket_id}`,
       type: 'DELETE',
       error: function(jqXHR, textStatus, errorThrown) {
-        return console.log(`AJAX Error: ${textStatus}`);
+        return $.toast({
+          icon: 'error',
+          hideAfter: 5000,
+          heading: "Cannot delete ticket",
+          text: `${jqXHR.responseText}`
+        });
       },
       success: function(data, textStatus, jqXHR) {
         $(`tr[ticket_id='${ticket_id}`).remove();
diff --git a/src/main/resources/static/js/users.js b/src/main/resources/static/js/users.js
index 6bc7f754a0d4a2def305abe22354942902baf284..c21c7c44077e2f74162c8584fcb12cdd5bab8ca6 100644
--- a/src/main/resources/static/js/users.js
+++ b/src/main/resources/static/js/users.js
@@ -17,14 +17,14 @@
   hrefToEdit = function(event) {
     var user_id;
     user_id = $("#modal_id").text();
-    return window.location.replace(`${context_url}/user/?id=${user_id}`);
+    return window.location.replace(`/users/edit?id=${user_id}`);
   };
 
   removeCinema = function(event) {
     var user_id;
     user_id = $("#modal_id").text();
     return $.ajax({
-      url: `${context_url}/user/?id=${user_id}`,
+      url: `/api/users/delete?id=${user_id}`,
       type: 'DELETE',
       error: function(jqXHR, textStatus, errorThrown) {
         return $.toast({
diff --git a/src/main/resources/templates/cinemas/list.html b/src/main/resources/templates/cinemas/list.html
index cbcbf4c9dcae4fe4469139c628d50da7988264c9..3993917cce3846009fbc086868b58efb1df6756d 100644
--- a/src/main/resources/templates/cinemas/list.html
+++ b/src/main/resources/templates/cinemas/list.html
@@ -18,11 +18,11 @@
             </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 th:attr="cinema_id=${cinema.getId()}" th:each="cinema, counter : ${cinemas}">
+                <td th:text="${counter.count}" >#</td>
+                <td attr_name="name" th:text="${cinema.getName()}">Name</td>
+                <td attr_name="location" th:text="${cinema.getLocation()}">Location</td>
+                <td attr_name="seats" th:text="${cinema.getSeatsCount()}">Seats</td>
             </tr>
             </tbody>
         </table>
@@ -73,5 +73,5 @@
     </div>
 </div>
 </body>
-<script src="js/cinemas.js"></script>
+<script src="/js/cinemas.js"></script>
 </html>
diff --git a/src/main/resources/templates/tickets/list.html b/src/main/resources/templates/tickets/list.html
index d47ffdd95070e44cb7e5a6f79335035e59785d26..2c8cdd943c8c526ae8ab7a899feaec096db3261f 100644
--- a/src/main/resources/templates/tickets/list.html
+++ b/src/main/resources/templates/tickets/list.html
@@ -18,11 +18,11 @@
             </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 th:attr="ticket_id=${ticket.getId()}" th:each="ticket, counter: ${tickets}">
+                <td th:text="${counter.count}">#</td>
+                <td attr_name="movie" th:text="${ticket.getMovie()}">Movie</td>
+                <td attr_name="cinema_id" th:text="${ticket.getCinema().getName()} + ' in ' + ${ticket.getCinema().getLocation()}">Cinema</td>
+                <td attr_name="user_id" th:text="${ticket.getUser().getName()} + ' aged ' + ${ticket.getUser().getAge()}">User</td>
             </tr>
             </tbody>
         </table>
@@ -73,8 +73,5 @@
     </div>
 </div>
 </body>
-<script>
-    let context_url = "${pageContext.request.contextPath}"
-</script>
-<script src="js/tickets.js"></script>
+<script src="/js/tickets.js"></script>
 </html>
diff --git a/src/main/resources/templates/users/list.html b/src/main/resources/templates/users/list.html
index 7a6ba794766e087d91c009d81048f9463e13661b..2fe35931c2706537c335082a70dbcc04bbff98cd 100644
--- a/src/main/resources/templates/users/list.html
+++ b/src/main/resources/templates/users/list.html
@@ -18,10 +18,10 @@
             </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 th:attr="user_id=${user.getId()}" th:each="user, counter : ${users}">
+                <td th:text="${counter.count}">#</td>
+                <td attr_name="name" th:text="${user.getName()}">Name</td>
+                <td attr_name="age" th:text="${user.getAge()}">Age</td>
             </tr>
             </tbody>
         </table>
@@ -68,8 +68,5 @@
     </div>
 </div>
 </body>
-<script>
-    let context_url = "${pageContext.request.contextPath}"
-</script>
-<script src="js/users.js"></script>
+<script src="/js/users.js"></script>
 </html>