52 lines
1,016 B
Go
52 lines
1,016 B
Go
package importer
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"emperror.dev/errors"
|
|
"lmika.dev/lmika/weiro/models"
|
|
"lmika.dev/lmika/weiro/providers/db"
|
|
"lmika.dev/lmika/weiro/providers/sitereader"
|
|
)
|
|
|
|
type Service struct {
|
|
db *db.Provider
|
|
}
|
|
|
|
func New(db *db.Provider) *Service {
|
|
return &Service{
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func (s *Service) Import(ctx context.Context, sitePath string) (models.Site, error) {
|
|
user, ok := models.GetUser(ctx)
|
|
if !ok {
|
|
return models.Site{}, models.UserRequiredError
|
|
}
|
|
|
|
sr := sitereader.New(os.DirFS(sitePath))
|
|
|
|
readSite, err := sr.ReadSite()
|
|
if err != nil {
|
|
return models.Site{}, errors.Wrap(err, "failed to read site")
|
|
}
|
|
|
|
site := readSite.Site
|
|
site.OwnerID = user.ID
|
|
|
|
if err := s.db.SaveSite(ctx, &site); err != nil {
|
|
return models.Site{}, errors.Wrap(err, "failed to save site")
|
|
}
|
|
|
|
for _, post := range readSite.Posts {
|
|
post.SiteID = site.ID
|
|
if err := s.db.SavePost(ctx, post); err != nil {
|
|
return models.Site{}, errors.Wrap(err, "failed to save post")
|
|
}
|
|
}
|
|
|
|
return site, nil
|
|
}
|