40 Commits f6c52e8c7a ... c7cde2b86f

Author SHA1 Message Date
  unknown c7cde2b86f gogs update 4 years ago
  unknown d5d85ec698 new feature 4 years ago
  unknown 67cd41ca16 new feature 4 years ago
  unknown 59851e30fe new feature 4 years ago
  unknown 240806d1ad new feature 4 years ago
  unknown 395b834b93 new feature 4 years ago
  unknown e8c241daae new feature 4 years ago
  unknown 8f17fd7133 unnamed 4 years ago
  unknown fc5cada7fd cartridges html to gohtml 4 years ago
  unknown 98620eef95 Fixing QR 4 years ago
  unknown ee3e8dfc7b Fixing QR 4 years ago
  unknown bcd6bdaa9f Fixing QR 4 years ago
  unknown c5d7948bc2 Fixing QR 4 years ago
  unknown 8e5e845d28 Fixing QR 4 years ago
  unknown dc2be2fb7b Fixing QR 4 years ago
  unknown 4c08edfa55 Fixing QR 4 years ago
  unknown b30691a48b Fixing QR 4 years ago
  unknown c241380903 Fixing QR 4 years ago
  unknown 6d562973d7 Fixing QR 4 years ago
  unknown 09f64c50c5 Fixing QR 4 years ago
  unknown df20ff0caa Fixing QR 4 years ago
  unknown 062f4c7e49 Fixing QR 4 years ago
  unknown 8786c6e1c2 Fixing QR 4 years ago
  unknown a3546b5f28 Fixing QR 4 years ago
  unknown 3f9cd0e66e Fixing QR 4 years ago
  unknown 27e5da9989 Fixing QR 4 years ago
  unknown 0cccb2aabc Fixing QR 4 years ago
  unknown ada63e7c58 Fixing QR 4 years ago
  unknown fcc4cfa78f Fixing QR 4 years ago
  unknown abe94665d7 Fixing QR 4 years ago
  unknown a3aefacb43 Fixing QR 4 years ago
  unknown ab3c96e889 Fixing QR 4 years ago
  unknown 6244f5a6b0 Fixing QR 4 years ago
  unknown 1f76fcc5ff Fixing QR 4 years ago
  unknown 296f3bc540 Fixing QR 4 years ago
  unknown 3950fd2ba7 Fixing QR 4 years ago
  unknown 6c9ef75a38 Deploying to heroku for test 4 years ago
  unknown 08ae9e83ce Deploying to heroku for test 4 years ago
  unknown b4451e89b9 Deploying to heroku for test 4 years ago
  unknown 672575a094 Deploying to heroku for test 4 years ago
9 changed files with 162 additions and 60 deletions
  1. BIN
      CRYNXkkRVH.png
  2. 1 0
      Procfile
  3. 16 0
      cartridges.gohtml
  4. 14 0
      generate.html
  5. 1 0
      go.mod
  6. 123 58
      main.go
  7. 7 2
      models.go
  8. BIN
      printer.db
  9. BIN
      printers.exe

BIN
CRYNXkkRVH.png


+ 1 - 0
Procfile

@@ -0,0 +1 @@
+web: bin/printers

+ 16 - 0
cartridges.gohtml

@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>Картриджа</title>
+</head>
+<body>
+	<p>Список картриджей и их количество:</p>
+	<ul>
+		{{ range .Name }}
+		<li>{{ . }}</li>
+		{{ end }}
+	</ul>
+
+	<input type="button" name="UpdateCartridgesBtn" value="Назад" onclick="location.href = '/'">
+</body>
+</html>

+ 14 - 0
generate.html

@@ -43,6 +43,20 @@
 		<input type="submit" value="Добавить совместимость">
 	</form>
 	<br><br>
+
+	<p>Добавление картриджей</p>
+	<form name="addcartridge" action="/updateCartridge">
+		<select name="cartridges">
+			<option></option>
+			{{ range .CartridgeNames }}
+			<option value="{{ . }}">{{ . }}</option>
+			{{ end }}
+			<input type="number" name="cartridgeQuantity" placeholder="Количество">
+			<input type="submit" value="Изменить">
+		</select>
+	</form>
+	<br><br>
 	<input type="button" value="Найти совместимый картридж" onclick="location.href = '/compatible'">
+	<input type="button" value="Состояние картриджей" onclick="location.href = '/cartridges'">
 </body>
 </html>

+ 1 - 0
go.mod

@@ -1,6 +1,7 @@
 module printers
 
 go 1.16
+// +heroku goVersion go1.16
 
 require (
 	github.com/boombuler/barcode v1.0.1

+ 123 - 58
main.go

@@ -1,6 +1,7 @@
 package main
 
 import (
+	"strconv"
 	"fmt"
 	"github.com/boombuler/barcode"
 	"github.com/boombuler/barcode/qr"
@@ -10,23 +11,22 @@ import (
 	"html/template"
 	"image"
 	"image/png"
-	"log"
-	"net/http"
 	"io/ioutil"
+	"math/rand"
+	"net/http"
 	"os"
 	"strings"
-	"math/rand"
 	"time"
 )
 
 func init() {
-    rand.Seed(time.Now().UnixNano())
+	rand.Seed(time.Now().UnixNano())
 }
 
-var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
+var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
 
 func main() {
-
+	// port := os.Getenv("PORT")
 	r := mux.NewRouter()
 
 	r.HandleFunc("/", PrinterList)
@@ -37,16 +37,35 @@ func main() {
 	r.HandleFunc("/cartridgeOfPrinter", AddCartridgeOfPrinter)
 	r.HandleFunc("/compatible", FindCompatibleCartridges)
 	r.HandleFunc("/printer/{printerName}", PrinterPage)
+	r.HandleFunc("/cartridges", CartridgePage)
+	r.HandleFunc("/updateCartridge", updateCartridges)
 	fmt.Println("Server is listening...")
 
 	http.Handle("/", r)
-	http.ListenAndServe(":8888", nil)
+	http.ListenAndServe(":80"/*+port*/, nil)
+}
+
+func updateCartridges(w http.ResponseWriter, r *http.Request){
+	db, _ := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+
+	r.ParseForm()
+	selectedCartridge := strings.Join(r.Form["cartridges"], "")
+	var cartridge Cartridges
+	db.Where("Name = ?", selectedCartridge).First(&cartridge)
+	quantity, err := strconv.Atoi(strings.Join(r.Form["cartridgeQuantity"], ""))
+	if err != nil {
+		fmt.Println("Someone tries to update int value by string. Someone: " + r.RemoteAddr)
+
+	} 
+	newQuantity := cartridge.Quantity + uint(quantity)
+	db.Model(&cartridge).Update("Quantity", newQuantity)
+	http.Redirect(w, r, "/", 301)
 }
 
-func generateCompatible(w http.ResponseWriter, r *http.Request){
+func generateCompatible(w http.ResponseWriter, r *http.Request) {
 	fmt.Println("New generating request from" + r.RemoteAddr)
 	data, err := ioutil.ReadAll(r.Body)
-	if err != nil{
+	if err != nil {
 		fmt.Println("Something went wrong during generating QR code")
 		fmt.Fprintf(w, "Something went wrong during generating QR code")
 	}
@@ -54,11 +73,42 @@ func generateCompatible(w http.ResponseWriter, r *http.Request){
 	fmt.Println("Generated name " + filename + " for " + r.RemoteAddr)
 	generateFromText(string(data), filename)
 	fmt.Println("Generated file " + filename + ".png for " + r.RemoteAddr)
-	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename +".png"))
+	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename+".png"))
 	http.ServeFile(w, r, filename)
 	fmt.Println("Served file " + filename + ".png for " + r.RemoteAddr)
 	os.Remove(filename + ".png")
 	fmt.Println("Removed file " + filename + ".png")
+	http.Redirect(w, r, "/", 301)
+}
+
+func CartridgePage(w http.ResponseWriter, r *http.Request) {
+	db, err := gorm.Open(sqlite.Open("printer.db"), &gorm.Config{})
+	if err != nil {
+		fmt.Println("Error during opening DB")
+	} else {
+
+		var cartridges []Cartridges
+		var names []string
+		db.Find(&cartridges)
+		for _, v := range cartridges {
+			qua := fmt.Sprint(v.Quantity)
+			name := v.Name + ": " + qua
+			names = append(names, name)
+		}
+
+		data := CartridgesOutput{
+			Name: names,
+		}
+
+		tmpl, err := template.ParseFiles("cartridges.gohtml")
+
+		if err != nil{
+			fmt.Println("Error parsing files")
+			fmt.Println(err)
+		}
+
+		tmpl.Execute(w, data)
+	}
 }
 
 func PrinterPage(w http.ResponseWriter, r *http.Request) {
@@ -81,7 +131,7 @@ func PrinterPage(w http.ResponseWriter, r *http.Request) {
 			db.Where("Printer_Id = ?", printer.ID).Find(&cot)
 			for _, v := range cot {
 				var cart Cartridges
-				if v.Printer_Id == printer.ID{
+				if v.Printer_Id == printer.ID {
 					db.Where("ID = ?", v.Cartridge_Id).First(&cart)
 					cartridges = append(cartridges, cart.Name)
 				}
@@ -94,11 +144,6 @@ func PrinterPage(w http.ResponseWriter, r *http.Request) {
 
 			tmpl, _ := template.ParseFiles("output.html")
 			tmpl.Execute(w, data)
-			// fmt.Fprintf(w, "Выбранный принтер: %v\n", name)
-			// fmt.Fprintf(w, "Совместимые картриджи (" + string(len(cartridges)) + ")\n")
-			// for _, cartridge := range cartridges{
-			// 	fmt.Fprintf(w, cartridge)
-			// }
 		} else {
 			http.Redirect(w, r, "https://www.youtube.com/watch?v=dQw4w9WgXcQ", 301)
 		}
@@ -195,11 +240,67 @@ func AddPrinter(w http.ResponseWriter, r *http.Request) {
 }
 
 func GenerateQR(w http.ResponseWriter, r *http.Request) {
-	r.ParseForm()
+	r.ParseForm() // Получение имени принтера
 	text := strings.Join(r.Form["printer"], "")
-	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", text+".png"))
-	generateFromText(text, text)
-	http.ServeFile(w, r, text)
+	GenerateFromWeb(w, r, text)
+}
+
+func GenerateFromWeb(w http.ResponseWriter, r *http.Request, printerName string) {
+	qrtext := "https://printers-ttit.herokuapp.com/printer/" + printerName // Генерация URL
+	fmt.Println("Generating QR code with text: " + qrtext + " for " + r.RemoteAddr)
+	filename := GenerateRandomString(10) // Генерация имени файла
+	fmt.Println("Generated filename " + filename + " for " + r.RemoteAddr)
+	err := generateFromText(qrtext, filename) // qrtext - текст в QR, filename - имя файла
+
+	if err != nil {
+		fmt.Println(err)
+	}
+
+	fmt.Println("Setting header Content-Disposition for " + r.RemoteAddr)
+	w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", filename+".png"))
+	fmt.Println("Starting serving file for " + r.RemoteAddr)
+	http.ServeFile(w, r, filename+".png")
+}
+
+func generateFromText(text string, filename string) error {
+	code, err := qr.Encode(text, qr.L, qr.Auto)
+	if err != nil {
+		return fmt.Errorf("Error during generating QR code")
+	}
+	if text != code.Content() {
+		return fmt.Errorf("data differs")
+	}
+	code, err = barcode.Scale(code, 512, 512)
+	if err != nil {
+		return fmt.Errorf("Error during scaling QR code")
+	}
+
+	err = writePng(filename, code)
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func writePng(filename string, img image.Image) error {
+	file, err := os.Create(filename + ".png")
+	if err != nil {
+		return fmt.Errorf("Creating file error")
+	}
+	err = png.Encode(file, img)
+	if err != nil {
+		return fmt.Errorf("PNG file error")
+	}
+	file.Close()
+	return nil
+}
+
+func GenerateRandomString(n int) string {
+	b := make([]rune, n)
+	for i := range b {
+		b[i] = letterRunes[rand.Intn(len(letterRunes))]
+	}
+	return string(b)
 }
 
 func PrinterList(w http.ResponseWriter, r *http.Request) {
@@ -235,48 +336,12 @@ func cartridgeQR(text string, filename string) {
 		fmt.Println("Something went wrong...")
 	}
 	if text != code.Content() {
-		log.Fatal("data differs")
+		panic("data differs")
 	}
 	code, err = barcode.Scale(code, 512, 512)
 	if err != nil {
-		log.Fatal(err)
+		panic(err)
 	}
 
 	writePng(filename, code)
 }
-
-func generateFromText(text string, filename string) {
-	code, err := qr.Encode(text, qr.L, qr.Auto)
-	if err != nil {
-		fmt.Println("Something went wrong...")
-	}
-	if text != code.Content() {
-		log.Fatal("data differs")
-	}
-	code, err = barcode.Scale(code, 512, 512)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	writePng(filename, code)
-}
-
-func writePng(filename string, img image.Image) {
-	file, err := os.Create(filename + ".png")
-	if err != nil {
-		log.Fatal(err)
-	}
-	err = png.Encode(file, img)
-	if err != nil {
-		log.Fatal(err)
-	}
-	file.Close()
-}
-
-func GenerateRandomString(n int) string {
-    b := make([]rune, n)
-    for i := range b {
-        b[i] = letterRunes[rand.Intn(len(letterRunes))]
-    }
-    return string(b)
-}

+ 7 - 2
models.go

@@ -6,6 +6,10 @@ type ViewData struct {
 	CartridgeNames []string
 }
 
+type CartridgesOutput struct {
+	Name []string
+}
+
 type Output struct {
 	PrinterName string
 	Cartridges  []string
@@ -17,8 +21,9 @@ type Printers struct {
 }
 
 type Cartridges struct {
-	ID   uint   `gorm:"AUTO_INCREMENT;type:integer"`
-	Name string `gorm:"type:text"`
+	ID       uint   `gorm:"AUTO_INCREMENT;type:integer"`
+	Name     string `gorm:"type:text"`
+	Quantity uint   `gorm:"type:integer"`
 }
 
 type Cartridgeofprinter struct {

BIN
printer.db


BIN
printers.exe