2022-10-31 10:49:21 +00:00
|
|
|
package repository
|
|
|
|
|
|
|
|
import (
|
2022-11-01 09:57:34 +00:00
|
|
|
"errors"
|
|
|
|
"strings"
|
|
|
|
|
2023-04-21 06:49:17 +00:00
|
|
|
. "github.com/reiver/greatape/components/contracts/model"
|
2022-10-31 10:49:21 +00:00
|
|
|
. "github.com/xeronith/diamante/contracts/database"
|
|
|
|
. "github.com/xeronith/diamante/contracts/logging"
|
|
|
|
. "github.com/xeronith/diamante/contracts/settings"
|
2023-04-28 20:45:40 +00:00
|
|
|
. "github.com/xeronith/diamante/database/drivers/postgres"
|
2022-10-31 10:49:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
2022-11-04 13:24:07 +00:00
|
|
|
Pipe IPipeRepository
|
|
|
|
Documents IDocumentsRepository
|
|
|
|
SystemSchedules ISystemSchedulesRepository
|
|
|
|
Identities IIdentitiesRepository
|
|
|
|
AccessControls IAccessControlsRepository
|
|
|
|
RemoteActivities IRemoteActivitiesRepository
|
|
|
|
CategoryTypes ICategoryTypesRepository
|
|
|
|
Categories ICategoriesRepository
|
|
|
|
Users IUsersRepository
|
|
|
|
ActivityPubIncomingActivities IActivityPubIncomingActivitiesRepository
|
|
|
|
ActivityPubOutgoingActivities IActivityPubOutgoingActivitiesRepository
|
2022-11-07 16:37:20 +00:00
|
|
|
ActivityPubFollowers IActivityPubFollowersRepository
|
2022-10-31 10:49:21 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
var database ISqlDatabase
|
|
|
|
|
|
|
|
func Initialize(configuration IConfiguration, logger ILogger) error {
|
2023-04-28 20:45:40 +00:00
|
|
|
databaseName := configuration.GetPostgreSQLConfiguration().GetDatabase()
|
2022-11-01 09:57:34 +00:00
|
|
|
if strings.TrimSpace(databaseName) == "" {
|
|
|
|
return errors.New("database_required")
|
2022-10-31 10:49:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
database = NewDatabase(configuration, logger, databaseName)
|
|
|
|
if err := database.Initialize(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
Pipe = newPipeRepository(logger)
|
|
|
|
Documents = newDocumentsRepository(logger)
|
|
|
|
SystemSchedules = newSystemSchedulesRepository(logger)
|
|
|
|
Identities = newIdentitiesRepository(logger)
|
|
|
|
AccessControls = newAccessControlsRepository(logger)
|
|
|
|
RemoteActivities = newRemoteActivitiesRepository(logger)
|
|
|
|
CategoryTypes = newCategoryTypesRepository(logger)
|
|
|
|
Categories = newCategoriesRepository(logger)
|
|
|
|
Users = newUsersRepository(logger)
|
2022-11-04 13:24:07 +00:00
|
|
|
ActivityPubIncomingActivities = newActivityPubIncomingActivitiesRepository(logger)
|
|
|
|
ActivityPubOutgoingActivities = newActivityPubOutgoingActivitiesRepository(logger)
|
2022-11-07 16:37:20 +00:00
|
|
|
ActivityPubFollowers = newActivityPubFollowersRepository(logger)
|
2022-10-31 10:49:21 +00:00
|
|
|
|
|
|
|
repositories := []IRepository{
|
|
|
|
Pipe,
|
|
|
|
Documents,
|
|
|
|
SystemSchedules,
|
|
|
|
Identities,
|
|
|
|
AccessControls,
|
|
|
|
RemoteActivities,
|
|
|
|
CategoryTypes,
|
|
|
|
Categories,
|
|
|
|
Users,
|
2022-11-04 13:24:07 +00:00
|
|
|
ActivityPubIncomingActivities,
|
|
|
|
ActivityPubOutgoingActivities,
|
2022-11-07 16:37:20 +00:00
|
|
|
ActivityPubFollowers,
|
2022-10-31 10:49:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
for _, repository := range repositories {
|
|
|
|
repository.SetSqlDatabase(database)
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, repository := range repositories {
|
|
|
|
if err := repository.Migrate(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func WithTransaction(handler RepositoryTransactionHandler) error {
|
|
|
|
if database == nil {
|
|
|
|
panic("repository_not_initialized")
|
|
|
|
}
|
|
|
|
|
|
|
|
return database.WithTransaction(func(transaction ISqlTransaction) error {
|
|
|
|
return handler(transaction)
|
|
|
|
})
|
|
|
|
}
|