Index: pom.xml
===================================================================
--- pom.xml	(revision c1a8ae9f38b6d0a02a2175eb1225db3fcdbd22ec)
+++ pom.xml	(revision 8519390a6417540a880667846235699403bf9f23)
@@ -87,4 +87,9 @@
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springdoc</groupId>
+            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+            <version>2.3.0</version>
+        </dependency>
     </dependencies>
 
Index: src/main/java/finki/db/tasty_tabs/entity/Category.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/entity/Category.java	(revision c1a8ae9f38b6d0a02a2175eb1225db3fcdbd22ec)
+++ src/main/java/finki/db/tasty_tabs/entity/Category.java	(revision 8519390a6417540a880667846235699403bf9f23)
@@ -12,5 +12,5 @@
  */
 @Entity
-@Table(name = "category")
+@Table(name = "categories")
 @Data
 @NoArgsConstructor
@@ -29,3 +29,8 @@
     @OneToMany(mappedBy = "category")
     private List<Product> products;
+
+    public Category(String name, Boolean isAvailable) {
+        this.name=name;
+        this.isAvailable=isAvailable;
+    }
 }
Index: src/main/java/finki/db/tasty_tabs/repository/CategoryRepository.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/repository/CategoryRepository.java	(revision c1a8ae9f38b6d0a02a2175eb1225db3fcdbd22ec)
+++ src/main/java/finki/db/tasty_tabs/repository/CategoryRepository.java	(revision 8519390a6417540a880667846235699403bf9f23)
@@ -10,8 +10,10 @@
 
 import java.util.List;
+import java.util.Optional;
 
 @Repository
 public interface CategoryRepository extends JpaRepository<Category, Long> {
 
+    Optional<Category> findByName(String name);
     @Query(value = "SELECT * FROM category WHERE id = :id", nativeQuery = true)
     Category customFindCategoryById(@Param("id") Long id);
Index: src/main/java/finki/db/tasty_tabs/service/CategoryService.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/CategoryService.java	(revision 8519390a6417540a880667846235699403bf9f23)
+++ src/main/java/finki/db/tasty_tabs/service/CategoryService.java	(revision 8519390a6417540a880667846235699403bf9f23)
@@ -0,0 +1,15 @@
+package finki.db.tasty_tabs.service;
+
+import finki.db.tasty_tabs.entity.Category;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface CategoryService {
+    Optional<Category> findById(Long id);
+    List<Category> getAllCategories();
+    Optional<Category> updateCategory(Long id,Category category);
+    void deleteCategory(Long id);
+    Optional<Category> getCategoryByName(String name);
+    Optional<Category> createCategory(Category category);
+}
Index: src/main/java/finki/db/tasty_tabs/service/impl/CategoryServiceImpl.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/service/impl/CategoryServiceImpl.java	(revision 8519390a6417540a880667846235699403bf9f23)
+++ src/main/java/finki/db/tasty_tabs/service/impl/CategoryServiceImpl.java	(revision 8519390a6417540a880667846235699403bf9f23)
@@ -0,0 +1,57 @@
+package finki.db.tasty_tabs.service.impl;
+
+import finki.db.tasty_tabs.entity.Category;
+import finki.db.tasty_tabs.repository.CategoryRepository;
+import finki.db.tasty_tabs.service.CategoryService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class CategoryServiceImpl implements CategoryService {
+
+    private final CategoryRepository categoryRepository;
+
+    public CategoryServiceImpl(CategoryRepository categoryRepository) {
+        this.categoryRepository = categoryRepository;
+    }
+
+    @Override
+    public Optional<Category> findById(Long id) {
+        return categoryRepository.findById(id);
+    }
+
+    @Override
+    public List<Category> getAllCategories() {
+        return categoryRepository.findAll();
+    }
+
+    @Override
+    public Optional<Category> updateCategory(Long id, Category category) {
+        return categoryRepository.findById(id).map(existingCategory -> {
+            if (category.getName() != null) {
+                existingCategory.setName(category.getName());
+            }
+            if (category.getIsAvailable() != null) {
+                existingCategory.setIsAvailable(category.getIsAvailable());
+            }
+            return categoryRepository.save(existingCategory);
+        });
+    }
+
+    @Override
+    public void deleteCategory(Long id) {
+        categoryRepository.deleteById(id);
+    }
+
+    @Override
+    public Optional<Category> getCategoryByName(String name) {
+        return categoryRepository.findByName(name);
+    }
+
+    @Override
+    public Optional<Category> createCategory(Category category) {
+        return Optional.of(categoryRepository.save(category));
+    }
+}
Index: src/main/java/finki/db/tasty_tabs/web/controllers/CategoryController.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/controllers/CategoryController.java	(revision 8519390a6417540a880667846235699403bf9f23)
+++ src/main/java/finki/db/tasty_tabs/web/controllers/CategoryController.java	(revision 8519390a6417540a880667846235699403bf9f23)
@@ -0,0 +1,67 @@
+package finki.db.tasty_tabs.web.controllers;
+
+import finki.db.tasty_tabs.entity.Category;
+import finki.db.tasty_tabs.service.CategoryService;
+import finki.db.tasty_tabs.web.dto.CreateCategoryDto;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/categories")
+@Tag(name = "Category API", description = "Endpoints for managing product categories") // OpenAPI tag
+public class CategoryController {
+
+    private final CategoryService categoryService;
+
+    public CategoryController(CategoryService categoryService) {
+        this.categoryService = categoryService;
+    }
+
+    @Operation(summary = "Get all categories", description = "Retrieves a list of all available categories.")
+    @GetMapping
+    public List<Category> findAll() {
+        return categoryService.getAllCategories();
+    }
+
+    @Operation(summary = "Get categoryId by ID", description = "Finds a categoryId by its ID.")
+    @GetMapping("/{id}")
+    public ResponseEntity<Category> findById(@PathVariable Long id) {
+        return categoryService.findById(id)
+                .map(category -> ResponseEntity.ok().body(category))
+                .orElseGet(() -> ResponseEntity.notFound().build());
+    }
+
+    @Operation(summary = "Add a new categoryId", description = "Creates a new categoryId.")
+    @PostMapping("/add")
+    public ResponseEntity<Category> save(@RequestBody CreateCategoryDto createCategoryDto) {
+        return categoryService.createCategory(createCategoryDto.toCategory())
+                .map(ResponseEntity::ok)
+                .orElseGet(() -> ResponseEntity.notFound().build());
+    }
+
+    @Operation(summary = "Update an existing categoryId", description = "Updates a categoryId by ID.")
+    @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());
+    }
+
+    @Operation(summary = "Delete a categoryId", description = "Deletes a categoryId by its ID.")
+    @DeleteMapping("/delete/{id}")
+    public ResponseEntity<Void> deleteById(@PathVariable Long id) {
+        if (categoryService.findById(id).isPresent()) {
+            categoryService.deleteCategory(id);
+            return ResponseEntity.noContent().build();
+        } else {
+            return ResponseEntity.notFound().build();
+        }
+    }
+}
Index: src/main/java/finki/db/tasty_tabs/web/dto/CreateCategoryDto.java
===================================================================
--- src/main/java/finki/db/tasty_tabs/web/dto/CreateCategoryDto.java	(revision 8519390a6417540a880667846235699403bf9f23)
+++ src/main/java/finki/db/tasty_tabs/web/dto/CreateCategoryDto.java	(revision 8519390a6417540a880667846235699403bf9f23)
@@ -0,0 +1,13 @@
+package finki.db.tasty_tabs.web.dto;
+
+import finki.db.tasty_tabs.entity.Category;
+
+public record CreateCategoryDto(
+        String name,
+        Boolean isAvailable
+) {
+    public Category toCategory() {
+        return new Category(name, isAvailable);
+    }
+
+}
