Compare View
Commits (2)
Showing
151 changed files
Show diff stats
| @@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<module type="JAVA_MODULE" version="4"> | ||
| 3 | + <component name="NewModuleRootManager" inherit-compiler-output="true"> | ||
| 4 | + <exclude-output /> | ||
| 5 | + <content url="file://$MODULE_DIR$" /> | ||
| 6 | + <orderEntry type="inheritedJdk" /> | ||
| 7 | + <orderEntry type="sourceFolder" forTests="false" /> | ||
| 8 | + </component> | ||
| 9 | +</module> | ||
| 0 | \ No newline at end of file | 10 | \ No newline at end of file |
| @@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="ProjectModuleManager"> | ||
| 4 | + <modules> | ||
| 5 | + <module fileurl="file://$PROJECT_DIR$/.idea/2020-Herik-SRH.iml" filepath="$PROJECT_DIR$/.idea/2020-Herik-SRH.iml" /> | ||
| 6 | + </modules> | ||
| 7 | + </component> | ||
| 8 | +</project> | ||
| 0 | \ No newline at end of file | 9 | \ No newline at end of file |
.idea/sonarlint/issuestore/5/d/5d3445d1560f9fb50fd22131b2387e4661ecc6d7
0 → 100644
.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d
0 → 100644
.idea/sonarlint/issuestore/9/6/962c419380565e1b39f0c2c642d055bb68106743
0 → 100644
.idea/sonarlint/issuestore/a/c/acd061af923379b136810cb92f99558057249ef9
0 → 100644
.idea/sonarlint/issuestore/b/d/bde5d5ddddf6982d30196f10e83c423802e01b75
0 → 100644
No preview for this file type
| @@ -0,0 +1,42 @@ | @@ -0,0 +1,42 @@ | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="ChangeListManager"> | ||
| 4 | + <list default="true" id="d16a14de-0ce4-449c-88ef-95e346e97466" name="Default Changelist" comment="" /> | ||
| 5 | + <option name="SHOW_DIALOG" value="false" /> | ||
| 6 | + <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||
| 7 | + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | ||
| 8 | + <option name="LAST_RESOLUTION" value="IGNORE" /> | ||
| 9 | + </component> | ||
| 10 | + <component name="Git.Settings"> | ||
| 11 | + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> | ||
| 12 | + </component> | ||
| 13 | + <component name="ProjectId" id="1eEDyolyBaYceGht1XHEwSuoSEW" /> | ||
| 14 | + <component name="ProjectViewState"> | ||
| 15 | + <option name="hideEmptyMiddlePackages" value="true" /> | ||
| 16 | + <option name="showLibraryContents" value="true" /> | ||
| 17 | + </component> | ||
| 18 | + <component name="PropertiesComponent"> | ||
| 19 | + <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" /> | ||
| 20 | + <property name="RunOnceActivity.ShowReadmeOnStart" value="true" /> | ||
| 21 | + <property name="last_opened_file_path" value="$PROJECT_DIR$/../srh-backend" /> | ||
| 22 | + </component> | ||
| 23 | + <component name="SvnConfiguration"> | ||
| 24 | + <configuration /> | ||
| 25 | + </component> | ||
| 26 | + <component name="TaskManager"> | ||
| 27 | + <task active="true" id="Default" summary="Default task"> | ||
| 28 | + <changelist id="d16a14de-0ce4-449c-88ef-95e346e97466" name="Default Changelist" comment="" /> | ||
| 29 | + <created>1593878115840</created> | ||
| 30 | + <option name="number" value="Default" /> | ||
| 31 | + <option name="presentableId" value="Default" /> | ||
| 32 | + <updated>1593878115840</updated> | ||
| 33 | + </task> | ||
| 34 | + <servers /> | ||
| 35 | + </component> | ||
| 36 | + <component name="WindowStateProjectService"> | ||
| 37 | + <state x="466" y="144" width="424" height="480" key="FileChooserDialogImpl" timestamp="1593954397371"> | ||
| 38 | + <screen x="0" y="30" width="1366" height="738" /> | ||
| 39 | + </state> | ||
| 40 | + <state x="466" y="144" width="424" height="480" key="FileChooserDialogImpl/0.30.1366.738@0.30.1366.738" timestamp="1593954397371" /> | ||
| 41 | + </component> | ||
| 42 | +</project> | ||
| 0 | \ No newline at end of file | 43 | \ No newline at end of file |
codigos/backend/pom.xml
| @@ -36,6 +36,10 @@ | @@ -36,6 +36,10 @@ | ||
| 36 | <groupId>org.springframework.boot</groupId> | 36 | <groupId>org.springframework.boot</groupId> |
| 37 | <artifactId>spring-boot-starter-security</artifactId> | 37 | <artifactId>spring-boot-starter-security</artifactId> |
| 38 | </dependency> | 38 | </dependency> |
| 39 | + <dependency> | ||
| 40 | + <groupId>org.springframework.boot</groupId> | ||
| 41 | + <artifactId>spring-boot-starter-mail</artifactId> | ||
| 42 | + </dependency> | ||
| 39 | <dependency> | 43 | <dependency> |
| 40 | <groupId>de.codecentric</groupId> | 44 | <groupId>de.codecentric</groupId> |
| 41 | <artifactId>spring-boot-admin-starter-client</artifactId> | 45 | <artifactId>spring-boot-admin-starter-client</artifactId> |
codigos/backend/src/main/java/com/srh/api/algorithms/AlgorithmCalc.java
0 → 100644
| @@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
| 1 | +package com.srh.api.algorithms; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 4 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 5 | + | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 8 | +public interface AlgorithmCalc { | ||
| 9 | + public List<RecommendationsByUser> calc(RecommendationForm recommendationInfo); | ||
| 10 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/AlgorithmStrategy.java
0 → 100644
| @@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
| 1 | +package com.srh.api.algorithms; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.strategies.*; | ||
| 4 | +import com.srh.api.error.exception.InvalidAlgorithmRecommendationException; | ||
| 5 | +import lombok.SneakyThrows; | ||
| 6 | + | ||
| 7 | +public class AlgorithmStrategy { | ||
| 8 | + @SneakyThrows | ||
| 9 | + public static AlgorithmCalc findInstance(Integer algorithmId) { | ||
| 10 | + String idValue = String.valueOf(algorithmId); | ||
| 11 | + | ||
| 12 | + switch (idValue) { | ||
| 13 | + case "1": | ||
| 14 | + return new Collaborative(); | ||
| 15 | + case "2": | ||
| 16 | + return new BasedContent(); | ||
| 17 | + case "3": | ||
| 18 | + return new WeightedHybrid(); | ||
| 19 | + case "4": | ||
| 20 | + return new WeightedHybridWithThreads(); | ||
| 21 | + case "5": | ||
| 22 | + return new MixedHybrid(); | ||
| 23 | + case "6": | ||
| 24 | + return new MixedHybridWithThreads(); | ||
| 25 | + default: | ||
| 26 | + throw new InvalidAlgorithmRecommendationException("Algoritmo inválido"); | ||
| 27 | + } | ||
| 28 | + } | ||
| 29 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/strategies/BasedContent.java
0 → 100644
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
| 1 | +package com.srh.api.algorithms.strategies; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.AlgorithmCalc; | ||
| 4 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 5 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 6 | +import com.srh.api.model.Evaluator; | ||
| 7 | + | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +public class BasedContent implements AlgorithmCalc { | ||
| 11 | + @Override | ||
| 12 | + public List<RecommendationsByUser> calc(RecommendationForm recommendationForm) { | ||
| 13 | + return null; | ||
| 14 | + } | ||
| 15 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/strategies/Collaborative.java
0 → 100644
| @@ -0,0 +1,111 @@ | @@ -0,0 +1,111 @@ | ||
| 1 | +package com.srh.api.algorithms.strategies; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.AlgorithmCalc; | ||
| 4 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 5 | +import com.srh.api.builder.RecommendationBuilder; | ||
| 6 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 7 | +import com.srh.api.model.*; | ||
| 8 | +import com.srh.api.repository.EvaluatorRepository; | ||
| 9 | +import com.srh.api.repository.ItemRepository; | ||
| 10 | +import com.srh.api.repository.ProjectRepository; | ||
| 11 | +import com.srh.api.repository.RecommendationRepository; | ||
| 12 | +import com.srh.api.service.AlgorithmService; | ||
| 13 | +import com.srh.api.service.EvaluatorService; | ||
| 14 | +import com.srh.api.service.ProjectService; | ||
| 15 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 16 | +import org.springframework.data.domain.Page; | ||
| 17 | +import org.springframework.data.domain.Pageable; | ||
| 18 | + | ||
| 19 | +import java.time.LocalDateTime; | ||
| 20 | +import java.util.ArrayList; | ||
| 21 | +import java.util.List; | ||
| 22 | +import java.util.Random; | ||
| 23 | + | ||
| 24 | +public class Collaborative implements AlgorithmCalc { | ||
| 25 | + @Autowired | ||
| 26 | + private EvaluatorService evaluatorService; | ||
| 27 | + | ||
| 28 | + @Autowired | ||
| 29 | + private ItemRepository itemRepository; | ||
| 30 | + | ||
| 31 | + @Autowired | ||
| 32 | + private RecommendationRepository recommendationRepository; | ||
| 33 | + | ||
| 34 | + @Autowired | ||
| 35 | + private ProjectRepository projectRepository; | ||
| 36 | + | ||
| 37 | + @Autowired | ||
| 38 | + private ProjectService projectService; | ||
| 39 | + | ||
| 40 | + @Autowired | ||
| 41 | + private AlgorithmService algorithmService; | ||
| 42 | + | ||
| 43 | + @Override | ||
| 44 | + public List<RecommendationsByUser> calc(RecommendationForm recommendationForm) { | ||
| 45 | + Iterable<Evaluator> evaluators = evaluatorService.listAll(); | ||
| 46 | + List<RecommendationsByUser> recommendations = new ArrayList<>(); | ||
| 47 | + | ||
| 48 | + for (Evaluator evaluator : evaluators) { | ||
| 49 | + RecommendationsByUser recommendationsByUser = generateRecommendationByEvaluator( | ||
| 50 | + evaluator, recommendationForm | ||
| 51 | + ); | ||
| 52 | + | ||
| 53 | + if (recommendationsByUser == null) { | ||
| 54 | + recommendations.add(recommendationsByUser); | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + return recommendations; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + private RecommendationsByUser generateRecommendationByEvaluator(Evaluator evaluator, | ||
| 62 | + RecommendationForm recommendationForm) { | ||
| 63 | + Random random = new Random(); | ||
| 64 | + | ||
| 65 | + if (random.nextInt(2) == 1) { | ||
| 66 | + RecommendationsByUser recommendationsByUser = new RecommendationsByUser(); | ||
| 67 | + | ||
| 68 | + recommendationsByUser.setEvaluator(evaluator); | ||
| 69 | + recommendationsByUser.setRecommendations(calculateRecommendations(evaluator, | ||
| 70 | + recommendationForm)); | ||
| 71 | + | ||
| 72 | + return recommendationsByUser; | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + return null; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + private List<Recommendation> calculateRecommendations(Evaluator evaluator, | ||
| 79 | + RecommendationForm recommendationForm) { | ||
| 80 | + Random random = new Random(); | ||
| 81 | + List<Recommendation> recommendations = new ArrayList<>(); | ||
| 82 | + | ||
| 83 | + Project project = projectService.find(recommendationForm.getProjectId()); | ||
| 84 | + Integer matrixId = project.getLastMatrixId() + 1; | ||
| 85 | + Algorithm algorithm = algorithmService.find(recommendationForm.getAlgorithmId()); | ||
| 86 | + | ||
| 87 | + for(Item item: itemRepository.findByProject(project)) { | ||
| 88 | + Double score = random.nextDouble() * 5; | ||
| 89 | + | ||
| 90 | + if (score > recommendationForm.getPassingScore()) { | ||
| 91 | + Recommendation recommendation = RecommendationBuilder.aRecommendation() | ||
| 92 | + .withAlgorithm(algorithm) | ||
| 93 | + .withItem(item) | ||
| 94 | + .withDate(LocalDateTime.now()) | ||
| 95 | + .withEvaluator(evaluator) | ||
| 96 | + .withRuntimeInSeconds(1) | ||
| 97 | + .withWeight(score) | ||
| 98 | + .withMatrixId(matrixId) | ||
| 99 | + .build(); | ||
| 100 | + | ||
| 101 | + recommendationRepository.save(recommendation); | ||
| 102 | + recommendations.add(recommendation); | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + project.setLastMatrixId(matrixId); | ||
| 107 | + projectService.save(project); | ||
| 108 | + | ||
| 109 | + return recommendations; | ||
| 110 | + } | ||
| 111 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/strategies/MixedHybrid.java
0 → 100644
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
| 1 | +package com.srh.api.algorithms.strategies; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.AlgorithmCalc; | ||
| 4 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 5 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 6 | +import com.srh.api.model.Evaluator; | ||
| 7 | + | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +public class MixedHybrid implements AlgorithmCalc { | ||
| 11 | + @Override | ||
| 12 | + public List<RecommendationsByUser> calc(RecommendationForm recommendationForm) { | ||
| 13 | + return null; | ||
| 14 | + } | ||
| 15 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/strategies/MixedHybridWithThreads.java
0 → 100644
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
| 1 | +package com.srh.api.algorithms.strategies; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.AlgorithmCalc; | ||
| 4 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 5 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 6 | +import com.srh.api.model.Evaluator; | ||
| 7 | + | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +public class MixedHybridWithThreads implements AlgorithmCalc { | ||
| 11 | + @Override | ||
| 12 | + public List<RecommendationsByUser> calc(RecommendationForm recommendationForm) { | ||
| 13 | + return null; | ||
| 14 | + } | ||
| 15 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/strategies/WeightedHybrid.java
0 → 100644
| @@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
| 1 | +package com.srh.api.algorithms.strategies; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.AlgorithmCalc; | ||
| 4 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 5 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 6 | +import com.srh.api.model.Evaluator; | ||
| 7 | + | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +public class WeightedHybrid implements AlgorithmCalc { | ||
| 11 | + public List<RecommendationsByUser> calc(RecommendationForm recommendationForm) { | ||
| 12 | + return null; | ||
| 13 | + } | ||
| 14 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/strategies/WeightedHybridWithThreads.java
0 → 100644
| @@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
| 1 | +package com.srh.api.algorithms.strategies; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.AlgorithmCalc; | ||
| 4 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 5 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 6 | + | ||
| 7 | +import java.util.List; | ||
| 8 | + | ||
| 9 | +public class WeightedHybridWithThreads implements AlgorithmCalc { | ||
| 10 | + @Override | ||
| 11 | + public List<RecommendationsByUser> calc(RecommendationForm recommendationForm) { | ||
| 12 | + return null; | ||
| 13 | + } | ||
| 14 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/structure/RecommendationsByUser.java
0 → 100644
| @@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
| 1 | +package com.srh.api.algorithms.structure; | ||
| 2 | + | ||
| 3 | +import com.srh.api.model.Evaluator; | ||
| 4 | +import com.srh.api.model.Recommendation; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +import java.util.List; | ||
| 8 | + | ||
| 9 | +@Data | ||
| 10 | +public class RecommendationsByUser { | ||
| 11 | + private Evaluator evaluator; | ||
| 12 | + private List<Recommendation> recommendations; | ||
| 13 | +} |
codigos/backend/src/main/java/com/srh/api/algorithms/utils/EuclideanDistance.java
0 → 100644
codigos/backend/src/main/java/com/srh/api/builder/ProjectBuilder.java
| @@ -11,6 +11,7 @@ public final class ProjectBuilder { | @@ -11,6 +11,7 @@ public final class ProjectBuilder { | ||
| 11 | private String description; | 11 | private String description; |
| 12 | private LocalDate date; | 12 | private LocalDate date; |
| 13 | private Boolean visible; | 13 | private Boolean visible; |
| 14 | + private Integer lastMatrixId; | ||
| 14 | private Situations situation; | 15 | private Situations situation; |
| 15 | private Admin admin; | 16 | private Admin admin; |
| 16 | private List<Evaluator> evaluators; | 17 | private List<Evaluator> evaluators; |
| @@ -48,6 +49,11 @@ public final class ProjectBuilder { | @@ -48,6 +49,11 @@ public final class ProjectBuilder { | ||
| 48 | return this; | 49 | return this; |
| 49 | } | 50 | } |
| 50 | 51 | ||
| 52 | + public ProjectBuilder withLastMatrixId(Integer lastMatrixId) { | ||
| 53 | + this.lastMatrixId = lastMatrixId; | ||
| 54 | + return this; | ||
| 55 | + } | ||
| 56 | + | ||
| 51 | public ProjectBuilder withSituation(Situations situation) { | 57 | public ProjectBuilder withSituation(Situations situation) { |
| 52 | this.situation = situation; | 58 | this.situation = situation; |
| 53 | return this; | 59 | return this; |
| @@ -75,6 +81,7 @@ public final class ProjectBuilder { | @@ -75,6 +81,7 @@ public final class ProjectBuilder { | ||
| 75 | project.setDescription(description); | 81 | project.setDescription(description); |
| 76 | project.setDate(date); | 82 | project.setDate(date); |
| 77 | project.setVisible(visible); | 83 | project.setVisible(visible); |
| 84 | + project.setLastMatrixId(lastMatrixId); | ||
| 78 | project.setSituation(situation); | 85 | project.setSituation(situation); |
| 79 | project.setAdmin(admin); | 86 | project.setAdmin(admin); |
| 80 | project.setEvaluators(evaluators); | 87 | project.setEvaluators(evaluators); |
codigos/backend/src/main/java/com/srh/api/builder/RecommendationBuilder.java
| @@ -10,6 +10,7 @@ public final class RecommendationBuilder { | @@ -10,6 +10,7 @@ public final class RecommendationBuilder { | ||
| 10 | private Double weight; | 10 | private Double weight; |
| 11 | private LocalDateTime date; | 11 | private LocalDateTime date; |
| 12 | private Integer runtimeInSeconds; | 12 | private Integer runtimeInSeconds; |
| 13 | + private Integer matrixId; | ||
| 13 | private Algorithm algorithm; | 14 | private Algorithm algorithm; |
| 14 | private Evaluator evaluator; | 15 | private Evaluator evaluator; |
| 15 | private Item item; | 16 | private Item item; |
| @@ -42,6 +43,11 @@ public final class RecommendationBuilder { | @@ -42,6 +43,11 @@ public final class RecommendationBuilder { | ||
| 42 | return this; | 43 | return this; |
| 43 | } | 44 | } |
| 44 | 45 | ||
| 46 | + public RecommendationBuilder withMatrixId(Integer matrixId) { | ||
| 47 | + this.matrixId = matrixId; | ||
| 48 | + return this; | ||
| 49 | + } | ||
| 50 | + | ||
| 45 | public RecommendationBuilder withAlgorithm(Algorithm algorithm) { | 51 | public RecommendationBuilder withAlgorithm(Algorithm algorithm) { |
| 46 | this.algorithm = algorithm; | 52 | this.algorithm = algorithm; |
| 47 | return this; | 53 | return this; |
| @@ -68,6 +74,7 @@ public final class RecommendationBuilder { | @@ -68,6 +74,7 @@ public final class RecommendationBuilder { | ||
| 68 | recommendation.setWeight(weight); | 74 | recommendation.setWeight(weight); |
| 69 | recommendation.setDate(date); | 75 | recommendation.setDate(date); |
| 70 | recommendation.setRuntimeInSeconds(runtimeInSeconds); | 76 | recommendation.setRuntimeInSeconds(runtimeInSeconds); |
| 77 | + recommendation.setMatrixId(matrixId); | ||
| 71 | recommendation.setAlgorithm(algorithm); | 78 | recommendation.setAlgorithm(algorithm); |
| 72 | recommendation.setEvaluator(evaluator); | 79 | recommendation.setEvaluator(evaluator); |
| 73 | recommendation.setItem(item); | 80 | recommendation.setItem(item); |
codigos/backend/src/main/java/com/srh/api/config/DbSeeder.java
| 1 | package com.srh.api.config; | 1 | package com.srh.api.config; |
| 2 | 2 | ||
| 3 | +import com.srh.api.builder.AlgorithmBuilder; | ||
| 3 | import com.srh.api.builder.ApiUserBuilder; | 4 | import com.srh.api.builder.ApiUserBuilder; |
| 4 | import com.srh.api.builder.ProfileBuilder; | 5 | import com.srh.api.builder.ProfileBuilder; |
| 6 | +import com.srh.api.model.Algorithm; | ||
| 5 | import com.srh.api.model.ApiUser; | 7 | import com.srh.api.model.ApiUser; |
| 6 | import com.srh.api.model.Profile; | 8 | import com.srh.api.model.Profile; |
| 9 | +import com.srh.api.model.TypeRecommendation; | ||
| 10 | +import com.srh.api.repository.AlgorithmRepository; | ||
| 7 | import com.srh.api.repository.ApiUserRepository; | 11 | import com.srh.api.repository.ApiUserRepository; |
| 8 | import com.srh.api.repository.ProfileRepository; | 12 | import com.srh.api.repository.ProfileRepository; |
| 9 | import org.springframework.beans.factory.annotation.Autowired; | 13 | import org.springframework.beans.factory.annotation.Autowired; |
| 10 | import org.springframework.stereotype.Service; | 14 | import org.springframework.stereotype.Service; |
| 11 | 15 | ||
| 12 | import java.util.ArrayList; | 16 | import java.util.ArrayList; |
| 17 | +import java.util.Arrays; | ||
| 13 | import java.util.List; | 18 | import java.util.List; |
| 14 | 19 | ||
| 15 | @Service | 20 | @Service |
| @@ -20,6 +25,9 @@ public class DbSeeder { | @@ -20,6 +25,9 @@ public class DbSeeder { | ||
| 20 | @Autowired | 25 | @Autowired |
| 21 | private ProfileRepository profileRepository; | 26 | private ProfileRepository profileRepository; |
| 22 | 27 | ||
| 28 | + @Autowired | ||
| 29 | + private AlgorithmRepository algorithmRepository; | ||
| 30 | + | ||
| 23 | private Profile adminProfile; | 31 | private Profile adminProfile; |
| 24 | private Profile userProfile; | 32 | private Profile userProfile; |
| 25 | 33 | ||
| @@ -30,6 +38,8 @@ public class DbSeeder { | @@ -30,6 +38,8 @@ public class DbSeeder { | ||
| 30 | createApiUserAdmin(); | 38 | createApiUserAdmin(); |
| 31 | createApiUserClient(); | 39 | createApiUserClient(); |
| 32 | 40 | ||
| 41 | + createAlgorithms(); | ||
| 42 | + | ||
| 33 | return true; | 43 | return true; |
| 34 | } | 44 | } |
| 35 | 45 | ||
| @@ -85,4 +95,47 @@ public class DbSeeder { | @@ -85,4 +95,47 @@ public class DbSeeder { | ||
| 85 | userProfile = profile; | 95 | userProfile = profile; |
| 86 | profileRepository.save(profile); | 96 | profileRepository.save(profile); |
| 87 | } | 97 | } |
| 98 | + | ||
| 99 | + private void createAlgorithms() { | ||
| 100 | + Algorithm algorithm1 = AlgorithmBuilder.anAlgorithm() | ||
| 101 | + .withId(1) | ||
| 102 | + .withName("Filtragem Colaborativa") | ||
| 103 | + .withTypeRecommendation(TypeRecommendation.COLLABORATIVE) | ||
| 104 | + .build(); | ||
| 105 | + | ||
| 106 | + Algorithm algorithm2 = AlgorithmBuilder.anAlgorithm() | ||
| 107 | + .withId(1) | ||
| 108 | + .withName("Filtragem Baseada em Conteúdo") | ||
| 109 | + .withTypeRecommendation(TypeRecommendation.COLLABORATIVE) | ||
| 110 | + .build(); | ||
| 111 | + | ||
| 112 | + Algorithm algorithm3 = AlgorithmBuilder.anAlgorithm() | ||
| 113 | + .withId(1) | ||
| 114 | + .withName("Filtragem Híbrida ponderada - Single Thread") | ||
| 115 | + .withTypeRecommendation(TypeRecommendation.COLLABORATIVE) | ||
| 116 | + .build(); | ||
| 117 | + | ||
| 118 | + Algorithm algorithm4 = AlgorithmBuilder.anAlgorithm() | ||
| 119 | + .withId(1) | ||
| 120 | + .withName("Filtragem Híbrida ponderada - Multi Thread") | ||
| 121 | + .withTypeRecommendation(TypeRecommendation.COLLABORATIVE) | ||
| 122 | + .build(); | ||
| 123 | + | ||
| 124 | + Algorithm algorithm5 = AlgorithmBuilder.anAlgorithm() | ||
| 125 | + .withId(1) | ||
| 126 | + .withName("Filtragem Híbrida Mista - Single Thread") | ||
| 127 | + .withTypeRecommendation(TypeRecommendation.COLLABORATIVE) | ||
| 128 | + .build(); | ||
| 129 | + | ||
| 130 | + Algorithm algorithm6 = AlgorithmBuilder.anAlgorithm() | ||
| 131 | + .withId(1) | ||
| 132 | + .withName("Filtragem Híbrida Mista - Multi Thread") | ||
| 133 | + .withTypeRecommendation(TypeRecommendation.COLLABORATIVE) | ||
| 134 | + .build(); | ||
| 135 | + | ||
| 136 | + algorithmRepository.saveAll(Arrays.asList( | ||
| 137 | + algorithm1, algorithm2, algorithm3, | ||
| 138 | + algorithm4, algorithm5, algorithm6 | ||
| 139 | + )); | ||
| 140 | + } | ||
| 88 | } | 141 | } |
codigos/backend/src/main/java/com/srh/api/config/EmailConfig.java
0 → 100644
| @@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
| 1 | +package com.srh.api.config; | ||
| 2 | + | ||
| 3 | +import org.springframework.context.annotation.Bean; | ||
| 4 | +import org.springframework.mail.javamail.JavaMailSender; | ||
| 5 | +import org.springframework.mail.javamail.JavaMailSenderImpl; | ||
| 6 | +import org.springframework.stereotype.Component; | ||
| 7 | + | ||
| 8 | +import java.util.Properties; | ||
| 9 | + | ||
| 10 | +@Component | ||
| 11 | +public class EmailConfig { | ||
| 12 | + @Bean | ||
| 13 | + public JavaMailSender getJavaMailSender() { | ||
| 14 | + JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); | ||
| 15 | + mailSender.setHost("smtp.gmail.com"); | ||
| 16 | + mailSender.setPort(587); | ||
| 17 | + | ||
| 18 | + mailSender.setUsername("my.gmail@gmail.com"); | ||
| 19 | + mailSender.setPassword("password"); | ||
| 20 | + | ||
| 21 | + Properties props = mailSender.getJavaMailProperties(); | ||
| 22 | + props.put("mail.transport.protocol", "smtp"); | ||
| 23 | + props.put("mail.smtp.auth", "true"); | ||
| 24 | + props.put("mail.smtp.starttls.enable", "true"); | ||
| 25 | + props.put("mail.debug", "true"); | ||
| 26 | + | ||
| 27 | + return mailSender; | ||
| 28 | + } | ||
| 29 | +} |
codigos/backend/src/main/java/com/srh/api/controller/AdminController.java
| @@ -2,9 +2,14 @@ package com.srh.api.controller; | @@ -2,9 +2,14 @@ package com.srh.api.controller; | ||
| 2 | 2 | ||
| 3 | import com.srh.api.dto.resource.AdminDto; | 3 | import com.srh.api.dto.resource.AdminDto; |
| 4 | import com.srh.api.dto.resource.AdminForm; | 4 | import com.srh.api.dto.resource.AdminForm; |
| 5 | +import com.srh.api.dto.resource.ProjectDto; | ||
| 6 | +import com.srh.api.dto.resource.TypeItemDto; | ||
| 5 | import com.srh.api.hypermedia.AdminModelAssembler; | 7 | import com.srh.api.hypermedia.AdminModelAssembler; |
| 6 | import com.srh.api.model.Admin; | 8 | import com.srh.api.model.Admin; |
| 9 | +import com.srh.api.model.Project; | ||
| 10 | +import com.srh.api.model.TypeItem; | ||
| 7 | import com.srh.api.service.AdminService; | 11 | import com.srh.api.service.AdminService; |
| 12 | +import com.srh.api.utils.PageUtil; | ||
| 8 | import lombok.SneakyThrows; | 13 | import lombok.SneakyThrows; |
| 9 | import org.springframework.beans.factory.annotation.Autowired; | 14 | import org.springframework.beans.factory.annotation.Autowired; |
| 10 | import org.springframework.data.domain.Page; | 15 | import org.springframework.data.domain.Page; |
| @@ -35,6 +40,9 @@ public class AdminController { | @@ -35,6 +40,9 @@ public class AdminController { | ||
| 35 | @Autowired | 40 | @Autowired |
| 36 | private PagedResourcesAssembler<AdminDto> pagedResourcesAssembler; | 41 | private PagedResourcesAssembler<AdminDto> pagedResourcesAssembler; |
| 37 | 42 | ||
| 43 | + @Autowired | ||
| 44 | + private PagedResourcesAssembler<ProjectDto> projectDtoPagedResourcesAssembler; | ||
| 45 | + | ||
| 38 | @GetMapping | 46 | @GetMapping |
| 39 | public PagedModel<EntityModel<AdminDto>> listAll(@PageableDefault(page = 0, size = 5) Pageable pageInfo) { | 47 | public PagedModel<EntityModel<AdminDto>> listAll(@PageableDefault(page = 0, size = 5) Pageable pageInfo) { |
| 40 | Page<Admin> admins = adminService.findAll(pageInfo); | 48 | Page<Admin> admins = adminService.findAll(pageInfo); |
| @@ -73,4 +81,17 @@ public class AdminController { | @@ -73,4 +81,17 @@ public class AdminController { | ||
| 73 | adminService.delete(id); | 81 | adminService.delete(id); |
| 74 | return ResponseEntity.noContent().build(); | 82 | return ResponseEntity.noContent().build(); |
| 75 | } | 83 | } |
| 84 | + | ||
| 85 | + @GetMapping("{adminId}/projects") | ||
| 86 | + public PagedModel<EntityModel<ProjectDto>> findProjectsByAdmin( | ||
| 87 | + @PathVariable Integer adminId, | ||
| 88 | + @PageableDefault(page = 0, size = 5) Pageable pageInfo | ||
| 89 | + ) { | ||
| 90 | + PageUtil<Project> pageUtil = new PageUtil<>(pageInfo, adminService. | ||
| 91 | + listProjectsByAdmin(adminId)); | ||
| 92 | + | ||
| 93 | + return projectDtoPagedResourcesAssembler.toModel(ProjectDto.convert( | ||
| 94 | + pageUtil.getPage() | ||
| 95 | + )); | ||
| 96 | + } | ||
| 76 | } | 97 | } |
codigos/backend/src/main/java/com/srh/api/controller/ForgetPasswordController.java
0 → 100644
codigos/backend/src/main/java/com/srh/api/controller/LoginAdminController.java
0 → 100644
| @@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
| 1 | +package com.srh.api.controller; | ||
| 2 | + | ||
| 3 | +import com.srh.api.dto.resource.LoginClientForm; | ||
| 4 | +import com.srh.api.service.LoginClientDto; | ||
| 5 | +import com.srh.api.service.LoginClientService; | ||
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 7 | +import org.springframework.http.ResponseEntity; | ||
| 8 | +import org.springframework.web.bind.annotation.PostMapping; | ||
| 9 | +import org.springframework.web.bind.annotation.RequestBody; | ||
| 10 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 11 | +import org.springframework.web.bind.annotation.RestController; | ||
| 12 | + | ||
| 13 | +import javax.validation.Valid; | ||
| 14 | + | ||
| 15 | +@RestController | ||
| 16 | +@RequestMapping("/admins/login") | ||
| 17 | +public class LoginAdminController { | ||
| 18 | + @Autowired | ||
| 19 | + private LoginClientService loginClientService; | ||
| 20 | + | ||
| 21 | + @PostMapping | ||
| 22 | + public ResponseEntity<LoginClientDto> loginUser(@RequestBody @Valid LoginClientForm loginForm) { | ||
| 23 | + Boolean validUser = loginClientService.generateLoginTokenByAdmins( | ||
| 24 | + loginForm.getLogin(), loginForm.getPassword() | ||
| 25 | + ); | ||
| 26 | + Integer adminId = loginClientService.getAdminId(loginForm.getLogin()); | ||
| 27 | + return ResponseEntity.ok(new LoginClientDto(validUser, adminId)); | ||
| 28 | + } | ||
| 29 | +} |
codigos/backend/src/main/java/com/srh/api/controller/LoginEvaluatorController.java
0 → 100644
| @@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
| 1 | +package com.srh.api.controller; | ||
| 2 | + | ||
| 3 | +import com.srh.api.dto.resource.LoginClientForm; | ||
| 4 | +import com.srh.api.service.LoginClientDto; | ||
| 5 | +import com.srh.api.service.LoginClientService; | ||
| 6 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 7 | +import org.springframework.http.ResponseEntity; | ||
| 8 | +import org.springframework.web.bind.annotation.PostMapping; | ||
| 9 | +import org.springframework.web.bind.annotation.RequestBody; | ||
| 10 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 11 | +import org.springframework.web.bind.annotation.RestController; | ||
| 12 | + | ||
| 13 | +import javax.validation.Valid; | ||
| 14 | + | ||
| 15 | +@RestController | ||
| 16 | +@RequestMapping("/evaluators/login") | ||
| 17 | +public class LoginEvaluatorController { | ||
| 18 | + @Autowired | ||
| 19 | + private LoginClientService loginClientService; | ||
| 20 | + | ||
| 21 | + @PostMapping | ||
| 22 | + public ResponseEntity<LoginClientDto> loginUser(@RequestBody @Valid LoginClientForm loginForm) { | ||
| 23 | + Boolean validUser = loginClientService.verifyEvaluators( | ||
| 24 | + loginForm.getLogin(), loginForm.getPassword() | ||
| 25 | + ); | ||
| 26 | + Integer evaluatorId = loginClientService.getEvaluatorId(loginForm.getLogin()); | ||
| 27 | + return ResponseEntity.ok(new LoginClientDto(validUser, evaluatorId)); | ||
| 28 | + } | ||
| 29 | +} |
codigos/backend/src/main/java/com/srh/api/controller/ProjectController.java
| 1 | package com.srh.api.controller; | 1 | package com.srh.api.controller; |
| 2 | 2 | ||
| 3 | -import com.srh.api.dto.resource.ItemDto; | ||
| 4 | -import com.srh.api.dto.resource.ProjectDto; | ||
| 5 | -import com.srh.api.dto.resource.ProjectForm; | ||
| 6 | -import com.srh.api.hypermedia.ItemModelAssembler; | 3 | +import com.srh.api.dto.resource.*; |
| 7 | import com.srh.api.hypermedia.ProjectModelAssembler; | 4 | import com.srh.api.hypermedia.ProjectModelAssembler; |
| 8 | -import com.srh.api.model.Item; | ||
| 9 | -import com.srh.api.model.Project; | 5 | +import com.srh.api.model.*; |
| 10 | import com.srh.api.service.ProjectService; | 6 | import com.srh.api.service.ProjectService; |
| 11 | import com.srh.api.utils.PageUtil; | 7 | import com.srh.api.utils.PageUtil; |
| 12 | import lombok.SneakyThrows; | 8 | import lombok.SneakyThrows; |
| @@ -42,6 +38,18 @@ public class ProjectController { | @@ -42,6 +38,18 @@ public class ProjectController { | ||
| 42 | @Autowired | 38 | @Autowired |
| 43 | private PagedResourcesAssembler<ItemDto> itemDtoPagedResourcesAssembler; | 39 | private PagedResourcesAssembler<ItemDto> itemDtoPagedResourcesAssembler; |
| 44 | 40 | ||
| 41 | + @Autowired | ||
| 42 | + private PagedResourcesAssembler<RecommendationDto> recommendationDtoPagedResourcesAssembler; | ||
| 43 | + | ||
| 44 | + @Autowired | ||
| 45 | + private PagedResourcesAssembler<ItemRatingDto> itemRatingDtoPagedResourcesAssembler; | ||
| 46 | + | ||
| 47 | + @Autowired | ||
| 48 | + private PagedResourcesAssembler<TagDto> tagDtoPagedResourcesAssembler; | ||
| 49 | + | ||
| 50 | + @Autowired | ||
| 51 | + private PagedResourcesAssembler<TypeItemDto> typeItemDtoPagedResourcesAssembler; | ||
| 52 | + | ||
| 45 | @GetMapping | 53 | @GetMapping |
| 46 | public PagedModel<EntityModel<ProjectDto>> listAll(@PageableDefault(page = 0, size = 5) | 54 | public PagedModel<EntityModel<ProjectDto>> listAll(@PageableDefault(page = 0, size = 5) |
| 47 | Pageable pageInfo) { | 55 | Pageable pageInfo) { |
| @@ -89,9 +97,61 @@ public class ProjectController { | @@ -89,9 +97,61 @@ public class ProjectController { | ||
| 89 | @PathVariable Integer projectId, | 97 | @PathVariable Integer projectId, |
| 90 | @PageableDefault(page = 0, size = 5) Pageable pageInfo | 98 | @PageableDefault(page = 0, size = 5) Pageable pageInfo |
| 91 | ) { | 99 | ) { |
| 92 | - Project project = projectService.find(projectId); | ||
| 93 | - PageUtil<Item> pageUtil = new PageUtil<>(pageInfo, project.getItens()); | 100 | + PageUtil<Item> pageUtil = new PageUtil<>(pageInfo, projectService. |
| 101 | + listItensByProject(projectId)); | ||
| 94 | 102 | ||
| 95 | return itemDtoPagedResourcesAssembler.toModel(ItemDto.convert(pageUtil.getPage())); | 103 | return itemDtoPagedResourcesAssembler.toModel(ItemDto.convert(pageUtil.getPage())); |
| 96 | } | 104 | } |
| 105 | + | ||
| 106 | + @GetMapping("{projectId}/recommendations") | ||
| 107 | + public PagedModel<EntityModel<RecommendationDto>> findRecommendationsByProject( | ||
| 108 | + @PathVariable Integer projectId, | ||
| 109 | + @PageableDefault(page = 0, size = 5) Pageable pageInfo | ||
| 110 | + ) { | ||
| 111 | + PageUtil<Recommendation> pageUtil = new PageUtil<>(pageInfo, projectService. | ||
| 112 | + listRecommendationsByProject(projectId)); | ||
| 113 | + | ||
| 114 | + return recommendationDtoPagedResourcesAssembler.toModel(RecommendationDto.convert( | ||
| 115 | + pageUtil.getPage() | ||
| 116 | + )); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + @GetMapping("{projectId}/itemratings") | ||
| 120 | + public PagedModel<EntityModel<ItemRatingDto>> findItemRatingsByProject( | ||
| 121 | + @PathVariable Integer projectId, | ||
| 122 | + @PageableDefault(page = 0, size = 5) Pageable pageInfo | ||
| 123 | + ) { | ||
| 124 | + PageUtil<ItemRating> pageUtil = new PageUtil<>(pageInfo, projectService. | ||
| 125 | + listItemRatingsByProject(projectId)); | ||
| 126 | + | ||
| 127 | + return itemRatingDtoPagedResourcesAssembler.toModel(ItemRatingDto.convert( | ||
| 128 | + pageUtil.getPage() | ||
| 129 | + )); | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + @GetMapping("{projectId}/tags") | ||
| 133 | + public PagedModel<EntityModel<TagDto>> findTagsByProject( | ||
| 134 | + @PathVariable Integer projectId, | ||
| 135 | + @PageableDefault(page = 0, size = 5) Pageable pageInfo | ||
| 136 | + ) { | ||
| 137 | + PageUtil<Tag> pageUtil = new PageUtil<>(pageInfo, projectService. | ||
| 138 | + listTagsByProject(projectId)); | ||
| 139 | + | ||
| 140 | + return tagDtoPagedResourcesAssembler.toModel(TagDto.convert( | ||
| 141 | + pageUtil.getPage() | ||
| 142 | + )); | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + @GetMapping("{projectId}/typeitens") | ||
| 146 | + public PagedModel<EntityModel<TypeItemDto>> findTypeItensByProject( | ||
| 147 | + @PathVariable Integer projectId, | ||
| 148 | + @PageableDefault(page = 0, size = 5) Pageable pageInfo | ||
| 149 | + ) { | ||
| 150 | + PageUtil<TypeItem> pageUtil = new PageUtil<>(pageInfo, projectService. | ||
| 151 | + listTypeItensByProject(projectId)); | ||
| 152 | + | ||
| 153 | + return typeItemDtoPagedResourcesAssembler.toModel(TypeItemDto.convert( | ||
| 154 | + pageUtil.getPage() | ||
| 155 | + )); | ||
| 156 | + } | ||
| 97 | } | 157 | } |
codigos/backend/src/main/java/com/srh/api/controller/RecommendationController.java
| 1 | package com.srh.api.controller; | 1 | package com.srh.api.controller; |
| 2 | 2 | ||
| 3 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 3 | import com.srh.api.dto.resource.RecommendationDto; | 4 | import com.srh.api.dto.resource.RecommendationDto; |
| 5 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 6 | +import com.srh.api.dto.resource.RecommendationUserDto; | ||
| 4 | import com.srh.api.hypermedia.RecommendationModelAssembler; | 7 | import com.srh.api.hypermedia.RecommendationModelAssembler; |
| 5 | import com.srh.api.model.Recommendation; | 8 | import com.srh.api.model.Recommendation; |
| 6 | import com.srh.api.service.RecommendationService; | 9 | import com.srh.api.service.RecommendationService; |
| @@ -15,6 +18,10 @@ import org.springframework.http.ResponseEntity; | @@ -15,6 +18,10 @@ import org.springframework.http.ResponseEntity; | ||
| 15 | import org.springframework.web.bind.annotation.*; | 18 | import org.springframework.web.bind.annotation.*; |
| 16 | 19 | ||
| 17 | import javax.transaction.Transactional; | 20 | import javax.transaction.Transactional; |
| 21 | +import javax.validation.Valid; | ||
| 22 | + | ||
| 23 | +import java.util.ArrayList; | ||
| 24 | +import java.util.List; | ||
| 18 | 25 | ||
| 19 | import static com.srh.api.dto.resource.RecommendationDto.convert; | 26 | import static com.srh.api.dto.resource.RecommendationDto.convert; |
| 20 | 27 | ||
| @@ -43,6 +50,19 @@ public class RecommendationController { | @@ -43,6 +50,19 @@ public class RecommendationController { | ||
| 43 | return recommendationModelAssembler.toModel(new RecommendationDto(recommendation)); | 50 | return recommendationModelAssembler.toModel(new RecommendationDto(recommendation)); |
| 44 | } | 51 | } |
| 45 | 52 | ||
| 53 | + @PostMapping | ||
| 54 | + public ResponseEntity<List<RecommendationUserDto>> generateRecommendations( | ||
| 55 | + @RequestBody @Valid RecommendationForm form) { | ||
| 56 | + List<RecommendationsByUser> recommendations = recommendationService.generateRecommendation(form); | ||
| 57 | + List<RecommendationUserDto> recommendationUserDtos = new ArrayList<>(); | ||
| 58 | + | ||
| 59 | + for (RecommendationsByUser recommendationByUser : recommendations) { | ||
| 60 | + recommendationUserDtos.add(new RecommendationUserDto(recommendationByUser)); | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + return ResponseEntity.ok(recommendationUserDtos); | ||
| 64 | + } | ||
| 65 | + | ||
| 46 | @DeleteMapping("/{id}") | 66 | @DeleteMapping("/{id}") |
| 47 | @Transactional | 67 | @Transactional |
| 48 | public ResponseEntity<Void> delete(@PathVariable Integer id) { | 68 | public ResponseEntity<Void> delete(@PathVariable Integer id) { |
codigos/backend/src/main/java/com/srh/api/dto/resource/ItemForm.java
| @@ -2,8 +2,10 @@ package com.srh.api.dto.resource; | @@ -2,8 +2,10 @@ package com.srh.api.dto.resource; | ||
| 2 | 2 | ||
| 3 | import com.srh.api.builder.ItemBuilder; | 3 | import com.srh.api.builder.ItemBuilder; |
| 4 | import com.srh.api.builder.ProjectBuilder; | 4 | import com.srh.api.builder.ProjectBuilder; |
| 5 | +import com.srh.api.builder.TypeItemBuilder; | ||
| 5 | import com.srh.api.model.Item; | 6 | import com.srh.api.model.Item; |
| 6 | import com.srh.api.model.Project; | 7 | import com.srh.api.model.Project; |
| 8 | +import com.srh.api.model.TypeItem; | ||
| 7 | import lombok.AllArgsConstructor; | 9 | import lombok.AllArgsConstructor; |
| 8 | import lombok.Getter; | 10 | import lombok.Getter; |
| 9 | import lombok.NoArgsConstructor; | 11 | import lombok.NoArgsConstructor; |
| @@ -29,11 +31,26 @@ public class ItemForm { | @@ -29,11 +31,26 @@ public class ItemForm { | ||
| 29 | @NotNull | 31 | @NotNull |
| 30 | private Integer projectId; | 32 | private Integer projectId; |
| 31 | 33 | ||
| 34 | + private Integer typeItemId; | ||
| 35 | + | ||
| 32 | public Item build() { | 36 | public Item build() { |
| 33 | Project project = ProjectBuilder.aProject() | 37 | Project project = ProjectBuilder.aProject() |
| 34 | .withId(projectId) | 38 | .withId(projectId) |
| 35 | .build(); | 39 | .build(); |
| 36 | 40 | ||
| 41 | + if (typeItemId != null) { | ||
| 42 | + TypeItem typeItem = TypeItemBuilder.aTypeItem() | ||
| 43 | + .withId(typeItemId) | ||
| 44 | + .build(); | ||
| 45 | + | ||
| 46 | + return ItemBuilder.anItem() | ||
| 47 | + .withName(name) | ||
| 48 | + .withDescription(description) | ||
| 49 | + .withProject(project) | ||
| 50 | + .withTypeItem(typeItem) | ||
| 51 | + .build(); | ||
| 52 | + } | ||
| 53 | + | ||
| 37 | return ItemBuilder.anItem() | 54 | return ItemBuilder.anItem() |
| 38 | .withName(name) | 55 | .withName(name) |
| 39 | .withDescription(description) | 56 | .withDescription(description) |
codigos/backend/src/main/java/com/srh/api/dto/resource/LoginClientForm.java
0 → 100644
| @@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
| 1 | +package com.srh.api.dto.resource; | ||
| 2 | + | ||
| 3 | +import lombok.AllArgsConstructor; | ||
| 4 | +import lombok.Getter; | ||
| 5 | +import lombok.NoArgsConstructor; | ||
| 6 | +import org.hibernate.validator.constraints.Length; | ||
| 7 | + | ||
| 8 | +import javax.validation.constraints.NotEmpty; | ||
| 9 | +import javax.validation.constraints.NotNull; | ||
| 10 | + | ||
| 11 | +@Getter | ||
| 12 | +@AllArgsConstructor | ||
| 13 | +@NoArgsConstructor | ||
| 14 | +public class LoginClientForm { | ||
| 15 | + @NotNull | ||
| 16 | + @NotEmpty | ||
| 17 | + @Length(min = 3) | ||
| 18 | + private String login; | ||
| 19 | + | ||
| 20 | + @NotNull | ||
| 21 | + @NotEmpty | ||
| 22 | + @Length(min = 6) | ||
| 23 | + private String password; | ||
| 24 | +} |
codigos/backend/src/main/java/com/srh/api/dto/resource/ProjectForm.java
| @@ -51,6 +51,7 @@ public class ProjectForm { | @@ -51,6 +51,7 @@ public class ProjectForm { | ||
| 51 | .withSituation(Situations.valueOf(situation)) | 51 | .withSituation(Situations.valueOf(situation)) |
| 52 | .withDate(LocalDate.now()) | 52 | .withDate(LocalDate.now()) |
| 53 | .withVisible(visible) | 53 | .withVisible(visible) |
| 54 | + .withLastMatrixId(0) | ||
| 54 | .build(); | 55 | .build(); |
| 55 | } | 56 | } |
| 56 | } | 57 | } |
codigos/backend/src/main/java/com/srh/api/dto/resource/RecommendationForm.java
0 → 100644
| @@ -0,0 +1,28 @@ | @@ -0,0 +1,28 @@ | ||
| 1 | +package com.srh.api.dto.resource; | ||
| 2 | + | ||
| 3 | +import lombok.AllArgsConstructor; | ||
| 4 | +import lombok.Getter; | ||
| 5 | +import lombok.NoArgsConstructor; | ||
| 6 | + | ||
| 7 | +import javax.validation.constraints.Max; | ||
| 8 | +import javax.validation.constraints.Min; | ||
| 9 | +import javax.validation.constraints.NotNull; | ||
| 10 | + | ||
| 11 | +@Getter | ||
| 12 | +@AllArgsConstructor | ||
| 13 | +@NoArgsConstructor | ||
| 14 | +public class RecommendationForm { | ||
| 15 | + @Min(value = 0) | ||
| 16 | + @Max(value = 5) | ||
| 17 | + @NotNull | ||
| 18 | + private Double passingScore; | ||
| 19 | + | ||
| 20 | + @NotNull | ||
| 21 | + private Integer algorithmId; | ||
| 22 | + | ||
| 23 | + @NotNull | ||
| 24 | + private Boolean offline; | ||
| 25 | + | ||
| 26 | + @NotNull | ||
| 27 | + private Integer projectId; | ||
| 28 | +} |
codigos/backend/src/main/java/com/srh/api/dto/resource/RecommendationUserDto.java
0 → 100644
| @@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
| 1 | +package com.srh.api.dto.resource; | ||
| 2 | + | ||
| 3 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 4 | +import com.srh.api.model.Recommendation; | ||
| 5 | +import org.springframework.data.domain.Page; | ||
| 6 | + | ||
| 7 | +import java.util.List; | ||
| 8 | + | ||
| 9 | +public class RecommendationUserDto { | ||
| 10 | + private Integer userId; | ||
| 11 | + private List<Recommendation> recommendations; | ||
| 12 | + | ||
| 13 | + public RecommendationUserDto(RecommendationsByUser recommendationsByUser) { | ||
| 14 | + this.userId = recommendationsByUser.getEvaluator().getId(); | ||
| 15 | + this.recommendations = recommendationsByUser.getRecommendations(); | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + public static Page<RecommendationUserDto> convert(Page<RecommendationsByUser> recommendations) { | ||
| 19 | + return recommendations.map(RecommendationUserDto::new); | ||
| 20 | + } | ||
| 21 | +} |
codigos/backend/src/main/java/com/srh/api/error/exception/InvalidAlgorithmRecommendationException.java
0 → 100644
codigos/backend/src/main/java/com/srh/api/error/exception/InvalidLoginUserException.java
0 → 100644
codigos/backend/src/main/java/com/srh/api/error/exception/InvalidPasswordUserException.java
0 → 100644
codigos/backend/src/main/java/com/srh/api/error/handler/FormHandler.java
| @@ -19,7 +19,7 @@ public class FormHandler { | @@ -19,7 +19,7 @@ public class FormHandler { | ||
| 19 | @Autowired | 19 | @Autowired |
| 20 | private MessageSource messageSource; | 20 | private MessageSource messageSource; |
| 21 | 21 | ||
| 22 | - @ResponseStatus(code = HttpStatus.BAD_REQUEST) | 22 | + @ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY) |
| 23 | @ExceptionHandler(MethodArgumentNotValidException.class) | 23 | @ExceptionHandler(MethodArgumentNotValidException.class) |
| 24 | public List<FormErrorDto> handle(MethodArgumentNotValidException exception) { | 24 | public List<FormErrorDto> handle(MethodArgumentNotValidException exception) { |
| 25 | List<FormErrorDto> dtos = new ArrayList<>(); | 25 | List<FormErrorDto> dtos = new ArrayList<>(); |
codigos/backend/src/main/java/com/srh/api/error/handler/InvaliLoginUserHandler.java
0 → 100644
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +package com.srh.api.error.handler; | ||
| 2 | + | ||
| 3 | +import com.srh.api.dto.error.DefaultErrorDto; | ||
| 4 | +import com.srh.api.error.exception.InvalidLoginUserException; | ||
| 5 | +import org.springframework.http.HttpStatus; | ||
| 6 | +import org.springframework.web.bind.annotation.ExceptionHandler; | ||
| 7 | +import org.springframework.web.bind.annotation.ResponseStatus; | ||
| 8 | +import org.springframework.web.bind.annotation.RestControllerAdvice; | ||
| 9 | + | ||
| 10 | +@RestControllerAdvice | ||
| 11 | +public class InvaliLoginUserHandler { | ||
| 12 | + @ResponseStatus(HttpStatus.BAD_REQUEST) | ||
| 13 | + @ExceptionHandler(InvalidLoginUserException.class) | ||
| 14 | + public DefaultErrorDto handle(Exception exception) { | ||
| 15 | + return new DefaultErrorDto( | ||
| 16 | + "Login inválido", | ||
| 17 | + "O login informado não foi encontrado no sistema" | ||
| 18 | + ); | ||
| 19 | + } | ||
| 20 | +} |
codigos/backend/src/main/java/com/srh/api/error/handler/InvalidAlgorithmRecommendationHandler.java
0 → 100644
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +package com.srh.api.error.handler; | ||
| 2 | + | ||
| 3 | +import com.srh.api.dto.error.DefaultErrorDto; | ||
| 4 | +import com.srh.api.error.exception.InvalidAlgorithmRecommendationException; | ||
| 5 | +import org.springframework.http.HttpStatus; | ||
| 6 | +import org.springframework.web.bind.annotation.ExceptionHandler; | ||
| 7 | +import org.springframework.web.bind.annotation.ResponseStatus; | ||
| 8 | +import org.springframework.web.bind.annotation.RestControllerAdvice; | ||
| 9 | + | ||
| 10 | +@RestControllerAdvice | ||
| 11 | +public class InvalidAlgorithmRecommendationHandler { | ||
| 12 | + @ResponseStatus(HttpStatus.BAD_REQUEST) | ||
| 13 | + @ExceptionHandler(InvalidAlgorithmRecommendationException.class) | ||
| 14 | + public DefaultErrorDto handle(Exception exception) { | ||
| 15 | + return new DefaultErrorDto( | ||
| 16 | + "Algoritmo inválido", | ||
| 17 | + "O id de algoritmo enviado não foi encontrado no sistema" | ||
| 18 | + ); | ||
| 19 | + } | ||
| 20 | +} |
codigos/backend/src/main/java/com/srh/api/error/handler/InvalidPasswordUserHandler.java
0 → 100644
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +package com.srh.api.error.handler; | ||
| 2 | + | ||
| 3 | +import com.srh.api.dto.error.DefaultErrorDto; | ||
| 4 | +import com.srh.api.error.exception.InvalidPasswordUserException; | ||
| 5 | +import org.springframework.http.HttpStatus; | ||
| 6 | +import org.springframework.web.bind.annotation.ExceptionHandler; | ||
| 7 | +import org.springframework.web.bind.annotation.ResponseStatus; | ||
| 8 | +import org.springframework.web.bind.annotation.RestControllerAdvice; | ||
| 9 | + | ||
| 10 | +@RestControllerAdvice | ||
| 11 | +public class InvalidPasswordUserHandler { | ||
| 12 | + @ResponseStatus(HttpStatus.BAD_REQUEST) | ||
| 13 | + @ExceptionHandler(InvalidPasswordUserException.class) | ||
| 14 | + public DefaultErrorDto handle(Exception exception) { | ||
| 15 | + return new DefaultErrorDto( | ||
| 16 | + "A senha informada está incorreta", | ||
| 17 | + "Informe a senha correta do usuário" | ||
| 18 | + ); | ||
| 19 | + } | ||
| 20 | +} |
codigos/backend/src/main/java/com/srh/api/model/Project.java
| @@ -17,6 +17,7 @@ public class Project { | @@ -17,6 +17,7 @@ public class Project { | ||
| 17 | private String description; | 17 | private String description; |
| 18 | private LocalDate date; | 18 | private LocalDate date; |
| 19 | private Boolean visible; | 19 | private Boolean visible; |
| 20 | + private Integer lastMatrixId; | ||
| 20 | 21 | ||
| 21 | @Enumerated(EnumType.STRING) | 22 | @Enumerated(EnumType.STRING) |
| 22 | private Situations situation; | 23 | private Situations situation; |
codigos/backend/src/main/java/com/srh/api/model/Recommendation.java
| @@ -16,6 +16,7 @@ public class Recommendation { | @@ -16,6 +16,7 @@ public class Recommendation { | ||
| 16 | private Double weight; | 16 | private Double weight; |
| 17 | private LocalDateTime date; | 17 | private LocalDateTime date; |
| 18 | private Integer runtimeInSeconds; | 18 | private Integer runtimeInSeconds; |
| 19 | + private Integer matrixId; | ||
| 19 | 20 | ||
| 20 | @ManyToOne | 21 | @ManyToOne |
| 21 | private Algorithm algorithm; | 22 | private Algorithm algorithm; |
codigos/backend/src/main/java/com/srh/api/model/TypeItem.java
| @@ -12,6 +12,7 @@ public class TypeItem { | @@ -12,6 +12,7 @@ public class TypeItem { | ||
| 12 | @GeneratedValue(strategy = GenerationType.IDENTITY) | 12 | @GeneratedValue(strategy = GenerationType.IDENTITY) |
| 13 | private Integer id; | 13 | private Integer id; |
| 14 | 14 | ||
| 15 | + @Column(unique = true) | ||
| 15 | private String name; | 16 | private String name; |
| 16 | 17 | ||
| 17 | @OneToMany(mappedBy = "typeItem") | 18 | @OneToMany(mappedBy = "typeItem") |
codigos/backend/src/main/java/com/srh/api/repository/AdminRepository.java
| @@ -3,5 +3,8 @@ package com.srh.api.repository; | @@ -3,5 +3,8 @@ package com.srh.api.repository; | ||
| 3 | import com.srh.api.model.Admin; | 3 | import com.srh.api.model.Admin; |
| 4 | import org.springframework.data.repository.PagingAndSortingRepository; | 4 | import org.springframework.data.repository.PagingAndSortingRepository; |
| 5 | 5 | ||
| 6 | +import java.util.Optional; | ||
| 7 | + | ||
| 6 | public interface AdminRepository extends PagingAndSortingRepository<Admin, Integer> { | 8 | public interface AdminRepository extends PagingAndSortingRepository<Admin, Integer> { |
| 9 | + Optional<Admin> findByLogin(String login); | ||
| 7 | } | 10 | } |
codigos/backend/src/main/java/com/srh/api/repository/EvaluatorRepository.java
| @@ -3,5 +3,8 @@ package com.srh.api.repository; | @@ -3,5 +3,8 @@ package com.srh.api.repository; | ||
| 3 | import com.srh.api.model.Evaluator; | 3 | import com.srh.api.model.Evaluator; |
| 4 | import org.springframework.data.repository.PagingAndSortingRepository; | 4 | import org.springframework.data.repository.PagingAndSortingRepository; |
| 5 | 5 | ||
| 6 | +import java.util.Optional; | ||
| 7 | + | ||
| 6 | public interface EvaluatorRepository extends PagingAndSortingRepository<Evaluator, Integer> { | 8 | public interface EvaluatorRepository extends PagingAndSortingRepository<Evaluator, Integer> { |
| 9 | + Optional<Evaluator> findByLogin(String login); | ||
| 7 | } | 10 | } |
codigos/backend/src/main/java/com/srh/api/repository/ItemRepository.java
| 1 | package com.srh.api.repository; | 1 | package com.srh.api.repository; |
| 2 | 2 | ||
| 3 | import com.srh.api.model.Item; | 3 | import com.srh.api.model.Item; |
| 4 | +import com.srh.api.model.Project; | ||
| 4 | import org.springframework.data.repository.PagingAndSortingRepository; | 5 | import org.springframework.data.repository.PagingAndSortingRepository; |
| 5 | 6 | ||
| 7 | +import java.util.List; | ||
| 8 | + | ||
| 6 | public interface ItemRepository extends PagingAndSortingRepository<Item, Integer> { | 9 | public interface ItemRepository extends PagingAndSortingRepository<Item, Integer> { |
| 10 | + List<Item> findByProject(Project project); | ||
| 7 | } | 11 | } |
codigos/backend/src/main/java/com/srh/api/service/AdminService.java
| 1 | package com.srh.api.service; | 1 | package com.srh.api.service; |
| 2 | 2 | ||
| 3 | import com.srh.api.model.Admin; | 3 | import com.srh.api.model.Admin; |
| 4 | +import com.srh.api.model.Project; | ||
| 4 | import com.srh.api.repository.AdminRepository; | 5 | import com.srh.api.repository.AdminRepository; |
| 5 | import com.srh.api.utils.PasswordUtil; | 6 | import com.srh.api.utils.PasswordUtil; |
| 6 | import lombok.SneakyThrows; | 7 | import lombok.SneakyThrows; |
| @@ -10,6 +11,7 @@ import org.springframework.data.domain.Page; | @@ -10,6 +11,7 @@ import org.springframework.data.domain.Page; | ||
| 10 | import org.springframework.data.domain.Pageable; | 11 | import org.springframework.data.domain.Pageable; |
| 11 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| 12 | 13 | ||
| 14 | +import java.util.List; | ||
| 13 | import java.util.Optional; | 15 | import java.util.Optional; |
| 14 | 16 | ||
| 15 | @Service | 17 | @Service |
| @@ -49,4 +51,19 @@ public class AdminService { | @@ -49,4 +51,19 @@ public class AdminService { | ||
| 49 | find(id); | 51 | find(id); |
| 50 | adminRepository.deleteById(id); | 52 | adminRepository.deleteById(id); |
| 51 | } | 53 | } |
| 54 | + | ||
| 55 | + public Admin findByLogin(String login) { | ||
| 56 | + Optional<Admin> admin = adminRepository.findByLogin(login); | ||
| 57 | + | ||
| 58 | + if (admin.isPresent()) | ||
| 59 | + return admin.get(); | ||
| 60 | + | ||
| 61 | + throw new ObjectNotFoundException(login, Admin.class.getName()); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + public List<Project> listProjectsByAdmin(Integer adminId) { | ||
| 65 | + Admin admin = find(adminId); | ||
| 66 | + List<Project> projects = admin.getProjects(); | ||
| 67 | + return projects; | ||
| 68 | + } | ||
| 52 | } | 69 | } |
codigos/backend/src/main/java/com/srh/api/service/EvaluatorService.java
| @@ -9,6 +9,7 @@ import org.springframework.data.domain.Page; | @@ -9,6 +9,7 @@ import org.springframework.data.domain.Page; | ||
| 9 | import org.springframework.data.domain.Pageable; | 9 | import org.springframework.data.domain.Pageable; |
| 10 | import org.springframework.stereotype.Service; | 10 | import org.springframework.stereotype.Service; |
| 11 | 11 | ||
| 12 | +import java.util.List; | ||
| 12 | import java.util.Optional; | 13 | import java.util.Optional; |
| 13 | 14 | ||
| 14 | @Service | 15 | @Service |
| @@ -31,6 +32,10 @@ public class EvaluatorService { | @@ -31,6 +32,10 @@ public class EvaluatorService { | ||
| 31 | return evaluatorRepository.findAll(pageInfo); | 32 | return evaluatorRepository.findAll(pageInfo); |
| 32 | } | 33 | } |
| 33 | 34 | ||
| 35 | + public Iterable<Evaluator> listAll() { | ||
| 36 | + return evaluatorRepository.findAll(); | ||
| 37 | + } | ||
| 38 | + | ||
| 34 | public Evaluator save(Evaluator evaluator) { | 39 | public Evaluator save(Evaluator evaluator) { |
| 35 | Evaluator evaluatorEncoded = passwordUtil.encodedPasswordForUser(evaluator); | 40 | Evaluator evaluatorEncoded = passwordUtil.encodedPasswordForUser(evaluator); |
| 36 | return evaluatorRepository.save(evaluatorEncoded); | 41 | return evaluatorRepository.save(evaluatorEncoded); |
| @@ -52,4 +57,13 @@ public class EvaluatorService { | @@ -52,4 +57,13 @@ public class EvaluatorService { | ||
| 52 | find(id); | 57 | find(id); |
| 53 | evaluatorRepository.deleteById(id); | 58 | evaluatorRepository.deleteById(id); |
| 54 | } | 59 | } |
| 60 | + | ||
| 61 | + public Evaluator findByLogin(String login) { | ||
| 62 | + Optional<Evaluator> evaluator = evaluatorRepository.findByLogin(login); | ||
| 63 | + | ||
| 64 | + if (evaluator.isPresent()) | ||
| 65 | + return evaluator.get(); | ||
| 66 | + | ||
| 67 | + throw new ObjectNotFoundException(login, Evaluator.class.getName()); | ||
| 68 | + } | ||
| 55 | } | 69 | } |
codigos/backend/src/main/java/com/srh/api/service/ItemService.java
| @@ -37,7 +37,12 @@ public class ItemService { | @@ -37,7 +37,12 @@ public class ItemService { | ||
| 37 | return itemRepository.findAll(pageInfo); | 37 | return itemRepository.findAll(pageInfo); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | + @SneakyThrows | ||
| 40 | public Item save(Item item) { | 41 | public Item save(Item item) { |
| 42 | + if (!itemProjectIsOpenAndVisible(item)) { | ||
| 43 | + throw new ProjectNotOpenedException("The project is closed or invisible"); | ||
| 44 | + } | ||
| 45 | + | ||
| 41 | return itemRepository.save(item); | 46 | return itemRepository.save(item); |
| 42 | } | 47 | } |
| 43 | 48 |
codigos/backend/src/main/java/com/srh/api/service/LoginClientDto.java
0 → 100644
codigos/backend/src/main/java/com/srh/api/service/LoginClientService.java
0 → 100644
| @@ -0,0 +1,77 @@ | @@ -0,0 +1,77 @@ | ||
| 1 | +package com.srh.api.service; | ||
| 2 | + | ||
| 3 | +import com.srh.api.error.exception.InvalidLoginUserException; | ||
| 4 | +import com.srh.api.error.exception.InvalidPasswordUserException; | ||
| 5 | +import com.srh.api.model.Admin; | ||
| 6 | +import com.srh.api.model.Evaluator; | ||
| 7 | +import com.srh.api.utils.PasswordUtil; | ||
| 8 | +import lombok.SneakyThrows; | ||
| 9 | +import org.hibernate.ObjectNotFoundException; | ||
| 10 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 11 | +import org.springframework.stereotype.Service; | ||
| 12 | + | ||
| 13 | +@Service | ||
| 14 | +public class LoginClientService { | ||
| 15 | + @Autowired | ||
| 16 | + EvaluatorService evaluatorService; | ||
| 17 | + | ||
| 18 | + @Autowired | ||
| 19 | + AdminService adminService; | ||
| 20 | + | ||
| 21 | + PasswordUtil<Evaluator> passwordUtilEvaluator = new PasswordUtil<>(); | ||
| 22 | + PasswordUtil<Admin> passwordUtilAdmin = new PasswordUtil<>(); | ||
| 23 | + | ||
| 24 | + @SneakyThrows | ||
| 25 | + public Boolean verifyEvaluators(String login, String rawPassword) { | ||
| 26 | + Evaluator evaluator; | ||
| 27 | + | ||
| 28 | + try { | ||
| 29 | + evaluator = evaluatorService.findByLogin(login); | ||
| 30 | + } catch (ObjectNotFoundException e) { | ||
| 31 | + throw new InvalidLoginUserException(); | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + if (!passwordUtilEvaluator.isEqualsPasswords(rawPassword, evaluator.getPassword())) { | ||
| 35 | + throw new InvalidPasswordUserException(); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + return true; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @SneakyThrows | ||
| 42 | + public Boolean generateLoginTokenByAdmins(String login, String rawPassword) { | ||
| 43 | + Admin admin; | ||
| 44 | + | ||
| 45 | + try { | ||
| 46 | + admin = adminService.findByLogin(login); | ||
| 47 | + } catch (ObjectNotFoundException e) { | ||
| 48 | + throw new InvalidLoginUserException(); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + if (!passwordUtilEvaluator.isEqualsPasswords(rawPassword, admin.getPassword())) { | ||
| 52 | + throw new InvalidPasswordUserException(); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + return true; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + @SneakyThrows | ||
| 59 | + public Integer getAdminId(String login) { | ||
| 60 | + try { | ||
| 61 | + Admin admin = adminService.findByLogin(login); | ||
| 62 | + return admin.getId(); | ||
| 63 | + } catch (ObjectNotFoundException e) { | ||
| 64 | + throw new InvalidLoginUserException(); | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @SneakyThrows | ||
| 69 | + public Integer getEvaluatorId(String login) { | ||
| 70 | + try { | ||
| 71 | + Evaluator evaluator = evaluatorService.findByLogin(login); | ||
| 72 | + return evaluator.getId(); | ||
| 73 | + } catch (ObjectNotFoundException e) { | ||
| 74 | + throw new InvalidLoginUserException(); | ||
| 75 | + } | ||
| 76 | + } | ||
| 77 | +} |
codigos/backend/src/main/java/com/srh/api/service/ProjectService.java
| 1 | package com.srh.api.service; | 1 | package com.srh.api.service; |
| 2 | 2 | ||
| 3 | import com.srh.api.error.exception.ChangeRootRelationException; | 3 | import com.srh.api.error.exception.ChangeRootRelationException; |
| 4 | -import com.srh.api.model.Admin; | ||
| 5 | -import com.srh.api.model.Project; | 4 | +import com.srh.api.model.*; |
| 6 | import com.srh.api.repository.ProjectRepository; | 5 | import com.srh.api.repository.ProjectRepository; |
| 7 | import lombok.SneakyThrows; | 6 | import lombok.SneakyThrows; |
| 8 | import org.hibernate.ObjectNotFoundException; | 7 | import org.hibernate.ObjectNotFoundException; |
| @@ -11,6 +10,8 @@ import org.springframework.data.domain.Page; | @@ -11,6 +10,8 @@ import org.springframework.data.domain.Page; | ||
| 11 | import org.springframework.data.domain.Pageable; | 10 | import org.springframework.data.domain.Pageable; |
| 12 | import org.springframework.stereotype.Service; | 11 | import org.springframework.stereotype.Service; |
| 13 | 12 | ||
| 13 | +import java.util.ArrayList; | ||
| 14 | +import java.util.List; | ||
| 14 | import java.util.Optional; | 15 | import java.util.Optional; |
| 15 | 16 | ||
| 16 | @Service | 17 | @Service |
| @@ -57,4 +58,55 @@ public class ProjectService { | @@ -57,4 +58,55 @@ public class ProjectService { | ||
| 57 | find(id); | 58 | find(id); |
| 58 | projectRepository.deleteById(id); | 59 | projectRepository.deleteById(id); |
| 59 | } | 60 | } |
| 61 | + | ||
| 62 | + public List<Item> listItensByProject(Integer projectId) { | ||
| 63 | + Project project = find(projectId); | ||
| 64 | + return project.getItens(); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + public List<Recommendation> listRecommendationsByProject(Integer projectId) { | ||
| 68 | + List<Item> itens = listItensByProject(projectId); | ||
| 69 | + List<Recommendation> recommendations = new ArrayList<>(); | ||
| 70 | + | ||
| 71 | + for (Item item : itens) { | ||
| 72 | + recommendations.addAll(item.getRecommendations()); | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + return recommendations; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + public List<ItemRating> listItemRatingsByProject(Integer projectId) { | ||
| 79 | + List<Item> itens = listItensByProject(projectId); | ||
| 80 | + List<ItemRating> itemRatings = new ArrayList<>(); | ||
| 81 | + | ||
| 82 | + for (Item item : itens) { | ||
| 83 | + itemRatings.addAll(item.getItemRatings()); | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + return itemRatings; | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + public List<Tag> listTagsByProject(Integer projectId) { | ||
| 90 | + List<Item> itens = listItensByProject(projectId); | ||
| 91 | + List<Tag> tags = new ArrayList<>(); | ||
| 92 | + | ||
| 93 | + for (Item item : itens) { | ||
| 94 | + tags.addAll(item.getTags()); | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + return tags; | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + public List<TypeItem> listTypeItensByProject(Integer projectId) { | ||
| 101 | + List<Item> itens = listItensByProject(projectId); | ||
| 102 | + List<TypeItem> typeItems = new ArrayList<>(); | ||
| 103 | + | ||
| 104 | + for (Item item : itens) { | ||
| 105 | + if (item.getTypeItem() != null) { | ||
| 106 | + typeItems.add(item.getTypeItem()); | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + return typeItems; | ||
| 111 | + } | ||
| 60 | } | 112 | } |
codigos/backend/src/main/java/com/srh/api/service/RecommendationService.java
| 1 | package com.srh.api.service; | 1 | package com.srh.api.service; |
| 2 | 2 | ||
| 3 | +import com.srh.api.algorithms.AlgorithmCalc; | ||
| 4 | +import com.srh.api.algorithms.AlgorithmStrategy; | ||
| 5 | +import com.srh.api.algorithms.structure.RecommendationsByUser; | ||
| 6 | +import com.srh.api.dto.resource.RecommendationForm; | ||
| 7 | +import com.srh.api.model.Evaluator; | ||
| 3 | import com.srh.api.model.Recommendation; | 8 | import com.srh.api.model.Recommendation; |
| 4 | import com.srh.api.repository.RecommendationRepository; | 9 | import com.srh.api.repository.RecommendationRepository; |
| 5 | import org.hibernate.ObjectNotFoundException; | 10 | import org.hibernate.ObjectNotFoundException; |
| @@ -8,6 +13,8 @@ import org.springframework.data.domain.Page; | @@ -8,6 +13,8 @@ import org.springframework.data.domain.Page; | ||
| 8 | import org.springframework.data.domain.Pageable; | 13 | import org.springframework.data.domain.Pageable; |
| 9 | import org.springframework.stereotype.Service; | 14 | import org.springframework.stereotype.Service; |
| 10 | 15 | ||
| 16 | +import java.util.ArrayList; | ||
| 17 | +import java.util.List; | ||
| 11 | import java.util.Optional; | 18 | import java.util.Optional; |
| 12 | 19 | ||
| 13 | @Service | 20 | @Service |
| @@ -41,4 +48,9 @@ public class RecommendationService { | @@ -41,4 +48,9 @@ public class RecommendationService { | ||
| 41 | find(id); | 48 | find(id); |
| 42 | recommendationRepository.deleteById(id); | 49 | recommendationRepository.deleteById(id); |
| 43 | } | 50 | } |
| 51 | + | ||
| 52 | + public List<RecommendationsByUser> generateRecommendation(RecommendationForm recommendationInfo) { | ||
| 53 | + AlgorithmCalc algorithm = AlgorithmStrategy.findInstance(recommendationInfo.getAlgorithmId()); | ||
| 54 | + return algorithm.calc(recommendationInfo); | ||
| 55 | + } | ||
| 44 | } | 56 | } |
codigos/backend/src/main/java/com/srh/api/utils/PasswordUtil.java
| @@ -23,6 +23,10 @@ public class PasswordUtil<T extends User> { | @@ -23,6 +23,10 @@ public class PasswordUtil<T extends User> { | ||
| 23 | return encodedPasswordForUser(newUser, newRawPassword); | 23 | return encodedPasswordForUser(newUser, newRawPassword); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | + public boolean isEqualsPasswords(String rawPassword, String encodedPassword) { | ||
| 27 | + return BcriptyUtil.compareValues(rawPassword, encodedPassword); | ||
| 28 | + } | ||
| 29 | + | ||
| 26 | private T encodedPasswordForUser(T user, String newRawPassword) { | 30 | private T encodedPasswordForUser(T user, String newRawPassword) { |
| 27 | String encodedPassword = BcriptyUtil.encripty(newRawPassword); | 31 | String encodedPassword = BcriptyUtil.encripty(newRawPassword); |
| 28 | user.setPassword(encodedPassword); | 32 | user.setPassword(encodedPassword); |
| @@ -40,8 +44,4 @@ public class PasswordUtil<T extends User> { | @@ -40,8 +44,4 @@ public class PasswordUtil<T extends User> { | ||
| 40 | throw new NotEqualsPasswordException("A senha antiga não confere com a cadastrada"); | 44 | throw new NotEqualsPasswordException("A senha antiga não confere com a cadastrada"); |
| 41 | } | 45 | } |
| 42 | } | 46 | } |
| 43 | - | ||
| 44 | - private boolean isEqualsPasswords(String rawPassword, String encodedPassword) { | ||
| 45 | - return BcriptyUtil.compareValues(rawPassword, encodedPassword); | ||
| 46 | - } | ||
| 47 | } | 47 | } |
codigos/backend/src/main/resources/application.properties
| 1 | # Profile | 1 | # Profile |
| 2 | -spring.profiles.active=test | 2 | +spring.profiles.active=dev |
| 3 | 3 | ||
| 4 | # jwt | 4 | # jwt |
| 5 | -srh.jwt.secret=A+X;fTJP&Pd,TD9dwVq(hsHX,ya^<wsD_UK7L+@=S;{'CydP]{v@}G'b>et;yz$*\yL5S8EJN:%P:X%H9>#nYLrX}@\s?CQcpspH,2emzBc!Q[V'AYa~uzF8WR~AUrMzxp/V$9([S9X#zj/CH('#]B_Hc+%fGhe27YB;^j4\Xk=Ju"Ap~_&<L;=!Z;!,2UP;!hF3P]j85#*`&T]/kB/W^6$v~u6qpejL>kY^f)sy4:qTq_Ec!-z!@aAp~sLKGU>$ | 5 | +srh.jwt.secret=VGFrZSBPbiBNZSBUYWtlIE1lIE9u |
| 6 | srh.jwt.expiration=86400000 | 6 | srh.jwt.expiration=86400000 |
| 7 | 7 | ||
| 8 | # actuator | 8 | # actuator |
| @@ -14,3 +14,10 @@ info.app.version=@project.version@ | @@ -14,3 +14,10 @@ info.app.version=@project.version@ | ||
| 14 | info.app.encoding=@project.build.sourceEncoding@ | 14 | info.app.encoding=@project.build.sourceEncoding@ |
| 15 | info.app.java.version=@java.version@ | 15 | info.app.java.version=@java.version@ |
| 16 | 16 | ||
| 17 | |||
| 18 | +spring.mail.host=smtp.mailtrap.io | ||
| 19 | +spring.mail.port=587 | ||
| 20 | +spring.mail.username=f51ab4b9bfc3ec | ||
| 21 | +spring.mail.password=d6a3cbd03b13ae | ||
| 22 | +spring.mail.properties.mail.smtp.auth=true | ||
| 23 | +spring.mail.properties.mail.smtp.starttls.enable=true | ||
| 17 | \ No newline at end of file | 24 | \ No newline at end of file |
codigos/frontend/.eslintrc.js
| 1 | +const { resolve } = require('path'); | ||
| 2 | + | ||
| 1 | module.exports = { | 3 | module.exports = { |
| 2 | // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy | 4 | // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy |
| 3 | // This option interrupts the configuration hierarchy at this file | 5 | // This option interrupts the configuration hierarchy at this file |
| 4 | // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos) | 6 | // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos) |
| 5 | root: true, | 7 | root: true, |
| 6 | 8 | ||
| 9 | + // https://eslint.vuejs.org/user-guide/#how-to-use-custom-parser | ||
| 10 | + // Must use parserOptions instead of "parser" to allow vue-eslint-parser to keep working | ||
| 11 | + // `parser: 'vue-eslint-parser'` is already included with any 'plugin:vue/**' config and should be omitted | ||
| 7 | parserOptions: { | 12 | parserOptions: { |
| 8 | - parser: 'babel-eslint', | 13 | + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#configuration |
| 14 | + // https://github.com/TypeStrong/fork-ts-checker-webpack-plugin#eslint | ||
| 15 | + // Needed to make the parser take into account 'vue' files | ||
| 16 | + extraFileExtensions: ['.vue'], | ||
| 17 | + parser: '@typescript-eslint/parser', | ||
| 18 | + project: resolve(__dirname, './tsconfig.json'), | ||
| 19 | + tsconfigRootDir: __dirname, | ||
| 9 | ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features | 20 | ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features |
| 10 | - sourceType: 'module' // Allows for the use of imports | ||
| 11 | - }, | ||
| 12 | - | ||
| 13 | - env: { | ||
| 14 | - browser: true | 21 | + sourceType: 'module', // Allows for the use of imports |
| 15 | }, | 22 | }, |
| 16 | 23 | ||
| 17 | // Rules order is important, please avoid shuffling them | 24 | // Rules order is important, please avoid shuffling them |
| 18 | extends: [ | 25 | extends: [ |
| 19 | // Base ESLint recommended rules | 26 | // Base ESLint recommended rules |
| 20 | - // 'eslint:recommended', | 27 | + 'eslint:recommended', |
| 21 | 28 | ||
| 29 | + // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage | ||
| 30 | + // ESLint typescript rules | ||
| 31 | + 'plugin:@typescript-eslint/eslint-recommended', | ||
| 32 | + 'plugin:@typescript-eslint/recommended', | ||
| 33 | + // consider disabling this class of rules if linting takes too long | ||
| 34 | + 'plugin:@typescript-eslint/recommended-requiring-type-checking', | ||
| 22 | 35 | ||
| 23 | - // Uncomment any of the lines below to choose desired strictness, | ||
| 24 | - // but leave only one uncommented! | ||
| 25 | - // See https://eslint.vuejs.org/rules/#available-rules | ||
| 26 | - 'plugin:vue/essential', // Priority A: Essential (Error Prevention) | ||
| 27 | - // 'plugin:vue/strongly-recommended', // Priority B: Strongly Recommended (Improving Readability) | ||
| 28 | - // 'plugin:vue/recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead) | ||
| 29 | - | ||
| 30 | - 'standard' | 36 | + // https://eslint.vuejs.org/rules/#priority-a-essential-error-prevention |
| 37 | + // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules | ||
| 38 | + 'plugin:vue/essential', | ||
| 31 | 39 | ||
| 40 | + // --- ONLY WHEN USING PRETTIER --- | ||
| 41 | + // https://github.com/prettier/eslint-config-prettier#installation | ||
| 42 | + // usage with Prettier, provided by 'eslint-config-prettier'. | ||
| 43 | + 'prettier', | ||
| 44 | + 'prettier/@typescript-eslint', | ||
| 45 | + 'prettier/vue', | ||
| 32 | ], | 46 | ], |
| 33 | 47 | ||
| 34 | plugins: [ | 48 | plugins: [ |
| 49 | + // required to apply rules which need type information | ||
| 50 | + '@typescript-eslint', | ||
| 51 | + | ||
| 35 | // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-file | 52 | // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-file |
| 36 | // required to lint *.vue files | 53 | // required to lint *.vue files |
| 37 | 'vue', | 54 | 'vue', |
| 38 | - | ||
| 39 | ], | 55 | ], |
| 40 | 56 | ||
| 41 | - globals: { | ||
| 42 | - ga: true, // Google Analytics | ||
| 43 | - cordova: true, | ||
| 44 | - __statics: true, | ||
| 45 | - process: true, | ||
| 46 | - Capacitor: true, | ||
| 47 | - chrome: true | ||
| 48 | - }, | ||
| 49 | - | ||
| 50 | // add your custom rules here | 57 | // add your custom rules here |
| 51 | rules: { | 58 | rules: { |
| 52 | - // allow async-await | ||
| 53 | - 'generator-star-spacing': 'off', | ||
| 54 | - // allow paren-less arrow functions | ||
| 55 | - 'arrow-parens': 'off', | ||
| 56 | - 'one-var': 'off', | ||
| 57 | - | ||
| 58 | - 'import/first': 'off', | ||
| 59 | - 'import/named': 'error', | ||
| 60 | - 'import/namespace': 'error', | ||
| 61 | - 'import/default': 'error', | ||
| 62 | - 'import/export': 'error', | ||
| 63 | - 'import/extensions': 'off', | ||
| 64 | - 'import/no-unresolved': 'off', | ||
| 65 | - 'import/no-extraneous-dependencies': 'off', | ||
| 66 | - 'prefer-promise-reject-errors': 'off', | ||
| 67 | - | 59 | + // others rules... |
| 68 | 60 | ||
| 69 | - // allow debugger during development only | ||
| 70 | - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' | 61 | + // TypeScript |
| 62 | + 'quotes': ['warn', 'single'], | ||
| 63 | + '@typescript-eslint/explicit-function-return-type': 'off', | ||
| 71 | } | 64 | } |
| 72 | } | 65 | } |
codigos/frontend/.vscode/settings.json
| @@ -2,6 +2,6 @@ | @@ -2,6 +2,6 @@ | ||
| 2 | "vetur.validation.template": false, | 2 | "vetur.validation.template": false, |
| 3 | "vetur.format.enable": false, | 3 | "vetur.format.enable": false, |
| 4 | "eslint.validate": ["javascript", "javascriptreact", "typescript", "vue"], | 4 | "eslint.validate": ["javascript", "javascriptreact", "typescript", "vue"], |
| 5 | - | 5 | + "typescript.tsdk": "node_modules/typescript/lib", |
| 6 | "vetur.experimental.templateInterpolationService": true | 6 | "vetur.experimental.templateInterpolationService": true |
| 7 | } | 7 | } |
codigos/frontend/README.md
codigos/frontend/babel.config.js
codigos/frontend/package.json
| 1 | { | 1 | { |
| 2 | - "name": "srh-frontend-admin", | 2 | + "name": "srh-admin-client", |
| 3 | "version": "0.0.1", | 3 | "version": "0.0.1", |
| 4 | - "description": "A admin client from System Recommendation Hybrid", | ||
| 5 | - "productName": "SRH Frontend Admin", | 4 | + "description": "A client for SRH", |
| 5 | + "productName": "SRH Admin Client", | ||
| 6 | "author": "Herik dos Santos Lorenção <heriksantoslorencao@gmail.com>", | 6 | "author": "Herik dos Santos Lorenção <heriksantoslorencao@gmail.com>", |
| 7 | "private": true, | 7 | "private": true, |
| 8 | "scripts": { | 8 | "scripts": { |
| 9 | "lint": "eslint --ext .js,.vue ./", | 9 | "lint": "eslint --ext .js,.vue ./", |
| 10 | "test": "echo \"No test specified\" && exit 0", | 10 | "test": "echo \"No test specified\" && exit 0", |
| 11 | - "dev": "quasar dev --port 3000", | 11 | + "dev": "quasar dev", |
| 12 | "build": "quasar build", | 12 | "build": "quasar build", |
| 13 | "build:pwa": "quasar build -m pwa" | 13 | "build:pwa": "quasar build -m pwa" |
| 14 | }, | 14 | }, |
| 15 | "dependencies": { | 15 | "dependencies": { |
| 16 | "@quasar/extras": "^1.0.0", | 16 | "@quasar/extras": "^1.0.0", |
| 17 | - "axios": "^0.18.1", | 17 | + "@types/jsonwebtoken": "^8.5.0", |
| 18 | + "axios": "^0.19.2", | ||
| 19 | + "chart.js": "^2.9.3", | ||
| 18 | "core-js": "^3.6.5", | 20 | "core-js": "^3.6.5", |
| 21 | + "jsonwebtoken": "^8.5.1", | ||
| 19 | "quasar": "^1.0.0", | 22 | "quasar": "^1.0.0", |
| 20 | - "vue-mc": "^0.6.0" | 23 | + "vue-chartjs": "^3.5.0", |
| 24 | + "vue-class-component": "^7.2.2", | ||
| 25 | + "vue-property-decorator": "^8.3.0" | ||
| 21 | }, | 26 | }, |
| 22 | "devDependencies": { | 27 | "devDependencies": { |
| 23 | "@quasar/app": "^2.0.0", | 28 | "@quasar/app": "^2.0.0", |
| 29 | + "@types/node": "^10.17.15", | ||
| 30 | + "@typescript-eslint/eslint-plugin": "^3.3.0", | ||
| 31 | + "@typescript-eslint/parser": "^3.3.0", | ||
| 24 | "babel-eslint": "^10.0.1", | 32 | "babel-eslint": "^10.0.1", |
| 25 | "eslint": "^6.8.0", | 33 | "eslint": "^6.8.0", |
| 26 | - "eslint-config-standard": "^14.1.0", | 34 | + "eslint-config-airbnb-base": "^14.0.0", |
| 27 | "eslint-loader": "^3.0.3", | 35 | "eslint-loader": "^3.0.3", |
| 28 | - "eslint-plugin-import": "^2.14.0", | ||
| 29 | - "eslint-plugin-node": "^11.0.0", | ||
| 30 | - "eslint-plugin-promise": "^4.0.1", | ||
| 31 | - "eslint-plugin-standard": "^4.0.0", | 36 | + "eslint-plugin-import": "^2.20.1", |
| 32 | "eslint-plugin-vue": "^6.1.2" | 37 | "eslint-plugin-vue": "^6.1.2" |
| 33 | }, | 38 | }, |
| 34 | "browserslist": [ | 39 | "browserslist": [ |
codigos/frontend/quasar.conf.js
| @@ -6,190 +6,206 @@ | @@ -6,190 +6,206 @@ | ||
| 6 | // Configuration for your app | 6 | // Configuration for your app |
| 7 | // https://quasar.dev/quasar-cli/quasar-conf-js | 7 | // https://quasar.dev/quasar-cli/quasar-conf-js |
| 8 | /* eslint-env node */ | 8 | /* eslint-env node */ |
| 9 | - | ||
| 10 | -module.exports = function (/* ctx */) { | ||
| 11 | - return { | ||
| 12 | - // https://quasar.dev/quasar-cli/supporting-ts | ||
| 13 | - supportTS: false, | ||
| 14 | - | ||
| 15 | - // https://quasar.dev/quasar-cli/prefetch-feature | ||
| 16 | - // preFetch: true, | ||
| 17 | - | ||
| 18 | - // app boot file (/src/boot) | ||
| 19 | - // --> boot files are part of "main.js" | ||
| 20 | - // https://quasar.dev/quasar-cli/boot-files | ||
| 21 | - boot: [ | ||
| 22 | - | ||
| 23 | - 'axios' | ||
| 24 | - ], | ||
| 25 | - | ||
| 26 | - // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css | ||
| 27 | - css: [ | ||
| 28 | - 'app.scss' | ||
| 29 | - ], | ||
| 30 | - | ||
| 31 | - // https://github.com/quasarframework/quasar/tree/dev/extras | ||
| 32 | - extras: [ | ||
| 33 | - // 'ionicons-v4', | ||
| 34 | - // 'mdi-v5', | ||
| 35 | - // 'fontawesome-v5', | ||
| 36 | - // 'eva-icons', | ||
| 37 | - // 'themify', | ||
| 38 | - // 'line-awesome', | ||
| 39 | - // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! | ||
| 40 | - | ||
| 41 | - 'roboto-font', // optional, you are not bound to it | ||
| 42 | - 'material-icons' // optional, you are not bound to it | ||
| 43 | - ], | ||
| 44 | - | ||
| 45 | - // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build | ||
| 46 | - build: { | ||
| 47 | - vueRouterMode: 'hash', // available values: 'hash', 'history' | ||
| 48 | - | ||
| 49 | - // transpile: false, | ||
| 50 | - | ||
| 51 | - // Add dependencies for transpiling with Babel (Array of string/regex) | ||
| 52 | - // (from node_modules, which are by default not transpiled). | ||
| 53 | - // Applies only if "transpile" is set to true. | ||
| 54 | - // transpileDependencies: [], | ||
| 55 | - | ||
| 56 | - // rtl: false, // https://quasar.dev/options/rtl-support | ||
| 57 | - // preloadChunks: true, | ||
| 58 | - // showProgress: false, | ||
| 59 | - // gzip: true, | ||
| 60 | - // analyze: true, | ||
| 61 | - | ||
| 62 | - // Options below are automatically set depending on the env, set them if you want to override | ||
| 63 | - // extractCSS: false, | ||
| 64 | - | ||
| 65 | - // https://quasar.dev/quasar-cli/handling-webpack | ||
| 66 | - extendWebpack (cfg) { | 9 | +/* eslint func-names: 0 */ |
| 10 | +/* eslint global-require: 0 */ | ||
| 11 | +/* eslint-disable @typescript-eslint/no-var-requires */ | ||
| 12 | +const { configure } = require('quasar/wrappers'); | ||
| 13 | + | ||
| 14 | +module.exports = configure((ctx) => ({ | ||
| 15 | + // https://quasar.dev/quasar-cli/supporting-ts | ||
| 16 | + supportTS: { | ||
| 17 | + tsCheckerConfig: { | ||
| 18 | + eslint: true, | ||
| 19 | + }, | ||
| 20 | + }, | ||
| 21 | + | ||
| 22 | + // https://quasar.dev/quasar-cli/prefetch-feature | ||
| 23 | + // preFetch: true, | ||
| 24 | + | ||
| 25 | + // app boot file (/src/boot) | ||
| 26 | + // --> boot files are part of "main.js" | ||
| 27 | + // https://quasar.dev/quasar-cli/boot-files | ||
| 28 | + boot: [ | ||
| 29 | + 'loginRouteGuard', 'loginAdminRouteGuard' | ||
| 30 | + ], | ||
| 31 | + | ||
| 32 | + // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css | ||
| 33 | + css: [ | ||
| 34 | + 'app.scss', | ||
| 35 | + ], | ||
| 36 | + | ||
| 37 | + // https://github.com/quasarframework/quasar/tree/dev/extras | ||
| 38 | + extras: [ | ||
| 39 | + // 'ionicons-v4', | ||
| 40 | + // 'mdi-v5', | ||
| 41 | + 'fontawesome-v5', | ||
| 42 | + // 'eva-icons', | ||
| 43 | + // 'themify', | ||
| 44 | + // 'line-awesome', | ||
| 45 | + // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! | ||
| 46 | + | ||
| 47 | + 'roboto-font', // optional, you are not bound to it | ||
| 48 | + 'material-icons', // optional, you are not bound to it | ||
| 49 | + ], | ||
| 50 | + | ||
| 51 | + // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build | ||
| 52 | + build: { | ||
| 53 | + vueRouterMode: 'history', // available values: 'hash', 'history' | ||
| 54 | + | ||
| 55 | + // transpile: false, | ||
| 56 | + | ||
| 57 | + // Add dependencies for transpiling with Babel (Array of string/regex) | ||
| 58 | + // (from node_modules, which are by default not transpiled). | ||
| 59 | + // Applies only if "transpile" is set to true. | ||
| 60 | + // transpileDependencies: [], | ||
| 61 | + | ||
| 62 | + // rtl: false, // https://quasar.dev/options/rtl-support | ||
| 63 | + // preloadChunks: true, | ||
| 64 | + // showProgress: false, | ||
| 65 | + // gzip: true, | ||
| 66 | + // analyze: true, | ||
| 67 | + | ||
| 68 | + // Options below are automatically set depending on the env, set them if you want to override | ||
| 69 | + // extractCSS: false, | ||
| 70 | + | ||
| 71 | + // https://quasar.dev/quasar-cli/handling-webpack | ||
| 72 | + extendWebpack(cfg) { | ||
| 73 | + // linting is slow in TS projects, we execute it only for production builds | ||
| 74 | + if (ctx.prod) { | ||
| 67 | cfg.module.rules.push({ | 75 | cfg.module.rules.push({ |
| 68 | enforce: 'pre', | 76 | enforce: 'pre', |
| 69 | test: /\.(js|vue)$/, | 77 | test: /\.(js|vue)$/, |
| 70 | loader: 'eslint-loader', | 78 | loader: 'eslint-loader', |
| 71 | - exclude: /node_modules/ | ||
| 72 | - }) | 79 | + exclude: /node_modules/, |
| 80 | + }); | ||
| 73 | } | 81 | } |
| 74 | }, | 82 | }, |
| 83 | + }, | ||
| 75 | 84 | ||
| 76 | - // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer | ||
| 77 | - devServer: { | ||
| 78 | - https: false, | ||
| 79 | - port: 8080, | ||
| 80 | - open: true // opens browser window automatically | ||
| 81 | - }, | 85 | + // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer |
| 86 | + devServer: { | ||
| 87 | + https: false, | ||
| 88 | + port: 8080, | ||
| 89 | + open: true, // opens browser window automatically | ||
| 90 | + }, | ||
| 82 | 91 | ||
| 83 | - // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework | ||
| 84 | - framework: { | ||
| 85 | - iconSet: 'material-icons', // Quasar icon set | ||
| 86 | - lang: 'en-us', // Quasar language pack | ||
| 87 | - config: { | ||
| 88 | - notify: {} | ||
| 89 | - }, | ||
| 90 | - | ||
| 91 | - // Possible values for "importStrategy": | ||
| 92 | - // * 'auto' - (DEFAULT) Auto-import needed Quasar components & directives | ||
| 93 | - // * 'all' - Manually specify what to import | ||
| 94 | - importStrategy: 'auto', | ||
| 95 | - | ||
| 96 | - // Quasar plugins | ||
| 97 | - plugins: [ | ||
| 98 | - 'Notify' | ||
| 99 | - ] | ||
| 100 | - }, | 92 | + // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework |
| 93 | + framework: { | ||
| 94 | + iconSet: 'material-icons', // Quasar icon set | ||
| 95 | + lang: 'en-us', // Quasar language pack | ||
| 96 | + config: { | ||
| 101 | 97 | ||
| 102 | - // animations: 'all', // --- includes all animations | ||
| 103 | - // https://quasar.dev/options/animations | ||
| 104 | - animations: [], | ||
| 105 | - | ||
| 106 | - // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr | ||
| 107 | - ssr: { | ||
| 108 | - pwa: false | ||
| 109 | }, | 98 | }, |
| 110 | 99 | ||
| 111 | - // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa | ||
| 112 | - pwa: { | ||
| 113 | - workboxPluginMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest' | ||
| 114 | - workboxOptions: {}, // only for GenerateSW | ||
| 115 | - manifest: { | ||
| 116 | - name: 'SRH Frontend Admin', | ||
| 117 | - short_name: 'SRH Frontend Admin', | ||
| 118 | - description: 'A admin client from System Recommendation Hybrid', | ||
| 119 | - display: 'standalone', | ||
| 120 | - orientation: 'portrait', | ||
| 121 | - background_color: '#ffffff', | ||
| 122 | - theme_color: '#027be3', | ||
| 123 | - icons: [ | ||
| 124 | - { | ||
| 125 | - src: 'icons/icon-128x128.png', | ||
| 126 | - sizes: '128x128', | ||
| 127 | - type: 'image/png' | ||
| 128 | - }, | ||
| 129 | - { | ||
| 130 | - src: 'icons/icon-192x192.png', | ||
| 131 | - sizes: '192x192', | ||
| 132 | - type: 'image/png' | ||
| 133 | - }, | ||
| 134 | - { | ||
| 135 | - src: 'icons/icon-256x256.png', | ||
| 136 | - sizes: '256x256', | ||
| 137 | - type: 'image/png' | ||
| 138 | - }, | ||
| 139 | - { | ||
| 140 | - src: 'icons/icon-384x384.png', | ||
| 141 | - sizes: '384x384', | ||
| 142 | - type: 'image/png' | ||
| 143 | - }, | ||
| 144 | - { | ||
| 145 | - src: 'icons/icon-512x512.png', | ||
| 146 | - sizes: '512x512', | ||
| 147 | - type: 'image/png' | ||
| 148 | - } | ||
| 149 | - ] | ||
| 150 | - } | 100 | + // Possible values for "importStrategy": |
| 101 | + // * 'auto' - (DEFAULT) Auto-import needed Quasar components & directives | ||
| 102 | + // * 'all' - Manually specify what to import | ||
| 103 | + importStrategy: 'auto', | ||
| 104 | + cssAddon: true, | ||
| 105 | + | ||
| 106 | + // For special cases outside of where "auto" importStrategy can have an impact | ||
| 107 | + // (like functional components as one of the examples), | ||
| 108 | + // you can manually specify Quasar components/directives to be available everywhere: | ||
| 109 | + // | ||
| 110 | + // components: [], | ||
| 111 | + // directives: [], | ||
| 112 | + | ||
| 113 | + // Quasar plugins | ||
| 114 | + plugins: [ | ||
| 115 | + 'Notify' | ||
| 116 | + ], | ||
| 117 | + }, | ||
| 118 | + | ||
| 119 | + // animations: 'all', // --- includes all animations | ||
| 120 | + // https://quasar.dev/options/animations | ||
| 121 | + animations: [], | ||
| 122 | + | ||
| 123 | + // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr | ||
| 124 | + ssr: { | ||
| 125 | + pwa: false, | ||
| 126 | + }, | ||
| 127 | + | ||
| 128 | + // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa | ||
| 129 | + pwa: { | ||
| 130 | + workboxPluginMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest' | ||
| 131 | + workboxOptions: {}, // only for GenerateSW | ||
| 132 | + manifest: { | ||
| 133 | + name: 'SRH Admin Client', | ||
| 134 | + short_name: 'SRH Admin Client', | ||
| 135 | + description: 'A client for SRH', | ||
| 136 | + display: 'standalone', | ||
| 137 | + orientation: 'portrait', | ||
| 138 | + background_color: '#ffffff', | ||
| 139 | + theme_color: '#027be3', | ||
| 140 | + icons: [ | ||
| 141 | + { | ||
| 142 | + src: 'icons/icon-128x128.png', | ||
| 143 | + sizes: '128x128', | ||
| 144 | + type: 'image/png', | ||
| 145 | + }, | ||
| 146 | + { | ||
| 147 | + src: 'icons/icon-192x192.png', | ||
| 148 | + sizes: '192x192', | ||
| 149 | + type: 'image/png', | ||
| 150 | + }, | ||
| 151 | + { | ||
| 152 | + src: 'icons/icon-256x256.png', | ||
| 153 | + sizes: '256x256', | ||
| 154 | + type: 'image/png', | ||
| 155 | + }, | ||
| 156 | + { | ||
| 157 | + src: 'icons/icon-384x384.png', | ||
| 158 | + sizes: '384x384', | ||
| 159 | + type: 'image/png', | ||
| 160 | + }, | ||
| 161 | + { | ||
| 162 | + src: 'icons/icon-512x512.png', | ||
| 163 | + sizes: '512x512', | ||
| 164 | + type: 'image/png', | ||
| 165 | + }, | ||
| 166 | + ], | ||
| 151 | }, | 167 | }, |
| 168 | + }, | ||
| 152 | 169 | ||
| 153 | - // Full list of options: https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova | ||
| 154 | - cordova: { | ||
| 155 | - // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing | ||
| 156 | - }, | 170 | + // Full list of options: https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova |
| 171 | + cordova: { | ||
| 172 | + // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing | ||
| 173 | + }, | ||
| 157 | 174 | ||
| 158 | - // Full list of options: https://quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor | ||
| 159 | - capacitor: { | ||
| 160 | - hideSplashscreen: true | ||
| 161 | - }, | 175 | + // Full list of options: https://quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor |
| 176 | + capacitor: { | ||
| 177 | + hideSplashscreen: true, | ||
| 178 | + }, | ||
| 162 | 179 | ||
| 163 | - // Full list of options: https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron | ||
| 164 | - electron: { | ||
| 165 | - bundler: 'packager', // 'packager' or 'builder' | 180 | + // Full list of options: https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron |
| 181 | + electron: { | ||
| 182 | + bundler: 'packager', // 'packager' or 'builder' | ||
| 166 | 183 | ||
| 167 | - packager: { | ||
| 168 | - // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options | 184 | + packager: { |
| 185 | + // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options | ||
| 169 | 186 | ||
| 170 | - // OS X / Mac App Store | ||
| 171 | - // appBundleId: '', | ||
| 172 | - // appCategoryType: '', | ||
| 173 | - // osxSign: '', | ||
| 174 | - // protocol: 'myapp://path', | 187 | + // OS X / Mac App Store |
| 188 | + // appBundleId: '', | ||
| 189 | + // appCategoryType: '', | ||
| 190 | + // osxSign: '', | ||
| 191 | + // protocol: 'myapp://path', | ||
| 175 | 192 | ||
| 176 | - // Windows only | ||
| 177 | - // win32metadata: { ... } | ||
| 178 | - }, | 193 | + // Windows only |
| 194 | + // win32metadata: { ... } | ||
| 195 | + }, | ||
| 179 | 196 | ||
| 180 | - builder: { | ||
| 181 | - // https://www.electron.build/configuration/configuration | 197 | + builder: { |
| 198 | + // https://www.electron.build/configuration/configuration | ||
| 182 | 199 | ||
| 183 | - appId: 'srh-frontend-admin' | ||
| 184 | - }, | 200 | + appId: 'srh-admin-client', |
| 201 | + }, | ||
| 185 | 202 | ||
| 186 | - // More info: https://quasar.dev/quasar-cli/developing-electron-apps/node-integration | ||
| 187 | - nodeIntegration: true, | 203 | + // More info: https://quasar.dev/quasar-cli/developing-electron-apps/node-integration |
| 204 | + nodeIntegration: true, | ||
| 188 | 205 | ||
| 189 | - extendWebpack (/* cfg */) { | ||
| 190 | - // do something with Electron main process Webpack cfg | ||
| 191 | - // chainWebpack also available besides this extendWebpack | ||
| 192 | - } | ||
| 193 | - } | ||
| 194 | - } | ||
| 195 | -} | 206 | + extendWebpack(/* cfg */) { |
| 207 | + // do something with Electron main process Webpack cfg | ||
| 208 | + // chainWebpack also available besides this extendWebpack | ||
| 209 | + }, | ||
| 210 | + }, | ||
| 211 | +})); |
codigos/frontend/src/App.vue
| 1 | <template> | 1 | <template> |
| 2 | <div id="q-app"> | 2 | <div id="q-app"> |
| 3 | - <router-view/> | 3 | + <router-view /> |
| 4 | </div> | 4 | </div> |
| 5 | </template> | 5 | </template> |
| 6 | +<script lang="ts"> | ||
| 7 | +import { Vue, Component } from 'vue-property-decorator'; | ||
| 6 | 8 | ||
| 7 | -<script> | ||
| 8 | -export default { | ||
| 9 | - name: 'App' | ||
| 10 | -} | 9 | +@Component |
| 10 | +export default class App extends Vue {} | ||
| 11 | </script> | 11 | </script> |
68.3 KB
| @@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
| 1 | +import AuthApiService from "../services/AuthApiService"; | ||
| 2 | +import Login from "../models/Login"; | ||
| 3 | + | ||
| 4 | +export default async ({ router, store }) => { | ||
| 5 | + router.beforeEach((to, from, next) => { | ||
| 6 | + const idUsuario = store.getters['login/getIdUsuario']; | ||
| 7 | + | ||
| 8 | + if (idUsuario === null && to.path !== '/login') { | ||
| 9 | + const authApiService = new AuthApiService(); | ||
| 10 | + const token = store.getters['login/getToken'] | ||
| 11 | + | ||
| 12 | + if (authApiService.verifyToken(token)) next(); | ||
| 13 | + | ||
| 14 | + const loginForm = new Login('admin', '123456'); | ||
| 15 | + authApiService.generateJwt(loginForm).then(resp => { | ||
| 16 | + store.commit('login/defineToken', resp); | ||
| 17 | + }); | ||
| 18 | + | ||
| 19 | + next('/login'); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + next(); | ||
| 23 | + }) | ||
| 24 | +} |
| @@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
| 1 | +import AuthApiService from "src/services/AuthApiService"; | ||
| 2 | +import Login from '../models/Login'; | ||
| 3 | + | ||
| 4 | +export default async({ router, store }) => { | ||
| 5 | + router.beforeEach((to, from, next) => { | ||
| 6 | + const token = store.getters['login/getToken']; | ||
| 7 | + const authApiService = new AuthApiService(); | ||
| 8 | + | ||
| 9 | + if (authApiService.verifyToken(token)) next(); | ||
| 10 | + | ||
| 11 | + const loginForm = new Login('admin', '123456'); | ||
| 12 | + authApiService.generateJwt(loginForm).then(resp => { | ||
| 13 | + store.commit('login/defineToken', resp); | ||
| 14 | + }); | ||
| 15 | + | ||
| 16 | + next(); | ||
| 17 | + }) | ||
| 18 | +} |
| @@ -0,0 +1,33 @@ | @@ -0,0 +1,33 @@ | ||
| 1 | +<template> | ||
| 2 | + <q-list> | ||
| 3 | + <q-item class="item-list-menu column"> | ||
| 4 | + <ItemMenu v-for="item in menuList" :key="item.id" :path="item.path" :label="item.label" | ||
| 5 | + :icon="item.icon" :selectedItemMenu="selectedItemMenu" :items="item.subitems" | ||
| 6 | + @selectedItem="changeSelectedItemMenu" /> | ||
| 7 | + </q-item> | ||
| 8 | + </q-list> | ||
| 9 | +</template> | ||
| 10 | + | ||
| 11 | +<script lang="ts"> | ||
| 12 | +import {Vue, Component} from 'vue-property-decorator'; | ||
| 13 | +import ItemMenu from "./components/ItemMenu.vue"; | ||
| 14 | +import itemMenuList from '../../mixins/itemMenuList'; | ||
| 15 | + | ||
| 16 | +@Component({ | ||
| 17 | + components: {ItemMenu} | ||
| 18 | +}) | ||
| 19 | +export default class Menu extends Vue { | ||
| 20 | + readonly menuList = itemMenuList; | ||
| 21 | + selectedItemMenu = "" | ||
| 22 | + | ||
| 23 | + changeSelectedItemMenu(value: string) { | ||
| 24 | + this.selectedItemMenu = value; | ||
| 25 | + } | ||
| 26 | +} | ||
| 27 | +</script> | ||
| 28 | + | ||
| 29 | +<style lang="scss" scoped> | ||
| 30 | +.item-list-menu { | ||
| 31 | + padding: 0; | ||
| 32 | +} | ||
| 33 | +</style> |
codigos/frontend/src/components/menu/components/ItemMenu.vue
0 → 100644
| @@ -0,0 +1,137 @@ | @@ -0,0 +1,137 @@ | ||
| 1 | +<template> | ||
| 2 | + <div class="column"> | ||
| 3 | + <div class="column"> | ||
| 4 | + <q-item class="col-12" clickable @click="openSubMenuOrItem" :class="generateCssClass()"> | ||
| 5 | + <q-item-section class="col-2 icon"> | ||
| 6 | + <q-icon :name="icon"/> | ||
| 7 | + </q-item-section> | ||
| 8 | + <q-item-section class="col-10 justify-start label"> | ||
| 9 | + <q-item-label> | ||
| 10 | + {{ label }} | ||
| 11 | + </q-item-label> | ||
| 12 | + </q-item-section> | ||
| 13 | + </q-item> | ||
| 14 | + </div> | ||
| 15 | + <div class="column" v-show="items && subMenuVisible"> | ||
| 16 | + <SubItemMenu v-for="subitem in items" :icon="subitem.icon" :label="subitem.label" | ||
| 17 | + :path="subitem.path" :key="subitem.id" :selected-item-menu="selectedItemMenu" | ||
| 18 | + :itemId="itemId" @selectedItem="emitSelectedItem" | ||
| 19 | + /> | ||
| 20 | + </div> | ||
| 21 | + </div> | ||
| 22 | +</template> | ||
| 23 | + | ||
| 24 | +<script lang="ts"> | ||
| 25 | +import {Vue, Component, Prop, Emit} from 'vue-property-decorator'; | ||
| 26 | +import SubItemMenu from "components/menu/components/SubItemMenu.vue"; | ||
| 27 | +import {SubItem} from "src/models/models"; | ||
| 28 | + | ||
| 29 | +@Component({ | ||
| 30 | + components: {SubItemMenu} | ||
| 31 | +}) | ||
| 32 | +export default class ItemMenu extends Vue { | ||
| 33 | + @Prop({type: String, required: true}) | ||
| 34 | + readonly label !: string; | ||
| 35 | + | ||
| 36 | + @Prop({type: String, required: true}) | ||
| 37 | + readonly path !: string; | ||
| 38 | + | ||
| 39 | + @Prop({type: String, required: true}) | ||
| 40 | + readonly icon !: string; | ||
| 41 | + | ||
| 42 | + @Prop({type: String, required: true}) | ||
| 43 | + selectedItemMenu !: string; | ||
| 44 | + | ||
| 45 | + @Prop({type: Array, required: true}) | ||
| 46 | + readonly items !: SubItem[]; | ||
| 47 | + | ||
| 48 | + itemId = 0; | ||
| 49 | + subMenuVisible = false; | ||
| 50 | + | ||
| 51 | + get isSelectedItemMenu() { | ||
| 52 | + const isSelectedItem = this.selectedItemMenu === this.label || | ||
| 53 | + this.selectedItemMenu === this.path; | ||
| 54 | + | ||
| 55 | + let subItemSelected = false; | ||
| 56 | + | ||
| 57 | + this.items.forEach(subitem => { | ||
| 58 | + if (subitem.path === this.selectedItemMenu) | ||
| 59 | + subItemSelected = true; | ||
| 60 | + }) | ||
| 61 | + | ||
| 62 | + return isSelectedItem || subItemSelected; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @Emit('selectedItem') | ||
| 66 | + openSubMenuOrItem() { | ||
| 67 | + if (this.$route.path !== this.path) { | ||
| 68 | + this.$router.push(this.path) | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + // TODO: Pegar Item Id pelo Vuex e definir aqui | ||
| 72 | + // this.itemId = Vuex.get() | ||
| 73 | + | ||
| 74 | + this.subMenuVisible = !this.subMenuVisible; | ||
| 75 | + if (this.itemId) { | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + return this.path; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + @Emit('selectedItem') | ||
| 82 | + emitSelectedItem(event: any) { | ||
| 83 | + return event; | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + generateCssClass(): string { | ||
| 87 | + if (!this.isSelectedItemMenu) { | ||
| 88 | + this.subMenuVisible = false; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + return this.isSelectedItemMenu ? 'item-menu selected' : 'item-menu no-selected' | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + mounted() { | ||
| 95 | + this.itemId = this.$store.getters['navigationInfo/projectId']; | ||
| 96 | + } | ||
| 97 | +} | ||
| 98 | +</script> | ||
| 99 | + | ||
| 100 | +<style lang="scss" scoped> | ||
| 101 | +.item-menu { | ||
| 102 | + .icon { | ||
| 103 | + font-size: $font-h1; | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + .label { | ||
| 107 | + font-size: $font-normal; | ||
| 108 | + } | ||
| 109 | +} | ||
| 110 | + | ||
| 111 | +.no-selected { | ||
| 112 | + background-color: $white; | ||
| 113 | + color: $gunmetal; | ||
| 114 | + | ||
| 115 | + .icon { | ||
| 116 | + color: $yellow-orange; | ||
| 117 | + } | ||
| 118 | +} | ||
| 119 | + | ||
| 120 | +.no-selected:hover { | ||
| 121 | + background-color: $yellow-orange; | ||
| 122 | + color: $white; | ||
| 123 | + | ||
| 124 | + .icon { | ||
| 125 | + color: $white; | ||
| 126 | + } | ||
| 127 | +} | ||
| 128 | + | ||
| 129 | +.selected { | ||
| 130 | + background-color: $gunmetal-2; | ||
| 131 | + color: $white; | ||
| 132 | + | ||
| 133 | + .icon { | ||
| 134 | + color: $yellow-orange; | ||
| 135 | + } | ||
| 136 | +} | ||
| 137 | +</style> |
codigos/frontend/src/components/menu/components/SubItemMenu.vue
0 → 100644
| @@ -0,0 +1,92 @@ | @@ -0,0 +1,92 @@ | ||
| 1 | +<template> | ||
| 2 | + <q-item class="col-12" clickable @click="navigateTo" :class="generateCssClass()"> | ||
| 3 | + <div class="content row"> | ||
| 4 | + <q-item-section class="col-2 icon"> | ||
| 5 | + <q-icon :name="icon"/> | ||
| 6 | + </q-item-section> | ||
| 7 | + <q-item-section class="col-10 justify-start label"> | ||
| 8 | + <q-item-label> | ||
| 9 | + {{ label }} | ||
| 10 | + </q-item-label> | ||
| 11 | + </q-item-section> | ||
| 12 | + </div> | ||
| 13 | + </q-item> | ||
| 14 | +</template> | ||
| 15 | + | ||
| 16 | +<script lang="ts"> | ||
| 17 | +import {Vue, Component, Prop, Emit} from 'vue-property-decorator'; | ||
| 18 | + | ||
| 19 | +@Component | ||
| 20 | +export default class SubItemMenu extends Vue { | ||
| 21 | + @Prop({type: String, required: true}) | ||
| 22 | + readonly label !: string; | ||
| 23 | + | ||
| 24 | + @Prop({type: String, required: true}) | ||
| 25 | + readonly path !: string; | ||
| 26 | + | ||
| 27 | + @Prop({type: String, required: true}) | ||
| 28 | + readonly icon !: string; | ||
| 29 | + | ||
| 30 | + @Prop({type: Number, required: true}) | ||
| 31 | + readonly itemId !: number; | ||
| 32 | + | ||
| 33 | + @Prop({type: String, required: true}) | ||
| 34 | + selectedItemMenu !: string; | ||
| 35 | + | ||
| 36 | + get isSelectedItemMenu() { | ||
| 37 | + return this.selectedItemMenu === this.label || | ||
| 38 | + this.selectedItemMenu === this.path; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @Emit('selectedItem') | ||
| 42 | + navigateTo() { | ||
| 43 | + if (this.$route.path !== this.path) { | ||
| 44 | + this.$router.push(this.path); | ||
| 45 | + } | ||
| 46 | + return this.path; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + generateCssClass(): string { | ||
| 50 | + return this.isSelectedItemMenu ? 'subitem-menu selected-subitem' : 'subitem-menu no-selected-subitem' | ||
| 51 | + } | ||
| 52 | +} | ||
| 53 | +</script> | ||
| 54 | + | ||
| 55 | +<style lang="scss" scoped> | ||
| 56 | +.subitem-menu { | ||
| 57 | + .content { | ||
| 58 | + margin-left: 5%; | ||
| 59 | + width: 100%; | ||
| 60 | + flex-wrap: nowrap; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + .icon { | ||
| 64 | + font-size: $font-h1; | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + .label { | ||
| 68 | + font-size: $font-normal; | ||
| 69 | + } | ||
| 70 | +} | ||
| 71 | + | ||
| 72 | +.no-selected-subitem { | ||
| 73 | + .icon { | ||
| 74 | + color: $yellow-orange; | ||
| 75 | + } | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +.no-selected-subitem:hover { | ||
| 79 | + background-color: $yellow-orange; | ||
| 80 | + color: $white; | ||
| 81 | + | ||
| 82 | + .icon { | ||
| 83 | + color: $white; | ||
| 84 | + } | ||
| 85 | +} | ||
| 86 | + | ||
| 87 | +.selected-subitem { | ||
| 88 | + background-color: $yellow-orange; | ||
| 89 | + color: $white; | ||
| 90 | +} | ||
| 91 | + | ||
| 92 | +</style> |
codigos/frontend/src/css/app.scss
| 1 | -// app global css in SCSS form | 1 | +@import 'pages/login'; |
| 2 | +@import 'pages/index'; | ||
| 3 | +@import 'pages/projects'; | ||
| 4 | +@import 'pages/users'; | ||
| 5 | + | ||
| 6 | +* { | ||
| 7 | + font-family: 'Roboto', '-apple-system', 'Helvetica Neue', Helvetica, Arial, sans-serif; | ||
| 8 | +} | ||
| 9 | + | ||
| 10 | +.header-style { | ||
| 11 | + background-color: $yellow-orange; | ||
| 12 | + color: $white; | ||
| 13 | + border: none; | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +.side-menu { | ||
| 17 | + min-height: 100%; | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +.menu-logo { | ||
| 21 | + width: 100%; | ||
| 22 | + margin-bottom: 20px; | ||
| 23 | + | ||
| 24 | + .image-logo { | ||
| 25 | + width: 60%; | ||
| 26 | + margin-left: -10%; | ||
| 27 | + } | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +.menu-logo-ifes { | ||
| 31 | + width: 100%; | ||
| 32 | + padding-top: 30px; | ||
| 33 | + | ||
| 34 | + .image-logo { | ||
| 35 | + width: 70%; | ||
| 36 | + } | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +.menu-user { | ||
| 40 | + .btn { | ||
| 41 | + margin-left: 10px; | ||
| 42 | + border-radius: 0; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + .btn-logout { | ||
| 46 | + padding: 0 30px; | ||
| 47 | + border-radius: 10px; | ||
| 48 | + background-color: $gunmetal; | ||
| 49 | + } | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +.page { | ||
| 53 | + background-color: $yellow-orange-bg; | ||
| 54 | +} | ||
| 55 | + | ||
| 56 | +.footer-style { | ||
| 57 | + background-color: $yellow-orange-bg; | ||
| 58 | + font-weight: 500; | ||
| 59 | + height: 50px; | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +.card { | ||
| 63 | + border-radius: 20px; | ||
| 64 | + | ||
| 65 | + .card-header { | ||
| 66 | + width: 100%; | ||
| 67 | + text-align: center; | ||
| 68 | + font-size: $font-normal; | ||
| 69 | + } | ||
| 70 | +} |
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +// Default Application Variables | ||
| 2 | +$tart-orange: #f94144ff; | ||
| 3 | +$orange-red: #f3722cff; | ||
| 4 | +$yellow-orange: #f8961eff; | ||
| 5 | +$yellow-orange-bg: #fda53a; | ||
| 6 | +$maize-crayola: #f9c74fff; | ||
| 7 | +$pistachio: #90be6dff; | ||
| 8 | +$jungle-green: #43aa8bff; | ||
| 9 | +$queen-blue: #577590ff; | ||
| 10 | +$gunmetal: #27333dff; | ||
| 11 | +$gunmetal-2: #202931ff; | ||
| 12 | +$white: #ffffff; | ||
| 13 | +$transparent: transparent; | ||
| 14 | + | ||
| 15 | +$font-h1: 2em; | ||
| 16 | +$font-h1-small: 1.6em; | ||
| 17 | +$font-h2: 1.4em; | ||
| 18 | +$font-normal: 1.2em; | ||
| 19 | +$font-text: 1em; | ||
| 20 | +$font-obs: 0.8em; |
| @@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
| 1 | +.login-page { | ||
| 2 | + width: 100%; | ||
| 3 | + | ||
| 4 | + .card { | ||
| 5 | + width: 25%; | ||
| 6 | + } | ||
| 7 | + | ||
| 8 | + .login-logo { | ||
| 9 | + margin-top: 20px; | ||
| 10 | + width: 50%; | ||
| 11 | + } | ||
| 12 | + | ||
| 13 | + .login-btn { | ||
| 14 | + width: 40%; | ||
| 15 | + background-color: $yellow-orange; | ||
| 16 | + color: $white; | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + .forget-password { | ||
| 20 | + margin: 25px 0; | ||
| 21 | + text-decoration: none; | ||
| 22 | + color: $gunmetal; | ||
| 23 | + } | ||
| 24 | +} | ||
| 25 | + |
| @@ -0,0 +1,97 @@ | @@ -0,0 +1,97 @@ | ||
| 1 | +.initial-menu-buttons { | ||
| 2 | + color: $white; | ||
| 3 | + width: 60%; | ||
| 4 | + | ||
| 5 | + .project-btn { | ||
| 6 | + font-size: 10em; | ||
| 7 | + cursor: pointer; | ||
| 8 | + | ||
| 9 | + span { | ||
| 10 | + margin-top: 30px; | ||
| 11 | + font-size: 0.18em; | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +.create-project { | ||
| 17 | + width: 100%; | ||
| 18 | + height: 100%; | ||
| 19 | + | ||
| 20 | + .card { | ||
| 21 | + height: 470px; | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + .form { | ||
| 25 | + height: 375px; | ||
| 26 | + | ||
| 27 | + .fields { | ||
| 28 | + width: 50%; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + .field-text { | ||
| 32 | + margin-top: 30px; | ||
| 33 | + | ||
| 34 | + textarea { | ||
| 35 | + resize: none; | ||
| 36 | + overflow: hidden; | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + .create-btn { | ||
| 41 | + color: $white; | ||
| 42 | + background-color: $yellow-orange; | ||
| 43 | + width: 30%; | ||
| 44 | + } | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + .project-attributes { | ||
| 48 | + height: 230px; | ||
| 49 | + | ||
| 50 | + p { | ||
| 51 | + text-align: center; | ||
| 52 | + font-size: $font-normal; | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + .label { | ||
| 56 | + color: $yellow-orange; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + .fields { | ||
| 60 | + width: 80%; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + .attribute-btn { | ||
| 64 | + width: 80%; | ||
| 65 | + color: $white; | ||
| 66 | + font-size: $font-text; | ||
| 67 | + background-color: $yellow-orange; | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | +} | ||
| 71 | + | ||
| 72 | +.list-projects { | ||
| 73 | + width: 100%; | ||
| 74 | + | ||
| 75 | + .card { | ||
| 76 | + width: 60%; | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + .list-projects-content { | ||
| 80 | + height: 100%; | ||
| 81 | + overflow-y: auto; | ||
| 82 | + height: 400px; | ||
| 83 | + | ||
| 84 | + .projects-table { | ||
| 85 | + width: 80%; | ||
| 86 | + max-height: 300px; | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + .action-buttons { | ||
| 90 | + width: 80%; | ||
| 91 | + | ||
| 92 | + * { | ||
| 93 | + color: $white; | ||
| 94 | + } | ||
| 95 | + } | ||
| 96 | + } | ||
| 97 | +} |
codigos/frontend/src/css/quasar.variables.scss
| @@ -11,6 +11,7 @@ | @@ -11,6 +11,7 @@ | ||
| 11 | // It's highly recommended to change the default colors | 11 | // It's highly recommended to change the default colors |
| 12 | // to match your app's branding. | 12 | // to match your app's branding. |
| 13 | // Tip: Use the "Theme Builder" on Quasar's documentation website. | 13 | // Tip: Use the "Theme Builder" on Quasar's documentation website. |
| 14 | +@import "app.variables"; | ||
| 14 | 15 | ||
| 15 | $primary : #1976D2; | 16 | $primary : #1976D2; |
| 16 | $secondary : #26A69A; | 17 | $secondary : #26A69A; |
| @@ -22,13 +23,3 @@ $positive : #21BA45; | @@ -22,13 +23,3 @@ $positive : #21BA45; | ||
| 22 | $negative : #C10015; | 23 | $negative : #C10015; |
| 23 | $info : #31CCEC; | 24 | $info : #31CCEC; |
| 24 | $warning : #F2C037; | 25 | $warning : #F2C037; |
| 25 | - | ||
| 26 | -$tart-orange: #f94144ff; | ||
| 27 | -$orange-red: #f3722cff; | ||
| 28 | -$yellow-orange-color-wheel: #f8961eff; | ||
| 29 | -$maize-crayola: #f9c74fff; | ||
| 30 | -$pistachio: #90be6dff; | ||
| 31 | -$jungle-green: #43aa8bff; | ||
| 32 | -$queen-blue: #577590ff; | ||
| 33 | -$gunmetal: #27333dff; | ||
| 34 | -$gunmetal-2: #202931ff; |
| @@ -0,0 +1,19 @@ | @@ -0,0 +1,19 @@ | ||
| 1 | +<template> | ||
| 2 | + <q-layout view="hhh lpr fff"> | ||
| 3 | + <q-page-container> | ||
| 4 | + <router-view /> | ||
| 5 | + </q-page-container> | ||
| 6 | + | ||
| 7 | + <q-footer class="footer-style row justify-center items-center"> | ||
| 8 | + Desenvolvido por Herik S.Lorenção | ||
| 9 | + </q-footer> | ||
| 10 | + </q-layout> | ||
| 11 | +</template> | ||
| 12 | + | ||
| 13 | +<script lang="ts"> | ||
| 14 | +import {Vue, Component} from 'vue-property-decorator'; | ||
| 15 | + | ||
| 16 | +@Component | ||
| 17 | +export default class LoginLayout extends Vue{ | ||
| 18 | +} | ||
| 19 | +</script> |
| @@ -0,0 +1,99 @@ | @@ -0,0 +1,99 @@ | ||
| 1 | +<template> | ||
| 2 | + <q-layout view="lHh Lpr lFf"> | ||
| 3 | + <q-header bordered class="header-style" elevated> | ||
| 4 | + <q-toolbar class="row justify-between"> | ||
| 5 | + <div> | ||
| 6 | + <q-btn | ||
| 7 | + flat | ||
| 8 | + dense | ||
| 9 | + round | ||
| 10 | + icon="menu" | ||
| 11 | + aria-label="Menu" | ||
| 12 | + @click="leftDrawerOpen = !leftDrawerOpen" | ||
| 13 | + /> | ||
| 14 | + <q-btn icon="home" @click="navigateToHome" flat /> | ||
| 15 | + </div> | ||
| 16 | + | ||
| 17 | + <div class="menu-user row items-center"> | ||
| 18 | + <q-fab square class="btn" icon="person" :label="adminName" direction="down" flat | ||
| 19 | + no-caps> | ||
| 20 | + <q-fab-action class="btn-logout" @click="logout" text-color="white"> | ||
| 21 | + Sair | ||
| 22 | + </q-fab-action> | ||
| 23 | + </q-fab> | ||
| 24 | + </div> | ||
| 25 | + </q-toolbar> | ||
| 26 | + </q-header> | ||
| 27 | + | ||
| 28 | + <q-drawer | ||
| 29 | + v-model="leftDrawerOpen" | ||
| 30 | + show-if-above | ||
| 31 | + bordered | ||
| 32 | + > | ||
| 33 | + <q-list class="side-menu column justify-between"> | ||
| 34 | + <div> | ||
| 35 | + <q-item-label | ||
| 36 | + header | ||
| 37 | + class="text-grey-8" | ||
| 38 | + > | ||
| 39 | + <div class="menu-logo row justify-center"> | ||
| 40 | + <q-img class="image-logo" src="../assets/logo/primaryLogo.png" /> | ||
| 41 | + </div> | ||
| 42 | + </q-item-label> | ||
| 43 | + <Menu></Menu> | ||
| 44 | + <q-item-label | ||
| 45 | + class="self-end" | ||
| 46 | + > | ||
| 47 | + </q-item-label> | ||
| 48 | + </div> | ||
| 49 | + <div class="menu-logo-ifes row justify-center"> | ||
| 50 | + <q-img class="image-logo" src="../assets/ifes-logo.png" /> | ||
| 51 | + </div> | ||
| 52 | + </q-list> | ||
| 53 | + </q-drawer> | ||
| 54 | + | ||
| 55 | + <q-page-container> | ||
| 56 | + <router-view /> | ||
| 57 | + </q-page-container> | ||
| 58 | + | ||
| 59 | + <q-footer class="footer-style row justify-center items-center"> | ||
| 60 | + Desenvolvido por Herik S.Lorenção | ||
| 61 | + </q-footer> | ||
| 62 | + </q-layout> | ||
| 63 | +</template> | ||
| 64 | + | ||
| 65 | +<script lang="ts"> | ||
| 66 | +import { Vue, Component } from 'vue-property-decorator'; | ||
| 67 | +import Menu from "components/menu/Menu.vue"; | ||
| 68 | +import AdminService from "src/services/AdminService"; | ||
| 69 | + | ||
| 70 | +@Component({ | ||
| 71 | + components: { Menu }, | ||
| 72 | +}) | ||
| 73 | +export default class MainLayout extends Vue { | ||
| 74 | + leftDrawerOpen = false; | ||
| 75 | + adminName = ''; | ||
| 76 | + | ||
| 77 | + navigateToHome() { | ||
| 78 | + if (this.$route.path !== '/') { | ||
| 79 | + this.$router.push('/'); | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + logout() { | ||
| 84 | + this.$store.commit('login/defineUserId', null); | ||
| 85 | + this.$router.push('/login'); | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + async mounted() { | ||
| 89 | + const adminService = new AdminService(); | ||
| 90 | + const userId = this.$store.getters['login/getIdUsuario']; | ||
| 91 | + | ||
| 92 | + const admin = await adminService.find(userId); | ||
| 93 | + | ||
| 94 | + if (admin && admin.name) { | ||
| 95 | + this.adminName = admin.name; | ||
| 96 | + } | ||
| 97 | + } | ||
| 98 | +} | ||
| 99 | +</script> |
| @@ -0,0 +1,71 @@ | @@ -0,0 +1,71 @@ | ||
| 1 | +import {ItemMenu} from "src/models/models"; | ||
| 2 | + | ||
| 3 | +const values: ItemMenu[] = [ | ||
| 4 | + { | ||
| 5 | + id: 1, | ||
| 6 | + path: '/projetos', | ||
| 7 | + label: 'Projetos', | ||
| 8 | + icon: 'attach_file', | ||
| 9 | + subitems: [ | ||
| 10 | + { | ||
| 11 | + id: 1, | ||
| 12 | + label: 'Usuários', | ||
| 13 | + path: 'projetos/usuarios', | ||
| 14 | + icon: 'person' | ||
| 15 | + }, | ||
| 16 | + { | ||
| 17 | + id: 2, | ||
| 18 | + label: 'Recomendações', | ||
| 19 | + path: 'projetos/recomendacoes', | ||
| 20 | + icon: 'emoji_objects' | ||
| 21 | + }, | ||
| 22 | + { | ||
| 23 | + id: 3, | ||
| 24 | + label: 'Avaliações', | ||
| 25 | + path: 'projetos/avaliacoes', | ||
| 26 | + icon: 'edit' | ||
| 27 | + }, | ||
| 28 | + { | ||
| 29 | + id: 4, | ||
| 30 | + label: 'Tags', | ||
| 31 | + path: 'projetos/tags', | ||
| 32 | + icon: 'local_offer' | ||
| 33 | + }, | ||
| 34 | + { | ||
| 35 | + id: 5, | ||
| 36 | + label: 'Tipos de Item', | ||
| 37 | + path: 'projetos/tipositens', | ||
| 38 | + icon: 'category' | ||
| 39 | + }, | ||
| 40 | + { | ||
| 41 | + id: 6, | ||
| 42 | + label: 'Itens', | ||
| 43 | + path: 'projetos/itens', | ||
| 44 | + icon: 'pageview' | ||
| 45 | + } | ||
| 46 | + ] | ||
| 47 | + }, | ||
| 48 | + { | ||
| 49 | + id: 2, | ||
| 50 | + path: 'tags', | ||
| 51 | + label: 'Tags', | ||
| 52 | + icon: 'local_offer', | ||
| 53 | + subitems: [] | ||
| 54 | + }, | ||
| 55 | + { | ||
| 56 | + id: 3, | ||
| 57 | + path: 'tipoitens', | ||
| 58 | + label: 'Tipos de Item', | ||
| 59 | + icon: 'category', | ||
| 60 | + subitems: [] | ||
| 61 | + }, | ||
| 62 | + { | ||
| 63 | + id: 4, | ||
| 64 | + path: "apis", | ||
| 65 | + label: 'APIs', | ||
| 66 | + icon: 'settings', | ||
| 67 | + subitems: [] | ||
| 68 | + }, | ||
| 69 | +]; | ||
| 70 | + | ||
| 71 | +export default values; |
| @@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
| 1 | +import {Notify} from 'quasar' | ||
| 2 | + | ||
| 3 | +export const TypeMessage = { | ||
| 4 | + success: 'positive', | ||
| 5 | + warning: 'warning', | ||
| 6 | + info: 'info', | ||
| 7 | + error: 'negative' | ||
| 8 | +} | ||
| 9 | + | ||
| 10 | +export default function notify(this: any, message: string, type: string) { | ||
| 11 | + Notify.create({message, type, position: 'bottom-right'}); | ||
| 12 | +} |
| @@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
| 1 | +export default { | ||
| 2 | + columns: [ | ||
| 3 | + { | ||
| 4 | + name: 'id', | ||
| 5 | + field: 'id', | ||
| 6 | + label: 'Código', | ||
| 7 | + align: 'center', | ||
| 8 | + sortable: true | ||
| 9 | + }, | ||
| 10 | + { | ||
| 11 | + name: 'name', | ||
| 12 | + field: 'name', | ||
| 13 | + label: 'Nome', | ||
| 14 | + align: 'center', | ||
| 15 | + sortable: true | ||
| 16 | + }, | ||
| 17 | + { | ||
| 18 | + name: 'email', | ||
| 19 | + field: 'email', | ||
| 20 | + label: 'Email', | ||
| 21 | + align: 'center', | ||
| 22 | + sortable: true | ||
| 23 | + } | ||
| 24 | + ] | ||
| 25 | +} |
| @@ -0,0 +1,57 @@ | @@ -0,0 +1,57 @@ | ||
| 1 | +import FormRequest from "src/models/FormRequest"; | ||
| 2 | + | ||
| 3 | +export default class Admin extends FormRequest { | ||
| 4 | + private _id: number; | ||
| 5 | + private _name: string; | ||
| 6 | + private _login: string; | ||
| 7 | + private _email: string; | ||
| 8 | + | ||
| 9 | + constructor(id: number, name: string, login: string, email: string) { | ||
| 10 | + super(); | ||
| 11 | + this._id = id; | ||
| 12 | + this._name = name; | ||
| 13 | + this._login = login; | ||
| 14 | + this._email = email; | ||
| 15 | + } | ||
| 16 | + | ||
| 17 | + get id(): number { | ||
| 18 | + return this._id; | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + set id(value: number) { | ||
| 22 | + this._id = value; | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + get name(): string { | ||
| 26 | + return this._name; | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + set name(value: string) { | ||
| 30 | + this._name = value; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + get login(): string { | ||
| 34 | + return this._login; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + set login(value: string) { | ||
| 38 | + this._login = value; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + get email(): string { | ||
| 42 | + return this._email; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + set email(value: string) { | ||
| 46 | + this._email = value; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + public build(): object { | ||
| 50 | + return { | ||
| 51 | + id: this._id, | ||
| 52 | + name: this._name, | ||
| 53 | + login: this._login, | ||
| 54 | + email: this._email | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | +} |
| @@ -0,0 +1,37 @@ | @@ -0,0 +1,37 @@ | ||
| 1 | +import FormRequest from "src/models/FormRequest"; | ||
| 2 | + | ||
| 3 | +export default class Login extends FormRequest{ | ||
| 4 | + private _login: string; | ||
| 5 | + private _password: string; | ||
| 6 | + | ||
| 7 | + | ||
| 8 | + constructor(login: string, password: string) { | ||
| 9 | + super(); | ||
| 10 | + this._login = login; | ||
| 11 | + this._password = password; | ||
| 12 | + } | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + get login(): string { | ||
| 16 | + return this._login; | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + set login(value: string) { | ||
| 20 | + this._login = value; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + get password(): string { | ||
| 24 | + return this._password; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + set password(value: string) { | ||
| 28 | + this._password = value; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public build(): object { | ||
| 32 | + return { | ||
| 33 | + login: this._login, | ||
| 34 | + password: this._password | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | +} |
| @@ -0,0 +1,80 @@ | @@ -0,0 +1,80 @@ | ||
| 1 | +import FormRequest from "src/models/FormRequest"; | ||
| 2 | +import {ParseItem} from "src/models/models"; | ||
| 3 | + | ||
| 4 | +export default class Project extends FormRequest { | ||
| 5 | + private _name: string; | ||
| 6 | + private _description: string; | ||
| 7 | + private _adminId: number; | ||
| 8 | + private _situation: string; | ||
| 9 | + private _visible: boolean; | ||
| 10 | + | ||
| 11 | + public parseNames: ParseItem[] = [ | ||
| 12 | + { | ||
| 13 | + fieldName: 'name', | ||
| 14 | + translation: 'nome' | ||
| 15 | + }, | ||
| 16 | + { | ||
| 17 | + fieldName: 'description', | ||
| 18 | + translation: 'descrição' | ||
| 19 | + } | ||
| 20 | + ]; | ||
| 21 | + | ||
| 22 | + constructor(name: string, description: string, adminId: number, situation: string, visible: boolean) { | ||
| 23 | + super(); | ||
| 24 | + this._name = name; | ||
| 25 | + this._description = description; | ||
| 26 | + this._adminId = adminId; | ||
| 27 | + this._situation = situation; | ||
| 28 | + this._visible = visible; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + get name(): string { | ||
| 32 | + return this._name; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + set name(value: string) { | ||
| 36 | + this._name = value; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + get description(): string { | ||
| 40 | + return this._description; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + set description(value: string) { | ||
| 44 | + this._description = value; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + get adminId(): number { | ||
| 48 | + return this._adminId; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + set adminId(value: number) { | ||
| 52 | + this._adminId = value; | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + get situation(): string { | ||
| 56 | + return this._situation; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + set situation(value: string) { | ||
| 60 | + this._situation = value; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + get visible(): boolean { | ||
| 64 | + return this._visible; | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + set visible(value: boolean) { | ||
| 68 | + this._visible = value; | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + public build(): object { | ||
| 72 | + return { | ||
| 73 | + name: this._name, | ||
| 74 | + description: this._description, | ||
| 75 | + adminId: this._adminId, | ||
| 76 | + situation: this._situation, | ||
| 77 | + visible: this._visible | ||
| 78 | + }; | ||
| 79 | + } | ||
| 80 | +} |
| @@ -0,0 +1,72 @@ | @@ -0,0 +1,72 @@ | ||
| 1 | +import FormRequest from "src/models/FormRequest"; | ||
| 2 | +import {ParseItem} from "src/models/models"; | ||
| 3 | + | ||
| 4 | +export default class User extends FormRequest { | ||
| 5 | + private _name: string; | ||
| 6 | + private _login: string; | ||
| 7 | + private _password: string; | ||
| 8 | + private _email: string; | ||
| 9 | + | ||
| 10 | + public parseNames: ParseItem[] = [ | ||
| 11 | + { | ||
| 12 | + fieldName: 'name', | ||
| 13 | + translation: 'nome' | ||
| 14 | + }, | ||
| 15 | + { | ||
| 16 | + fieldName: 'description', | ||
| 17 | + translation: 'descrição' | ||
| 18 | + } | ||
| 19 | + ]; | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + constructor(name: string, login: string, password: string, email: string, parseNames: ParseItem[]) { | ||
| 23 | + super(); | ||
| 24 | + this._name = name; | ||
| 25 | + this._login = login; | ||
| 26 | + this._password = password; | ||
| 27 | + this._email = email; | ||
| 28 | + this.parseNames = parseNames; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + get name(): string { | ||
| 33 | + return this._name; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + set name(value: string) { | ||
| 37 | + this._name = value; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + get login(): string { | ||
| 41 | + return this._login; | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + set login(value: string) { | ||
| 45 | + this._login = value; | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + get password(): string { | ||
| 49 | + return this._password; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + set password(value: string) { | ||
| 53 | + this._password = value; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + get email(): string { | ||
| 57 | + return this._email; | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + set email(value: string) { | ||
| 61 | + this._email = value; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + public build(): object { | ||
| 65 | + return { | ||
| 66 | + name: this._name, | ||
| 67 | + login: this._login, | ||
| 68 | + password: this._password, | ||
| 69 | + email: this._email | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | +} |
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +export interface SubItem { | ||
| 2 | + id: number, | ||
| 3 | + label: string, | ||
| 4 | + path: string, | ||
| 5 | + icon: string | ||
| 6 | +} | ||
| 7 | + | ||
| 8 | +export interface ItemMenu { | ||
| 9 | + id: number, | ||
| 10 | + label: string, | ||
| 11 | + path: string, | ||
| 12 | + icon: string, | ||
| 13 | + subitems: SubItem[] | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | + | ||
| 17 | +export interface ParseItem { | ||
| 18 | + fieldName: string, | ||
| 19 | + translation: string | ||
| 20 | +} |
codigos/frontend/src/pages/Error404.vue
| @@ -22,8 +22,9 @@ | @@ -22,8 +22,9 @@ | ||
| 22 | </div> | 22 | </div> |
| 23 | </template> | 23 | </template> |
| 24 | 24 | ||
| 25 | -<script > | ||
| 26 | -export default { | ||
| 27 | - name: 'Error404' | ||
| 28 | -} | 25 | +<script lang="ts"> |
| 26 | +import { Vue, Component } from 'vue-property-decorator'; | ||
| 27 | + | ||
| 28 | +@Component | ||
| 29 | +export default class Error404 extends Vue {} | ||
| 29 | </script> | 30 | </script> |
codigos/frontend/src/pages/Index.vue
| 1 | <template> | 1 | <template> |
| 2 | - <q-page class="flex flex-center"> | ||
| 3 | - <img | ||
| 4 | - alt="Quasar logo" | ||
| 5 | - src="~assets/quasar-logo-full.svg" | ||
| 6 | - > | 2 | + <q-page class="column items-center justify-start page"> |
| 3 | + <div class="home-title"> | ||
| 4 | + Bem vindo Usuário! | ||
| 5 | + </div> | ||
| 6 | + <div class="info row justify-around"> | ||
| 7 | + <q-card flat bordered class="card"> | ||
| 8 | + <q-card-section> | ||
| 9 | + <div class="card-header">Usuários que receberam recomendações</div> | ||
| 10 | + </q-card-section> | ||
| 11 | + </q-card> | ||
| 12 | + | ||
| 13 | + <q-card flat bordered class="card"> | ||
| 14 | + <q-card-section> | ||
| 15 | + <div class="card-header">Usuários que receberam recomendações</div> | ||
| 16 | + </q-card-section> | ||
| 17 | + </q-card> | ||
| 18 | + </div> | ||
| 7 | </q-page> | 19 | </q-page> |
| 8 | </template> | 20 | </template> |
| 9 | 21 | ||
| 10 | -<script> | ||
| 11 | -export default { | ||
| 12 | - name: 'PageIndex' | 22 | +<script lang="ts"> |
| 23 | +import { Vue, Component } from 'vue-property-decorator'; | ||
| 24 | + | ||
| 25 | +@Component | ||
| 26 | +export default class Index extends Vue { | ||
| 13 | } | 27 | } |
| 14 | </script> | 28 | </script> |
| @@ -0,0 +1,47 @@ | @@ -0,0 +1,47 @@ | ||
| 1 | +<template> | ||
| 2 | + <q-page class="login-page column items-center justify-center page"> | ||
| 3 | + <q-card flat bordered class="card col-6"> | ||
| 4 | + <q-card-section class="column items-center"> | ||
| 5 | + <q-img class="login-logo" src="../assets/logo/loginLogo.png" /> | ||
| 6 | + </q-card-section> | ||
| 7 | + <q-card-section class="form column items-center"> | ||
| 8 | + <q-input v-model="username" color="orange" placeholder="Login"> | ||
| 9 | + <template v-slot:prepend> | ||
| 10 | + <q-icon name="person" /> | ||
| 11 | + </template> | ||
| 12 | + </q-input> | ||
| 13 | + <q-input v-model="password" color="orange" placeholder="Senha" type="password"> | ||
| 14 | + <template v-slot:prepend> | ||
| 15 | + <q-icon name="vpn_key" /> | ||
| 16 | + </template> | ||
| 17 | + </q-input> | ||
| 18 | + </q-card-section> | ||
| 19 | + <q-card-section class="column items-center"> | ||
| 20 | + <q-btn @click="logInto" class="login-btn" label="Entrar" no-caps /> | ||
| 21 | + <router-link class="forget-password" to="cadastrar"> | ||
| 22 | + Esqueceu a Senha? | ||
| 23 | + </router-link> | ||
| 24 | + </q-card-section> | ||
| 25 | + </q-card> | ||
| 26 | + </q-page> | ||
| 27 | +</template> | ||
| 28 | + | ||
| 29 | +<script lang="ts"> | ||
| 30 | +import { Vue, Component } from 'vue-property-decorator'; | ||
| 31 | +import LoginService from "src/services/LoginService"; | ||
| 32 | + | ||
| 33 | +@Component | ||
| 34 | +export default class Login extends Vue{ | ||
| 35 | + username: string = ''; | ||
| 36 | + password: string = ''; | ||
| 37 | + loginService = new LoginService(); | ||
| 38 | + | ||
| 39 | + async logInto() { | ||
| 40 | + const logged = await this.loginService.login(this.username, this.password); | ||
| 41 | + | ||
| 42 | + if (logged) { | ||
| 43 | + this.$router.push('/'); | ||
| 44 | + } | ||
| 45 | + } | ||
| 46 | +} | ||
| 47 | +</script> |
| @@ -0,0 +1,79 @@ | @@ -0,0 +1,79 @@ | ||
| 1 | +<template> | ||
| 2 | + <q-page class="column items-center justify-center page"> | ||
| 3 | + <div v-show="initialMenuIsVisible" class="initial-menu-buttons row justify-around"> | ||
| 4 | + <div @click="createNewProject" class="project-btn column items-center"> | ||
| 5 | + <q-icon name="add_circle"/> | ||
| 6 | + <span>Criar Projeto</span> | ||
| 7 | + </div> | ||
| 8 | + <div @click="showListProjectsPage" class="project-btn column items-center"> | ||
| 9 | + <q-icon name="edit"/> | ||
| 10 | + <span>Listar Existentes</span> | ||
| 11 | + </div> | ||
| 12 | + </div> | ||
| 13 | + | ||
| 14 | + <div class="row justify-around create-project" v-if="createProjectIsVisible"> | ||
| 15 | + <CreateProject @projectCreated="hideCreateProjectPageAndShowList"></CreateProject> | ||
| 16 | + </div> | ||
| 17 | + | ||
| 18 | + <div class="row justify-around create-project" v-if="listProjectsIsVisible"> | ||
| 19 | + <ListProjects @editProject="showEditProjectPage"/> | ||
| 20 | + </div> | ||
| 21 | + | ||
| 22 | + <div class="row justify-around create-project" v-if="editProjectIsVisible"> | ||
| 23 | + <EditProject :projectData="projectEditInfo" /> | ||
| 24 | + </div> | ||
| 25 | + </q-page> | ||
| 26 | +</template> | ||
| 27 | + | ||
| 28 | +<script lang="ts"> | ||
| 29 | +import {Vue, Component} from 'vue-property-decorator'; | ||
| 30 | +import CreateProject from './projects/CreateProject.vue'; | ||
| 31 | +import ListProjects from './projects/ListProjects.vue'; | ||
| 32 | +import EditProject from "pages/projects/EditProject.vue"; | ||
| 33 | + | ||
| 34 | +@Component({ | ||
| 35 | + components: {CreateProject, ListProjects, EditProject} | ||
| 36 | +}) | ||
| 37 | +export default class Projects extends Vue { | ||
| 38 | + initialMenuIsVisible: boolean = true; | ||
| 39 | + createProjectIsVisible: boolean = false; | ||
| 40 | + listProjectsIsVisible: boolean = false; | ||
| 41 | + editProjectIsVisible: boolean = false; | ||
| 42 | + projectEditInfo: any = {}; | ||
| 43 | + | ||
| 44 | + hideInitialMenu() { | ||
| 45 | + this.initialMenuIsVisible = false; | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + showCreateProjectPage() { | ||
| 49 | + this.hideInitialMenu(); | ||
| 50 | + this.createProjectIsVisible = true; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + showListProjectsPage() { | ||
| 54 | + this.hideInitialMenu(); | ||
| 55 | + this.listProjectsIsVisible = true; | ||
| 56 | + this.editProjectIsVisible = false; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + hideCreateProjectPageAndShowList() { | ||
| 60 | + this.hideInitialMenu(); | ||
| 61 | + this.createProjectIsVisible = false; | ||
| 62 | + this.editProjectIsVisible = false; | ||
| 63 | + this.listProjectsIsVisible = true; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + showEditProjectPage(projectInfo: any) { | ||
| 67 | + this.hideInitialMenu(); | ||
| 68 | + this.createProjectIsVisible = false; | ||
| 69 | + this.editProjectIsVisible = true; | ||
| 70 | + this.listProjectsIsVisible = false; | ||
| 71 | + | ||
| 72 | + this.projectEditInfo = projectInfo; | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + createNewProject() { | ||
| 76 | + this.showCreateProjectPage(); | ||
| 77 | + } | ||
| 78 | +} | ||
| 79 | +</script> |
| @@ -0,0 +1,90 @@ | @@ -0,0 +1,90 @@ | ||
| 1 | +<template> | ||
| 2 | + <div class="row justify-around create-project"> | ||
| 3 | + <q-card flat bordered class="card col-6"> | ||
| 4 | + <q-card-section> | ||
| 5 | + <div class="card-header">Criar Projeto</div> | ||
| 6 | + </q-card-section> | ||
| 7 | + <q-card-section class="form column justify-between items-center"> | ||
| 8 | + <div class="fields"> | ||
| 9 | + <div class="field"> | ||
| 10 | + <q-input v-model="projectForm.name" color="orange" label="Nome" | ||
| 11 | + ref="nameInput" | ||
| 12 | + placeholder="Informe o nome"/> | ||
| 13 | + </div> | ||
| 14 | + <div class="field-text"> | ||
| 15 | + <q-input v-model="projectForm.description" type="textarea" color="orange" | ||
| 16 | + placeholder="Informe a descrição" label="Descrição" outlined | ||
| 17 | + /> | ||
| 18 | + </div> | ||
| 19 | + </div> | ||
| 20 | + <q-btn @click="createProject" class="create-btn" label="Criar" no-caps/> | ||
| 21 | + </q-card-section> | ||
| 22 | + </q-card> | ||
| 23 | + | ||
| 24 | + <q-card flat bordered class="card col-4 project-attributes column items-center"> | ||
| 25 | + <q-card-section> | ||
| 26 | + <div class="card-header">Atributos do Projeto</div> | ||
| 27 | + </q-card-section> | ||
| 28 | + <q-card-section class="fields column"> | ||
| 29 | + <div class="field column"> | ||
| 30 | + <p><span class="label">Status:</span> {{ projectStatus }}</p> | ||
| 31 | + </div> | ||
| 32 | + <div class="field column items-center"> | ||
| 33 | + <p><span class="label">Visibilidade:</span> {{ projectVisibility }}</p> | ||
| 34 | + <q-btn @click="changeVisible" class="attribute-btn" :label="getVisibilityBtnLabel()" | ||
| 35 | + no-caps/> | ||
| 36 | + </div> | ||
| 37 | + </q-card-section> | ||
| 38 | + </q-card> | ||
| 39 | + </div> | ||
| 40 | +</template> | ||
| 41 | + | ||
| 42 | +<script> | ||
| 43 | +import {Vue, Component, Prop} from 'vue-property-decorator'; | ||
| 44 | +import ProjectService from "src/services/ProjectService"; | ||
| 45 | +import Project from "src/models/Project"; | ||
| 46 | + | ||
| 47 | +@Component | ||
| 48 | +export default class CreateProject extends Vue { | ||
| 49 | + projectForm = { | ||
| 50 | + name: '', | ||
| 51 | + description: '', | ||
| 52 | + visible: false, | ||
| 53 | + situation: 'OPEN', | ||
| 54 | + adminId: this.$store.getters['login/getIdUsuario'] | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + get projectStatus() { | ||
| 58 | + return this.projectForm.situation === 'OPEN' ? 'Aberto' : 'Fechado'; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + get projectVisibility() { | ||
| 62 | + return this.projectForm.visible ? 'Visível' : 'Invisível'; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + getVisibilityBtnLabel() { | ||
| 66 | + return this.projectForm.visible ? 'Tornar Invisível' : 'Tornar Visível'; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + changeVisible() { | ||
| 70 | + return this.projectForm.visible = !this.projectForm.visible; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + async createProject() { | ||
| 74 | + const projectService = new ProjectService(); | ||
| 75 | + const projectForm = new Project( | ||
| 76 | + this.projectForm.name, | ||
| 77 | + this.projectForm.description, | ||
| 78 | + this.projectForm.adminId, | ||
| 79 | + this.projectForm.situation, | ||
| 80 | + this.projectForm.visible | ||
| 81 | + ); | ||
| 82 | + | ||
| 83 | + const projectIsCreated = await projectService.create(projectForm); | ||
| 84 | + | ||
| 85 | + if (projectIsCreated !== false) { | ||
| 86 | + this.$emit('projectCreated') | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | +} | ||
| 90 | +</script> |
| @@ -0,0 +1,109 @@ | @@ -0,0 +1,109 @@ | ||
| 1 | +<template> | ||
| 2 | + <div class="row justify-around create-project"> | ||
| 3 | + <q-card flat bordered class="card col-6"> | ||
| 4 | + <q-card-section> | ||
| 5 | + <div class="card-header">Editar Projeto</div> | ||
| 6 | + </q-card-section> | ||
| 7 | + <q-card-section class="form column justify-between items-center"> | ||
| 8 | + <div class="fields"> | ||
| 9 | + <div class="field"> | ||
| 10 | + <q-input v-model="projectForm.name" color="orange" label="Nome" | ||
| 11 | + ref="nameInput" | ||
| 12 | + placeholder="Informe o nome"/> | ||
| 13 | + </div> | ||
| 14 | + <div class="field-text"> | ||
| 15 | + <q-input v-model="projectForm.description" type="textarea" color="orange" | ||
| 16 | + placeholder="Informe a descrição" label="Descrição" outlined | ||
| 17 | + /> | ||
| 18 | + </div> | ||
| 19 | + </div> | ||
| 20 | + <div class="actions-buttons"> | ||
| 21 | + <q-btn @click="editProject" class="create-btn" label="Remover" no-caps/> | ||
| 22 | + <q-btn @click="editProject" class="create-btn" label="Salvar" no-caps/> | ||
| 23 | + </div> | ||
| 24 | + </q-card-section> | ||
| 25 | + </q-card> | ||
| 26 | + | ||
| 27 | + <q-card flat bordered class="card col-4 project-attributes column items-center"> | ||
| 28 | + <q-card-section> | ||
| 29 | + <div class="card-header">Atributos do Projeto</div> | ||
| 30 | + </q-card-section> | ||
| 31 | + <q-card-section class="fields column"> | ||
| 32 | + <div class="field column"> | ||
| 33 | + <p><span class="label">Status:</span> {{ projectStatus }}</p> | ||
| 34 | + <q-btn @click="changeStatus" class="attribute-btn" :label="getStatusBtnLabel()" | ||
| 35 | + no-caps/> | ||
| 36 | + </div> | ||
| 37 | + <div class="field column items-center"> | ||
| 38 | + <p><span class="label">Visibilidade:</span> {{ projectVisibility }}</p> | ||
| 39 | + <q-btn @click="changeVisible" class="attribute-btn" :label="getVisibilityBtnLabel()" | ||
| 40 | + no-caps/> | ||
| 41 | + </div> | ||
| 42 | + </q-card-section> | ||
| 43 | + </q-card> | ||
| 44 | + </div> | ||
| 45 | +</template> | ||
| 46 | + | ||
| 47 | +<script lang="ts"> | ||
| 48 | +import {Vue, Component, Prop} from 'vue-property-decorator'; | ||
| 49 | +import ProjectService from "src/services/ProjectService"; | ||
| 50 | +import Project from "src/models/Project"; | ||
| 51 | + | ||
| 52 | +@Component | ||
| 53 | +export default class EditProject extends Vue { | ||
| 54 | + @Prop({required: true, type: Object}) | ||
| 55 | + projectData: any; | ||
| 56 | + projectForm: any = {} | ||
| 57 | + | ||
| 58 | + get projectStatus() { | ||
| 59 | + return this.projectForm.situation === 'OPEN' ? 'Aberto' : 'Fechado'; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + get projectVisibility() { | ||
| 63 | + return this.projectForm.visible ? 'Visível' : 'Invisível'; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + getVisibilityBtnLabel() { | ||
| 67 | + return this.projectForm.visible ? 'Tornar Invisível' : 'Tornar Visível'; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + getStatusBtnLabel() { | ||
| 71 | + return this.projectForm.situation === 'OPEN' ? 'Fechar Projeto': 'Abrir Projeto'; | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + changeVisible() { | ||
| 75 | + return this.projectForm.visible = !this.projectForm.visible; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + changeStatus() { | ||
| 79 | + return this.projectForm.situation === 'OPEN' ? 'CLOSED': 'OPEN'; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + async editProject() { | ||
| 83 | + const projectService = new ProjectService(); | ||
| 84 | + const projectData = new Project( | ||
| 85 | + this.projectForm.name, | ||
| 86 | + this.projectForm.description, | ||
| 87 | + this.projectForm.adminId, | ||
| 88 | + this.projectForm.projectStatus, | ||
| 89 | + this.projectForm.visible | ||
| 90 | + ); | ||
| 91 | + | ||
| 92 | + await projectService.update(projectData, this.projectData.id); | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + async removeProject() { | ||
| 96 | + const projectService = new ProjectService(); | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + created() { | ||
| 100 | + this.projectForm = { | ||
| 101 | + name: this.projectData.name, | ||
| 102 | + description: this.projectData.description, | ||
| 103 | + visible: this.projectData.visible, | ||
| 104 | + situation: this.projectData.situation, | ||
| 105 | + adminId: this.$store.getters['login/getIdUsuario'] | ||
| 106 | + } | ||
| 107 | + } | ||
| 108 | +} | ||
| 109 | +</script> |
| @@ -0,0 +1,60 @@ | @@ -0,0 +1,60 @@ | ||
| 1 | +<template> | ||
| 2 | + <div class="list-projects column justify-center items-center"> | ||
| 3 | + <q-card flat bordered class="card col-6"> | ||
| 4 | + <q-card-section> | ||
| 5 | + <div class="card-header">Selecione o Projeto</div> | ||
| 6 | + </q-card-section> | ||
| 7 | + <q-card-section class="list-projects-content column justify-between items-center"> | ||
| 8 | + <q-table | ||
| 9 | + class="projects-table" | ||
| 10 | + row-key="id" | ||
| 11 | + :data="tableInfo.data" | ||
| 12 | + :columns="tableInfo.columns" | ||
| 13 | + :pagination="tableInfo.pagination" | ||
| 14 | + selection="single" | ||
| 15 | + :selected.sync="selectedItem" | ||
| 16 | + /> | ||
| 17 | + <div class="action-buttons row justify-around" v-show="isProjectSelected"> | ||
| 18 | + <q-btn color="orange" @click="selectedProject" | ||
| 19 | + label="Selecionar Projeto" no-caps /> | ||
| 20 | + <q-btn @click="editProject" color="orange" label="Alterar Projeto" no-caps /> | ||
| 21 | + </div> | ||
| 22 | + </q-card-section> | ||
| 23 | + </q-card> | ||
| 24 | + </div> | ||
| 25 | +</template> | ||
| 26 | + | ||
| 27 | +<script lang="ts"> | ||
| 28 | +import {Vue, Component, Prop} from 'vue-property-decorator'; | ||
| 29 | +import projectsTableInfo from '../../mixins/tableInfo/listProject'; | ||
| 30 | +import notify, {TypeMessage} from "src/mixins/notification"; | ||
| 31 | +import ProjectService from "src/services/ProjectService"; | ||
| 32 | + | ||
| 33 | +@Component | ||
| 34 | +export default class ListProjects extends Vue { | ||
| 35 | + tableInfo: any = {}; | ||
| 36 | + selectedItem: any = []; | ||
| 37 | + | ||
| 38 | + | ||
| 39 | + get isProjectSelected() { | ||
| 40 | + return this.selectedItem.length > 0; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + async selectedProject() { | ||
| 44 | + await this.$store.commit('navigationInfo/defineProjectId', this.selectedItem[0].id); | ||
| 45 | + notify('Um projeto foi selecionado', TypeMessage.success); | ||
| 46 | + notify('Esse projeto servirá de base para navegação nos menus', TypeMessage.info); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + editProject() { | ||
| 50 | + this.$emit('editProject', this.selectedItem[0]); | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + async mounted() { | ||
| 54 | + const projectService = new ProjectService(); | ||
| 55 | + const projectsResponse = await projectService.findAll(); | ||
| 56 | + this.tableInfo = projectsTableInfo; | ||
| 57 | + this.tableInfo.data = projectsResponse; | ||
| 58 | + } | ||
| 59 | +} | ||
| 60 | +</script> |
| @@ -0,0 +1,44 @@ | @@ -0,0 +1,44 @@ | ||
| 1 | +<template> | ||
| 2 | + <q-page class="column items-center justify-center page"> | ||
| 3 | + <div class="info-users row justify-around"> | ||
| 4 | + <q-card flat bordered class="card col-6"> | ||
| 5 | + <q-card-section> | ||
| 6 | + <div class="card-header">Dados dos Usuários</div> | ||
| 7 | + </q-card-section> | ||
| 8 | + <q-card-section class="info-fields"> | ||
| 9 | + <div class="row"> | ||
| 10 | + <span class="label">Nome:</span> | ||
| 11 | + <span class="content"></span> | ||
| 12 | + </div> | ||
| 13 | + <div class="row"> | ||
| 14 | + <span class="label">Login:</span> | ||
| 15 | + <span class="content"></span> | ||
| 16 | + </div> | ||
| 17 | + <div class="row"> | ||
| 18 | + <span class="label">Email:</span> | ||
| 19 | + <span class="content"></span> | ||
| 20 | + </div> | ||
| 21 | + </q-card-section> | ||
| 22 | + </q-card> | ||
| 23 | + <q-card flat bordered class="card col-6"> | ||
| 24 | + <q-card-section> | ||
| 25 | + <div class="card-header">Informações dos Usuários</div> | ||
| 26 | + </q-card-section> | ||
| 27 | + <q-card-section> | ||
| 28 | + | ||
| 29 | + </q-card-section> | ||
| 30 | + </q-card> | ||
| 31 | + </div> | ||
| 32 | + </q-page> | ||
| 33 | +</template> | ||
| 34 | + | ||
| 35 | +<script> | ||
| 36 | +import { Vue, Component } from 'vue-property-decorator'; | ||
| 37 | + | ||
| 38 | +@Component | ||
| 39 | +export default class ListUsers extends Vue { | ||
| 40 | + mounted() { | ||
| 41 | + | ||
| 42 | + } | ||
| 43 | +} | ||
| 44 | +</script> |
| @@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
| 1 | +import { route } from 'quasar/wrappers'; | ||
| 2 | +import VueRouter from 'vue-router'; | ||
| 3 | +import { Store } from 'vuex'; | ||
| 4 | +import {StateInterface} from '../store'; | ||
| 5 | +import routes from './routes'; | ||
| 6 | + | ||
| 7 | +/* | ||
| 8 | + * If not building with SSR mode, you can | ||
| 9 | + * directly export the Router instantiation | ||
| 10 | + */ | ||
| 11 | + | ||
| 12 | +export default route<Store<StateInterface>>(({ Vue }) => { | ||
| 13 | + Vue.use(VueRouter); | ||
| 14 | + | ||
| 15 | + const Router = new VueRouter({ | ||
| 16 | + scrollBehavior: () => ({ x: 0, y: 0 }), | ||
| 17 | + routes, | ||
| 18 | + | ||
| 19 | + // Leave these as is and change from quasar.conf.js instead! | ||
| 20 | + // quasar.conf.js -> build -> vueRouterMode | ||
| 21 | + // quasar.conf.js -> build -> publicPath | ||
| 22 | + mode: process.env.VUE_ROUTER_MODE, | ||
| 23 | + base: process.env.VUE_ROUTER_BASE, | ||
| 24 | + }); | ||
| 25 | + | ||
| 26 | + return Router; | ||
| 27 | +}); |
| @@ -0,0 +1,28 @@ | @@ -0,0 +1,28 @@ | ||
| 1 | +import {RouteConfig} from 'vue-router'; | ||
| 2 | + | ||
| 3 | +const routes: RouteConfig[] = [ | ||
| 4 | + { | ||
| 5 | + path: '/', | ||
| 6 | + component: () => import('layouts/MainLayout.vue'), | ||
| 7 | + children: [ | ||
| 8 | + {path: '', component: () => import('pages/Index.vue')}, | ||
| 9 | + {path: 'projetos', component: () => import('pages/Projects.vue')}, | ||
| 10 | + {path: 'projetos/usuarios', component: () => import('pages/users/ListUsers.vue')} | ||
| 11 | + ], | ||
| 12 | + }, | ||
| 13 | + { | ||
| 14 | + path: '/login', | ||
| 15 | + component: () => import('layouts/LoginLayout.vue'), | ||
| 16 | + children: [ | ||
| 17 | + {path: '', component: () => import('pages/Login.vue')}, | ||
| 18 | + ], | ||
| 19 | + }, | ||
| 20 | + // Always leave this as last one, | ||
| 21 | + // but you can also remove it | ||
| 22 | + { | ||
| 23 | + path: '*', | ||
| 24 | + component: () => import('pages/Error404.vue'), | ||
| 25 | + }, | ||
| 26 | +]; | ||
| 27 | + | ||
| 28 | +export default routes; |
| @@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
| 1 | +import Admin from "src/models/Admin"; | ||
| 2 | +import notify, {TypeMessage} from "src/mixins/notification"; | ||
| 3 | +import DefaultService from "src/services/DefaultService"; | ||
| 4 | + | ||
| 5 | +export default class AdminService extends DefaultService<Admin>{ | ||
| 6 | + | ||
| 7 | + public async find(id: number) { | ||
| 8 | + try { | ||
| 9 | + const resp = await this.client.get('/users/admins', id); | ||
| 10 | + return new Admin( | ||
| 11 | + id, resp.name, | ||
| 12 | + resp.login, resp.email | ||
| 13 | + ); | ||
| 14 | + } catch (e) { | ||
| 15 | + notify('Não foi possível encontrar seus dados da conta', TypeMessage.error); | ||
| 16 | + } | ||
| 17 | + } | ||
| 18 | +} |
| @@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
| 1 | +import Login from "src/models/Login"; | ||
| 2 | +import notify, {TypeMessage} from "src/mixins/notification"; | ||
| 3 | + | ||
| 4 | +import jwt from "jsonwebtoken"; | ||
| 5 | +import DefaultService from "src/services/DefaultService"; | ||
| 6 | + | ||
| 7 | +export default class AuthApiService extends DefaultService<Login> { | ||
| 8 | + | ||
| 9 | + public async generateJwt(loginForm: Login) { | ||
| 10 | + try { | ||
| 11 | + const tokenData = await this.client.post('auth', loginForm); | ||
| 12 | + return tokenData.token; | ||
| 13 | + } catch (e) { | ||
| 14 | + notify('Não foi possível autenticar na API', TypeMessage.error); | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + public verifyToken(token: string | null) { | ||
| 19 | + if (token === null) return false; | ||
| 20 | + | ||
| 21 | + try { | ||
| 22 | + jwt.verify(token, Buffer.from('VGFrZSBPbiBNZSBUYWtlIE1lIE9u', 'base64'), { | ||
| 23 | + subject: 'Hybrid Recommendation System - SRH' | ||
| 24 | + }) | ||
| 25 | + return true; | ||
| 26 | + } catch (e) { | ||
| 27 | + return false; | ||
| 28 | + } | ||
| 29 | + }; | ||
| 30 | +} |
| @@ -0,0 +1,36 @@ | @@ -0,0 +1,36 @@ | ||
| 1 | +import Client from "src/services/webClient/Client"; | ||
| 2 | +import FormRequest from "src/models/FormRequest"; | ||
| 3 | +import notify, {TypeMessage} from "src/mixins/notification"; | ||
| 4 | +import {ParseItem} from "src/models/models"; | ||
| 5 | + | ||
| 6 | +export default abstract class DefaultService<T extends FormRequest> { | ||
| 7 | + public client: Client<T> | ||
| 8 | + | ||
| 9 | + public constructor() { | ||
| 10 | + this.client = new Client<T>(); | ||
| 11 | + } | ||
| 12 | + | ||
| 13 | + public handleErrors(response: any, resource: T) { | ||
| 14 | + if (response.status === 422) { | ||
| 15 | + for(let i = 0; i < response.data.length; i++) { | ||
| 16 | + console.log(response.data[i]); | ||
| 17 | + | ||
| 18 | + notify(` | ||
| 19 | + (Campo: ${this.translateFields(response.data[i].error, resource.parseNames)}) | ||
| 20 | + ${response.data[i].field}`, TypeMessage.error); | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + private translateFields(fieldName: string, fieldsTranslation: ParseItem[]) { | ||
| 26 | + let translateField: string | boolean = false; | ||
| 27 | + | ||
| 28 | + fieldsTranslation.forEach(translationObject => { | ||
| 29 | + if (translationObject.fieldName === fieldName) { | ||
| 30 | + translateField = translationObject.translation; | ||
| 31 | + } | ||
| 32 | + }); | ||
| 33 | + | ||
| 34 | + return translateField ? translateField : fieldName; | ||
| 35 | + } | ||
| 36 | +} |
| @@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
| 1 | +import Login from "src/models/Login"; | ||
| 2 | +import notify, {TypeMessage} from "src/mixins/notification"; | ||
| 3 | + | ||
| 4 | +// @ts-ignore | ||
| 5 | +import {Store} from "src/store"; | ||
| 6 | +import DefaultService from "src/services/DefaultService"; | ||
| 7 | + | ||
| 8 | +export default class LoginService extends DefaultService<Login>{ | ||
| 9 | + | ||
| 10 | + async login(username: string, password: string) { | ||
| 11 | + const loginForm = new Login(username, password); | ||
| 12 | + | ||
| 13 | + try { | ||
| 14 | + const resp = await this.client.post('/admins/login', loginForm); | ||
| 15 | + | ||
| 16 | + if (resp.validUser) { | ||
| 17 | + // @ts-ignore | ||
| 18 | + Store.commit('login/defineUserId', resp.userId); | ||
| 19 | + notify('Login realizado com sucesso!', TypeMessage.success); | ||
| 20 | + return true; | ||
| 21 | + } | ||
| 22 | + } catch (e) { | ||
| 23 | + notify('Não foi possível realizar o login', TypeMessage.error); | ||
| 24 | + return false; | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | +} |
| @@ -0,0 +1,38 @@ | @@ -0,0 +1,38 @@ | ||
| 1 | +import DefaultService from "src/services/DefaultService"; | ||
| 2 | +import Project from "src/models/Project"; | ||
| 3 | +import notify, {TypeMessage} from "src/mixins/notification"; | ||
| 4 | + | ||
| 5 | +export default class ProjectService extends DefaultService<Project>{ | ||
| 6 | + async findAll() { | ||
| 7 | + try { | ||
| 8 | + const resp = await this.client.list('/projects') | ||
| 9 | + return resp._embedded.projects; | ||
| 10 | + } catch (e) { | ||
| 11 | + notify('Não foi possível buscar os projetos', TypeMessage.error); | ||
| 12 | + return false; | ||
| 13 | + } | ||
| 14 | + } | ||
| 15 | + | ||
| 16 | + async create(project: Project) { | ||
| 17 | + try { | ||
| 18 | + const resp = await this.client.post('/projects', project); | ||
| 19 | + notify('Projeto criado com sucesso', TypeMessage.success); | ||
| 20 | + return resp.data; | ||
| 21 | + } catch (e) { | ||
| 22 | + this.handleErrors(e.response, project); | ||
| 23 | + notify('Não foi possível criar o projeto', TypeMessage.error); | ||
| 24 | + return false; | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + async update(project: Project, id: number) { | ||
| 29 | + try { | ||
| 30 | + const resp = await this.client.put('/projects', id, project); | ||
| 31 | + return resp.data; | ||
| 32 | + } catch (e) { | ||
| 33 | + this.handleErrors(e.response, project); | ||
| 34 | + notify('Não foi possível alterar o projeto', TypeMessage.error); | ||
| 35 | + return false; | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | +} |
| @@ -0,0 +1,40 @@ | @@ -0,0 +1,40 @@ | ||
| 1 | +import axios, {AxiosInstance} from 'axios' | ||
| 2 | +import FormRequest from "src/models/FormRequest"; | ||
| 3 | +// @ts-ignore | ||
| 4 | +import {Store} from "src/store"; | ||
| 5 | + | ||
| 6 | +export default class Client<T extends FormRequest> { | ||
| 7 | + private client: AxiosInstance; | ||
| 8 | + | ||
| 9 | + constructor() { | ||
| 10 | + // @ts-ignore | ||
| 11 | + const token = Store.getters['login/getToken']; | ||
| 12 | + | ||
| 13 | + this.client = axios.create({ | ||
| 14 | + baseURL: 'http://localhost:8080', | ||
| 15 | + headers: { | ||
| 16 | + Authorization: 'Bearer ' + token | ||
| 17 | + } | ||
| 18 | + }); | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + public async get(uri: string, id: number) { | ||
| 22 | + const resp = await this.client.get(`${uri}/${id}`); | ||
| 23 | + return resp.data; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public async list(uri: string) { | ||
| 27 | + const resp = await this.client.get(uri); | ||
| 28 | + return resp.data; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public async post(uri: string, data: T) { | ||
| 32 | + const resp = await this.client.post(uri, data.build()); | ||
| 33 | + return resp.data; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public async put(uri: string, id: number, data: T) { | ||
| 37 | + const resp = await this.client.put(`${uri}/${id}`, data.build()) | ||
| 38 | + return resp.data; | ||
| 39 | + } | ||
| 40 | +} |
| @@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
| 1 | +import {store} from 'quasar/wrappers'; | ||
| 2 | +import Vuex from 'vuex'; | ||
| 3 | + | ||
| 4 | +// @ts-ignore | ||
| 5 | +import login from './login/index'; | ||
| 6 | +import navigationInfo from './navigationInfo/index'; | ||
| 7 | +// @ts-ignore | ||
| 8 | +import {LoginStateInterface} from "src/store/login/state"; | ||
| 9 | +import {NavigationInfoStateInterface} from "src/store/navigationInfo/state"; | ||
| 10 | + | ||
| 11 | +export interface StateInterface { | ||
| 12 | + login: LoginStateInterface; | ||
| 13 | + navigationInfo: NavigationInfoStateInterface; | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +let Store = null; | ||
| 17 | + | ||
| 18 | +export default store(({ Vue }) => { | ||
| 19 | + Vue.use(Vuex); | ||
| 20 | + | ||
| 21 | + Store = new Vuex.Store<StateInterface>({ | ||
| 22 | + modules: { | ||
| 23 | + login, | ||
| 24 | + navigationInfo | ||
| 25 | + }, | ||
| 26 | + | ||
| 27 | + // enable strict mode (adds overhead!) | ||
| 28 | + // for dev mode only | ||
| 29 | + strict: !!process.env.DEV, | ||
| 30 | + }); | ||
| 31 | + | ||
| 32 | + return Store; | ||
| 33 | +}); | ||
| 34 | + | ||
| 35 | +export {Store} |
| @@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
| 1 | +import { GetterTree } from 'vuex'; | ||
| 2 | +import { StateInterface } from '../index'; | ||
| 3 | +import { LoginStateInterface } from './state'; | ||
| 4 | + | ||
| 5 | +const getters: GetterTree<LoginStateInterface, StateInterface> = { | ||
| 6 | + infoUsuario(state: any) { | ||
| 7 | + return state.userLoginInfo; | ||
| 8 | + }, | ||
| 9 | + getIdUsuario(state: any) { | ||
| 10 | + return state.userLoginInfo.userId; | ||
| 11 | + }, | ||
| 12 | + getToken(state: any) { | ||
| 13 | + return state.userLoginInfo.token; | ||
| 14 | + } | ||
| 15 | +}; | ||
| 16 | + | ||
| 17 | +export default getters; |
| @@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
| 1 | +import {Module} from 'vuex'; | ||
| 2 | +import {StateInterface} from '../index'; | ||
| 3 | +import state, {LoginStateInterface} from './state'; | ||
| 4 | +import getters from "src/store/login/getters"; | ||
| 5 | +import mutations from "src/store/login/mutations"; | ||
| 6 | + | ||
| 7 | +const loginModule: Module<LoginStateInterface, StateInterface> = { | ||
| 8 | + namespaced: true, | ||
| 9 | + getters, | ||
| 10 | + state, | ||
| 11 | + mutations | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +export default loginModule; |
| @@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
| 1 | +import { MutationTree } from 'vuex'; | ||
| 2 | +import {LoginStateInterface} from './state'; | ||
| 3 | + | ||
| 4 | +const mutation: MutationTree<LoginStateInterface> = { | ||
| 5 | + defineToken(state: any, token) { | ||
| 6 | + state.userLoginInfo.token = token; | ||
| 7 | + }, | ||
| 8 | + defineUserId(state: any, id: number | null) { | ||
| 9 | + state.userLoginInfo.userId = id; | ||
| 10 | + } | ||
| 11 | +}; | ||
| 12 | + | ||
| 13 | +export default mutation; |
| @@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
| 1 | +interface Login { | ||
| 2 | + userId: Number | null, | ||
| 3 | + token: String | null | ||
| 4 | +} | ||
| 5 | + | ||
| 6 | +export interface LoginStateInterface { | ||
| 7 | + userLoginInfo: Login; | ||
| 8 | +} | ||
| 9 | + | ||
| 10 | +const state: LoginStateInterface = { | ||
| 11 | + userLoginInfo: { | ||
| 12 | + userId: null, | ||
| 13 | + token: null | ||
| 14 | + }, | ||
| 15 | +}; | ||
| 16 | + | ||
| 17 | +export default state; |
| @@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
| 1 | +import { ActionTree } from 'vuex'; | ||
| 2 | +import { StateInterface } from '../index'; | ||
| 3 | +import { ExampleStateInterface } from './state'; | ||
| 4 | + | ||
| 5 | +const actions: ActionTree<ExampleStateInterface, StateInterface> = { | ||
| 6 | + someAction(/* context */) { | ||
| 7 | + // your code | ||
| 8 | + }, | ||
| 9 | +}; | ||
| 10 | + | ||
| 11 | +export default actions; |
| @@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
| 1 | +import { GetterTree } from 'vuex'; | ||
| 2 | +import { StateInterface } from '../index'; | ||
| 3 | +import { ExampleStateInterface } from './state'; | ||
| 4 | + | ||
| 5 | +const getters: GetterTree<ExampleStateInterface, StateInterface> = { | ||
| 6 | + someAction(/* context */) { | ||
| 7 | + // your code | ||
| 8 | + }, | ||
| 9 | +}; | ||
| 10 | + | ||
| 11 | +export default getters; |
| @@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
| 1 | +import { Module } from 'vuex'; | ||
| 2 | +import { StateInterface } from '../index'; | ||
| 3 | +import state, { ExampleStateInterface } from './state'; | ||
| 4 | +import actions from './actions'; | ||
| 5 | +import getters from './getters'; | ||
| 6 | +import mutations from './mutations'; | ||
| 7 | + | ||
| 8 | +const exampleModule: Module<ExampleStateInterface, StateInterface> = { | ||
| 9 | + namespaced: true, | ||
| 10 | + actions, | ||
| 11 | + getters, | ||
| 12 | + mutations, | ||
| 13 | + state, | ||
| 14 | +}; | ||
| 15 | + | ||
| 16 | +export default exampleModule; |
| @@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
| 1 | +import { MutationTree } from 'vuex'; | ||
| 2 | +import { ExampleStateInterface } from './state'; | ||
| 3 | + | ||
| 4 | +const mutation: MutationTree<ExampleStateInterface> = { | ||
| 5 | + someMutation(/* state: ExampleStateInterface */) { | ||
| 6 | + // your code | ||
| 7 | + }, | ||
| 8 | +}; | ||
| 9 | + | ||
| 10 | +export default mutation; |
| @@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
| 1 | +import { GetterTree } from 'vuex'; | ||
| 2 | +import { StateInterface } from '../index'; | ||
| 3 | +import {NavigationInfoStateInterface} from "src/store/navigationInfo/state"; | ||
| 4 | + | ||
| 5 | +const getters: GetterTree<NavigationInfoStateInterface, StateInterface> = { | ||
| 6 | + projectId(state: any) { | ||
| 7 | + return state.navigationInfo.projectId; | ||
| 8 | + }, | ||
| 9 | +}; | ||
| 10 | + | ||
| 11 | +export default getters; |
| @@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
| 1 | +import {Module} from 'vuex'; | ||
| 2 | +import {StateInterface} from '../index'; | ||
| 3 | +import state, {NavigationInfoStateInterface} from 'src/store/navigationInfo/state'; | ||
| 4 | +import getters from "src/store/navigationInfo/getters"; | ||
| 5 | +import mutations from "src/store/navigationInfo/mutations"; | ||
| 6 | + | ||
| 7 | +const loginModule: Module<NavigationInfoStateInterface, StateInterface> = { | ||
| 8 | + namespaced: true, | ||
| 9 | + getters, | ||
| 10 | + state, | ||
| 11 | + mutations | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +export default loginModule; |
| @@ -0,0 +1,10 @@ | @@ -0,0 +1,10 @@ | ||
| 1 | +import { MutationTree } from 'vuex'; | ||
| 2 | +import {NavigationInfoStateInterface} from 'src/store/navigationInfo/state'; | ||
| 3 | + | ||
| 4 | +const mutation: MutationTree<NavigationInfoStateInterface> = { | ||
| 5 | + defineProjectId(state: any, id: number | null) { | ||
| 6 | + state.navigationInfo.projectId = id; | ||
| 7 | + } | ||
| 8 | +}; | ||
| 9 | + | ||
| 10 | +export default mutation; |
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
| 1 | +interface NavigationInfo { | ||
| 2 | + projectId: number | null | ||
| 3 | +} | ||
| 4 | + | ||
| 5 | +export interface NavigationInfoStateInterface { | ||
| 6 | + navigationInfo: NavigationInfo; | ||
| 7 | +} | ||
| 8 | + | ||
| 9 | +const state: NavigationInfoStateInterface = { | ||
| 10 | + navigationInfo: { | ||
| 11 | + projectId: null | ||
| 12 | + } | ||
| 13 | +}; | ||
| 14 | + | ||
| 15 | +export default state; |
codigos/frontend/yarn.lock
| @@ -10,44 +10,43 @@ | @@ -10,44 +10,43 @@ | ||
| 10 | "@babel/highlight" "^7.10.4" | 10 | "@babel/highlight" "^7.10.4" |
| 11 | 11 | ||
| 12 | "@babel/compat-data@^7.10.4": | 12 | "@babel/compat-data@^7.10.4": |
| 13 | - version "7.10.4" | ||
| 14 | - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.4.tgz#706a6484ee6f910b719b696a9194f8da7d7ac241" | ||
| 15 | - integrity sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw== | 13 | + version "7.10.5" |
| 14 | + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.5.tgz#d38425e67ea96b1480a3f50404d1bf85676301a6" | ||
| 15 | + integrity sha512-mPVoWNzIpYJHbWje0if7Ck36bpbtTvIxOi9+6WSK9wjGEXearAqlwBoTQvVjsAY2VIwgcs8V940geY3okzRCEw== | ||
| 16 | dependencies: | 16 | dependencies: |
| 17 | browserslist "^4.12.0" | 17 | browserslist "^4.12.0" |
| 18 | invariant "^2.2.4" | 18 | invariant "^2.2.4" |
| 19 | semver "^5.5.0" | 19 | semver "^5.5.0" |
| 20 | 20 | ||
| 21 | "@babel/core@^7.9.0": | 21 | "@babel/core@^7.9.0": |
| 22 | - version "7.10.4" | ||
| 23 | - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d" | ||
| 24 | - integrity sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA== | 22 | + version "7.10.5" |
| 23 | + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" | ||
| 24 | + integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== | ||
| 25 | dependencies: | 25 | dependencies: |
| 26 | "@babel/code-frame" "^7.10.4" | 26 | "@babel/code-frame" "^7.10.4" |
| 27 | - "@babel/generator" "^7.10.4" | ||
| 28 | - "@babel/helper-module-transforms" "^7.10.4" | 27 | + "@babel/generator" "^7.10.5" |
| 28 | + "@babel/helper-module-transforms" "^7.10.5" | ||
| 29 | "@babel/helpers" "^7.10.4" | 29 | "@babel/helpers" "^7.10.4" |
| 30 | - "@babel/parser" "^7.10.4" | 30 | + "@babel/parser" "^7.10.5" |
| 31 | "@babel/template" "^7.10.4" | 31 | "@babel/template" "^7.10.4" |
| 32 | - "@babel/traverse" "^7.10.4" | ||
| 33 | - "@babel/types" "^7.10.4" | 32 | + "@babel/traverse" "^7.10.5" |
| 33 | + "@babel/types" "^7.10.5" | ||
| 34 | convert-source-map "^1.7.0" | 34 | convert-source-map "^1.7.0" |
| 35 | debug "^4.1.0" | 35 | debug "^4.1.0" |
| 36 | gensync "^1.0.0-beta.1" | 36 | gensync "^1.0.0-beta.1" |
| 37 | json5 "^2.1.2" | 37 | json5 "^2.1.2" |
| 38 | - lodash "^4.17.13" | 38 | + lodash "^4.17.19" |
| 39 | resolve "^1.3.2" | 39 | resolve "^1.3.2" |
| 40 | semver "^5.4.1" | 40 | semver "^5.4.1" |
| 41 | source-map "^0.5.0" | 41 | source-map "^0.5.0" |
| 42 | 42 | ||
| 43 | -"@babel/generator@^7.10.4": | ||
| 44 | - version "7.10.4" | ||
| 45 | - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243" | ||
| 46 | - integrity sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng== | 43 | +"@babel/generator@^7.10.5": |
| 44 | + version "7.10.5" | ||
| 45 | + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" | ||
| 46 | + integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== | ||
| 47 | dependencies: | 47 | dependencies: |
| 48 | - "@babel/types" "^7.10.4" | 48 | + "@babel/types" "^7.10.5" |
| 49 | jsesc "^2.5.1" | 49 | jsesc "^2.5.1" |
| 50 | - lodash "^4.17.13" | ||
| 51 | source-map "^0.5.0" | 50 | source-map "^0.5.0" |
| 52 | 51 | ||
| 53 | "@babel/helper-annotate-as-pure@^7.10.4": | 52 | "@babel/helper-annotate-as-pure@^7.10.4": |
| @@ -76,13 +75,13 @@ | @@ -76,13 +75,13 @@ | ||
| 76 | levenary "^1.1.1" | 75 | levenary "^1.1.1" |
| 77 | semver "^5.5.0" | 76 | semver "^5.5.0" |
| 78 | 77 | ||
| 79 | -"@babel/helper-create-class-features-plugin@^7.10.4": | ||
| 80 | - version "7.10.4" | ||
| 81 | - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz#2d4015d0136bd314103a70d84a7183e4b344a355" | ||
| 82 | - integrity sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ== | 78 | +"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": |
| 79 | + version "7.10.5" | ||
| 80 | + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" | ||
| 81 | + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== | ||
| 83 | dependencies: | 82 | dependencies: |
| 84 | "@babel/helper-function-name" "^7.10.4" | 83 | "@babel/helper-function-name" "^7.10.4" |
| 85 | - "@babel/helper-member-expression-to-functions" "^7.10.4" | 84 | + "@babel/helper-member-expression-to-functions" "^7.10.5" |
| 86 | "@babel/helper-optimise-call-expression" "^7.10.4" | 85 | "@babel/helper-optimise-call-expression" "^7.10.4" |
| 87 | "@babel/helper-plugin-utils" "^7.10.4" | 86 | "@babel/helper-plugin-utils" "^7.10.4" |
| 88 | "@babel/helper-replace-supers" "^7.10.4" | 87 | "@babel/helper-replace-supers" "^7.10.4" |
| @@ -98,13 +97,13 @@ | @@ -98,13 +97,13 @@ | ||
| 98 | regexpu-core "^4.7.0" | 97 | regexpu-core "^4.7.0" |
| 99 | 98 | ||
| 100 | "@babel/helper-define-map@^7.10.4": | 99 | "@babel/helper-define-map@^7.10.4": |
| 101 | - version "7.10.4" | ||
| 102 | - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz#f037ad794264f729eda1889f4ee210b870999092" | ||
| 103 | - integrity sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA== | 100 | + version "7.10.5" |
| 101 | + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" | ||
| 102 | + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== | ||
| 104 | dependencies: | 103 | dependencies: |
| 105 | "@babel/helper-function-name" "^7.10.4" | 104 | "@babel/helper-function-name" "^7.10.4" |
| 106 | - "@babel/types" "^7.10.4" | ||
| 107 | - lodash "^4.17.13" | 105 | + "@babel/types" "^7.10.5" |
| 106 | + lodash "^4.17.19" | ||
| 108 | 107 | ||
| 109 | "@babel/helper-explode-assignable-expression@^7.10.4": | 108 | "@babel/helper-explode-assignable-expression@^7.10.4": |
| 110 | version "7.10.4" | 109 | version "7.10.4" |
| @@ -137,12 +136,12 @@ | @@ -137,12 +136,12 @@ | ||
| 137 | dependencies: | 136 | dependencies: |
| 138 | "@babel/types" "^7.10.4" | 137 | "@babel/types" "^7.10.4" |
| 139 | 138 | ||
| 140 | -"@babel/helper-member-expression-to-functions@^7.10.4": | ||
| 141 | - version "7.10.4" | ||
| 142 | - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz#7cd04b57dfcf82fce9aeae7d4e4452fa31b8c7c4" | ||
| 143 | - integrity sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A== | 139 | +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": |
| 140 | + version "7.10.5" | ||
| 141 | + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee" | ||
| 142 | + integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== | ||
| 144 | dependencies: | 143 | dependencies: |
| 145 | - "@babel/types" "^7.10.4" | 144 | + "@babel/types" "^7.10.5" |
| 146 | 145 | ||
| 147 | "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": | 146 | "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": |
| 148 | version "7.10.4" | 147 | version "7.10.4" |
| @@ -151,18 +150,18 @@ | @@ -151,18 +150,18 @@ | ||
| 151 | dependencies: | 150 | dependencies: |
| 152 | "@babel/types" "^7.10.4" | 151 | "@babel/types" "^7.10.4" |
| 153 | 152 | ||
| 154 | -"@babel/helper-module-transforms@^7.10.4": | ||
| 155 | - version "7.10.4" | ||
| 156 | - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz#ca1f01fdb84e48c24d7506bb818c961f1da8805d" | ||
| 157 | - integrity sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q== | 153 | +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5": |
| 154 | + version "7.10.5" | ||
| 155 | + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz#120c271c0b3353673fcdfd8c053db3c544a260d6" | ||
| 156 | + integrity sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA== | ||
| 158 | dependencies: | 157 | dependencies: |
| 159 | "@babel/helper-module-imports" "^7.10.4" | 158 | "@babel/helper-module-imports" "^7.10.4" |
| 160 | "@babel/helper-replace-supers" "^7.10.4" | 159 | "@babel/helper-replace-supers" "^7.10.4" |
| 161 | "@babel/helper-simple-access" "^7.10.4" | 160 | "@babel/helper-simple-access" "^7.10.4" |
| 162 | "@babel/helper-split-export-declaration" "^7.10.4" | 161 | "@babel/helper-split-export-declaration" "^7.10.4" |
| 163 | "@babel/template" "^7.10.4" | 162 | "@babel/template" "^7.10.4" |
| 164 | - "@babel/types" "^7.10.4" | ||
| 165 | - lodash "^4.17.13" | 163 | + "@babel/types" "^7.10.5" |
| 164 | + lodash "^4.17.19" | ||
| 166 | 165 | ||
| 167 | "@babel/helper-optimise-call-expression@^7.10.4": | 166 | "@babel/helper-optimise-call-expression@^7.10.4": |
| 168 | version "7.10.4" | 167 | version "7.10.4" |
| @@ -177,11 +176,11 @@ | @@ -177,11 +176,11 @@ | ||
| 177 | integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== | 176 | integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== |
| 178 | 177 | ||
| 179 | "@babel/helper-regex@^7.10.4": | 178 | "@babel/helper-regex@^7.10.4": |
| 180 | - version "7.10.4" | ||
| 181 | - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.4.tgz#59b373daaf3458e5747dece71bbaf45f9676af6d" | ||
| 182 | - integrity sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ== | 179 | + version "7.10.5" |
| 180 | + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" | ||
| 181 | + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== | ||
| 183 | dependencies: | 182 | dependencies: |
| 184 | - lodash "^4.17.13" | 183 | + lodash "^4.17.19" |
| 185 | 184 | ||
| 186 | "@babel/helper-remap-async-to-generator@^7.10.4": | 185 | "@babel/helper-remap-async-to-generator@^7.10.4": |
| 187 | version "7.10.4" | 186 | version "7.10.4" |
| @@ -252,15 +251,15 @@ | @@ -252,15 +251,15 @@ | ||
| 252 | chalk "^2.0.0" | 251 | chalk "^2.0.0" |
| 253 | js-tokens "^4.0.0" | 252 | js-tokens "^4.0.0" |
| 254 | 253 | ||
| 255 | -"@babel/parser@^7.10.4", "@babel/parser@^7.7.0": | ||
| 256 | - version "7.10.4" | ||
| 257 | - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64" | ||
| 258 | - integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== | 254 | +"@babel/parser@^7.10.4", "@babel/parser@^7.10.5", "@babel/parser@^7.7.0": |
| 255 | + version "7.10.5" | ||
| 256 | + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" | ||
| 257 | + integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== | ||
| 259 | 258 | ||
| 260 | "@babel/plugin-proposal-async-generator-functions@^7.10.4": | 259 | "@babel/plugin-proposal-async-generator-functions@^7.10.4": |
| 261 | - version "7.10.4" | ||
| 262 | - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6" | ||
| 263 | - integrity sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg== | 260 | + version "7.10.5" |
| 261 | + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" | ||
| 262 | + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== | ||
| 264 | dependencies: | 263 | dependencies: |
| 265 | "@babel/helper-plugin-utils" "^7.10.4" | 264 | "@babel/helper-plugin-utils" "^7.10.4" |
| 266 | "@babel/helper-remap-async-to-generator" "^7.10.4" | 265 | "@babel/helper-remap-async-to-generator" "^7.10.4" |
| @@ -275,11 +274,11 @@ | @@ -275,11 +274,11 @@ | ||
| 275 | "@babel/helper-plugin-utils" "^7.10.4" | 274 | "@babel/helper-plugin-utils" "^7.10.4" |
| 276 | 275 | ||
| 277 | "@babel/plugin-proposal-decorators@^7.4.4": | 276 | "@babel/plugin-proposal-decorators@^7.4.4": |
| 278 | - version "7.10.4" | ||
| 279 | - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.4.tgz#fe20ef10cc73f386f70910fca48798041cd357c7" | ||
| 280 | - integrity sha512-JHTWjQngOPv+ZQQqOGv2x6sCCr4IYWy7S1/VH6BE9ZfkoLrdQ2GpEP3tfb5M++G9PwvqjhY8VC/C3tXm+/eHvA== | 277 | + version "7.10.5" |
| 278 | + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" | ||
| 279 | + integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ== | ||
| 281 | dependencies: | 280 | dependencies: |
| 282 | - "@babel/helper-create-class-features-plugin" "^7.10.4" | 281 | + "@babel/helper-create-class-features-plugin" "^7.10.5" |
| 283 | "@babel/helper-plugin-utils" "^7.10.4" | 282 | "@babel/helper-plugin-utils" "^7.10.4" |
| 284 | "@babel/plugin-syntax-decorators" "^7.10.4" | 283 | "@babel/plugin-syntax-decorators" "^7.10.4" |
| 285 | 284 | ||
| @@ -510,12 +509,11 @@ | @@ -510,12 +509,11 @@ | ||
| 510 | "@babel/helper-plugin-utils" "^7.10.4" | 509 | "@babel/helper-plugin-utils" "^7.10.4" |
| 511 | 510 | ||
| 512 | "@babel/plugin-transform-block-scoping@^7.10.4": | 511 | "@babel/plugin-transform-block-scoping@^7.10.4": |
| 513 | - version "7.10.4" | ||
| 514 | - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz#a670d1364bb5019a621b9ea2001482876d734787" | ||
| 515 | - integrity sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A== | 512 | + version "7.10.5" |
| 513 | + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" | ||
| 514 | + integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== | ||
| 516 | dependencies: | 515 | dependencies: |
| 517 | "@babel/helper-plugin-utils" "^7.10.4" | 516 | "@babel/helper-plugin-utils" "^7.10.4" |
| 518 | - lodash "^4.17.13" | ||
| 519 | 517 | ||
| 520 | "@babel/plugin-transform-classes@^7.10.4": | 518 | "@babel/plugin-transform-classes@^7.10.4": |
| 521 | version "7.10.4" | 519 | version "7.10.4" |
| @@ -598,11 +596,11 @@ | @@ -598,11 +596,11 @@ | ||
| 598 | "@babel/helper-plugin-utils" "^7.10.4" | 596 | "@babel/helper-plugin-utils" "^7.10.4" |
| 599 | 597 | ||
| 600 | "@babel/plugin-transform-modules-amd@^7.10.4": | 598 | "@babel/plugin-transform-modules-amd@^7.10.4": |
| 601 | - version "7.10.4" | ||
| 602 | - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz#cb407c68b862e4c1d13a2fc738c7ec5ed75fc520" | ||
| 603 | - integrity sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA== | 599 | + version "7.10.5" |
| 600 | + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" | ||
| 601 | + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== | ||
| 604 | dependencies: | 602 | dependencies: |
| 605 | - "@babel/helper-module-transforms" "^7.10.4" | 603 | + "@babel/helper-module-transforms" "^7.10.5" |
| 606 | "@babel/helper-plugin-utils" "^7.10.4" | 604 | "@babel/helper-plugin-utils" "^7.10.4" |
| 607 | babel-plugin-dynamic-import-node "^2.3.3" | 605 | babel-plugin-dynamic-import-node "^2.3.3" |
| 608 | 606 | ||
| @@ -617,12 +615,12 @@ | @@ -617,12 +615,12 @@ | ||
| 617 | babel-plugin-dynamic-import-node "^2.3.3" | 615 | babel-plugin-dynamic-import-node "^2.3.3" |
| 618 | 616 | ||
| 619 | "@babel/plugin-transform-modules-systemjs@^7.10.4": | 617 | "@babel/plugin-transform-modules-systemjs@^7.10.4": |
| 620 | - version "7.10.4" | ||
| 621 | - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz#8f576afd943ac2f789b35ded0a6312f929c633f9" | ||
| 622 | - integrity sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ== | 618 | + version "7.10.5" |
| 619 | + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" | ||
| 620 | + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== | ||
| 623 | dependencies: | 621 | dependencies: |
| 624 | "@babel/helper-hoist-variables" "^7.10.4" | 622 | "@babel/helper-hoist-variables" "^7.10.4" |
| 625 | - "@babel/helper-module-transforms" "^7.10.4" | 623 | + "@babel/helper-module-transforms" "^7.10.5" |
| 626 | "@babel/helper-plugin-utils" "^7.10.4" | 624 | "@babel/helper-plugin-utils" "^7.10.4" |
| 627 | babel-plugin-dynamic-import-node "^2.3.3" | 625 | babel-plugin-dynamic-import-node "^2.3.3" |
| 628 | 626 | ||
| @@ -657,9 +655,9 @@ | @@ -657,9 +655,9 @@ | ||
| 657 | "@babel/helper-replace-supers" "^7.10.4" | 655 | "@babel/helper-replace-supers" "^7.10.4" |
| 658 | 656 | ||
| 659 | "@babel/plugin-transform-parameters@^7.10.4": | 657 | "@babel/plugin-transform-parameters@^7.10.4": |
| 660 | - version "7.10.4" | ||
| 661 | - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz#7b4d137c87ea7adc2a0f3ebf53266871daa6fced" | ||
| 662 | - integrity sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ== | 658 | + version "7.10.5" |
| 659 | + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" | ||
| 660 | + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== | ||
| 663 | dependencies: | 661 | dependencies: |
| 664 | "@babel/helper-get-function-arity" "^7.10.4" | 662 | "@babel/helper-get-function-arity" "^7.10.4" |
| 665 | "@babel/helper-plugin-utils" "^7.10.4" | 663 | "@babel/helper-plugin-utils" "^7.10.4" |
| @@ -686,9 +684,9 @@ | @@ -686,9 +684,9 @@ | ||
| 686 | "@babel/helper-plugin-utils" "^7.10.4" | 684 | "@babel/helper-plugin-utils" "^7.10.4" |
| 687 | 685 | ||
| 688 | "@babel/plugin-transform-runtime@^7.9.0": | 686 | "@babel/plugin-transform-runtime@^7.9.0": |
| 689 | - version "7.10.4" | ||
| 690 | - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.4.tgz#594fb53453ea1b6f0779cceb48ce0718a447feb7" | ||
| 691 | - integrity sha512-8ULlGv8p+Vuxu+kz2Y1dk6MYS2b/Dki+NO6/0ZlfSj5tMalfDL7jI/o/2a+rrWLqSXvnadEqc2WguB4gdQIxZw== | 687 | + version "7.10.5" |
| 688 | + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.5.tgz#3b39b7b24830e0c2d8ff7a4489fe5cf99fbace86" | ||
| 689 | + integrity sha512-tV4V/FjElJ9lQtyjr5xD2IFFbgY46r7EeVu5a8CpEKT5laheHKSlFeHjpkPppW3PqzGLAuv5k2qZX5LgVZIX5w== | ||
| 692 | dependencies: | 690 | dependencies: |
| 693 | "@babel/helper-module-imports" "^7.10.4" | 691 | "@babel/helper-module-imports" "^7.10.4" |
| 694 | "@babel/helper-plugin-utils" "^7.10.4" | 692 | "@babel/helper-plugin-utils" "^7.10.4" |
| @@ -718,9 +716,9 @@ | @@ -718,9 +716,9 @@ | ||
| 718 | "@babel/helper-regex" "^7.10.4" | 716 | "@babel/helper-regex" "^7.10.4" |
| 719 | 717 | ||
| 720 | "@babel/plugin-transform-template-literals@^7.10.4": | 718 | "@babel/plugin-transform-template-literals@^7.10.4": |
| 721 | - version "7.10.4" | ||
| 722 | - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz#e6375407b30fcb7fcfdbba3bb98ef3e9d36df7bc" | ||
| 723 | - integrity sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ== | 719 | + version "7.10.5" |
| 720 | + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" | ||
| 721 | + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== | ||
| 724 | dependencies: | 722 | dependencies: |
| 725 | "@babel/helper-annotate-as-pure" "^7.10.4" | 723 | "@babel/helper-annotate-as-pure" "^7.10.4" |
| 726 | "@babel/helper-plugin-utils" "^7.10.4" | 724 | "@babel/helper-plugin-utils" "^7.10.4" |
| @@ -829,9 +827,9 @@ | @@ -829,9 +827,9 @@ | ||
| 829 | esutils "^2.0.2" | 827 | esutils "^2.0.2" |
| 830 | 828 | ||
| 831 | "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.0": | 829 | "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.0": |
| 832 | - version "7.10.4" | ||
| 833 | - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99" | ||
| 834 | - integrity sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw== | 830 | + version "7.10.5" |
| 831 | + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" | ||
| 832 | + integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== | ||
| 835 | dependencies: | 833 | dependencies: |
| 836 | regenerator-runtime "^0.13.4" | 834 | regenerator-runtime "^0.13.4" |
| 837 | 835 | ||
| @@ -844,28 +842,28 @@ | @@ -844,28 +842,28 @@ | ||
| 844 | "@babel/parser" "^7.10.4" | 842 | "@babel/parser" "^7.10.4" |
| 845 | "@babel/types" "^7.10.4" | 843 | "@babel/types" "^7.10.4" |
| 846 | 844 | ||
| 847 | -"@babel/traverse@^7.10.4", "@babel/traverse@^7.7.0": | ||
| 848 | - version "7.10.4" | ||
| 849 | - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818" | ||
| 850 | - integrity sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q== | 845 | +"@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5", "@babel/traverse@^7.7.0": |
| 846 | + version "7.10.5" | ||
| 847 | + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" | ||
| 848 | + integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== | ||
| 851 | dependencies: | 849 | dependencies: |
| 852 | "@babel/code-frame" "^7.10.4" | 850 | "@babel/code-frame" "^7.10.4" |
| 853 | - "@babel/generator" "^7.10.4" | 851 | + "@babel/generator" "^7.10.5" |
| 854 | "@babel/helper-function-name" "^7.10.4" | 852 | "@babel/helper-function-name" "^7.10.4" |
| 855 | "@babel/helper-split-export-declaration" "^7.10.4" | 853 | "@babel/helper-split-export-declaration" "^7.10.4" |
| 856 | - "@babel/parser" "^7.10.4" | ||
| 857 | - "@babel/types" "^7.10.4" | 854 | + "@babel/parser" "^7.10.5" |
| 855 | + "@babel/types" "^7.10.5" | ||
| 858 | debug "^4.1.0" | 856 | debug "^4.1.0" |
| 859 | globals "^11.1.0" | 857 | globals "^11.1.0" |
| 860 | - lodash "^4.17.13" | 858 | + lodash "^4.17.19" |
| 861 | 859 | ||
| 862 | -"@babel/types@^7.10.4", "@babel/types@^7.4.4", "@babel/types@^7.7.0": | ||
| 863 | - version "7.10.4" | ||
| 864 | - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee" | ||
| 865 | - integrity sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg== | 860 | +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.4.4", "@babel/types@^7.7.0": |
| 861 | + version "7.10.5" | ||
| 862 | + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" | ||
| 863 | + integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== | ||
| 866 | dependencies: | 864 | dependencies: |
| 867 | "@babel/helper-validator-identifier" "^7.10.4" | 865 | "@babel/helper-validator-identifier" "^7.10.4" |
| 868 | - lodash "^4.17.13" | 866 | + lodash "^4.17.19" |
| 869 | to-fast-properties "^2.0.0" | 867 | to-fast-properties "^2.0.0" |
| 870 | 868 | ||
| 871 | "@electron/get@^1.3.1": | 869 | "@electron/get@^1.3.1": |
| @@ -918,9 +916,9 @@ | @@ -918,9 +916,9 @@ | ||
| 918 | integrity sha1-FPzHEqUwA475vhzmlSMVqDn0Zqg= | 916 | integrity sha1-FPzHEqUwA475vhzmlSMVqDn0Zqg= |
| 919 | 917 | ||
| 920 | "@quasar/app@^2.0.0": | 918 | "@quasar/app@^2.0.0": |
| 921 | - version "2.0.4" | ||
| 922 | - resolved "https://registry.yarnpkg.com/@quasar/app/-/app-2.0.4.tgz#b68043c9db445cc6dfa5be4649b986bf105b75ef" | ||
| 923 | - integrity sha512-OesnQeFezPjds7gvFR6TJR1rE6en4Oz80Xsl/0HnG8yGx5wmFRF8R5gJsqeiCeFS3AIhcQ1lDWamh885YBlBAQ== | 919 | + version "2.0.6" |
| 920 | + resolved "https://registry.yarnpkg.com/@quasar/app/-/app-2.0.6.tgz#4462da617b3b1d4c405bd57bc8a92d9b4109eace" | ||
| 921 | + integrity sha512-4A98sb9Y4NPPrIPo7HXJABUzptHp3ji87hD2wDQxpzijhhJmEJpDSiWZR3o3ngP8j/eP3mqJeYbCnXbB6ZnyuA== | ||
| 924 | dependencies: | 922 | dependencies: |
| 925 | "@quasar/babel-preset-app" "2.0.1" | 923 | "@quasar/babel-preset-app" "2.0.1" |
| 926 | "@quasar/fastclick" "1.1.4" | 924 | "@quasar/fastclick" "1.1.4" |
| @@ -1027,9 +1025,9 @@ | @@ -1027,9 +1025,9 @@ | ||
| 1027 | core-js-compat "^3.6.5" | 1025 | core-js-compat "^3.6.5" |
| 1028 | 1026 | ||
| 1029 | "@quasar/extras@^1.0.0": | 1027 | "@quasar/extras@^1.0.0": |
| 1030 | - version "1.8.2" | ||
| 1031 | - resolved "https://registry.yarnpkg.com/@quasar/extras/-/extras-1.8.2.tgz#54ff5e0c8fc17763c083c4f0dcd3a60e1b00b4a8" | ||
| 1032 | - integrity sha512-y3A4OO4DGDxuFyh/X4k5fS17TTxhpPauZv8Qr/0bso+RTk5f+3X4lLAcP7aaiqcBLOV8HsUKpGzNArMleClYgg== | 1028 | + version "1.9.2" |
| 1029 | + resolved "https://registry.yarnpkg.com/@quasar/extras/-/extras-1.9.2.tgz#088b4c6e2d8d0ae625cad311e9c0f9502cab11e2" | ||
| 1030 | + integrity sha512-OP2qTOveQHkTmaxsEhSPhXTs3s0MxGevIjQMZ8e79U3HhlGYSO48wBH2iUrK5c6XlALOq9zqHQJoGt5QnhWdUA== | ||
| 1033 | 1031 | ||
| 1034 | "@quasar/fastclick@1.1.4": | 1032 | "@quasar/fastclick@1.1.4": |
| 1035 | version "1.1.4" | 1033 | version "1.1.4" |
| @@ -1096,10 +1094,15 @@ | @@ -1096,10 +1094,15 @@ | ||
| 1096 | electron-notarize "^0.1.1" | 1094 | electron-notarize "^0.1.1" |
| 1097 | electron-osx-sign "^0.4.11" | 1095 | electron-osx-sign "^0.4.11" |
| 1098 | 1096 | ||
| 1097 | +"@types/eslint-visitor-keys@^1.0.0": | ||
| 1098 | + version "1.0.0" | ||
| 1099 | + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" | ||
| 1100 | + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== | ||
| 1101 | + | ||
| 1099 | "@types/express-serve-static-core@*": | 1102 | "@types/express-serve-static-core@*": |
| 1100 | - version "4.17.8" | ||
| 1101 | - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.8.tgz#b8f7b714138536742da222839892e203df569d1c" | ||
| 1102 | - integrity sha512-1SJZ+R3Q/7mLkOD9ewCBDYD2k0WyZQtWYqF/2VvoNN2/uhI49J9CDN4OAm+wGMA0DbArA4ef27xl4+JwMtGggw== | 1103 | + version "4.17.9" |
| 1104 | + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.9.tgz#2d7b34dcfd25ec663c25c85d76608f8b249667f1" | ||
| 1105 | + integrity sha512-DG0BYg6yO+ePW+XoDENYz8zhNGC3jDDEpComMYn7WJc4mY1Us8Rw9ax2YhJXxpyk2SF47PQAoQ0YyVT1a0bEkA== | ||
| 1103 | dependencies: | 1106 | dependencies: |
| 1104 | "@types/node" "*" | 1107 | "@types/node" "*" |
| 1105 | "@types/qs" "*" | 1108 | "@types/qs" "*" |
| @@ -1154,7 +1157,7 @@ | @@ -1154,7 +1157,7 @@ | ||
| 1154 | dependencies: | 1157 | dependencies: |
| 1155 | "@types/node" "*" | 1158 | "@types/node" "*" |
| 1156 | 1159 | ||
| 1157 | -"@types/json-schema@^7.0.4": | 1160 | +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4": |
| 1158 | version "7.0.5" | 1161 | version "7.0.5" |
| 1159 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" | 1162 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" |
| 1160 | integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== | 1163 | integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== |
| @@ -1164,15 +1167,22 @@ | @@ -1164,15 +1167,22 @@ | ||
| 1164 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" | 1167 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" |
| 1165 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= | 1168 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= |
| 1166 | 1169 | ||
| 1170 | +"@types/jsonwebtoken@^8.5.0": | ||
| 1171 | + version "8.5.0" | ||
| 1172 | + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz#2531d5e300803aa63279b232c014acf780c981c5" | ||
| 1173 | + integrity sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg== | ||
| 1174 | + dependencies: | ||
| 1175 | + "@types/node" "*" | ||
| 1176 | + | ||
| 1167 | "@types/lru-cache@5.1.0": | 1177 | "@types/lru-cache@5.1.0": |
| 1168 | version "5.1.0" | 1178 | version "5.1.0" |
| 1169 | resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" | 1179 | resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" |
| 1170 | integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== | 1180 | integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== |
| 1171 | 1181 | ||
| 1172 | "@types/mime@*": | 1182 | "@types/mime@*": |
| 1173 | - version "2.0.2" | ||
| 1174 | - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.2.tgz#857a118d8634c84bba7ae14088e4508490cd5da5" | ||
| 1175 | - integrity sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q== | 1183 | + version "2.0.3" |
| 1184 | + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" | ||
| 1185 | + integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q== | ||
| 1176 | 1186 | ||
| 1177 | "@types/minimatch@*": | 1187 | "@types/minimatch@*": |
| 1178 | version "3.0.3" | 1188 | version "3.0.3" |
| @@ -1180,9 +1190,14 @@ | @@ -1180,9 +1190,14 @@ | ||
| 1180 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== | 1190 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== |
| 1181 | 1191 | ||
| 1182 | "@types/node@*": | 1192 | "@types/node@*": |
| 1183 | - version "14.0.22" | ||
| 1184 | - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.22.tgz#23ea4d88189cec7d58f9e6b66f786b215eb61bdc" | ||
| 1185 | - integrity sha512-emeGcJvdiZ4Z3ohbmw93E/64jRzUHAItSHt8nF7M4TGgQTiWqFVGB8KNpLGFmUHmHLvjvBgFwVlqNcq+VuGv9g== | 1193 | + version "14.0.27" |
| 1194 | + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" | ||
| 1195 | + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== | ||
| 1196 | + | ||
| 1197 | +"@types/node@^10.17.15": | ||
| 1198 | + version "10.17.28" | ||
| 1199 | + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.28.tgz#0e36d718a29355ee51cec83b42d921299200f6d9" | ||
| 1200 | + integrity sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ== | ||
| 1186 | 1201 | ||
| 1187 | "@types/q@^1.5.1": | 1202 | "@types/q@^1.5.1": |
| 1188 | version "1.5.4" | 1203 | version "1.5.4" |
| @@ -1190,9 +1205,9 @@ | @@ -1190,9 +1205,9 @@ | ||
| 1190 | integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== | 1205 | integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== |
| 1191 | 1206 | ||
| 1192 | "@types/qs@*": | 1207 | "@types/qs@*": |
| 1193 | - version "6.9.3" | ||
| 1194 | - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.3.tgz#b755a0934564a200d3efdf88546ec93c369abd03" | ||
| 1195 | - integrity sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA== | 1208 | + version "6.9.4" |
| 1209 | + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a" | ||
| 1210 | + integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ== | ||
| 1196 | 1211 | ||
| 1197 | "@types/range-parser@*": | 1212 | "@types/range-parser@*": |
| 1198 | version "1.2.3" | 1213 | version "1.2.3" |
| @@ -1200,9 +1215,9 @@ | @@ -1200,9 +1215,9 @@ | ||
| 1200 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== | 1215 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== |
| 1201 | 1216 | ||
| 1202 | "@types/serve-static@*": | 1217 | "@types/serve-static@*": |
| 1203 | - version "1.13.4" | ||
| 1204 | - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.4.tgz#6662a93583e5a6cabca1b23592eb91e12fa80e7c" | ||
| 1205 | - integrity sha512-jTDt0o/YbpNwZbQmE/+2e+lfjJEJJR0I3OFaKQKPWkASkCoW3i6fsUnqudSMcNAfbtmADGu8f4MV4q+GqULmug== | 1218 | + version "1.13.5" |
| 1219 | + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.5.tgz#3d25d941a18415d3ab092def846e135a08bbcf53" | ||
| 1220 | + integrity sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ== | ||
| 1206 | dependencies: | 1221 | dependencies: |
| 1207 | "@types/express-serve-static-core" "*" | 1222 | "@types/express-serve-static-core" "*" |
| 1208 | "@types/mime" "*" | 1223 | "@types/mime" "*" |
| @@ -1251,9 +1266,9 @@ | @@ -1251,9 +1266,9 @@ | ||
| 1251 | "@types/webpack" "*" | 1266 | "@types/webpack" "*" |
| 1252 | 1267 | ||
| 1253 | "@types/webpack-sources@*": | 1268 | "@types/webpack-sources@*": |
| 1254 | - version "1.4.0" | ||
| 1255 | - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.0.tgz#e58f1f05f87d39a5c64cf85705bdbdbb94d4d57e" | ||
| 1256 | - integrity sha512-c88dKrpSle9BtTqR6ifdaxu1Lvjsl3C5OsfvuUbUwdXymshv1TkufUAXBajCCUM/f/TmnkZC/Esb03MinzSiXQ== | 1269 | + version "1.4.2" |
| 1270 | + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.2.tgz#5d3d4dea04008a779a90135ff96fb5c0c9e6292c" | ||
| 1271 | + integrity sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw== | ||
| 1257 | dependencies: | 1272 | dependencies: |
| 1258 | "@types/node" "*" | 1273 | "@types/node" "*" |
| 1259 | "@types/source-list-map" "*" | 1274 | "@types/source-list-map" "*" |
| @@ -1283,10 +1298,70 @@ | @@ -1283,10 +1298,70 @@ | ||
| 1283 | "@types/webpack-sources" "*" | 1298 | "@types/webpack-sources" "*" |
| 1284 | source-map "^0.6.0" | 1299 | source-map "^0.6.0" |
| 1285 | 1300 | ||
| 1301 | +"@typescript-eslint/eslint-plugin@^3.3.0": | ||
| 1302 | + version "3.7.1" | ||
| 1303 | + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.7.1.tgz#d144c49a9a0ffe8dd704bb179c243df76c111bc9" | ||
| 1304 | + integrity sha512-3DB9JDYkMrc8Au00rGFiJLK2Ja9CoMP6Ut0sHsXp3ZtSugjNxvSSHTnKLfo4o+QmjYBJqEznDqsG1zj4F2xnsg== | ||
| 1305 | + dependencies: | ||
| 1306 | + "@typescript-eslint/experimental-utils" "3.7.1" | ||
| 1307 | + debug "^4.1.1" | ||
| 1308 | + functional-red-black-tree "^1.0.1" | ||
| 1309 | + regexpp "^3.0.0" | ||
| 1310 | + semver "^7.3.2" | ||
| 1311 | + tsutils "^3.17.1" | ||
| 1312 | + | ||
| 1313 | +"@typescript-eslint/experimental-utils@3.7.1": | ||
| 1314 | + version "3.7.1" | ||
| 1315 | + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.7.1.tgz#ab036caaed4c870d22531d41f9352f3147364d61" | ||
| 1316 | + integrity sha512-TqE97pv7HrqWcGJbLbZt1v59tcqsSVpWTOf1AqrWK7n8nok2sGgVtYRuGXeNeLw3wXlLEbY1MKP3saB2HsO/Ng== | ||
| 1317 | + dependencies: | ||
| 1318 | + "@types/json-schema" "^7.0.3" | ||
| 1319 | + "@typescript-eslint/types" "3.7.1" | ||
| 1320 | + "@typescript-eslint/typescript-estree" "3.7.1" | ||
| 1321 | + eslint-scope "^5.0.0" | ||
| 1322 | + eslint-utils "^2.0.0" | ||
| 1323 | + | ||
| 1324 | +"@typescript-eslint/parser@^3.3.0": | ||
| 1325 | + version "3.7.1" | ||
| 1326 | + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.7.1.tgz#5d9ccecb116d12d9c6073e9861c57c9b1aa88128" | ||
| 1327 | + integrity sha512-W4QV/gXvfIsccN8225784LNOorcm7ch68Fi3V4Wg7gmkWSQRKevO4RrRqWo6N/Z/myK1QAiGgeaXN57m+R/8iQ== | ||
| 1328 | + dependencies: | ||
| 1329 | + "@types/eslint-visitor-keys" "^1.0.0" | ||
| 1330 | + "@typescript-eslint/experimental-utils" "3.7.1" | ||
| 1331 | + "@typescript-eslint/types" "3.7.1" | ||
| 1332 | + "@typescript-eslint/typescript-estree" "3.7.1" | ||
| 1333 | + eslint-visitor-keys "^1.1.0" | ||
| 1334 | + | ||
| 1335 | +"@typescript-eslint/types@3.7.1": | ||
| 1336 | + version "3.7.1" | ||
| 1337 | + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.7.1.tgz#90375606b2fd73c1224fe9e397ee151e28fa1e0c" | ||
| 1338 | + integrity sha512-PZe8twm5Z4b61jt7GAQDor6KiMhgPgf4XmUb9zdrwTbgtC/Sj29gXP1dws9yEn4+aJeyXrjsD9XN7AWFhmnUfg== | ||
| 1339 | + | ||
| 1340 | +"@typescript-eslint/typescript-estree@3.7.1": | ||
| 1341 | + version "3.7.1" | ||
| 1342 | + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.7.1.tgz#ce1ffbd0fa53f34d4ce851a7a364e392432f6eb3" | ||
| 1343 | + integrity sha512-m97vNZkI08dunYOr2lVZOHoyfpqRs0KDpd6qkGaIcLGhQ2WPtgHOd/eVbsJZ0VYCQvupKrObAGTOvk3tfpybYA== | ||
| 1344 | + dependencies: | ||
| 1345 | + "@typescript-eslint/types" "3.7.1" | ||
| 1346 | + "@typescript-eslint/visitor-keys" "3.7.1" | ||
| 1347 | + debug "^4.1.1" | ||
| 1348 | + glob "^7.1.6" | ||
| 1349 | + is-glob "^4.0.1" | ||
| 1350 | + lodash "^4.17.15" | ||
| 1351 | + semver "^7.3.2" | ||
| 1352 | + tsutils "^3.17.1" | ||
| 1353 | + | ||
| 1354 | +"@typescript-eslint/visitor-keys@3.7.1": | ||
| 1355 | + version "3.7.1" | ||
| 1356 | + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.7.1.tgz#b90191e74efdee656be8c5a30f428ed16dda46d1" | ||
| 1357 | + integrity sha512-xn22sQbEya+Utj2IqJHGLA3i1jDzR43RzWupxojbSWnj3nnPLavaQmWe5utw03CwYao3r00qzXfgJMGNkrzrAA== | ||
| 1358 | + dependencies: | ||
| 1359 | + eslint-visitor-keys "^1.1.0" | ||
| 1360 | + | ||
| 1286 | "@vue/component-compiler-utils@^3.1.0": | 1361 | "@vue/component-compiler-utils@^3.1.0": |
| 1287 | - version "3.1.2" | ||
| 1288 | - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz#8213a5ff3202f9f2137fe55370f9e8b9656081c3" | ||
| 1289 | - integrity sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug== | 1362 | + version "3.2.0" |
| 1363 | + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d" | ||
| 1364 | + integrity sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw== | ||
| 1290 | dependencies: | 1365 | dependencies: |
| 1291 | consolidate "^0.15.1" | 1366 | consolidate "^0.15.1" |
| 1292 | hash-sum "^1.0.2" | 1367 | hash-sum "^1.0.2" |
| @@ -1501,9 +1576,9 @@ ajv-errors@^1.0.0: | @@ -1501,9 +1576,9 @@ ajv-errors@^1.0.0: | ||
| 1501 | integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== | 1576 | integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== |
| 1502 | 1577 | ||
| 1503 | ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: | 1578 | ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: |
| 1504 | - version "3.5.1" | ||
| 1505 | - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.1.tgz#b83ca89c5d42d69031f424cad49aada0236c6957" | ||
| 1506 | - integrity sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA== | 1579 | + version "3.5.2" |
| 1580 | + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" | ||
| 1581 | + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== | ||
| 1507 | 1582 | ||
| 1508 | ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: | 1583 | ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: |
| 1509 | version "6.12.3" | 1584 | version "6.12.3" |
| @@ -1820,21 +1895,12 @@ aws4@^1.8.0: | @@ -1820,21 +1895,12 @@ aws4@^1.8.0: | ||
| 1820 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" | 1895 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" |
| 1821 | integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== | 1896 | integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== |
| 1822 | 1897 | ||
| 1823 | -axios@0.19.0: | ||
| 1824 | - version "0.19.0" | ||
| 1825 | - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" | ||
| 1826 | - integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== | ||
| 1827 | - dependencies: | ||
| 1828 | - follow-redirects "1.5.10" | ||
| 1829 | - is-buffer "^2.0.2" | ||
| 1830 | - | ||
| 1831 | -axios@^0.18.1: | ||
| 1832 | - version "0.18.1" | ||
| 1833 | - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" | ||
| 1834 | - integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== | 1898 | +axios@^0.19.2: |
| 1899 | + version "0.19.2" | ||
| 1900 | + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" | ||
| 1901 | + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== | ||
| 1835 | dependencies: | 1902 | dependencies: |
| 1836 | follow-redirects "1.5.10" | 1903 | follow-redirects "1.5.10" |
| 1837 | - is-buffer "^2.0.2" | ||
| 1838 | 1904 | ||
| 1839 | babel-eslint@^10.0.1: | 1905 | babel-eslint@^10.0.1: |
| 1840 | version "10.1.0" | 1906 | version "10.1.0" |
| @@ -2138,6 +2204,11 @@ buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: | @@ -2138,6 +2204,11 @@ buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: | ||
| 2138 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" | 2204 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" |
| 2139 | integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= | 2205 | integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= |
| 2140 | 2206 | ||
| 2207 | +buffer-equal-constant-time@1.0.1: | ||
| 2208 | + version "1.0.1" | ||
| 2209 | + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" | ||
| 2210 | + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= | ||
| 2211 | + | ||
| 2141 | buffer-fill@^1.0.0: | 2212 | buffer-fill@^1.0.0: |
| 2142 | version "1.0.0" | 2213 | version "1.0.0" |
| 2143 | resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" | 2214 | resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" |
| @@ -2331,9 +2402,9 @@ caniuse-api@^3.0.0: | @@ -2331,9 +2402,9 @@ caniuse-api@^3.0.0: | ||
| 2331 | lodash.uniq "^4.5.0" | 2402 | lodash.uniq "^4.5.0" |
| 2332 | 2403 | ||
| 2333 | caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001061, caniuse-lite@^1.0.30001093: | 2404 | caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001061, caniuse-lite@^1.0.30001093: |
| 2334 | - version "1.0.30001099" | ||
| 2335 | - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001099.tgz#540118fcc6842d1fde62f4ee5521d1ec6afdb40e" | ||
| 2336 | - integrity sha512-sdS9A+sQTk7wKoeuZBN/YMAHVztUfVnjDi4/UV3sDE8xoh7YR12hKW+pIdB3oqKGwr9XaFL2ovfzt9w8eUI5CA== | 2405 | + version "1.0.30001107" |
| 2406 | + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001107.tgz#809360df7a5b3458f627aa46b0f6ed6d5239da9a" | ||
| 2407 | + integrity sha512-86rCH+G8onCmdN4VZzJet5uPELII59cUzDphko3thQFgAQG1RNa+sVLDoALIhRYmflo5iSIzWY3vu1XTWtNMQQ== | ||
| 2337 | 2408 | ||
| 2338 | caseless@~0.12.0: | 2409 | caseless@~0.12.0: |
| 2339 | version "0.12.0" | 2410 | version "0.12.0" |
| @@ -2381,12 +2452,35 @@ chardet@^0.7.0: | @@ -2381,12 +2452,35 @@ chardet@^0.7.0: | ||
| 2381 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" | 2452 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" |
| 2382 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== | 2453 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== |
| 2383 | 2454 | ||
| 2455 | +chart.js@^2.9.3: | ||
| 2456 | + version "2.9.3" | ||
| 2457 | + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.9.3.tgz#ae3884114dafd381bc600f5b35a189138aac1ef7" | ||
| 2458 | + integrity sha512-+2jlOobSk52c1VU6fzkh3UwqHMdSlgH1xFv9FKMqHiNCpXsGPQa/+81AFa+i3jZ253Mq9aAycPwDjnn1XbRNNw== | ||
| 2459 | + dependencies: | ||
| 2460 | + chartjs-color "^2.1.0" | ||
| 2461 | + moment "^2.10.2" | ||
| 2462 | + | ||
| 2463 | +chartjs-color-string@^0.6.0: | ||
| 2464 | + version "0.6.0" | ||
| 2465 | + resolved "https://registry.yarnpkg.com/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz#1df096621c0e70720a64f4135ea171d051402f71" | ||
| 2466 | + integrity sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A== | ||
| 2467 | + dependencies: | ||
| 2468 | + color-name "^1.0.0" | ||
| 2469 | + | ||
| 2470 | +chartjs-color@^2.1.0: | ||
| 2471 | + version "2.4.1" | ||
| 2472 | + resolved "https://registry.yarnpkg.com/chartjs-color/-/chartjs-color-2.4.1.tgz#6118bba202fe1ea79dd7f7c0f9da93467296c3b0" | ||
| 2473 | + integrity sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w== | ||
| 2474 | + dependencies: | ||
| 2475 | + chartjs-color-string "^0.6.0" | ||
| 2476 | + color-convert "^1.9.3" | ||
| 2477 | + | ||
| 2384 | check-types@^8.0.3: | 2478 | check-types@^8.0.3: |
| 2385 | version "8.0.3" | 2479 | version "8.0.3" |
| 2386 | resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" | 2480 | resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" |
| 2387 | integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== | 2481 | integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== |
| 2388 | 2482 | ||
| 2389 | -chokidar@3.4.0, chokidar@^3.4.0: | 2483 | +chokidar@3.4.0: |
| 2390 | version "3.4.0" | 2484 | version "3.4.0" |
| 2391 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" | 2485 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" |
| 2392 | integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== | 2486 | integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== |
| @@ -2420,6 +2514,21 @@ chokidar@^2.1.8: | @@ -2420,6 +2514,21 @@ chokidar@^2.1.8: | ||
| 2420 | optionalDependencies: | 2514 | optionalDependencies: |
| 2421 | fsevents "^1.2.7" | 2515 | fsevents "^1.2.7" |
| 2422 | 2516 | ||
| 2517 | +chokidar@^3.4.1: | ||
| 2518 | + version "3.4.1" | ||
| 2519 | + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" | ||
| 2520 | + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== | ||
| 2521 | + dependencies: | ||
| 2522 | + anymatch "~3.1.1" | ||
| 2523 | + braces "~3.0.2" | ||
| 2524 | + glob-parent "~5.1.0" | ||
| 2525 | + is-binary-path "~2.1.0" | ||
| 2526 | + is-glob "~4.0.1" | ||
| 2527 | + normalize-path "~3.0.0" | ||
| 2528 | + readdirp "~3.4.0" | ||
| 2529 | + optionalDependencies: | ||
| 2530 | + fsevents "~2.1.2" | ||
| 2531 | + | ||
| 2423 | chownr@^1.1.1: | 2532 | chownr@^1.1.1: |
| 2424 | version "1.1.4" | 2533 | version "1.1.4" |
| 2425 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" | 2534 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" |
| @@ -2545,7 +2654,7 @@ collection-visit@^1.0.0: | @@ -2545,7 +2654,7 @@ collection-visit@^1.0.0: | ||
| 2545 | map-visit "^1.0.0" | 2654 | map-visit "^1.0.0" |
| 2546 | object-visit "^1.0.0" | 2655 | object-visit "^1.0.0" |
| 2547 | 2656 | ||
| 2548 | -color-convert@^1.9.0, color-convert@^1.9.1: | 2657 | +color-convert@^1.9.0, color-convert@^1.9.1, color-convert@^1.9.3: |
| 2549 | version "1.9.3" | 2658 | version "1.9.3" |
| 2550 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" | 2659 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" |
| 2551 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== | 2660 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== |
| @@ -2691,6 +2800,11 @@ config-chain@^1.1.11: | @@ -2691,6 +2800,11 @@ config-chain@^1.1.11: | ||
| 2691 | ini "^1.3.4" | 2800 | ini "^1.3.4" |
| 2692 | proto-list "~1.2.1" | 2801 | proto-list "~1.2.1" |
| 2693 | 2802 | ||
| 2803 | +confusing-browser-globals@^1.0.9: | ||
| 2804 | + version "1.0.9" | ||
| 2805 | + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" | ||
| 2806 | + integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== | ||
| 2807 | + | ||
| 2694 | connect-history-api-fallback@^1.6.0: | 2808 | connect-history-api-fallback@^1.6.0: |
| 2695 | version "1.6.0" | 2809 | version "1.6.0" |
| 2696 | resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" | 2810 | resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" |
| @@ -3104,11 +3218,6 @@ dashdash@^1.12.0: | @@ -3104,11 +3218,6 @@ dashdash@^1.12.0: | ||
| 3104 | dependencies: | 3218 | dependencies: |
| 3105 | assert-plus "^1.0.0" | 3219 | assert-plus "^1.0.0" |
| 3106 | 3220 | ||
| 3107 | -date-fns@^2.0.0-beta.4: | ||
| 3108 | - version "2.14.0" | ||
| 3109 | - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.14.0.tgz#359a87a265bb34ef2e38f93ecf63ac453f9bc7ba" | ||
| 3110 | - integrity sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw== | ||
| 3111 | - | ||
| 3112 | de-indent@^1.0.2: | 3221 | de-indent@^1.0.2: |
| 3113 | version "1.0.2" | 3222 | version "1.0.2" |
| 3114 | resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" | 3223 | resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" |
| @@ -3416,6 +3525,13 @@ ecc-jsbn@~0.1.1: | @@ -3416,6 +3525,13 @@ ecc-jsbn@~0.1.1: | ||
| 3416 | jsbn "~0.1.0" | 3525 | jsbn "~0.1.0" |
| 3417 | safer-buffer "^2.1.0" | 3526 | safer-buffer "^2.1.0" |
| 3418 | 3527 | ||
| 3528 | +ecdsa-sig-formatter@1.0.11: | ||
| 3529 | + version "1.0.11" | ||
| 3530 | + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" | ||
| 3531 | + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== | ||
| 3532 | + dependencies: | ||
| 3533 | + safe-buffer "^5.0.1" | ||
| 3534 | + | ||
| 3419 | ee-first@1.1.1: | 3535 | ee-first@1.1.1: |
| 3420 | version "1.1.1" | 3536 | version "1.1.1" |
| 3421 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" | 3537 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" |
| @@ -3447,9 +3563,9 @@ electron-osx-sign@^0.4.11: | @@ -3447,9 +3563,9 @@ electron-osx-sign@^0.4.11: | ||
| 3447 | plist "^3.0.1" | 3563 | plist "^3.0.1" |
| 3448 | 3564 | ||
| 3449 | electron-to-chromium@^1.3.488: | 3565 | electron-to-chromium@^1.3.488: |
| 3450 | - version "1.3.496" | ||
| 3451 | - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.496.tgz#3f43d32930481d82ad3663d79658e7c59a58af0b" | ||
| 3452 | - integrity sha512-TXY4mwoyowwi4Lsrq9vcTUYBThyc1b2hXaTZI13p8/FRhY2CTaq5lK+DVjhYkKiTLsKt569Xes+0J5JsVXFurQ== | 3566 | + version "1.3.512" |
| 3567 | + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.512.tgz#620e6731c693ddaaf3750f23dde7f7c4347b7327" | ||
| 3568 | + integrity sha512-y02hdFg7c4jTfREcXf4fRhHLt7BzofMgd7JAKY+u9i62E0D1eIpLQPFo5/eboZL0bIVY9YHZA53+vCGNFREOXA== | ||
| 3453 | 3569 | ||
| 3454 | elementtree@0.1.7: | 3570 | elementtree@0.1.7: |
| 3455 | version "0.1.7" | 3571 | version "0.1.7" |
| @@ -3499,9 +3615,9 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: | @@ -3499,9 +3615,9 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: | ||
| 3499 | once "^1.4.0" | 3615 | once "^1.4.0" |
| 3500 | 3616 | ||
| 3501 | enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: | 3617 | enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: |
| 3502 | - version "4.2.0" | ||
| 3503 | - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz#5d43bda4a0fd447cb0ebbe71bef8deff8805ad0d" | ||
| 3504 | - integrity sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ== | 3618 | + version "4.3.0" |
| 3619 | + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" | ||
| 3620 | + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== | ||
| 3505 | dependencies: | 3621 | dependencies: |
| 3506 | graceful-fs "^4.1.2" | 3622 | graceful-fs "^4.1.2" |
| 3507 | memory-fs "^0.5.0" | 3623 | memory-fs "^0.5.0" |
| @@ -3575,9 +3691,9 @@ es6-error@^4.1.1: | @@ -3575,9 +3691,9 @@ es6-error@^4.1.1: | ||
| 3575 | integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== | 3691 | integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== |
| 3576 | 3692 | ||
| 3577 | escalade@^3.0.1: | 3693 | escalade@^3.0.1: |
| 3578 | - version "3.0.1" | ||
| 3579 | - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.1.tgz#52568a77443f6927cd0ab9c73129137533c965ed" | ||
| 3580 | - integrity sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA== | 3694 | + version "3.0.2" |
| 3695 | + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" | ||
| 3696 | + integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== | ||
| 3581 | 3697 | ||
| 3582 | escape-html@^1.0.1, escape-html@~1.0.3: | 3698 | escape-html@^1.0.1, escape-html@~1.0.3: |
| 3583 | version "1.0.3" | 3699 | version "1.0.3" |
| @@ -3594,10 +3710,14 @@ escape-string-regexp@^4.0.0: | @@ -3594,10 +3710,14 @@ escape-string-regexp@^4.0.0: | ||
| 3594 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" | 3710 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" |
| 3595 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== | 3711 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== |
| 3596 | 3712 | ||
| 3597 | -eslint-config-standard@^14.1.0: | ||
| 3598 | - version "14.1.1" | ||
| 3599 | - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" | ||
| 3600 | - integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== | 3713 | +eslint-config-airbnb-base@^14.0.0: |
| 3714 | + version "14.2.0" | ||
| 3715 | + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" | ||
| 3716 | + integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== | ||
| 3717 | + dependencies: | ||
| 3718 | + confusing-browser-globals "^1.0.9" | ||
| 3719 | + object.assign "^4.1.0" | ||
| 3720 | + object.entries "^1.1.2" | ||
| 3601 | 3721 | ||
| 3602 | eslint-import-resolver-node@^0.3.3: | 3722 | eslint-import-resolver-node@^0.3.3: |
| 3603 | version "0.3.4" | 3723 | version "0.3.4" |
| @@ -3626,15 +3746,7 @@ eslint-module-utils@^2.6.0: | @@ -3626,15 +3746,7 @@ eslint-module-utils@^2.6.0: | ||
| 3626 | debug "^2.6.9" | 3746 | debug "^2.6.9" |
| 3627 | pkg-dir "^2.0.0" | 3747 | pkg-dir "^2.0.0" |
| 3628 | 3748 | ||
| 3629 | -eslint-plugin-es@^3.0.0: | ||
| 3630 | - version "3.0.1" | ||
| 3631 | - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" | ||
| 3632 | - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== | ||
| 3633 | - dependencies: | ||
| 3634 | - eslint-utils "^2.0.0" | ||
| 3635 | - regexpp "^3.0.0" | ||
| 3636 | - | ||
| 3637 | -eslint-plugin-import@^2.14.0: | 3749 | +eslint-plugin-import@^2.20.1: |
| 3638 | version "2.22.0" | 3750 | version "2.22.0" |
| 3639 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" | 3751 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" |
| 3640 | integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== | 3752 | integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== |
| @@ -3653,28 +3765,6 @@ eslint-plugin-import@^2.14.0: | @@ -3653,28 +3765,6 @@ eslint-plugin-import@^2.14.0: | ||
| 3653 | resolve "^1.17.0" | 3765 | resolve "^1.17.0" |
| 3654 | tsconfig-paths "^3.9.0" | 3766 | tsconfig-paths "^3.9.0" |
| 3655 | 3767 | ||
| 3656 | -eslint-plugin-node@^11.0.0: | ||
| 3657 | - version "11.1.0" | ||
| 3658 | - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" | ||
| 3659 | - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== | ||
| 3660 | - dependencies: | ||
| 3661 | - eslint-plugin-es "^3.0.0" | ||
| 3662 | - eslint-utils "^2.0.0" | ||
| 3663 | - ignore "^5.1.1" | ||
| 3664 | - minimatch "^3.0.4" | ||
| 3665 | - resolve "^1.10.1" | ||
| 3666 | - semver "^6.1.0" | ||
| 3667 | - | ||
| 3668 | -eslint-plugin-promise@^4.0.1: | ||
| 3669 | - version "4.2.1" | ||
| 3670 | - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" | ||
| 3671 | - integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== | ||
| 3672 | - | ||
| 3673 | -eslint-plugin-standard@^4.0.0: | ||
| 3674 | - version "4.0.1" | ||
| 3675 | - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" | ||
| 3676 | - integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== | ||
| 3677 | - | ||
| 3678 | eslint-plugin-vue@^6.1.2: | 3768 | eslint-plugin-vue@^6.1.2: |
| 3679 | version "6.2.2" | 3769 | version "6.2.2" |
| 3680 | resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe" | 3770 | resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe" |
| @@ -3816,9 +3906,9 @@ eventemitter3@^4.0.0: | @@ -3816,9 +3906,9 @@ eventemitter3@^4.0.0: | ||
| 3816 | integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== | 3906 | integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== |
| 3817 | 3907 | ||
| 3818 | events@^3.0.0: | 3908 | events@^3.0.0: |
| 3819 | - version "3.1.0" | ||
| 3820 | - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" | ||
| 3821 | - integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== | 3909 | + version "3.2.0" |
| 3910 | + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" | ||
| 3911 | + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== | ||
| 3822 | 3912 | ||
| 3823 | eventsource@^1.0.7: | 3913 | eventsource@^1.0.7: |
| 3824 | version "1.0.7" | 3914 | version "1.0.7" |
| @@ -4836,7 +4926,7 @@ ignore@^4.0.6: | @@ -4836,7 +4926,7 @@ ignore@^4.0.6: | ||
| 4836 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" | 4926 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" |
| 4837 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== | 4927 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== |
| 4838 | 4928 | ||
| 4839 | -ignore@^5.1.1, ignore@^5.1.4: | 4929 | +ignore@^5.1.4: |
| 4840 | version "5.1.8" | 4930 | version "5.1.8" |
| 4841 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" | 4931 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" |
| 4842 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== | 4932 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== |
| @@ -4959,9 +5049,9 @@ inquirer@7.2.0: | @@ -4959,9 +5049,9 @@ inquirer@7.2.0: | ||
| 4959 | through "^2.3.6" | 5049 | through "^2.3.6" |
| 4960 | 5050 | ||
| 4961 | inquirer@^7.0.0: | 5051 | inquirer@^7.0.0: |
| 4962 | - version "7.3.1" | ||
| 4963 | - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.1.tgz#ac6aba1abdfdd5ad34e7069370411edba17f6439" | ||
| 4964 | - integrity sha512-/+vOpHQHhoh90Znev8BXiuw1TDQ7IDxWsQnFafUEoK5+4uN5Eoz1p+3GqOj/NtzEi9VzWKQcV9Bm+i8moxedsA== | 5052 | + version "7.3.3" |
| 5053 | + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" | ||
| 5054 | + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== | ||
| 4965 | dependencies: | 5055 | dependencies: |
| 4966 | ansi-escapes "^4.2.1" | 5056 | ansi-escapes "^4.2.1" |
| 4967 | chalk "^4.1.0" | 5057 | chalk "^4.1.0" |
| @@ -4969,7 +5059,7 @@ inquirer@^7.0.0: | @@ -4969,7 +5059,7 @@ inquirer@^7.0.0: | ||
| 4969 | cli-width "^3.0.0" | 5059 | cli-width "^3.0.0" |
| 4970 | external-editor "^3.0.3" | 5060 | external-editor "^3.0.3" |
| 4971 | figures "^3.0.0" | 5061 | figures "^3.0.0" |
| 4972 | - lodash "^4.17.16" | 5062 | + lodash "^4.17.19" |
| 4973 | mute-stream "0.0.8" | 5063 | mute-stream "0.0.8" |
| 4974 | run-async "^2.4.0" | 5064 | run-async "^2.4.0" |
| 4975 | rxjs "^6.6.0" | 5065 | rxjs "^6.6.0" |
| @@ -5065,11 +5155,6 @@ is-buffer@^1.1.5: | @@ -5065,11 +5155,6 @@ is-buffer@^1.1.5: | ||
| 5065 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" | 5155 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" |
| 5066 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== | 5156 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== |
| 5067 | 5157 | ||
| 5068 | -is-buffer@^2.0.2: | ||
| 5069 | - version "2.0.4" | ||
| 5070 | - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" | ||
| 5071 | - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== | ||
| 5072 | - | ||
| 5073 | is-callable@^1.1.4, is-callable@^1.2.0: | 5158 | is-callable@^1.1.4, is-callable@^1.2.0: |
| 5074 | version "1.2.0" | 5159 | version "1.2.0" |
| 5075 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" | 5160 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" |
| @@ -5453,6 +5538,22 @@ jsonfile@^6.0.1: | @@ -5453,6 +5538,22 @@ jsonfile@^6.0.1: | ||
| 5453 | optionalDependencies: | 5538 | optionalDependencies: |
| 5454 | graceful-fs "^4.1.6" | 5539 | graceful-fs "^4.1.6" |
| 5455 | 5540 | ||
| 5541 | +jsonwebtoken@^8.5.1: | ||
| 5542 | + version "8.5.1" | ||
| 5543 | + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" | ||
| 5544 | + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== | ||
| 5545 | + dependencies: | ||
| 5546 | + jws "^3.2.2" | ||
| 5547 | + lodash.includes "^4.3.0" | ||
| 5548 | + lodash.isboolean "^3.0.3" | ||
| 5549 | + lodash.isinteger "^4.0.4" | ||
| 5550 | + lodash.isnumber "^3.0.3" | ||
| 5551 | + lodash.isplainobject "^4.0.6" | ||
| 5552 | + lodash.isstring "^4.0.1" | ||
| 5553 | + lodash.once "^4.0.0" | ||
| 5554 | + ms "^2.1.1" | ||
| 5555 | + semver "^5.6.0" | ||
| 5556 | + | ||
| 5456 | jsprim@^1.2.2: | 5557 | jsprim@^1.2.2: |
| 5457 | version "1.4.1" | 5558 | version "1.4.1" |
| 5458 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" | 5559 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" |
| @@ -5463,6 +5564,23 @@ jsprim@^1.2.2: | @@ -5463,6 +5564,23 @@ jsprim@^1.2.2: | ||
| 5463 | json-schema "0.2.3" | 5564 | json-schema "0.2.3" |
| 5464 | verror "1.10.0" | 5565 | verror "1.10.0" |
| 5465 | 5566 | ||
| 5567 | +jwa@^1.4.1: | ||
| 5568 | + version "1.4.1" | ||
| 5569 | + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" | ||
| 5570 | + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== | ||
| 5571 | + dependencies: | ||
| 5572 | + buffer-equal-constant-time "1.0.1" | ||
| 5573 | + ecdsa-sig-formatter "1.0.11" | ||
| 5574 | + safe-buffer "^5.0.1" | ||
| 5575 | + | ||
| 5576 | +jws@^3.2.2: | ||
| 5577 | + version "3.2.2" | ||
| 5578 | + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" | ||
| 5579 | + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== | ||
| 5580 | + dependencies: | ||
| 5581 | + jwa "^1.4.1" | ||
| 5582 | + safe-buffer "^5.0.1" | ||
| 5583 | + | ||
| 5466 | keyv@^3.0.0: | 5584 | keyv@^3.0.0: |
| 5467 | version "3.1.0" | 5585 | version "3.1.0" |
| 5468 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" | 5586 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" |
| @@ -5654,16 +5772,46 @@ lodash.flatten@^4.4.0: | @@ -5654,16 +5772,46 @@ lodash.flatten@^4.4.0: | ||
| 5654 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" | 5772 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" |
| 5655 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= | 5773 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= |
| 5656 | 5774 | ||
| 5775 | +lodash.includes@^4.3.0: | ||
| 5776 | + version "4.3.0" | ||
| 5777 | + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" | ||
| 5778 | + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= | ||
| 5779 | + | ||
| 5780 | +lodash.isboolean@^3.0.3: | ||
| 5781 | + version "3.0.3" | ||
| 5782 | + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" | ||
| 5783 | + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= | ||
| 5784 | + | ||
| 5785 | +lodash.isinteger@^4.0.4: | ||
| 5786 | + version "4.0.4" | ||
| 5787 | + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" | ||
| 5788 | + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= | ||
| 5789 | + | ||
| 5790 | +lodash.isnumber@^3.0.3: | ||
| 5791 | + version "3.0.3" | ||
| 5792 | + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" | ||
| 5793 | + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= | ||
| 5794 | + | ||
| 5657 | lodash.isplainobject@^4.0.6: | 5795 | lodash.isplainobject@^4.0.6: |
| 5658 | version "4.0.6" | 5796 | version "4.0.6" |
| 5659 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" | 5797 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" |
| 5660 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= | 5798 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= |
| 5661 | 5799 | ||
| 5800 | +lodash.isstring@^4.0.1: | ||
| 5801 | + version "4.0.1" | ||
| 5802 | + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" | ||
| 5803 | + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= | ||
| 5804 | + | ||
| 5662 | lodash.memoize@^4.1.2: | 5805 | lodash.memoize@^4.1.2: |
| 5663 | version "4.1.2" | 5806 | version "4.1.2" |
| 5664 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" | 5807 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" |
| 5665 | integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= | 5808 | integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= |
| 5666 | 5809 | ||
| 5810 | +lodash.once@^4.0.0: | ||
| 5811 | + version "4.1.1" | ||
| 5812 | + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" | ||
| 5813 | + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= | ||
| 5814 | + | ||
| 5667 | lodash.template@4.5.0, lodash.template@^4.5.0: | 5815 | lodash.template@4.5.0, lodash.template@^4.5.0: |
| 5668 | version "4.5.0" | 5816 | version "4.5.0" |
| 5669 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" | 5817 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" |
| @@ -5694,7 +5842,7 @@ lodash.uniq@^4.5.0: | @@ -5694,7 +5842,7 @@ lodash.uniq@^4.5.0: | ||
| 5694 | resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" | 5842 | resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" |
| 5695 | integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= | 5843 | integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= |
| 5696 | 5844 | ||
| 5697 | -lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.16, lodash@^4.17.5, lodash@~4.17.10: | 5845 | +lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5, lodash@~4.17.10: |
| 5698 | version "4.17.19" | 5846 | version "4.17.19" |
| 5699 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" | 5847 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" |
| 5700 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== | 5848 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== |
| @@ -6014,9 +6162,9 @@ minipass-flush@^1.0.5: | @@ -6014,9 +6162,9 @@ minipass-flush@^1.0.5: | ||
| 6014 | minipass "^3.0.0" | 6162 | minipass "^3.0.0" |
| 6015 | 6163 | ||
| 6016 | minipass-pipeline@^1.2.2: | 6164 | minipass-pipeline@^1.2.2: |
| 6017 | - version "1.2.3" | ||
| 6018 | - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz#55f7839307d74859d6e8ada9c3ebe72cec216a34" | ||
| 6019 | - integrity sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ== | 6165 | + version "1.2.4" |
| 6166 | + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" | ||
| 6167 | + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== | ||
| 6020 | dependencies: | 6168 | dependencies: |
| 6021 | minipass "^3.0.0" | 6169 | minipass "^3.0.0" |
| 6022 | 6170 | ||
| @@ -6059,7 +6207,7 @@ mixin-deep@^1.2.0: | @@ -6059,7 +6207,7 @@ mixin-deep@^1.2.0: | ||
| 6059 | for-in "^1.0.2" | 6207 | for-in "^1.0.2" |
| 6060 | is-extendable "^1.0.1" | 6208 | is-extendable "^1.0.1" |
| 6061 | 6209 | ||
| 6062 | -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1, mkdirp@~0.5.x: | 6210 | +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1, mkdirp@~0.5.x: |
| 6063 | version "0.5.5" | 6211 | version "0.5.5" |
| 6064 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" | 6212 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" |
| 6065 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== | 6213 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== |
| @@ -6071,7 +6219,7 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: | @@ -6071,7 +6219,7 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: | ||
| 6071 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" | 6219 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" |
| 6072 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== | 6220 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== |
| 6073 | 6221 | ||
| 6074 | -moment@^2.22.1: | 6222 | +moment@^2.10.2, moment@^2.22.1: |
| 6075 | version "2.27.0" | 6223 | version "2.27.0" |
| 6076 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" | 6224 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" |
| 6077 | integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== | 6225 | integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== |
| @@ -6236,9 +6384,9 @@ node-loader@0.6.0: | @@ -6236,9 +6384,9 @@ node-loader@0.6.0: | ||
| 6236 | integrity sha1-x5fvUQle1YWZArFX9jhPY2HgWug= | 6384 | integrity sha1-x5fvUQle1YWZArFX9jhPY2HgWug= |
| 6237 | 6385 | ||
| 6238 | node-releases@^1.1.58: | 6386 | node-releases@^1.1.58: |
| 6239 | - version "1.1.59" | ||
| 6240 | - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.59.tgz#4d648330641cec704bff10f8e4fe28e453ab8e8e" | ||
| 6241 | - integrity sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw== | 6387 | + version "1.1.60" |
| 6388 | + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" | ||
| 6389 | + integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== | ||
| 6242 | 6390 | ||
| 6243 | node-sass@4.14.1: | 6391 | node-sass@4.14.1: |
| 6244 | version "4.14.1" | 6392 | version "4.14.1" |
| @@ -6418,6 +6566,15 @@ object.assign@^4.1.0: | @@ -6418,6 +6566,15 @@ object.assign@^4.1.0: | ||
| 6418 | has-symbols "^1.0.0" | 6566 | has-symbols "^1.0.0" |
| 6419 | object-keys "^1.0.11" | 6567 | object-keys "^1.0.11" |
| 6420 | 6568 | ||
| 6569 | +object.entries@^1.1.2: | ||
| 6570 | + version "1.1.2" | ||
| 6571 | + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" | ||
| 6572 | + integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== | ||
| 6573 | + dependencies: | ||
| 6574 | + define-properties "^1.1.3" | ||
| 6575 | + es-abstract "^1.17.5" | ||
| 6576 | + has "^1.0.3" | ||
| 6577 | + | ||
| 6421 | object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: | 6578 | object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: |
| 6422 | version "2.1.0" | 6579 | version "2.1.0" |
| 6423 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" | 6580 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" |
| @@ -6887,13 +7044,13 @@ plist@^3.0.1: | @@ -6887,13 +7044,13 @@ plist@^3.0.1: | ||
| 6887 | xmldom "0.1.x" | 7044 | xmldom "0.1.x" |
| 6888 | 7045 | ||
| 6889 | portfinder@^1.0.26: | 7046 | portfinder@^1.0.26: |
| 6890 | - version "1.0.26" | ||
| 6891 | - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" | ||
| 6892 | - integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== | 7047 | + version "1.0.28" |
| 7048 | + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" | ||
| 7049 | + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== | ||
| 6893 | dependencies: | 7050 | dependencies: |
| 6894 | async "^2.6.2" | 7051 | async "^2.6.2" |
| 6895 | debug "^3.1.1" | 7052 | debug "^3.1.1" |
| 6896 | - mkdirp "^0.5.1" | 7053 | + mkdirp "^0.5.5" |
| 6897 | 7054 | ||
| 6898 | posix-character-classes@^0.1.0: | 7055 | posix-character-classes@^0.1.0: |
| 6899 | version "0.1.1" | 7056 | version "0.1.1" |
| @@ -7044,14 +7201,14 @@ postcss-modules-extract-imports@^2.0.0: | @@ -7044,14 +7201,14 @@ postcss-modules-extract-imports@^2.0.0: | ||
| 7044 | postcss "^7.0.5" | 7201 | postcss "^7.0.5" |
| 7045 | 7202 | ||
| 7046 | postcss-modules-local-by-default@^3.0.2: | 7203 | postcss-modules-local-by-default@^3.0.2: |
| 7047 | - version "3.0.2" | ||
| 7048 | - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" | ||
| 7049 | - integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== | 7204 | + version "3.0.3" |
| 7205 | + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" | ||
| 7206 | + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== | ||
| 7050 | dependencies: | 7207 | dependencies: |
| 7051 | icss-utils "^4.1.1" | 7208 | icss-utils "^4.1.1" |
| 7052 | - postcss "^7.0.16" | 7209 | + postcss "^7.0.32" |
| 7053 | postcss-selector-parser "^6.0.2" | 7210 | postcss-selector-parser "^6.0.2" |
| 7054 | - postcss-value-parser "^4.0.0" | 7211 | + postcss-value-parser "^4.1.0" |
| 7055 | 7212 | ||
| 7056 | postcss-modules-scope@^2.2.0: | 7213 | postcss-modules-scope@^2.2.0: |
| 7057 | version "2.2.0" | 7214 | version "2.2.0" |
| @@ -7235,7 +7392,7 @@ postcss-value-parser@^3.0.0: | @@ -7235,7 +7392,7 @@ postcss-value-parser@^3.0.0: | ||
| 7235 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" | 7392 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" |
| 7236 | integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== | 7393 | integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== |
| 7237 | 7394 | ||
| 7238 | -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: | 7395 | +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: |
| 7239 | version "4.1.0" | 7396 | version "4.1.0" |
| 7240 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" | 7397 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" |
| 7241 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== | 7398 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== |
| @@ -7249,7 +7406,7 @@ postcss@^6.0.23: | @@ -7249,7 +7406,7 @@ postcss@^6.0.23: | ||
| 7249 | source-map "^0.6.1" | 7406 | source-map "^0.6.1" |
| 7250 | supports-color "^5.4.0" | 7407 | supports-color "^5.4.0" |
| 7251 | 7408 | ||
| 7252 | -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: | 7409 | +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: |
| 7253 | version "7.0.32" | 7410 | version "7.0.32" |
| 7254 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" | 7411 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" |
| 7255 | integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== | 7412 | integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== |
| @@ -7402,9 +7559,9 @@ qs@~6.5.2: | @@ -7402,9 +7559,9 @@ qs@~6.5.2: | ||
| 7402 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== | 7559 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== |
| 7403 | 7560 | ||
| 7404 | quasar@^1.0.0: | 7561 | quasar@^1.0.0: |
| 7405 | - version "1.12.10" | ||
| 7406 | - resolved "https://registry.yarnpkg.com/quasar/-/quasar-1.12.10.tgz#45daa4bfd14d66b67bb2da8413d0ae09a32af518" | ||
| 7407 | - integrity sha512-O8BQeRIfA/oun5YwUV7aMeKhqfmGy38EqTf4lWxPXhVo3Bs4ZN4r6DeR2X8OQHqr76fblQWxU48uPIZgB68VBg== | 7562 | + version "1.12.13" |
| 7563 | + resolved "https://registry.yarnpkg.com/quasar/-/quasar-1.12.13.tgz#236331b55a5403e42db5202ef8e66629aef4adf5" | ||
| 7564 | + integrity sha512-e5cU3cxwZEc+MIJ6/a5IyV5HJ4B1WJscpEqDi+1BpIfVu4/9/WS9a0dnki5jVEvcsbuV4G133XCHQ09fdXoL1A== | ||
| 7408 | 7565 | ||
| 7409 | query-string@^4.1.0: | 7566 | query-string@^4.1.0: |
| 7410 | version "4.3.4" | 7567 | version "4.3.4" |
| @@ -7552,9 +7709,9 @@ regenerate@^1.4.0: | @@ -7552,9 +7709,9 @@ regenerate@^1.4.0: | ||
| 7552 | integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== | 7709 | integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== |
| 7553 | 7710 | ||
| 7554 | regenerator-runtime@^0.13.4: | 7711 | regenerator-runtime@^0.13.4: |
| 7555 | - version "0.13.5" | ||
| 7556 | - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" | ||
| 7557 | - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== | 7712 | + version "0.13.7" |
| 7713 | + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" | ||
| 7714 | + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== | ||
| 7558 | 7715 | ||
| 7559 | regenerator-transform@^0.14.2: | 7716 | regenerator-transform@^0.14.2: |
| 7560 | version "0.14.5" | 7717 | version "0.14.5" |
| @@ -7724,7 +7881,7 @@ resolve-url@^0.2.1: | @@ -7724,7 +7881,7 @@ resolve-url@^0.2.1: | ||
| 7724 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" | 7881 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" |
| 7725 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= | 7882 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= |
| 7726 | 7883 | ||
| 7727 | -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.8.1: | 7884 | +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.8.1: |
| 7728 | version "1.17.0" | 7885 | version "1.17.0" |
| 7729 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" | 7886 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" |
| 7730 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== | 7887 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== |
| @@ -7965,7 +8122,7 @@ semver@7.3.2, semver@^7.3.2: | @@ -7965,7 +8122,7 @@ semver@7.3.2, semver@^7.3.2: | ||
| 7965 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" | 8122 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" |
| 7966 | integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== | 8123 | integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== |
| 7967 | 8124 | ||
| 7968 | -semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: | 8125 | +semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: |
| 7969 | version "6.3.0" | 8126 | version "6.3.0" |
| 7970 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" | 8127 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" |
| 7971 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== | 8128 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== |
| @@ -8872,11 +9029,18 @@ tsconfig-paths@^3.9.0: | @@ -8872,11 +9029,18 @@ tsconfig-paths@^3.9.0: | ||
| 8872 | minimist "^1.2.0" | 9029 | minimist "^1.2.0" |
| 8873 | strip-bom "^3.0.0" | 9030 | strip-bom "^3.0.0" |
| 8874 | 9031 | ||
| 8875 | -tslib@^1.10.0, tslib@^1.9.0: | 9032 | +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: |
| 8876 | version "1.13.0" | 9033 | version "1.13.0" |
| 8877 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" | 9034 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" |
| 8878 | integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== | 9035 | integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== |
| 8879 | 9036 | ||
| 9037 | +tsutils@^3.17.1: | ||
| 9038 | + version "3.17.1" | ||
| 9039 | + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" | ||
| 9040 | + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== | ||
| 9041 | + dependencies: | ||
| 9042 | + tslib "^1.8.1" | ||
| 9043 | + | ||
| 8880 | tty-browserify@0.0.0: | 9044 | tty-browserify@0.0.0: |
| 8881 | version "0.0.0" | 9045 | version "0.0.0" |
| 8882 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" | 9046 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" |
| @@ -9158,11 +9322,6 @@ validate-npm-package-license@^3.0.1: | @@ -9158,11 +9322,6 @@ validate-npm-package-license@^3.0.1: | ||
| 9158 | spdx-correct "^3.0.0" | 9322 | spdx-correct "^3.0.0" |
| 9159 | spdx-expression-parse "^3.0.0" | 9323 | spdx-expression-parse "^3.0.0" |
| 9160 | 9324 | ||
| 9161 | -validator@^10.9.0: | ||
| 9162 | - version "10.11.0" | ||
| 9163 | - resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" | ||
| 9164 | - integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== | ||
| 9165 | - | ||
| 9166 | vary@~1.1.2: | 9325 | vary@~1.1.2: |
| 9167 | version "1.1.2" | 9326 | version "1.1.2" |
| 9168 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" | 9327 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" |
| @@ -9187,6 +9346,16 @@ vm-browserify@^1.0.1: | @@ -9187,6 +9346,16 @@ vm-browserify@^1.0.1: | ||
| 9187 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" | 9346 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" |
| 9188 | integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== | 9347 | integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== |
| 9189 | 9348 | ||
| 9349 | +vue-chartjs@^3.5.0: | ||
| 9350 | + version "3.5.0" | ||
| 9351 | + resolved "https://registry.yarnpkg.com/vue-chartjs/-/vue-chartjs-3.5.0.tgz#edd0c2be94c521bcbc5357c24afb9f3560855f84" | ||
| 9352 | + integrity sha512-yWNhG3B6g6lvYqNInP0WaDWNZG/SNb6XnltkjR0wYC5pmLm6jvdiotj8er7Mui8qkJGfLZe6ULjrZdHWjegAUg== | ||
| 9353 | + | ||
| 9354 | +vue-class-component@^7.1.0, vue-class-component@^7.2.2: | ||
| 9355 | + version "7.2.5" | ||
| 9356 | + resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.5.tgz#212b3548c4fdd3314774c4adbc1c3792a40b52d0" | ||
| 9357 | + integrity sha512-0CSftHY0bDTD+4FbYkuFf6+iKDjZ4h2in2YYJDRMk5daZIjrgT9LjFHvP7Rzqy9/s1pij3zDtTSLRUjsPWMwqg== | ||
| 9358 | + | ||
| 9190 | vue-eslint-parser@^7.0.0: | 9359 | vue-eslint-parser@^7.0.0: |
| 9191 | version "7.1.0" | 9360 | version "7.1.0" |
| 9192 | resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz#9cdbcc823e656b087507a1911732b867ac101e83" | 9361 | resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz#9cdbcc823e656b087507a1911732b867ac101e83" |
| @@ -9215,16 +9384,12 @@ vue-loader@15.9.2: | @@ -9215,16 +9384,12 @@ vue-loader@15.9.2: | ||
| 9215 | vue-hot-reload-api "^2.3.0" | 9384 | vue-hot-reload-api "^2.3.0" |
| 9216 | vue-style-loader "^4.1.0" | 9385 | vue-style-loader "^4.1.0" |
| 9217 | 9386 | ||
| 9218 | -vue-mc@^0.6.0: | ||
| 9219 | - version "0.6.0" | ||
| 9220 | - resolved "https://registry.yarnpkg.com/vue-mc/-/vue-mc-0.6.0.tgz#cb5383e33b335f6109ff63451242b1e57cabc0af" | ||
| 9221 | - integrity sha512-URLyySD1qpa1uPtlOe8eBZIfk6gnKSC53JtP46gbNxbsQ+xcR5H1wohsxn5KrGVxKCMX2mqIElimLoixdahETw== | 9387 | +vue-property-decorator@^8.3.0: |
| 9388 | + version "8.5.1" | ||
| 9389 | + resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz#571a91cf8d2b507f537d79bf8275af3184572fff" | ||
| 9390 | + integrity sha512-O6OUN2OMsYTGPvgFtXeBU3jPnX5ffQ9V4I1WfxFQ6dqz6cOUbR3Usou7kgFpfiXDvV7dJQSFcJ5yUPgOtPPm1Q== | ||
| 9222 | dependencies: | 9391 | dependencies: |
| 9223 | - axios "0.19.0" | ||
| 9224 | - date-fns "^2.0.0-beta.4" | ||
| 9225 | - lodash "^4.17.11" | ||
| 9226 | - validator "^10.9.0" | ||
| 9227 | - vue "^2.5.17" | 9392 | + vue-class-component "^7.1.0" |
| 9228 | 9393 | ||
| 9229 | vue-router@3.2.0: | 9394 | vue-router@3.2.0: |
| 9230 | version "3.2.0" | 9395 | version "3.2.0" |
| @@ -9266,7 +9431,7 @@ vue-template-es2015-compiler@^1.9.0: | @@ -9266,7 +9431,7 @@ vue-template-es2015-compiler@^1.9.0: | ||
| 9266 | resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" | 9431 | resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" |
| 9267 | integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== | 9432 | integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== |
| 9268 | 9433 | ||
| 9269 | -vue@2.6.11, vue@^2.5.17: | 9434 | +vue@2.6.11: |
| 9270 | version "2.6.11" | 9435 | version "2.6.11" |
| 9271 | resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" | 9436 | resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" |
| 9272 | integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== | 9437 | integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== |
| @@ -9284,14 +9449,14 @@ watchpack-chokidar2@^2.0.0: | @@ -9284,14 +9449,14 @@ watchpack-chokidar2@^2.0.0: | ||
| 9284 | chokidar "^2.1.8" | 9449 | chokidar "^2.1.8" |
| 9285 | 9450 | ||
| 9286 | watchpack@^1.6.1: | 9451 | watchpack@^1.6.1: |
| 9287 | - version "1.7.2" | ||
| 9288 | - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" | ||
| 9289 | - integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== | 9452 | + version "1.7.4" |
| 9453 | + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" | ||
| 9454 | + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== | ||
| 9290 | dependencies: | 9455 | dependencies: |
| 9291 | graceful-fs "^4.1.2" | 9456 | graceful-fs "^4.1.2" |
| 9292 | neo-async "^2.5.0" | 9457 | neo-async "^2.5.0" |
| 9293 | optionalDependencies: | 9458 | optionalDependencies: |
| 9294 | - chokidar "^3.4.0" | 9459 | + chokidar "^3.4.1" |
| 9295 | watchpack-chokidar2 "^2.0.0" | 9460 | watchpack-chokidar2 "^2.0.0" |
| 9296 | 9461 | ||
| 9297 | wbuf@^1.1.0, wbuf@^1.7.3: | 9462 | wbuf@^1.1.0, wbuf@^1.7.3: |