diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fafedc7c45388854e6f0bd8882692bafe94924d2..7c9d24816e2a40c403bc1e6a8ff4114e1e5b4832 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,25 +2,24 @@ variables: APP: 'app' MAVEN_IMAGE: 'maven:3.9.0-amazoncorretto-19' KANIKO_IMAGE: "gcr.io/kaniko-project/executor:debug" - PROJECT_NAME: 'takima-store' + PROJECT_NAME: 'toDoList' include: "/generic-config-template.yml" -workflow: - rules: - - if: $CI_COMMIT_BRANCH - variables: - DEPLOYMENT_ENV: Dev - - if: $CI_COMMIT_TAG - variables: - DEPLOYMENT_ENV: Production +#workflow: +# rules: +# - if: $CI_COMMIT_BRANCH +# variables: +# DEPLOYMENT_ENV: Dev +# - if: $CI_COMMIT_TAG +# variables: +# DEPLOYMENT_ENV: Production stages: - build - test - - package - - deploy +# - package backend:build: image: $MAVEN_IMAGE @@ -51,49 +50,15 @@ backend:test: -backend:package: - extends: .common_package_config - dependencies: - - backend:build - script: - - /kaniko/executor - --context $CI_PROJECT_DIR/ - --dockerfile $CI_PROJECT_DIR/Dockerfile - --destination $CI_REGISTRY_IMAGE/app:$CI_COMMIT_REF_NAME - --destination $CI_REGISTRY_IMAGE/app:latest - --cache=true - -assets:package: - extends: .common_package_config - - script: - - /kaniko/executor - --context $CI_PROJECT_DIR/assets-server/ - --dockerfile $CI_PROJECT_DIR/assets-server/Dockerfile - --destination $CI_REGISTRY_IMAGE/assets-server:$CI_COMMIT_REF_NAME - --destination $CI_REGISTRY_IMAGE/assets-server:latest - --cache=true - -deploy: - stage: deploy - variables: - TAG: '$CI_COMMIT_REF_NAME' - environment: $DEPLOYMENT_ENV - before_script: - - 'which ssh-agent || ( apk update && apk add openssh-client )' - - eval $(ssh-agent -s) - - echo "$SSH_PRIVATE_KEY" | ssh-add - - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - ssh-keyscan $HOST >> ~/.ssh/known_hosts - - chmod 644 ~/.ssh/known_hosts - script: - # Copying compose files over the server (we don't need the whole Git repo) - - scp -P 22 -r docker-compose.yml flyway rocky@$HOST:~/$PROJECT_NAME - - echo \nTAG=$TAG >> $ENV - - scp -P 22 $ENV rocky@$HOST:~/$PROJECT_NAME/.env - # Deployment - - ssh rocky@$HOST "cd $PROJECT_NAME && docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY" - - ssh rocky@$HOST "cd $PROJECT_NAME && docker compose pull && docker compose down -v && docker compose up -d --force-recreate --no-build" - +#backend:package: +# extends: .common_package_config +# dependencies: +# - backend:build +# script: +# - /kaniko/executor +# --context $CI_PROJECT_DIR/ +# --dockerfile $CI_PROJECT_DIR/Dockerfile +# --destination $CI_REGISTRY_IMAGE/app:$CI_COMMIT_REF_NAME +# --destination $CI_REGISTRY_IMAGE/app:latest +# --cache=true diff --git a/docker-compose.yml b/docker-compose.yml index 4de6d88723015ce6d96923f73a7b4098c803faeb..dfae12751896cf3bd9c9c9529bb2cf0c5bd5dd22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,26 +1,14 @@ version: "3.9" services: -# app: -# image: registry.master3.takima.io/gdemonteynard/takima-store/app:${TAG:-latest} -# env_file: -# - .env -# networks: -# - db -# depends_on: -# db: -# condition: service_healthy -# restart: on-failure -# ports: -# - "8080:8080" db: image: postgres:15.2-alpine restart: unless-stopped networks: - db environment: - - POSTGRES_PASSWORD=${DATABASE_PASSWORD:-ilovethierion} - - POSTGRES_USER=${DATABASE_USERNAME:-ilovethierion} - - POSTGRES_DB=${DATABASE_NAME:-entrainement_db} + - POSTGRES_PASSWORD=ilovethierion + - POSTGRES_USER=ilovethierion + - POSTGRES_DB=entrainement_db volumes: - db-data:/var/lib/postgresql/data healthcheck: @@ -34,6 +22,20 @@ services: retries: 3 ports: - "5432:5432" + + flyway: + image: flyway/flyway:9-alpine + command: -connectRetries=60 -baselineVersion="0.0" baseline migrate info + volumes: + - ./flyway/sql:/flyway/sql:ro + environment: + - FLYWAY_URL=${JDBC_URL} + - FLYWAY_USER=${DATABASE_USERNAME} + - FLYWAY_PASSWORD=${DATABASE_PASSWORD} + depends_on: + - db + networks: + - db networks: db: diff --git a/pom.xml b/pom.xml index 49dae4a37672d5042cddc158db3b6f5fa551d7ba..5a22a91f769e9b2666923c5df4f1879f5b5fc9ad 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> @@ -15,9 +15,9 @@ <description>EntrainementTF</description> <properties> <java.version>19</java.version> - <flyway.version>9.16.0</flyway.version> - <testcontainers.version>1.17.6</testcontainers.version> - </properties> + <flyway.version>9.16.0</flyway.version> + <testcontainers.version>1.17.6</testcontainers.version> + </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> @@ -64,25 +64,25 @@ <scope>test</scope> </dependency> - <!-- testcontainers --> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>testcontainers</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>jdbc</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.testcontainers</groupId> - <artifactId>postgresql</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - </dependency> + <!-- testcontainers --> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>testcontainers</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>jdbc</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>postgresql</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/src/main/java/com/takima/entrainement/EntrainementTfApplication.java b/src/main/java/com/takima/entrainement/EntrainementTfApplication.java index 86e5fc17d3591ad9ec69482028c929e747c74ca3..9b809e991d03dade3a7db241d8b3af18ea0a7e6b 100644 --- a/src/main/java/com/takima/entrainement/EntrainementTfApplication.java +++ b/src/main/java/com/takima/entrainement/EntrainementTfApplication.java @@ -1,8 +1,6 @@ package com.takima.entrainement; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -11,10 +9,10 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; public class EntrainementTfApplication { - public static void main(String[] args) { - SpringApplication.run(EntrainementTfApplication.class, args); - log.info("Application started !!!!!!"); + public static void main(String[] args) { + SpringApplication.run(EntrainementTfApplication.class, args); + log.info("Application started !!!!!!"); - } + } } diff --git a/src/main/java/com/takima/entrainement/toDo/controllers/ToDoApi.java b/src/main/java/com/takima/entrainement/toDo/controllers/ToDoApi.java index a358df5e57a66764bbe98f4c30ff3fdfc5c7ae80..68985d0fc218715a2786be5ff809253165ec1b00 100644 --- a/src/main/java/com/takima/entrainement/toDo/controllers/ToDoApi.java +++ b/src/main/java/com/takima/entrainement/toDo/controllers/ToDoApi.java @@ -70,12 +70,11 @@ public class ToDoApi { @PutMapping("/{todoId}") public ResponseEntity<EntityModel<ToDo>> update(@RequestBody ToDo todo, @PathVariable long todoId) { - -// ToDo todoToUpdate = todoService.findById(todoId) -// .orElseThrow(() -> new NoSuchElementException(String.format("no todo with id %d", todoId))); - + if (todoService.findById(todoId).isEmpty()) { + throw new NoSuchElementException(String.format("no todo with id %d", todoId)); + } todo.setId(todoId); - ToDo todoToUpdate=todoService.update(todo); + ToDo todoToUpdate = todoService.update(todo); return new ResponseEntity<>(assembler.toModel(todoToUpdate), HttpStatus.OK); } @@ -93,7 +92,8 @@ class ToDoResourceAssembler implements RepresentationModelAssembler<ToDo, Entity public EntityModel<ToDo> toModel(ToDo todo) { return EntityModel.of(todo, - linkTo(methodOn(ToDoApi.class).getOne(todo.getId())).withSelfRel()); + linkTo(methodOn(ToDoApi.class).getOne(todo.getId())).withSelfRel(), + linkTo(methodOn(ToDoApi.class).getAll("", Sort.unsorted(), 20, 0)).withRel("todos")); } } diff --git a/src/main/java/com/takima/entrainement/toDo/services/ToDoService.java b/src/main/java/com/takima/entrainement/toDo/services/ToDoService.java index c6acb2e24fcadbf5f4440038abdb221eac914cac..1925e4c2ea4cd7a3cae2341ab5f0aadfadc66da0 100644 --- a/src/main/java/com/takima/entrainement/toDo/services/ToDoService.java +++ b/src/main/java/com/takima/entrainement/toDo/services/ToDoService.java @@ -1,7 +1,6 @@ package com.takima.entrainement.toDo.services; - import com.takima.entrainement.core.pagination.PageSearch; import com.takima.entrainement.toDo.models.ToDo; import org.springframework.data.domain.Page; diff --git a/src/main/java/com/takima/entrainement/toDo/services/impl/ToDoServiceImpl.java b/src/main/java/com/takima/entrainement/toDo/services/impl/ToDoServiceImpl.java index c739e38fa6f6be95e4705553c94758cdbdf35f85..30162039bcaddb4bdc71d56d94120a717bb4d746 100644 --- a/src/main/java/com/takima/entrainement/toDo/services/impl/ToDoServiceImpl.java +++ b/src/main/java/com/takima/entrainement/toDo/services/impl/ToDoServiceImpl.java @@ -8,7 +8,6 @@ import com.takima.entrainement.toDo.services.ToDoService; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.Optional; diff --git a/src/main/resources/db/migration/V1_0__list_and_todo_tables.sql b/src/main/resources/db/migration/V1_0__list_and_todo_tables.sql index 1e0984b63704acfa33ab850483ef2cacd774429d..2025162768d656d6fb9d70cff45e24eac21bc06a 100644 --- a/src/main/resources/db/migration/V1_0__list_and_todo_tables.sql +++ b/src/main/resources/db/migration/V1_0__list_and_todo_tables.sql @@ -1,9 +1,9 @@ CREATE TABLE public.to_do ( id BIGSERIAL PRIMARY KEY, - name VARCHAR NOT NULL, + name VARCHAR NOT NULL, description VARCHAR, - state VARCHAR NOT NULL CHECK (state IN ('todo', 'done')) + state VARCHAR NOT NULL CHECK (state IN ('todo', 'done')) ); diff --git a/src/test/java/com/takima/entrainement/EntrainementTfApplicationTests.java b/src/test/java/com/takima/entrainement/EntrainementTfApplicationTests.java index 8fb424efca2f4035928e007eba6afbda6b13bed1..30bf58e96316ca123e526b64d5541f71a9750002 100644 --- a/src/test/java/com/takima/entrainement/EntrainementTfApplicationTests.java +++ b/src/test/java/com/takima/entrainement/EntrainementTfApplicationTests.java @@ -6,8 +6,8 @@ import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class EntrainementTfApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/com/takima/entrainement/toDo/controllers/ToDoApiIT.java b/src/test/java/com/takima/entrainement/toDo/controllers/ToDoApiIT.java index f14a517f2f445f714c3684108f8db9bb6ea2d828..cce17a96eef185d6bea3bd6f5a16f23042b5104c 100644 --- a/src/test/java/com/takima/entrainement/toDo/controllers/ToDoApiIT.java +++ b/src/test/java/com/takima/entrainement/toDo/controllers/ToDoApiIT.java @@ -124,9 +124,9 @@ public class ToDoApiIT { String jsonToDO = new ObjectMapper().writeValueAsString(todo); - mvc.perform(put(URL+"/" + TODO_ID) - .content(jsonToDO) - .contentType(MediaType.APPLICATION_JSON_VALUE)); + mvc.perform(put(URL + "/" + TODO_ID) + .content(jsonToDO) + .contentType(MediaType.APPLICATION_JSON_VALUE)); assertEquals(toDoService.findById(TODO_ID).get().getName(), newName); }