package _import 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 post.GUID == "" { post.GUID = models.NewNanoID() } if err := s.db.SavePost(ctx, post); err != nil { return models.Site{}, errors.Wrap(err, "failed to save post") } } return site, nil }