initial commit

This commit is contained in:
Micheal Smith 2026-02-17 13:28:39 -06:00
parent f18939e38d
commit 022999b0e5
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: E40750BFE6702504
4 changed files with 46 additions and 46 deletions

4
.cljfmt.edn Normal file
View file

@ -0,0 +1,4 @@
{:parallel? true
:sort-ns-references? true
:align-form-columns? true
:align-map-columns? true}

View file

@ -11,9 +11,7 @@
(defrecord Context [client token]
TMDB
(search [this term]
(-> (req/make-request this "https://api.themoviedb.org/3/search/movie")
(req/with-query term)
(req/with-page 1)
(-> (req/search-request this term)
(http-get-pages))))
;; Creates a new client.
@ -25,7 +23,8 @@
(defn- http-get
"Send a GET request."
[request]
(hc/get (first request) (second request)))
(let [[url opts] (req/to-http-request request)]
(hc/get url opts)))
(defn- http-get-pages
"Send a get request, and return pages from the API in a sequence."

View file

@ -1,46 +1,50 @@
(ns tmdb.request
(:require [tmdb.util :refer [deep-merge]]))
(def RequestTuple
[:tuple
[:string {:min 1}]
[:map {:closed false}]])
(defprotocol Request
"Protocol for requests that can be converted to HTTP arguments."
(to-http-request [this]
"Converts the request object into a [url options] tuple for Hato."))
(defn make-request
"Makes a simple request for a given url."
[{:keys [client token]} url]
[url {:oauth-token token
:http-client client
:as :json
:query-params {:page 1}}])
(defn- base-options [context]
{:oauth-token (:token context)
:http-client (:client context)
:as :json
:throw-exceptions false})
(defn- update-query-params
[[url request] query]
[url (deep-merge request {:query-params query})])
(defrecord SearchRequest [context query page include-adult?]
Request
(to-http-request [_]
["https://api.themoviedb.org/3/search/movie"
(deep-merge (base-options context)
{:query-params (cond-> {:page (or page 1)}
query (assoc :query query)
(some? include-adult?) (assoc :include_adult include-adult?))})]))
(defn get-url
"Retrieves the URL from the request."
[request]
(first request))
(defrecord DetailsRequest [context movie-id language]
Request
(to-http-request [_]
[(str "https://api.themoviedb.org/3/movie/" movie-id)
(deep-merge (base-options context)
{:query-params (cond-> {}
language (assoc :language language))})]))
(defn get-page
[request]
(get-in request [1 :query-params :page]))
(defn search-request
"Creates a new search request."
([context] (map->SearchRequest {:context context :page 1}))
([context query] (map->SearchRequest {:context context :query query :page 1})))
(defn details-request
"Creates a new details request."
([context movie-id] (map->DetailsRequest {:context context :movie-id movie-id}))
([context movie-id language] (map->DetailsRequest {:context context :movie-id movie-id :language language})))
(defn with-page
"Sets a the page property for a request."
[request page_no]
(update-query-params request {:page page_no}))
(defn get-query
"Returns the search query from the request tuple."
[request]
(get-in request [1 :query-params :query]))
"Sets the page property for a request."
[request page-no]
(assoc request :page page-no))
(defn with-query
"Returns a new request with the search query updated."
[request search]
(update-query-params request {:query search}))
"Sets the search query for a request."
[request query]
(assoc request :query query))

View file

@ -1,7 +0,0 @@
(ns tmdb.main-test
(:require [clojure.test :refer :all]
[tmdb.main :refer :all]))
(deftest a-test
(testing "FIXME, I fail."
(is (= 0 1))))