aboutsummaryrefslogtreecommitdiff
path: root/internal/image/service.go
diff options
context:
space:
mode:
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
+}