konulu-konum-backend/server.go

108 lines
2.3 KiB
Go
Raw Normal View History

2024-07-03 18:33:46 +00:00
package main
import (
"fmt"
2024-07-03 19:28:20 +00:00
"io"
2024-07-04 17:12:39 +00:00
"log"
DB "log101/konulu-konum-backend/db"
"log101/konulu-konum-backend/models"
2024-07-03 19:28:20 +00:00
"os"
"strings"
2024-07-03 18:33:46 +00:00
2024-07-04 16:52:51 +00:00
"github.com/dchest/uniuri"
2024-07-03 18:33:46 +00:00
"github.com/gofiber/fiber/v2"
2024-07-03 19:28:20 +00:00
"github.com/gofiber/fiber/v2/middleware/compress"
2024-07-03 18:33:46 +00:00
"github.com/gofiber/fiber/v2/middleware/logger"
2024-07-03 19:28:20 +00:00
"github.com/h2non/bimg"
2024-07-04 17:12:39 +00:00
"github.com/joho/godotenv"
2024-07-03 18:33:46 +00:00
)
func main() {
2024-07-04 17:12:39 +00:00
// Load environment variables
err := godotenv.Load()
if err != nil {
log.Println("Error loading .env file")
}
// initialize db
DB.InitDB()
db := DB.GetDB()
2024-07-03 18:33:46 +00:00
app := fiber.New()
app.Use(logger.New())
2024-07-03 19:28:20 +00:00
app.Use(compress.New(compress.Config{
Level: compress.LevelBestCompression,
}))
2024-07-03 18:33:46 +00:00
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Sample")
})
2024-07-03 19:28:20 +00:00
app.Static("/images", "./public")
2024-07-03 18:33:46 +00:00
app.Post("/upload", func(c *fiber.Ctx) error {
if form, err := c.MultipartForm(); err == nil {
2024-07-04 16:52:51 +00:00
// Get string input
2024-07-03 18:33:46 +00:00
if token := form.Value["token"]; len(token) > 0 {
fmt.Println(token[0])
}
2024-07-04 16:52:51 +00:00
// Get image
files := form.File["document"]
if len(files) != 1 {
fmt.Println("bad request")
}
2024-07-03 18:33:46 +00:00
2024-07-04 16:52:51 +00:00
file := form.File["document"][0]
fmt.Println(file.Filename, file.Size, file.Header["Content-Type"][0])
2024-07-03 19:28:20 +00:00
2024-07-04 16:52:51 +00:00
newFile, err := file.Open()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
defer newFile.Close()
2024-07-03 19:28:20 +00:00
2024-07-04 16:52:51 +00:00
data, err := io.ReadAll(newFile)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
2024-07-03 19:28:20 +00:00
2024-07-04 16:52:51 +00:00
// Compress image
newImage, err := bimg.NewImage(data).Convert(bimg.WEBP)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
2024-07-03 19:28:20 +00:00
2024-07-04 16:52:51 +00:00
imageName := strings.Split(file.Filename, ".")[0]
2024-07-03 19:28:20 +00:00
2024-07-04 16:52:51 +00:00
// Save image
bimg.Write(fmt.Sprintf("./public/%s.webp", imageName), newImage)
2024-07-03 19:28:20 +00:00
2024-07-04 16:52:51 +00:00
// Generate public uri for the image
chars := uniuri.StdChars[26:52]
randomUri := uniuri.NewLenChars(10, chars)
imageUri := fmt.Sprintf("%s-%s-%s", randomUri[0:3], randomUri[3:7], randomUri[7:])
2024-07-03 19:28:20 +00:00
2024-07-04 16:52:51 +00:00
fmt.Println(imageUri)
2024-07-03 18:33:46 +00:00
2024-07-04 17:34:48 +00:00
db.Create(&models.KonuluKonum{URI: "sample", Image: newImage, Loc: "sample", AuthorName: "sample", Description: "sample", UnlockedCounter: 0})
2024-07-04 17:12:39 +00:00
var konuluKonum models.KonuluKonum
db.First(&konuluKonum)
2024-07-04 17:34:48 +00:00
// Save image
bimg.Write("./public/storedImage.webp", konuluKonum.Image)
2024-07-04 17:12:39 +00:00
db.Delete(&konuluKonum)
2024-07-04 16:52:51 +00:00
return c.SendStatus(fiber.StatusOK)
2024-07-03 18:33:46 +00:00
}
2024-07-04 16:52:51 +00:00
return c.SendStatus(fiber.StatusBadRequest)
2024-07-03 18:33:46 +00:00
})
app.Listen(":3000")
2024-07-03 19:28:20 +00:00
2024-07-03 18:33:46 +00:00
}