aboutsummaryrefslogtreecommitdiff
path: root/internal/image/service.go
diff options
context:
space:
mode:
authorMax Resnick <max@ofmax.li>2020-04-19 23:13:51 -0700
committerMax Resnick <max@ofmax.li>2020-05-21 22:24:27 -0700
commit4e77ad5762539d8f9edf40d2668a998c38e834d3 (patch)
tree91da3dfce1fa77ee04aa9045908f6142712d60f5 /internal/image/service.go
parentff1a5122005017d729fea29ec86851609d2991b8 (diff)
downloadiserv-4e77ad5762539d8f9edf40d2668a998c38e834d3.tar.gz
post w/ some meta working
Diffstat (limited to '')
-rw-r--r--internal/image/service.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/internal/image/service.go b/internal/image/service.go
new file mode 100644
index 0000000..dabbfe7
--- /dev/null
+++ b/internal/image/service.go
@@ -0,0 +1,55 @@
+package image
+
+import (
+ "io/ioutil"
+ "log"
+ "path"
+ "time"
+
+ "github.com/matoous/go-nanoid"
+)
+
+// Servicer image management
+type Servicer interface {
+ NewID() (string, error)
+ AddFile(filename string, fileBytes []byte) error
+}
+
+// NewService new image service
+func NewService(repo Repo, storagePath string) *Service {
+ return &Service{repo,
+ storagePath,
+ }
+}
+
+// Service a container for working with images
+type Service struct {
+ db Repo
+ storagePath string
+}
+
+// NewID create an uniqueish ID
+func (is *Service) NewID() (string, error) {
+ return gonanoid.Nanoid()
+}
+
+// AddFile writes to disk, writes meta to db
+func (is *Service) AddFile(fileName string, fileBytes []byte) error {
+ filePath := path.Join(is.storagePath, fileName)
+ if err := ioutil.WriteFile(filePath, fileBytes, 0750); err != nil {
+ log.Fatal(err)
+ return err
+ }
+ t := time.Now().UTC()
+ postMeta := &PostMeta{
+ FilePath: fileName,
+ CreatedAt: t.Format(time.RFC3339),
+ UserID: "1",
+ }
+ is.db.AddNewFile(fileName, postMeta, 946080000)
+ if err := is.db.AddNewFile(fileName, postMeta, 946080000); err != nil {
+ log.Fatal(err)
+ return err
+ }
+ return nil
+}