Skip to content
Merged

Dev #32

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 48 additions & 59 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Java CI for Embula with Maven

on:
Expand All @@ -16,57 +8,54 @@ on:

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn clean install

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build & push Docker image
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: true
tags: docker.io/dewmink/embula-backend:latest

- name: Deploy to EC2
uses: appleboy/ssh-action@v0.1.7
with:
host : ${{secrets.EC2_HOST}}
username : ${{secrets.EC2_USER}}
key: ${{secrets.EC2_KEY}}
script:
docker pull dewmink/embula-backend:latest
docker stop embula-backend || true
docker rm embula-backend || true
docker run -d \
--name embula-backend \
-p 8081:8081 \
-e MYSQL_URL=${{ secrets.MYSQL_URL }} \
-e Username=${{ secrets.DB_USERNAME }} \
-e Password=${{ secrets.DB_PASSWORD }} \
-e JWT_SECRET=${{ secrets.JWT_SECRET }} \
-e TOKEN_VALIDITY=${{ secrets.TOKEN_VALIDITY }} \
-e REFRESH_TOKEN_VALIDITY=${{ secrets.REFRESH_TOKEN_VALIDITY }} \
-e STRIPE_SECRET=${{ secrets.STRIPE_SECRET }} \
-e EMAIL_USERNAME=${{ secrets.EMAIL_USERNAME }} \
-e EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }} \
-e ADMIN_EMAIL=${{ secrets.ADMIN_EMAIL }} \
dewmink/embula-backend:latest


- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: maven

- name: Build with Maven
run: mvn clean install
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build & push Docker image
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: true
tags: docker.io/dewmink/embula-backend:latest

- name: Deploy to EC2
uses: appleboy/ssh-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_KEY }}
script: |
docker pull dewmink/embula-backend:latest
docker stop embula-backend || true
docker rm embula-backend || true
docker run -d \
--name embula-backend \
-p 8081:8081 \
-e MYSQL_URL=${{ secrets.MYSQL_URL }} \
-e Username=${{ secrets.DB_USERNAME }} \
-e Password=${{ secrets.DB_PASSWORD }} \
-e JWT_SECRET=${{ secrets.JWT_SECRET }} \
-e TOKEN_VALIDITY=${{ secrets.TOKEN_VALIDITY }} \
-e REFRESH_TOKEN_VALIDITY=${{ secrets.REFRESH_TOKEN_VALIDITY }} \
-e STRIPE_SECRET=${{ secrets.STRIPE_SECRET }} \
-e EMAIL_USERNAME=${{ secrets.EMAIL_USERNAME }} \
-e EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }} \
-e ADMIN_EMAIL=${{ secrets.ADMIN_EMAIL }} \
dewmink/embula-backend:latest
1 change: 1 addition & 0 deletions fix_customer_status.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,14 @@ protected ResponseEntity<Object> handleMethodArgumentNotValid(

@ExceptionHandler(Exception.class)
public ResponseEntity<StandardResponse> handleGlobalException(Exception ex, WebRequest request) {
// Log the actual exception for debugging
System.err.println("=== Global Exception Handler ===");
System.err.println("Exception Type: " + ex.getClass().getName());
System.err.println("Exception Message: " + ex.getMessage());
ex.printStackTrace();

return new ResponseEntity<>(
new StandardResponse(500, "Internal Server Error", "An unexpected error occurred"),
new StandardResponse(500, "Internal Server Error", ex.getMessage()),
HttpStatus.INTERNAL_SERVER_ERROR
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.embula.embula_backend.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/v1/admin")
public class AdminController {

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.embula.embula_backend.dto.response.FoodItemToMenuDTO;
import com.embula.embula_backend.dto.response.ViewFoodItemDTO;
import com.embula.embula_backend.entity.FoodItem;
import com.embula.embula_backend.exception.NotFoundException;
import com.embula.embula_backend.services.FoodItemService;
import com.embula.embula_backend.util.StandardResponse;
import org.apache.coyote.Response;
Expand All @@ -28,11 +29,9 @@ public class FoodItemController {
@Autowired
private FoodItemService foodItemService;
private HandlerMapping resourceHandlerMapping;


ResponseEntity<StandardResponse> responseEntity;

@PostMapping(path="saveItem" , consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<StandardResponse> saveFoodItem (@RequestPart FoodItemDTO foodItemDTO,
@RequestPart MultipartFile imageFile
Expand Down Expand Up @@ -100,4 +99,41 @@ public ResponseEntity<StandardResponse> viewFoodItemDetails (@RequestParam long
return responseEntity;
}

@PutMapping(value = "/{itemId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<StandardResponse> updateFoodItem(
@PathVariable long itemId,
@RequestPart(value = "foodItemUpdateDTO", required = false) FoodItemUpdateDTO foodItemUpdateDTO,
@RequestPart(value = "imageFile", required = false) MultipartFile imageFile
) {
try {
String message = foodItemService.updateFoodItem(itemId, foodItemUpdateDTO, imageFile);
return new ResponseEntity<>(
new StandardResponse(200, "Success", message),
HttpStatus.OK
);
} catch (NotFoundException e) {
return new ResponseEntity<>(
new StandardResponse(404, "Not Found", e.getMessage()),
HttpStatus.NOT_FOUND
);
} catch (Exception e) {
return new ResponseEntity<>(
new StandardResponse(500, "Error", e.getMessage()),
HttpStatus.INTERNAL_SERVER_ERROR
);
}
}

@DeleteMapping("/{itemId}")
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<StandardResponse> deleteFoodItem(@PathVariable long itemId){
String message = foodItemService.deleteFoodItem(itemId);
ResponseEntity<StandardResponse> responseEntity = new ResponseEntity<>(
new StandardResponse(200,"Success", message),
HttpStatus.OK
);
return responseEntity;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.embula.embula_backend.dto.paginated.PaginatedStatusCustomerOrders;
import com.embula.embula_backend.dto.request.RequestOrderSaveDTO;
import com.embula.embula_backend.dto.response.ViewOrderDTO;
import com.embula.embula_backend.entity.enums.OrderStatus;
import com.embula.embula_backend.services.OrderService;
import com.embula.embula_backend.util.StandardResponse;
import org.apache.coyote.Response;
Expand Down Expand Up @@ -38,17 +39,12 @@ public ResponseEntity<StandardResponse> saveOrder (@RequestBody RequestOrderSave
}


@GetMapping(
path="viewAllOrders",
params={"page","size"}
)
@GetMapping(params={"page","size"})
// @Secured({"ROLE_CUSTOMER", "ROLE_ADMIN"})
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<StandardResponse> viewOrder(
@RequestParam(value="page") int page,
@RequestParam(value="size") int size


){
// List<ViewOrderDTO> viewOrderDTO = orderService.viewAllOrders();
PaginatedAllOrders paginatedAllOrders = orderService.viewAllOrders(page,size);
Expand All @@ -61,14 +57,11 @@ public ResponseEntity<StandardResponse> viewOrder(
}


@PutMapping(
path="cancelOrder",
params="orderId"
)
@PutMapping(params={"orderId","orderStatus"})
// @Secured("ROLE_CUSTOMER")
@PreAuthorize("hasRole('CUSTOMER')")
public ResponseEntity<StandardResponse> cancelorder(@RequestParam String orderId){
String message= orderService.cancelOrder(orderId);
public ResponseEntity<StandardResponse> updateOrderStatus(@RequestParam Long orderId, @RequestParam OrderStatus orderStatus){
String message= orderService.updateOrderStatus(orderId, orderStatus);
ResponseEntity<StandardResponse> responseEntity = new ResponseEntity<>(
new StandardResponse(200,"Success", message),
HttpStatus.OK
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@


import com.embula.embula_backend.dto.PaymentDTO;
import com.embula.embula_backend.dto.request.AllPaymentDTO;
import com.embula.embula_backend.services.PaymentService;
import com.embula.embula_backend.util.StandardResponse;
import org.apache.coyote.Response;
Expand All @@ -10,10 +11,9 @@
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@CrossOrigin
Expand All @@ -34,4 +34,14 @@ public ResponseEntity<StandardResponse> savePayments (PaymentDTO paymentDTO) {
return responseEntity;
}

@GetMapping
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<StandardResponse> getAllPayments(){
List<AllPaymentDTO> allPaymentDTO = paymentService.getAllPayments();
ResponseEntity<StandardResponse> responseEntity = new ResponseEntity<>(
new StandardResponse(200,"Success", allPaymentDTO),
HttpStatus.OK
);
return responseEntity;
}
}
Loading