add project kontor-api-echo

This commit is contained in:
2026-01-03 02:53:50 +01:00
parent fe919eaa35
commit 0392ac49fb
33 changed files with 949 additions and 26 deletions
+47
View File
@@ -0,0 +1,47 @@
package handler
import (
"context"
"kontor-api-fiber/pkg/schema"
"kontor-api-fiber/pkg/utils"
"github.com/gofiber/fiber/v2"
"github.com/golang-jwt/jwt/v5"
"github.com/uptrace/bun"
)
func Login(c *fiber.Ctx) error {
user := c.FormValue("user")
pass := c.FormValue("pass")
var profile schema.Profile
var err error
var db *bun.DB
ctx := context.Background()
db, _ = schema.GetDatabase()
err = db.NewSelect().Model(&profile).Where("email = ?", user).Scan(ctx)
if err != nil {
return c.Status(400).JSON(fiber.Map{
"message": err.Error(),
})
}
if !utils.ComparePassword(profile.Password, pass) {
return c.SendStatus(fiber.StatusUnauthorized)
}
token, err := utils.GenerateToken(profile)
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
return c.JSON(fiber.Map{"token": token})
}
func Restricted(c *fiber.Ctx) error {
user := c.Locals("user").(*jwt.Token)
claims := user.Claims.(jwt.MapClaims)
name := claims["name"].(string)
return c.SendString("Welcome " + name)
}
+77
View File
@@ -0,0 +1,77 @@
package handler
import (
"context"
"kontor-api-fiber/pkg/schema"
"log"
"github.com/gofiber/fiber/v2"
"github.com/uptrace/bun"
)
func SetupComicRoutes(api fiber.Router) {
comics := api.Group("/comics")
comics.Get("/comics", GetAllComics)
comics.Get("/publishers", GetAllPublishers)
comics.Get("/comicworks", GetAllComicWorks)
}
func GetAllComics(c *fiber.Ctx) error {
var comics []schema.Comic
var err error
var db *bun.DB
ctx := context.Background()
db, err = schema.GetDatabase()
if err != nil {
log.Fatal(err)
}
err = db.NewSelect().Model(&comics).Relation("Publisher").Scan(ctx)
if err != nil {
log.Fatal(err)
return fiber.NewError(fiber.StatusInternalServerError)
}
return c.JSON(comics)
}
func GetAllPublishers(c *fiber.Ctx) error {
var publishers []schema.Publisher
var err error
var db *bun.DB
ctx := context.Background()
db, err = schema.GetDatabase()
if err != nil {
log.Fatal(err)
}
err = db.NewSelect().Model(&publishers).Relation("ParentPublisher").Scan(ctx)
if err != nil {
log.Fatal(err)
return fiber.NewError(fiber.StatusInternalServerError)
}
return c.JSON(publishers)
}
func GetAllComicWorks(c *fiber.Ctx) error {
var comic_works []schema.ComicWork
var err error
var db *bun.DB
ctx := context.Background()
db, err = schema.GetDatabase()
if err != nil {
log.Fatal(err)
}
err = db.NewSelect().Model(&comic_works).Relation("Comic").Relation("Artist").Relation("WorkType").Scan(ctx)
if err != nil {
log.Fatal(err)
return fiber.NewError(fiber.StatusInternalServerError)
}
return c.JSON(comic_works)
}
+9
View File
@@ -0,0 +1,9 @@
package handler
import "github.com/gofiber/fiber/v2"
func GetHealth(c *fiber.Ctx) error {
return c.Status(200).JSON(&fiber.Map{
"status": "ok",
})
}
+64
View File
@@ -0,0 +1,64 @@
package handler
import (
"context"
"encoding/json"
"fmt"
"kontor-api-fiber/pkg/schema"
"log"
"time"
"github.com/gofiber/fiber/v2"
"github.com/google/uuid"
"github.com/uptrace/bun"
)
func SetupMediaRoutes(api fiber.Router) {
media := api.Group("/media")
media.Get("/files", GetAllFiles)
media.Post("/files", AddFile)
}
func GetAllFiles(c *fiber.Ctx) error {
var files []schema.MediaFile
var err error
var db *bun.DB
ctx := context.Background()
db, err = schema.GetDatabase()
if err != nil {
log.Fatal(err)
}
err = db.NewSelect().Model(&files).Relation("MediaActorFiles").Scan(ctx)
if err != nil {
log.Fatal(err)
return fiber.NewError(fiber.StatusInternalServerError)
}
return c.JSON(files)
}
func AddFile(c *fiber.Ctx) error {
var err error
var db *bun.DB
ctx := context.Background()
var payload map[string]interface{}
if err = json.Unmarshal(c.Body(), &payload); err != nil {
return err
}
link := payload["url"]
log.Printf("URL %s has been sent", link)
db, err = schema.GetDatabase()
if err != nil {
log.Fatal(err)
}
id := uuid.NewString()
timestamp := time.Now()
mediafile := &schema.MediaFile{ID: id, CreatedAt: timestamp, UpdatedAt: timestamp, WebLink: fmt.Sprintf("%s", link), Version: 1, ShouldDownload: true, Review: true}
_, err = db.NewInsert().Model(mediafile).Exec(ctx)
if err != nil {
return err
}
return c.SendStatus(201)
}