diff options
| author | Max Resnick <max@ofmax.li> | 2020-05-23 07:56:12 -0700 |
|---|---|---|
| committer | Max Resnick <max@ofmax.li> | 2020-06-22 22:37:17 -0700 |
| commit | 85e7eaa3a1c9024c02cc9a63744cdfb144cc3737 (patch) | |
| tree | a44855abcf5424126c54ee636463dc866e558561 /internal/image/service.go | |
| parent | 4e77ad5762539d8f9edf40d2668a998c38e834d3 (diff) | |
| download | iserv-85e7eaa3a1c9024c02cc9a63744cdfb144cc3737.tar.gz | |
adds tmpl, css, and fileserver
Diffstat (limited to '')
| -rw-r--r-- | internal/image/service.go | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/internal/image/service.go b/internal/image/service.go index dabbfe7..f953bfa 100644 --- a/internal/image/service.go +++ b/internal/image/service.go @@ -1,24 +1,32 @@ package image import ( + "fmt" "io/ioutil" "log" + "net/http" "path" "time" "github.com/matoous/go-nanoid" + "github.com/pkg/errors" + + "go.ofmax.li/tmpl" ) // Servicer image management type Servicer interface { NewID() (string, error) - AddFile(filename string, fileBytes []byte) error + AddFile(extension, fileType string, fileBytes []byte) (string, string, error) + GetFile(fileUrl string) (*PostMeta, error) + Render(w http.ResponseWriter, templateName string, data interface{}) error } // NewService new image service -func NewService(repo Repo, storagePath string) *Service { +func NewService(repo Repo, storagePath string, renderer *tmpl.HTML) *Service { return &Service{repo, storagePath, + renderer, } } @@ -26,6 +34,12 @@ func NewService(repo Repo, storagePath string) *Service { type Service struct { db Repo storagePath string + tmpl *tmpl.HTML +} + +// Render renders templates +func (is *Service) Render(w http.ResponseWriter, templateName string, data interface{}) error { + return is.tmpl.Render(w, templateName, data) } // NewID create an uniqueish ID @@ -34,22 +48,38 @@ func (is *Service) NewID() (string, error) { } // AddFile writes to disk, writes meta to db -func (is *Service) AddFile(fileName string, fileBytes []byte) error { +func (is *Service) AddFile(extension, fileType string, fileBytes []byte) (string, string, error) { + fileID, err := is.NewID() + if err != nil { + return "", "", errors.Wrap(err, "generated id for fileID failed") + } + fileName := fmt.Sprintf("%s.%s", fileID, extension) filePath := path.Join(is.storagePath, fileName) if err := ioutil.WriteFile(filePath, fileBytes, 0750); err != nil { log.Fatal(err) - return err + return "", "", errors.Wrap(err, "couldn't write image file") + } + postID, err := is.NewID() + if err != nil { + return "", "", errors.Wrap(err, "generating postid for uuid") } t := time.Now().UTC() postMeta := &PostMeta{ FilePath: fileName, CreatedAt: t.Format(time.RFC3339), UserID: "1", + MimeType: fileType, } - is.db.AddNewFile(fileName, postMeta, 946080000) - if err := is.db.AddNewFile(fileName, postMeta, 946080000); err != nil { + is.db.AddNewFile(postID, postMeta, 946080000) + if err := is.db.AddNewFile(postID, postMeta, 946080000); err != nil { log.Fatal(err) - return err + return "", "", errors.Wrap(err, "couldn't write to redis") } - return nil + return fileName, postID, nil +} + +// GetFile fetch file from db interface +func (is *Service) GetFile(fileUrl string) (*PostMeta, error) { + result, err := is.db.GetFile(fileUrl) + return result, err } |