Index: src/main/java/finki/db/tasty_tabs/entity/Assignment.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Assignment.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/entity/Assignment.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -39,3 +39,11 @@
     @JoinColumn(name = "shift_id", referencedColumnName = "id", nullable = false)
     private Shift shift;
+
+    public Assignment(LocalDateTime clockInTime, LocalDateTime clockOutTime, Manager manager, Employee employee, Shift shift) {
+        this.clockInTime = clockInTime;
+        this.clockOutTime = clockOutTime;
+        this.manager = manager;
+        this.employee = employee;
+        this.shift = shift;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/entity/Shift.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Shift.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/entity/Shift.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -5,4 +5,5 @@
 import lombok.NoArgsConstructor;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
@@ -13,5 +14,5 @@
  */
 @Entity
-@Table(name = "shift")
+@Table(name = "shifts")
 @Data
 @NoArgsConstructor
@@ -23,5 +24,5 @@
 
     @Column(name = "date", nullable = false)
-    private LocalDateTime date;
+    private LocalDate date;
 
     @Column(name = "start_time", nullable = false)
@@ -37,3 +38,16 @@
     @OneToMany(mappedBy = "shift")
     private List<Assignment> assignments;
+
+    public Shift(LocalDate date, LocalDateTime start, LocalDateTime end, Manager manager) {
+        this.date = date;
+        this.start = start;
+        this.end = end;
+        this.manager = manager;
+    }
+
+    public Shift(LocalDate date, LocalDateTime start, LocalDateTime end) {
+        this.date = date;
+        this.start = start;
+        this.end = end;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/entity/exceptions/ShiftNotFoundException.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/exceptions/ShiftNotFoundException.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
+++ src/main/java/finki/db/tasty_tabs/entity/exceptions/ShiftNotFoundException.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -0,0 +1,8 @@
+package finki.db.tasty_tabs.entity.exceptions;
+
+public class ShiftNotFoundException extends DomainException {
+
+    public ShiftNotFoundException(Long id) {
+        super(String.format("Shift with id %d doesnt exist",id));
+    }
+}
Index: src/main/java/finki/db/tasty_tabs/entity/exceptions/TableNotFoundException.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/exceptions/TableNotFoundException.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
+++ src/main/java/finki/db/tasty_tabs/entity/exceptions/TableNotFoundException.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -0,0 +1,8 @@
+package finki.db.tasty_tabs.entity.exceptions;
+
+public class TableNotFoundException extends DomainException {
+
+    public TableNotFoundException(Integer id) {
+        super(String.format("Table with id %d doesnt exist",id));
+    }
+}
Index: src/main/java/finki/db/tasty_tabs/repository/InventoryRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/InventoryRepository.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/repository/InventoryRepository.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -3,5 +3,7 @@
 import finki.db.tasty_tabs.entity.Inventory;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
 
+@Repository
 public interface InventoryRepository extends JpaRepository<Inventory,Long> {
 }
Index: src/main/java/finki/db/tasty_tabs/repository/ManagerRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/ManagerRepository.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/repository/ManagerRepository.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -4,3 +4,7 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
-public interface ManagerRepository extends JpaRepository<Manager, Long> {}
+import java.util.Optional;
+
+public interface ManagerRepository extends JpaRepository<Manager, Long> {
+    Optional<Manager> findByEmail(String email);
+}
Index: src/main/java/finki/db/tasty_tabs/repository/ProductRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/ProductRepository.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/repository/ProductRepository.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -3,7 +3,9 @@
 import finki.db.tasty_tabs.entity.Product;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
+@Repository
 public interface ProductRepository extends JpaRepository<Product, Long> {
     List<Product> findAllByName(String name);
Index: src/main/java/finki/db/tasty_tabs/repository/RestaurantTableRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/RestaurantTableRepository.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/repository/RestaurantTableRepository.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -3,7 +3,9 @@
 import finki.db.tasty_tabs.entity.RestaurantTable;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
+@Repository
 public interface RestaurantTableRepository extends JpaRepository<RestaurantTable, Integer> {
 
Index: src/main/java/finki/db/tasty_tabs/repository/ShiftRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/ShiftRepository.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/repository/ShiftRepository.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -3,4 +3,6 @@
 import finki.db.tasty_tabs.entity.Shift;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
 
+@Repository
 public interface ShiftRepository extends JpaRepository<Shift, Long> {}
Index: src/main/java/finki/db/tasty_tabs/service/CategoryService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/CategoryService.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/service/CategoryService.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -7,9 +7,9 @@
 
 public interface CategoryService {
-    Optional<Category> findById(Long id);
+    Category findById(Long id);
     List<Category> getAllCategories();
-    Optional<Category> updateCategory(Long id,Category category);
+    Category updateCategory(Long id,Category category);
     void deleteCategory(Long id);
-    Optional<Category> getCategoryByName(String name);
-    Optional<Category> createCategory(Category category);
+    Category getCategoryByName(String name);
+    Category createCategory(Category category);
 }
Index: src/main/java/finki/db/tasty_tabs/service/ProductService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/ProductService.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/service/ProductService.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -9,9 +9,9 @@
 
 public interface ProductService {
-    Optional<Product> findById(Long id);
+    Product findById(Long id);
     List<Product> getAllProducts();
-    Optional<Product> updateProduct(Long id, CreateProductDto dto);
+    Product updateProduct(Long id, CreateProductDto dto);
     void deleteProduct(Long id);
     List<Product> getProductsByName(String name);
-    Optional<Product> createProduct(CreateProductDto dto);
+    Product createProduct(CreateProductDto dto);
 }
Index: src/main/java/finki/db/tasty_tabs/service/RestaurantTableService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/RestaurantTableService.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/service/RestaurantTableService.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -8,9 +8,9 @@
 public interface RestaurantTableService {
 
-    Optional<RestaurantTable> findById(Integer id);
+    RestaurantTable findById(Integer id);
     List<RestaurantTable> getAll();
-    Optional<RestaurantTable> updateTable(Integer id,RestaurantTable restaurantTable);
+    RestaurantTable updateTable(Integer id,RestaurantTable restaurantTable);
     void deleteTable(Integer id);
     List<RestaurantTable> getAllBySeatCapacity(Integer seatCapacity);
-    Optional<RestaurantTable> createTable(RestaurantTable restaurantTable);
+    RestaurantTable createTable(RestaurantTable restaurantTable);
 }
Index: src/main/java/finki/db/tasty_tabs/service/ShiftService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/ShiftService.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/service/ShiftService.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -1,11 +1,15 @@
 package finki.db.tasty_tabs.service;
 
-import finki.db.tasty_tabs.web.dto.AssignmentDto;
-import finki.db.tasty_tabs.web.dto.ClockInRequest;
-import finki.db.tasty_tabs.web.dto.CreateShiftRequest;
-import finki.db.tasty_tabs.web.dto.ShiftDto;
+import finki.db.tasty_tabs.entity.Shift;
+import finki.db.tasty_tabs.web.dto.CreateShiftDto;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.List;
 
 public interface ShiftService {
-    AssignmentDto clockIn(ClockInRequest clockInRequest);
-    ShiftDto createAndAssignShift(CreateShiftRequest request);
+    List<Shift> getAllShifts();
+    Shift getShiftById(Long id);
+    Shift createShift(CreateShiftDto dto, String username);
+    Shift updateShift(Long id, CreateShiftDto dto, String username);
+    void deleteShift(Long id, String username);
 }
Index: src/main/java/finki/db/tasty_tabs/service/impl/CategoryServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/CategoryServiceImpl.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/service/impl/CategoryServiceImpl.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -2,4 +2,5 @@
 
 import finki.db.tasty_tabs.entity.Category;
+import finki.db.tasty_tabs.entity.exceptions.CategoryNotFoundException;
 import finki.db.tasty_tabs.repository.CategoryRepository;
 import finki.db.tasty_tabs.service.CategoryService;
@@ -19,6 +20,6 @@
 
     @Override
-    public Optional<Category> findById(Long id) {
-        return categoryRepository.findById(id);
+    public Category findById(Long id) {
+        return categoryRepository.findById(id).orElseThrow(CategoryNotFoundException::new);
     }
 
@@ -29,5 +30,5 @@
 
     @Override
-    public Optional<Category> updateCategory(Long id, Category category) {
+    public Category updateCategory(Long id, Category category) {
         return categoryRepository.findById(id).map(existingCategory -> {
             if (category.getName() != null) {
@@ -38,5 +39,5 @@
             }
             return categoryRepository.save(existingCategory);
-        });
+        }).orElseThrow(CategoryNotFoundException::new);
     }
 
@@ -47,11 +48,11 @@
 
     @Override
-    public Optional<Category> getCategoryByName(String name) {
-        return categoryRepository.findByName(name);
+    public Category getCategoryByName(String name) {
+        return categoryRepository.findByName(name).orElseThrow(CategoryNotFoundException::new);
     }
 
     @Override
-    public Optional<Category> createCategory(Category category) {
-        return Optional.of(categoryRepository.save(category));
+    public Category createCategory(Category category) {
+        return categoryRepository.save(category);
     }
 }
Index: src/main/java/finki/db/tasty_tabs/service/impl/ProductServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/ProductServiceImpl.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/service/impl/ProductServiceImpl.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -31,6 +31,7 @@
 
     @Override
-    public Optional<Product> findById(Long id) {
-        return productRepository.findById(id);
+    public Product findById(Long id) {
+        return productRepository.findById(id)
+                .orElseThrow(() -> new ProductNotFoundException(id));
     }
 
@@ -41,5 +42,5 @@
 
     @Override
-    public Optional<Product> updateProduct(Long id, CreateProductDto dto) {
+    public Product updateProduct(Long id, CreateProductDto dto) {
         Optional<Product> productTmp=productRepository.findById(id);
         if(productTmp.isEmpty()){
@@ -47,7 +48,4 @@
         }
 
-        if(categoryService.findById(dto.categoryId()).isEmpty()){
-            throw new CategoryNotFoundException();
-        }
 
         return productRepository.findById(id).map(existingProduct -> {
@@ -61,5 +59,5 @@
                 existingProduct.setTaxClass(dto.taxClass());
             }
-            existingProduct.setCategory(categoryService.findById(dto.categoryId()).get());
+            existingProduct.setCategory(categoryService.findById(dto.categoryId()));
             existingProduct.setDescription(dto.description());
             if(dto.manageInventory()==Boolean.TRUE){
@@ -78,5 +76,5 @@
             }
             return productRepository.save(existingProduct);
-        });
+        }).orElseThrow(()-> new ProductNotFoundException(id));
     }
 
@@ -93,8 +91,5 @@
 
     @Override
-    public Optional<Product> createProduct(CreateProductDto dto) {
-        if(categoryService.findById(dto.categoryId()).isEmpty()){
-            throw new CategoryNotFoundException();
-        }
+    public Product createProduct(CreateProductDto dto) {
         Product productTmp=new Product();
         if (dto.name() != null) {
@@ -107,5 +102,5 @@
             productTmp.setTaxClass(dto.taxClass());
         }
-        productTmp.setCategory(categoryService.findById(dto.categoryId()).get());
+        productTmp.setCategory(categoryService.findById(dto.categoryId()));
         productTmp.setDescription(dto.description());
 
@@ -117,5 +112,5 @@
             inventoryRepository.save(new Inventory(product.getId(),dto.quantity(),dto.restockLevel()));
         }
-        return Optional.of(product);
+        return product;
     }
 }
Index: src/main/java/finki/db/tasty_tabs/service/impl/RestaurantTableServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/RestaurantTableServiceImpl.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/service/impl/RestaurantTableServiceImpl.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -2,4 +2,5 @@
 
 import finki.db.tasty_tabs.entity.RestaurantTable;
+import finki.db.tasty_tabs.entity.exceptions.TableNotFoundException;
 import finki.db.tasty_tabs.entity.exceptions.TableNumberAlreadyExistsException;
 import finki.db.tasty_tabs.repository.RestaurantTableRepository;
@@ -20,6 +21,6 @@
 
     @Override
-    public Optional<RestaurantTable> findById(Integer id) {
-        return tableRepository.findById(id);
+    public RestaurantTable findById(Integer id) {
+        return tableRepository.findById(id).orElseThrow(()->new TableNotFoundException(id));
     }
 
@@ -30,5 +31,5 @@
 
     @Override
-    public Optional<RestaurantTable> updateTable(Integer id, RestaurantTable restaurantTable) {
+    public RestaurantTable updateTable(Integer id, RestaurantTable restaurantTable) {
         if(tableRepository.findById(restaurantTable.getTableNumber()).isPresent() && id!=restaurantTable.getTableNumber()){
             throw new TableNumberAlreadyExistsException(restaurantTable.getTableNumber());
@@ -42,5 +43,5 @@
             }
             return tableRepository.save(existingTable);
-        });
+        }).orElseThrow(()->new TableNotFoundException(id));
     }
 
@@ -57,9 +58,9 @@
 
     @Override
-    public Optional<RestaurantTable> createTable(RestaurantTable restaurantTable) {
+    public RestaurantTable createTable(RestaurantTable restaurantTable) {
         if(tableRepository.findById(restaurantTable.getTableNumber()).isPresent()){
             throw new TableNumberAlreadyExistsException(restaurantTable.getTableNumber());
         }
-        return Optional.of(tableRepository.save(restaurantTable));
+        return tableRepository.save(restaurantTable);
     }
 }
Index: src/main/java/finki/db/tasty_tabs/service/impl/ShiftServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/ShiftServiceImpl.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/service/impl/ShiftServiceImpl.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -5,4 +5,5 @@
 import finki.db.tasty_tabs.entity.Manager;
 import finki.db.tasty_tabs.entity.Shift;
+import finki.db.tasty_tabs.entity.exceptions.ShiftNotFoundException;
 import finki.db.tasty_tabs.repository.AssignmentRepository;
 import finki.db.tasty_tabs.repository.EmployeeRepository;
@@ -12,6 +13,7 @@
 import finki.db.tasty_tabs.web.dto.AssignmentDto;
 import finki.db.tasty_tabs.web.dto.ClockInRequest;
-import finki.db.tasty_tabs.web.dto.CreateShiftRequest;
+import finki.db.tasty_tabs.web.dto.CreateShiftDto;
 import finki.db.tasty_tabs.web.dto.ShiftDto;
+import org.springframework.security.access.AccessDeniedException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -19,74 +21,59 @@
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
+import java.util.List;
 
 @Service
-@Transactional
-class ShiftServiceImpl implements ShiftService {
+public class ShiftServiceImpl implements ShiftService{
+    private final ShiftRepository shiftRepository;
+    private final ManagerRepository managerRepository;
 
-    private final ShiftRepository shiftRepository;
-    private final AssignmentRepository assignmentRepository;
-    private final ManagerRepository managerRepository;
-    private final EmployeeRepository employeeRepository;
+    public ShiftServiceImpl(ShiftRepository shiftRepository, ManagerRepository managerRepository) {
+        this.shiftRepository = shiftRepository;
+        this.managerRepository = managerRepository;
+    }
 
-    public ShiftServiceImpl(ShiftRepository shiftRepository, AssignmentRepository assignmentRepository, ManagerRepository managerRepository, EmployeeRepository employeeRepository) {
-        this.shiftRepository = shiftRepository;
-        this.assignmentRepository = assignmentRepository;
-        this.managerRepository = managerRepository;
-        this.employeeRepository = employeeRepository;
+    private Manager getManagerByUsername(String username) {
+        return managerRepository.findByEmail(username)
+                .orElseThrow(() -> new AccessDeniedException("Only managers can assign shifts."));
     }
 
     @Override
-    public AssignmentDto clockIn(ClockInRequest clockInRequest) {
-        Assignment assignment = assignmentRepository.findByEmployeeIdAndShiftId(clockInRequest.getEmployeeId(), clockInRequest.getShiftId())
-                .orElseThrow(() -> new EntityNotFoundException("Assignment not found for employee " + clockInRequest.getEmployeeId() + " and shift " + clockInRequest.getShiftId()));
-
-        if (assignment.getClockInTime() != null) {
-            throw new IllegalStateException("Employee has already clocked in for this shift.");
-        }
-
-        assignment.setClockInTime(LocalDateTime.now());
-        Assignment savedAssignment = assignmentRepository.save(assignment);
-        
-        // Manual mapping to DTO
-        AssignmentDto dto = new AssignmentDto();
-        dto.setId(savedAssignment.getId());
-        dto.setClockInTime(savedAssignment.getClockInTime());
-        dto.setClockOutTime(savedAssignment.getClockOutTime());
-        dto.setManagerId(savedAssignment.getManager().getId());
-        dto.setEmployeeId(savedAssignment.getEmployee().getId());
-        dto.setShiftId(savedAssignment.getShift().getId());
-        return dto;
+    public List<Shift> getAllShifts() {
+        return shiftRepository.findAll();
     }
 
     @Override
-    public ShiftDto createAndAssignShift(CreateShiftRequest request) {
-        Manager manager = managerRepository.findById(request.getShift().getManagerId())
-                .orElseThrow(() -> new EntityNotFoundException("Manager not found with id: " + request.getShift().getManagerId()));
+    public Shift getShiftById(Long id) {
+        return shiftRepository.findById(id)
+                .orElseThrow(() -> new ShiftNotFoundException(id));
+    }
 
-        Shift shift = new Shift();
+    @Override
+    public Shift createShift(CreateShiftDto dto, String username) {
+        Manager manager = getManagerByUsername(username);
+        Shift shift = new Shift(dto.date(), dto.start(), dto.end(), manager);
+        return shiftRepository.save(shift);
+    }
+
+    @Override
+    public Shift updateShift(Long id, CreateShiftDto dto, String username) {
+        Manager manager = getManagerByUsername(username);
+        Shift shift = getShiftById(id);
+
+        shift.setDate(dto.date());
+        shift.setStart(dto.start());
+        shift.setEnd(dto.end());
         shift.setManager(manager);
-        shift.setDate(request.getShift().getDate());
-        shift.setStart(request.getShift().getStart());
-        shift.setEnd(request.getShift().getEnd());
-        Shift savedShift = shiftRepository.save(shift);
 
-        for (Long employeeId : request.getEmployeeIds()) {
-            Employee employee = employeeRepository.findById(employeeId)
-                    .orElseThrow(() -> new EntityNotFoundException("Employee not found with id: " + employeeId));
-            Assignment assignment = new Assignment();
-            assignment.setShift(savedShift);
-            assignment.setEmployee(employee);
-            assignment.setManager(manager);
-            assignmentRepository.save(assignment);
+        return shiftRepository.save(shift);
+    }
+
+    @Override
+    public void deleteShift(Long id, String username) {
+        getManagerByUsername(username);
+        if (!shiftRepository.existsById(id)) {
+            throw new ShiftNotFoundException(id);
         }
-        
-        ShiftDto dto = new ShiftDto();
-        dto.setId(savedShift.getId());
-        dto.setDate(savedShift.getDate());
-        dto.setStart(savedShift.getStart());
-        dto.setEnd(savedShift.getEnd());
-        dto.setManagerId(savedShift.getManager().getId());
-        return dto;
+        shiftRepository.deleteById(id);
     }
 }
Index: src/main/java/finki/db/tasty_tabs/web/controllers/CategoryController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/CategoryController.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/CategoryController.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -6,5 +6,5 @@
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
@@ -13,5 +13,5 @@
 @RestController
 @RequestMapping("/api/categories")
-@Tag(name = "Category API", description = "Endpoints for managing product categories") // OpenAPI tag
+@Tag(name = "Category API", description = "Endpoints for managing product categories")
 public class CategoryController {
 
@@ -22,5 +22,5 @@
     }
 
-    @Operation(summary = "Get all categories", description = "Retrieves a list of all available categories.")
+    @Operation(summary = "Get all categories")
     @GetMapping
     public List<Category> findAll() {
@@ -28,40 +28,28 @@
     }
 
-    @Operation(summary = "Get categoryId by ID", description = "Finds a categoryId by its ID.")
+    @Operation(summary = "Get category by ID")
     @GetMapping("/{id}")
-    public ResponseEntity<Category> findById(@PathVariable Long id) {
-        return categoryService.findById(id)
-                .map(category -> ResponseEntity.ok().body(category))
-                .orElseGet(() -> ResponseEntity.notFound().build());
+    public Category findById(@PathVariable Long id) {
+        return categoryService.findById(id);
     }
 
-    @Operation(summary = "Add a new categoryId", description = "Creates a new categoryId.")
+    @Operation(summary = "Create category")
     @PostMapping("/add")
-    public ResponseEntity<Category> save(@RequestBody CreateCategoryDto createCategoryDto) {
-        return categoryService.createCategory(createCategoryDto.toCategory())
-                .map(ResponseEntity::ok)
-                .orElseGet(() -> ResponseEntity.notFound().build());
+    @ResponseStatus(HttpStatus.CREATED)
+    public Category save(@RequestBody CreateCategoryDto createCategoryDto) {
+        return categoryService.createCategory(createCategoryDto.toCategory());
     }
 
-    @Operation(summary = "Update an existing categoryId", description = "Updates a categoryId by ID.")
+    @Operation(summary = "Update category")
     @PutMapping("/edit/{id}")
-    public ResponseEntity<Category> update(
-            @PathVariable Long id,
-            @RequestBody CreateCategoryDto createCategoryDto
-    ) {
-        return categoryService.updateCategory(id, createCategoryDto.toCategory())
-                .map(category -> ResponseEntity.ok().body(category))
-                .orElseGet(() -> ResponseEntity.notFound().build());
+    public Category update(@PathVariable Long id, @RequestBody CreateCategoryDto createCategoryDto) {
+        return categoryService.updateCategory(id, createCategoryDto.toCategory());
     }
 
-    @Operation(summary = "Delete a categoryId", description = "Deletes a categoryId by its ID.")
+    @Operation(summary = "Delete category")
     @DeleteMapping("/delete/{id}")
-    public ResponseEntity<Void> deleteById(@PathVariable Long id) {
-        if (categoryService.findById(id).isPresent()) {
-            categoryService.deleteCategory(id);
-            return ResponseEntity.ok().build();
-        } else {
-            return ResponseEntity.notFound().build();
-        }
+    @ResponseStatus(HttpStatus.NO_CONTENT)
+    public void deleteById(@PathVariable Long id) {
+        categoryService.deleteCategory(id);
     }
 }
Index: src/main/java/finki/db/tasty_tabs/web/controllers/ProductController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/ProductController.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/ProductController.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -1,3 +1,4 @@
 package finki.db.tasty_tabs.web.controllers;
+
 import finki.db.tasty_tabs.entity.Product;
 import finki.db.tasty_tabs.service.ProductService;
@@ -5,5 +6,5 @@
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
@@ -21,5 +22,5 @@
     }
 
-    @Operation(summary = "Get all products", description = "Returns a list of all products.")
+    @Operation(summary = "Get all products")
     @GetMapping
     public List<Product> findAll() {
@@ -27,13 +28,11 @@
     }
 
-    @Operation(summary = "Get product by ID", description = "Finds a product by its ID.")
+    @Operation(summary = "Get product by ID")
     @GetMapping("/{id}")
-    public ResponseEntity<Product> findById(@PathVariable Long id) {
-        return productService.findById(id)
-                .map(ResponseEntity::ok)
-                .orElseGet(() -> ResponseEntity.notFound().build());
+    public Product findById(@PathVariable Long id) {
+        return productService.findById(id);
     }
 
-    @Operation(summary = "Search products by name", description = "Returns products with a given name.")
+    @Operation(summary = "Search products by name")
     @GetMapping("/search")
     public List<Product> findByName(@RequestParam String name) {
@@ -41,26 +40,22 @@
     }
 
-    @Operation(summary = "Create new product", description = "Creates a new product (with or without inventory).")
+    @Operation(summary = "Create new product")
     @PostMapping("/add")
-    public ResponseEntity<Product> save(@RequestBody CreateProductDto dto) {
-        return productService.createProduct(dto)
-                .map(ResponseEntity::ok)
-                .orElseGet(() -> ResponseEntity.badRequest().build());
+    @ResponseStatus(HttpStatus.CREATED)
+    public Product save(@RequestBody CreateProductDto dto) {
+        return productService.createProduct(dto);
     }
 
-    @Operation(summary = "Update product", description = "Updates an existing product by ID.")
+    @Operation(summary = "Update product")
     @PutMapping("/edit/{id}")
-    public ResponseEntity<Product> update(@PathVariable Long id, @RequestBody CreateProductDto dto) {
-        return productService.updateProduct(id, dto)
-                .map(ResponseEntity::ok)
-                .orElseGet(() -> ResponseEntity.notFound().build());
+    public Product update(@PathVariable Long id, @RequestBody CreateProductDto dto) {
+        return productService.updateProduct(id, dto);
     }
 
-    @Operation(summary = "Delete product", description = "Deletes a product by its ID.")
+    @Operation(summary = "Delete product")
     @DeleteMapping("/delete/{id}")
-    public ResponseEntity<Void> delete(@PathVariable Long id) {
+    @ResponseStatus(HttpStatus.NO_CONTENT)
+    public void delete(@PathVariable Long id) {
         productService.deleteProduct(id);
-        return ResponseEntity.noContent().build();
     }
 }
-
Index: src/main/java/finki/db/tasty_tabs/web/controllers/RestaurantTableController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/RestaurantTableController.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/RestaurantTableController.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -1,3 +1,4 @@
 package finki.db.tasty_tabs.web.controllers;
+
 import finki.db.tasty_tabs.entity.RestaurantTable;
 import finki.db.tasty_tabs.service.RestaurantTableService;
@@ -29,39 +30,21 @@
     @Operation(summary = "Get a table by table number", description = "Finds a table by its table number.")
     @GetMapping("/{tableNumber}")
-    public ResponseEntity<RestaurantTable> findById(@PathVariable Integer tableNumber) {
-        return restaurantTableService.findById(tableNumber)
-                .map(ResponseEntity::ok)
-                .orElseGet(() -> ResponseEntity.notFound().build());
+    public RestaurantTable findById(@PathVariable Integer tableNumber) {
+        return restaurantTableService.findById(tableNumber);
     }
 
     @Operation(summary = "Add a new table", description = "Creates a new restaurant table.")
     @PostMapping("/add")
-    public ResponseEntity<RestaurantTable> save(@RequestBody CreateRestaurantTableDto dto) {
-        try{
-            return restaurantTableService.createTable(dto.toRestaurantTable())
-                    .map(ResponseEntity::ok)
-                    .orElseGet(() -> ResponseEntity.badRequest().build());
-        }
-        catch(RuntimeException ex){
-            return ResponseEntity.badRequest().build();
-
-        }
+    public RestaurantTable save(@RequestBody CreateRestaurantTableDto dto) {
+        return restaurantTableService.createTable(dto.toRestaurantTable());
     }
 
     @Operation(summary = "Update an existing table", description = "Updates a restaurant table by its table number.")
     @PutMapping("/edit/{tableNumber}")
-    public ResponseEntity<RestaurantTable> update(
+    public RestaurantTable update(
             @PathVariable Integer tableNumber,
             @RequestBody CreateRestaurantTableDto dto
     ) {
-        try{
-            return restaurantTableService.updateTable(tableNumber, dto.toRestaurantTable())
-                    .map(ResponseEntity::ok)
-                    .orElseGet(() -> ResponseEntity.notFound().build());
-        }
-        catch(RuntimeException ex){
-            return ResponseEntity.badRequest().build();
-        }
-
+        return restaurantTableService.updateTable(tableNumber, dto.toRestaurantTable());
     }
 
@@ -69,10 +52,6 @@
     @DeleteMapping("/delete/{tableNumber}")
     public ResponseEntity<Void> deleteById(@PathVariable Integer tableNumber) {
-        if (restaurantTableService.findById(tableNumber).isPresent()) {
-            restaurantTableService.deleteTable(tableNumber);
-            return ResponseEntity.ok().build();
-        } else {
-            return ResponseEntity.notFound().build();
-        }
+        restaurantTableService.deleteTable(tableNumber);
+        return ResponseEntity.noContent().build();
     }
 }
Index: src/main/java/finki/db/tasty_tabs/web/controllers/ShiftController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/ShiftController.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/ShiftController.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -0,0 +1,57 @@
+package finki.db.tasty_tabs.web.controllers;
+
+import finki.db.tasty_tabs.entity.Shift;
+import finki.db.tasty_tabs.service.ShiftService;
+import finki.db.tasty_tabs.web.dto.CreateShiftDto;
+import finki.db.tasty_tabs.web.dto.ShiftDto;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.Authentication;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/shifts")
+@RequiredArgsConstructor
+@Tag(name = "Shift API", description = "Endpoints for managing work shifts (Manager only)")
+public class ShiftController {
+
+    private final ShiftService shiftService;
+
+    @Operation(summary = "Get all shifts")
+    @GetMapping
+    public List<Shift> getAllShifts() {
+        return shiftService.getAllShifts();
+    }
+
+    @Operation(summary = "Get shift by ID")
+    @GetMapping("/{id}")
+    public Shift getShiftById(@PathVariable Long id) {
+        return shiftService.getShiftById(id);
+    }
+
+    @Operation(summary = "Create a shift (Manager only)")
+    @PostMapping
+    public Shift createShift(@RequestBody CreateShiftDto dto, Authentication authentication) {
+        String username = authentication.getName();
+        return shiftService.createShift(dto, username);
+    }
+
+    @Operation(summary = "Update a shift (Manager only)")
+    @PutMapping("/{id}")
+    public Shift updateShift(@PathVariable Long id, @RequestBody CreateShiftDto dto, Authentication authentication) {
+        String username = authentication.getName();
+        return shiftService.updateShift(id, dto, username);
+    }
+
+    @Operation(summary = "Delete a shift (Manager only)")
+    @DeleteMapping("/{id}")
+    public ResponseEntity<Void> deleteShift(@PathVariable Long id, Authentication authentication) {
+        String username = authentication.getName();
+        shiftService.deleteShift(id, username);
+        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 c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/web/dto/AssignmentDto.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -1,15 +1,25 @@
 package finki.db.tasty_tabs.web.dto;
 
-import lombok.Data;
+import finki.db.tasty_tabs.entity.Assignment;
+import finki.db.tasty_tabs.entity.Employee;
+import finki.db.tasty_tabs.entity.Manager;
 
 import java.time.LocalDateTime;
 
-@Data
-public class AssignmentDto {
-    private Long id;
-    private LocalDateTime clockInTime;
-    private LocalDateTime clockOutTime;
-    private Long managerId;
-    private Long employeeId;
-    private Long shiftId;
+public record AssignmentDto(
+        Long id,
+        LocalDateTime clockInTime,
+        LocalDateTime clockOutTime,
+        Manager manager,
+        Employee employee
+) {
+    public static AssignmentDto fromAssignment(Assignment assignment) {
+        return new AssignmentDto(
+                assignment.getId(),
+                assignment.getClockInTime(),
+                assignment.getClockOutTime(),
+                assignment.getManager(),
+                assignment.getEmployee()
+        );
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/web/dto/CreateAssignmentDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/CreateAssignmentDto.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
+++ src/main/java/finki/db/tasty_tabs/web/dto/CreateAssignmentDto.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -0,0 +1,26 @@
+package finki.db.tasty_tabs.web.dto;
+
+import finki.db.tasty_tabs.entity.Assignment;
+import finki.db.tasty_tabs.entity.Employee;
+import finki.db.tasty_tabs.entity.Manager;
+import finki.db.tasty_tabs.entity.Shift;
+
+import java.time.LocalDateTime;
+
+public record CreateAssignmentDto(
+        LocalDateTime clockInTime,
+        LocalDateTime clockOutTime,
+        Long managerId,
+        Long employeeId,
+        Long shiftId
+) {
+    public Assignment toAssignment(Manager manager,Employee employee,Shift shift) {
+        return new Assignment(
+                clockInTime,
+                clockOutTime,
+                manager,
+                employee,
+                shift
+        );
+    }
+}
Index: src/main/java/finki/db/tasty_tabs/web/dto/CreateShiftDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/CreateShiftDto.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
+++ src/main/java/finki/db/tasty_tabs/web/dto/CreateShiftDto.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -0,0 +1,21 @@
+package finki.db.tasty_tabs.web.dto;
+import finki.db.tasty_tabs.entity.Manager;
+import finki.db.tasty_tabs.entity.Shift;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+public record CreateShiftDto(
+        LocalDate date,
+        LocalDateTime start,
+        LocalDateTime end
+) {
+    public Shift toShift(Manager manager) {
+        return new Shift(
+                date,
+                start,
+                end
+        );
+    }
+}
Index: c/main/java/finki/db/tasty_tabs/web/dto/CreateShiftRequest.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/CreateShiftRequest.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ 	(revision )
@@ -1,9 +1,0 @@
-package finki.db.tasty_tabs.web.dto;
-import lombok.Data;
-import java.time.LocalDateTime;
-import java.util.List;
-@Data
-public class CreateShiftRequest {
-    private ShiftDto shift;
-    private List<Long> employeeIds;
-}
Index: src/main/java/finki/db/tasty_tabs/web/dto/ShiftDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/ShiftDto.java	(revision c825d3a996ffbd00fc5876f944c5c8dc15f470c7)
+++ src/main/java/finki/db/tasty_tabs/web/dto/ShiftDto.java	(revision c1e74d16763495bcb55a80448f8d31c98317baf2)
@@ -1,12 +1,29 @@
 package finki.db.tasty_tabs.web.dto;
+import finki.db.tasty_tabs.entity.Manager;
+import finki.db.tasty_tabs.entity.Shift;
 import lombok.Data;
+
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
-@Data
-public class ShiftDto {
-    private Long id;
-    private LocalDateTime date;
-    private LocalDateTime start;
-    private LocalDateTime end;
-    private Long managerId;
+public record ShiftDto(
+        Long id,
+        LocalDate date,
+        LocalDateTime start,
+        LocalDateTime end,
+        Manager manager,
+        List<AssignmentDto> assignments
+) {
+    public static ShiftDto fromShift(Shift shift) {
+        return new ShiftDto(
+                shift.getId(),
+                shift.getDate(),
+                shift.getStart(),
+                shift.getEnd(),
+                shift.getManager(),
+                shift.getAssignments().stream()
+                        .map(AssignmentDto::fromAssignment)
+                        .toList()
+        );
+    }
 }
