Index: src/main/java/edu/gjoko/schedlr/controllers/rest/AppointmentApi.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/AppointmentApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
+++ src/main/java/edu/gjoko/schedlr/controllers/rest/AppointmentApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
@@ -0,0 +1,59 @@
+package edu.gjoko.schedlr.controllers.rest;
+
+import edu.gjoko.schedlr.dto.AppointmentDto;
+import edu.gjoko.schedlr.dto.AppointmentInfoDto;
+import edu.gjoko.schedlr.entity.Appointment;
+import edu.gjoko.schedlr.entity.Stakeholder;
+import edu.gjoko.schedlr.mappers.AppointmentDtoMapper;
+import edu.gjoko.schedlr.services.AppointmentsService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.security.sasl.AuthenticationException;
+import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("api/appointment")
+@AllArgsConstructor
+public class AppointmentApi {
+
+    private final AppointmentsService appointmentsService;
+    private final AppointmentDtoMapper appointmentsMapper;
+
+    @PostMapping
+    public void getBusinessTypes(@RequestBody Appointment appointment, HttpServletRequest request) {
+        Long customerId = (long) request.getSession(true).getAttribute("stakeholderId");
+        Stakeholder customer = new Stakeholder();
+        customer.setId(customerId);
+        appointment.setCustomer(customer);
+        appointmentsService.saveAppointment(appointment);
+    }
+
+    @GetMapping(path = "/business/{businessId}")
+    public List<AppointmentDto> getAppointmentsByBusiness(@PathVariable("businessId") Long businessId) {
+        return appointmentsService.getActiveAppointmentsByBusiness(businessId).stream()
+                .map(appointmentsMapper::appointmentToAppointmentDto)
+                .collect(Collectors.toList());
+    }
+
+    @GetMapping(path = "/future/me")
+    public List<AppointmentInfoDto> getFutureAppointmentsInfoList(HttpServletRequest request) {
+        Long businessOwnerId = (long) request.getSession(true).getAttribute("stakeholderId");
+        return appointmentsService.getFutureAppointmentInfoList(businessOwnerId);
+    }
+
+    @GetMapping(path = "/past/me")
+    public List<AppointmentInfoDto> getPastAppointmentsInfoList(HttpServletRequest request) {
+        Long stakeholderId = (long) request.getSession(true).getAttribute("stakeholderId");
+        return appointmentsService.getPastAppointmentInfoList(stakeholderId);
+    }
+
+    @DeleteMapping("/{appointmentId}")
+    public void cancelAppointment(@PathVariable("appointmentId") Long appointmentId, HttpServletRequest request) throws AuthenticationException {
+        Long stakeholderId = (long) request.getSession(true).getAttribute("stakeholderId");
+        appointmentsService.deleteAppointment(appointmentId, stakeholderId);
+    }
+}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/AppointmentController.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/AppointmentController.java	(revision 950fa0d7a6b439770e79c885947e9b7d6058b424)
+++ 	(revision )
@@ -1,37 +1,0 @@
-package edu.gjoko.schedlr.controllers.rest;
-
-import edu.gjoko.schedlr.entity.Appointment;
-import edu.gjoko.schedlr.entity.Business;
-import edu.gjoko.schedlr.entity.Stakeholder;
-import edu.gjoko.schedlr.repositories.AppointmentRepository;
-import edu.gjoko.schedlr.services.AppointmentsService;
-import edu.gjoko.schedlr.services.StakeholderService;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-@RestController
-@RequestMapping("api/appointment")
-@AllArgsConstructor
-public class AppointmentController {
-
-    private final AppointmentsService appointmentsService;
-
-    @PostMapping
-    public void getBusinessTypes(@RequestBody Appointment appointment, HttpServletRequest request) {
-        Long customerId = (long) request.getSession(true).getAttribute("stakeholderId");
-        Stakeholder customer = new Stakeholder();
-        customer.setId(customerId);
-        appointment.setCustomer(customer);
-        appointmentsService.saveAppointment(appointment);
-    }
-
-    @GetMapping(path = "/business/{businessId}")
-    public List<Appointment> getAppointmentsByBusiness(@PathVariable("businessId") Long businessId) {
-        var business = new Business();
-        business.setId(businessId);
-        return appointmentsService.getAppointmentsByBusiness(business);
-    }
-}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/BusinessApi.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/BusinessApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
+++ src/main/java/edu/gjoko/schedlr/controllers/rest/BusinessApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
@@ -0,0 +1,43 @@
+package edu.gjoko.schedlr.controllers.rest;
+
+import edu.gjoko.schedlr.entity.Business;
+import edu.gjoko.schedlr.services.BusinessService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@RestController
+@RequestMapping("api/business")
+@AllArgsConstructor
+public class BusinessApi {
+
+    private final BusinessService businessService;
+
+    @PostMapping
+    public void saveBusiness(@RequestBody Business business) {
+        businessService.saveBusiness(business);
+    }
+
+    @GetMapping
+    public List<Business> findAll() {
+        return businessService.findAll();
+    }
+
+    @PatchMapping
+    public void updateBusinesses(@RequestBody List<Business> businessList) {
+        businessService.updateBusinesses(businessList);
+    }
+
+    @GetMapping(path = "/me")
+    public Business getPersonalInfo(HttpServletRequest request) {
+        Long businessOwnerId = (long) request.getSession(true).getAttribute("stakeholderId");
+        return businessService.findByOwner(businessOwnerId);
+    }
+
+    @GetMapping(path = "/{businessTypeId}")
+    public List<Business> getBusinessesByBusinessType(@PathVariable("businessTypeId") Long id) {
+        return businessService.findByBusinessTypeAndActiveStatus(id);
+    }
+}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/BusinessController.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/BusinessController.java	(revision 950fa0d7a6b439770e79c885947e9b7d6058b424)
+++ 	(revision )
@@ -1,46 +1,0 @@
-package edu.gjoko.schedlr.controllers.rest;
-
-import edu.gjoko.schedlr.entity.Business;
-import edu.gjoko.schedlr.entity.BusinessType;
-import edu.gjoko.schedlr.services.BusinessService;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-@RestController
-@RequestMapping("api/business")
-@AllArgsConstructor
-public class BusinessController {
-
-    final BusinessService businessService;
-
-    @PostMapping
-    public void getBusinessTypes(@RequestBody Business business) {
-        businessService.saveBusiness(business);
-    }
-
-    @GetMapping
-    public List<Business> findAll() {
-        return businessService.findAll();
-    }
-
-    @PatchMapping
-    public void updateBusinesses(@RequestBody List<Business> businessList) {
-        businessService.updateBusinesses(businessList);
-    }
-
-    @GetMapping(path = "/me")
-    public Business getPersonalInfo(HttpServletRequest request) {
-        Long businessOwnerId = (long) request.getSession(true).getAttribute("stakeholderId");
-        return businessService.findByOwner(businessOwnerId);
-    }
-
-    @GetMapping(path = "/{businessTypeId}")
-    public List<Business> getBusinessesByBusinessType(@PathVariable("businessTypeId") Long id) {
-        BusinessType businessType = new BusinessType();
-        businessType.setId(id);
-        return businessService.findByBusinessTypeAndActiveStatus(businessType);
-    }
-}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/CustomerApi.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/CustomerApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
+++ src/main/java/edu/gjoko/schedlr/controllers/rest/CustomerApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
@@ -0,0 +1,29 @@
+package edu.gjoko.schedlr.controllers.rest;
+
+import edu.gjoko.schedlr.entity.Business;
+import edu.gjoko.schedlr.entity.Stakeholder;
+import edu.gjoko.schedlr.services.StakeholderService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@RestController
+@RequestMapping("api/customer")
+@AllArgsConstructor
+public class CustomerApi {
+
+    private final StakeholderService stakeholderService;
+
+    @GetMapping(path = "/me")
+    public Stakeholder getCustomerInfo(HttpServletRequest request) {
+        Long customerId = (long) request.getSession(true).getAttribute("stakeholderId");
+        return stakeholderService.findById(customerId);
+    }
+
+    @PatchMapping
+    public void updateCustomer(@RequestBody Stakeholder stakeholder) {
+        stakeholderService.saveOrUpdateStakeholder(stakeholder);
+    }
+}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/NomenclatureApi.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/NomenclatureApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
+++ src/main/java/edu/gjoko/schedlr/controllers/rest/NomenclatureApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
@@ -0,0 +1,22 @@
+package edu.gjoko.schedlr.controllers.rest;
+
+import edu.gjoko.schedlr.entity.BusinessType;
+import edu.gjoko.schedlr.services.NomenclaturesService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("api/nomenclatures")
+@AllArgsConstructor
+public class NomenclatureApi {
+
+    private final NomenclaturesService nomenclaturesService;
+    @GetMapping( "/businessTypes")
+    public List<BusinessType> getBusinessTypes() {
+        return nomenclaturesService.getBusinessTypes();
+    }
+}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/NomenclatureController.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/NomenclatureController.java	(revision 950fa0d7a6b439770e79c885947e9b7d6058b424)
+++ 	(revision )
@@ -1,22 +1,0 @@
-package edu.gjoko.schedlr.controllers.rest;
-
-import edu.gjoko.schedlr.entity.BusinessType;
-import edu.gjoko.schedlr.services.NomenclaturesService;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("api/nomenclatures")
-@AllArgsConstructor
-public class NomenclatureController {
-
-    private final NomenclaturesService nomenclaturesService;
-    @GetMapping( "/businessTypes")
-    public List<BusinessType> getBusinessTypes() {
-        return nomenclaturesService.getBusinessTypes();
-    }
-}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/ReviewApi.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/ReviewApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
+++ src/main/java/edu/gjoko/schedlr/controllers/rest/ReviewApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
@@ -0,0 +1,44 @@
+package edu.gjoko.schedlr.controllers.rest;
+
+import edu.gjoko.schedlr.dto.ReviewDto;
+import edu.gjoko.schedlr.entity.Review;
+import edu.gjoko.schedlr.entity.Stakeholder;
+import edu.gjoko.schedlr.mappers.ReviewDtoMapper;
+import edu.gjoko.schedlr.services.ReviewService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@RestController
+@RequestMapping("api/review")
+@AllArgsConstructor
+public class ReviewApi {
+
+    private final ReviewService reviewService;
+    private final ReviewDtoMapper reviewDtoMapper;
+
+    @PostMapping
+    public void getBusinessTypes(@RequestBody Review review, HttpServletRequest request) {
+        Long customerId = (long) request.getSession(true).getAttribute("stakeholderId");
+        Stakeholder customer = new Stakeholder();
+        customer.setId(customerId);
+        reviewService.save(review, customerId);
+    }
+
+    @GetMapping(path = "/me")
+    public List<ReviewDto> getReviews(HttpServletRequest request) {
+        Long customerId = (long) request.getSession(true).getAttribute("stakeholderId");
+        return reviewService.getReviewsByCustomerId(customerId).stream()
+                .map(reviewDtoMapper::mapToReviewDto)
+                .toList();
+    }
+
+    @GetMapping(path = "/{serviceId}")
+    public List<ReviewDto> getReviewsForService(@PathVariable("serviceId") Long serviceId) {
+        return reviewService.getReviewsByServiceId(serviceId).stream()
+                .map(reviewDtoMapper::mapToReviewDto)
+                .toList();
+    }
+}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/UserApi.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/UserApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
+++ src/main/java/edu/gjoko/schedlr/controllers/rest/UserApi.java	(revision 77205be723c8b2ffd1ee5618a05e1d12b1cee44a)
@@ -0,0 +1,19 @@
+package edu.gjoko.schedlr.controllers.rest;
+
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@RequestMapping("api/user")
+@AllArgsConstructor
+public class UserApi {
+
+    @GetMapping(path = "/me")
+    public boolean findAll(HttpServletRequest request) {
+        return request.getSession(true).getAttribute("stakeholderId") != null;
+    }
+}
Index: src/main/java/edu/gjoko/schedlr/controllers/rest/UserController.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/controllers/rest/UserController.java	(revision 950fa0d7a6b439770e79c885947e9b7d6058b424)
+++ 	(revision )
@@ -1,21 +1,0 @@
-package edu.gjoko.schedlr.controllers.rest;
-
-import edu.gjoko.schedlr.entity.Business;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-@RestController
-@RequestMapping("api/user")
-@AllArgsConstructor
-public class UserController {
-
-    @GetMapping(path = "/me")
-    public boolean findAll(HttpServletRequest request) {
-        return request.getSession(true).getAttribute("stakeholderId") != null;
-    }
-}
