Index: src/main/java/finki/db/tasty_tabs/entity/BackStaff.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/BackStaff.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/BackStaff.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -12,5 +12,5 @@
 @Data
 @NoArgsConstructor
-@PrimaryKeyJoinColumn(name = "employee_id")
+@PrimaryKeyJoinColumn(name = "employee_id", referencedColumnName = "user_id")
 public class BackStaff extends Employee {
 
@@ -18,3 +18,7 @@
     @JoinColumn(name = "staff_role_id", referencedColumnName = "id")
     private StaffRole staffRole;
+
+    public UserType getUserType() {
+        return UserType.BACK_STAFF;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/entity/Customer.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Customer.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/Customer.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -21,3 +21,7 @@
     @OneToMany(mappedBy = "customer")
     private List<OnlineOrder> onlineOrders;
+
+    public UserType getUserType() {
+        return UserType.CUSTOMER;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/entity/Employee.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Employee.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/Employee.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -28,12 +28,14 @@
 
     public Employee() {
+        super();
     }
     public Employee(Double netSalary, Double grossSalary) {
+        super();
         this.netSalary = netSalary;
         this.grossSalary = grossSalary;
     }
 
-    public Employee(Long id, String email, String street, String city, String phoneNumber, Double netSalary, Double grossSalary, List<Assignment> assignments) {
-        super(id, email, street, city, phoneNumber);
+    public Employee(String email, String street, String city, String phoneNumber, Double netSalary, Double grossSalary, List<Assignment> assignments) {
+        super(email, street, city, phoneNumber);
         this.netSalary = netSalary;
         this.grossSalary = grossSalary;
@@ -64,3 +66,7 @@
         this.grossSalary = grossSalary;
     }
+
+    public UserType getUserType(){
+        return UserType.EMPLOYEE;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/entity/FrontStaff.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/FrontStaff.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/FrontStaff.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -15,5 +15,5 @@
 @Data
 @NoArgsConstructor
-@PrimaryKeyJoinColumn(name = "employee_id")
+@PrimaryKeyJoinColumn(name = "employee_id", referencedColumnName = "user_id")
 public class FrontStaff extends Employee {
 
@@ -63,3 +63,7 @@
         this.managedReservations = managedReservations;
     }
+
+    public UserType getUserType() {
+        return UserType.FRONT_STAFF;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/entity/Manager.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Manager.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/Manager.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -15,5 +15,5 @@
 @Data
 @NoArgsConstructor
-@PrimaryKeyJoinColumn(name = "employee_id")
+@PrimaryKeyJoinColumn(name = "employee_id", referencedColumnName = "user_id")
 public class Manager extends Employee {
 
@@ -26,3 +26,7 @@
     private List<Assignment> createdAssignments;
 
+
+    public UserType getUserType() {
+        return UserType.MANAGER;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/entity/Order.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Order.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/Order.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -6,4 +6,5 @@
 
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 
@@ -30,5 +31,5 @@
 
     @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
-    private List<OrderItem> orderItems;
+    private List<OrderItem> orderItems = new ArrayList<>();
 
     @OneToOne(mappedBy = "order", cascade = CascadeType.ALL)
@@ -60,5 +61,5 @@
 
     public List<OrderItem> getOrderItems() {
-        return orderItems;
+        return orderItems != null ? orderItems : new ArrayList<OrderItem>();
     }
 
Index: src/main/java/finki/db/tasty_tabs/entity/Product.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Product.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/Product.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -30,6 +30,7 @@
     private String taxClass;
 
-    @Column(length = 1024)
-    private String description;
+//    @Column(length = 1024)
+    @Transient
+    private String description = "";
 
     @ManyToOne(fetch = FetchType.LAZY)
Index: src/main/java/finki/db/tasty_tabs/entity/Shift.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Shift.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/Shift.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -7,4 +7,5 @@
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 
@@ -37,5 +38,5 @@
 
     @OneToMany(mappedBy = "shift")
-    private List<Assignment> assignments;
+    private List<Assignment> assignments = new ArrayList<>();
 
     public Shift(LocalDate date, LocalDateTime start, LocalDateTime end, Manager manager) {
Index: src/main/java/finki/db/tasty_tabs/entity/User.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/User.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/entity/User.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -7,4 +7,5 @@
 import lombok.Setter;
 
+import java.util.ArrayList;
 import java.util.List;
 
@@ -16,6 +17,4 @@
 @Table(name = "users") // "user" is often a reserved keyword in SQL
 @Data
-@Getter
-@Setter
 @NoArgsConstructor
 @Inheritance(strategy = InheritanceType.JOINED) // Strategy to allow for Employee/Customer subtypes
@@ -43,7 +42,6 @@
     // Relationship for Reservations made by a user (if they are a customer)
     @OneToMany(mappedBy = "user")
-    private List<Reservation> reservations;
-    public User(Long id, String email, String street, String city, String phoneNumber) {
-        this.id = id;
+    private List<Reservation> reservations = new ArrayList<>();
+    public User(String email, String street, String city, String phoneNumber) {
         this.email = email;
         this.street = street;
@@ -52,14 +50,6 @@
     }
 
-    public Long getId() {
-        return id;
-    }
-
     public void setId(Long id) {
         this.id = id;
-    }
-
-    public String getEmail() {
-        return email;
     }
 
@@ -68,14 +58,6 @@
     }
 
-    public String getStreet() {
-        return street;
-    }
-
     public void setStreet(String street) {
         this.street = street;
-    }
-
-    public String getCity() {
-        return city;
     }
 
@@ -84,14 +66,6 @@
     }
 
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
     public void setPhoneNumber(String phoneNumber) {
         this.phoneNumber = phoneNumber;
-    }
-
-    public String getPassword() {
-        return password;
     }
 
@@ -100,10 +74,10 @@
     }
 
-    public List<Reservation> getReservations() {
-        return reservations;
-    }
-
     public void setReservations(List<Reservation> reservations) {
         this.reservations = reservations;
     }
+
+    public UserType getUserType() {
+        return UserType.USER;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/entity/UserType.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/UserType.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
+++ src/main/java/finki/db/tasty_tabs/entity/UserType.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -0,0 +1,9 @@
+package finki.db.tasty_tabs.entity;
+
+public enum UserType {
+    CUSTOMER,
+    MANAGER,
+    FRONT_STAFF,
+    BACK_STAFF,
+    USER, EMPLOYEE
+}
Index: src/main/java/finki/db/tasty_tabs/repository/AssignmentRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/AssignmentRepository.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/repository/AssignmentRepository.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -2,4 +2,6 @@
 
 import finki.db.tasty_tabs.entity.Assignment;
+import finki.db.tasty_tabs.web.dto.AssignmentDto;
+import finki.db.tasty_tabs.web.dto.ShiftDto;
 import org.springframework.data.jpa.repository.JpaRepository;
 
@@ -8,3 +10,5 @@
 public interface AssignmentRepository extends JpaRepository<Assignment, Long> {
     Optional<Assignment> findByEmployeeIdAndShiftId(Long employeeId, Long shiftId);
+
+    Optional<Assignment> findFirstByEmployee_IdOrderByShiftStartAsc(Long employeeId);
 }
Index: src/main/java/finki/db/tasty_tabs/repository/OnlineOrderRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/OnlineOrderRepository.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/repository/OnlineOrderRepository.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -6,4 +6,5 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.Collection;
 import java.util.List;
 
@@ -11,5 +12,6 @@
 
     List<OnlineOrder> findAllByCustomer_Id(Long id);
-    List<OnlineOrder> findAllByStatus(String status);
+
+    List<OnlineOrder> findAllByStatusIn(Collection<String> statuses);
 
 }
Index: src/main/java/finki/db/tasty_tabs/repository/TabOrderRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/TabOrderRepository.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/repository/TabOrderRepository.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -6,4 +6,5 @@
 
 import java.time.LocalDateTime;
+import java.util.Collection;
 import java.util.List;
 
@@ -13,3 +14,4 @@
     List<TabOrder> findAllByStatus(String status);
 
+    List<TabOrder> findAllByStatusIn(Collection<String> statuses);
 }
Index: src/main/java/finki/db/tasty_tabs/service/AuthService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/AuthService.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/service/AuthService.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -2,5 +2,5 @@
 
 import finki.db.tasty_tabs.web.dto.AuthDto;
-import finki.db.tasty_tabs.web.dto.RegisterRequest;
+import finki.db.tasty_tabs.web.dto.request.RegisterRequest;
 import finki.db.tasty_tabs.web.dto.UserDto;
 
Index: src/main/java/finki/db/tasty_tabs/service/EmployeeService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/EmployeeService.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/service/EmployeeService.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -2,7 +2,14 @@
 
 import finki.db.tasty_tabs.entity.Employee;
+import finki.db.tasty_tabs.web.dto.AssignmentDto;
 import finki.db.tasty_tabs.web.dto.CreateEmployeeRequest;
+import finki.db.tasty_tabs.web.dto.EmployeeDto;
+
+import java.util.List;
 
 public interface EmployeeService { // New Service
+    List<EmployeeDto> getAllEmployees();
     Employee createEmployee(CreateEmployeeRequest request);
+
+    AssignmentDto getNextShiftForEmployee(Long employeeId);
 }
Index: src/main/java/finki/db/tasty_tabs/service/impl/AuthServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/AuthServiceImpl.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/service/impl/AuthServiceImpl.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -1,4 +1,5 @@
 package finki.db.tasty_tabs.service.impl;
 
+import finki.db.tasty_tabs.entity.Customer;
 import finki.db.tasty_tabs.entity.User;
 import finki.db.tasty_tabs.repository.UserRepository;
@@ -6,5 +7,5 @@
 import finki.db.tasty_tabs.utils.JwtProvider;
 import finki.db.tasty_tabs.web.dto.AuthDto;
-import finki.db.tasty_tabs.web.dto.RegisterRequest;
+import finki.db.tasty_tabs.web.dto.request.RegisterRequest;
 import finki.db.tasty_tabs.web.dto.UserDto;
 import jakarta.transaction.Transactional;
@@ -15,6 +16,4 @@
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
-
-import java.util.HashSet;
 
 @Service
@@ -53,5 +52,17 @@
     @Transactional
     public AuthDto register(RegisterRequest request) {
-        throw new RuntimeException("Not implemented");
+        User user = userRepository.findByEmail(request.getEmail()).orElse(null);
+        if (user != null){
+            throw new RuntimeException("User with this email already exists");
+        }
+
+        User newUser = new Customer();
+        newUser.setEmail(request.getEmail());
+        newUser.setPassword(passwordEncoder.encode(request.getPassword()));
+        userRepository.save(newUser);
+
+        String token = jwtProvider.generateToken(request.getEmail());
+
+        return new AuthDto(token, UserDto.from(newUser));
     }
 
Index: src/main/java/finki/db/tasty_tabs/service/impl/EmployeeServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/EmployeeServiceImpl.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/service/impl/EmployeeServiceImpl.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -4,5 +4,7 @@
 import finki.db.tasty_tabs.repository.*;
 import finki.db.tasty_tabs.service.EmployeeService;
+import finki.db.tasty_tabs.web.dto.AssignmentDto;
 import finki.db.tasty_tabs.web.dto.CreateEmployeeRequest;
+import finki.db.tasty_tabs.web.dto.EmployeeDto;
 import jakarta.persistence.EntityNotFoundException;
 import org.springframework.security.crypto.password.PasswordEncoder;
@@ -10,5 +12,5 @@
 import org.springframework.transaction.annotation.Transactional;
 
-import static finki.db.tasty_tabs.entity.EmployeeType.*;
+import java.util.List;
 
 @Service
@@ -22,6 +24,8 @@
     private final StaffRoleRepository staffRoleRepository;
     private final PasswordEncoder passwordEncoder;
+    private final EmployeeRepository employeeRepository;
+    private final AssignmentRepository assignmentRepository;
 
-    public EmployeeServiceImpl(UserRepository userRepository, ManagerRepository managerRepository, FrontStaffRepository frontStaffRepository, BackStaffRepository backStaffRepository, StaffRoleRepository staffRoleRepository, PasswordEncoder passwordEncoder) {
+    EmployeeServiceImpl(UserRepository userRepository, ManagerRepository managerRepository, FrontStaffRepository frontStaffRepository, BackStaffRepository backStaffRepository, StaffRoleRepository staffRoleRepository, PasswordEncoder passwordEncoder, EmployeeRepository employeeRepository, AssignmentRepository assignmentRepository) {
         this.userRepository = userRepository;
         this.managerRepository = managerRepository;
@@ -30,7 +34,30 @@
         this.staffRoleRepository = staffRoleRepository;
         this.passwordEncoder = passwordEncoder;
+        this.employeeRepository = employeeRepository;
+        this.assignmentRepository = assignmentRepository;
     }
 
     @Override
+    public List<EmployeeDto> getAllEmployees() {
+        List<Employee> employees = employeeRepository.findAll();
+
+        return employees.stream()
+                .map(EmployeeDto::from)
+                .toList();
+    }
+
+    @Override
+    public AssignmentDto getNextShiftForEmployee(Long employeeId) {
+        Assignment assignment = assignmentRepository.findFirstByEmployee_IdOrderByShiftStartAsc(employeeId).orElse(null);
+
+        if (assignment == null) {
+            throw new EntityNotFoundException("No upcoming shifts found for employee with id: " + employeeId);
+        }
+
+        return AssignmentDto.fromAssignment(assignment);
+    }
+
+    @Override
+    @Transactional
     public Employee createEmployee(CreateEmployeeRequest request) {
         // In a real app, you'd check if email is unique and hash the password
@@ -45,5 +72,6 @@
                 Manager manager = new Manager();
                 setCommonEmployeeFields(manager, request);
-                employee = managerRepository.save(manager);
+
+                employee = manager;
                 break;
             case FRONT_STAFF:
@@ -54,5 +82,6 @@
                 frontStaff.setStaffRole(frontStaffRole);
                 frontStaff.setTipPercent(request.tipPercent());
-                employee = frontStaffRepository.save(frontStaff);
+
+                employee = frontStaff;
                 break;
             case BACK_STAFF:
@@ -62,5 +91,6 @@
                         .orElseThrow(() -> new EntityNotFoundException("StaffRole not found with id: " + request.staffRoleId()));
                 backStaff.setStaffRole(backStaffRole);
-                employee = backStaffRepository.save(backStaff);
+
+                employee = backStaff;
                 break;
             default:
@@ -68,5 +98,5 @@
         }
 
-        return employee;
+        return userRepository.save(employee);
     }
 
Index: src/main/java/finki/db/tasty_tabs/service/impl/OrderServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/OrderServiceImpl.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/service/impl/OrderServiceImpl.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -9,4 +9,5 @@
 import jakarta.transaction.Transactional;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
@@ -17,4 +18,5 @@
 import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 @RequiredArgsConstructor
@@ -196,4 +198,5 @@
     @Transactional
     public TabOrder createTabOrder(CreateOrderDto dto, String userEmail) {
+        log.debug("User {} creating a tab order for table {}", userEmail, dto.tableNumber());
         User user = userRepository.findByEmail(userEmail)
                 .orElseThrow(() -> new UsernameNotFoundException("User with email " + userEmail + " not found."));
@@ -209,4 +212,5 @@
         tabOrder.setStatus(dto.status());
         if (dto.orderItems() != null && !dto.orderItems().isEmpty()) {
+            log.debug("OrderItems is not empty, processing items...");
             List<OrderItem> orderItems = dto.orderItems().stream().map(itemDto -> {
                 OrderItem item = new OrderItem();
@@ -272,8 +276,8 @@
 
         // Query the OnlineOrderRepository for open orders
-        List<OnlineOrder> onlineOrders = onlineOrderRepository.findAllByStatus("OPEN");
+        List<OnlineOrder> onlineOrders = onlineOrderRepository.findAllByStatusIn(List.of("PENDING", "CONFIRMED"));
 
         // Query the TabOrderRepository for open orders
-        List<TabOrder> tabOrders = tabOrderRepository.findAllByStatus("OPEN");
+        List<TabOrder> tabOrders = tabOrderRepository.findAllByStatusIn(List.of("PENDING", "CONFIRMED"));
 
         // Combine the lists into a single List<Order>
@@ -289,5 +293,5 @@
 
         // Query the OnlineOrderRepository for open orders
-        List<OnlineOrder> onlineOrders = onlineOrderRepository.findAllByStatus("CLOSED");
+        List<OnlineOrder> onlineOrders = onlineOrderRepository.findAllByStatusIn(List.of("CLOSED"));
 
         // Query the TabOrderRepository for open orders
@@ -299,4 +303,5 @@
         combinedOrders.addAll(tabOrders);
 
-        return combinedOrders;    }
+        return combinedOrders;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/web/controllers/AuthController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/AuthController.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/AuthController.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -1,4 +1,32 @@
 package finki.db.tasty_tabs.web.controllers;
 
+import finki.db.tasty_tabs.service.AuthService;
+import finki.db.tasty_tabs.web.dto.AuthDto;
+import finki.db.tasty_tabs.web.dto.request.RegisterRequest;
+import finki.db.tasty_tabs.web.dto.request.AuthRequest;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/auth")
+@Tag(name = "Auth", description = "Authentication and authorization endpoints")
+@RequiredArgsConstructor
 public class AuthController {
+    private final AuthService authService;
+
+    @PostMapping("/login")
+    public ResponseEntity<AuthDto> authenticate(@Valid @RequestBody AuthRequest authDto) {
+        return ResponseEntity.ok(authService.authenticate(authDto.username(), authDto.password()));
+    }
+
+    @PostMapping("/register")
+    public ResponseEntity<AuthDto> register(@Valid @RequestBody RegisterRequest registerRequest) {
+        return ResponseEntity.ok(authService.register(registerRequest));
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/web/controllers/EmployeeController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/EmployeeController.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/EmployeeController.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -3,9 +3,14 @@
 import finki.db.tasty_tabs.entity.Employee;
 import finki.db.tasty_tabs.service.EmployeeService;
+import finki.db.tasty_tabs.web.dto.AssignmentDto;
 import finki.db.tasty_tabs.web.dto.CreateEmployeeRequest;
+import finki.db.tasty_tabs.web.dto.EmployeeDto;
+import finki.db.tasty_tabs.web.dto.ShiftDto;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 @RestController
@@ -26,3 +31,15 @@
         return ResponseEntity.status(HttpStatus.CREATED).body(newEmployee);
     }
+
+    @GetMapping()
+    public ResponseEntity<List<EmployeeDto>> getAllEmployees() {
+        List<EmployeeDto> employees = employeeService.getAllEmployees();
+        return ResponseEntity.ok(employees);
+    }
+
+    @GetMapping("/{employeeId}/shifts/next")
+    public ResponseEntity<AssignmentDto> getNextShift(@PathVariable Long employeeId) {
+        AssignmentDto nextShift = employeeService.getNextShiftForEmployee(employeeId);
+        return ResponseEntity.ok(nextShift);
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/web/controllers/OrderController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/OrderController.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/OrderController.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -16,4 +16,5 @@
 import java.time.LocalDate;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -61,6 +62,6 @@
     @Operation(summary = "Update the status of an order")
     @PatchMapping("/{id}/status")
-    public ResponseEntity<Void> updateOrderStatus(@PathVariable Long id, @RequestBody String status) {
-        orderService.updateOrderStatus(id, status);
+    public ResponseEntity<Void> updateOrderStatus(@PathVariable Long id, @RequestBody Map<String, String> status) {
+        orderService.updateOrderStatus(id, status.get("status"));
         return ResponseEntity.noContent().build();
     }
Index: src/main/java/finki/db/tasty_tabs/web/dto/AssignmentDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/AssignmentDto.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/dto/AssignmentDto.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -12,5 +12,6 @@
         LocalDateTime clockOutTime,
         ManagerDto manager,
-        EmployeeDto employee
+        EmployeeDto employee,
+        ShiftDto shift
 ) {
     public static AssignmentDto fromAssignment(Assignment assignment) {
@@ -20,5 +21,6 @@
                 assignment.getClockOutTime(),
                 ManagerDto.from(assignment.getManager()),
-                EmployeeDto.from(assignment.getEmployee())
+                EmployeeDto.from(assignment.getEmployee()),
+                ShiftDto.fromShiftBasic(assignment.getShift())
         );
     }
Index: src/main/java/finki/db/tasty_tabs/web/dto/EmployeeDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/EmployeeDto.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/dto/EmployeeDto.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -2,4 +2,5 @@
 
 import finki.db.tasty_tabs.entity.Employee;
+import finki.db.tasty_tabs.entity.UserType;
 
 import java.time.LocalDateTime;
@@ -12,5 +13,6 @@
         String phoneNumber,
         Double netSalary,
-        Double grossSalary
+        Double grossSalary,
+        UserType userType
 ) {
     public static EmployeeDto from(Employee employee) {
@@ -22,5 +24,6 @@
                 employee.getPhoneNumber(),
                 employee.getNetSalary(),
-                employee.getGrossSalary()
+                employee.getGrossSalary(),
+                employee.getUserType()
         );
     }
Index: c/main/java/finki/db/tasty_tabs/web/dto/RegisterRequest.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/RegisterRequest.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ 	(revision )
@@ -1,17 +1,0 @@
-package finki.db.tasty_tabs.web.dto;
-
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Data
-public class RegisterRequest {
-    @NotNull(message = "Email is required")
-    private String email;
-    @NotNull(message = "Password is required")
-    private String password;
-    private String passwordConfirmation;
-    private String firstName;
-    private String lastName;
-
-
-}
Index: src/main/java/finki/db/tasty_tabs/web/dto/ShiftDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/ShiftDto.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/dto/ShiftDto.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -27,3 +27,14 @@
         );
     }
+    public static ShiftDto fromShiftBasic(Shift shift) {
+        return new ShiftDto(
+                shift.getId(),
+                shift.getDate(),
+                shift.getStart(),
+                shift.getEnd(),
+                ManagerDto.from(shift.getManager()),
+                null
+        );
+    }
+
 }
Index: src/main/java/finki/db/tasty_tabs/web/dto/UserDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/UserDto.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/dto/UserDto.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -2,4 +2,5 @@
 
 import finki.db.tasty_tabs.entity.User;
+import finki.db.tasty_tabs.entity.UserType;
 
 public record UserDto(
@@ -8,5 +9,6 @@
         String street,
         String city,
-        String phoneNumber
+        String phoneNumber,
+        UserType userType
 ) {
     public static UserDto from(User user) {
@@ -16,5 +18,6 @@
                 user.getStreet(),
                 user.getCity(),
-                user.getPhoneNumber()
+                user.getPhoneNumber(),
+                user.getUserType()
         );
     }
Index: src/main/java/finki/db/tasty_tabs/web/dto/request/AuthRequest.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/request/AuthRequest.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
+++ src/main/java/finki/db/tasty_tabs/web/dto/request/AuthRequest.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -0,0 +1,7 @@
+package finki.db.tasty_tabs.web.dto.request;
+
+public record AuthRequest(
+        String username,
+        String password
+) {
+}
Index: src/main/java/finki/db/tasty_tabs/web/dto/request/RegisterRequest.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/request/RegisterRequest.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
+++ src/main/java/finki/db/tasty_tabs/web/dto/request/RegisterRequest.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -0,0 +1,17 @@
+package finki.db.tasty_tabs.web.dto.request;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class RegisterRequest {
+    @NotNull(message = "Email is required")
+    private String email;
+    @NotNull(message = "Password is required")
+    private String password;
+    private String passwordConfirmation;
+    private String firstName;
+    private String lastName;
+
+
+}
Index: src/main/java/finki/db/tasty_tabs/web/exception/GlobalExceptionHandler.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/exception/GlobalExceptionHandler.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/exception/GlobalExceptionHandler.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -26,5 +26,5 @@
         ProblemDetail errorDetail = null;
 
-//        log.warn("Security exception: {}", exception.getMessage());
+        log.warn("Security exception: {}", exception.getMessage());
         if (exception instanceof BadCredentialsException) {
             errorDetail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(401), exception.getMessage());
@@ -78,5 +78,5 @@
         ProblemDetail errorDetail = null;
 
-//        log.warn("Domain exception: {}", exception.getMessage());
+        log.warn("Domain exception: {}", exception.getMessage());
 
         if (errorDetail == null) {
@@ -94,5 +94,5 @@
         errorDetail.setProperty("description", "Unknown internal server error.");
 
-//        log.error("Unexpected exception: {}", exception.getMessage(), exception);
+        log.error("Unexpected exception: {}", exception.getMessage(), exception);
 
         return errorDetail;
Index: src/main/java/finki/db/tasty_tabs/web/filter/JwtAuthenticationFilter.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/filter/JwtAuthenticationFilter.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/filter/JwtAuthenticationFilter.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -44,5 +44,5 @@
         // This method tells Spring to SKIP this filter entirely if the path matches.
         return publicUrlProvider.getPublicPaths().stream()
-                .anyMatch(p -> pathMatcher.match(p, request.getServletPath()));
+                .anyMatch(p -> (pathMatcher.match(p, request.getServletPath()) && "GET".equalsIgnoreCase(request.getMethod())) || ("/api/auth/login".equals(request.getServletPath()) && "POST".equalsIgnoreCase(request.getMethod())) || ("/api/auth/register".equals(request.getServletPath()) && "POST".equalsIgnoreCase(request.getMethod())));
     }
 
@@ -55,6 +55,6 @@
             Claims claims = jwtProvider.validateToken(token);
             if (claims != null) {
-                String userId = claims.getSubject();
-                UserDetails userDetails = userDetailsService.loadUserByUserId(Long.parseLong(userId));
+                String email = claims.getSubject();
+                UserDetails userDetails = userDetailsService.loadUserByUserId(email);
 
                 UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
@@ -63,9 +63,9 @@
 
                 SecurityContextHolder.getContext().setAuthentication(authentication);
-//                log.debug("JWT token validated");
+                log.debug("JWT token validated");
             }
             filterChain.doFilter(request, response);
         } catch (ExpiredJwtException e) {
-//            log.debug("JWT token expired: {}", e.getMessage());
+            log.debug("JWT token expired: {}", e.getMessage());
             FilterExceptionHandler.handleException(request, response, e);
         } catch (AuthorizationDeniedException e) {
Index: src/main/java/finki/db/tasty_tabs/web/security/CustomUserDetailsService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/security/CustomUserDetailsService.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/security/CustomUserDetailsService.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -5,4 +5,4 @@
 
 public interface CustomUserDetailsService extends UserDetailsService {
-    UserDetails loadUserByUserId(Long userId);
+    UserDetails loadUserByUserId(String email);
 }
Index: src/main/java/finki/db/tasty_tabs/web/security/SecurityConfig.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/security/SecurityConfig.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/security/SecurityConfig.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -12,4 +12,5 @@
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
+import org.springframework.security.config.http.SessionCreationPolicy;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.security.crypto.password.PasswordEncoder;
@@ -37,7 +38,10 @@
                 .authorizeHttpRequests(authorize -> authorize
                         .requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
-                        .requestMatchers(publicUrlProvider.getPublicPaths().toArray(new String[0])).permitAll()
+                        .requestMatchers(HttpMethod.GET, publicUrlProvider.getPublicPaths().toArray(new String[0])).permitAll()
+                        .requestMatchers("/api/auth/login").permitAll()
+                        .requestMatchers("/api/auth/register").permitAll()
                         .anyRequest().authenticated()
                 )
+                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                 .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
 
Index: src/main/java/finki/db/tasty_tabs/web/security/UserDetailsServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/security/UserDetailsServiceImpl.java	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/java/finki/db/tasty_tabs/web/security/UserDetailsServiceImpl.java	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -30,8 +30,8 @@
 
     @Override
-    public UserDetails loadUserByUserId(Long userId) {
-        log.debug("Loading user by ID: {}", userId);
-        User user = userRepository.findById(userId)
-                .orElseThrow(() -> new UsernameNotFoundException("User not found with ID: " + userId));
+    public UserDetails loadUserByUserId(String email) {
+        log.debug("Loading user by ID: {}", email);
+        User user = userRepository.findByEmail(email)
+                .orElseThrow(() -> new UsernameNotFoundException("User not found with ID: " + email));
 
         return getUserDetails(user);
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 4ad4646e4264693b211e17884536e5a0c24f6535)
+++ src/main/resources/application.properties	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -1,9 +1,15 @@
 spring.application.name=Tasty Tabs
-#spring.datasource.url=jdbc:postgresql://localhost:5433/your_db
-#spring.datasource.username=your_db_user
-#spring.datasource.password=your_db_password
-spring.profiles.active=test
+spring.datasource.url=jdbc:postgresql://localhost:5434/db_202425z_va_prj_tasty_tabs
+spring.datasource.username=db_202425z_va_prj_tasty_tabs_owner
+spring.datasource.password=99e003badb51
+#spring.profiles.active=test
 springdoc.api-docs.enabled=true
 springdoc.swagger-ui.enabled=true
 jwt.secret=e249a8adbb3572a23f1520e69573aab8bc4b2eaf0bfab9c7a8d118a0c5d799aa
 jwt.expiration=86400000
+
+logging.level.finki=DEBUG
+logging.level.org.springframework=DEBUG
+
+spring.flyway.enabled=false
+spring.flyway.baseline-on-migrate=false
Index: src/main/resources/logback-spring.xml
===================================================================
--- src/main/resources/logback-spring.xml	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
+++ src/main/resources/logback-spring.xml	(revision f1affcc3ae847b0776fc408f2bc1d848412b4ae9)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+
+    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
+
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p)
+                %clr([${spring.application.name:-},%X{traceId:-},%X{spanId:-}]){yellow} %clr([%t]){faint}
+                %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
+            </pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="STDOUT"/>
+    </root>
+
+    <logger name="finki.db.tasty_tabs" level="DEBUG"/>
+    <logger name="org.springframework" level="WARN"/>
+    <logger name="org.hibernate.SQL" level="WARN"/>
+    <logger name="org.hibernate.type.descriptor.sql" level="WARN"/>
+</configuration>
