Skip to content

Commit

Permalink
Merge branch 'main' into asvs-new-feats
Browse files Browse the repository at this point in the history
  • Loading branch information
MiguelFerreira18 authored May 16, 2024
2 parents 3d8204d + 7680241 commit 94caac6
Show file tree
Hide file tree
Showing 45 changed files with 1,861 additions and 38 deletions.
4 changes: 3 additions & 1 deletion .env
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ DESOFS_APP_SECRET=defaultappsecret
DESOFS_DB_USER=cozinha
DESOFS_DB_PASS=123456789
DESOFS_DB_HOST=desofs_mysql_db
DESOFS_DB_DEV_DB_NAME=data_desofs
DESOFS_DB_DEV_DB_NAME=data_desofs
DESOFS_DB_ROOT_PASS=rootpwd
MYSQL_ROOT_PASSWORD=rootpwd
119 changes: 115 additions & 4 deletions .github/workflows/deployment.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
name: CI/CD Pipeline

on:
push:
branches:
- pipeline
pull_request:
branches:
- main
Expand Down Expand Up @@ -150,4 +147,118 @@ jobs:
uses: actions/upload-artifact@master
with:
name: Depcheck report
path: ${{github.workspace}}/reports
path: ${{github.workspace}}/reports
push-to-dockerhub:
runs-on: ubuntu-latest

steps:

- name: Checkout Code
uses: actions/checkout@v4

- name: Set up node.js 20.11
uses: actions/setup-node@v4
with:
node-version: 20

- name: Install Dependencies
run: npm install
working-directory: ./desofs_svelte_front_end

- name: Run build
run: npm run build
working-directory: ./desofs_svelte_front_end

- name: Set up Java 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
cache: 'maven'
cache-dependency-path: 'desofsApi/pom.xml'

- name: Maven Package
run: mvn package -DskipTests
working-directory: ./desofsApi

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

- name: Build docker compose file
run: docker-compose build


- name: Print docker images
run: docker images

# tag the frontend image
- name: Tag Frontend image
run: docker tag desofs2024_m1b_2_desof-web:latest ${{ secrets.DOCKER_USERNAME }}/desofs2024_m1b_2-desof-web:latest

- name: Tag Backend image
run: docker tag desofs2024_m1b_2_desof-api:latest ${{ secrets.DOCKER_USERNAME }}/desofs2024_m1b_2-desof-api:latest

- name: Build and push frontend
run: docker push ${{ secrets.DOCKER_USERNAME }}/desofs2024_m1b_2-desof-web:latest

- name: Build and push backend
run: docker push ${{ secrets.DOCKER_USERNAME }}/desofs2024_m1b_2-desof-api:latest

needs: [buildFrontEnd, buildBackEnd]

docker-scout-api:
runs-on: ubuntu-latest

steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Docker Scout
id: docker-scout
uses: docker/scout-action@v1
with:
command: cves,recommendations,quickview
image: ${{ secrets.DOCKER_USERNAME }}/desofs2024_m1b_2-desof-api:latest
to-latest: true
ignore-unchanged: true
write-comment: true
only-fixed: true
github-token: ${{ secrets.GITHUB_TOKEN }}
needs:
- push-to-dockerhub

docker-scout-web:
runs-on: ubuntu-latest

steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Docker Scout
id: docker-scout
uses: docker/scout-action@v1
with:
command: cves,recommendations,quickview
image: ${{ secrets.DOCKER_USERNAME }}/desofs2024_m1b_2-desof-web:latest
to-latest: true
ignore-unchanged: true
write-comment: true
only-fixed: true
github-token: ${{ secrets.GITHUB_TOKEN }}
needs:
- push-to-dockerhub







32 changes: 32 additions & 0 deletions .github/workflows/release-please.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
on:
push:
branches:
- main

permissions:
contents: write
pull-requests: write

name: release-please

jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: google-github-actions/release-please-action@v4
with:
# You will want to configure a GitHub Actions secret with a
# Personal Access Token if you want GitHub Actions CI
# checks to run on Release Please PRs.
# The folowing assumes that you have created a personal access token
# (PAT) and configured it as a GitHub action secret named
# `MY_RELEASE_PLEASE_TOKEN` (this secret name is not important).
#token: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }}

# if you dont need to trigger new workflow runs on a release please PR
# its fine to use GITHUB_TOKEN as folows
token: ${{ secrets.GITHUB_TOKEN }}

# this is a built-in strategy in release-please, see "Action Inputs"
# for more options
release-type: simple
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Changelog

## 1.0.0 (2024-05-14)


### ⚠ BREAKING CHANGES

* fix pipeline

### Features

* base authentication definition ([7de00d0](https://github.com/MiguelFerreira18/desofs2024_m1b_2/commit/7de00d0c295a58fad13d704c929a25357a26ccc4))


### Bug Fixes

* fix pipeline ([1b3c5aa](https://github.com/MiguelFerreira18/desofs2024_m1b_2/commit/1b3c5aabe1dffac4411194d242e664bc0eb92c5b))
2 changes: 1 addition & 1 deletion Deliverables/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -853,4 +853,4 @@ ameaças comuns. (https://www.zaproxy.org/)
A ferramenta escolhida para realizar a análise de componentes de software é o OWASP Dependency-Check. Esta ferramenta
open-source permite identificar vulnerabilidades em bibliotecas de terceiros usadas no projeto, ajudando a garantir que
não existam componentes com falhas de segurança conhecidas. O Dependency-Check supporta todas as linguagens que temos no
nosso projeto (Java e javascript/Typescript). (https://owasp.org/www-project-dependency-check/)
nosso projeto (Java e javascript/Typescript). (https://owasp.org/www-project-dependency-check/).
2 changes: 1 addition & 1 deletion desofsApi/Docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ services:
- 8090:80
environment:
PMA_HOST: mysql
MYSQL_ROOT_PASSWORD: rootpwd
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}


networks:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
package isep.ipp.pt.api.desofs.Config;

import isep.ipp.pt.api.desofs.DesofsApplication;
import isep.ipp.pt.api.desofs.Repository.Implementation.PacoteServiceImpl;
import isep.ipp.pt.api.desofs.Repository.Implementation.ReviewServiceImpl;
import isep.ipp.pt.api.desofs.Repository.Implementation.TipoPacoteServiceImpl;
import isep.ipp.pt.api.desofs.Repository.Implementation.UserRepoImpl;
import isep.ipp.pt.api.desofs.Repository.Implementation.EncomendaServiceImpl;
import isep.ipp.pt.api.desofs.Repository.Interface.EncomendaServiceRepo;
import isep.ipp.pt.api.desofs.Repository.Interface.PacoteServiceRepo;
import isep.ipp.pt.api.desofs.Repository.Interface.ReviewServiceRepo;
import isep.ipp.pt.api.desofs.Repository.Interface.TipoPacoteServiceRepo;
import isep.ipp.pt.api.desofs.Repository.Interface.UserServiceRepo;
import isep.ipp.pt.api.desofs.Repository.Implementation.*;
import isep.ipp.pt.api.desofs.Repository.Interface.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
Expand Down Expand Up @@ -59,6 +51,14 @@ public EncomendaServiceRepo mysqlEncomenda(){
public ReviewServiceRepo mysqlReview(){
return new ReviewServiceImpl();
}
@Bean
public TipoReceitaServiceRepo mysqlTipoReceita(){
return new TipoReceitaServiceImpl();
}
@Bean
public ReceitaServiceRepo mysqlReceita(){
return new ReceitaServiceImpl();
}

//Datasource
@Bean
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package isep.ipp.pt.api.desofs.Controllers;

import isep.ipp.pt.api.desofs.Dto.ReceitaDTO.ControllerLayer.ReceitaDTOPatchRequest;
import isep.ipp.pt.api.desofs.Dto.ReceitaDTO.ControllerLayer.ReceitaDTOResponse;
import isep.ipp.pt.api.desofs.Dto.ReceitaDTO.ControllerLayer.ReceitaDTOSaveRequest;
import isep.ipp.pt.api.desofs.Dto.ReceitaDTO.ServiceLayer.ReceitaDTOServicePatchRequest;
import isep.ipp.pt.api.desofs.Dto.ReceitaDTO.ServiceLayer.ReceitaDTOServiceRequest;
import isep.ipp.pt.api.desofs.Dto.ReceitaDTO.ServiceLayer.ReceitaDTOServiceResponse;
import isep.ipp.pt.api.desofs.Mapper.ReceitaMapper.ReceitaMapper;
import isep.ipp.pt.api.desofs.Service.ReceitaService.ReceitaService;
import isep.ipp.pt.api.desofs.Utils.PersonalValidation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
@RequestMapping("/receita")
public class ReceitaController {
@Autowired
private ReceitaService receitaService;
@Autowired
private ReceitaMapper receitaMapper;
@Autowired
private PersonalValidation validation;


@PostMapping("/save")
public ResponseEntity<ReceitaDTOResponse> saveReceita(@RequestBody ReceitaDTOSaveRequest receita) {
if (!validation.validate(receita)) {
return ResponseEntity.badRequest().build();
}

try {
ReceitaDTOServiceRequest receitaRequestService = receitaMapper.toReceitaDtoServiceRequestFromReceitaDtoSaveRequest(receita);
if (!validation.validate(receitaRequestService)) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
ReceitaDTOServiceResponse receitaServiceResponse = receitaService.save(receitaRequestService);
return ResponseEntity.ok( receitaMapper.fromReceitaToDto(receitaServiceResponse));

} catch (Exception e) {
System.out.println(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}

@GetMapping("/get/{receitaId}")
public ResponseEntity<ReceitaDTOResponse> getReceita(@PathVariable Long receitaId) {
if (receitaId < 0) return ResponseEntity.badRequest().build();
try {

ReceitaDTOServiceResponse receitaServiceResponse = receitaService.findbyId(receitaId);
return ResponseEntity.ok( receitaMapper.fromReceitaToDto(receitaServiceResponse));

} catch (Exception e) {
System.out.println(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}

@PatchMapping("/update")
public ResponseEntity<ReceitaDTOResponse> updateReceita(@RequestBody ReceitaDTOPatchRequest receita) {
if (!validation.validate(receita)) {
return ResponseEntity.badRequest().build();
}
try {
ReceitaDTOServicePatchRequest receitaRequestService = receitaMapper.toReceitaDTOServicePAtchRequestFromReceitaDTOPatchRequest(receita);
if (!validation.validate(receitaRequestService)) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
ReceitaDTOServiceResponse receitaServiceResponse = receitaService.update(receitaRequestService);
return ResponseEntity.ok( receitaMapper.fromReceitaToDto(receitaServiceResponse));
} catch (Exception e) {
System.out.println(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}

@DeleteMapping("/delete/{receitaId}")
public ResponseEntity deleteReceita(@PathVariable Long receitaId) {
if (receitaId < 0) return ResponseEntity.badRequest().build();
receitaService.deleteById(receitaId);
return ResponseEntity.ok().build();
}

@GetMapping("/all")
public ResponseEntity<List<ReceitaDTOResponse>> getAllReceitas() {
try {
List<ReceitaDTOResponse> receitas = receitaMapper.fromReceitaDtoServiceResponseListToReceitaDToResponseList(receitaService.findAll());
return ResponseEntity.ok(receitas);
} catch (Exception e) {
System.out.println(e.getMessage());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}
}
Loading

0 comments on commit 94caac6

Please sign in to comment.