Post-Migrator/services/migration/migrate-categories.go

123 lines
4.0 KiB
Go
Raw Normal View History

package migration
2024-05-16 16:26:59 +00:00
import (
"database/sql"
"federated.computer/wp-sync-slowtwitch/services/slowtwitch"
2024-05-16 16:26:59 +00:00
"federated.computer/wp-sync-slowtwitch/services/wordpress"
"fmt"
"strings"
)
2024-05-16 16:26:59 +00:00
type MigrateCategories struct {
SlowtwitchDatabase *sql.DB
ResultsDatabase *sql.DB
WordpressBaseUrl string
WordpressUser string
WordpressPassword string
}
2024-05-16 16:26:59 +00:00
func (migration *MigrateCategories) Execute() []CategoryResult {
categories := slowtwitch.GetCategories(migration.SlowtwitchDatabase)
var output []CategoryResult
for _, category := range categories {
hasBeenMigrated := HasBeenMigrated(category.Id, migration.ResultsDatabase)
2024-05-16 16:26:59 +00:00
if hasBeenMigrated {
continue
}
errorMessage := ""
wordpressParentId, err := getWordpressParentCategoryId(category, migration, errorMessage)
if err != nil {
errorMessage = errorMessage + err.Error()
err = nil
}
slowtwitchPath, slowtwitchUrl, httpStatus := getSlowtwitchUrlsAndVerify(category)
2024-05-17 18:49:55 +00:00
wordpressCategory, err := createInWordpress(category, wordpressParentId, migration)
if err != nil {
errorMessage = errorMessage + err.Error()
} else {
err, errorMessage = createRedirect(wordpressCategory, migration, slowtwitchPath, err, errorMessage)
}
overallResult := submitResults(wordpressCategory, category, slowtwitchUrl, httpStatus, errorMessage, migration)
fmt.Println("Successfully Created Category:", wordpressCategory.Name)
output = append(output, overallResult)
}
return output
}
2024-05-16 16:26:59 +00:00
2024-05-17 18:49:55 +00:00
func submitResults(wordpressCategory wordpress.CategoryData, category slowtwitch.SlowtwitchCategory, slowtwitchUrl string, httpStatus int, errorMessage string, migration *MigrateCategories) CategoryResult {
overallResult := CategoryResult{
WordpressId: wordpressCategory.Id,
SlowtwitchId: category.Id,
OldUrl: slowtwitchUrl,
OldUrlStatus: httpStatus,
NewUrl: wordpressCategory.Link,
2024-05-17 18:49:55 +00:00
IsSuccess: len(errorMessage) == 0,
ErrorMessage: errorMessage,
}
2024-05-16 16:26:59 +00:00
2024-05-17 18:49:55 +00:00
err := CreateCategoryResult(overallResult, migration.ResultsDatabase)
if err != nil {
fmt.Println(err)
err = nil
}
return overallResult
}
2024-05-16 16:26:59 +00:00
func createRedirect(wordpressCategory wordpress.CategoryData, migration *MigrateCategories, slowtwitchPath string, err error, errorMessage string) (error, string) {
redirectUrl := "/" + strings.ReplaceAll(wordpressCategory.Link, migration.WordpressBaseUrl, "")
createRedirect := wordpress.CreateRedirect{
Url: slowtwitchPath,
Title: "Category: " + wordpressCategory.Name,
MatchType: "page",
ActionType: "url",
ActionCode: 301,
GroupId: 1,
ActionData: wordpress.ActionData{
Url: redirectUrl,
},
}
_, err = createRedirect.Execute(migration.WordpressBaseUrl, migration.WordpressUser, migration.WordpressPassword)
if err != nil {
errorMessage = errorMessage + err.Error()
err = nil
}
return err, errorMessage
}
2024-05-17 18:49:55 +00:00
func createInWordpress(category slowtwitch.SlowtwitchCategory, wordpressParentId int, migration *MigrateCategories) (wordpress.CategoryData, error) {
createWordpressCategory := wordpress.CreateCategory{
Name: strings.Trim(category.Name, " "),
Description: "",
ParentId: wordpressParentId,
}
2024-05-17 18:49:55 +00:00
wordpressCategory, err := createWordpressCategory.Execute(migration.WordpressBaseUrl, migration.WordpressUser, migration.WordpressPassword)
if err != nil {
return wordpress.CategoryData{}, err
} else {
return wordpressCategory, nil
}
}
func getSlowtwitchUrlsAndVerify(category slowtwitch.SlowtwitchCategory) (string, string, int) {
slowtwitchPath := slowtwitch.ConvertUrlToCategoryFormat(category.FullName)
slowtwitchUrl := slowtwitch.GetURL(slowtwitchPath)
httpStatus := slowtwitch.GetPageStatus(slowtwitchUrl)
return slowtwitchPath, slowtwitchUrl, httpStatus
2024-05-16 16:26:59 +00:00
}
2024-05-16 16:26:59 +00:00
func getWordpressParentCategoryId(category slowtwitch.SlowtwitchCategory, migration *MigrateCategories, errorMessage string) (int, error) {
if category.FatherId != 0 {
parentCategory, err := GetSlowtwitchCategoryResult(category.FatherId, migration.ResultsDatabase)
if err != nil {
return 0, err
} else {
return parentCategory.WordpressId, nil
}
}
2024-05-16 16:26:59 +00:00
return 0, nil
}