2022-01-09 05:27:18 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"net/http"
|
|
|
|
"strconv"
|
|
|
|
|
2022-01-09 06:59:28 +01:00
|
|
|
"github.com/ddworken/hishtory/shared"
|
2022-03-30 06:56:28 +02:00
|
|
|
_ "github.com/lib/pq"
|
|
|
|
"gorm.io/driver/postgres"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
POSTGRES_DB = "postgresql://postgres:O74Ji4735C@postgres-postgresql.default.svc.cluster.local:5432/hishtory?sslmode=disable"
|
2022-01-09 06:59:28 +01:00
|
|
|
)
|
2022-01-09 05:27:18 +01:00
|
|
|
|
|
|
|
func apiSubmitHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
|
decoder := json.NewDecoder(r.Body)
|
|
|
|
var entry shared.HistoryEntry
|
|
|
|
err := decoder.Decode(&entry)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2022-03-30 06:56:28 +02:00
|
|
|
db, err := OpenDB()
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
err = shared.Persist(db, entry)
|
2022-01-09 05:27:18 +01:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-30 06:56:28 +02:00
|
|
|
func OpenDB() (*gorm.DB, error) {
|
|
|
|
if shared.IsTestEnvironment() {
|
|
|
|
return shared.OpenLocalSqliteDb()
|
|
|
|
}
|
|
|
|
|
|
|
|
db, err := gorm.Open(postgres.Open(POSTGRES_DB), &gorm.Config{})
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("failed to connect to the DB: %v", err)
|
|
|
|
}
|
|
|
|
db.AutoMigrate(&shared.HistoryEntry{})
|
|
|
|
return db, nil
|
|
|
|
}
|
|
|
|
|
2022-01-09 05:27:18 +01:00
|
|
|
func apiSearchHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
|
userSecret := r.URL.Query().Get("user_secret")
|
|
|
|
query := r.URL.Query().Get("query")
|
2022-01-09 20:00:53 +01:00
|
|
|
fmt.Println("Received search query: " + query)
|
2022-01-09 05:27:18 +01:00
|
|
|
limitStr := r.URL.Query().Get("limit")
|
|
|
|
limit, err := strconv.Atoi(limitStr)
|
|
|
|
if err != nil {
|
|
|
|
limit = 0
|
|
|
|
}
|
2022-03-30 06:56:28 +02:00
|
|
|
db, err := OpenDB()
|
2022-01-09 05:27:18 +01:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2022-01-09 20:00:53 +01:00
|
|
|
entries, err := shared.Search(db, userSecret, query, limit)
|
2022-01-09 05:27:18 +01:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
for _, entry := range entries {
|
|
|
|
entry.UserSecret = ""
|
|
|
|
}
|
|
|
|
resp, err := json.Marshal(entries)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
w.Write(resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
2022-03-30 06:56:28 +02:00
|
|
|
// db, err := sql.Open("postgres", "postgresql://postgres:O74Ji4735C@postgres-postgresql.default.svc.cluster.local:5432/cascara_prod?sslmode=disable")
|
|
|
|
// if err != nil {
|
|
|
|
// panic(err)
|
|
|
|
// }
|
|
|
|
// defer db.Close()
|
|
|
|
|
|
|
|
// _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s;", "hishtory"))
|
|
|
|
// if err != nil {
|
|
|
|
// panic(err)
|
|
|
|
// }
|
|
|
|
|
|
|
|
_, err := OpenDB()
|
2022-01-09 05:27:18 +01:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
fmt.Println("Listening on localhost:8080")
|
|
|
|
http.HandleFunc("/api/v1/submit", apiSubmitHandler)
|
|
|
|
http.HandleFunc("/api/v1/search", apiSearchHandler)
|
|
|
|
log.Fatal(http.ListenAndServe(":8080", nil))
|
|
|
|
}
|