mirror of
https://github.com/Starlio-app/StarlioX
synced 2024-11-05 06:03:57 +03:00
add favorites image
This commit is contained in:
parent
d054fb63a9
commit
f9022a5182
4 changed files with 255 additions and 0 deletions
133
api/controllers/favorite.go
Normal file
133
api/controllers/favorite.go
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
"github.com/Redume/EveryNasa/api/utils"
|
||||||
|
"github.com/Redume/EveryNasa/functions"
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
var GetFavorites = func(c *fiber.Ctx) error {
|
||||||
|
FavoriteTitle := c.Query("title")
|
||||||
|
|
||||||
|
type Favorite struct {
|
||||||
|
Title string `json:"title"`
|
||||||
|
Explanation string `json:"explanation"`
|
||||||
|
Date string `json:"date"`
|
||||||
|
URL string `json:"url"`
|
||||||
|
HDURL string `json:"hdurl"`
|
||||||
|
MediaType string `json:"media_type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var title, explanation, date, url, hdurl, media_type string
|
||||||
|
db := functions.GetDatabase()
|
||||||
|
|
||||||
|
if FavoriteTitle != "" {
|
||||||
|
queryFavorites, err := db.Query("SELECT * FROM favorite WHERE title LIKE ?", FavoriteTitle)
|
||||||
|
if err != nil {
|
||||||
|
functions.Logger(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func(query *sql.Rows) {
|
||||||
|
err := query.Close()
|
||||||
|
if err != nil {
|
||||||
|
functions.Logger(err.Error())
|
||||||
|
}
|
||||||
|
}(queryFavorites)
|
||||||
|
|
||||||
|
for queryFavorites.Next() {
|
||||||
|
err := queryFavorites.Scan(&title, &explanation, &date, &url, &hdurl, &media_type)
|
||||||
|
if err != nil {
|
||||||
|
functions.Logger(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(fiber.Map{
|
||||||
|
"title": title,
|
||||||
|
"explanation": explanation,
|
||||||
|
"date": date,
|
||||||
|
"url": url,
|
||||||
|
"hdurl": hdurl,
|
||||||
|
"media_type": media_type,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
queryFavorite, err := db.Query("SELECT * FROM favorite")
|
||||||
|
if err != nil {
|
||||||
|
functions.Logger(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func(query *sql.Rows) {
|
||||||
|
err := query.Close()
|
||||||
|
if err != nil {
|
||||||
|
functions.Logger(err.Error())
|
||||||
|
}
|
||||||
|
}(queryFavorite)
|
||||||
|
var favorites []Favorite
|
||||||
|
for queryFavorite.Next() {
|
||||||
|
err := queryFavorite.Scan(&title, &explanation, &date, &url, &hdurl, &media_type)
|
||||||
|
if err != nil {
|
||||||
|
functions.Logger(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
favorites = append(favorites, Favorite{
|
||||||
|
Title: title,
|
||||||
|
Explanation: explanation,
|
||||||
|
Date: date,
|
||||||
|
URL: url,
|
||||||
|
HDURL: hdurl,
|
||||||
|
MediaType: media_type})
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(favorites)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.SendString("No favorites found")
|
||||||
|
}
|
||||||
|
|
||||||
|
var AddFavorite = func(c *fiber.Ctx) error {
|
||||||
|
title := c.FormValue("title")
|
||||||
|
explanation := c.FormValue("explanation")
|
||||||
|
date := c.FormValue("date")
|
||||||
|
url := c.FormValue("url")
|
||||||
|
hdurl := c.FormValue("hdurl")
|
||||||
|
media_type := c.FormValue("media_type")
|
||||||
|
|
||||||
|
fmt.Println(title, explanation, date, url, hdurl, media_type)
|
||||||
|
|
||||||
|
if title == "" && explanation == "" && date == "" && url == "" && hdurl == "" && media_type == "" {
|
||||||
|
utils.Respond(c, utils.Message(false, "All fields are required"))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
db := functions.GetDatabase()
|
||||||
|
|
||||||
|
_, err := db.Exec("INSERT INTO favorite (title, explanation, date, url, hdurl, media_type) VALUES (?, ?, ?, ?, ?, ?)",
|
||||||
|
title,
|
||||||
|
explanation,
|
||||||
|
date,
|
||||||
|
url,
|
||||||
|
hdurl,
|
||||||
|
media_type)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
functions.Logger(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
utils.Respond(c, utils.Message(true, "Favorite added"))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var DeleteFavorite = func(c *fiber.Ctx) error {
|
||||||
|
title := c.FormValue("title")
|
||||||
|
|
||||||
|
db := functions.GetDatabase()
|
||||||
|
|
||||||
|
_, err := db.Exec("DELETE FROM favorite WHERE title = ?", title)
|
||||||
|
if err != nil {
|
||||||
|
functions.Logger(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
utils.Respond(c, utils.Message(true, "Favorite deleted"))
|
||||||
|
return nil
|
||||||
|
}
|
15
web/page/favorite.go
Normal file
15
web/page/favorite.go
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
package page
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Redume/EveryNasa/functions"
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Favorite(c *fiber.Ctx) error {
|
||||||
|
con := functions.Connected()
|
||||||
|
if con == false {
|
||||||
|
return c.SendFile("./web/errors/500.html")
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.SendFile("./web/src/favorite.html")
|
||||||
|
}
|
98
web/src/favorite.html
Normal file
98
web/src/favorite.html
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>EveryNasa</title>
|
||||||
|
|
||||||
|
<link rel="icon" href="/static/image/icons/favicon.png">
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
|
||||||
|
<link rel="stylesheet" href="/static/style/gallery.css" type="text/css">
|
||||||
|
<link rel="stylesheet" href="/static/style/favorite.css" type="text/css">
|
||||||
|
</head>
|
||||||
|
<nav class="navbar navbar-expand-lg bg-dark navbar-dark">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<a class="navbar-brand" href="/" draggable="false">
|
||||||
|
<img src="/static/image/icons/favicon.png" width="45" alt="EveryNasa">
|
||||||
|
</a>
|
||||||
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarNavDropdown">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/">Gallery</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" aria-current="page" href="/favorite">Favorite</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/settings">Settings</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/about">About</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div class="modal fade" id="WallpaperModal" aria-hidden="true" aria-labelledby="WallpaperModal" tabindex="-1" style="color: black;">
|
||||||
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="WallpaperModale">
|
||||||
|
<span class="d-inline-block text-truncate w-modal-title" style="max-width: 429px;"></span>
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body"></div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<header class="header-row"></header>
|
||||||
|
</div>
|
||||||
|
<div class="preloader">
|
||||||
|
<lottie-player src="https://assets4.lottiefiles.com/datafiles/a3YH0ragZcwfKHS/data.json" background="transparent" speed="1" style="width: 600px; height: 600px;" loop autoplay></lottie-player>
|
||||||
|
</div>
|
||||||
|
<body>
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.1.min.js"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.min.js" integrity="sha384-7VPbUDkoPSGFnVtYi0QogXtr74QeVeeIs99Qfg5YCF+TidwNdjvaKZX19NZ/e6oz" crossorigin="anonymous"></script>
|
||||||
|
<script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>
|
||||||
|
<script src="/static/scripts/analytics.js" type="module"></script>
|
||||||
|
<script src="/static/scripts/gallery.js" type="application/javascript"></script>
|
||||||
|
<script type="application/javascript">
|
||||||
|
$(document).ready(function () {
|
||||||
|
$.ajax({
|
||||||
|
url: "http://localhost:3000/api/get/favorites",
|
||||||
|
type: "GET",
|
||||||
|
success: function(data) {
|
||||||
|
console.log(data);
|
||||||
|
if(data === null) {
|
||||||
|
$(".preloader").hide();
|
||||||
|
$("body").append(`
|
||||||
|
<lottie-player id="star"
|
||||||
|
src="https://assets2.lottiefiles.com/private_files/lf30_rcvcAS.json"
|
||||||
|
background="transparent"
|
||||||
|
autoplay
|
||||||
|
speed="1">
|
||||||
|
</lottie-player>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<h1 class="text-center" style="color: white; margin-top: -5%">You don't have any favorites</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
|
wallpaperLoad(data);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
9
web/static/style/favorite.css
Normal file
9
web/static/style/favorite.css
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
body {
|
||||||
|
background-color: #131313;
|
||||||
|
}
|
||||||
|
|
||||||
|
lottie-player {
|
||||||
|
width: 30%;
|
||||||
|
height: 30%;
|
||||||
|
margin-top: -10%;
|
||||||
|
}
|
Loading…
Reference in a new issue