moved check storage methods to repository pkg

This commit is contained in:
Pasha 2024-12-13 16:31:32 +03:00
parent d00e76d872
commit 7bdd6a000e
4 changed files with 51 additions and 54 deletions

@ -99,7 +99,7 @@ func Run(cfg *config.Config, build Build) {
adminSrv := server.NewHTTP(server.ServerConfig{ adminSrv := server.NewHTTP(server.ServerConfig{
Logger: logger, Logger: logger,
Controllers: []server.Controller{cons.VerificationAdmin}, Controllers: []server.Controller{cons.VerificationAdmin, cons.HealthCheck},
HLogger: loggerHlog, HLogger: loggerHlog,
}) })

@ -1,33 +1,25 @@
package health_check package health_check
import ( import (
"context"
"fmt"
"gitea.pena/PenaSide/verification/internal/client" "gitea.pena/PenaSide/verification/internal/client"
"gitea.pena/PenaSide/verification/internal/repository" "gitea.pena/PenaSide/verification/internal/repository"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/minio/minio-go/v7"
"go.mongodb.org/mongo-driver/mongo"
"time"
) )
type Deps struct { type Deps struct {
TgClient *client.Telegram TgClient *client.Telegram
MongoDB *mongo.Client Repository *repository.VerificationRepository
S3Client *minio.Client
} }
type HealthCheck struct { type HealthCheck struct {
tgClient *client.Telegram tgClient *client.Telegram
mongoDB *mongo.Client repository *repository.VerificationRepository
s3Client *minio.Client
} }
func NewHealthCheck(deps Deps) *HealthCheck { func NewHealthCheck(deps Deps) *HealthCheck {
return &HealthCheck{ return &HealthCheck{
tgClient: deps.TgClient, tgClient: deps.TgClient,
mongoDB: deps.MongoDB, repository: deps.Repository,
s3Client: deps.S3Client,
} }
} }
@ -36,7 +28,7 @@ func (receiver *HealthCheck) Liveness(ctx *fiber.Ctx) error {
} }
func (receiver *HealthCheck) Readiness(ctx *fiber.Ctx) error { func (receiver *HealthCheck) Readiness(ctx *fiber.Ctx) error {
if err := receiver.checkMongoDB(); err != nil { if err := receiver.repository.CheckMongoDB(); err != nil {
return ctx.Status(fiber.StatusServiceUnavailable).SendString("mongoDB is unavailable: " + err.Error()) return ctx.Status(fiber.StatusServiceUnavailable).SendString("mongoDB is unavailable: " + err.Error())
} }
@ -44,37 +36,9 @@ func (receiver *HealthCheck) Readiness(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusServiceUnavailable).SendString("could not connect to Telegram: " + err.Error()) return ctx.Status(fiber.StatusServiceUnavailable).SendString("could not connect to Telegram: " + err.Error())
} }
if err := receiver.checkS3(); err != nil { if err := receiver.repository.CheckS3(); err != nil {
return ctx.Status(fiber.StatusServiceUnavailable).SendString("could not connect to S3: " + err.Error()) return ctx.Status(fiber.StatusServiceUnavailable).SendString("could not connect to S3: " + err.Error())
} }
return ctx.SendStatus(fiber.StatusOK) return ctx.SendStatus(fiber.StatusOK)
} }
func (receiver *HealthCheck) checkMongoDB() error {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := receiver.mongoDB.Ping(ctx, nil); err != nil {
return fmt.Errorf("failed to ping MongoDB: %v", err)
}
return nil
}
func (receiver *HealthCheck) checkS3() error {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
buckets, err := receiver.s3Client.ListBuckets(ctx)
if err != nil {
return fmt.Errorf("failed to list buckets: %v", err)
}
for _, b := range buckets {
if b.Name == repository.VerificationBucket {
return nil
}
}
return fmt.Errorf("failed to find verification bucket")
}

@ -1,15 +1,17 @@
package initialize package initialize
import ( import (
"gitea.pena/PenaSide/customer/pkg/customer_clients"
"gitea.pena/PenaSide/verification/internal/client" "gitea.pena/PenaSide/verification/internal/client"
"gitea.pena/PenaSide/verification/internal/controllers/admin" "gitea.pena/PenaSide/verification/internal/controllers/admin"
"gitea.pena/PenaSide/verification/internal/controllers/admin/health_check"
"gitea.pena/PenaSide/verification/internal/controllers/user" "gitea.pena/PenaSide/verification/internal/controllers/user"
"gitea.pena/PenaSide/customer/pkg/customer_clients"
) )
type Controllers struct { type Controllers struct {
VerificationAdmin *admin.VerifyAdminController VerificationAdmin *admin.VerifyAdminController
VerificationUser *user.VerifyUserController VerificationUser *user.VerifyUserController
HealthCheck *health_check.HealthCheck
} }
func NewControllers(reps *Repositories, telegram *client.Telegram, customer *customer_clients.CustomersClient) *Controllers { func NewControllers(reps *Repositories, telegram *client.Telegram, customer *customer_clients.CustomersClient) *Controllers {
@ -22,5 +24,9 @@ func NewControllers(reps *Repositories, telegram *client.Telegram, customer *cus
Repository: reps.Verification, Repository: reps.Verification,
Telegram: telegram, Telegram: telegram,
}), }),
HealthCheck: health_check.NewHealthCheck(health_check.Deps{
TgClient: telegram,
Repository: reps.Verification,
}),
} }
} }

@ -5,16 +5,16 @@ import (
"errors" "errors"
"fmt" "fmt"
"mime/multipart" "mime/multipart"
"time"
"strings" "strings"
"time"
"gitea.pena/PenaSide/verification/internal/models"
"github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/options"
"go.uber.org/zap" "go.uber.org/zap"
"gitea.pena/PenaSide/verification/internal/models"
) )
type VerificationRepository struct { type VerificationRepository struct {
@ -195,17 +195,17 @@ func (r *VerificationRepository) UpdateFile(ctx context.Context, userID, fileNam
return nil, err return nil, err
} }
fileURL := fmt.Sprintf("%s/%s/%s/%s", r.url, r.folder, userID, fileHeader.Filename) fileURL := fmt.Sprintf("%s/%s/%s/%s", r.url, r.folder, userID, fileHeader.Filename)
// remove old file // remove old file
verification, err := r.GetByUserID(ctx, userID) verification, err := r.GetByUserID(ctx, userID)
if r.err(err) { if r.err(err) {
return nil, err return nil, err
} }
if verification == nil { if verification == nil {
return nil, fmt.Errorf("no verification found") return nil, fmt.Errorf("no verification found")
} }
found := false found := false
for iterator, file := range verification.Files { for iterator, file := range verification.Files {
@ -228,7 +228,6 @@ func (r *VerificationRepository) UpdateFile(ctx context.Context, userID, fileNam
// update in mongodb // update in mongodb
result, err := r.Update(ctx, &models.Verification{ID: verification.ID, Files: verification.Files}) result, err := r.Update(ctx, &models.Verification{ID: verification.ID, Files: verification.Files})
if r.err(err) { if r.err(err) {
return nil, err return nil, err
@ -244,3 +243,31 @@ func (r *VerificationRepository) err(err error) bool {
} }
return false return false
} }
func (r *VerificationRepository) CheckMongoDB() error {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := r.mongo.Database().Client().Ping(ctx, nil); err != nil {
return fmt.Errorf("failed to ping MongoDB: %v", err)
}
return nil
}
func (r *VerificationRepository) CheckS3() error {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
buckets, err := r.s3.ListBuckets(ctx)
if err != nil {
return fmt.Errorf("failed to list buckets: %v", err)
}
for _, b := range buckets {
if b.Name == VerificationBucket {
return nil
}
}
return fmt.Errorf("failed to find verification bucket")
}