Index: src/main/java/mk/ukim/finki/db/distributorapp/model/Article.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/model/Article.java	(revision dc016d789fabb2dc6e30fe663d206604db0888f5)
+++ src/main/java/mk/ukim/finki/db/distributorapp/model/Article.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -2,8 +2,10 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
 
 import java.util.List;
 
 @Entity
+@Data
 public class Article {
     @Id
Index: src/main/java/mk/ukim/finki/db/distributorapp/model/Order.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/model/Order.java	(revision dc016d789fabb2dc6e30fe663d206604db0888f5)
+++ src/main/java/mk/ukim/finki/db/distributorapp/model/Order.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -2,8 +2,11 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
+import mk.ukim.finki.db.distributorapp.model.enumerations.OrderStatus;
 
 import java.util.List;
 
 @Entity
+@Data
 public class Order {
 
@@ -12,4 +15,5 @@
     private Long orderId;
     private Double amount;
+    private OrderStatus orderStatus;
 
     @ManyToOne
@@ -20,6 +24,6 @@
     @JoinTable(
             name = "order_article",
-            joinColumns = @JoinColumn(name = "order_id"),
-            inverseJoinColumns = @JoinColumn(name = "article_id")
+            joinColumns = @JoinColumn(name = "order_id",referencedColumnName = "orderId"),
+            inverseJoinColumns = @JoinColumn(name = "article_id",referencedColumnName = "articleId")
     )
     private List<Article> articles;
@@ -30,5 +34,10 @@
 
     @ManyToOne
-    @JoinColumn(name = "delivery_id",nullable = false)
+    @JoinColumn(name = "delivery_id",nullable = false,referencedColumnName = "deliveryId")
     private Delivery delivery;
+
+    public Order(Long customerId, List<Article> articles) {
+        this.customer = customer;
+        this.articles = articles;
+    }
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/model/Proforma.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/model/Proforma.java	(revision dc016d789fabb2dc6e30fe663d206604db0888f5)
+++ src/main/java/mk/ukim/finki/db/distributorapp/model/Proforma.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -2,6 +2,8 @@
 
 import jakarta.persistence.*;
+import lombok.Data;
 
 @Entity
+@Data
 public class Proforma {
     @Id
Index: src/main/java/mk/ukim/finki/db/distributorapp/model/enumerations/DeliveryStatus.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/model/enumerations/DeliveryStatus.java	(revision dc016d789fabb2dc6e30fe663d206604db0888f5)
+++ src/main/java/mk/ukim/finki/db/distributorapp/model/enumerations/DeliveryStatus.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -1,6 +1,7 @@
 package mk.ukim.finki.db.distributorapp.model.enumerations;
 
-import jakarta.persistence.Enumerated;
-
 public enum DeliveryStatus {
+    PENDING,
+    SHIPPED,
+    DELIVERED
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/model/enumerations/OrderStatus.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/model/enumerations/OrderStatus.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
+++ src/main/java/mk/ukim/finki/db/distributorapp/model/enumerations/OrderStatus.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -0,0 +1,11 @@
+package mk.ukim.finki.db.distributorapp.model.enumerations;
+
+public enum OrderStatus {
+    CREATED,
+    CONFIRMED,
+    PENDING_PAYMENT,
+    PAYMENT_RECEIVED,
+    PENDING_DELIVERY,
+    OUT_OF_STOCK,
+    DECLINED
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/repository/CustomerRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/repository/CustomerRepository.java	(revision dc016d789fabb2dc6e30fe663d206604db0888f5)
+++ src/main/java/mk/ukim/finki/db/distributorapp/repository/CustomerRepository.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -1,4 +1,14 @@
 package mk.ukim.finki.db.distributorapp.repository;
 
-public class CustomerRepository {
+import mk.ukim.finki.db.distributorapp.model.Customer;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.Optional;
+
+public interface CustomerRepository extends JpaRepository<Customer, Long> {
+
+    @Query(value = "select * from CUSTOMER u where u.user_id={id}}",
+    nativeQuery = true)
+    Optional<Customer> findById(Long id);
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/repository/OrdersRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/repository/OrdersRepository.java	(revision dc016d789fabb2dc6e30fe663d206604db0888f5)
+++ src/main/java/mk/ukim/finki/db/distributorapp/repository/OrdersRepository.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -1,4 +1,15 @@
 package mk.ukim.finki.db.distributorapp.repository;
 
-public interface OrdersRepository {
+import mk.ukim.finki.db.distributorapp.model.Order;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface OrdersRepository extends JpaRepository<Order,Long> {
+    @Query(value = "select * from ORDERS",
+            nativeQuery = true)
+    List<Order> findAll();
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/repository/UserRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/repository/UserRepository.java	(revision dc016d789fabb2dc6e30fe663d206604db0888f5)
+++ src/main/java/mk/ukim/finki/db/distributorapp/repository/UserRepository.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -1,4 +1,8 @@
 package mk.ukim.finki.db.distributorapp.repository;
 
-public interface UserRepository {
+import mk.ukim.finki.db.distributorapp.model.User;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface UserRepository extends JpaRepository<User,Long> {
+
 }
Index: src/main/java/mk/ukim/finki/db/distributorapp/service/OrderService.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/service/OrderService.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
+++ src/main/java/mk/ukim/finki/db/distributorapp/service/OrderService.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -0,0 +1,17 @@
+package mk.ukim.finki.db.distributorapp.service;
+
+import mk.ukim.finki.db.distributorapp.model.Article;
+import mk.ukim.finki.db.distributorapp.model.Order;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface OrderService {
+    List<Order> findAll();
+    Optional<Order> findById(Long id);
+
+    Optional<Order> save(Long customerId, List<Article> articles);
+
+    void deleteById(Long id);
+    boolean exists(Long id);
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/service/impl/OrderServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/service/impl/OrderServiceImpl.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
+++ src/main/java/mk/ukim/finki/db/distributorapp/service/impl/OrderServiceImpl.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -0,0 +1,66 @@
+package mk.ukim.finki.db.distributorapp.service.impl;
+
+import mk.ukim.finki.db.distributorapp.model.Article;
+import mk.ukim.finki.db.distributorapp.model.Customer;
+import mk.ukim.finki.db.distributorapp.model.Order;
+import mk.ukim.finki.db.distributorapp.model.Proforma;
+import mk.ukim.finki.db.distributorapp.model.enumerations.OrderStatus;
+import mk.ukim.finki.db.distributorapp.repository.CustomerRepository;
+import mk.ukim.finki.db.distributorapp.repository.OrdersRepository;
+import mk.ukim.finki.db.distributorapp.repository.UserRepository;
+import mk.ukim.finki.db.distributorapp.service.OrderService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class OrderServiceImpl implements OrderService {
+
+    private final OrdersRepository ordersRepository;
+    private final CustomerRepository customerRepository;
+
+    public OrderServiceImpl(OrdersRepository ordersRepository, CustomerRepository customerRepository) {
+        this.ordersRepository = ordersRepository;
+        this.customerRepository = customerRepository;
+    }
+
+    @Override
+    public List<Order> findAll() {
+        return ordersRepository.findAll();
+    }
+
+    @Override
+    public Optional<Order> findById(Long id) {
+        return this.ordersRepository.findById(id);
+    }
+
+    @Override
+    public Optional<Order> save(Long customerId, List<Article> articles) {
+        Order order = new Order(customerId,articles);
+        double amount=0;
+        for(Article article:articles){
+            amount+=article.getPrice();
+        }
+        order.setAmount(amount);
+        Customer customer = this.customerRepository.findById(customerId).get();
+        order.setCustomer(customer);
+        order.setOrderStatus(OrderStatus.CREATED);
+
+        Proforma proforma = new Proforma();
+        proforma.setTotalAmount(amount);
+
+        order.setProforma(proforma);
+        return Optional.of(this.ordersRepository.save(order));
+    }
+
+    @Override
+    public void deleteById(Long id) {
+
+    }
+
+    @Override
+    public boolean exists(Long id) {
+        return false;
+    }
+}
Index: src/main/java/mk/ukim/finki/db/distributorapp/web/rest/OrderRestController.java
===================================================================
--- src/main/java/mk/ukim/finki/db/distributorapp/web/rest/OrderRestController.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
+++ src/main/java/mk/ukim/finki/db/distributorapp/web/rest/OrderRestController.java	(revision 0a049d7a6774abc39c216788d7995cabacb6e245)
@@ -0,0 +1,47 @@
+package mk.ukim.finki.db.distributorapp.web.rest;
+
+import mk.ukim.finki.db.distributorapp.model.Article;
+import mk.ukim.finki.db.distributorapp.model.Order;
+import mk.ukim.finki.db.distributorapp.service.OrderService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/orders")
+public class OrderRestController {
+    private final OrderService orderService;
+
+    public OrderRestController(OrderService orderService) {
+        this.orderService = orderService;
+    }
+
+    @GetMapping
+    public List<Order> findAll(){
+        return this.orderService.findAll();
+    }
+
+    @GetMapping("{id}")
+    public ResponseEntity<Order> findById(@PathVariable Long id){
+        return this.orderService.findById(id)
+                .map(order -> ResponseEntity.ok().body(order))
+                .orElseGet(()->ResponseEntity.notFound().build());
+    }
+
+    @PostMapping("/add")
+    public ResponseEntity<Order> save(@RequestParam Long customerId, @RequestParam List<Article> articles){
+        return this.orderService.save(customerId,articles)
+                .map(order -> ResponseEntity.ok().body(order))
+                .orElseGet(() -> ResponseEntity.badRequest().build());
+    }
+
+    @DeleteMapping("/delete/{id}")
+    public ResponseEntity deleteById(@PathVariable Long id){
+        if(this.orderService.exists(id)){
+            this.orderService.deleteById(id);
+            return ResponseEntity.ok().build();
+        }
+        return ResponseEntity.notFound().build();
+    }
+}
