verification/script/main.go

122 lines
3.6 KiB
Go
Raw Permalink Normal View History

2024-05-13 17:16:42 +00:00
package main
import (
"context"
"fmt"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
2024-12-08 13:10:21 +00:00
"gitea.pena/PenaSide/verification/internal/models"
2024-05-13 17:16:42 +00:00
)
const (
bucketName = "videodata"
minioEndpoint = "localhost:9000"
accessKeyID = "admin"
secretAccessKey = "admin123"
mongoURI = "mongodb://test:test@localhost:27024/?authSource=admin"
mongoDBName = "admin"
collectionName = "verification"
)
func main() {
ctx := context.Background()
clientOptions := options.Client().ApplyURI(mongoURI)
client, err := mongo.Connect(ctx, clientOptions)
if err != nil {
fmt.Println("Ошибка подключения к монго:", err)
return
}
defer client.Disconnect(ctx)
collection := client.Database(mongoDBName).Collection(collectionName)
minioClient, err := minio.New(minioEndpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
2024-05-13 17:58:08 +00:00
Secure: true,
2024-05-13 17:16:42 +00:00
})
if err != nil {
fmt.Println("Ошибка подключения к минио:", err)
return
}
allFiles, err := getAllFilesInBucket(ctx, minioClient)
if err != nil {
fmt.Println("Ошибка при получении списка файлов в бакете:", err)
return
}
verifications, err := getVerificationRecords(ctx, collection)
if err != nil {
fmt.Println("Ошибка при получении записей верификаций из базы данных:", err)
return
}
for _, file := range allFiles {
if !checkContains(verifications, file.Key) {
fmt.Println("Удаление файла:", file.Key)
err := deleteFileFromBucket(ctx, minioClient, file.Key)
if err != nil {
fmt.Println("Ошибка при удалении файла:", err)
}
}
}
}
// получение всех файлов из минио по бакету
func getAllFilesInBucket(ctx context.Context, client *minio.Client) ([]minio.ObjectInfo, error) {
var files []minio.ObjectInfo
2024-11-21 10:40:57 +00:00
objectCh := client.ListObjects(ctx, bucketName, minio.ListObjectsOptions{
Recursive: true, // флаг рекурсивного прохода по расположениям, добавлен с добавлением folder
})
2024-05-13 17:16:42 +00:00
for object := range objectCh {
if object.Err != nil {
return nil, object.Err
}
files = append(files, object)
}
return files, nil
}
// удаление файла из минио
func deleteFileFromBucket(ctx context.Context, client *minio.Client, fileName string) error {
err := client.RemoveObject(ctx, bucketName, fileName, minio.RemoveObjectOptions{})
return err
}
// получение списка верефикаций из монго
func getVerificationRecords(ctx context.Context, collection *mongo.Collection) ([]models.Verification, error) {
var records []models.Verification
cursor, err := collection.Find(ctx, bson.M{})
if err != nil {
return nil, err
}
defer cursor.Close(ctx)
for cursor.Next(ctx) {
var record models.Verification
if err := cursor.Decode(&record); err != nil {
return nil, err
}
records = append(records, record)
}
if err := cursor.Err(); err != nil {
return nil, err
}
return records, nil
}
// проверка на существования файла минио в монге по урлу
func checkContains(verifications []models.Verification, fileKey string) bool {
2024-11-21 10:40:57 +00:00
fileURL := fmt.Sprintf("%s/%s/%s", minioEndpoint, bucketName, fileKey)
for _, verification := range verifications {
for _, file := range verification.Files {
if file.Url == fileURL {
return true
2024-11-21 09:45:31 +00:00
}
}
2024-05-13 17:16:42 +00:00
}
return false
}