From 99415a1a22f06d2b329c0c06174fdfc0a36b2f9e Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Mon, 29 Mar 2021 11:38:27 +0400 Subject: [PATCH] #16 -- Add JPA. Create entity classes, repositories and database changelogs. --- build.gradle | 5 +- .../controller/GitFilteringController.java | 8 +- .../controller/GitIndexingController.java | 12 ++- .../extractor/controller/RepoController.java | 5 +- .../java/ru/ulstu/extractor/model/Author.java | 23 +++++ .../ru/ulstu/extractor/model/BaseEntity.java | 86 +++++++++++++++++++ .../java/ru/ulstu/extractor/model/Branch.java | 49 ++++++++++- .../java/ru/ulstu/extractor/model/Commit.java | 69 +++++++++++---- .../ru/ulstu/extractor/model/FileChange.java | 26 +++++- .../ru/ulstu/extractor/model/LineChange.java | 23 ++++- .../ru/ulstu/extractor/model/Repository.java | 23 +++++ .../ulstu/extractor/model/mvc/FilterForm.java | 9 ++ .../repository/BranchRepository.java | 11 +++ .../repository/CommitRepository.java | 39 +-------- .../repository/RepositoryRepository.java | 10 +++ .../extractor/service/CommitService.java | 4 +- .../service/GitRepositoryService.java | 30 ++++--- .../ulstu/extractor/service/IndexService.java | 41 +++++++++ src/main/resources/application.properties | 3 + .../db/changelog-20210329_120000-schema.xml | 38 ++++++++ src/main/resources/db/changelog-master.xml | 1 + 21 files changed, 437 insertions(+), 78 deletions(-) create mode 100644 src/main/java/ru/ulstu/extractor/model/Author.java create mode 100644 src/main/java/ru/ulstu/extractor/model/BaseEntity.java create mode 100644 src/main/java/ru/ulstu/extractor/model/Repository.java create mode 100644 src/main/java/ru/ulstu/extractor/repository/BranchRepository.java create mode 100644 src/main/java/ru/ulstu/extractor/repository/RepositoryRepository.java create mode 100644 src/main/java/ru/ulstu/extractor/service/IndexService.java create mode 100644 src/main/resources/db/changelog-20210329_120000-schema.xml diff --git a/build.gradle b/build.gradle index 0d2a506..9ef6c17 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ buildscript { ext { - versionSpringBoot = '2.3.8.RELEASE' + versionSpringBoot = '2.3.9.RELEASE' } repositories { @@ -47,11 +47,10 @@ dependencies { compile group: 'org.springframework.boot', name: 'spring-boot-starter-web' compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty' compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf' + compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa' compile group: 'nz.net.ultraq.thymeleaf', name: 'thymeleaf-layout-dialect' - compile group: 'org.springframework.data', name: 'spring-data-commons' compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-afterburner' compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-hibernate5' - compile group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc' compile group: 'org.postgresql', name: 'postgresql', version: '9.4.1212' compile group: 'org.liquibase', name: 'liquibase-core', version: '4.3.1' diff --git a/src/main/java/ru/ulstu/extractor/controller/GitFilteringController.java b/src/main/java/ru/ulstu/extractor/controller/GitFilteringController.java index 5203c7d..f4dcde8 100644 --- a/src/main/java/ru/ulstu/extractor/controller/GitFilteringController.java +++ b/src/main/java/ru/ulstu/extractor/controller/GitFilteringController.java @@ -38,7 +38,7 @@ public class GitFilteringController { @PostMapping("/sendFilter") public String sendFilter(@ModelAttribute FilterForm filterForm, Model model) throws GitAPIException, IOException { - List list = gitRepositoryService.getCommits(filterForm.getUrl()); + List list = gitRepositoryService.getCommits(filterForm.getUrl(), filterForm.getBranch()); model.addAttribute("commits", list); if (filterForm.getFilter() == null || filterForm.getFilter().isEmpty()) { model.addAttribute("error", "'Строка' не должно быть пустым"); @@ -53,11 +53,11 @@ public class GitFilteringController { @ModelAttribute FilterForm filterForm, @RequestParam("page") Optional page, @RequestParam("size") Optional size, - @RequestParam String url, - @RequestParam String branch) throws GitAPIException, IOException { + @RequestParam String repositoryUrl, + @RequestParam String branchName) throws GitAPIException, IOException { int currentPage = page.orElse(1); int pageSize = size.orElse(5); - Page commitPage = commitService.findPaginated(PageRequest.of(currentPage - 1, pageSize), url); + Page commitPage = commitService.findPaginated(PageRequest.of(currentPage - 1, pageSize), repositoryUrl, branchName); model.addAttribute("commitPage", commitPage); int totalPages = commitPage.getTotalPages(); if (totalPages > 0) { diff --git a/src/main/java/ru/ulstu/extractor/controller/GitIndexingController.java b/src/main/java/ru/ulstu/extractor/controller/GitIndexingController.java index 964bc4a..00beb20 100644 --- a/src/main/java/ru/ulstu/extractor/controller/GitIndexingController.java +++ b/src/main/java/ru/ulstu/extractor/controller/GitIndexingController.java @@ -11,15 +11,19 @@ import ru.ulstu.extractor.model.Branch; import ru.ulstu.extractor.model.mvc.FilterForm; import ru.ulstu.extractor.model.mvc.RepoForm; import ru.ulstu.extractor.service.GitRepositoryService; +import ru.ulstu.extractor.service.IndexService; import java.util.List; @Controller public class GitIndexingController { private final GitRepositoryService gitRepositoryService; + private final IndexService indexService; - public GitIndexingController(GitRepositoryService gitRepositoryService) { + public GitIndexingController(GitRepositoryService gitRepositoryService, + IndexService indexService) { this.gitRepositoryService = gitRepositoryService; + this.indexService = indexService; } @GetMapping("/newRepo") @@ -47,6 +51,12 @@ public class GitIndexingController { if (repoForm.getBranch() == null) { return "newRepo"; } else { + try { + indexService.index(repoForm.getRepo(), repoForm.getBranch()); + } catch (Exception ex) { + model.addAttribute("error", ex.getMessage()); + return "newRepo"; + } redirectAttributes.addAttribute("url", repoForm.getRepo()); redirectAttributes.addAttribute("branch", repoForm.getBranch()); return "redirect:/filtering"; diff --git a/src/main/java/ru/ulstu/extractor/controller/RepoController.java b/src/main/java/ru/ulstu/extractor/controller/RepoController.java index 2d30d9a..09ea5d5 100644 --- a/src/main/java/ru/ulstu/extractor/controller/RepoController.java +++ b/src/main/java/ru/ulstu/extractor/controller/RepoController.java @@ -29,8 +29,9 @@ public class RepoController { } @GetMapping("commits") - public List getCommits(@RequestParam("url") String url) throws GitAPIException, IOException { - return gitRepositoryService.getCommits(url); + public List getCommits(@RequestParam("repositoryUrl") String repositoryUrl, + @RequestParam("branchName") String branchName) throws GitAPIException, IOException { + return gitRepositoryService.getCommits(repositoryUrl, branchName); } } diff --git a/src/main/java/ru/ulstu/extractor/model/Author.java b/src/main/java/ru/ulstu/extractor/model/Author.java new file mode 100644 index 0000000..2462d5b --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/model/Author.java @@ -0,0 +1,23 @@ +package ru.ulstu.extractor.model; + +import javax.persistence.Entity; + +@Entity +public class Author extends BaseEntity { + private String name; + + public Author() { + } + + public Author(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/ru/ulstu/extractor/model/BaseEntity.java b/src/main/java/ru/ulstu/extractor/model/BaseEntity.java new file mode 100644 index 0000000..0859807 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/model/BaseEntity.java @@ -0,0 +1,86 @@ +package ru.ulstu.extractor.model; + +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.Version; +import java.io.Serializable; + +@MappedSuperclass +public abstract class BaseEntity implements Serializable, Comparable { + @Id + @GeneratedValue(strategy = GenerationType.TABLE) + private Integer id; + + @Version + private Integer version; + + public BaseEntity() { + } + + public BaseEntity(Integer id, Integer version) { + this.id = id; + this.version = version; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getVersion() { + return version; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!getClass().isAssignableFrom(obj.getClass())) { + return false; + } + BaseEntity other = (BaseEntity) obj; + if (id == null) { + if (other.id != null) { + return false; + } + } else if (!id.equals(other.id)) { + return false; + } + return true; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (id == null ? 0 : id.hashCode()); + return result; + } + + @Override + public String toString() { + return getClass().getSimpleName() + "{" + + "id=" + id + + ", version=" + version + + '}'; + } + + @Override + public int compareTo(Object o) { + return id != null ? id.compareTo(((BaseEntity) o).getId()) : -1; + } + + public void reset() { + this.id = null; + this.version = null; + } +} diff --git a/src/main/java/ru/ulstu/extractor/model/Branch.java b/src/main/java/ru/ulstu/extractor/model/Branch.java index 4f751d2..02a6349 100644 --- a/src/main/java/ru/ulstu/extractor/model/Branch.java +++ b/src/main/java/ru/ulstu/extractor/model/Branch.java @@ -1,14 +1,61 @@ package ru.ulstu.extractor.model; -public class Branch { +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import java.util.List; + +@Entity +public class Branch extends BaseEntity { private String name; + @ManyToOne + private Repository repository; + + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "branch_id", unique = true) + @Fetch(FetchMode.SUBSELECT) + private List commits; + + public Branch() { + } + public Branch(String name) { this.name = name; } + public Branch(Repository repository, String branchName) { + this.repository = repository; + this.name = branchName; + } + public String getName() { return name; } + public void setName(String name) { + this.name = name; + } + + public Repository getRepository() { + return repository; + } + + public void setRepository(Repository repository) { + this.repository = repository; + } + + public List getCommits() { + return commits; + } + + public void setCommits(List commits) { + this.commits = commits; + } } diff --git a/src/main/java/ru/ulstu/extractor/model/Commit.java b/src/main/java/ru/ulstu/extractor/model/Commit.java index 9e8e6f4..e7d6795 100644 --- a/src/main/java/ru/ulstu/extractor/model/Commit.java +++ b/src/main/java/ru/ulstu/extractor/model/Commit.java @@ -1,18 +1,37 @@ package ru.ulstu.extractor.model; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import java.util.ArrayList; import java.util.Date; +import java.util.List; -public class Commit { - private String message; +@Entity +public class Commit extends BaseEntity { + private String hash; private Date date; - private String author; - private Changes changes; + private String message; + @ManyToOne + private Author author; + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "commit_id", unique = true) + @Fetch(FetchMode.SUBSELECT) + private List fileChanges = new ArrayList<>(); - public Commit(String message, String author, Date date) { + public Commit() { + } + + public Commit(String message, Author author, Date date) { this.message = message; this.author = author; this.date = date; - } public String getMessage() { @@ -23,15 +42,35 @@ public class Commit { return date; } - public String getAuthor() { + public String getHash() { + return hash; + } + + public void setHash(String hash) { + this.hash = hash; + } + + public void setDate(Date date) { + this.date = date; + } + + public void setMessage(String message) { + this.message = message; + } + + public void setAuthor(Author author) { + this.author = author; + } + + public List getFileChanges() { + return fileChanges; + } + + public void setFileChanges(List fileChanges) { + this.fileChanges = fileChanges; + } + + public Author getAuthor() { return author; } - - public Changes getChanges() { - return changes; - } - - public void setChanges(Changes changes) { - this.changes = changes; - } } diff --git a/src/main/java/ru/ulstu/extractor/model/FileChange.java b/src/main/java/ru/ulstu/extractor/model/FileChange.java index fb0ec6b..2493da6 100644 --- a/src/main/java/ru/ulstu/extractor/model/FileChange.java +++ b/src/main/java/ru/ulstu/extractor/model/FileChange.java @@ -1,12 +1,28 @@ package ru.ulstu.extractor.model; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Transient; import java.util.ArrayList; import java.util.List; -public class FileChange { +@Entity +public class FileChange extends BaseEntity { private String file; + @Transient private boolean removed; + @Transient private boolean added; + + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "file_change_id", unique = true) + @Fetch(FetchMode.SUBSELECT) private List lineChanges = new ArrayList<>(); public FileChange() { @@ -47,4 +63,12 @@ public class FileChange { public void setLineChanges(List lineChanges) { this.lineChanges = lineChanges; } + + public boolean isRemoved() { + return removed; + } + + public boolean isAdded() { + return added; + } } diff --git a/src/main/java/ru/ulstu/extractor/model/LineChange.java b/src/main/java/ru/ulstu/extractor/model/LineChange.java index 7f1bab3..7901322 100644 --- a/src/main/java/ru/ulstu/extractor/model/LineChange.java +++ b/src/main/java/ru/ulstu/extractor/model/LineChange.java @@ -1,7 +1,13 @@ package ru.ulstu.extractor.model; -public class LineChange { +import javax.persistence.Entity; +import javax.persistence.Transient; + +@Entity +public class LineChange extends BaseEntity { + @Transient private boolean added; + @Transient private boolean removed; private String lineFrom; private String lineTo; @@ -42,4 +48,19 @@ public class LineChange { return lineTo; } + public boolean isAdded() { + return added; + } + + public void setAdded(boolean added) { + this.added = added; + } + + public boolean isRemoved() { + return removed; + } + + public void setRemoved(boolean removed) { + this.removed = removed; + } } diff --git a/src/main/java/ru/ulstu/extractor/model/Repository.java b/src/main/java/ru/ulstu/extractor/model/Repository.java new file mode 100644 index 0000000..651bfca --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/model/Repository.java @@ -0,0 +1,23 @@ +package ru.ulstu.extractor.model; + +import javax.persistence.Entity; + +@Entity +public class Repository extends BaseEntity { + private String url; + + public Repository() { + } + + public Repository(String repositoryUrl) { + url = repositoryUrl; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } +} diff --git a/src/main/java/ru/ulstu/extractor/model/mvc/FilterForm.java b/src/main/java/ru/ulstu/extractor/model/mvc/FilterForm.java index 67f2194..4946871 100644 --- a/src/main/java/ru/ulstu/extractor/model/mvc/FilterForm.java +++ b/src/main/java/ru/ulstu/extractor/model/mvc/FilterForm.java @@ -3,6 +3,7 @@ package ru.ulstu.extractor.model.mvc; public class FilterForm { private String filter; private String url; + private String branch; public FilterForm() { } @@ -27,6 +28,14 @@ public class FilterForm { this.url = url; } + public String getBranch() { + return branch; + } + + public void setBranch(String branch) { + this.branch = branch; + } + @Override public String toString() { return "FilterForm{" + diff --git a/src/main/java/ru/ulstu/extractor/repository/BranchRepository.java b/src/main/java/ru/ulstu/extractor/repository/BranchRepository.java new file mode 100644 index 0000000..f982d1e --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/repository/BranchRepository.java @@ -0,0 +1,11 @@ +package ru.ulstu.extractor.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.ulstu.extractor.model.Branch; +import ru.ulstu.extractor.model.Repository; + +import java.util.Optional; + +public interface BranchRepository extends JpaRepository { + Optional findByRepositoryAndName(Repository repository, String name); +} diff --git a/src/main/java/ru/ulstu/extractor/repository/CommitRepository.java b/src/main/java/ru/ulstu/extractor/repository/CommitRepository.java index e185761..fd386d4 100644 --- a/src/main/java/ru/ulstu/extractor/repository/CommitRepository.java +++ b/src/main/java/ru/ulstu/extractor/repository/CommitRepository.java @@ -1,42 +1,7 @@ package ru.ulstu.extractor.repository; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; -import org.springframework.stereotype.Repository; +import org.springframework.data.jpa.repository.JpaRepository; import ru.ulstu.extractor.model.Commit; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; - -@Repository -public class CommitRepository { - private final static String SQL_SELECT_COMMITS = "SELECT * FROM commit"; - private final static String SQL_INSERT_COMMITS = "INSERT INTO commit (hash, date, author, message) " + - "VALUES (?, ?, ?, ?)"; - private final JdbcTemplate jdbcTemplate; - - public CommitRepository(JdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; - } - - private static class CommitRowMapper implements RowMapper { - - @Override - public Commit mapRow(ResultSet rs, int rowNum) throws SQLException { - return new Commit(rs.getString("message"), - rs.getString("author"), - rs.getDate("date")); - } - } - - public List getCommits() { - return jdbcTemplate.query(SQL_SELECT_COMMITS, new CommitRowMapper()); - } - - public void saveCommit(Commit commit) { - jdbcTemplate.update(SQL_INSERT_COMMITS, "", commit.getDate(), - commit.getAuthor(), - commit.getMessage()); - } +public interface CommitRepository extends JpaRepository { } diff --git a/src/main/java/ru/ulstu/extractor/repository/RepositoryRepository.java b/src/main/java/ru/ulstu/extractor/repository/RepositoryRepository.java new file mode 100644 index 0000000..cedaa75 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/repository/RepositoryRepository.java @@ -0,0 +1,10 @@ +package ru.ulstu.extractor.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.ulstu.extractor.model.Repository; + +import java.util.Optional; + +public interface RepositoryRepository extends JpaRepository { + Optional findByUrl(String url); +} diff --git a/src/main/java/ru/ulstu/extractor/service/CommitService.java b/src/main/java/ru/ulstu/extractor/service/CommitService.java index 05ec123..62073d6 100644 --- a/src/main/java/ru/ulstu/extractor/service/CommitService.java +++ b/src/main/java/ru/ulstu/extractor/service/CommitService.java @@ -20,11 +20,11 @@ public class CommitService { this.gitRepositoryService = gitRepositoryService; } - public Page findPaginated(Pageable pageable, String url) throws GitAPIException, IOException { + public Page findPaginated(Pageable pageable, String repositoryUrl, String branchName) throws GitAPIException, IOException { int pageSize = pageable.getPageSize(); int currentPage = pageable.getPageNumber(); int startItem = currentPage * pageSize; - List commits = gitRepositoryService.getCommits(url); + List commits = gitRepositoryService.getCommits(repositoryUrl, branchName); if (commits.size() < startItem) { commits = Collections.emptyList(); diff --git a/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java b/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java index 1d20e44..93c9aab 100644 --- a/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java +++ b/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java @@ -1,16 +1,18 @@ package ru.ulstu.extractor.service; +import org.eclipse.jgit.api.CreateBranchCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.ListBranchCommand; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.diff.DiffFormatter; import org.eclipse.jgit.internal.storage.file.FileRepository; +import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import ru.ulstu.extractor.model.Author; import ru.ulstu.extractor.model.Branch; -import ru.ulstu.extractor.model.Changes; import ru.ulstu.extractor.model.Commit; import ru.ulstu.extractor.model.FileChange; import ru.ulstu.extractor.model.LineChange; @@ -68,13 +70,19 @@ public class GitRepositoryService { return file.exists(); } - public List getCommits(String url) throws GitAPIException, IOException { - cloneOrUpdateRepo(url); - Repository localRepo = new FileRepository(getProjectGitDirectory(url)); + public List getCommits(String repositoryUrl, String branchName) throws GitAPIException, IOException { + cloneOrUpdateRepo(repositoryUrl); + Repository localRepo = new FileRepository(getProjectGitDirectory(repositoryUrl)); Git git = new Git(localRepo); git.pull().call(); + Ref ref = git.checkout(). + setCreateBranch(true). + setName(branchName). + setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK). + setStartPoint("origin/" + branchName). + call(); + List commits = new ArrayList<>(); - //TODO: сделать преобразование в коллекцию "наших объектов" git.log().call().forEach(commits::add); List list = new ArrayList<>(); @@ -82,10 +90,10 @@ public class GitRepositoryService { for (RevCommit revCommit : commits) { Commit commit = new Commit( revCommit.getFullMessage(), - revCommit.getAuthorIdent().getName(), + new Author(revCommit.getAuthorIdent().getName()), Date.from(Instant.ofEpochSecond(revCommit.getCommitTime()))); if (prevCommit != null) { - commit.setChanges(findDiffBetweenTwoRevisions(revCommit, prevCommit, localRepo)); + commit.setFileChanges(findDiffBetweenTwoRevisions(revCommit, prevCommit, localRepo)); } list.add(commit); prevCommit = revCommit; @@ -93,7 +101,7 @@ public class GitRepositoryService { return list; } - public Changes findDiffBetweenTwoRevisions(RevCommit laterCommit, RevCommit earlierCommit, Repository localRepo) { + public List findDiffBetweenTwoRevisions(RevCommit laterCommit, RevCommit earlierCommit, Repository localRepo) { if (laterCommit == null || earlierCommit == null) { return null; } @@ -109,8 +117,8 @@ public class GitRepositoryService { return parseOutputDiff(output); } - private Changes parseOutputDiff(String output) { - Changes changes = new Changes(); + private List parseOutputDiff(String output) { + List changes = new ArrayList<>(); String[] strings = output.split("\n"); FileChange fileChange = new FileChange(); int stringsLength = strings.length - 1; @@ -121,7 +129,7 @@ public class GitRepositoryService { fileChange = new FileChange(); fileChange.setFile(maybeFileName.get()); /// вытащить другие изменения из коммита - changes.getFileChanges().add(fileChange); + changes.add(fileChange); } LineChange lineChange = new LineChange(); if (strings[i].startsWith("-")) { diff --git a/src/main/java/ru/ulstu/extractor/service/IndexService.java b/src/main/java/ru/ulstu/extractor/service/IndexService.java new file mode 100644 index 0000000..113a70b --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/service/IndexService.java @@ -0,0 +1,41 @@ +package ru.ulstu.extractor.service; + +import com.sun.istack.NotNull; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.springframework.stereotype.Service; +import ru.ulstu.extractor.model.Branch; +import ru.ulstu.extractor.model.Commit; +import ru.ulstu.extractor.model.Repository; +import ru.ulstu.extractor.repository.BranchRepository; +import ru.ulstu.extractor.repository.CommitRepository; +import ru.ulstu.extractor.repository.RepositoryRepository; + +import java.io.IOException; +import java.util.List; + +@Service +public class IndexService { + private final GitRepositoryService gitRepositoryService; + private final RepositoryRepository repositoryRepository; + private final BranchRepository branchRepository; + private final CommitRepository commitRepository; + + public IndexService(GitRepositoryService gitRepositoryService, + RepositoryRepository repositoryRepository, + BranchRepository branchRepository, + CommitRepository commitRepository) { + this.gitRepositoryService = gitRepositoryService; + this.repositoryRepository = repositoryRepository; + this.branchRepository = branchRepository; + this.commitRepository = commitRepository; + } + + public void index(@NotNull String repositoryUrl, @NotNull String branchName) throws GitAPIException, IOException { + Repository repository = repositoryRepository.findByUrl(repositoryUrl) + .orElse(repositoryRepository.save(new Repository(repositoryUrl))); + Branch branch = branchRepository.findByRepositoryAndName(repository, branchName) + .orElse(branchRepository.save(new Branch(repository, branchName))); + List commits = gitRepositoryService.getCommits(repositoryUrl, branchName); + branch.setCommits(commits); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f061be5..938472e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -11,6 +11,9 @@ spring.datasource.url=jdbc:postgresql://localhost:5432/repo spring.datasource.username=postgres spring.datasource.password=postgres spring.datasource.driverclassName=org.postgresql.Driver +spring.jpa.hibernate.ddl-auto=validate +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false # Liquibase Settings spring.liquibase.drop-first=false spring.liquibase.enabled=true diff --git a/src/main/resources/db/changelog-20210329_120000-schema.xml b/src/main/resources/db/changelog-20210329_120000-schema.xml new file mode 100644 index 0000000..78b1cc4 --- /dev/null +++ b/src/main/resources/db/changelog-20210329_120000-schema.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db/changelog-master.xml b/src/main/resources/db/changelog-master.xml index 90a3c94..0ddc390 100644 --- a/src/main/resources/db/changelog-master.xml +++ b/src/main/resources/db/changelog-master.xml @@ -5,4 +5,5 @@ http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> +