Refactor application into multiple files

This commit is contained in:
2022-07-19 00:15:32 -06:00
parent 0139b08aae
commit bb9fe550ad
7 changed files with 486 additions and 417 deletions
+55
View File
@@ -0,0 +1,55 @@
package rest
import (
"encoding/json"
"net/http"
"github.com/op/go-logging"
"github.com/restitux/ikinuki-server/database"
)
var log = logging.MustGetLogger("ikinuki-server")
type GetEpisodes struct {
Episodes []database.Episode
}
func getEpisodesHandler(data_dir string, w http.ResponseWriter, r *http.Request) {
log.Debugf("/get_episodes called\n")
db, err := database.OpenDatabase(data_dir)
if err != nil {
log.Errorf("Could not open database: %v\n", err)
return
}
rows, err := db.Query("SELECT title, show_title, number, season, original_filename FROM episodes")
if err != nil {
log.Errorf("Could not check if database was new: %v", err)
}
defer rows.Close()
var return_json GetEpisodes
for {
if !rows.Next() {
err = rows.Err()
if err != nil {
log.Fatalf("Could not get row from database: %v\n", err)
return
} else {
log.Debugf("%v rows processed\n", len(return_json.Episodes))
break
}
}
var episode database.Episode
rows.Scan(&episode.Title, &episode.ShowTitle, &episode.Episode, &episode.Season, &episode.OriginalFilename)
return_json.Episodes = append(return_json.Episodes, episode)
}
data, err := json.Marshal(return_json)
if err != nil {
log.Errorf("Could not marshal episode data: %v\n", err)
return
}
w.Write(data)
}
+51
View File
@@ -0,0 +1,51 @@
package rest
import (
"encoding/json"
"net/http"
"github.com/restitux/ikinuki-server/database"
)
type GetShows struct {
Shows []database.TVShow
}
func getShowsHandler(data_dir string, w http.ResponseWriter, r *http.Request) {
log.Debugf("/get_shows called\n")
db, err := database.OpenDatabase(data_dir)
if err != nil {
log.Errorf("Could not open database: %v\n", err)
return
}
rows, err := db.Query("SELECT title, original_title, show_title, year FROM tvshows")
if err != nil {
log.Errorf("Could not check if database was new: %v", err)
}
defer rows.Close()
var return_json GetShows
for {
if !rows.Next() {
err = rows.Err()
if err != nil {
log.Fatalf("Could not get row from database: %v\n", err)
return
} else {
log.Debugf("%v rows processed\n", len(return_json.Shows))
break
}
}
var show database.TVShow
rows.Scan(&show.Title, &show.OriginalTile, &show.ShowTitle, &show.Year)
return_json.Shows = append(return_json.Shows, show)
}
data, err := json.Marshal(return_json)
if err != nil {
log.Errorf("Could not marshal episode data: %v\n", err)
return
}
w.Write(data)
}
+27
View File
@@ -0,0 +1,27 @@
package rest
import (
"fmt"
"net/http"
)
func setupHTTPServer(data_dir string) {
http.HandleFunc("/get_episodes", func(w http.ResponseWriter, r *http.Request) {
getEpisodesHandler(data_dir, w, r)
})
http.HandleFunc("/get_shows", func(w http.ResponseWriter, r *http.Request) {
getShowsHandler(data_dir, w, r)
})
}
func RunHTTPServer(address string, port int, data_dir string) {
setupHTTPServer(data_dir)
connect_string := fmt.Sprintf("%v:%v", address, port)
log.Noticef("Launching HTTP server on %v\n", connect_string)
log.Fatal(http.ListenAndServe(connect_string, nil))
}