Initial commit: Open sourcing all of the Maple Open Technologies code.
This commit is contained in:
commit
755d54a99d
2010 changed files with 448675 additions and 0 deletions
139
cloud/maplefile-backend/app/app.go
Normal file
139
cloud/maplefile-backend/app/app.go
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/gocql/gocql"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/scheduler"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/scheduler/tasks"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/database/cassandradb"
|
||||
)
|
||||
|
||||
// Application represents the main application using Wire DI
|
||||
type Application struct {
|
||||
config *config.Config
|
||||
httpServer *http.WireServer
|
||||
logger *zap.Logger
|
||||
migrator *cassandradb.Migrator
|
||||
scheduler *scheduler.Scheduler
|
||||
ipAnonymizationTask *tasks.IPAnonymizationTask
|
||||
dbSession *gocql.Session
|
||||
}
|
||||
|
||||
// ProvideApplication creates the application instance for Wire
|
||||
func ProvideApplication(
|
||||
cfg *config.Config,
|
||||
httpServer *http.WireServer,
|
||||
logger *zap.Logger,
|
||||
migrator *cassandradb.Migrator,
|
||||
sched *scheduler.Scheduler,
|
||||
ipAnonymizationTask *tasks.IPAnonymizationTask,
|
||||
dbSession *gocql.Session,
|
||||
) *Application {
|
||||
return &Application{
|
||||
config: cfg,
|
||||
httpServer: httpServer,
|
||||
logger: logger,
|
||||
migrator: migrator,
|
||||
scheduler: sched,
|
||||
ipAnonymizationTask: ipAnonymizationTask,
|
||||
dbSession: dbSession,
|
||||
}
|
||||
}
|
||||
|
||||
// Start starts the application
|
||||
func (app *Application) Start() error {
|
||||
app.logger.Info("🚀 MapleFile Backend Starting (Wire DI)",
|
||||
zap.String("version", app.config.App.Version),
|
||||
zap.String("environment", app.config.App.Environment),
|
||||
zap.String("di_framework", "Google Wire"))
|
||||
|
||||
// Run database migrations automatically on startup if enabled
|
||||
if app.config.Database.AutoMigrate {
|
||||
app.logger.Info("Auto-migration enabled, running database migrations...")
|
||||
if err := app.migrator.Up(); err != nil {
|
||||
app.logger.Error("Failed to run database migrations", zap.Error(err))
|
||||
return fmt.Errorf("migration failed: %w", err)
|
||||
}
|
||||
app.logger.Info("✅ Database migrations completed successfully")
|
||||
|
||||
// Wait for schema agreement across all Cassandra nodes
|
||||
// This ensures all nodes have the new schema before we start accepting requests
|
||||
app.logger.Info("⏳ Waiting for Cassandra schema agreement...")
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
defer cancel()
|
||||
if err := app.dbSession.AwaitSchemaAgreement(ctx); err != nil {
|
||||
app.logger.Warn("Schema agreement wait failed, continuing anyway",
|
||||
zap.Error(err),
|
||||
zap.String("note", "This may cause transient errors on first requests"))
|
||||
} else {
|
||||
app.logger.Info("✅ Cassandra schema agreement reached")
|
||||
}
|
||||
} else {
|
||||
app.logger.Info("Auto-migration disabled (DATABASE_AUTO_MIGRATE=false), skipping migrations")
|
||||
}
|
||||
|
||||
// Register scheduled tasks
|
||||
app.logger.Info("Registering scheduled tasks...")
|
||||
if err := app.scheduler.RegisterTask(app.ipAnonymizationTask); err != nil {
|
||||
app.logger.Error("Failed to register IP anonymization task", zap.Error(err))
|
||||
return fmt.Errorf("task registration failed: %w", err)
|
||||
}
|
||||
|
||||
// Start scheduler
|
||||
if err := app.scheduler.Start(); err != nil {
|
||||
app.logger.Error("Failed to start scheduler", zap.Error(err))
|
||||
return fmt.Errorf("scheduler startup failed: %w", err)
|
||||
}
|
||||
|
||||
// Start HTTP server in goroutine
|
||||
errChan := make(chan error, 1)
|
||||
go func() {
|
||||
if err := app.httpServer.Start(); err != nil {
|
||||
errChan <- err
|
||||
}
|
||||
}()
|
||||
|
||||
// Wait for interrupt signal or server error
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
select {
|
||||
case err := <-errChan:
|
||||
app.logger.Error("HTTP server failed", zap.Error(err))
|
||||
return fmt.Errorf("server startup failed: %w", err)
|
||||
case sig := <-quit:
|
||||
app.logger.Info("Received shutdown signal", zap.String("signal", sig.String()))
|
||||
}
|
||||
|
||||
app.logger.Info("👋 MapleFile Backend Shutting Down")
|
||||
|
||||
// Graceful shutdown with timeout
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
|
||||
defer cancel()
|
||||
|
||||
// Stop scheduler first
|
||||
app.logger.Info("Stopping scheduler...")
|
||||
if err := app.scheduler.Stop(); err != nil {
|
||||
app.logger.Error("Scheduler shutdown error", zap.Error(err))
|
||||
// Continue with shutdown even if scheduler fails
|
||||
}
|
||||
|
||||
// Stop HTTP server
|
||||
if err := app.httpServer.Shutdown(ctx); err != nil {
|
||||
app.logger.Error("Server shutdown error", zap.Error(err))
|
||||
return fmt.Errorf("server shutdown failed: %w", err)
|
||||
}
|
||||
|
||||
app.logger.Info("✅ MapleFile Backend Stopped Successfully")
|
||||
return nil
|
||||
}
|
||||
332
cloud/maplefile-backend/app/wire.go
Normal file
332
cloud/maplefile-backend/app/wire.go
Normal file
|
|
@ -0,0 +1,332 @@
|
|||
//go:build wireinject
|
||||
// +build wireinject
|
||||
|
||||
package app
|
||||
|
||||
import (
|
||||
"github.com/google/wire"
|
||||
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/blockedemail"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/collection"
|
||||
commonhttp "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/common"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/dashboard"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/file"
|
||||
http_inviteemail "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/inviteemail"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/me"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/middleware"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/tag"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/user"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/scheduler"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/scheduler/tasks"
|
||||
blockedemailrepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/blockedemail"
|
||||
collectionrepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/collection"
|
||||
filemetadatarepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/filemetadata"
|
||||
fileobjectstoragerepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/fileobjectstorage"
|
||||
inviteemailratelimitrepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/inviteemailratelimit"
|
||||
storagedailyusagerepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/storagedailyusage"
|
||||
storageusageeventrepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/storageusageevent"
|
||||
tagrepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/tag"
|
||||
userrepo "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/user"
|
||||
svc_auth "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/auth"
|
||||
svc_blockedemail "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/blockedemail"
|
||||
svc_collection "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/collection"
|
||||
svc_dashboard "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/dashboard"
|
||||
svc_file "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/file"
|
||||
svc_inviteemail "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/inviteemail"
|
||||
svc_ipanonymization "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/ipanonymization"
|
||||
svc_me "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/me"
|
||||
svc_tag "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/tag"
|
||||
svc_user "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/user"
|
||||
uc_blockedemail "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/blockedemail"
|
||||
uc_collection "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/collection"
|
||||
uc_filemetadata "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/filemetadata"
|
||||
uc_fileobjectstorage "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/fileobjectstorage"
|
||||
uc_storagedailyusage "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/storagedailyusage"
|
||||
uc_storageusageevent "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/storageusageevent"
|
||||
uc_tag "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/tag"
|
||||
uc_user "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/user"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/auditlog"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/distributedmutex"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/emailer/mailgun"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/leaderelection"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/logger"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/ratelimit"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/security/jwt"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/cache/cassandracache"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/database/cassandradb"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/memory/redis"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/object/s3"
|
||||
)
|
||||
|
||||
// InitializeApplication wires up all dependencies using Google Wire
|
||||
func InitializeApplication(cfg *config.Configuration) (*Application, error) {
|
||||
wire.Build(
|
||||
// Infrastructure layer (pkg/)
|
||||
logger.ProvideLogger,
|
||||
auditlog.ProvideAuditLogger,
|
||||
cassandradb.ProvideCassandraConnection,
|
||||
cassandradb.NewMigrator,
|
||||
cassandracache.ProvideCassandraCacher,
|
||||
redis.ProvideRedisUniversalClient,
|
||||
s3.ProvideS3ObjectStorageProvider,
|
||||
jwt.ProvideJWTProvider,
|
||||
mailgun.ProvideMapleFileModuleEmailer,
|
||||
distributedmutex.ProvideDistributedMutexAdapter,
|
||||
leaderelection.ProvideLeaderElection,
|
||||
ratelimit.ProvideLoginRateLimiter,
|
||||
ratelimit.ProvideAuthFailureRateLimiter,
|
||||
middleware.ProvideRateLimitMiddleware,
|
||||
middleware.ProvideSecurityHeadersMiddleware,
|
||||
|
||||
// Repository layer
|
||||
blockedemailrepo.NewBlockedEmailRepository,
|
||||
filemetadatarepo.ProvideRepository,
|
||||
fileobjectstoragerepo.ProvideRepository,
|
||||
userrepo.ProvideRepository,
|
||||
collectionrepo.ProvideRepository,
|
||||
storagedailyusagerepo.ProvideRepository,
|
||||
storageusageeventrepo.ProvideRepository,
|
||||
inviteemailratelimitrepo.ProvideRepository,
|
||||
tagrepo.ProvideTagRepository,
|
||||
|
||||
// Use case layer - Collection (10 providers - only used ones)
|
||||
uc_collection.ProvideGetCollectionUseCase,
|
||||
uc_collection.ProvideUpdateCollectionUseCase,
|
||||
uc_collection.ProvideHardDeleteCollectionUseCase,
|
||||
uc_collection.ProvideCheckCollectionAccessUseCase,
|
||||
uc_collection.ProvideGetCollectionSyncDataUseCase,
|
||||
uc_collection.ProvideCountUserFoldersUseCase,
|
||||
uc_collection.ProvideAnonymizeOldIPsUseCase,
|
||||
uc_collection.ProvideListCollectionsByUserUseCase,
|
||||
uc_collection.ProvideRemoveUserFromAllCollectionsUseCase,
|
||||
uc_collection.ProvideAnonymizeUserReferencesUseCase,
|
||||
|
||||
// Use case layer - File Metadata (15 providers - only used ones)
|
||||
uc_filemetadata.ProvideCreateFileMetadataUseCase,
|
||||
uc_filemetadata.ProvideGetFileMetadataUseCase,
|
||||
uc_filemetadata.ProvideGetFileMetadataByCollectionUseCase,
|
||||
uc_filemetadata.ProvideUpdateFileMetadataUseCase,
|
||||
uc_filemetadata.ProvideSoftDeleteFileMetadataUseCase,
|
||||
uc_filemetadata.ProvideHardDeleteFileMetadataUseCase,
|
||||
uc_filemetadata.ProvideCountUserFilesUseCase,
|
||||
uc_filemetadata.ProvideGetFileMetadataByOwnerIDUseCase,
|
||||
uc_filemetadata.ProvideGetFileMetadataByIDsUseCase,
|
||||
uc_filemetadata.ProvideListFileMetadataSyncDataUseCase,
|
||||
uc_filemetadata.ProvideDeleteManyFileMetadataUseCase,
|
||||
uc_filemetadata.ProvideCheckFileExistsUseCase,
|
||||
uc_filemetadata.ProvideListRecentFilesUseCase,
|
||||
uc_filemetadata.ProvideAnonymizeOldIPsUseCase,
|
||||
uc_filemetadata.ProvideAnonymizeUserReferencesUseCase,
|
||||
|
||||
// Use case layer - File Object Storage (6 providers - only used ones)
|
||||
uc_fileobjectstorage.ProvideGeneratePresignedUploadURLUseCase,
|
||||
uc_fileobjectstorage.ProvideGeneratePresignedDownloadURLUseCase,
|
||||
uc_fileobjectstorage.ProvideDeleteEncryptedDataUseCase,
|
||||
uc_fileobjectstorage.ProvideDeleteMultipleEncryptedDataUseCase,
|
||||
uc_fileobjectstorage.ProvideVerifyObjectExistsUseCase,
|
||||
uc_fileobjectstorage.ProvideGetObjectSizeUseCase,
|
||||
|
||||
// Use case layer - User (10 providers)
|
||||
uc_user.ProvideUserCreateUseCase,
|
||||
uc_user.ProvideUserGetByIDUseCase,
|
||||
uc_user.ProvideUserGetByEmailUseCase,
|
||||
uc_user.ProvideUserGetByVerificationCodeUseCase,
|
||||
uc_user.ProvideUserUpdateUseCase,
|
||||
uc_user.ProvideUserDeleteByIDUseCase,
|
||||
uc_user.ProvideUserStorageQuotaHelperUseCase,
|
||||
uc_user.ProvideAnonymizeOldIPsUseCase,
|
||||
uc_user.ProvideAnonymizeUserIPsImmediatelyUseCase,
|
||||
uc_user.ProvideClearUserCacheUseCase,
|
||||
|
||||
// Use case layer - Blocked Email (4 providers)
|
||||
uc_blockedemail.NewCreateBlockedEmailUseCase,
|
||||
uc_blockedemail.NewListBlockedEmailsUseCase,
|
||||
uc_blockedemail.NewDeleteBlockedEmailUseCase,
|
||||
uc_blockedemail.NewCheckBlockedEmailUseCase,
|
||||
|
||||
// Use case layer - Storage Daily Usage (3 providers - only used ones)
|
||||
uc_storagedailyusage.ProvideGetStorageDailyUsageTrendUseCase,
|
||||
uc_storagedailyusage.ProvideUpdateStorageUsageUseCase,
|
||||
uc_storagedailyusage.ProvideDeleteByUserUseCase,
|
||||
|
||||
// Use case layer - Storage Usage Event (2 providers)
|
||||
uc_storageusageevent.ProvideCreateStorageUsageEventUseCase,
|
||||
uc_storageusageevent.ProvideDeleteByUserUseCase,
|
||||
|
||||
// Use case layer - Tag (11 providers)
|
||||
uc_tag.ProvideCreateTagUseCase,
|
||||
uc_tag.ProvideGetTagByIDUseCase,
|
||||
uc_tag.ProvideListTagsByUserUseCase,
|
||||
uc_tag.ProvideUpdateTagUseCase,
|
||||
uc_tag.ProvideDeleteTagUseCase,
|
||||
uc_tag.ProvideAssignTagUseCase,
|
||||
uc_tag.ProvideUnassignTagUseCase,
|
||||
uc_tag.ProvideGetTagsForEntityUseCase,
|
||||
uc_tag.ProvideListCollectionsByTagUseCase,
|
||||
uc_tag.ProvideListFilesByTagUseCase,
|
||||
// NOTE: ProvideCreateDefaultTagsUseCase removed - default tags must be created client-side due to E2EE
|
||||
|
||||
// Service layer - Collection (15 providers)
|
||||
svc_collection.ProvideCreateCollectionService,
|
||||
svc_collection.ProvideGetCollectionService,
|
||||
svc_collection.ProvideListUserCollectionsService,
|
||||
svc_collection.ProvideUpdateCollectionService,
|
||||
svc_collection.ProvideSoftDeleteCollectionService,
|
||||
svc_collection.ProvideArchiveCollectionService,
|
||||
svc_collection.ProvideRestoreCollectionService,
|
||||
svc_collection.ProvideListSharedCollectionsService,
|
||||
svc_collection.ProvideFindRootCollectionsService,
|
||||
svc_collection.ProvideFindCollectionsByParentService,
|
||||
svc_collection.ProvideGetCollectionSyncDataService,
|
||||
svc_collection.ProvideMoveCollectionService,
|
||||
svc_collection.ProvideGetFilteredCollectionsService,
|
||||
svc_collection.ProvideShareCollectionService,
|
||||
svc_collection.ProvideRemoveMemberService,
|
||||
|
||||
// Service layer - File (14 providers)
|
||||
svc_file.ProvideCreatePendingFileService,
|
||||
svc_file.ProvideGetPresignedUploadURLService,
|
||||
svc_file.ProvideCompleteFileUploadService,
|
||||
svc_file.ProvideGetFileService,
|
||||
svc_file.ProvideGetPresignedDownloadURLService,
|
||||
svc_file.ProvideListFilesByCollectionService,
|
||||
svc_file.ProvideListRecentFilesService,
|
||||
svc_file.ProvideUpdateFileService,
|
||||
svc_file.ProvideSoftDeleteFileService,
|
||||
svc_file.ProvideArchiveFileService,
|
||||
svc_file.ProvideRestoreFileService,
|
||||
svc_file.ProvideDeleteMultipleFilesService,
|
||||
svc_file.ProvideListFileSyncDataService,
|
||||
svc_file.ProvideListFilesByOwnerIDService,
|
||||
|
||||
// Service layer - Auth (10 providers)
|
||||
svc_auth.ProvideRegisterService,
|
||||
svc_auth.ProvideVerifyEmailService,
|
||||
svc_auth.ProvideResendVerificationService,
|
||||
svc_auth.ProvideRequestOTTService,
|
||||
svc_auth.ProvideVerifyOTTService,
|
||||
svc_auth.ProvideCompleteLoginService,
|
||||
svc_auth.ProvideRefreshTokenService,
|
||||
svc_auth.ProvideRecoveryInitiateService,
|
||||
svc_auth.ProvideRecoveryVerifyService,
|
||||
svc_auth.ProvideRecoveryCompleteService,
|
||||
|
||||
// Service layer - Me (3 providers)
|
||||
svc_me.ProvideGetMeService,
|
||||
svc_me.ProvideUpdateMeService,
|
||||
svc_me.ProvideDeleteMeService,
|
||||
|
||||
// Service layer - Dashboard (1 provider)
|
||||
svc_dashboard.ProvideGetDashboardService,
|
||||
|
||||
// Service layer - User (2 providers)
|
||||
svc_user.ProvideUserPublicLookupService,
|
||||
svc_user.ProvideCompleteUserDeletionService,
|
||||
|
||||
// Service layer - Blocked Email (3 providers)
|
||||
svc_blockedemail.ProvideCreateBlockedEmailService,
|
||||
svc_blockedemail.ProvideListBlockedEmailsService,
|
||||
svc_blockedemail.ProvideDeleteBlockedEmailService,
|
||||
|
||||
// Service layer - Invite Email (1 provider)
|
||||
svc_inviteemail.ProvideSendInviteEmailService,
|
||||
|
||||
// Service layer - IP Anonymization (1 provider)
|
||||
svc_ipanonymization.ProvideAnonymizeOldIPsService,
|
||||
|
||||
// Service layer - Tag (2 providers)
|
||||
svc_tag.ProvideTagService,
|
||||
svc_tag.ProvideSearchByTagsService,
|
||||
|
||||
// Service layer - Storage Daily Usage (none currently used)
|
||||
|
||||
// Middleware
|
||||
middleware.ProvideMiddleware,
|
||||
|
||||
// HTTP handlers - Common
|
||||
commonhttp.ProvideMapleFileVersionHTTPHandler,
|
||||
|
||||
// HTTP handlers - Dashboard
|
||||
dashboard.ProvideGetDashboardHTTPHandler,
|
||||
|
||||
// HTTP handlers - Me
|
||||
me.ProvideGetMeHTTPHandler,
|
||||
me.ProvidePutUpdateMeHTTPHandler,
|
||||
me.ProvideDeleteMeHTTPHandler,
|
||||
|
||||
// HTTP handlers - User (1 provider)
|
||||
user.ProvideUserPublicLookupHTTPHandler,
|
||||
|
||||
// HTTP handlers - Blocked Email (3 providers)
|
||||
blockedemail.ProvideCreateBlockedEmailHTTPHandler,
|
||||
blockedemail.ProvideListBlockedEmailsHTTPHandler,
|
||||
blockedemail.ProvideDeleteBlockedEmailHTTPHandler,
|
||||
|
||||
// HTTP handlers - Invite Email (1 provider)
|
||||
http_inviteemail.ProvideSendInviteEmailHTTPHandler,
|
||||
|
||||
// HTTP handlers - Collection (15 providers)
|
||||
collection.ProvideCreateCollectionHTTPHandler,
|
||||
collection.ProvideGetCollectionHTTPHandler,
|
||||
collection.ProvideListUserCollectionsHTTPHandler,
|
||||
collection.ProvideUpdateCollectionHTTPHandler,
|
||||
collection.ProvideSoftDeleteCollectionHTTPHandler,
|
||||
collection.ProvideArchiveCollectionHTTPHandler,
|
||||
collection.ProvideRestoreCollectionHTTPHandler,
|
||||
collection.ProvideListSharedCollectionsHTTPHandler,
|
||||
collection.ProvideFindRootCollectionsHTTPHandler,
|
||||
collection.ProvideFindCollectionsByParentHTTPHandler,
|
||||
collection.ProvideCollectionSyncHTTPHandler,
|
||||
collection.ProvideMoveCollectionHTTPHandler,
|
||||
collection.ProvideGetFilteredCollectionsHTTPHandler,
|
||||
collection.ProvideShareCollectionHTTPHandler,
|
||||
collection.ProvideRemoveMemberHTTPHandler,
|
||||
|
||||
// HTTP handlers - File (14 providers)
|
||||
file.ProvideCreatePendingFileHTTPHandler,
|
||||
file.ProvideGetPresignedUploadURLHTTPHandler,
|
||||
file.ProvideCompleteFileUploadHTTPHandler,
|
||||
file.ProvideGetFileHTTPHandler,
|
||||
file.ProvideGetPresignedDownloadURLHTTPHandler,
|
||||
file.ProvideReportDownloadCompletedHTTPHandler,
|
||||
file.ProvideListFilesByCollectionHTTPHandler,
|
||||
file.ProvideListRecentFilesHTTPHandler,
|
||||
file.ProvideUpdateFileHTTPHandler,
|
||||
file.ProvideSoftDeleteFileHTTPHandler,
|
||||
file.ProvideArchiveFileHTTPHandler,
|
||||
file.ProvideRestoreFileHTTPHandler,
|
||||
file.ProvideDeleteMultipleFilesHTTPHandler,
|
||||
file.ProvideFileSyncHTTPHandler,
|
||||
|
||||
// HTTP handlers - Tag (12 providers)
|
||||
tag.ProvideCreateTagHTTPHandler,
|
||||
tag.ProvideListTagsHTTPHandler,
|
||||
tag.ProvideGetTagHTTPHandler,
|
||||
tag.ProvideUpdateTagHTTPHandler,
|
||||
tag.ProvideDeleteTagHTTPHandler,
|
||||
tag.ProvideAssignTagHTTPHandler,
|
||||
tag.ProvideUnassignTagHTTPHandler,
|
||||
tag.ProvideGetTagsForCollectionHTTPHandler,
|
||||
tag.ProvideGetTagsForFileHTTPHandler,
|
||||
tag.ProvideListCollectionsByTagHandler,
|
||||
tag.ProvideListFilesByTagHandler,
|
||||
tag.ProvideSearchByTagsHandler,
|
||||
|
||||
// HTTP layer - Aggregate Handlers
|
||||
http.ProvideHandlers,
|
||||
|
||||
// HTTP layer - Server
|
||||
http.ProvideServer,
|
||||
|
||||
// Scheduler
|
||||
scheduler.ProvideScheduler,
|
||||
tasks.ProvideIPAnonymizationTask,
|
||||
|
||||
// Application
|
||||
ProvideApplication,
|
||||
)
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
274
cloud/maplefile-backend/app/wire_gen.go
Normal file
274
cloud/maplefile-backend/app/wire_gen.go
Normal file
|
|
@ -0,0 +1,274 @@
|
|||
// Code generated by Wire. DO NOT EDIT.
|
||||
|
||||
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
|
||||
//go:build !wireinject
|
||||
// +build !wireinject
|
||||
|
||||
package app
|
||||
|
||||
import (
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http"
|
||||
blockedemail4 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/blockedemail"
|
||||
collection4 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/collection"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/common"
|
||||
dashboard2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/dashboard"
|
||||
file2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/file"
|
||||
inviteemail2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/inviteemail"
|
||||
me2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/me"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/middleware"
|
||||
tag4 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/tag"
|
||||
user4 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/http/user"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/scheduler"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/interface/scheduler/tasks"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/blockedemail"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/collection"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/filemetadata"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/fileobjectstorage"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/inviteemailratelimit"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/storagedailyusage"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/storageusageevent"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/tag"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/repo/user"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/auth"
|
||||
blockedemail3 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/blockedemail"
|
||||
collection3 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/collection"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/dashboard"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/file"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/inviteemail"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/ipanonymization"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/me"
|
||||
tag3 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/tag"
|
||||
user3 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/service/user"
|
||||
blockedemail2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/blockedemail"
|
||||
collection2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/collection"
|
||||
filemetadata2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/filemetadata"
|
||||
fileobjectstorage2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/fileobjectstorage"
|
||||
storagedailyusage2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/storagedailyusage"
|
||||
storageusageevent2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/storageusageevent"
|
||||
tag2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/tag"
|
||||
user2 "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/user"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/auditlog"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/distributedmutex"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/emailer/mailgun"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/leaderelection"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/logger"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/ratelimit"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/security/jwt"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/cache/cassandracache"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/database/cassandradb"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/memory/redis"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/pkg/storage/object/s3"
|
||||
)
|
||||
|
||||
// Injectors from wire.go:
|
||||
|
||||
// InitializeApplication wires up all dependencies using Google Wire
|
||||
func InitializeApplication(cfg *config.Config) (*Application, error) {
|
||||
zapLogger, err := logger.ProvideLogger(cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mapleFileVersionHTTPHandler := common.ProvideMapleFileVersionHTTPHandler(zapLogger)
|
||||
session, err := cassandradb.ProvideCassandraConnection(cfg, zapLogger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
collectionRepository := collection.ProvideRepository(cfg, session, zapLogger)
|
||||
fileMetadataRepository := filemetadata.ProvideRepository(cfg, session, zapLogger, collectionRepository)
|
||||
listRecentFilesUseCase := filemetadata2.ProvideListRecentFilesUseCase(cfg, zapLogger, fileMetadataRepository, collectionRepository)
|
||||
listRecentFilesService := file.ProvideListRecentFilesService(cfg, zapLogger, listRecentFilesUseCase)
|
||||
repository := user.ProvideRepository(cfg, session, zapLogger)
|
||||
userGetByIDUseCase := user2.ProvideUserGetByIDUseCase(cfg, zapLogger, repository)
|
||||
countUserFilesUseCase := filemetadata2.ProvideCountUserFilesUseCase(cfg, zapLogger, fileMetadataRepository, collectionRepository)
|
||||
countUserFoldersUseCase := collection2.ProvideCountUserFoldersUseCase(cfg, zapLogger, collectionRepository)
|
||||
storageDailyUsageRepository := storagedailyusage.ProvideRepository(cfg, session, zapLogger)
|
||||
getStorageDailyUsageTrendUseCase := storagedailyusage2.ProvideGetStorageDailyUsageTrendUseCase(cfg, zapLogger, storageDailyUsageRepository)
|
||||
getCollectionUseCase := collection2.ProvideGetCollectionUseCase(cfg, zapLogger, collectionRepository)
|
||||
getDashboardService := dashboard.ProvideGetDashboardService(cfg, zapLogger, listRecentFilesService, userGetByIDUseCase, countUserFilesUseCase, countUserFoldersUseCase, getStorageDailyUsageTrendUseCase, getCollectionUseCase)
|
||||
jwtProvider := jwt.ProvideJWTProvider(cfg)
|
||||
middlewareMiddleware := middleware.ProvideMiddleware(zapLogger, jwtProvider, userGetByIDUseCase)
|
||||
getDashboardHTTPHandler := dashboard2.ProvideGetDashboardHTTPHandler(cfg, zapLogger, getDashboardService, middlewareMiddleware)
|
||||
userCreateUseCase := user2.ProvideUserCreateUseCase(cfg, zapLogger, repository)
|
||||
userUpdateUseCase := user2.ProvideUserUpdateUseCase(cfg, zapLogger, repository)
|
||||
getMeService := me.ProvideGetMeService(cfg, zapLogger, userGetByIDUseCase, userCreateUseCase, userUpdateUseCase)
|
||||
getMeHTTPHandler := me2.ProvideGetMeHTTPHandler(cfg, zapLogger, getMeService, middlewareMiddleware)
|
||||
userGetByEmailUseCase := user2.ProvideUserGetByEmailUseCase(cfg, zapLogger, repository)
|
||||
updateMeService := me.ProvideUpdateMeService(cfg, zapLogger, userGetByIDUseCase, userGetByEmailUseCase, userUpdateUseCase)
|
||||
putUpdateMeHTTPHandler := me2.ProvidePutUpdateMeHTTPHandler(cfg, zapLogger, updateMeService, middlewareMiddleware)
|
||||
userDeleteByIDUseCase := user2.ProvideUserDeleteByIDUseCase(cfg, zapLogger, repository)
|
||||
getFileMetadataByOwnerIDUseCase := filemetadata2.ProvideGetFileMetadataByOwnerIDUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
listFilesByOwnerIDService := file.ProvideListFilesByOwnerIDService(cfg, zapLogger, getFileMetadataByOwnerIDUseCase)
|
||||
getFileMetadataUseCase := filemetadata2.ProvideGetFileMetadataUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
updateFileMetadataUseCase := filemetadata2.ProvideUpdateFileMetadataUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
softDeleteFileMetadataUseCase := filemetadata2.ProvideSoftDeleteFileMetadataUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
hardDeleteFileMetadataUseCase := filemetadata2.ProvideHardDeleteFileMetadataUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
s3ObjectStorage := s3.ProvideS3ObjectStorageProvider(cfg, zapLogger)
|
||||
fileObjectStorageRepository := fileobjectstorage.ProvideRepository(cfg, zapLogger, s3ObjectStorage)
|
||||
deleteEncryptedDataUseCase := fileobjectstorage2.ProvideDeleteEncryptedDataUseCase(cfg, zapLogger, fileObjectStorageRepository)
|
||||
userStorageQuotaHelperUseCase := user2.ProvideUserStorageQuotaHelperUseCase(zapLogger, storageDailyUsageRepository)
|
||||
storageUsageEventRepository := storageusageevent.ProvideRepository(cfg, session, zapLogger)
|
||||
createStorageUsageEventUseCase := storageusageevent2.ProvideCreateStorageUsageEventUseCase(cfg, zapLogger, storageUsageEventRepository)
|
||||
updateStorageUsageUseCase := storagedailyusage2.ProvideUpdateStorageUsageUseCase(cfg, zapLogger, storageDailyUsageRepository)
|
||||
softDeleteFileService := file.ProvideSoftDeleteFileService(cfg, zapLogger, collectionRepository, getFileMetadataUseCase, updateFileMetadataUseCase, softDeleteFileMetadataUseCase, hardDeleteFileMetadataUseCase, deleteEncryptedDataUseCase, listFilesByOwnerIDService, userStorageQuotaHelperUseCase, createStorageUsageEventUseCase, updateStorageUsageUseCase)
|
||||
listCollectionsByUserUseCase := collection2.ProvideListCollectionsByUserUseCase(cfg, zapLogger, collectionRepository)
|
||||
updateCollectionUseCase := collection2.ProvideUpdateCollectionUseCase(cfg, zapLogger, collectionRepository)
|
||||
hardDeleteCollectionUseCase := collection2.ProvideHardDeleteCollectionUseCase(cfg, zapLogger, collectionRepository)
|
||||
deleteMultipleEncryptedDataUseCase := fileobjectstorage2.ProvideDeleteMultipleEncryptedDataUseCase(cfg, zapLogger, fileObjectStorageRepository)
|
||||
softDeleteCollectionService := collection3.ProvideSoftDeleteCollectionService(cfg, zapLogger, collectionRepository, fileMetadataRepository, getCollectionUseCase, updateCollectionUseCase, hardDeleteCollectionUseCase, deleteMultipleEncryptedDataUseCase, userStorageQuotaHelperUseCase, createStorageUsageEventUseCase, updateStorageUsageUseCase)
|
||||
removeUserFromAllCollectionsUseCase := collection2.ProvideRemoveUserFromAllCollectionsUseCase(zapLogger, collectionRepository)
|
||||
deleteByUserUseCase := storagedailyusage2.ProvideDeleteByUserUseCase(zapLogger, storageDailyUsageRepository)
|
||||
storageusageeventDeleteByUserUseCase := storageusageevent2.ProvideDeleteByUserUseCase(zapLogger, storageUsageEventRepository)
|
||||
anonymizeUserIPsImmediatelyUseCase := user2.ProvideAnonymizeUserIPsImmediatelyUseCase(cfg, zapLogger, repository, collectionRepository, fileMetadataRepository)
|
||||
clearUserCacheUseCase := user2.ProvideClearUserCacheUseCase(cfg, zapLogger)
|
||||
anonymizeUserReferencesUseCase := filemetadata2.ProvideAnonymizeUserReferencesUseCase(zapLogger, fileMetadataRepository)
|
||||
collectionAnonymizeUserReferencesUseCase := collection2.ProvideAnonymizeUserReferencesUseCase(zapLogger, collectionRepository)
|
||||
completeUserDeletionService := user3.ProvideCompleteUserDeletionService(cfg, zapLogger, userGetByIDUseCase, userDeleteByIDUseCase, listFilesByOwnerIDService, softDeleteFileService, listCollectionsByUserUseCase, softDeleteCollectionService, removeUserFromAllCollectionsUseCase, deleteByUserUseCase, storageusageeventDeleteByUserUseCase, anonymizeUserIPsImmediatelyUseCase, clearUserCacheUseCase, anonymizeUserReferencesUseCase, collectionAnonymizeUserReferencesUseCase)
|
||||
deleteMeService := me.ProvideDeleteMeService(cfg, zapLogger, completeUserDeletionService)
|
||||
deleteMeHTTPHandler := me2.ProvideDeleteMeHTTPHandler(cfg, zapLogger, deleteMeService, middlewareMiddleware)
|
||||
userPublicLookupService := user3.ProvideUserPublicLookupService(cfg, zapLogger, userGetByEmailUseCase)
|
||||
userPublicLookupHTTPHandler := user4.ProvideUserPublicLookupHTTPHandler(cfg, zapLogger, userPublicLookupService, middlewareMiddleware)
|
||||
blockedEmailRepository := blockedemail.NewBlockedEmailRepository(cfg, zapLogger, session)
|
||||
createBlockedEmailUseCase := blockedemail2.NewCreateBlockedEmailUseCase(zapLogger, blockedEmailRepository)
|
||||
createBlockedEmailService := blockedemail3.ProvideCreateBlockedEmailService(cfg, zapLogger, createBlockedEmailUseCase, userGetByEmailUseCase)
|
||||
createBlockedEmailHTTPHandler := blockedemail4.ProvideCreateBlockedEmailHTTPHandler(cfg, zapLogger, createBlockedEmailService, middlewareMiddleware)
|
||||
listBlockedEmailsUseCase := blockedemail2.NewListBlockedEmailsUseCase(zapLogger, blockedEmailRepository)
|
||||
listBlockedEmailsService := blockedemail3.ProvideListBlockedEmailsService(cfg, zapLogger, listBlockedEmailsUseCase)
|
||||
listBlockedEmailsHTTPHandler := blockedemail4.ProvideListBlockedEmailsHTTPHandler(cfg, zapLogger, listBlockedEmailsService, middlewareMiddleware)
|
||||
deleteBlockedEmailUseCase := blockedemail2.NewDeleteBlockedEmailUseCase(zapLogger, blockedEmailRepository)
|
||||
deleteBlockedEmailService := blockedemail3.ProvideDeleteBlockedEmailService(cfg, zapLogger, deleteBlockedEmailUseCase)
|
||||
deleteBlockedEmailHTTPHandler := blockedemail4.ProvideDeleteBlockedEmailHTTPHandler(cfg, zapLogger, deleteBlockedEmailService, middlewareMiddleware)
|
||||
inviteemailratelimitRepository := inviteemailratelimit.ProvideRepository(cfg, session, zapLogger)
|
||||
emailer := mailgun.ProvideMapleFileModuleEmailer(cfg)
|
||||
sendInviteEmailService := inviteemail.ProvideSendInviteEmailService(cfg, zapLogger, repository, inviteemailratelimitRepository, emailer)
|
||||
sendInviteEmailHTTPHandler := inviteemail2.ProvideSendInviteEmailHTTPHandler(cfg, zapLogger, sendInviteEmailService, middlewareMiddleware)
|
||||
tagRepository := tag.ProvideTagRepository(session)
|
||||
createCollectionService := collection3.ProvideCreateCollectionService(cfg, zapLogger, userGetByIDUseCase, collectionRepository, tagRepository)
|
||||
createCollectionHTTPHandler := collection4.ProvideCreateCollectionHTTPHandler(cfg, zapLogger, createCollectionService, middlewareMiddleware)
|
||||
universalClient, err := redis.ProvideRedisUniversalClient(cfg, zapLogger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
authFailureRateLimiter := ratelimit.ProvideAuthFailureRateLimiter(universalClient, cfg, zapLogger)
|
||||
getCollectionService := collection3.ProvideGetCollectionService(cfg, zapLogger, collectionRepository, userGetByIDUseCase, authFailureRateLimiter)
|
||||
getCollectionHTTPHandler := collection4.ProvideGetCollectionHTTPHandler(cfg, zapLogger, getCollectionService, middlewareMiddleware)
|
||||
listUserCollectionsService := collection3.ProvideListUserCollectionsService(cfg, zapLogger, collectionRepository, fileMetadataRepository)
|
||||
listUserCollectionsHTTPHandler := collection4.ProvideListUserCollectionsHTTPHandler(cfg, zapLogger, listUserCollectionsService, middlewareMiddleware)
|
||||
updateCollectionService := collection3.ProvideUpdateCollectionService(cfg, zapLogger, collectionRepository, authFailureRateLimiter)
|
||||
updateCollectionHTTPHandler := collection4.ProvideUpdateCollectionHTTPHandler(cfg, zapLogger, updateCollectionService, middlewareMiddleware)
|
||||
softDeleteCollectionHTTPHandler := collection4.ProvideSoftDeleteCollectionHTTPHandler(cfg, zapLogger, softDeleteCollectionService, middlewareMiddleware)
|
||||
archiveCollectionService := collection3.ProvideArchiveCollectionService(cfg, zapLogger, collectionRepository)
|
||||
archiveCollectionHTTPHandler := collection4.ProvideArchiveCollectionHTTPHandler(cfg, zapLogger, archiveCollectionService, middlewareMiddleware)
|
||||
restoreCollectionService := collection3.ProvideRestoreCollectionService(cfg, zapLogger, collectionRepository)
|
||||
restoreCollectionHTTPHandler := collection4.ProvideRestoreCollectionHTTPHandler(cfg, zapLogger, restoreCollectionService, middlewareMiddleware)
|
||||
findCollectionsByParentService := collection3.ProvideFindCollectionsByParentService(cfg, zapLogger, collectionRepository)
|
||||
findCollectionsByParentHTTPHandler := collection4.ProvideFindCollectionsByParentHTTPHandler(cfg, zapLogger, findCollectionsByParentService, middlewareMiddleware)
|
||||
findRootCollectionsService := collection3.ProvideFindRootCollectionsService(cfg, zapLogger, collectionRepository)
|
||||
findRootCollectionsHTTPHandler := collection4.ProvideFindRootCollectionsHTTPHandler(cfg, zapLogger, findRootCollectionsService, middlewareMiddleware)
|
||||
moveCollectionService := collection3.ProvideMoveCollectionService(cfg, zapLogger, collectionRepository)
|
||||
moveCollectionHTTPHandler := collection4.ProvideMoveCollectionHTTPHandler(cfg, zapLogger, moveCollectionService, middlewareMiddleware)
|
||||
checkBlockedEmailUseCase := blockedemail2.NewCheckBlockedEmailUseCase(zapLogger, blockedEmailRepository)
|
||||
shareCollectionService := collection3.ProvideShareCollectionService(cfg, zapLogger, collectionRepository, checkBlockedEmailUseCase, userGetByIDUseCase, emailer)
|
||||
shareCollectionHTTPHandler := collection4.ProvideShareCollectionHTTPHandler(cfg, zapLogger, shareCollectionService, middlewareMiddleware)
|
||||
removeMemberService := collection3.ProvideRemoveMemberService(cfg, zapLogger, collectionRepository)
|
||||
removeMemberHTTPHandler := collection4.ProvideRemoveMemberHTTPHandler(cfg, zapLogger, removeMemberService, middlewareMiddleware)
|
||||
listSharedCollectionsService := collection3.ProvideListSharedCollectionsService(cfg, zapLogger, collectionRepository, fileMetadataRepository)
|
||||
listSharedCollectionsHTTPHandler := collection4.ProvideListSharedCollectionsHTTPHandler(cfg, zapLogger, listSharedCollectionsService, middlewareMiddleware)
|
||||
getFilteredCollectionsService := collection3.ProvideGetFilteredCollectionsService(cfg, zapLogger, collectionRepository)
|
||||
getFilteredCollectionsHTTPHandler := collection4.ProvideGetFilteredCollectionsHTTPHandler(cfg, zapLogger, getFilteredCollectionsService, middlewareMiddleware)
|
||||
getCollectionSyncDataUseCase := collection2.ProvideGetCollectionSyncDataUseCase(cfg, zapLogger, collectionRepository)
|
||||
getCollectionSyncDataService := collection3.ProvideGetCollectionSyncDataService(cfg, zapLogger, getCollectionSyncDataUseCase)
|
||||
collectionSyncHTTPHandler := collection4.ProvideCollectionSyncHTTPHandler(cfg, zapLogger, getCollectionSyncDataService, middlewareMiddleware)
|
||||
softDeleteFileHTTPHandler := file2.ProvideSoftDeleteFileHTTPHandler(cfg, zapLogger, softDeleteFileService, middlewareMiddleware)
|
||||
getFileMetadataByIDsUseCase := filemetadata2.ProvideGetFileMetadataByIDsUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
deleteManyFileMetadataUseCase := filemetadata2.ProvideDeleteManyFileMetadataUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
deleteMultipleFilesService := file.ProvideDeleteMultipleFilesService(cfg, zapLogger, collectionRepository, getFileMetadataByIDsUseCase, deleteManyFileMetadataUseCase, deleteMultipleEncryptedDataUseCase, createStorageUsageEventUseCase, updateStorageUsageUseCase)
|
||||
deleteMultipleFilesHTTPHandler := file2.ProvideDeleteMultipleFilesHTTPHandler(cfg, zapLogger, deleteMultipleFilesService, middlewareMiddleware)
|
||||
getFileService := file.ProvideGetFileService(cfg, zapLogger, collectionRepository, getFileMetadataUseCase)
|
||||
getFileHTTPHandler := file2.ProvideGetFileHTTPHandler(cfg, zapLogger, getFileService, middlewareMiddleware)
|
||||
getFileMetadataByCollectionUseCase := filemetadata2.ProvideGetFileMetadataByCollectionUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
listFilesByCollectionService := file.ProvideListFilesByCollectionService(cfg, zapLogger, collectionRepository, getFileMetadataByCollectionUseCase)
|
||||
listFilesByCollectionHTTPHandler := file2.ProvideListFilesByCollectionHTTPHandler(cfg, zapLogger, listFilesByCollectionService, middlewareMiddleware)
|
||||
updateFileService := file.ProvideUpdateFileService(cfg, zapLogger, collectionRepository, getFileMetadataUseCase, updateFileMetadataUseCase)
|
||||
updateFileHTTPHandler := file2.ProvideUpdateFileHTTPHandler(cfg, zapLogger, updateFileService, middlewareMiddleware)
|
||||
checkCollectionAccessUseCase := collection2.ProvideCheckCollectionAccessUseCase(cfg, zapLogger, collectionRepository)
|
||||
checkFileExistsUseCase := filemetadata2.ProvideCheckFileExistsUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
createFileMetadataUseCase := filemetadata2.ProvideCreateFileMetadataUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
generatePresignedUploadURLUseCase := fileobjectstorage2.ProvideGeneratePresignedUploadURLUseCase(cfg, zapLogger, fileObjectStorageRepository)
|
||||
createPendingFileService := file.ProvideCreatePendingFileService(cfg, zapLogger, getCollectionUseCase, checkCollectionAccessUseCase, checkFileExistsUseCase, createFileMetadataUseCase, generatePresignedUploadURLUseCase, userStorageQuotaHelperUseCase, tagRepository)
|
||||
createPendingFileHTTPHandler := file2.ProvideCreatePendingFileHTTPHandler(cfg, zapLogger, createPendingFileService, middlewareMiddleware)
|
||||
verifyObjectExistsUseCase := fileobjectstorage2.ProvideVerifyObjectExistsUseCase(cfg, zapLogger, fileObjectStorageRepository)
|
||||
getObjectSizeUseCase := fileobjectstorage2.ProvideGetObjectSizeUseCase(cfg, zapLogger, fileObjectStorageRepository)
|
||||
completeFileUploadService := file.ProvideCompleteFileUploadService(cfg, zapLogger, collectionRepository, getFileMetadataUseCase, updateFileMetadataUseCase, verifyObjectExistsUseCase, getObjectSizeUseCase, deleteEncryptedDataUseCase, userStorageQuotaHelperUseCase, createStorageUsageEventUseCase, updateStorageUsageUseCase)
|
||||
completeFileUploadHTTPHandler := file2.ProvideCompleteFileUploadHTTPHandler(cfg, zapLogger, completeFileUploadService, middlewareMiddleware)
|
||||
getPresignedUploadURLService := file.ProvideGetPresignedUploadURLService(cfg, zapLogger, collectionRepository, getFileMetadataUseCase, generatePresignedUploadURLUseCase)
|
||||
getPresignedUploadURLHTTPHandler := file2.ProvideGetPresignedUploadURLHTTPHandler(cfg, zapLogger, getPresignedUploadURLService, middlewareMiddleware)
|
||||
generatePresignedDownloadURLUseCase := fileobjectstorage2.ProvideGeneratePresignedDownloadURLUseCase(cfg, zapLogger, fileObjectStorageRepository)
|
||||
getPresignedDownloadURLService := file.ProvideGetPresignedDownloadURLService(cfg, zapLogger, collectionRepository, getFileMetadataUseCase, generatePresignedDownloadURLUseCase)
|
||||
getPresignedDownloadURLHTTPHandler := file2.ProvideGetPresignedDownloadURLHTTPHandler(cfg, zapLogger, getPresignedDownloadURLService, middlewareMiddleware)
|
||||
reportDownloadCompletedHTTPHandler := file2.ProvideReportDownloadCompletedHTTPHandler(cfg, zapLogger, middlewareMiddleware)
|
||||
archiveFileService := file.ProvideArchiveFileService(cfg, zapLogger, collectionRepository, getFileMetadataUseCase, updateFileMetadataUseCase)
|
||||
archiveFileHTTPHandler := file2.ProvideArchiveFileHTTPHandler(cfg, zapLogger, archiveFileService, middlewareMiddleware)
|
||||
restoreFileService := file.ProvideRestoreFileService(cfg, zapLogger, collectionRepository, getFileMetadataUseCase, updateFileMetadataUseCase)
|
||||
restoreFileHTTPHandler := file2.ProvideRestoreFileHTTPHandler(cfg, zapLogger, restoreFileService, middlewareMiddleware)
|
||||
listRecentFilesHTTPHandler := file2.ProvideListRecentFilesHTTPHandler(cfg, zapLogger, listRecentFilesService, middlewareMiddleware)
|
||||
listFileMetadataSyncDataUseCase := filemetadata2.ProvideListFileMetadataSyncDataUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
listFileSyncDataService := file.ProvideListFileSyncDataService(cfg, zapLogger, listFileMetadataSyncDataUseCase, collectionRepository)
|
||||
fileSyncHTTPHandler := file2.ProvideFileSyncHTTPHandler(cfg, zapLogger, listFileSyncDataService, middlewareMiddleware)
|
||||
createTagUseCase := tag2.ProvideCreateTagUseCase(tagRepository)
|
||||
getTagByIDUseCase := tag2.ProvideGetTagByIDUseCase(tagRepository)
|
||||
listTagsByUserUseCase := tag2.ProvideListTagsByUserUseCase(tagRepository)
|
||||
updateTagUseCase := tag2.ProvideUpdateTagUseCase(tagRepository, collectionRepository, fileMetadataRepository, zapLogger)
|
||||
deleteTagUseCase := tag2.ProvideDeleteTagUseCase(tagRepository, collectionRepository, fileMetadataRepository, zapLogger)
|
||||
assignTagUseCase := tag2.ProvideAssignTagUseCase(tagRepository, collectionRepository, fileMetadataRepository)
|
||||
unassignTagUseCase := tag2.ProvideUnassignTagUseCase(tagRepository, collectionRepository, fileMetadataRepository)
|
||||
getTagsForEntityUseCase := tag2.ProvideGetTagsForEntityUseCase(tagRepository)
|
||||
tagService := tag3.ProvideTagService(createTagUseCase, getTagByIDUseCase, listTagsByUserUseCase, updateTagUseCase, deleteTagUseCase, assignTagUseCase, unassignTagUseCase, getTagsForEntityUseCase)
|
||||
createTagHTTPHandler := tag4.ProvideCreateTagHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
listTagsHTTPHandler := tag4.ProvideListTagsHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
getTagHTTPHandler := tag4.ProvideGetTagHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
updateTagHTTPHandler := tag4.ProvideUpdateTagHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
deleteTagHTTPHandler := tag4.ProvideDeleteTagHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
assignTagHTTPHandler := tag4.ProvideAssignTagHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
unassignTagHTTPHandler := tag4.ProvideUnassignTagHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
getTagsForCollectionHTTPHandler := tag4.ProvideGetTagsForCollectionHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
getTagsForFileHTTPHandler := tag4.ProvideGetTagsForFileHTTPHandler(cfg, zapLogger, tagService, middlewareMiddleware)
|
||||
listCollectionsByTagUseCase := tag2.ProvideListCollectionsByTagUseCase(tagRepository, collectionRepository)
|
||||
listCollectionsByTagHandler := tag4.ProvideListCollectionsByTagHandler(listCollectionsByTagUseCase, zapLogger)
|
||||
listFilesByTagUseCase := tag2.ProvideListFilesByTagUseCase(tagRepository, fileMetadataRepository)
|
||||
listFilesByTagHandler := tag4.ProvideListFilesByTagHandler(listFilesByTagUseCase, zapLogger)
|
||||
searchByTagsService := tag3.ProvideSearchByTagsService(zapLogger, listCollectionsByTagUseCase, listFilesByTagUseCase)
|
||||
searchByTagsHandler := tag4.ProvideSearchByTagsHandler(searchByTagsService, zapLogger, middlewareMiddleware)
|
||||
handlers := http.ProvideHandlers(cfg, zapLogger, mapleFileVersionHTTPHandler, getDashboardHTTPHandler, getMeHTTPHandler, putUpdateMeHTTPHandler, deleteMeHTTPHandler, userPublicLookupHTTPHandler, createBlockedEmailHTTPHandler, listBlockedEmailsHTTPHandler, deleteBlockedEmailHTTPHandler, sendInviteEmailHTTPHandler, createCollectionHTTPHandler, getCollectionHTTPHandler, listUserCollectionsHTTPHandler, updateCollectionHTTPHandler, softDeleteCollectionHTTPHandler, archiveCollectionHTTPHandler, restoreCollectionHTTPHandler, findCollectionsByParentHTTPHandler, findRootCollectionsHTTPHandler, moveCollectionHTTPHandler, shareCollectionHTTPHandler, removeMemberHTTPHandler, listSharedCollectionsHTTPHandler, getFilteredCollectionsHTTPHandler, collectionSyncHTTPHandler, softDeleteFileHTTPHandler, deleteMultipleFilesHTTPHandler, getFileHTTPHandler, listFilesByCollectionHTTPHandler, updateFileHTTPHandler, createPendingFileHTTPHandler, completeFileUploadHTTPHandler, getPresignedUploadURLHTTPHandler, getPresignedDownloadURLHTTPHandler, reportDownloadCompletedHTTPHandler, archiveFileHTTPHandler, restoreFileHTTPHandler, listRecentFilesHTTPHandler, fileSyncHTTPHandler, createTagHTTPHandler, listTagsHTTPHandler, getTagHTTPHandler, updateTagHTTPHandler, deleteTagHTTPHandler, assignTagHTTPHandler, unassignTagHTTPHandler, getTagsForCollectionHTTPHandler, getTagsForFileHTTPHandler, listCollectionsByTagHandler, listFilesByTagHandler, searchByTagsHandler)
|
||||
auditLogger := auditlog.ProvideAuditLogger(zapLogger)
|
||||
registerService := auth.ProvideRegisterService(cfg, zapLogger, auditLogger, userCreateUseCase, userGetByEmailUseCase, userDeleteByIDUseCase, emailer)
|
||||
userGetByVerificationCodeUseCase := user2.ProvideUserGetByVerificationCodeUseCase(cfg, zapLogger, repository)
|
||||
verifyEmailService := auth.ProvideVerifyEmailService(zapLogger, auditLogger, userGetByVerificationCodeUseCase, userUpdateUseCase)
|
||||
resendVerificationService := auth.ProvideResendVerificationService(cfg, zapLogger, userGetByEmailUseCase, userUpdateUseCase, emailer)
|
||||
cassandraCacher := cassandracache.ProvideCassandraCacher(session, zapLogger)
|
||||
requestOTTService := auth.ProvideRequestOTTService(cfg, zapLogger, userGetByEmailUseCase, cassandraCacher, emailer)
|
||||
verifyOTTService := auth.ProvideVerifyOTTService(zapLogger, userGetByEmailUseCase, cassandraCacher)
|
||||
completeLoginService := auth.ProvideCompleteLoginService(cfg, zapLogger, auditLogger, userGetByEmailUseCase, cassandraCacher, jwtProvider)
|
||||
refreshTokenService := auth.ProvideRefreshTokenService(cfg, zapLogger, auditLogger, cassandraCacher, jwtProvider, userGetByIDUseCase)
|
||||
recoveryInitiateService := auth.ProvideRecoveryInitiateService(zapLogger, auditLogger, userGetByEmailUseCase, cassandraCacher)
|
||||
recoveryVerifyService := auth.ProvideRecoveryVerifyService(zapLogger, cassandraCacher, userGetByEmailUseCase)
|
||||
recoveryCompleteService := auth.ProvideRecoveryCompleteService(zapLogger, auditLogger, userGetByEmailUseCase, userUpdateUseCase, cassandraCacher)
|
||||
loginRateLimiter := ratelimit.ProvideLoginRateLimiter(universalClient, cfg, zapLogger)
|
||||
rateLimitMiddleware := middleware.ProvideRateLimitMiddleware(zapLogger, loginRateLimiter)
|
||||
securityHeadersMiddleware := middleware.ProvideSecurityHeadersMiddleware(cfg)
|
||||
wireServer := http.ProvideServer(cfg, zapLogger, handlers, registerService, verifyEmailService, resendVerificationService, requestOTTService, verifyOTTService, completeLoginService, refreshTokenService, recoveryInitiateService, recoveryVerifyService, recoveryCompleteService, rateLimitMiddleware, securityHeadersMiddleware)
|
||||
migrator := cassandradb.NewMigrator(cfg, zapLogger)
|
||||
adapter := distributedmutex.ProvideDistributedMutexAdapter(cfg, zapLogger)
|
||||
leaderElection, err := leaderelection.ProvideLeaderElection(cfg, adapter, universalClient, zapLogger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
schedulerScheduler := scheduler.ProvideScheduler(cfg, zapLogger, leaderElection)
|
||||
anonymizeOldIPsUseCase := user2.ProvideAnonymizeOldIPsUseCase(cfg, zapLogger, repository)
|
||||
collectionAnonymizeOldIPsUseCase := collection2.ProvideAnonymizeOldIPsUseCase(cfg, zapLogger, collectionRepository)
|
||||
filemetadataAnonymizeOldIPsUseCase := filemetadata2.ProvideAnonymizeOldIPsUseCase(cfg, zapLogger, fileMetadataRepository)
|
||||
anonymizeOldIPsService := ipanonymization.ProvideAnonymizeOldIPsService(cfg, zapLogger, anonymizeOldIPsUseCase, collectionAnonymizeOldIPsUseCase, filemetadataAnonymizeOldIPsUseCase)
|
||||
ipAnonymizationTask := tasks.ProvideIPAnonymizationTask(anonymizeOldIPsService, cfg, zapLogger)
|
||||
application := ProvideApplication(cfg, wireServer, zapLogger, migrator, schedulerScheduler, ipAnonymizationTask, session)
|
||||
return application, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue