plakateapp

Check-in [8907e4df67]
Login

Check-in [8907e4df67]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Redundanz war versehentlich wieder da.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | master | trunk
Files: files | file ages | folders
SHA3-256: 8907e4df679796ea090b7d71999a288a6170851fe55d2e316b15a78e0dc535d4
User & Date: git@tuxproject.de 2019-08-12 19:27:50
Context
2019-08-13
15:33
Datenbank vergessen check-in: eb3632f11c user: git@tuxproject.de tags: master, trunk
2019-08-12
19:27
Redundanz war versehentlich wieder da. check-in: 8907e4df67 user: git@tuxproject.de tags: master, trunk
19:17
Wir haben jetzt eine Straßensuche! check-in: 7d0c6ad749 user: git@tuxproject.de tags: master, trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to src/plakateapp.go.

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
package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
    "html/template"
    "io/ioutil"
    "log"
    "net/http"


    // Bibliotheken aus GitHub:
    _ "github.com/mattn/go-sqlite3"
    "github.com/jmoiron/sqlx"
    "github.com/gorilla/mux"
)

type Plakat struct {
    // Mapping DB <-> Go-Datentypen:
    ID          int     `db:"id"`
    Latitude    float32 `db:"lat"`
    Longitude   float32 `db:"lon"`
    Location    string  `db:"location"`
}

// Reverse-Geocoding via Nominatim:

type ReverseGeoCode struct {

    XMLName     xml.Name    `xml:"reversegeocode"`
    AdressParts AdressParts `xml:"addressparts"`
}

type AdressParts struct {

    XMLName      xml.Name   `xml:"addressparts"`
    HouseNumber  string     `xml:"house_number"`
    Road         string     `xml:"road"`
    Suburb       string     `xml:"suburb"`
    District     string     `xml:"city_district"`
    City         string     `xml:"city"`
    State        string     `xml:"state"`
    Postcode     string     `xml:"postcode"`
    Country      string     `xml:"country"`
    CountryCode  string     `xml:"country_code"`
}


// ----------------------------------------

func CheckError(err error) {

    if err != nil {
        panic(err)
    }
}

func GetXML(url string) ([]byte, error) {
    // XML herunterladen:










>


















>





>
















>







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
package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
    "html/template"
    "io/ioutil"
    "log"
    "net/http"
    "strconv"

    // Bibliotheken aus GitHub:
    _ "github.com/mattn/go-sqlite3"
    "github.com/jmoiron/sqlx"
    "github.com/gorilla/mux"
)

type Plakat struct {
    // Mapping DB <-> Go-Datentypen:
    ID          int     `db:"id"`
    Latitude    float32 `db:"lat"`
    Longitude   float32 `db:"lon"`
    Location    string  `db:"location"`
}

// Reverse-Geocoding via Nominatim:

type ReverseGeoCode struct {
    // Bildet <reversegeocode> ab.
    XMLName     xml.Name    `xml:"reversegeocode"`
    AdressParts AdressParts `xml:"addressparts"`
}

type AdressParts struct {
    // Bildet <reversegeocode><adressparts> ab.
    XMLName      xml.Name   `xml:"addressparts"`
    HouseNumber  string     `xml:"house_number"`
    Road         string     `xml:"road"`
    Suburb       string     `xml:"suburb"`
    District     string     `xml:"city_district"`
    City         string     `xml:"city"`
    State        string     `xml:"state"`
    Postcode     string     `xml:"postcode"`
    Country      string     `xml:"country"`
    CountryCode  string     `xml:"country_code"`
}


// ----------------------------------------

func CheckError(err error) {
    // Bei Fehlern schreiend im Kreis rennen:
    if err != nil {
        panic(err)
    }
}

func GetXML(url string) ([]byte, error) {
    // XML herunterladen:
65
66
67
68
69
70
71

72
73
74
75
76
77
78
79
80
81












82
83
84
85
86
87
88
    data, err := ioutil.ReadAll(resp.Body)
    CheckError(err)

    return data, nil
}

func FetchPlakate() []Plakat {

    db, err := sqlx.Open("sqlite3", "./plakate.db")
    CheckError(err)
    defer db.Close()

    // Liste erzeugen:
    plakate := []Plakat{}
    db.Select(&plakate, "SELECT * FROM plakate")

    return plakate
}













// ----------------------------------------

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    // Startseite aufrufen:
    tmpl := template.Must(template.ParseFiles("templates/index.htm"))
    tmpl.Execute(w, "")







>










>
>
>
>
>
>
>
>
>
>
>
>







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
    data, err := ioutil.ReadAll(resp.Body)
    CheckError(err)

    return data, nil
}

func FetchPlakate() []Plakat {
    // Liste von Plakaten aus der DB in ein Plakat-Array schieben:
    db, err := sqlx.Open("sqlite3", "./plakate.db")
    CheckError(err)
    defer db.Close()

    // Liste erzeugen:
    plakate := []Plakat{}
    db.Select(&plakate, "SELECT * FROM plakate")

    return plakate
}

func DeletePlakat(id string) {
    // Datenbank aufrufen:
    db, err := sqlx.Open("sqlite3", "./plakate.db")
    CheckError(err)
    defer db.Close()

    // Löschen, falls möglich:
    stmt, err := db.Prepare("delete from plakate where id = ?")
    _, err = stmt.Exec(strconv.Atoi(id))
    CheckError(err)
}

// ----------------------------------------

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    // Startseite aufrufen:
    tmpl := template.Must(template.ParseFiles("templates/index.htm"))
    tmpl.Execute(w, "")
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175

176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194

    // Datenbank aufrufen:
    db, err := sqlx.Open("sqlite3", "./plakate.db")
    CheckError(err)
    defer db.Close()

    stmt, err := db.Prepare("insert into plakate (lat, lon, location) values (?, ?, ?)")
    CheckError(err)
    _, err = stmt.Exec(lat, lon, location)
    CheckError(err)

    fmt.Fprintf(w, "Plakat erfolgreich eingetragen!")
}

func DelHandler(w http.ResponseWriter, r *http.Request) {
    // Plakat mit vars["id"] löschen:
    vars := mux.Vars(r)

    // Datenbank aufrufen:
    db, err := sqlx.Open("sqlite3", "./plakate.db")
    CheckError(err)
    defer db.Close()

    // Löschen, falls möglich:
    stmt, err := db.Prepare("delete from plakate where id = ?")
    CheckError(err)
    _, err = stmt.Exec(vars["id"])
    CheckError(err)

    // Falls kein Fehler aufgetreten ist, umleiten auf /manageplakate:
    http.Redirect(w, r, "/manageplakate", http.StatusMovedPermanently)
}

func DelPostHandler(w http.ResponseWriter, r *http.Request) {

    data := r.FormValue("id")

    // Datenbank aufrufen:
    db, err := sqlx.Open("sqlite3", "./plakate.db")
    CheckError(err)
    defer db.Close()

    // Löschen, falls möglich:
    stmt, err := db.Prepare("delete from plakate where id = ?")
    CheckError(err)
    _, err = stmt.Exec(data)
    CheckError(err)

    // Falls kein Fehler aufgetreten ist, umleiten auf /manageplakate:
    http.Redirect(w, r, "/manageplakate", http.StatusMovedPermanently)
}

func main() {
    // Routing:







<







|

<
<
<
<
<
<
<
<
<
|
<






>

|
<
<
<
<
<
<
<
<
<
<







159
160
161
162
163
164
165

166
167
168
169
170
171
172
173
174









175

176
177
178
179
180
181
182
183
184










185
186
187
188
189
190
191

    // Datenbank aufrufen:
    db, err := sqlx.Open("sqlite3", "./plakate.db")
    CheckError(err)
    defer db.Close()

    stmt, err := db.Prepare("insert into plakate (lat, lon, location) values (?, ?, ?)")

    _, err = stmt.Exec(lat, lon, location)
    CheckError(err)

    fmt.Fprintf(w, "Plakat erfolgreich eingetragen!")
}

func DelHandler(w http.ResponseWriter, r *http.Request) {
    // Plakat mit URL-Parameter "id" löschen:
    vars := mux.Vars(r)









    DeletePlakat(vars["id"])


    // Falls kein Fehler aufgetreten ist, umleiten auf /manageplakate:
    http.Redirect(w, r, "/manageplakate", http.StatusMovedPermanently)
}

func DelPostHandler(w http.ResponseWriter, r *http.Request) {
    // Plakat mit POST-Parameter "id" löschen:
    data := r.FormValue("id")
    DeletePlakat(data)











    // Falls kein Fehler aufgetreten ist, umleiten auf /manageplakate:
    http.Redirect(w, r, "/manageplakate", http.StatusMovedPermanently)
}

func main() {
    // Routing: