Index: src/main/java/finki/db/tasty_tabs/entity/exceptions/ReservationNotFoundException.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/exceptions/ReservationNotFoundException.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
+++ src/main/java/finki/db/tasty_tabs/entity/exceptions/ReservationNotFoundException.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
@@ -0,0 +1,9 @@
+package finki.db.tasty_tabs.entity.exceptions;
+
+public class ReservationNotFoundException extends DomainException {
+
+    public ReservationNotFoundException(Long id) {
+        super(String.format("Reservation with id %d doesnt exist",id));
+    }
+}
+
Index: src/main/java/finki/db/tasty_tabs/service/ReservationService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/ReservationService.java	(revision b4df797235607c3eaa1d4cd7e54cb998d3ab8591)
+++ src/main/java/finki/db/tasty_tabs/service/ReservationService.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
@@ -1,8 +1,15 @@
 package finki.db.tasty_tabs.service;
 
-import finki.db.tasty_tabs.web.dto.CreateReservationRequest;
+import finki.db.tasty_tabs.entity.Reservation;
+import finki.db.tasty_tabs.web.dto.CreateReservationDto;
 import finki.db.tasty_tabs.web.dto.ReservationDto;
 
+import java.util.List;
+
 public interface ReservationService {
-    ReservationDto makeReservation(CreateReservationRequest request);
+    List<Reservation> getAllReservations();
+    Reservation getReservationById(Long id);
+    Reservation createReservation(CreateReservationDto dto,String userEmail);
+    Reservation updateReservation(Long id, CreateReservationDto dto,String userEmail);
+    void deleteReservation(Long id);
 }
Index: src/main/java/finki/db/tasty_tabs/service/impl/ReservationServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/ReservationServiceImpl.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
+++ src/main/java/finki/db/tasty_tabs/service/impl/ReservationServiceImpl.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
@@ -0,0 +1,78 @@
+package finki.db.tasty_tabs.service.impl;
+
+import finki.db.tasty_tabs.entity.Reservation;
+import finki.db.tasty_tabs.entity.User;
+import finki.db.tasty_tabs.entity.exceptions.ReservationNotFoundException;
+import finki.db.tasty_tabs.repository.ReservationRepository;
+import finki.db.tasty_tabs.repository.UserRepository;
+import finki.db.tasty_tabs.service.ReservationService;
+import finki.db.tasty_tabs.web.dto.CreateReservationDto;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class ReservationServiceImpl implements ReservationService {
+
+    private final ReservationRepository reservationRepository;
+    private final UserRepository userRepository;
+
+    public ReservationServiceImpl(ReservationRepository reservationRepository, UserRepository userRepository) {
+        this.reservationRepository = reservationRepository;
+        this.userRepository = userRepository;
+    }
+
+    @Override
+    public List<Reservation> getAllReservations() {
+        return reservationRepository.findAll();
+    }
+
+    @Override
+    public Reservation getReservationById(Long id) {
+        return reservationRepository.findById(id)
+                .orElseThrow(() -> new ReservationNotFoundException(id));
+    }
+
+    @Override
+    public Reservation createReservation(CreateReservationDto dto, String userEmail) {
+        User user = userRepository.findByEmail(userEmail)
+                .orElseThrow(() -> new UsernameNotFoundException("User with email " + userEmail + " not found."));
+
+        Reservation reservation = new Reservation();
+        reservation.setStayLength(dto.stayLength());
+        reservation.setDatetime(dto.datetime());
+        reservation.setNumberOfPeople(dto.numberOfPeople());
+        reservation.setUser(user);
+        reservation.setCreationTimestamp(LocalDateTime.now());
+
+        return reservationRepository.save(reservation);
+    }
+
+    @Override
+    public Reservation updateReservation(Long id, CreateReservationDto dto, String userEmail) {
+        Reservation existing = getReservationById(id);
+
+        User user = userRepository.findByEmail(userEmail)
+                .orElseThrow(() -> new UsernameNotFoundException("User with email " + userEmail + " not found."));
+
+        // Optionally, add a check if the logged-in user is allowed to update this reservation
+        if (!existing.getUser().getId().equals(user.getId())) {
+            throw new SecurityException("You are not authorized to update this reservation.");
+        }
+
+        existing.setStayLength(dto.stayLength());
+        existing.setDatetime(dto.datetime());
+        existing.setNumberOfPeople(dto.numberOfPeople());
+        existing.setUser(user);
+
+        return reservationRepository.save(existing);
+    }
+
+    @Override
+    public void deleteReservation(Long id) {
+        reservationRepository.deleteById(id);
+    }
+}
+
Index: src/main/java/finki/db/tasty_tabs/web/controllers/ReservationController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/ReservationController.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/ReservationController.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
@@ -0,0 +1,62 @@
+package finki.db.tasty_tabs.web.controllers;
+
+import finki.db.tasty_tabs.entity.Reservation;
+import finki.db.tasty_tabs.service.ReservationService;
+import finki.db.tasty_tabs.web.dto.CreateReservationDto;
+import finki.db.tasty_tabs.web.dto.ReservationDto;
+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;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/api/reservations")
+@Tag(name = "Reservation API", description = "Endpoints for managing reservations")
+@RequiredArgsConstructor
+public class ReservationController {
+
+    private final ReservationService reservationService;
+
+    @Operation(summary = "Get all reservations")
+    @GetMapping
+    public List<ReservationDto> getAll() {
+        return reservationService.getAllReservations()
+                .stream()
+                .map(ReservationDto::from)
+                .collect(Collectors.toList());
+    }
+
+    @Operation(summary = "Get reservation by ID")
+    @GetMapping("/{id}")
+    public ResponseEntity<ReservationDto> getById(@PathVariable Long id) {
+        return ResponseEntity.ok(ReservationDto.from(reservationService.getReservationById(id)));
+    }
+
+    @Operation(summary = "Create new reservation")
+    @PostMapping("/add")
+    public ResponseEntity<ReservationDto> create(@RequestBody CreateReservationDto dto, Authentication authentication) {
+        String userEmail = authentication.getName();
+        Reservation reservation = reservationService.createReservation(dto, userEmail);
+        return ResponseEntity.ok(ReservationDto.from(reservation));
+    }
+
+    @Operation(summary = "Update reservation")
+    @PutMapping("/edit/{id}")
+    public ResponseEntity<ReservationDto> update(@PathVariable Long id, @RequestBody CreateReservationDto dto, Authentication authentication) {
+        String userEmail = authentication.getName();
+        Reservation reservation = reservationService.updateReservation(id, dto, userEmail);
+        return ResponseEntity.ok(ReservationDto.from(reservation));
+    }
+
+    @Operation(summary = "Delete reservation")
+    @DeleteMapping("/delete/{id}")
+    public ResponseEntity<Void> delete(@PathVariable Long id) {
+        reservationService.deleteReservation(id);
+        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 b4df797235607c3eaa1d4cd7e54cb998d3ab8591)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/ShiftController.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
@@ -16,9 +16,12 @@
 @RestController
 @RequestMapping("/api/shifts")
-@RequiredArgsConstructor
 @Tag(name = "Shift API", description = "Endpoints for managing work shifts (Manager only)")
 public class ShiftController {
 
     private final ShiftService shiftService;
+
+    public ShiftController(ShiftService shiftService) {
+        this.shiftService = shiftService;
+    }
 
     @Operation(summary = "Get all shifts")
Index: src/main/java/finki/db/tasty_tabs/web/dto/CreateReservationDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/CreateReservationDto.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
+++ src/main/java/finki/db/tasty_tabs/web/dto/CreateReservationDto.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
@@ -0,0 +1,10 @@
+package finki.db.tasty_tabs.web.dto;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+public record CreateReservationDto(
+        Integer stayLength,
+        LocalDateTime datetime,
+        Integer numberOfPeople
+) {
+}
Index: c/main/java/finki/db/tasty_tabs/web/dto/CreateReservationRequest.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/CreateReservationRequest.java	(revision b4df797235607c3eaa1d4cd7e54cb998d3ab8591)
+++ 	(revision )
@@ -1,11 +1,0 @@
-package finki.db.tasty_tabs.web.dto;
-import lombok.Data;
-import java.time.LocalDateTime;
-import java.util.List;
-@Data
-public class CreateReservationRequest {
-    private Long customerId;
-    private Integer stayLength;
-    private LocalDateTime datetime;
-    private Integer numberOfPeople;
-}
Index: src/main/java/finki/db/tasty_tabs/web/dto/ReservationDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/ReservationDto.java	(revision b4df797235607c3eaa1d4cd7e54cb998d3ab8591)
+++ src/main/java/finki/db/tasty_tabs/web/dto/ReservationDto.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
@@ -1,13 +1,24 @@
 package finki.db.tasty_tabs.web.dto;
+import finki.db.tasty_tabs.entity.Reservation;
 import lombok.Data;
 import java.time.LocalDateTime;
 import java.util.List;
-@Data
-public class ReservationDto {
-    private Long id;
-    private Integer stayLength;
-    private LocalDateTime datetime;
-    private LocalDateTime creationTimestamp;
-    private Integer numberOfPeople;
-    private Long userId;
+public record ReservationDto(
+        Long id,
+        Integer stayLength,
+        LocalDateTime datetime,
+        LocalDateTime creationTimestamp,
+        Integer numberOfPeople,
+        String email
+) {
+    public static ReservationDto from(Reservation reservation) {
+        return new ReservationDto(
+                reservation.getId(),
+                reservation.getStayLength(),
+                reservation.getDatetime(),
+                reservation.getCreationTimestamp(),
+                reservation.getNumberOfPeople(),
+                reservation.getUser().getEmail()
+        );
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/web/exception/GlobalExceptionHandler.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/exception/GlobalExceptionHandler.java	(revision b4df797235607c3eaa1d4cd7e54cb998d3ab8591)
+++ src/main/java/finki/db/tasty_tabs/web/exception/GlobalExceptionHandler.java	(revision 2ca107a182731e0e3b2f35cc65e724b5108da20b)
@@ -51,4 +51,8 @@
             errorDetail.setProperty("description", "You are not authorized to access this resource");
         }
+        if (exception instanceof SecurityException) {
+            errorDetail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(403), exception.getMessage());
+            errorDetail.setProperty("description", "You are not authorized to perform this action");
+        }
 
         if (exception instanceof SignatureException) {
