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{
Logger: logger,
Controllers: []server.Controller{cons.VerificationAdmin},
Controllers: []server.Controller{cons.VerificationAdmin, cons.HealthCheck},
HLogger: loggerHlog,
})

@ -1,33 +1,25 @@
package health_check
import (
"context"
"fmt"
"gitea.pena/PenaSide/verification/internal/client"
"gitea.pena/PenaSide/verification/internal/repository"
"github.com/gofiber/fiber/v2"
"github.com/minio/minio-go/v7"
"go.mongodb.org/mongo-driver/mongo"
"time"
)
type Deps struct {
TgClient *client.Telegram
MongoDB *mongo.Client
S3Client *minio.Client
TgClient *client.Telegram
Repository *repository.VerificationRepository
}
type HealthCheck struct {
tgClient *client.Telegram
mongoDB *mongo.Client
s3Client *minio.Client
tgClient *client.Telegram
repository *repository.VerificationRepository
}
func NewHealthCheck(deps Deps) *HealthCheck {
return &HealthCheck{
tgClient: deps.TgClient,
mongoDB: deps.MongoDB,
s3Client: deps.S3Client,
tgClient: deps.TgClient,
repository: deps.Repository,
}
}
@ -36,7 +28,7 @@ func (receiver *HealthCheck) Liveness(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())
}
@ -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())
}
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.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
import (
"gitea.pena/PenaSide/customer/pkg/customer_clients"
"gitea.pena/PenaSide/verification/internal/client"
"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/customer/pkg/customer_clients"
)
type Controllers struct {
VerificationAdmin *admin.VerifyAdminController
VerificationUser *user.VerifyUserController
HealthCheck *health_check.HealthCheck
}
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,
Telegram: telegram,
}),
HealthCheck: health_check.NewHealthCheck(health_check.Deps{
TgClient: telegram,
Repository: reps.Verification,
}),
}
}

@ -5,16 +5,16 @@ import (
"errors"
"fmt"
"mime/multipart"
"time"
"strings"
"time"
"gitea.pena/PenaSide/verification/internal/models"
"github.com/minio/minio-go/v7"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.uber.org/zap"
"gitea.pena/PenaSide/verification/internal/models"
)
type VerificationRepository struct {
@ -195,17 +195,17 @@ func (r *VerificationRepository) UpdateFile(ctx context.Context, userID, fileNam
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
verification, err := r.GetByUserID(ctx, userID)
if r.err(err) {
return nil, err
}
if verification == nil {
return nil, fmt.Errorf("no verification found")
}
if verification == nil {
return nil, fmt.Errorf("no verification found")
}
found := false
for iterator, file := range verification.Files {
@ -228,7 +228,6 @@ func (r *VerificationRepository) UpdateFile(ctx context.Context, userID, fileNam
// update in mongodb
result, err := r.Update(ctx, &models.Verification{ID: verification.ID, Files: verification.Files})
if r.err(err) {
return nil, err
@ -244,3 +243,31 @@ func (r *VerificationRepository) err(err error) bool {
}
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")
}