Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/bootstrap/DataHolder.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/bootstrap/DataHolder.java	(revision 14c921a948e24972824358e8e0d1c27aeedf0608)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/bootstrap/DataHolder.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -3,4 +3,5 @@
 import jakarta.annotation.PostConstruct;
 import mk.ukim.finki.it.reservengo.model.domain.*;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventType;
 import mk.ukim.finki.it.reservengo.model.enumerations.LocalType;
 import mk.ukim.finki.it.reservengo.model.enumerations.Role;
@@ -126,4 +127,5 @@
                     "Active Event for " + local.getName(),
                     "Description for active event",
+                    EventType.DJ_NIGHT,
                     LocalDateTime.now().plusDays(7), // Future date
                     LocalDateTime.now().plusDays(8),
@@ -135,4 +137,5 @@
                     "Finished Event for " + local.getName(),
                     "Description for finished event",
+                    EventType.BRUNCH,
                     LocalDateTime.now().minusDays(7), // Past date
                     LocalDateTime.now().minusDays(6),
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/eventDTO/DisplayEventDTO.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/eventDTO/DisplayEventDTO.java	(revision 14c921a948e24972824358e8e0d1c27aeedf0608)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/eventDTO/DisplayEventDTO.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -2,4 +2,6 @@
 
 import mk.ukim.finki.it.reservengo.model.domain.Event;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventStatus;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventType;
 
 import java.time.LocalDateTime;
@@ -10,7 +12,9 @@
         String name,
         String description,
+        EventType eventType,
         LocalDateTime eventStart,
         LocalDateTime eventEnd,
-        Long localId
+        Long localId,
+        EventStatus status
 ) {
     public static DisplayEventDTO fromEvent(Event event) {
@@ -19,7 +23,9 @@
                 event.getName(),
                 event.getDescription(),
+                event.getEventType(),
                 event.getEventStart(),
                 event.getEventEnd(),
-                event.getLocal().getId()
+                event.getLocal().getId(),
+                event.getStatus()
         );
     }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/eventDTO/PagedEventDTO.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/eventDTO/PagedEventDTO.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/eventDTO/PagedEventDTO.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -0,0 +1,21 @@
+package mk.ukim.finki.it.reservengo.dto.eventDTO;
+
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+public record PagedEventDTO(
+        List<DisplayEventDTO> events,
+        int currentPage,
+        int totalPages,
+        long itemsPerPage
+) {
+    public static PagedEventDTO from(Page<DisplayEventDTO> page) {
+        return new PagedEventDTO(
+                page.getContent(),
+                page.getNumber(),
+                page.getTotalPages(),
+                page.getTotalElements()
+        );
+    }
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/Event.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/Event.java	(revision 14c921a948e24972824358e8e0d1c27aeedf0608)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/Event.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -3,12 +3,16 @@
 import jakarta.persistence.*;
 import lombok.*;
+import mk.ukim.finki.it.reservengo.config.listeners.Auditable;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventStatus;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventType;
 
 import java.time.LocalDateTime;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Entity
 @AllArgsConstructor
 @NoArgsConstructor
-public class Event {
+public class Event extends Auditable {
 
     @Id
@@ -23,14 +27,30 @@
     private String description;
 
+    @Enumerated(EnumType.STRING)
+    private EventType eventType;
+
     private LocalDateTime eventStart;
 
     private LocalDateTime eventEnd;
 
-    public Event(String name, String description, LocalDateTime eventStart, LocalDateTime eventEnd, Local local) {
+    public Event(String name, String description, EventType eventType, LocalDateTime eventStart, LocalDateTime eventEnd, Local local) {
         this.name = name;
         this.description = description;
+        this.eventType = eventType;
         this.eventStart = eventStart;
         this.eventEnd = eventEnd;
         this.local = local;
     }
+
+    public EventStatus getStatus() {
+        LocalDateTime now = LocalDateTime.now();
+
+        if (now.isBefore(eventStart)) {
+            return EventStatus.UPCOMING;
+        } else if (now.isAfter(eventEnd)) {
+            return EventStatus.FINISHED;
+        } else {
+            return EventStatus.ACTIVE;
+        }
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/enumerations/EventStatus.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/enumerations/EventStatus.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/enumerations/EventStatus.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -0,0 +1,7 @@
+package mk.ukim.finki.it.reservengo.model.enumerations;
+
+public enum EventStatus {
+    UPCOMING,
+    ACTIVE,
+    FINISHED
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/enumerations/EventType.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/enumerations/EventType.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/enumerations/EventType.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -0,0 +1,20 @@
+package mk.ukim.finki.it.reservengo.model.enumerations;
+
+public enum EventType {
+    LIVE_MUSIC,
+    DJ_NIGHT,
+    FOOD_SPECIAL,
+    DRINK_SPECIAL,
+    HAPPY_HOUR,
+    SPORTS_SCREENING,
+    KARAOKE,
+    THEME_PARTY,
+    OPEN_MIC,
+    BRUNCH,
+    COOKING_WORKSHOP,
+    ART_EXHIBITION,
+    COMEDY_SHOW,
+    GAME_NIGHT,
+    PRIVATE_EVENT,
+    SEASONAL_EVENT
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/repository/EventRepository.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/repository/EventRepository.java	(revision 14c921a948e24972824358e8e0d1c27aeedf0608)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/repository/EventRepository.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -3,7 +3,8 @@
 import mk.ukim.finki.it.reservengo.model.domain.Event;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface EventRepository extends JpaRepository<Event, Long> {
+public interface EventRepository extends JpaRepository<Event, Long>, JpaSpecificationExecutor<Event> {
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EventServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EventServiceImpl.java	(revision 14c921a948e24972824358e8e0d1c27aeedf0608)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/EventServiceImpl.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -1,7 +1,12 @@
 package mk.ukim.finki.it.reservengo.service.impl;
 
+import mk.ukim.finki.it.reservengo.dto.eventDTO.DisplayEventDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Event;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventStatus;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventType;
 import mk.ukim.finki.it.reservengo.repository.EventRepository;
 import mk.ukim.finki.it.reservengo.service.intf.EventService;
+import org.springframework.data.domain.*;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
@@ -20,3 +25,53 @@
         return eventRepository.findAll();
     }
+
+    @Override
+    public Page<DisplayEventDTO> searchEvents(String name, EventType eventType, EventStatus eventStatus, int page, int size, String sortBy, String direction) {
+        boolean needsManualProcessing;
+        needsManualProcessing = eventStatus != null;
+
+        Specification<Event> spec = Specification.where(null);
+
+        if (name != null && !name.trim().isEmpty()) {
+            spec = spec.and((root, query, cb) ->
+                    cb.like(cb.lower(root.get("name")), "%" + name.toLowerCase() + "%"));
+        }
+
+        if (eventType != null) {
+            spec = spec.and((root, query, cb) ->
+                    cb.equal(root.get("eventType"), eventType));
+        }
+
+        Pageable pageable = needsManualProcessing
+                ? Pageable.unpaged()
+                : PageRequest.of(page, size, getSort(sortBy, direction));
+
+        Page<Event> eventsPage = eventRepository.findAll(spec, pageable);
+
+        // Manual status filtering
+        if (needsManualProcessing) {
+            List<DisplayEventDTO> filtered = eventsPage.getContent().stream()
+                    .filter(event -> event.getStatus() == eventStatus)
+                    .map(DisplayEventDTO::fromEvent)
+                    .toList();
+
+            int total = filtered.size();
+            int start = Math.min(page * size, total);
+            int end = Math.min(start + size, total);
+            List<DisplayEventDTO> paged = filtered.subList(start, end);
+
+            return new PageImpl<>(paged, PageRequest.of(page, size), total);
+        }
+
+        return eventsPage.map(DisplayEventDTO::fromEvent);
+    }
+
+    private Sort getSort(String sortBy, String direction) {
+        Sort.Direction sortDirection = "desc".equalsIgnoreCase(direction) ? Sort.Direction.DESC : Sort.Direction.ASC;
+
+        return switch (sortBy) {
+            case "createdAt" -> Sort.by(sortDirection, "createdAt");
+            default -> Sort.by(sortDirection, "name");
+        };
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/EventService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/EventService.java	(revision 14c921a948e24972824358e8e0d1c27aeedf0608)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/EventService.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -1,5 +1,9 @@
 package mk.ukim.finki.it.reservengo.service.intf;
 
+import mk.ukim.finki.it.reservengo.dto.eventDTO.DisplayEventDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Event;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventStatus;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventType;
+import org.springframework.data.domain.Page;
 
 import java.util.List;
@@ -7,3 +11,5 @@
 public interface EventService {
     List<Event> listAll();
+
+    Page<DisplayEventDTO> searchEvents(String name, EventType eventType, EventStatus eventStatus, int page, int size, String sortBy, String direction);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/EventController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/EventController.java	(revision 14c921a948e24972824358e8e0d1c27aeedf0608)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/EventController.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -2,12 +2,15 @@
 
 import mk.ukim.finki.it.reservengo.dto.eventDTO.DisplayEventDTO;
+import mk.ukim.finki.it.reservengo.dto.eventDTO.PagedEventDTO;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventStatus;
+import mk.ukim.finki.it.reservengo.model.enumerations.EventType;
 import mk.ukim.finki.it.reservengo.service.intf.EventService;
+import org.springframework.data.domain.Page;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
 
 @RestController
@@ -21,7 +24,16 @@
 
     @GetMapping
-    public ResponseEntity<List<DisplayEventDTO>> getEvents() {
-        List<DisplayEventDTO> displayEventDTOList = DisplayEventDTO.fromEvents(eventService.listAll());
-        return new ResponseEntity<>(displayEventDTOList, HttpStatus.OK);
+    public ResponseEntity<PagedEventDTO> getEvents(
+            @RequestParam(required = false) String name,
+            @RequestParam(required = false) EventType eventType,
+            @RequestParam(required = false) EventStatus eventStatus, // active, upcoming
+            @RequestParam(required = false, defaultValue = "name") String sortBy, // created at, name
+            @RequestParam(required = false, defaultValue = "asc") String direction,
+            @RequestParam(defaultValue = "0") int page,
+            @RequestParam(defaultValue = "10") int size
+    ) {
+        Page<DisplayEventDTO> dtoPage = eventService.searchEvents(name, eventType, eventStatus, page, size, sortBy, direction);
+        PagedEventDTO pagedEventDTO = PagedEventDTO.from(dtoPage);
+        return new ResponseEntity<>(pagedEventDTO, HttpStatus.OK);
     }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalController.java	(revision 14c921a948e24972824358e8e0d1c27aeedf0608)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalController.java	(revision f9f6a902043eb450f425ea82261266513ec15a78)
@@ -28,11 +28,11 @@
             @RequestParam(required = false) String name,
             @RequestParam(required = false) List<ProvidedService> services,
-            @RequestParam(required = false)LocalType localType,
+            @RequestParam(required = false) LocalType localType,
             @RequestParam(required = false) Boolean isOpen,
-            @RequestParam(required = false, defaultValue = "name") String sortBy,
+            @RequestParam(required = false, defaultValue = "name") String sortBy, // created at, rating, name
             @RequestParam(required = false, defaultValue = "asc") String direction,
             @RequestParam(defaultValue = "0") int page,
             @RequestParam(defaultValue = "10") int size
-            ) {
+    ) {
         Page<DisplayLocalDTO> dtoPage = localService.searchLocals(name, services, localType, isOpen, page, size, sortBy, direction);
         PagedLocalDTO pagedLocalDTO = PagedLocalDTO.from(dtoPage);
