|
package main |
|
|
|
import ( |
|
"database/sql" |
|
"encoding/json" |
|
"io" |
|
"log" |
|
"net/http" |
|
"os" |
|
"os/signal" |
|
"strconv" |
|
"syscall" |
|
|
|
_ "github.com/jackc/pgx/v5/stdlib" |
|
) |
|
|
|
type DeleteRequest struct { |
|
Id int `json:"id"` |
|
} |
|
|
|
func getConfig() (port string, ip string, database string) { |
|
port = os.Getenv("APP_PORT") |
|
if port == "" { |
|
port = "8080" |
|
} |
|
ip = os.Getenv("APP_IP") |
|
if ip == "" { |
|
ip = "127.0.0.1" |
|
} |
|
database, ok := syscall.Getenv("DATABASE_URL") |
|
if !ok { |
|
panic("DATABASE_URL not set") |
|
} |
|
|
|
return |
|
} |
|
|
|
func returnError(err error, writer http.ResponseWriter) { |
|
writer.WriteHeader(http.StatusInternalServerError) |
|
response, _ := json.Marshal(map[string]string{ |
|
"error": err.Error(), |
|
}) |
|
_, err = writer.Write(response) |
|
if err != nil { |
|
log.Println(err) |
|
} |
|
} |
|
|
|
func main() { |
|
gracefulShutdown := make(chan os.Signal, 1) |
|
signal.Notify(gracefulShutdown, syscall.SIGINT, syscall.SIGTERM) |
|
|
|
port, ip, database := getConfig() |
|
|
|
go func() { |
|
log.Println("Starting server on " + ip + ":" + port) |
|
err := http.ListenAndServe(ip+":"+port, nil) |
|
if err != nil { |
|
panic(err) |
|
} |
|
}() |
|
|
|
db, err := sql.Open("pgx", database) |
|
if err != nil { |
|
panic(err) |
|
} |
|
defer db.Close() |
|
log.Println("Connected to database") |
|
|
|
http.HandleFunc("DELETE /delete", func(writer http.ResponseWriter, request *http.Request) { |
|
body, err := io.ReadAll(request.Body) |
|
if err != nil { |
|
returnError(err, writer) |
|
return |
|
} |
|
|
|
var deleteRequest DeleteRequest |
|
err = json.Unmarshal(body, &deleteRequest) |
|
if err != nil { |
|
returnError(err, writer) |
|
return |
|
} |
|
|
|
_, err = db.Exec("delete from private_message where id = $1", deleteRequest.Id) |
|
if err != nil { |
|
log.Println(err) |
|
returnError(err, writer) |
|
} else { |
|
writer.WriteHeader(http.StatusOK) |
|
log.Println("Deleted private message with id " + strconv.Itoa(deleteRequest.Id)) |
|
} |
|
}) |
|
|
|
<-gracefulShutdown |
|
log.Println("Shutting down server...") |
|
} |