Index: pom.xml
===================================================================
--- pom.xml	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ pom.xml	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -114,4 +114,15 @@
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-hateoas</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.14</version>
+        </dependency>
+
     </dependencies>
 
Index: src/main/java/mk/ukim/finki/db/distributorapp/_security/SecurityConfig.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_security/SecurityConfig.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_security/SecurityConfig.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -8,4 +8,5 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.data.web.config.EnableSpringDataWebSupport;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.config.Customizer;
@@ -32,4 +33,6 @@
 @EnableWebSecurity
 @EnableMethodSecurity()
+@EnableSpringDataWebSupport(pageSerializationMode =
+        EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)
 public class SecurityConfig {
 
@@ -54,4 +57,5 @@
                         .requestMatchers("/manager/**", "/api/manager/**").hasAnyRole("MANAGER", "ADMIN")
                         .requestMatchers("/driver/**", "/api/driver/**").hasAnyRole("DRIVER", "ADMIN")
+                        .requestMatchers("/api/images/upload").hasAnyRole("CUSTOMER","DRIVER","MANAGER","ADMIN")
                         .anyRequest()
                         .authenticated()
@@ -80,5 +84,10 @@
         CorsConfiguration configuration = new CorsConfiguration();
 
-        configuration.setAllowedOrigins(List.of(allowedOrigins.split(",")));
+//        String cleanedOrigins = allowedOrigins.replace("\"", "");
+//        List<String> origins = Arrays.stream(cleanedOrigins.split(","))
+//                .map(String::trim)
+//                .collect(Collectors.toList());
+
+        configuration.setAllowedOriginPatterns(List.of("*"));
         configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS"));
         configuration.setAllowedHeaders(List.of("*"));
Index: src/main/java/mk/ukim/finki/db/distributorapp/_security/auth/RestAuthController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_security/auth/RestAuthController.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_security/auth/RestAuthController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -11,8 +11,5 @@
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.GrantedAuthority;
-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;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -21,4 +18,5 @@
 @RequiredArgsConstructor
 @RequestMapping("/api/auth")
+@CrossOrigin(origins = "*")
 public class RestAuthController {
     private final AuthService authService;
Index: src/main/java/mk/ukim/finki/db/distributorapp/_security/jwt/JwtAuthenticationFilter.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_security/jwt/JwtAuthenticationFilter.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_security/jwt/JwtAuthenticationFilter.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.db.distributorapp._security.jwt;
 
+import jakarta.annotation.Nonnull;
 import jakarta.servlet.FilterChain;
 import jakarta.servlet.ServletException;
@@ -24,7 +25,7 @@
 
     @Override
-    protected void doFilterInternal(HttpServletRequest request,
-                                    HttpServletResponse response,
-                                    FilterChain filterChain) throws ServletException, IOException {
+    protected void doFilterInternal(@Nonnull HttpServletRequest request,
+                                    @Nonnull HttpServletResponse response,
+                                    @Nonnull FilterChain filterChain) throws ServletException, IOException {
 
         String token = resolveToken(request);
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestArticleController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestArticleController.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestArticleController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -4,11 +4,10 @@
 import mk.ukim.finki.db.distributorapp.article.ArticleService;
 import mk.ukim.finki.db.distributorapp.article.dto.ArticleDto;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.CrossOrigin;
-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;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PagedResourcesAssembler;
+import org.springframework.hateoas.EntityModel;
+import org.springframework.hateoas.PagedModel;
+import org.springframework.web.bind.annotation.*;
 
 @RestController
@@ -19,8 +18,16 @@
     private final ArticleService articleService;
 
-    @GetMapping("/")
-    public ResponseEntity<List<ArticleDto>> getArticles() {
-        List<ArticleDto> articles = this.articleService.getAllArticles();
-        return ResponseEntity.ok().body(articles);
+    @GetMapping("/all-pages")
+    public PagedModel<EntityModel<ArticleDto>> listArticles(
+            @RequestParam(required = false) Integer categoryId,
+            @RequestParam(required = false) Long manufacturerId,
+            @RequestParam(required = false) String name,
+            @RequestParam(defaultValue = "0") int page,
+            @RequestParam(defaultValue = "0") int size,
+            Pageable pageable,
+            PagedResourcesAssembler<ArticleDto> assembler
+    ) {
+        Page<ArticleDto> res = articleService.getArticlesPageable(categoryId, manufacturerId, name, page, size);
+        return assembler.toModel(res);
     }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCategoryController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCategoryController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCategoryController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,26 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.category.CategoryService;
+import mk.ukim.finki.db.distributorapp.category.dto.CategoryDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+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
+@RequiredArgsConstructor
+@RequestMapping("/api/category")
+@CrossOrigin(origins = "*")
+public class RestCategoryController {
+    private final CategoryService categoryService;
+
+    @GetMapping("/all")
+    public ResponseEntity<List<CategoryDto>> getAllCategories() {
+        List<CategoryDto> categories = this.categoryService.listCategories();
+        return ResponseEntity.ok().body(categories);
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCityController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCityController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCityController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,28 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.city.CityService;
+import mk.ukim.finki.db.distributorapp.city.dto.CityDtoRegister;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.CrossOrigin;
+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
+@RequiredArgsConstructor
+@RequestMapping("/api/city")
+@CrossOrigin(origins = "*")
+public class RestCityController {
+    private final CityService cityService;
+
+    @GetMapping("/all")
+    @PreAuthorize("hasAnyRole('ADMIN')")
+    public ResponseEntity<List<CityDtoRegister>> getAll() {
+        List<CityDtoRegister> cities = this.cityService.findAllCityDtos();
+        return ResponseEntity.ok().body(cities);
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCustomerController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCustomerController.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestCustomerController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -5,5 +5,7 @@
 import mk.ukim.finki.db.distributorapp.article.dto.ArticleDto;
 import mk.ukim.finki.db.distributorapp.articleUnit.ArticleUnitService;
+import mk.ukim.finki.db.distributorapp.customer.CustomerService;
 import mk.ukim.finki.db.distributorapp.customer.dto.CustomerDashboardDto;
+import mk.ukim.finki.db.distributorapp.customer.dto.CustomerFullDto;
 import mk.ukim.finki.db.distributorapp.delivery.DeliveryService;
 import mk.ukim.finki.db.distributorapp.delivery.dto.DeliveryDto;
@@ -19,6 +21,8 @@
 import mk.ukim.finki.db.distributorapp.warehouse.dto.WarehouseDto;
 import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.security.Principal;
 import java.util.List;
 
@@ -35,6 +39,8 @@
     private final UserService userService;
     private final ArticleUnitService articleUnitService;
+    private final CustomerService customerService;
 
     @GetMapping("/{customerId}/dashboard")
+    @PreAuthorize("hasAnyRole('CUSTOMER')")
     public ResponseEntity<CustomerDashboardDto> getCustomerDashboard(@PathVariable("customerId") Long customerId) {
         CustomerDashboardDto dashboard = new CustomerDashboardDto();
@@ -49,4 +55,5 @@
 
     @GetMapping("/articles")
+    @PreAuthorize("hasAnyRole('CUSTOMER')")
     public ResponseEntity<List<ArticleDto>> getArticles() {
         List<ArticleDto> articles = this.articleService.getAllArticles();
@@ -55,4 +62,5 @@
 
     @PostMapping("/create-order")
+    @PreAuthorize("hasAnyRole('CUSTOMER')")
     public ResponseEntity<OrderSimpleDto> createOrder(@RequestBody AndroidCreateOrderDto order){
         // todo: implement creating order via api and try to unify the code for both android and angular.
@@ -64,3 +72,37 @@
         return ResponseEntity.ok(new OrderSimpleDto());
     }
+
+    @GetMapping("/profile")
+    @PreAuthorize("hasAnyRole('CUSTOMER')")
+    public ResponseEntity<CustomerFullDto> getProfile(Principal principal) {
+        String userEmail = principal.getName();
+        CustomerFullDto result = this.customerService.getCustomerProfile(userEmail);
+        return ResponseEntity.ok().body(result);
+    }
+
+    @PutMapping("/profile")
+    @PreAuthorize("hasAnyRole('CUSTOMER')")
+    public ResponseEntity<?> updateProfile(@RequestBody CustomerFullDto customerFullDto, Principal principal) {
+        String userEmail = principal.getName();
+        UserDto user = this.userService.findUserDtoByEmail(userEmail);
+        CustomerFullDto customer = this.customerService.getCustomerProfile(userEmail);
+        if(customerFullDto.getCityId()==null){
+            customerFullDto.setCityId(customer.getCityId());
+        }
+        this.userService.updateUserDetails(
+                user.getId(),
+                customerFullDto.getFirstName(),
+                customerFullDto.getLastName(),
+                customerFullDto.getEmail(),
+                customerFullDto.getPhone(),
+                customerFullDto.getCityId()
+        );
+        this.customerService.updateCustomerDetails(
+                customer.getId(),
+                customerFullDto.getEdb(),
+                customerFullDto.getCompName()
+        );
+
+        return ResponseEntity.ok().build();
+    }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestDeliveryController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestDeliveryController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestDeliveryController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,50 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.customer.CustomerService;
+import mk.ukim.finki.db.distributorapp.delivery.Delivery;
+import mk.ukim.finki.db.distributorapp.delivery.DeliveryService;
+import mk.ukim.finki.db.distributorapp.delivery.dto.DeliveryDto;
+import mk.ukim.finki.db.distributorapp.delivery.dto.DeliveryFullDto;
+import mk.ukim.finki.db.distributorapp.delivery.dto.DeliveryWithOrdersDto;
+import mk.ukim.finki.db.distributorapp.order.OrdersService;
+import mk.ukim.finki.db.distributorapp.order.dto.OrdersDeliveryDto;
+import mk.ukim.finki.db.distributorapp.order.dto.OrdersDto;
+import mk.ukim.finki.db.distributorapp.users.UserService;
+import mk.ukim.finki.db.distributorapp.users.dto.UserDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.security.Principal;
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/delivery")
+@RequiredArgsConstructor
+@CrossOrigin(origins = "*")
+public class RestDeliveryController {
+    private final DeliveryService deliveryService;
+    private final OrdersService ordersService;
+    private final UserService userService;
+
+    @GetMapping("/delivery-with-orders/{deliveryId}")
+    @PreAuthorize("hasAnyRole('DRIVER','ADMIN')")
+    public ResponseEntity<DeliveryWithOrdersDto> getDeliveryWithOrder(@PathVariable Long deliveryId) {
+        DeliveryWithOrdersDto result = new DeliveryWithOrdersDto();
+        DeliveryFullDto delivery = this.deliveryService.findDeliveryById(deliveryId);
+        result.setDelivery(delivery);
+        List<OrdersDeliveryDto> deliveryOrders = this.ordersService.findDeliveryOrdersByDelivery(deliveryId);
+        result.setOrders(deliveryOrders);
+        return ResponseEntity.ok(result);
+    }
+
+    @GetMapping("/customer-current-deliveries")
+    @PreAuthorize("hasAnyRole('CUSTOMER')")
+    public ResponseEntity<List<DeliveryDto>> getCurrentDeliveries(Principal principal) {
+        String email = principal.getName();
+        UserDto user = this.userService.findUserDtoByEmail(email);
+        List<DeliveryDto> result = this.deliveryService.getCurrentDeliveriesByCustomer(user.getId());
+        return ResponseEntity.ok(result);
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestDriverController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestDriverController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestDriverController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,48 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.delivery.dto.DeliverySimpleDto;
+import mk.ukim.finki.db.distributorapp.driver.DriverService;
+import mk.ukim.finki.db.distributorapp.driver.dto.DriverDto;
+import mk.ukim.finki.db.distributorapp.users.UserService;
+import mk.ukim.finki.db.distributorapp.users.dto.UserDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.bind.annotation.CrossOrigin;
+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
+@RequiredArgsConstructor
+@RequestMapping("api/driver")
+@CrossOrigin(origins = "*")
+public class RestDriverController {
+
+    private final UserService userService;
+    private final DriverService driverService;
+
+    @GetMapping("/newDeliveries")
+    public ResponseEntity<?> getNewDeliveries(){
+        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
+        String email = auth.getPrincipal().toString();
+
+        UserDto user = this.userService.findUserDtoByEmail(email);
+
+        if(user == null){
+            return ResponseEntity.badRequest().body("User not found");
+        }
+
+        DriverDto driver = this.driverService.findById(user.getId());
+        if(driver == null){
+            return ResponseEntity.badRequest().body("Driver not found");
+        }
+
+        List<DeliverySimpleDto> deliveries = this.driverService.getNewAssignedDeliveries(driver.getId());
+
+        return ResponseEntity.ok().body(deliveries);
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestImageStoreController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestImageStoreController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestImageStoreController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,90 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.imageStore.ImageStoreService;
+import mk.ukim.finki.db.distributorapp.imageStore.dto.ImageStoreDto;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.StreamUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/images")
+@CrossOrigin(origins = "*")
+public class RestImageStoreController {
+    private final ImageStoreService imageStoreService;
+    private final ServletContext servletContext;
+
+    @Value(value = "${app.upload.dir:${user.home}/uploads}")
+    private String uploadDir;
+
+    @PostMapping("/upload")
+    @PreAuthorize("hasAnyRole('CUSTOMER','ADMIN')")
+    public ResponseEntity<?> uploadImage(
+            @RequestParam("file") MultipartFile file,
+            @RequestParam("entType") String entType,
+            @RequestParam("entId") Long entId
+    ) {
+        if (file.isEmpty() || !StringUtils.hasText(entType) || entId == null) {
+            return ResponseEntity.badRequest().body("Missing parameters");
+        }
+
+        try {
+            Integer stored = imageStoreService.storeAndCompress(file, entType, entId);
+
+            return ResponseEntity.ok(stored);
+        } catch (IOException ex) {
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Could not store image: " + ex.getMessage());
+        }
+    }
+
+    @GetMapping("/{filename:.+}")
+    public void serveImage(
+            @PathVariable String filename,
+            HttpServletResponse response
+    ) {
+        try {
+            Path file = Paths.get(uploadDir).resolve(filename).normalize();
+            Resource resource = new UrlResource(file.toUri());
+            if (!resource.exists() || !resource.isReadable()) {
+                response.setStatus(HttpStatus.NOT_FOUND.value());
+                return;
+            }
+
+            String contentType = servletContext.getMimeType(resource.getFile().getAbsolutePath());
+            if (contentType == null) {
+                contentType = "application/octet-stream";
+            }
+            response.setContentType(contentType);
+
+            StreamUtils.copy(resource.getInputStream(), response.getOutputStream());
+        } catch (MalformedURLException e) {
+            response.setStatus(HttpStatus.BAD_REQUEST.value());
+        } catch (IOException e) {
+            response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
+        }
+    }
+
+    @GetMapping("/list")
+    public List<ImageStoreDto> listImages(
+            @RequestParam String entType,
+            @RequestParam Long entId
+    ){
+        return imageStoreService.findByImgEntTypeAndImgEntId(entType,entId);
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestManagerController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestManagerController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestManagerController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,78 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.delivery.DeliveryService;
+import mk.ukim.finki.db.distributorapp.delivery.dto.DeliveryCreateDto;
+import mk.ukim.finki.db.distributorapp.delivery.dto.DeliverySimpleDto;
+import mk.ukim.finki.db.distributorapp.manager.ManagerService;
+import mk.ukim.finki.db.distributorapp.manager.dto.ManagerDashboardDto;
+import mk.ukim.finki.db.distributorapp.manager.dto.ManagerDto;
+import mk.ukim.finki.db.distributorapp.order.OrdersService;
+import mk.ukim.finki.db.distributorapp.order.dto.OrderSimpleDto;
+import mk.ukim.finki.db.distributorapp.users.UserService;
+import mk.ukim.finki.db.distributorapp.users.dto.UserDto;
+import mk.ukim.finki.db.distributorapp.vehicle.VehicleService;
+import mk.ukim.finki.db.distributorapp.vehicle.dto.VehicleBasicDto;
+import org.eclipse.angus.mail.iap.Response;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.security.Principal;
+import java.util.List;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/manager")
+@CrossOrigin(origins = "*")
+public class RestManagerController {
+
+    private final ManagerService managerService;
+    private final OrdersService ordersService;
+    private final DeliveryService deliveryService;
+    private final UserService userService;
+    private final VehicleService vehicleService;
+
+    @GetMapping("/dashboard")
+    @PreAuthorize("hasAnyRole('MANAGER')")
+    public ResponseEntity<ManagerDashboardDto> getManagerDashboard(Principal principal) {
+        ManagerDashboardDto dashboard = new ManagerDashboardDto();
+        String userEmail = principal.getName();
+        UserDto user = this.userService.findUserDtoByEmail(userEmail);
+        List<OrderSimpleDto> newOrders = this.ordersService.getNewOrdersByManager(user.getId());
+        dashboard.setNewOrders(newOrders);
+        List<DeliverySimpleDto> pendingDeliveries = this.deliveryService.getPendingDeliveriesByManager(user.getId());
+        dashboard.setPendingDeliveries(pendingDeliveries);
+        return ResponseEntity.ok(dashboard);
+    }
+
+    @GetMapping("/orders/unassigned")
+    @PreAuthorize("hasAnyRole('MANAGER')")
+    public ResponseEntity<List<OrderSimpleDto>> getManagerUnassignedOrders(Principal principal) {
+        String userEmail = principal.getName();
+        UserDto user = this.userService.findUserDtoByEmail(userEmail);
+        List<OrderSimpleDto> newOrders = this.ordersService.getNewOrdersByManager(user.getId());
+        return ResponseEntity.ok(newOrders);
+    }
+
+    @GetMapping("/vehicles")
+    @PreAuthorize("hasAnyRole('MANAGER')")
+    public ResponseEntity<List<VehicleBasicDto>> getManagerVehicles(Principal principal) {
+        String userEmail = principal.getName();
+        UserDto user = this.userService.findUserDtoByEmail(userEmail);
+        List<VehicleBasicDto> vehicles = this.vehicleService.getBasicVehiclesByManagerId(user.getId());
+        return ResponseEntity.ok(vehicles);
+    }
+
+    @PostMapping("/create-delivery")
+    @PreAuthorize("hasAnyRole('MANAGER')")
+    public ResponseEntity<?> createDelivery(DeliveryCreateDto newDelivery){
+        this.deliveryService.create(newDelivery);
+
+        List<DeliverySimpleDto> deliveries = this.deliveryService.getDeliveriesByVehicle(newDelivery.getVehId());
+        DeliverySimpleDto createdDelivery = deliveries.get(0);
+
+        this.ordersService.addOrdersToDelivery(newDelivery.getOrders(), createdDelivery.getDeliveryId());
+        return ResponseEntity.ok(createdDelivery.getDeliveryId());
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestManufacturerController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestManufacturerController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestManufacturerController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,26 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.manufacturer.ManufacturerService;
+import mk.ukim.finki.db.distributorapp.manufacturer.dto.ManufacturerDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.CrossOrigin;
+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
+@RequiredArgsConstructor
+@RequestMapping("/api/manufacturer")
+@CrossOrigin(origins = "*")
+public class RestManufacturerController {
+    private final ManufacturerService manufacturerService;
+
+    @GetMapping("/all")
+    public ResponseEntity<List<ManufacturerDto>> getAllManufacturers() {
+        List<ManufacturerDto> manufacturers = this.manufacturerService.getAllManufacturers();
+        return ResponseEntity.ok().body(manufacturers);
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestOrderController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestOrderController.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestOrderController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -18,8 +18,7 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.web.bind.annotation.*;
 
+import java.security.Principal;
 import java.util.List;
 
@@ -38,7 +37,7 @@
     @PostMapping("/create")
     @PreAuthorize("hasAnyRole('CUSTOMER','ADMIN')")
-    public ResponseEntity<?> createOrder(@RequestBody CreateOrderDto order) {
-        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
-        String userEmail = auth.getPrincipal().toString();
+    public ResponseEntity<?> createOrder(@RequestBody CreateOrderDto order, Principal principal) {
+
+        String userEmail = principal.getName();
 
         UserDto user = this.userService.findUserDtoByEmail(userEmail);
@@ -76,3 +75,12 @@
         return ResponseEntity.ok(result);
     }
+
+    @GetMapping("/customer-current-orders")
+    @PreAuthorize("hasAnyRole('CUSTOMER')")
+    public ResponseEntity<List<OrderSimpleDto>> getCurrentOrders(Principal principal) {
+        String email = principal.getName();
+        UserDto user = this.userService.findUserDtoByEmail(email);
+        List<OrderSimpleDto> result = this.ordersService.findSimpleOrdersByCustomer(user.getId());
+        return ResponseEntity.ok(result);
+    }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestVehicleController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestVehicleController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestVehicleController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,36 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.vehicle.VehicleService;
+import mk.ukim.finki.db.distributorapp.vehicle.dto.VehicleBasicDto;
+import mk.ukim.finki.db.distributorapp.vehicle.dto.VehicleDto;
+import mk.ukim.finki.db.distributorapp.warehouse.WarehouseService;
+import mk.ukim.finki.db.distributorapp.warehouse.dto.WarehouseDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/vehicle")
+@CrossOrigin(origins = "*")
+public class RestVehicleController {
+    private final VehicleService vehicleService;
+    private final WarehouseService warehouseService;
+
+    @GetMapping("/find-by-city")
+    @PreAuthorize("hasAnyRole('ADMIN')")
+    public ResponseEntity<List<VehicleBasicDto>> getVehiclesByCity(@RequestParam Integer cityId){
+        WarehouseDto wh = this.warehouseService.findByCityId(cityId);
+        List<VehicleBasicDto> vehiclesByCity = this.vehicleService.getVehiclesByWarehouse(wh.getId());
+        return ResponseEntity.ok().body(vehiclesByCity);
+    }
+
+    @PostMapping("/add-new")
+    @PreAuthorize("hasAnyRole('ADMIN')")
+    public ResponseEntity<VehicleDto> addNewVehicle(@RequestBody VehicleBasicDto vehicleBasicDto){
+        return null;
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestWarehouseController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestWarehouseController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/_web/api/RestWarehouseController.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,32 @@
+package mk.ukim.finki.db.distributorapp._web.api;
+
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.warehouse.WarehouseService;
+import mk.ukim.finki.db.distributorapp.warehouse.dto.WarehouseDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/warehouse")
+@CrossOrigin(origins = "*")
+public class RestWarehouseController {
+    private final WarehouseService warehouseService;
+
+    @GetMapping("/find-by-city")
+    @PreAuthorize("hasAnyRole('ADMIN')")
+    public ResponseEntity<WarehouseDto> findWarehouseByCity(@RequestParam Integer cityId) {
+        WarehouseDto wh = this.warehouseService.findByCityId(cityId);
+        return ResponseEntity.ok().body(wh);
+    }
+
+    @GetMapping("/all")
+    @PreAuthorize("hasAnyRole('ADMIN')")
+    public ResponseEntity<List<WarehouseDto>> findAll() {
+        List<WarehouseDto> result = this.warehouseService.findAll();
+        return ResponseEntity.ok().body(result);
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleRepository.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -3,4 +3,6 @@
 import lombok.NonNull;
 import mk.ukim.finki.db.distributorapp.article.dto.ArticleDto;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
@@ -180,3 +182,54 @@
     )
     List<ArticleDto> getArticlesByOrder(Long orderId);
+
+    @Query(nativeQuery = true,
+            value = """
+                    select a.art_id as id,
+                           a.art_name as name,
+                           m.man_name as manufacturer,
+                           cast(count(au.unit_id) as int) as quantity,
+                           m.man_id as manufacturerId,
+                           p.price as price,
+                           c.ctg_name as category,
+                           c.ctg_id as categoryId,
+                           a.art_weight as weight,
+                           a.art_image as image
+                    from article a
+                        join manufacturer m on a.man_id = m.man_id
+                        join category c on a.ctg_id = c.ctg_id
+                        join price p on a.art_id = p.art_id
+                        join unit_price up on p.price_id = up.price_id
+                        join article_unit au on up.unit_id = au.unit_id
+                        join warehouse wh on au.wh_id = wh.wh_id
+                    where
+                        (:catId is null or a.ctg_id = :catId)
+                        and (:manId is null or a.man_id = :manId)
+                        and (:nameFilter is null or lower(a.art_name) like lower(concat('%',:nameFilter,'%')))
+                    group by a.art_id,
+                             a.art_name,
+                             m.man_name,
+                             m.man_id,
+                             p.price,
+                             c.ctg_name,
+                             c.ctg_id,
+                             a.art_weight,
+                             a.art_image
+                    order by a.art_name
+                    """,
+            countQuery = """
+                    select *
+                    from article a
+                        join price p on a.art_id = p.art_id
+                            join unit_price up on p.price_id = up.price_id
+                                join article_unit au on up.unit_id = au.unit_id
+                    where
+                        (:catId is null or a.ctg_id = :catId)
+                        and (:manId is null or a.man_id = :manId)
+                        and (:nameFilter is null or lower(a.art_name) like lower(concat('%',:nameFilter,'%')))
+                    """)
+    Page<ArticleDto> findAllWithFiltersPageable(
+            @Param("catId") Integer categoryId,
+            @Param("manId") Long manufacturerId,
+            @Param("nameFilter") String nameFilter,
+            Pageable pageable);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleService.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.db.distributorapp.article.dto.ArticleDto;
+import org.springframework.data.domain.Page;
 
 import java.util.List;
@@ -19,3 +20,10 @@
 
     List<ArticleDto> getArticlesByOrder(Long orderId);
+
+    Page<ArticleDto> getArticlesPageable(
+            Integer categoryId,
+            Long manufacturerId,
+            String nameFilter,
+            int page,
+            int size);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleServiceImpl.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/article/ArticleServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -3,4 +3,8 @@
 import lombok.RequiredArgsConstructor;
 import mk.ukim.finki.db.distributorapp.article.dto.ArticleDto;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
@@ -57,3 +61,9 @@
         return this.articleRepository.getArticlesByOrder(orderId);
     }
+
+    @Override
+    public Page<ArticleDto> getArticlesPageable(Integer categoryId, Long manufacturerId, String nameFilter, int page, int size) {
+        Pageable pageable = PageRequest.of(page,size, Sort.by("art_name").ascending());
+        return this.articleRepository.findAllWithFiltersPageable(categoryId,manufacturerId,nameFilter,pageable);
+    }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/customer/Customer.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/customer/Customer.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/customer/Customer.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -44,3 +44,9 @@
     @OneToMany(mappedBy = "customer", fetch = FetchType.EAGER)
     private List<CustomerWeekday> customerWeekdays;
+
+    @Column(name = "cust_loc_latitude")
+    private Double customerLatitude;
+
+    @Column(name = "cust_loc_longitude")
+    private Double customerLongitude;
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerRepository.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -3,7 +3,9 @@
 import lombok.NonNull;
 import mk.ukim.finki.db.distributorapp.customer.dto.CustomerDto;
+import mk.ukim.finki.db.distributorapp.customer.dto.CustomerFullDto;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -13,14 +15,14 @@
             nativeQuery = true,
             value = """
-                    select c.user_id as id,
+                    select cust.user_id as id,
                            u.user_name as name,
                            u.user_email as email,
                            u.user_mobile as phone,
-                           c.cust_edb as edb,
-                           c.cust_company_name as compName,
-                           c.cust_adr as address,
-                           c.cust_representative_img
-                    from customer c
-                    join users u on c.user_id = u.user_id
+                           cust.cust_edb as edb,
+                           cust.cust_company_name as compName,
+                           cust.cust_adr as address,
+                           cust.cust_representative_img
+                    from customer cust
+                    join users u on cust.user_id = u.user_id
                     """
     )
@@ -63,6 +65,76 @@
             nativeQuery = true,
             value = "delete from customer " +
-                    "where user_id=?!"
+                    "where user_id=?1"
     )
     void delete(@NonNull Long id);
+
+    @Query(
+            value = """
+                    select cust.user_id
+                      from customer cust
+                      join users u on cust.user_id = u.user_id
+                     where u.user_email = ?1
+                    """,
+            nativeQuery = true
+    )
+    Long findCustomerIdByEmail(String email);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    select u.user_id as id,
+                           u.user_name as firstName,
+                           u.user_surname as lastName,
+                           u.user_email as email,
+                           u.user_mobile as phone,
+                           u.user_image as image,
+                           cty.city_id as cityId,
+                           cty.city_name as cityName,
+                           r.region_name as regionName,
+                           u.user_role as role,
+                           u.clazz_ as clazz_,
+                           u.user_active as userActive,
+                           cust.cust_edb as edb,
+                           cust.cust_company_name as compName,
+                           cust.cust_adr as address,
+                           cust.cust_representative_img as representativeImg
+                    from customer cust
+                    join users u on cust.user_id = u.user_id
+                    join city cty on u.city_id = cty.city_id
+                    join region r on cty.region_id = r.region_id
+                    where u.user_email = ?1
+                    """
+    )
+    CustomerFullDto getCustomerProfile(String userEmail);
+
+    @Transactional
+    @Modifying
+    @Query(
+            nativeQuery = true,
+            value = """
+                    update customer
+                    set cust_edb=:edb, cust_company_name=:compName, cust_representative_img=:repImg
+                    where user_id=:id
+                    """
+    )
+    void updateCustomer(
+            @Param(value = "id") Long id,
+            @Param(value = "edb") String edb,
+            @Param(value = "compName") String compName,
+            @Param(value = "repImg") String repImage);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    update customer
+                    set cust_edb=:edb, cust_company_name=:compName
+                    where user_id=:id
+                    """
+    )
+    @Transactional
+    @Modifying
+    void updateCustomerDetails(
+            @Param(value = "id") Long id,
+            @Param(value = "edb") String edb,
+            @Param(value = "compName") String compName);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerService.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.db.distributorapp.customer.dto.CustomerDto;
+import mk.ukim.finki.db.distributorapp.customer.dto.CustomerFullDto;
 
 public interface CustomerService {
@@ -12,3 +13,9 @@
 
     void deleteById(Long id);
+
+    CustomerFullDto getCustomerProfile(String userEmail);
+
+    void updateCustomer(Long id, String edb, String compName, String repImage);
+
+    void updateCustomerDetails(Long id, String edb, String compName);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerServiceImpl.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/customer/CustomerServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -3,5 +3,7 @@
 import lombok.RequiredArgsConstructor;
 import mk.ukim.finki.db.distributorapp.customer.dto.CustomerDto;
+import mk.ukim.finki.db.distributorapp.customer.dto.CustomerFullDto;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
@@ -27,4 +29,5 @@
 
     @Override
+    @Transactional
     public Integer edit(CustomerDto customerDto) {
         return this.customerRepository.edit(
@@ -40,3 +43,30 @@
         this.customerRepository.delete(id);
     }
+
+    @Override
+    public CustomerFullDto getCustomerProfile(String userEmail) {
+        return this.customerRepository.getCustomerProfile(userEmail);
+    }
+
+    @Override
+    @Transactional
+    public void updateCustomer(Long id, String edb, String compName, String repImage) {
+        this.customerRepository.updateCustomer(
+                id,
+                edb,
+                compName,
+                repImage
+        );
+    }
+
+    @Override
+    @Transactional
+    public void updateCustomerDetails(Long id, String edb, String compName) {
+        this.customerRepository.updateCustomerDetails(
+                id,
+                edb,
+                compName
+        );
+    }
+
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/customer/dto/CustomerFullDto.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/customer/dto/CustomerFullDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/customer/dto/CustomerFullDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,25 @@
+package mk.ukim.finki.db.distributorapp.customer.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class CustomerFullDto {
+    private Long id;
+    private String firstName;
+    private String lastName;
+    private String email;
+    private String phone;
+    private String image;
+    private Integer cityId;
+    private String cityName;
+    private String regionName;
+    private String role;
+    private String clazz_;
+    private Boolean userActive;
+    private String edb;
+    private String compName;
+    private String address;
+    private String repImage;
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryRepository.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -162,3 +162,22 @@
     )
     DeliveryFullDto findDeliveryDtoById(@Param("id") Long id);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    select del.del_id as deliveryid,
+                        u.user_name as driverName,
+                        del.del_date as deliveryDate,
+                        del.del_date_created as deliveryCreatedDate,
+                        del.d_status_id as deliveryStatus,
+                        ds.d_status_name as deliveryStatusName
+                    from delivery del
+                        join vehicle v on v.veh_id=del.veh_id
+                        join driver d on v.veh_id = d.veh_id
+                        join users u on d.user_id = u.user_id
+                        join delivery_status ds on ds.d_status_id=del.d_status_id
+                    where del.del_id = :delivery
+                    """
+    )
+    List<DeliverySimpleDto> getPendingDeliveriesByManager(@Param("delivery") Long id);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryService.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -23,3 +23,5 @@
 
     List<DeliverySimpleDto> getDeliveriesByVehicle(Integer vehicleId);
+
+    List<DeliverySimpleDto> getPendingDeliveriesByManager(Long id);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryServiceImpl.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/delivery/DeliveryServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -70,3 +70,8 @@
         return this.deliveryRepository.getDeliveriesByVehicle(vehicleId);
     }
+
+    @Override
+    public List<DeliverySimpleDto> getPendingDeliveriesByManager(Long id) {
+        return this.deliveryRepository.getPendingDeliveriesByManager(id);
+    }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/delivery/dto/DeliveryCreateDto.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/delivery/dto/DeliveryCreateDto.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/delivery/dto/DeliveryCreateDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -13,7 +13,7 @@
 @NoArgsConstructor
 public class DeliveryCreateDto {
-    private Integer vehId;
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date delDate;
+    private Integer vehId;
     private List<Long> orders;
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/delivery/dto/DeliveryWithOrdersDto.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/delivery/dto/DeliveryWithOrdersDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/delivery/dto/DeliveryWithOrdersDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,17 @@
+package mk.ukim.finki.db.distributorapp.delivery.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import mk.ukim.finki.db.distributorapp.order.dto.OrdersDeliveryDto;
+import mk.ukim.finki.db.distributorapp.order.dto.OrdersDto;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeliveryWithOrdersDto {
+    DeliveryFullDto delivery;
+    List<OrdersDeliveryDto> orders;
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStore.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStore.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStore.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,27 @@
+package mk.ukim.finki.db.distributorapp.imageStore;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "image_store")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ImageStore {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "img_path", nullable = false)
+    private String imgPath;
+
+    @Column(name = "img_ent_type", nullable = false)
+    private String imgEntType;
+
+    @Column(name = "img_ent_id", nullable = false)
+    private Long imgEntId;
+
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,43 @@
+package mk.ukim.finki.db.distributorapp.imageStore;
+
+import lombok.NonNull;
+import mk.ukim.finki.db.distributorapp.imageStore.dto.ImageStoreDto;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Repository
+public interface ImageStoreRepository extends JpaRepository<ImageStore, Long> {
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    select *
+                    from image_store
+                    where img_ent_type like :ent_type and img_ent_id=:ent_id
+                    """
+    )
+    List<ImageStoreDto> findByImgEntTypeAndImgEntId(
+            @NonNull @Param(value = "ent_type") String entType,
+            @NonNull @Param(value = "ent_id") Long entId);
+
+    @Modifying
+    @Transactional
+    @Query(
+            nativeQuery = true,
+            value = """
+                    insert into image_store(img_path,img_ent_type,img_ent_id) 
+                    values (:imgPath, :entType, :entId)
+                    """
+    )
+    Integer create(
+            @NonNull @Param(value = "imgPath") String imgPath,
+            @NonNull @Param(value = "entType") String imgEntType,
+            @NonNull @Param(value = "entId") Long imgEntId
+    );
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,16 @@
+package mk.ukim.finki.db.distributorapp.imageStore;
+
+import mk.ukim.finki.db.distributorapp.imageStore.dto.ImageStoreDto;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
+
+public interface ImageStoreService {
+
+    Integer storeAndCompress(MultipartFile file, String entType, Long entId) throws IOException;
+
+    List<ImageStoreDto>  findByImgEntTypeAndImgEntId(String entType, Long entId);
+
+
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/imageStore/ImageStoreServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,70 @@
+package mk.ukim.finki.db.distributorapp.imageStore;
+
+import jakarta.transaction.Transactional;
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.db.distributorapp.imageStore.dto.ImageStoreDto;
+import net.coobird.thumbnailator.Thumbnails;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.UUID;
+
+@Service
+@RequiredArgsConstructor
+public class ImageStoreServiceImpl implements ImageStoreService {
+
+    private final ImageStoreRepository imageStoreRepository;
+
+    @Value(value = "${app.upload.dir:${user.home}/resources/upload")
+    private String uploadDir;
+
+    @Value(value = "${app.image.url.prefix:/images/}")
+    private String imageUrlPrefix;
+
+    @Override
+    @Transactional
+    public Integer storeAndCompress(MultipartFile file, String entType, Long entId) throws IOException {
+        String original = file.getOriginalFilename();
+        String ext = "";
+
+        if(original!=null&&original.contains(".")){
+            ext=original.substring(original.lastIndexOf(".")+1);
+        }
+
+        String randomName = UUID.randomUUID() +ext;
+
+        Path uploadPath = Paths.get(uploadDir);
+        if(!Files.exists(uploadPath)){
+            Files.createDirectories(uploadPath);
+        }
+
+        Path fullOutputPath = uploadPath.resolve(randomName);
+        Thumbnails.of(file.getInputStream())
+                .size(800,800)
+                .outputQuality(0.8)
+                .toFile(fullOutputPath.toFile());
+
+        String publicPath = imageUrlPrefix+randomName;
+        ImageStore record = new ImageStore();
+        record.setImgPath(publicPath);
+        record.setImgEntType(entType);
+        record.setImgEntId(entId);
+
+        return imageStoreRepository.create(
+                record.getImgPath(),
+                record.getImgEntType(),
+                record.getImgEntId()
+        );
+    }
+
+    @Override
+    public List<ImageStoreDto> findByImgEntTypeAndImgEntId(String entType, Long entId) {
+        return this.imageStoreRepository.findByImgEntTypeAndImgEntId(entType, entId);
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/imageStore/dto/ImageStoreDto.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/imageStore/dto/ImageStoreDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/imageStore/dto/ImageStoreDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,15 @@
+package mk.ukim.finki.db.distributorapp.imageStore.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ImageStoreDto {
+    private Long id;
+    private String imgPath;
+    private String imgEntType;
+    private String imgEntId;
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerRepository.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -2,7 +2,9 @@
 
 import lombok.NonNull;
+import mk.ukim.finki.db.distributorapp.manager.dto.ManagerDto;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -38,3 +40,24 @@
     )
     void delete(@NonNull Long id);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    select m.user_id as id,
+                        u.user_name as name,
+                        u.user_email as email,
+                        u.user_mobile as phone,
+                        u.user_image as image,
+                        m.wh_id as whId,
+                        r.region_name as whRegion,
+                        c.city_name as whCity
+                    from manager m
+                        join users u on u.user_id=m.user_id
+                        join warehouse wh on m.wh_id=wh.wh_id
+                        join city c on wh.city_id=c.city_id
+                        join region r on c.region_id=r.region_id
+                    where m.user_id = :managerId
+                    """
+    )
+    ManagerDto getMangerDtoById(@Param("managerId") Long id);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerService.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -11,3 +11,5 @@
     void deleteById(Long id);
 
+    ManagerDto getById(Long id);
+
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerServiceImpl.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/manager/ManagerServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -30,3 +30,8 @@
         this.managerRepository.delete(id);
     }
+
+    @Override
+    public ManagerDto getById(Long managerId) {
+        return this.managerRepository.getMangerDtoById(managerId);
+    }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/manager/dto/ManagerDashboardDto.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/manager/dto/ManagerDashboardDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/manager/dto/ManagerDashboardDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,17 @@
+package mk.ukim.finki.db.distributorapp.manager.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import mk.ukim.finki.db.distributorapp.delivery.dto.DeliverySimpleDto;
+import mk.ukim.finki.db.distributorapp.order.dto.OrderSimpleDto;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ManagerDashboardDto {
+    private List<OrderSimpleDto> newOrders;
+    private List<DeliverySimpleDto> pendingDeliveries;
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersRepository.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -4,4 +4,5 @@
 import mk.ukim.finki.db.distributorapp.order.dto.OrderManagerDto;
 import mk.ukim.finki.db.distributorapp.order.dto.OrderSimpleDto;
+import mk.ukim.finki.db.distributorapp.order.dto.OrdersDeliveryDto;
 import mk.ukim.finki.db.distributorapp.order.dto.OrdersDto;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -205,5 +206,4 @@
                            o.ord_sum as ordSum,
                            o.ord_fulfillment_date as ordFulfillmentDate,
-                           c.cust_company_name as customerName,
                            o.ord_comment as ordComment,
                            o.o_status_id as oStatusId,
@@ -215,10 +215,9 @@
                         join article_unit au on au.wh_id = w.wh_id
                         join orders o on au.ord_id = o.ord_id
-                        join customer c on o.cust_id = c.user_id
                         join order_status os on os.o_status_id = o.o_status_id
                     where m.user_id = ?1
                     """
     )
-    List<OrderManagerDto> getNewOrdersByManager(@NonNull Long manager_id);
+    List<OrderSimpleDto> getNewOrdersByManager(@NonNull Long manager_id);
 
     @Query(
@@ -239,3 +238,59 @@
     )
     OrderSimpleDto findSimpleOrdersById(Long orderId);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    select o.ord_id as id,
+                           o.ord_date as ordDate,
+                           o.ord_sum as ordSum,
+                           o.ord_fulfillment_date as ordFulfillmentDate,
+                           o.ord_comment as ordComment,
+                           o.o_status_id as oStatusId,
+                           os.o_status_name as statusName,
+                           o.cust_id as customerId,
+                           c.cust_company_name as customerName,
+                           u.user_mobile as customerPhone,
+                           u.user_email as customerEmail,
+                           o.del_id as deliveryId,
+                           d.user_id as driverId,
+                           u1.user_name as driverName,
+                           u1.user_mobile as driverPhone,
+                           u1.user_email as driverEmail,
+                           o.pf_id as pfId,
+                           pfs.pf_status_name as pfStatus
+                    from orders o
+                        join order_status os on o.o_status_id = os.o_status_id
+                        join customer c on c.user_id=o.cust_id
+                        join users u on c.user_id=u.user_id
+                        join delivery del on o.del_id = del.del_id
+                        join vehicle v on del.veh_id = v.veh_id
+                        join driver d on d.veh_id=v.veh_id
+                        join users u1 on d.user_id=u1.user_id
+                        join pro_forma pf on o.pf_id = pf.pf_id
+                        join pro_forma_status pfs on pfs.pf_status_id=pf.pf_status_id
+                    where o.del_id=:delivery
+                    """
+    )
+    List<OrdersDto> findOrdersByDelivery(@Param("delivery") Long deliveryId);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    select o.ord_id as id,
+                           o.ord_date as ordDate,
+                           o.ord_sum as ordSum,
+                           o.ord_fulfillment_date as ordFulfillmentDate,
+                           o.ord_comment as ordComment,
+                           o.o_status_id as oStatusId,
+                           o.cust_id as customerId,
+                           o.del_id as deliveryId,
+                           c.cust_loc_latitude as latitude,
+                           c.cust_loc_longitude as longitude
+                    from orders o
+                        join customer c on c.user_id=o.cust_id
+                    where o.del_id=:delivery
+                    """
+    )
+    List<OrdersDeliveryDto> findDeliveryOrdersByDelivery(@Param("delivery") Long deliveryId);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersService.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -1,8 +1,5 @@
 package mk.ukim.finki.db.distributorapp.order;
 
-import mk.ukim.finki.db.distributorapp.order.dto.CreateOrderDto;
-import mk.ukim.finki.db.distributorapp.order.dto.OrderManagerDto;
-import mk.ukim.finki.db.distributorapp.order.dto.OrderSimpleDto;
-import mk.ukim.finki.db.distributorapp.order.dto.OrdersDto;
+import mk.ukim.finki.db.distributorapp.order.dto.*;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -24,8 +21,12 @@
     List<OrdersDto> findCurrentOrdersByCustomer(Long customerId);
 
-    List<OrderManagerDto> getNewOrdersByManager(Long managerId);
+    List<OrderSimpleDto> getNewOrdersByManager(Long managerId);
 
     void addOrdersToDelivery(List<Long> orderIds, Long deliveryId);
 
     OrderSimpleDto findSimpleOrderById(Long orderId);
+
+    List<OrdersDto> findOrdersByDelivery(Long deliveryId);
+
+    List<OrdersDeliveryDto> findDeliveryOrdersByDelivery(Long deliveryId);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersServiceImpl.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/order/OrdersServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -4,8 +4,6 @@
 import mk.ukim.finki.db.distributorapp.customer.CustomerService;
 import mk.ukim.finki.db.distributorapp.customer.dto.CustomerDto;
-import mk.ukim.finki.db.distributorapp.order.dto.CreateOrderDto;
-import mk.ukim.finki.db.distributorapp.order.dto.OrderManagerDto;
-import mk.ukim.finki.db.distributorapp.order.dto.OrderSimpleDto;
-import mk.ukim.finki.db.distributorapp.order.dto.OrdersDto;
+import mk.ukim.finki.db.distributorapp.delivery.DeliveryRepository;
+import mk.ukim.finki.db.distributorapp.order.dto.*;
 import mk.ukim.finki.db.distributorapp.proForma.ProFormaService;
 import mk.ukim.finki.db.distributorapp.proForma.dto.ProFormaDto;
@@ -26,4 +24,5 @@
     private final CustomerService customerService;
     private final ProFormaService proFormaService;
+    private final DeliveryRepository deliveryRepository;
 
     @Override
@@ -109,5 +108,5 @@
 
     @Override
-    public List<OrderManagerDto> getNewOrdersByManager(Long managerId) {
+    public List<OrderSimpleDto> getNewOrdersByManager(Long managerId) {
         return this.ordersRepository.getNewOrdersByManager(managerId);
     }
@@ -136,3 +135,13 @@
         return this.ordersRepository.findSimpleOrdersById(orderId);
     }
+
+    @Override
+    public List<OrdersDto> findOrdersByDelivery(Long deliveryId) {
+        return this.ordersRepository.findOrdersByDelivery(deliveryId);
+    }
+
+    @Override
+    public List<OrdersDeliveryDto> findDeliveryOrdersByDelivery(Long deliveryId) {
+        return this.ordersRepository.findDeliveryOrdersByDelivery(deliveryId);
+    }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/order/dto/OrdersDeliveryDto.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/order/dto/OrdersDeliveryDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/java/mk/ukim/finki/db/distributorapp/order/dto/OrdersDeliveryDto.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,25 @@
+package mk.ukim.finki.db.distributorapp.order.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+
+public class OrdersDeliveryDto {
+    private Long id;
+    private java.sql.Date ordDate;
+    private Integer ordSum;
+    private LocalDateTime ordFulfillmentDate;
+    private String ordComment;
+    private Short oStatusId;
+    private Long customerId;
+    private Long deliveryId;
+    private Double latitude;
+    private Double longitude;
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/users/UserRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/users/UserRepository.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/users/UserRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -119,8 +119,45 @@
                            u.clazz_ as clazz_
                     from users u
-                    join token t on u.user_id=t.t_user
+                    join token_ t on u.user_id=t.t_user
                     where t.t_value = :token
                     """
     )
     UsersLoadingDto findUserByResetToken(@NonNull @Param("token") String token);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    update users
+                    set user_name=?2, user_surname=?3,user_email=?4,user_mobile=?5,user_image=?6,city_id=?7
+                    where user_id=?1
+                    """
+    )
+    @Transactional
+    @Modifying
+    void updateUser(
+            @NonNull @Param("id") Long id,
+            @Param(value = "name") String firstName,
+            @Param(value = "surname") String lastName,
+            @Param(value = "email") String email,
+            @Param(value = "phone") String phone,
+            @Param(value = "image") String image,
+            @Param(value = "cityId") Integer cityId);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    update users
+                    set user_name=?2, user_surname=?3,user_email=?4,user_mobile=?5,city_id=?6
+                    where user_id=?1
+                    """
+    )
+    @Transactional
+    @Modifying
+    void updateUserDetails(
+            @NonNull @Param("id") Long id,
+            @Param(value = "name") String firstName,
+            @Param(value = "surname") String lastName,
+            @Param(value = "email") String email,
+            @Param(value = "phone") String phone,
+            @Param(value = "cityId") Integer cityId);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/users/UserService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/users/UserService.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/users/UserService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -14,3 +14,7 @@
 
     UsersLoadingDto findFullUserDtoByEmail(String userEmail);
+
+    void updateUser(Long id, String firstName, String lastName, String email, String phone, String image, Integer cityId);
+
+    void updateUserDetails(Long id, String firstName, String lastName, String email, String phone, Integer cityId);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/users/UserServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/users/UserServiceImpl.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/users/UserServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -5,4 +5,5 @@
 import mk.ukim.finki.db.distributorapp.users.dto.UsersLoadingDto;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
@@ -47,4 +48,31 @@
 
     @Override
+    @Transactional
+    public void updateUser(Long id,String firstName, String lastName, String email, String phone, String image, Integer cityId) {
+        this.userRepository.updateUser(
+                id,
+                firstName,
+                lastName,
+                email,
+                phone,
+                image,
+                cityId
+        );
+    }
+
+    @Override
+    @Transactional
+    public void updateUserDetails(Long id, String firstName, String lastName, String email, String phone, Integer cityId) {
+        this.userRepository.updateUserDetails(
+                id,
+                firstName,
+                lastName,
+                email,
+                phone,
+                cityId
+        );
+    }
+
+    @Override
     public void deleteUserById(Long id) {
         this.userRepository.delete(id);
Index: src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleRepository.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -108,3 +108,17 @@
     )
     List<VehicleDto> getVehiclesByManager(@NonNull @Param("manager") Long managerId);
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    select v.veh_id as id,
+                        wh.wh_id as whId,
+                        v.veh_plate as plateNumber
+                    from vehicle v
+                        join warehouse wh on v.wh_id=wh.wh_id
+                        join manager m on v.wh_id=m.wh_id
+                    where m.user_id = :manager
+                    """
+    )
+    List<VehicleBasicDto> getBasicVehiclesByManager(@Param("manager") Long managerId);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleService.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -17,3 +17,5 @@
 
     List<VehicleDto> getVehiclesByManager(Long managerId);
+
+    List<VehicleBasicDto> getBasicVehiclesByManagerId(Long managerId);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleServiceImpl.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/vehicle/VehicleServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -60,3 +60,8 @@
         return this.vehicleRepository.getVehiclesByManager(managerId);
     }
+
+    @Override
+    public List<VehicleBasicDto> getBasicVehiclesByManagerId(Long managerId) {
+        return this.vehicleRepository.getBasicVehiclesByManager(managerId);
+    }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseRepository.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseRepository.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -13,4 +13,19 @@
 
 public interface WarehouseRepository extends JpaRepository<Warehouse, Integer> {
+
+    @Query(
+            nativeQuery = true,
+            value = """
+                    select w.wh_id as id,
+                            w.wh_adr as address,
+                            w.city_id as cityid,
+                            c.city_name as cityName,
+                            c.region_id as regionId,
+                            r.region_name as regionName
+                    from warehouse w join city c on w.city_id = c.city_id join region r on c.region_id = r.region_id
+                    """
+    )
+    List<WarehouseDto> findAllDTO();
+
     @Modifying
     @Transactional
Index: src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseService.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseService.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -22,3 +22,5 @@
 
     WarehouseDto findByUserId(Integer cityId);
+
+    List<WarehouseDto> findAll();
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseServiceImpl.java	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/java/mk/ukim/finki/db/distributorapp/warehouse/WarehouseServiceImpl.java	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -62,3 +62,8 @@
         return this.warehouseRepository.findWarehouseDtoByCityId(cityId);
     }
+
+    @Override
+    public List<WarehouseDto> findAll() {
+        return this.warehouseRepository.findAllDTO();
+    }
 }
Index: src/main/resources/application-local.properties
===================================================================
--- src/main/resources/application-local.properties	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
+++ src/main/resources/application-local.properties	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -0,0 +1,53 @@
+server.port=8443
+
+## CORS Configuration
+management.endpoints.web.cors.allowed-origins=${ALLOWED_ORIGINS}
+
+## -------------------POSTGRESQL & JPA-------------------
+spring.datasource.url=${DB_LOCAL_URL}
+spring.datasource.username=${DB_LOCAL_USERNAME}
+spring.datasource.password=${DB_LOCAL_PASSWORD}
+
+spring.datasource.hikari.connectionTimeout=20000
+spring.datasource.hikari.maximumPoolSize=5
+
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
+
+spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
+spring.jpa.show-sql=true
+
+spring.datasource.hikari.schema=IND0_185022
+
+spring.jpa.properties.hibernate.format_sql=true
+spring.jpa.properties.hibernate.use_sql_comments=true
+spring.datasource.driver-class-name=org.postgresql.Driver
+
+## -------------------Image Uploads-------------------
+app.upload.dir=uploads
+app.image.url-predix=/images/
+
+spring.web.resources.static-locations=file:uploads/
+spring.web.resources.add-mappings=true
+
+## -------------------HTTPS Configuration-------------------
+server.ssl.key-store=classpath:keystore.p12
+server.ssl.key-store-password=${KS_PASSWORD}
+server.ssl.key-store-type=PKCS12
+server.ssl.key-alias=${KEY_ALIAS}
+server.ssl.enabled=true
+
+## -------------------JWT Configuration-------------------
+jwt.secret=${JWT_SECRET}
+jwt.validity=3600000
+
+## -------------------Email properties-------------------
+spring.mail.host=smtp.gmail.com
+spring.mail.port=587
+spring.mail.username=${SMTP_USERNAME}
+spring.mail.password=${SMTP_PASSWORD}
+spring.mail.properties.mail.smtp.auth=true
+spring.mail.properties.mail.smtp.starttls.enable=true
+
+## Logging/Debugging:
+logging.level.org.springframework.jdbc=DEBUG
+logging.level.org.hibernate.SQL=DEBUG
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 3342453412af6c42705af3b85344722f732ee964)
+++ src/main/resources/application.properties	(revision 1a2f5a57063d62be028109c190df02ed87e83903)
@@ -1,3 +1,3 @@
 spring.application.name=DistributorApp
 
-spring.profiles.active=prod
+spring.profiles.active=local
