summaryrefslogtreecommitdiff
path: root/invoice/invoice_router.go
blob: 2752675e5b71a894fbb6a156e6950bfd4cc3e83d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package invoice

import (
	"github.com/gin-gonic/gin"
	"github.com/MikunoNaka/OpenBills-lib/invoice"
	"log"
	"net/http"
)

func Routes(route *gin.Engine) {
	i := route.Group("/invoice")
	{
		i.GET("/", func(ctx *gin.Context) {
			// TODO: add functionality to filter results
			invoices, err := invoice.GetInvoices(nil)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to read invoices from DB: %v\n", err.Error())
			}

			ctx.JSON(http.StatusOK, invoices)
		})

		i.POST("/", func(ctx *gin.Context) {
			var x invoice.Invoice
			ctx.Bind(&x)
			err := x.Save()
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to generate new invoice #%d: %v\n", x.InvoiceNumber, err.Error())
			}

			log.Printf("Generated new invoice #%d.\n", x.InvoiceNumber)
			ctx.JSON(http.StatusOK, nil)
		})

		i.DELETE("/", func(ctx *gin.Context) {
			var x invoice.Invoice
			ctx.Bind(&x)
			err := x.Delete()
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to delete invoice #%d: %v\n", x.InvoiceNumber, err.Error())
			}

			log.Printf("Deleted invoice invoice #%d.\n", x.InvoiceNumber)
			ctx.JSON(http.StatusOK, nil)
		})
	}

	transport := route.Group("/transport")
	{
		transport.GET("/", func(ctx *gin.Context) {
			// TODO: add functionality to filter results
			transports, err := invoice.GetTransports(nil)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to read transport vehicles from DB: %v\n", err.Error())
			}

			ctx.JSON(http.StatusOK, transports)
		})

		transport.POST("/", func(ctx *gin.Context) {
			var x invoice.Transport
			ctx.Bind(&x)
			err := x.Save()
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to add transport vehicle \"%s\": %v\n", x.VehicleNum, err.Error())
			}

			log.Printf("Added new transport vehicle to database: \"%s\"\n", x.VehicleNum)
			ctx.JSON(http.StatusOK, nil)
		})

		transport.DELETE("/", func(ctx *gin.Context) {
			var x invoice.Transport
			ctx.Bind(&x)
			err := x.Delete()
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to delete transport vehicle \"%s\": %v\n", x.VehicleNum, err.Error())
			}

			log.Printf("Deleted transport vehicle: \"%s\"\n", x.VehicleNum)
			ctx.JSON(http.StatusOK, nil)
		})
	}

	transporter := route.Group("/transporter")
	{
		transporter.GET("/", func(ctx *gin.Context) {
			// TODO: add functionality to filter results
			transporters, err := invoice.GetTransporters(nil)
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to read transporters from DB: %v\n", err.Error())
			}

			ctx.JSON(http.StatusOK, transporters)
		})

		transporter.POST("/", func(ctx *gin.Context) {
			var x invoice.Transporter
			ctx.Bind(&x)
			err := x.Save()
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to add transporter \"%s\": %v\n", x.Name, err.Error())
			}

			log.Printf("Added new transporter to database: \"%s\"\n", x.Name)
			ctx.JSON(http.StatusOK, nil)
		})

		transporter.DELETE("/", func(ctx *gin.Context) {
			var x invoice.Transporter
			ctx.Bind(&x)
			err := x.Delete()
			if err != nil {
				ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				log.Printf("ERROR: Failed to delete transporter \"%s\": %v\n", x.Name, err.Error())
			}

			log.Printf("Deleted transporter: \"%s\"\n", x.Name)
			ctx.JSON(http.StatusOK, nil)
		})
	}
}