From b89b1d38bc8dd4005a4315593f97e90c02f22066 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9E=D0=BB=D1=8C=D0=B3=D0=B0=20=D0=A0=D1=83=D0=B4=D0=B0?=
 =?UTF-8?q?=D0=BA=D0=BE=D0=B2=D0=B0?= <osrudakova@miem.hse.ru>
Date: Thu, 14 Jan 2021 21:00:07 +0300
Subject: [PATCH] Rewrite NotificationController. Add UpdateRecord and update
 method in rest

---
 .../media_archive/model/UpdateRecord.java     |  70 ++++++++++++++++++
 .../repository/FileRepository.java            |   4 +-
 .../repository/UpdateRecordRepository.java    |  14 ++++
 .../media_archive/service/RestService.java    |  28 +++++++
 .../web/NotificationController.java           |  52 ++++++-------
 target/MediaArchive-1.0-SNAPSHOT.jar          | Bin 41469717 -> 41471597 bytes
 6 files changed, 137 insertions(+), 31 deletions(-)
 create mode 100644 src/main/java/com/rudakova/media_archive/model/UpdateRecord.java
 create mode 100644 src/main/java/com/rudakova/media_archive/repository/UpdateRecordRepository.java

diff --git a/src/main/java/com/rudakova/media_archive/model/UpdateRecord.java b/src/main/java/com/rudakova/media_archive/model/UpdateRecord.java
new file mode 100644
index 0000000..e6a4caf
--- /dev/null
+++ b/src/main/java/com/rudakova/media_archive/model/UpdateRecord.java
@@ -0,0 +1,70 @@
+package com.rudakova.media_archive.model;
+
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.time.Instant;
+import java.util.UUID;
+
+@Document
+public class UpdateRecord {
+
+    private UUID id = UUID.randomUUID();
+
+    private String fileId;
+
+    private String type;
+
+    private Instant creationDate;
+
+    private Account account;
+
+    public UUID getId() {
+        return id;
+    }
+
+    public void setId(UUID id) {
+        this.id = id;
+    }
+
+    public String getFileId() {
+        return fileId;
+    }
+
+    public void setFileId(String fileId) {
+        this.fileId = fileId;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Instant getCreationDate() {
+        return creationDate;
+    }
+
+    public void setCreationDate(Instant creationDate) {
+        this.creationDate = creationDate;
+    }
+
+    public Account getAccount() {
+        return account;
+    }
+
+    public void setAccount(Account account) {
+        this.account = account;
+    }
+
+    @Override
+    public String toString() {
+        return "UpdateRecord{" +
+                "id=" + id +
+                ", fileId='" + fileId + '\'' +
+                ", type='" + type + '\'' +
+                ", creationDate=" + creationDate +
+                '}';
+    }
+}
diff --git a/src/main/java/com/rudakova/media_archive/repository/FileRepository.java b/src/main/java/com/rudakova/media_archive/repository/FileRepository.java
index 2f082ce..99aa25e 100644
--- a/src/main/java/com/rudakova/media_archive/repository/FileRepository.java
+++ b/src/main/java/com/rudakova/media_archive/repository/FileRepository.java
@@ -1,5 +1,6 @@
 package com.rudakova.media_archive.repository;
 
+import com.rudakova.media_archive.model.Account;
 import com.rudakova.media_archive.model.File;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.mongodb.repository.MongoRepository;
@@ -12,9 +13,6 @@ public interface FileRepository extends MongoRepository<File, String> {
 
     Optional<File> findByPreview(String preview);
 
-    @Query(value = "{ 'parents' : ?0 }", fields = "{ '_id': 1 }")
-    List<String> findIdByParents(String folderId);
-
     @Query("{ 'account.emailAddress' : ?0, 'parents' : ?1 }")
     List<File> findByAccountAndParents(String emailAddress, String folderId, Pageable pageable);
 
diff --git a/src/main/java/com/rudakova/media_archive/repository/UpdateRecordRepository.java b/src/main/java/com/rudakova/media_archive/repository/UpdateRecordRepository.java
new file mode 100644
index 0000000..69dc251
--- /dev/null
+++ b/src/main/java/com/rudakova/media_archive/repository/UpdateRecordRepository.java
@@ -0,0 +1,14 @@
+package com.rudakova.media_archive.repository;
+
+import com.rudakova.media_archive.model.UpdateRecord;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.Query;
+
+import java.util.List;
+import java.util.UUID;
+
+public interface UpdateRecordRepository extends MongoRepository<UpdateRecord, UUID> {
+
+    @Query("{ 'account.emailAddress' : ?0 }")
+    List<UpdateRecord> findByAccount(String emailAddress);
+}
diff --git a/src/main/java/com/rudakova/media_archive/service/RestService.java b/src/main/java/com/rudakova/media_archive/service/RestService.java
index 5d100bc..bfc358f 100644
--- a/src/main/java/com/rudakova/media_archive/service/RestService.java
+++ b/src/main/java/com/rudakova/media_archive/service/RestService.java
@@ -8,8 +8,10 @@ import com.rudakova.media_archive.google.GoogleService;
 import com.rudakova.media_archive.model.Account;
 import com.rudakova.media_archive.model.File;
 import com.rudakova.media_archive.model.FolderList;
+import com.rudakova.media_archive.model.UpdateRecord;
 import com.rudakova.media_archive.repository.AccountRepository;
 import com.rudakova.media_archive.repository.FileRepository;
+import com.rudakova.media_archive.repository.UpdateRecordRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +46,9 @@ public class RestService {
     @Autowired
     private AccountRepository accountRepository;
 
+    @Autowired
+    private UpdateRecordRepository updateRecordRepository;
+
     /**
      * Получение папок для выбора рабочей папки.
      * @param nextPageToken токен следующей страницы.
@@ -113,6 +118,29 @@ public class RestService {
         return new AccountDto(account);
     }
 
+    /**
+     * Получение данных о пользователе.
+     * @return пользовательские данные.
+     */
+    @PostMapping("/update")
+    public void update() throws IOException {
+        Account account = authService.getLoggedInAccount();
+        List<UpdateRecord> records = updateRecordRepository.findByAccount(account.getEmailAddress());
+        for (UpdateRecord record : records) {
+            if (record.getType().equals("trash")) {
+                List<String> ids = googleService.getFiles(record.getFileId());
+                for (String id : ids) {
+                    fileRepository.deleteById(id);
+                }
+                LOG.info("Deleted : {}", ids.size());
+            } else {
+                int count = googleService.checkUpdate(record.getFileId(), record.getCreationDate());
+                LOG.info("Added : {}", count);
+            }
+            updateRecordRepository.delete(record);
+        }
+    }
+
     /**
      * Перемещение выбранных файлов в папку для выгрузки.
      * @param files id выбранных файлов.
diff --git a/src/main/java/com/rudakova/media_archive/web/NotificationController.java b/src/main/java/com/rudakova/media_archive/web/NotificationController.java
index 0706935..3337619 100644
--- a/src/main/java/com/rudakova/media_archive/web/NotificationController.java
+++ b/src/main/java/com/rudakova/media_archive/web/NotificationController.java
@@ -1,7 +1,9 @@
 package com.rudakova.media_archive.web;
 
-import com.rudakova.media_archive.google.GoogleService;
+import com.rudakova.media_archive.model.File;
+import com.rudakova.media_archive.model.UpdateRecord;
 import com.rudakova.media_archive.repository.FileRepository;
+import com.rudakova.media_archive.repository.UpdateRecordRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,10 +17,6 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/notification")
@@ -26,34 +24,32 @@ public class NotificationController {
     private static final Logger LOG = LoggerFactory.getLogger(NotificationController.class);
 
     @Autowired
-    private GoogleService googleService;
+    private FileRepository fileRepository;
 
     @Autowired
-    private FileRepository fileRepository;
+    private UpdateRecordRepository updateRecordRepository;
 
     @PostMapping
     public ResponseEntity<String> notification(HttpServletRequest request) throws IOException {
-        Map<String, String> headers = Collections.list(request.getHeaderNames())
-                .stream()
-                .collect(Collectors.toMap(h -> h, request::getHeader));
-        LOG.info(String.valueOf(headers));
-        String state = headers.get("x-goog-resource-state");
-        String uri = request.getHeader("x-goog-resource-uri");
-        String id = uri.substring(uri.lastIndexOf("/") + 1, uri.indexOf("?"));
-        LOG.info("Values: {}, {}", state, id);
-        if (state != null && state.equals("trash")) {
-            List<String> ids = googleService.getFiles(id);
-            LOG.info("Deleted from google: {}", ids);
-            for (String trashId : ids) {
-                fileRepository.deleteById(trashId);
-            }
-        } else if (state != null && (state.equals("update") || state.equals("untrash"))) {
-            String changed = headers.get("x-goog-changed");
-            int count = 0;
-            if (changed == null || changed.equals("children")) {
-                count = googleService.checkUpdate(id, Instant.now().minus(10, ChronoUnit.MINUTES));
-            }
-            LOG.info("Changes: {}", count);
+        String state = request.getHeader("x-goog-resource-state");
+        String changed = request.getHeader("x-goog-changed");
+        LOG.info("State value: {}", state);
+
+        if (state != null && (state.equals("trash") ||
+                        (state.equals("update") && changed.equals("children")) ||
+                        state.equals("untrash"))) {
+            String uri = request.getHeader("x-goog-resource-uri");
+            String id = uri.substring(uri.lastIndexOf("/") + 1, uri.indexOf("?"));
+
+            UpdateRecord updateRecord = new UpdateRecord();
+            updateRecord.setFileId(id);
+            File file = fileRepository.findById(id).orElse(null);
+            updateRecord.setAccount(file == null ? null : file.getAccount());
+            updateRecord.setType(state.equals("update") ? changed : state);
+            updateRecord.setCreationDate(Instant.now().minus(10, ChronoUnit.MINUTES));
+            updateRecordRepository.save(updateRecord);
+
+            LOG.info("Update record: {}", updateRecord);
         }
         return new ResponseEntity<>(HttpStatus.OK);
     }
diff --git a/target/MediaArchive-1.0-SNAPSHOT.jar b/target/MediaArchive-1.0-SNAPSHOT.jar
index 18bf6f9caa60beac9466cc8bc02e5d45a1856a60..aa749258941eb41271395c6a7a19f353f615352c 100644
GIT binary patch
delta 14345
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

delta 12716
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
NcQ&?=a5{WO{~vDjF)siB

-- 
GitLab