first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:45:19 +03:00
commit 60db80892b
101 changed files with 16757 additions and 0 deletions

View File

@@ -0,0 +1,218 @@
package controllers
import (
"fmt"
database "goFiber/database/config"
"goFiber/database/models"
"net/http"
"os"
"path/filepath"
"strconv"
"time"
"github.com/gofiber/fiber/v3"
"gorm.io/gorm"
)
// GetSetting godoc
// @Summary Get site settings
// @Tags Setting
// @Produce json
// @Success 200 {object} map[string]interface{}
// @Failure 404 {object} map[string]string
// @Router /api/v1/setting [get]
func GetSetting(c fiber.Ctx) error {
var setting models.Setting
// Arkaplanda tek bir aktif ayar varsayıyoruz veya en son ekleneni/güncelleneni
if err := database.DB.Where("is_active = ?", true).Last(&setting).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return c.Status(http.StatusNotFound).JSON(fiber.Map{"error": "no active setting found"})
}
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "database error"})
}
return c.JSON(setting)
}
// CreateSetting godoc
// @Summary Create new site setting (admin only)
// @Tags Setting
// @Accept mpfd
// @Produce json
// @Security BearerAuth
// @Param title formData string true "Title"
// @Param meta_title formData string true "Meta Title"
// @Param meta_description formData string true "Meta Description"
// @Param phone formData string true "Phone"
// @Param url formData string true "URL"
// @Param email formData string true "Email"
// @Param facebook formData string false "Facebook"
// @Param x formData string false "X"
// @Param instagram formData string false "Instagram"
// @Param whatsapp formData string false "Whatsapp"
// @Param pinterest formData string false "Pinterest"
// @Param linkedin formData string false "Linkedin"
// @Param slogan formData string false "Slogan"
// @Param address formData string false "Address"
// @Param copyright formData string false "Copyright"
// @Param map_embed formData string false "Map Embed"
// @Param is_active formData boolean false "Is Active"
// @Param w_logo formData file false "White Logo"
// @Param b_logo formData file false "Black Logo"
// @Success 201 {object} map[string]interface{}
// @Failure 400 {object} map[string]string
// @Router /api/v1/setting [post]
func CreateSetting(c fiber.Ctx) error {
var setting models.Setting
if err := c.Bind().Body(&setting); err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid request body"})
}
// White Logo upload
if file, err := c.FormFile("w_logo"); err == nil {
if _, err := os.Stat("./uploads/settings"); os.IsNotExist(err) {
os.MkdirAll("./uploads/settings", 0755)
}
filename := fmt.Sprintf("w_%d_%s", time.Now().Unix(), file.Filename)
filePath := filepath.Join("./uploads/settings", filename)
if err := c.SaveFile(file, filePath); err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "failed to save w_logo"})
}
setting.WLogo = "/uploads/settings/" + filename
}
// Black Logo upload
if file, err := c.FormFile("b_logo"); err == nil {
if _, err := os.Stat("./uploads/settings"); os.IsNotExist(err) {
os.MkdirAll("./uploads/settings", 0755)
}
filename := fmt.Sprintf("b_%d_%s", time.Now().Unix(), file.Filename)
filePath := filepath.Join("./uploads/settings", filename)
if err := c.SaveFile(file, filePath); err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "failed to save b_logo"})
}
setting.BLogo = "/uploads/settings/" + filename
}
// Eğer sadece bir aktif ayar olacaksa, diğerlerini pasife çekebiliriz
if setting.IsActive {
database.DB.Model(&models.Setting{}).Where("is_active = ?", true).Update("is_active", false)
}
if err := database.DB.Create(&setting).Error; err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "setting could not be created"})
}
return c.Status(http.StatusCreated).JSON(setting)
}
// UpdateSetting godoc
// @Summary Update site setting (admin only)
// @Tags Setting
// @Accept mpfd
// @Produce json
// @Security BearerAuth
// @Param id path int true "Setting ID"
// @Param title formData string false "Title"
// @Param meta_title formData string false "Meta Title"
// @Param meta_description formData string false "Meta Description"
// @Param phone formData string false "Phone"
// @Param url formData string false "URL"
// @Param email formData string false "Email"
// @Param facebook formData string false "Facebook"
// @Param x formData string false "X"
// @Param instagram formData string false "Instagram"
// @Param whatsapp formData string false "Whatsapp"
// @Param pinterest formData string false "Pinterest"
// @Param linkedin formData string false "Linkedin"
// @Param slogan formData string false "Slogan"
// @Param address formData string false "Address"
// @Param copyright formData string false "Copyright"
// @Param map_embed formData string false "Map Embed"
// @Param is_active formData boolean false "Is Active"
// @Param w_logo formData file false "White Logo"
// @Param b_logo formData file false "Black Logo"
// @Success 200 {object} map[string]interface{}
// @Failure 400 {object} map[string]string
// @Failure 404 {object} map[string]string
// @Router /api/v1/setting/{id} [put]
func UpdateSetting(c fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid id"})
}
var setting models.Setting
if err := database.DB.First(&setting, id).Error; err != nil {
return c.Status(http.StatusNotFound).JSON(fiber.Map{"error": "setting not found"})
}
var updateData models.Setting
if err := c.Bind().Body(&updateData); err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid request body"})
}
// White Logo upload
if file, err := c.FormFile("w_logo"); err == nil {
if _, err := os.Stat("./uploads/settings"); os.IsNotExist(err) {
os.MkdirAll("./uploads/settings", 0755)
}
filename := fmt.Sprintf("w_%d_%s", time.Now().Unix(), file.Filename)
filePath := filepath.Join("./uploads/settings", filename)
if err := c.SaveFile(file, filePath); err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "failed to save w_logo"})
}
updateData.WLogo = "/uploads/settings/" + filename
}
// Black Logo upload
if file, err := c.FormFile("b_logo"); err == nil {
if _, err := os.Stat("./uploads/settings"); os.IsNotExist(err) {
os.MkdirAll("./uploads/settings", 0755)
}
filename := fmt.Sprintf("b_%d_%s", time.Now().Unix(), file.Filename)
filePath := filepath.Join("./uploads/settings", filename)
if err := c.SaveFile(file, filePath); err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "failed to save b_logo"})
}
updateData.BLogo = "/uploads/settings/" + filename
}
// Eğer bu ayar aktif yapılıyorsa diğerlerini pasife çek
if updateData.IsActive {
database.DB.Model(&models.Setting{}).Where("id != ?", id).Where("is_active = ?", true).Update("is_active", false)
}
if err := database.DB.Model(&setting).Updates(updateData).Error; err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "setting could not be updated"})
}
return c.JSON(setting)
}
// DeleteSetting godoc
// @Summary Delete site setting (admin only)
// @Tags Setting
// @Produce json
// @Security BearerAuth
// @Param id path int true "Setting ID"
// @Success 200 {object} map[string]interface{}
// @Failure 400 {object} map[string]string
// @Failure 404 {object} map[string]string
// @Router /api/v1/setting/{id} [delete]
func DeleteSetting(c fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid id"})
}
var setting models.Setting
if err := database.DB.First(&setting, id).Error; err != nil {
return c.Status(http.StatusNotFound).JSON(fiber.Map{"error": "setting not found"})
}
if err := database.DB.Delete(&setting).Error; err != nil {
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "setting could not be deleted"})
}
return c.JSON(fiber.Map{"message": "setting deleted successfully"})
}