From a8f82efc156dac846a79828f0ed283ee7557db70 Mon Sep 17 00:00:00 2001
From: Florian <fmeuleman@takima.fr>
Date: Mon, 26 Feb 2024 13:32:47 +0100
Subject: [PATCH] feat/Add solution

---
 .../solution}/back-end/.gitignore             |   0
 .../solution}/back-end/config.js              |   0
 .../solution}/back-end/package-lock.json      |   0
 .../solution}/back-end/package.json           |   0
 .../solution}/back-end/server.js              |   0
 .../src/io/takima/agencymanagement/Main.java  | 166 ------------------
 .../agencymanagement/dao/TravelDao.java       |  59 -------
 .../takima/agencymanagement/dao/UserDao.java  |  54 ------
 .../mapper/TravelDtoMapper.java               |  20 ---
 .../mapper/UserDtoMapper.java                 |  12 --
 .../agencymanagement/model/Airport.java       |  22 ---
 .../agencymanagement/model/Discount.java      |   5 -
 .../agencymanagement/model/HotelOffer.java    |  36 ----
 .../takima/agencymanagement/model/Offer.java  |  27 ---
 .../model/PercentDiscount.java                |  15 --
 .../model/RestaurentOffer.java                |  34 ----
 .../takima/agencymanagement/model/Travel.java | 158 -----------------
 .../takima/agencymanagement/model/User.java   |  72 --------
 .../agencymanagement/model/ValueDiscount.java |  15 --
 .../responsedto/TravelResponseDto.java        |  15 --
 .../responsedto/UserResponseDto.java          |   7 -
 .../service/TravelService.java                | 158 -----------------
 .../agencymanagement/service/UserService.java |  42 -----
 .../utils/AirportManager.java                 |  21 ---
 resources/solution/day-2/.gitkeep             |   0
 resources/solution/day-2/day2.zip             | Bin 33921 -> 0 bytes
 .../solution}/front-end/.babelrc              |   0
 .../solution}/front-end/browserslist          |   0
 .../solution}/front-end/package-lock.json     |   0
 .../solution}/front-end/package.json          |   0
 .../components/footer/footer.component.html   |   0
 .../app/components/footer/footer.component.js |   0
 .../components/footer/footer.component.scss   |   0
 .../components/game/card/card.component.html  |   0
 .../components/game/card/card.component.js    |   0
 .../components/game/card/card.component.scss  |   0
 .../app/components/game/game.component.html   |   0
 .../src/app/components/game/game.component.js |   0
 .../app/components/game/game.component.scss   |   0
 .../components/navbar/navbar.component.html   |   0
 .../app/components/navbar/navbar.component.js |   0
 .../components/navbar/navbar.component.scss   |   0
 .../app/components/score/score.component.html |   0
 .../app/components/score/score.component.js   |   0
 .../app/components/score/score.component.scss |   0
 .../components/welcome/welcome.component.html |   0
 .../components/welcome/welcome.component.js   |   0
 .../components/welcome/welcome.component.scss |   0
 .../front-end/src/app/scripts/component.js    |   0
 .../front-end/src/app/scripts/router.js       |   0
 .../front-end/src/app/scripts/utils.js        |   0
 .../front-end/src/app/styles/_colors.scss     |   0
 .../front-end/src/app/styles/style.scss       |   0
 .../front-end/src/assets/cards/back.png       | Bin
 .../front-end/src/assets/cards/card-0.png     | Bin
 .../front-end/src/assets/cards/card-1.png     | Bin
 .../front-end/src/assets/cards/card-2.png     | Bin
 .../front-end/src/assets/cards/card-3.png     | Bin
 .../front-end/src/assets/cards/card-4.png     | Bin
 .../front-end/src/assets/cards/card-5.png     | Bin
 .../front-end/src/assets/cards/card-6.png     | Bin
 .../front-end/src/assets/cards/card-7.png     | Bin
 .../front-end/src/assets/cards/card-8.png     | Bin
 .../front-end/src/assets/cards/card-9.png     | Bin
 .../front-end/src/assets/happy_homer.jpg      | Bin
 .../src/assets/logo_take_my_money.png         | Bin
 .../solution}/front-end/src/favicon.ico       | Bin
 .../solution}/front-end/src/index.html        |   0
 .../solution}/front-end/src/main.js           |   0
 .../solution}/front-end/webpack.config.js     |   0
 70 files changed, 938 deletions(-)
 rename {old/done => resources/solution}/back-end/.gitignore (100%)
 rename {old/done => resources/solution}/back-end/config.js (100%)
 rename {old/done => resources/solution}/back-end/package-lock.json (100%)
 rename {old/done => resources/solution}/back-end/package.json (100%)
 rename {old/done => resources/solution}/back-end/server.js (100%)
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/Main.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/dao/TravelDao.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/dao/UserDao.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/mapper/TravelDtoMapper.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/mapper/UserDtoMapper.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/Airport.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/Discount.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/HotelOffer.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/Offer.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/PercentDiscount.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/RestaurentOffer.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/Travel.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/User.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/model/ValueDiscount.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/presentation/responsedto/TravelResponseDto.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/presentation/responsedto/UserResponseDto.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/service/TravelService.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/service/UserService.java
 delete mode 100644 resources/solution/day-1/src/io/takima/agencymanagement/utils/AirportManager.java
 delete mode 100644 resources/solution/day-2/.gitkeep
 delete mode 100644 resources/solution/day-2/day2.zip
 rename {old/done => resources/solution}/front-end/.babelrc (100%)
 rename {old/done => resources/solution}/front-end/browserslist (100%)
 rename {old/done => resources/solution}/front-end/package-lock.json (100%)
 rename {old/done => resources/solution}/front-end/package.json (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/footer/footer.component.html (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/footer/footer.component.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/footer/footer.component.scss (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/game/card/card.component.html (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/game/card/card.component.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/game/card/card.component.scss (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/game/game.component.html (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/game/game.component.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/game/game.component.scss (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/navbar/navbar.component.html (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/navbar/navbar.component.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/navbar/navbar.component.scss (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/score/score.component.html (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/score/score.component.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/score/score.component.scss (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/welcome/welcome.component.html (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/welcome/welcome.component.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/components/welcome/welcome.component.scss (100%)
 rename {old/done => resources/solution}/front-end/src/app/scripts/component.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/scripts/router.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/scripts/utils.js (100%)
 rename {old/done => resources/solution}/front-end/src/app/styles/_colors.scss (100%)
 rename {old/done => resources/solution}/front-end/src/app/styles/style.scss (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/back.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-0.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-1.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-2.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-3.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-4.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-5.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-6.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-7.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-8.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/cards/card-9.png (100%)
 rename {old/done => resources/solution}/front-end/src/assets/happy_homer.jpg (100%)
 rename {old/done => resources/solution}/front-end/src/assets/logo_take_my_money.png (100%)
 rename {old/done => resources/solution}/front-end/src/favicon.ico (100%)
 rename {old/done => resources/solution}/front-end/src/index.html (100%)
 rename {old/done => resources/solution}/front-end/src/main.js (100%)
 rename {old/done => resources/solution}/front-end/webpack.config.js (100%)

diff --git a/old/done/back-end/.gitignore b/resources/solution/back-end/.gitignore
similarity index 100%
rename from old/done/back-end/.gitignore
rename to resources/solution/back-end/.gitignore
diff --git a/old/done/back-end/config.js b/resources/solution/back-end/config.js
similarity index 100%
rename from old/done/back-end/config.js
rename to resources/solution/back-end/config.js
diff --git a/old/done/back-end/package-lock.json b/resources/solution/back-end/package-lock.json
similarity index 100%
rename from old/done/back-end/package-lock.json
rename to resources/solution/back-end/package-lock.json
diff --git a/old/done/back-end/package.json b/resources/solution/back-end/package.json
similarity index 100%
rename from old/done/back-end/package.json
rename to resources/solution/back-end/package.json
diff --git a/old/done/back-end/server.js b/resources/solution/back-end/server.js
similarity index 100%
rename from old/done/back-end/server.js
rename to resources/solution/back-end/server.js
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/Main.java b/resources/solution/day-1/src/io/takima/agencymanagement/Main.java
deleted file mode 100644
index cfdacf8..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/Main.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package io.takima.agencymanagement;
-
-import io.takima.agencymanagement.model.Airport;
-import io.takima.agencymanagement.model.Discount;
-import io.takima.agencymanagement.model.RestaurentOffer;
-import io.takima.agencymanagement.model.PercentDiscount;
-import io.takima.agencymanagement.model.Travel;
-import io.takima.agencymanagement.model.User;
-import io.takima.agencymanagement.service.TravelService;
-import io.takima.agencymanagement.utils.AirportManager;
-
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Queue;
-import java.util.Set;
-
-public class Main {
-
-    public static void main(String[] args) {
-
-        TravelService travelService = new TravelService();
-        //Update Main
-        System.out.printf("Agency App \n");
-
-        User user1 = new User(0, "John", "Doe", "john.doe@gmail.com");
-        User user2 = new User(1, "John", "Doe", "john.doe@gmail.com");
-        User user3 = new User(2, "John", "Doe", "john.doe@gmail.com");
-        User user4 = new User(3, "John", "Doe", "john.doe@gmail.com");
-        User user5 = new User(4, "John", "Doe", "john.doe@gmail.com");
-        User user6 = new User(5, "Mat", "Doe", "mat.doe@gmail.com");
-
-        //Add 50% discount
-        List<Discount> discounts = new ArrayList<>();
-        discounts.add(new PercentDiscount(50));
-
-        //Add participant set
-        Set<User> users = Set.of(user1, user2, user3, user4, user5);
-        Set<User> participants = new HashSet<>(users);
-
-        // Bug without overriding equals and hashCode
-        User sameUser1 = new User(0, "Same", "User", "sameuser@gmail.com");
-        User sameUser2 = new User(0, "Same", "User", "sameuser@gmail.com");
-
-        Set<User> sameUsers = new HashSet<>();
-        try {
-            sameUsers = Set.of(sameUser1, sameUser2);
-        } catch (IllegalArgumentException e) {
-            System.out.println(e.getMessage());
-        }
-        Travel travelWithBug = new Travel(0L, null, Instant.now(), Instant.now().plusSeconds(1),
-                null, null, null, 0, 0, null,
-                sameUsers, null);
-
-        System.out.println(travelWithBug.getParticipants());
-
-        //Add waitList
-        Queue<User> waitList = new ArrayDeque<>();
-        waitList.add(user6);
-
-        // Log RestaurentOffer details
-        RestaurentOffer offer = new RestaurentOffer(
-                0L,
-                4,
-                "description",
-                2,
-                Instant.now().plusSeconds(10),
-                2,
-                Instant.now()
-        );
-        System.out.println(offer.getDetails());
-
-        //Create firstTravel
-        Travel firstTravel = new Travel(0L, "to Japan", Instant.now(), Instant.now().plusSeconds(86400), Airport.PARIS_CHARLES_DE_GAULLE, Airport.TOKYO_HANEDA, "Tokyo", 5, 2000, discounts, participants, waitList);
-
-        //Apply discount
-        applyDiscounts(firstTravel);
-
-        //Log user information
-        System.out.println(user1);
-        //Log travel information
-        System.out.println(firstTravel);
-
-        //Subscribe user using TravelService and get an exception
-        try {
-            travelService.subscribe(user1, firstTravel);
-        } catch (Exception e) {
-            System.out.println(e.getMessage());
-        }
-
-        System.out.println("Utilisateurs en file d'attente : " + firstTravel.getWaitList().element());
-
-        //Unsubscribe a participant then check the first one in the waitList is subscribed
-        travelService.unsubscribe(user1, firstTravel);
-
-        for (User participant : firstTravel.getParticipants()) {
-            System.out.println(participant);
-        }
-
-        //Log CDG airport timeZone
-        System.out.println(AirportManager.getTimeZone(Airport.PARIS_CHARLES_DE_GAULLE));
-
-        //Use computeTravelDuration
-        String dateStr = "26/04/2023, 12:10";
-        String dateStr2 = "27/04/2023, 06:36";
-
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy, HH:mm");
-        LocalDateTime localDateTime1 = LocalDateTime.parse(dateStr, formatter);
-        LocalDateTime localDateTime2 = LocalDateTime.parse(dateStr2, formatter);
-
-
-        Instant instant1 = localDateTime1.atZone(ZoneId.of(AirportManager.getTimeZone(Airport.PARIS_CHARLES_DE_GAULLE))).toInstant();
-        Instant instant2 = localDateTime2.atZone(ZoneId.of(AirportManager.getTimeZone(Airport.TOKYO_HANEDA))).toInstant();
-
-        firstTravel.setDepartureDate(instant1);
-        firstTravel.setArrivalDate(instant2);
-
-        System.out.println(travelService.computeTravelDuration(firstTravel));
-
-        //Use adjustDates
-        travelService.adjustDates(Duration.ofHours(5), firstTravel);
-        //Log it in the appropriate zoneTime
-        System.out.println(firstTravel.getDepartureDate().atZone(ZoneId.of(AirportManager.getTimeZone(firstTravel.getDepartureAirport()))));
-
-        //Find available ones
-        List<Travel> availableTravels = travelService.findAvailableForDestination("Paris");
-
-    }
-
-    //Before services
-    public static void applyDiscounts(Travel travel) {
-        if (travel.getDiscounts().isEmpty()) {
-            System.out.println("Aucune réduction n'est applicable sur ce voyage !");
-        } else {
-            for (Discount discount : travel.getDiscounts()) {
-                double discountedPrice = discount.apply(travel.getPrice());
-                System.out.println("Prix après réduction : " + discountedPrice);
-            }
-        }
-    }
-
-    public static boolean subscribe(User user, Travel travel) {
-
-        if (travel.getParticipants().size() < travel.getCapacity()) {
-            travel.getParticipants().add(user);
-            return true;
-        }
-        travel.getWaitList().add(user);
-        return false;
-    }
-
-    public void unsubscribe(User user, Travel travel) {
-
-        travel.getParticipants().remove(user);
-
-        if (!travel.getWaitList().isEmpty()) {
-            travel.getParticipants().add(travel.getWaitList().poll());
-        }
-    }
-}
\ No newline at end of file
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/dao/TravelDao.java b/resources/solution/day-1/src/io/takima/agencymanagement/dao/TravelDao.java
deleted file mode 100644
index 5937d37..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/dao/TravelDao.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package io.takima.agencymanagement.dao;
-
-import io.takima.agencymanagement.model.Airport;
-import io.takima.agencymanagement.model.Discount;
-import io.takima.agencymanagement.model.Travel;
-import io.takima.agencymanagement.model.User;
-
-import java.time.Instant;
-import java.util.*;
-
-public class TravelDao {
-
-    private final Map<Long, Travel> travels = Collections.synchronizedMap(new HashMap<>());
-
-    public TravelDao() {
-        addTravelsToMap();
-    }
-
-    public Travel persist(Travel travel) {
-        travels.put(travel.getId(), travel);
-        return travel;
-    }
-
-    public Travel update(Travel travel) {
-        if (travels.containsKey(travel.getId())) {
-            travels.put(travel.getId(), travel);
-            return travel;
-        }
-        return null;
-    }
-
-    public void delete(Long travelId) {
-        travels.remove(travelId);
-    }
-
-    public Travel findById(Long travelId) {
-        return travels.get(travelId);
-    }
-
-    public List<Travel> findAll() {
-        return new ArrayList<>(travels.values());
-    }
-
-    public void addTravelsToMap() {
-        List<Discount> emptyDiscountsList = new ArrayList<>();
-        Queue<User> emptyWaitList = new LinkedList<>();
-        Set<User> emptyParticipantsList = new HashSet<>();
-        Set<User> participantsList = new HashSet<>();
-        participantsList.add(new User(10, "Jean", "Michel", "j.m@gamil.com"));
-
-        Travel travel1 = new Travel(1, "Trip to Paris", Instant.now(), Instant.now().plusSeconds(3600), Airport.NEW_YORK_NEWARK, Airport.PARIS_ORLY, "Paris",50, 500.0, emptyDiscountsList, emptyParticipantsList, emptyWaitList);
-        Travel travel2 = new Travel(2, "Holiday in Tokyo", Instant.now(), Instant.now().plusSeconds(7200), Airport.PARIS_CHARLES_DE_GAULLE, Airport.TOKYO_HANEDA,"Tokyo", 40, 800.0, emptyDiscountsList, emptyParticipantsList, emptyWaitList);
-        Travel travel3 = new Travel(3, "Exploring Rome", Instant.now(), Instant.now().plusSeconds(10800), Airport.TOKYO_NARITA, Airport.NEW_YORK_JFK, "New York", 30, 600.0, emptyDiscountsList, participantsList, emptyWaitList);
-
-        travels.put(travel1.getId(), travel1);
-        travels.put(travel2.getId(), travel2);
-        travels.put(travel3.getId(), travel3);
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/dao/UserDao.java b/resources/solution/day-1/src/io/takima/agencymanagement/dao/UserDao.java
deleted file mode 100644
index 689edb6..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/dao/UserDao.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package io.takima.agencymanagement.dao;
-
-import io.takima.agencymanagement.model.User;
-
-import java.util.*;
-
-public class UserDao {
-
-    public UserDao() {
-        //add data
-        addUsersToMap();
-    }
-
-    private final Map<Long, User> users = Collections.synchronizedMap(new HashMap<>());
-
-    public User persist(User user) {
-        users.put(user.getId(), user);
-        return user;
-    }
-
-    public User update(User user) {
-        if (users.containsKey(user.getId())) {
-            users.put(user.getId(), user);
-            return user;
-        }
-        return null;
-    }
-
-    public void delete(Long userId) {
-        users.remove(userId);
-    }
-
-    public User findById(Long userId) {
-        return users.get(userId);
-    }
-
-    public List<User> findAll() {
-        return new ArrayList<>(users.values());
-    }
-
-    public void addUsersToMap() {
-        User user1 = new User(1, "John", "Doe", "john@example.com");
-        User user2 = new User(2, "Jane", "Smith", "jane@example.com");
-        User user3 = new User(3, "Alice", "Johnson", "alice@example.com");
-        User user4 = new User(4, "Bob", "Williams", "bob@example.com");
-        User user5 = new User(5, "Eva", "Brown", "eva@example.com");
-
-        users.put(user1.getId(), user1);
-        users.put(user2.getId(), user2);
-        users.put(user3.getId(), user3);
-        users.put(user4.getId(), user4);
-        users.put(user5.getId(), user5);
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/mapper/TravelDtoMapper.java b/resources/solution/day-1/src/io/takima/agencymanagement/mapper/TravelDtoMapper.java
deleted file mode 100644
index 4ea0ed9..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/mapper/TravelDtoMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package io.takima.agencymanagement.mapper;
-
-import io.takima.agencymanagement.model.Travel;
-import io.takima.agencymanagement.presentation.responsedto.TravelResponseDto;
-import io.takima.agencymanagement.utils.AirportManager;
-
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
-
-public class TravelDtoMapper {
-
-    public static TravelResponseDto fromTravel(Travel travel) {
-        ZonedDateTime zonedDepartureDate = travel.getDepartureDate()
-                .atZone(ZoneId.of(AirportManager.timeZone.get(travel.getDepartureAirport())));
-        ZonedDateTime zonedArrivalDate = travel.getDepartureDate()
-                .atZone(ZoneId.of(AirportManager.timeZone.get(travel.getArrivalAirport())));
-
-        return new TravelResponseDto(travel.getName(), travel.getDestination(), travel.getDepartureAirport(), travel.getArrivalAirport(), zonedDepartureDate, zonedArrivalDate, travel.getPrice());
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/mapper/UserDtoMapper.java b/resources/solution/day-1/src/io/takima/agencymanagement/mapper/UserDtoMapper.java
deleted file mode 100644
index d3351a9..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/mapper/UserDtoMapper.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package io.takima.agencymanagement.mapper;
-
-import io.takima.agencymanagement.model.User;
-import io.takima.agencymanagement.presentation.responsedto.UserResponseDto;
-
-public class UserDtoMapper {
-
-    public static UserResponseDto fromUser(User user) {
-
-        return new UserResponseDto(user.getFirstName(), user.getLastName(), user.getContact());
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/Airport.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/Airport.java
deleted file mode 100644
index e2eabb8..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/Airport.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package io.takima.agencymanagement.model;
-
-public enum Airport {
-
-    PARIS_CHARLES_DE_GAULLE("CDG"),
-    PARIS_ORLY("ORY"),
-    NEW_YORK_JFK("JFK"),
-    NEW_YORK_NEWARK("EWR"),
-    NEW_YORK_LAGUARDIA("LGA"),
-    TOKYO_NARITA("NRT"),
-    TOKYO_HANEDA("HND");
-
-    private final String acronym;
-
-    Airport(String acronym){
-        this.acronym = acronym;
-    }
-
-    public String getAcronym() {
-        return acronym;
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/Discount.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/Discount.java
deleted file mode 100644
index 4ab3d08..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/Discount.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package io.takima.agencymanagement.model;
-
-public interface Discount {
-    public double apply(double price);
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/HotelOffer.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/HotelOffer.java
deleted file mode 100644
index cea6ddb..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/HotelOffer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package io.takima.agencymanagement.model;
-
-import java.time.Instant;
-
-public class HotelOffer extends Offer {
-    private boolean isBreakfastIncluded;
-    private int nbOfAvailableDays;
-
-    public HotelOffer(
-            long id,
-            double score,
-            String description,
-            int nbOfReviews,
-            boolean isBreakfastIncluded,
-            int nbOfAvailableDays
-    ) {
-        super(id, score, description, nbOfReviews);
-        this.isBreakfastIncluded = isBreakfastIncluded;
-        this.nbOfAvailableDays = nbOfAvailableDays;
-    }
-
-    @Override
-    public boolean isValid() {
-        return super.isValid() &&
-                nbOfAvailableDays > 0;
-    }
-
-    public String getDetails() {
-        return "Le nombre de jours valaibles " +
-                nbOfAvailableDays +
-                ". Petit déjeuner est " +
-                (isBreakfastIncluded ? "" : "non") +
-                "inclu";
-    }
-
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/Offer.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/Offer.java
deleted file mode 100644
index 3b30b57..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/Offer.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package io.takima.agencymanagement.model;
-
-import java.time.Instant;
-
-public abstract class Offer {
-    protected long id;
-    protected double score;
-    protected String description;
-    protected int nbOfReviews;
-    protected abstract String getDetails();
-
-    protected Offer(long id, double score, String description, int nbOfReviews) {
-        this.id = id;
-        this.score = score;
-        this.description = description;
-        this.nbOfReviews = nbOfReviews;
-    }
-
-    protected boolean isValid() {
-        return score >= 0 &&
-                score <= 5 &&
-                description != null &&
-                !description.isBlank() &&
-                nbOfReviews >= 0;
-    }
-
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/PercentDiscount.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/PercentDiscount.java
deleted file mode 100644
index 04876ad..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/PercentDiscount.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package io.takima.agencymanagement.model;
-
-public class PercentDiscount implements Discount{
-
-    private double percent;
-
-    public PercentDiscount(int percent) {
-        this.percent = percent;
-    }
-
-    @Override
-    public double apply(double price) {
-        return price * (1 - (percent / 100));
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/RestaurentOffer.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/RestaurentOffer.java
deleted file mode 100644
index f203bae..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/RestaurentOffer.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package io.takima.agencymanagement.model;
-
-import java.time.Instant;
-
-public class RestaurentOffer extends Offer {
-    private int nbOfStars;
-    private int nbOfPerson;
-
-    public RestaurentOffer(
-            long id,
-            double score,
-            String description,
-            int nbOfReviews,
-            Instant expiration,
-            int nbOfStars,
-            int nbOfPerson
-    ) {
-        super(id, score, description, nbOfReviews);
-        this.nbOfStars = nbOfStars;
-        this.nbOfPerson = nbOfPerson;
-    }
-
-    @Override
-    public boolean isValid() {
-        return super.isValid() &&
-                nbOfPerson > 0 &&
-                nbOfStars >0;
-    }
-
-    public String getDetails() {
-        return "La reservation est dans un restaurant de %d étoiles, pour %s personnes".formatted(nbOfStars, nbOfPerson);
-    }
-
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/Travel.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/Travel.java
deleted file mode 100644
index af92355..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/Travel.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package io.takima.agencymanagement.model;
-
-import java.time.Instant;
-import java.util.List;
-import java.util.Queue;
-import java.util.Set;
-
-public class Travel {
-
-    private long id;
-    private String name;
-    private Instant departureDate;
-    private Instant arrivalDate;
-    private Airport departureAirport;
-    private Airport arrivalAirport;
-    private String destination;
-    private int capacity;
-    private  double price;
-    private List<Discount> discounts;
-
-    private Set<User> participants;
-
-    private Queue<User> waitList;
-
-    public Travel(long id, String name, Instant departureDate, Instant arrivalDate, Airport departureAirport, Airport arrivalAirport, String destination, int capacity, double price, List<Discount> discounts, Set<User> participants, Queue<User> waitList) {
-        if(departureDate.isAfter(arrivalDate)){
-            throw new IllegalArgumentException("Date de départ et après la date d'arrivée");
-        }
-
-        this.id = id;
-        this.name = name;
-        this.departureDate =departureDate;
-        this.arrivalDate = arrivalDate;
-        this.departureAirport = departureAirport;
-        this.arrivalAirport = arrivalAirport;
-        this.destination = destination;
-        this.capacity = capacity;
-        this.price = price;
-        this.discounts = discounts;
-        this.participants = participants;
-        this.waitList = waitList;
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public void setId(long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Instant getDepartureDate() {
-        return departureDate;
-    }
-
-    public void setDepartureDate(Instant departureDate) {
-        this.departureDate = departureDate;
-    }
-
-    public Instant getArrivalDate() {
-        return arrivalDate;
-    }
-
-    public void setArrivalDate(Instant arrivalDate) {
-        this.arrivalDate = arrivalDate;
-    }
-
-    public Airport getDepartureAirport() {
-        return departureAirport;
-    }
-
-    public void setDepartureAirport(Airport departureAirport) {
-        this.departureAirport = departureAirport;
-    }
-
-    public Airport getArrivalAirport() {
-        return arrivalAirport;
-    }
-
-    public void setArrivalAirport(Airport arrivalAirport) {
-        this.arrivalAirport = arrivalAirport;
-    }
-
-    public String getDestination() {
-        return destination;
-    }
-
-    public void setDestination(String destination) {
-        this.destination = destination;
-    }
-
-    public int getCapacity() {
-        return capacity;
-    }
-
-    public void setCapacity(int capacity) {
-        this.capacity = capacity;
-    }
-
-    public double getPrice() {
-        return price;
-    }
-
-    public void setPrice(double price) {
-        this.price = price;
-    }
-
-    public List<Discount> getDiscounts() {
-        return discounts;
-    }
-
-    public void setDiscounts(List<Discount> discounts) {
-        this.discounts = discounts;
-    }
-
-    public Set<User> getParticipants() {
-        return participants;
-    }
-
-    public void setParticipants(Set<User> participants) {
-        this.participants = participants;
-    }
-
-    public Queue<User> getWaitList() {
-        return waitList;
-    }
-
-    public void setWaitList(Queue<User> waitList) {
-        this.waitList = waitList;
-    }
-
-    @Override
-    public String toString() {
-
-        StringBuilder stringBuilder = new StringBuilder();
-        stringBuilder.append("Le voyage '")
-                .append(name)
-                .append("' à destination de ")
-                .append(destination)
-                .append(" a ")
-                .append(participants.size())
-                .append(" voyageurs inscrits qui sont respectivement:\n");
-
-        for (User participant : participants) {
-            stringBuilder.append("- ").append(participant.getFirstName()).append(participant.getLastName()).append("\n");
-        }
-
-        return stringBuilder.toString();
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/User.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/User.java
deleted file mode 100644
index b8393a8..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/User.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package io.takima.agencymanagement.model;
-
-import java.util.Objects;
-
-public class User {
-
-    private long id;
-    private String firstName;
-    private String lastName;
-    private String contact;
-
-    public User(long id, String firstName, String lastName, String contact) {
-        this.id = id;
-        this.firstName = firstName;
-        this.lastName = lastName;
-        this.contact = contact;
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public void setId(long id) {
-        this.id = id;
-    }
-
-    public String getFirstName() {
-        return firstName;
-    }
-
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    public String getLastName() {
-        return lastName;
-    }
-
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-    public String getContact() {
-        return contact;
-    }
-
-    public void setContact(String contact) {
-        this.contact = contact;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        User user = (User) o;
-        return id == user.id;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(id);
-    }
-
-    @Override
-    public String toString() {
-        return "Utilisateur " +
-                firstName + " " +
-                lastName + " " +
-                ", contact '" + contact + "\n"
-                ;
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/model/ValueDiscount.java b/resources/solution/day-1/src/io/takima/agencymanagement/model/ValueDiscount.java
deleted file mode 100644
index 61ea2fc..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/model/ValueDiscount.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package io.takima.agencymanagement.model;
-
-public class ValueDiscount implements Discount{
-
-    private double value;
-
-    public ValueDiscount(double value) {
-        this.value = value;
-    }
-
-    @Override
-    public double apply(double price) {
-        return price - value;
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/presentation/responsedto/TravelResponseDto.java b/resources/solution/day-1/src/io/takima/agencymanagement/presentation/responsedto/TravelResponseDto.java
deleted file mode 100644
index 38a2048..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/presentation/responsedto/TravelResponseDto.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package io.takima.agencymanagement.presentation.responsedto;
-
-import io.takima.agencymanagement.model.Airport;
-
-import java.time.ZonedDateTime;
-
-public record TravelResponseDto(
-        String name,
-        String destination,
-        Airport departureAirport,
-        Airport destinationAirport,
-        ZonedDateTime departureDate,
-        ZonedDateTime endDate,
-        double price) {
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/presentation/responsedto/UserResponseDto.java b/resources/solution/day-1/src/io/takima/agencymanagement/presentation/responsedto/UserResponseDto.java
deleted file mode 100644
index 5a41162..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/presentation/responsedto/UserResponseDto.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package io.takima.agencymanagement.presentation.responsedto;
-
-public record UserResponseDto(
-        String firstName,
-        String lastName,
-        String contact) {
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/service/TravelService.java b/resources/solution/day-1/src/io/takima/agencymanagement/service/TravelService.java
deleted file mode 100644
index 37969c2..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/service/TravelService.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package io.takima.agencymanagement.service;
-
-import io.takima.agencymanagement.dao.TravelDao;
-import io.takima.agencymanagement.mapper.TravelDtoMapper;
-import io.takima.agencymanagement.model.Travel;
-import io.takima.agencymanagement.model.User;
-import io.takima.agencymanagement.presentation.responsedto.TravelResponseDto;
-import io.takima.agencymanagement.model.Discount;
-
-import java.time.Duration;
-import java.time.Instant;
-import java.util.Comparator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import static io.takima.agencymanagement.mapper.TravelDtoMapper.fromTravel;
-
-public class TravelService {
-
-    private TravelDao travelDao;
-
-    public TravelService() {
-        travelDao = new TravelDao();
-    }
-
-    public TravelResponseDto create(Travel travel) {
-        travelDao.persist(travel);
-        return fromTravel(travel);
-    }
-
-    public TravelResponseDto update(Travel travel) {
-        travelDao.persist(travel);
-        return fromTravel(travel);
-    }
-
-    public TravelResponseDto delete(Travel travel) {
-        travelDao.persist(travel);
-        return fromTravel(travel);
-    }
-
-    public TravelResponseDto findById(Long id) {
-        Travel travel = travelDao.findById(id);
-        return fromTravel(travel);
-    }
-
-    public List<TravelResponseDto> findAll() {
-        return travelDao.findAll().stream()
-                .map(TravelDtoMapper::fromTravel)
-                .toList();
-
-    }
-    public void applyDiscounts(Travel travel) {
-        if (travel.getDiscounts().isEmpty()) {
-            System.out.println("Aucune réduction n'est applicable sur ce voyage !");
-        } else {
-            double discountedPrice = travel.getPrice();
-            for (Discount discount : travel.getDiscounts()) {
-                discountedPrice = discount.apply(discountedPrice);
-            }
-            System.out.println("Prix après les réductions : " + discountedPrice);
-        }
-    }
-
-    public boolean subscribe(User user, Travel travel) throws Exception {
-
-        if (travel.getParticipants().contains(user) || travel.getWaitList().contains(user)) {
-            //User already subscribed or in waitList
-            throw new Exception("L'utilisateur est déjà inscrit ou en file d'attente pour ce voyage.");
-        }
-
-        if (travel.getParticipants().size() < travel.getCapacity()) {
-            travel.getParticipants().add(user);
-            return true;
-        }
-        travel.getWaitList().add(user);
-        return false;
-    }
-
-    public void unsubscribe(User user, Travel travel) {
-
-        travel.getParticipants().remove(user);
-
-        if (!travel.getWaitList().isEmpty()) {
-            travel.getParticipants().add(travel.getWaitList().poll());
-        }
-    }
-
-    public Duration computeTravelDuration(Travel travel) {
-        return Duration.between(travel.getDepartureDate(), travel.getArrivalDate());
-    }
-
-    public void adjustDates(Duration delay, Travel travel) {
-        travel.setDepartureDate(travel.getDepartureDate().plus(delay));
-        travel.setArrivalDate(travel.getArrivalDate().plus(delay));
-    }
-
-    public Travel findClosestToCurrentDate(List<Travel> travels) {
-        Instant now = Instant.now();
-
-        return travels.stream()
-                .min(Comparator.comparing(travel -> Duration.between(now, travel.getDepartureDate()).abs()))
-                .orElseThrow(NoSuchElementException::new);
-    }
-
-    public List<Travel> findAvailableForDestination(String destination) {
-        List<Travel> travels = travelDao.findAll();
-
-        return travels.stream()
-                .filter(travel -> travel.getCapacity() > travel.getParticipants().size() && travel.getDestination().equals(destination))
-                .toList();
-    }
-
-    public List<Travel> findInPriceRange(double minPrice, double maxPrice) {
-        List<Travel> travels = travelDao.findAll();
-
-        return travels.stream()
-                .filter(travel -> travel.getPrice() >= minPrice && travel.getPrice() <= maxPrice)
-                .toList();
-    }
-
-    public List<Travel> findNSortedByPriceAsc(int n) {
-        List<Travel> travels = travelDao.findAll();
-
-        return travels.stream()
-                .sorted(Comparator.comparing(Travel::getPrice))
-                .limit(n)
-                .toList();
-    }
-
-    public List<Travel> findWithPromotions() {
-        List<Travel> travels = travelDao.findAll();
-
-        return travels.stream()
-                .filter(travel -> !travel.getDiscounts().isEmpty())
-                .toList();
-    }
-
-    public List<Travel> findByUser(String firstName, String lastName) {
-        List<Travel> travels = travelDao.findAll();
-
-        return travels.stream()
-                .filter(travel ->
-                        travel.getParticipants().stream()
-                                .anyMatch(user ->
-                                        user.getFirstName().equals(firstName) &&
-                                                user.getLastName().equals(lastName)))
-                .toList();
-    }
-
-    public double getAveragePrice() {
-        List<Travel> travels = travelDao.findAll();
-
-        return travels.stream()
-                .mapToDouble(Travel::getPrice)
-                .average()
-                .orElse(0.0);
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/service/UserService.java b/resources/solution/day-1/src/io/takima/agencymanagement/service/UserService.java
deleted file mode 100644
index 08903f6..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/service/UserService.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package io.takima.agencymanagement.service;
-
-import io.takima.agencymanagement.dao.UserDao;
-import io.takima.agencymanagement.mapper.UserDtoMapper;
-import io.takima.agencymanagement.model.User;
-import io.takima.agencymanagement.presentation.responsedto.UserResponseDto;
-
-import java.util.List;
-
-import static io.takima.agencymanagement.mapper.UserDtoMapper.fromUser;
-
-public class UserService {
-
-    UserDao userDao = new UserDao();
-
-    public UserResponseDto create(User user) {
-        userDao.persist(user);
-        return fromUser(user);
-    }
-
-    public UserResponseDto update(User  user) {
-        userDao.persist(user);
-        return fromUser(user);
-    }
-
-    public UserResponseDto delete(User  user) {
-        userDao.persist(user);
-        return fromUser(user);
-    }
-
-    public UserResponseDto findById(Long id) {
-        User  user = userDao.findById(id);
-        return fromUser(user);
-    }
-
-    public List<UserResponseDto> findAll() {
-        return userDao.findAll().stream()
-                .map(UserDtoMapper::fromUser)
-                .toList();
-
-    }
-}
diff --git a/resources/solution/day-1/src/io/takima/agencymanagement/utils/AirportManager.java b/resources/solution/day-1/src/io/takima/agencymanagement/utils/AirportManager.java
deleted file mode 100644
index d48a17b..0000000
--- a/resources/solution/day-1/src/io/takima/agencymanagement/utils/AirportManager.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package io.takima.agencymanagement.utils;
-
-import io.takima.agencymanagement.model.Airport;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class AirportManager {
-
-    private static final Map<Airport, String> timeZone = new HashMap<>();
-
-    static {
-        timeZone.put(Airport.PARIS_CHARLES_DE_GAULLE, "Europe/Paris");
-        timeZone.put(Airport.PARIS_ORLY, "Europe/Paris");
-        timeZone.put(Airport.NEW_YORK_JFK, "America/New_York");
-        timeZone.put(Airport.NEW_YORK_NEWARK, "America/New_York");
-        timeZone.put(Airport.NEW_YORK_LAGUARDIA, "America/New_York");
-        timeZone.put(Airport.TOKYO_NARITA, "Asia/Tokyo");
-        timeZone.put(Airport.TOKYO_HANEDA, "Asia/Tokyo");
-    }
-}
diff --git a/resources/solution/day-2/.gitkeep b/resources/solution/day-2/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/resources/solution/day-2/day2.zip b/resources/solution/day-2/day2.zip
deleted file mode 100644
index a7f5535d8e48728a50bdf7d56035e61f38d2449c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 33921
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

diff --git a/old/done/front-end/.babelrc b/resources/solution/front-end/.babelrc
similarity index 100%
rename from old/done/front-end/.babelrc
rename to resources/solution/front-end/.babelrc
diff --git a/old/done/front-end/browserslist b/resources/solution/front-end/browserslist
similarity index 100%
rename from old/done/front-end/browserslist
rename to resources/solution/front-end/browserslist
diff --git a/old/done/front-end/package-lock.json b/resources/solution/front-end/package-lock.json
similarity index 100%
rename from old/done/front-end/package-lock.json
rename to resources/solution/front-end/package-lock.json
diff --git a/old/done/front-end/package.json b/resources/solution/front-end/package.json
similarity index 100%
rename from old/done/front-end/package.json
rename to resources/solution/front-end/package.json
diff --git a/old/done/front-end/src/app/components/footer/footer.component.html b/resources/solution/front-end/src/app/components/footer/footer.component.html
similarity index 100%
rename from old/done/front-end/src/app/components/footer/footer.component.html
rename to resources/solution/front-end/src/app/components/footer/footer.component.html
diff --git a/old/done/front-end/src/app/components/footer/footer.component.js b/resources/solution/front-end/src/app/components/footer/footer.component.js
similarity index 100%
rename from old/done/front-end/src/app/components/footer/footer.component.js
rename to resources/solution/front-end/src/app/components/footer/footer.component.js
diff --git a/old/done/front-end/src/app/components/footer/footer.component.scss b/resources/solution/front-end/src/app/components/footer/footer.component.scss
similarity index 100%
rename from old/done/front-end/src/app/components/footer/footer.component.scss
rename to resources/solution/front-end/src/app/components/footer/footer.component.scss
diff --git a/old/done/front-end/src/app/components/game/card/card.component.html b/resources/solution/front-end/src/app/components/game/card/card.component.html
similarity index 100%
rename from old/done/front-end/src/app/components/game/card/card.component.html
rename to resources/solution/front-end/src/app/components/game/card/card.component.html
diff --git a/old/done/front-end/src/app/components/game/card/card.component.js b/resources/solution/front-end/src/app/components/game/card/card.component.js
similarity index 100%
rename from old/done/front-end/src/app/components/game/card/card.component.js
rename to resources/solution/front-end/src/app/components/game/card/card.component.js
diff --git a/old/done/front-end/src/app/components/game/card/card.component.scss b/resources/solution/front-end/src/app/components/game/card/card.component.scss
similarity index 100%
rename from old/done/front-end/src/app/components/game/card/card.component.scss
rename to resources/solution/front-end/src/app/components/game/card/card.component.scss
diff --git a/old/done/front-end/src/app/components/game/game.component.html b/resources/solution/front-end/src/app/components/game/game.component.html
similarity index 100%
rename from old/done/front-end/src/app/components/game/game.component.html
rename to resources/solution/front-end/src/app/components/game/game.component.html
diff --git a/old/done/front-end/src/app/components/game/game.component.js b/resources/solution/front-end/src/app/components/game/game.component.js
similarity index 100%
rename from old/done/front-end/src/app/components/game/game.component.js
rename to resources/solution/front-end/src/app/components/game/game.component.js
diff --git a/old/done/front-end/src/app/components/game/game.component.scss b/resources/solution/front-end/src/app/components/game/game.component.scss
similarity index 100%
rename from old/done/front-end/src/app/components/game/game.component.scss
rename to resources/solution/front-end/src/app/components/game/game.component.scss
diff --git a/old/done/front-end/src/app/components/navbar/navbar.component.html b/resources/solution/front-end/src/app/components/navbar/navbar.component.html
similarity index 100%
rename from old/done/front-end/src/app/components/navbar/navbar.component.html
rename to resources/solution/front-end/src/app/components/navbar/navbar.component.html
diff --git a/old/done/front-end/src/app/components/navbar/navbar.component.js b/resources/solution/front-end/src/app/components/navbar/navbar.component.js
similarity index 100%
rename from old/done/front-end/src/app/components/navbar/navbar.component.js
rename to resources/solution/front-end/src/app/components/navbar/navbar.component.js
diff --git a/old/done/front-end/src/app/components/navbar/navbar.component.scss b/resources/solution/front-end/src/app/components/navbar/navbar.component.scss
similarity index 100%
rename from old/done/front-end/src/app/components/navbar/navbar.component.scss
rename to resources/solution/front-end/src/app/components/navbar/navbar.component.scss
diff --git a/old/done/front-end/src/app/components/score/score.component.html b/resources/solution/front-end/src/app/components/score/score.component.html
similarity index 100%
rename from old/done/front-end/src/app/components/score/score.component.html
rename to resources/solution/front-end/src/app/components/score/score.component.html
diff --git a/old/done/front-end/src/app/components/score/score.component.js b/resources/solution/front-end/src/app/components/score/score.component.js
similarity index 100%
rename from old/done/front-end/src/app/components/score/score.component.js
rename to resources/solution/front-end/src/app/components/score/score.component.js
diff --git a/old/done/front-end/src/app/components/score/score.component.scss b/resources/solution/front-end/src/app/components/score/score.component.scss
similarity index 100%
rename from old/done/front-end/src/app/components/score/score.component.scss
rename to resources/solution/front-end/src/app/components/score/score.component.scss
diff --git a/old/done/front-end/src/app/components/welcome/welcome.component.html b/resources/solution/front-end/src/app/components/welcome/welcome.component.html
similarity index 100%
rename from old/done/front-end/src/app/components/welcome/welcome.component.html
rename to resources/solution/front-end/src/app/components/welcome/welcome.component.html
diff --git a/old/done/front-end/src/app/components/welcome/welcome.component.js b/resources/solution/front-end/src/app/components/welcome/welcome.component.js
similarity index 100%
rename from old/done/front-end/src/app/components/welcome/welcome.component.js
rename to resources/solution/front-end/src/app/components/welcome/welcome.component.js
diff --git a/old/done/front-end/src/app/components/welcome/welcome.component.scss b/resources/solution/front-end/src/app/components/welcome/welcome.component.scss
similarity index 100%
rename from old/done/front-end/src/app/components/welcome/welcome.component.scss
rename to resources/solution/front-end/src/app/components/welcome/welcome.component.scss
diff --git a/old/done/front-end/src/app/scripts/component.js b/resources/solution/front-end/src/app/scripts/component.js
similarity index 100%
rename from old/done/front-end/src/app/scripts/component.js
rename to resources/solution/front-end/src/app/scripts/component.js
diff --git a/old/done/front-end/src/app/scripts/router.js b/resources/solution/front-end/src/app/scripts/router.js
similarity index 100%
rename from old/done/front-end/src/app/scripts/router.js
rename to resources/solution/front-end/src/app/scripts/router.js
diff --git a/old/done/front-end/src/app/scripts/utils.js b/resources/solution/front-end/src/app/scripts/utils.js
similarity index 100%
rename from old/done/front-end/src/app/scripts/utils.js
rename to resources/solution/front-end/src/app/scripts/utils.js
diff --git a/old/done/front-end/src/app/styles/_colors.scss b/resources/solution/front-end/src/app/styles/_colors.scss
similarity index 100%
rename from old/done/front-end/src/app/styles/_colors.scss
rename to resources/solution/front-end/src/app/styles/_colors.scss
diff --git a/old/done/front-end/src/app/styles/style.scss b/resources/solution/front-end/src/app/styles/style.scss
similarity index 100%
rename from old/done/front-end/src/app/styles/style.scss
rename to resources/solution/front-end/src/app/styles/style.scss
diff --git a/old/done/front-end/src/assets/cards/back.png b/resources/solution/front-end/src/assets/cards/back.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/back.png
rename to resources/solution/front-end/src/assets/cards/back.png
diff --git a/old/done/front-end/src/assets/cards/card-0.png b/resources/solution/front-end/src/assets/cards/card-0.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-0.png
rename to resources/solution/front-end/src/assets/cards/card-0.png
diff --git a/old/done/front-end/src/assets/cards/card-1.png b/resources/solution/front-end/src/assets/cards/card-1.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-1.png
rename to resources/solution/front-end/src/assets/cards/card-1.png
diff --git a/old/done/front-end/src/assets/cards/card-2.png b/resources/solution/front-end/src/assets/cards/card-2.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-2.png
rename to resources/solution/front-end/src/assets/cards/card-2.png
diff --git a/old/done/front-end/src/assets/cards/card-3.png b/resources/solution/front-end/src/assets/cards/card-3.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-3.png
rename to resources/solution/front-end/src/assets/cards/card-3.png
diff --git a/old/done/front-end/src/assets/cards/card-4.png b/resources/solution/front-end/src/assets/cards/card-4.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-4.png
rename to resources/solution/front-end/src/assets/cards/card-4.png
diff --git a/old/done/front-end/src/assets/cards/card-5.png b/resources/solution/front-end/src/assets/cards/card-5.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-5.png
rename to resources/solution/front-end/src/assets/cards/card-5.png
diff --git a/old/done/front-end/src/assets/cards/card-6.png b/resources/solution/front-end/src/assets/cards/card-6.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-6.png
rename to resources/solution/front-end/src/assets/cards/card-6.png
diff --git a/old/done/front-end/src/assets/cards/card-7.png b/resources/solution/front-end/src/assets/cards/card-7.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-7.png
rename to resources/solution/front-end/src/assets/cards/card-7.png
diff --git a/old/done/front-end/src/assets/cards/card-8.png b/resources/solution/front-end/src/assets/cards/card-8.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-8.png
rename to resources/solution/front-end/src/assets/cards/card-8.png
diff --git a/old/done/front-end/src/assets/cards/card-9.png b/resources/solution/front-end/src/assets/cards/card-9.png
similarity index 100%
rename from old/done/front-end/src/assets/cards/card-9.png
rename to resources/solution/front-end/src/assets/cards/card-9.png
diff --git a/old/done/front-end/src/assets/happy_homer.jpg b/resources/solution/front-end/src/assets/happy_homer.jpg
similarity index 100%
rename from old/done/front-end/src/assets/happy_homer.jpg
rename to resources/solution/front-end/src/assets/happy_homer.jpg
diff --git a/old/done/front-end/src/assets/logo_take_my_money.png b/resources/solution/front-end/src/assets/logo_take_my_money.png
similarity index 100%
rename from old/done/front-end/src/assets/logo_take_my_money.png
rename to resources/solution/front-end/src/assets/logo_take_my_money.png
diff --git a/old/done/front-end/src/favicon.ico b/resources/solution/front-end/src/favicon.ico
similarity index 100%
rename from old/done/front-end/src/favicon.ico
rename to resources/solution/front-end/src/favicon.ico
diff --git a/old/done/front-end/src/index.html b/resources/solution/front-end/src/index.html
similarity index 100%
rename from old/done/front-end/src/index.html
rename to resources/solution/front-end/src/index.html
diff --git a/old/done/front-end/src/main.js b/resources/solution/front-end/src/main.js
similarity index 100%
rename from old/done/front-end/src/main.js
rename to resources/solution/front-end/src/main.js
diff --git a/old/done/front-end/webpack.config.js b/resources/solution/front-end/webpack.config.js
similarity index 100%
rename from old/done/front-end/webpack.config.js
rename to resources/solution/front-end/webpack.config.js
-- 
GitLab