From 081e9bc86d3a3ff62e2a672cc296496f1dc40b42 Mon Sep 17 00:00:00 2001
From: alexey <a@bayrepo.ru>
Date: Sun, 23 Mar 2025 17:27:22 +0300
Subject: [PATCH] Added fixes

---
 .gitignore         |  4 ++--
 app.rb             | 30 ++++++++++++++++++++++++++++++
 classes/db.rb      |  9 +++++++++
 views/footer.erb   |  2 +-
 views/header.erb   |  4 ++++
 views/sanitize.erb | 18 ++++++++++++++++++
 6 files changed, 64 insertions(+), 3 deletions(-)
 create mode 100644 views/sanitize.erb

diff --git a/.gitignore b/.gitignore
index a81cda1..bfa6ab4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,7 @@
 vendor
-repo
+repo/*
 db/*.sqlite3
-projects
+projects/*
 .ruby-lsp
 keys/private
 keys/public
diff --git a/app.rb b/app.rb
index dfe2573..bf0a9b8 100644
--- a/app.rb
+++ b/app.rb
@@ -1390,6 +1390,36 @@ get "/prjsignview/:id/*" do
   end
 end
 
+get "/sanitize" do
+  #Подчистим гит проекты, которые есть в базе, но нет в файловой системе
+  all_gits = db.get_gits
+  deleted_items = 0
+  unless all_gits.nil?
+    repo = GitRepo.new(cfg.get_repo, db)
+    repos = repo.getrepos
+    list_for_delete = []
+    all_gits.each do |item|
+      find_item = false
+      repos.each do |rep|
+        if rep[:reponame] == item[:reponame]
+          find_item = true
+          break
+        end
+      end
+      unless find_item
+        list_for_delete << item[:id]
+      end
+    end
+    deleted_items = deleted_items + list_for_delete.length
+    list_for_delete.each do |item|
+      db.delete_git_by_id(item)
+    end
+  end
+  @deleted_items = deleted_items
+  @page_name = "Очистка устаревших или потерянных записей базы данных"
+  erb :sanitize
+end
+
 not_found do
   status 404
   @page_name = "Кто-то потерялся"
diff --git a/classes/db.rb b/classes/db.rb
index aafcc86..ca1bc4a 100644
--- a/classes/db.rb
+++ b/classes/db.rb
@@ -72,6 +72,7 @@ class DBase
       id = rep_id[:id]
       RepocRecips.where(repo_id: id).delete
       ReposProjects.where(repo_id: id).delete
+      Repos.where(reponame: repo_name).delete
     end
   end
 
@@ -371,4 +372,12 @@ class DBase
   def set_project_address(prj_id, address)
     ProjectsProjects.where(proj_id: prj_id.to_i).update(remote_address: address)
   end
+
+  def get_gits()
+    Repos.all
+  end
+
+  def delete_git_by_id(id)
+    Repos.where(id: id.to_i).delete
+  end
 end
diff --git a/views/footer.erb b/views/footer.erb
index f184f25..47f702e 100644
--- a/views/footer.erb
+++ b/views/footer.erb
@@ -6,7 +6,7 @@
             <ul class="list-inline">
                 <li class="list-inline-item me-4"><a class="link-light" href="https://brepo.ru">Документация</a></li>
                 <li class="list-inline-item me-4"><a class="link-light" href="https://dev.brepo.ru">Разработка</a></li>
-                <li class="list-inline-item"><a class="link-light" href="https://hestiadocs.brepo.ru">Партнеры</a></li>
+                <li class="list-inline-item"><a class="link-light" href="/sanitize">Подчистка</a></li>
             </ul>
             <ul class="list-inline">
                 <li class="list-inline-item me-4"><a href="https://dev.brepo.ru"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-light">
diff --git a/views/header.erb b/views/header.erb
index 2633783..abc5b34 100644
--- a/views/header.erb
+++ b/views/header.erb
@@ -45,6 +45,10 @@
             <span class="p-1">
                 <a href="/bldcfg">build-окружения</a>
             </span>
+            <span>|</span>
+            <span class="p-1">
+                <a href="/builds">сборки</a>
+            </span>
         </div>
     </div>
     <div class="container">
diff --git a/views/sanitize.erb b/views/sanitize.erb
new file mode 100644
index 0000000..3042790
--- /dev/null
+++ b/views/sanitize.erb
@@ -0,0 +1,18 @@
+<%= erb :header %>
+    <div class="container">
+        <div class="row">
+            <div class="col-md-4"></div>
+            <div class="col-md-4">
+                <div class="card">
+                    <div class="card-header">
+                        <h5 class="mb-0">Зачистка устаревших или потерявшихся данных из базы</h5>
+                    </div>
+                    <div class="card-body">
+                        <p class="card-text">Удалено <%= @deleted_items %> записей из базы</p>
+                    </div>
+                </div>
+            </div>
+            <div class="col-md-4"></div>
+        </div>
+    </div>
+<%= erb :footer %>
\ No newline at end of file