main.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "os"
  7. "time"
  8. "gogs.gildas.ch/gildas/movies"
  9. "gogs.gildas.ch/gildas/movies/api"
  10. )
  11. const (
  12. dataFile = "movies.json"
  13. )
  14. func main() {
  15. var collection *movies.Collection
  16. if _, err := os.Stat(dataFile); !os.IsNotExist(err) {
  17. c, err := movies.Import(dataFile)
  18. if err != nil {
  19. log.Fatal(err)
  20. }
  21. collection = c
  22. } else {
  23. collection = &movies.Collection{}
  24. }
  25. http.Handle("/add-movie", api.AddMovieHandler(collection))
  26. port := "8080"
  27. if p := os.Getenv("PORT"); p != "" {
  28. port = p
  29. }
  30. stopExport := make(chan bool)
  31. go export(collection, stopExport)
  32. defer func() { stopExport <- true }()
  33. fmt.Println("Listening...")
  34. err := http.ListenAndServe(":"+port, nil)
  35. fmt.Println("Server stopped with error:", err)
  36. }
  37. func export(c *movies.Collection, stop <-chan bool) {
  38. for {
  39. select {
  40. case <-time.After(30 * time.Second):
  41. if c.HasChanged() {
  42. err := c.Export(dataFile)
  43. if err != nil {
  44. log.Fatal(err)
  45. return
  46. }
  47. fmt.Printf("Exported fresh data to %q.\n", dataFile)
  48. }
  49. case <-stop:
  50. return
  51. }
  52. }
  53. }