144 lines
3.2 KiB
Go
144 lines
3.2 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
)
|
|
|
|
func queryInt(r *http.Request, key string, def int) int {
|
|
v := r.URL.Query().Get(key)
|
|
if v == "" {
|
|
return def
|
|
}
|
|
n, err := strconv.Atoi(v)
|
|
if err != nil {
|
|
return def
|
|
}
|
|
return n
|
|
}
|
|
|
|
// --- публикации ---
|
|
|
|
func (a *API) posts(kind string) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.Posts(r.Context(), kind, queryInt(r, "limit", 20))
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
}
|
|
|
|
func (a *API) post(kind string) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
p, err := a.store.PostBySlug(r.Context(), kind, r.PathValue("slug"))
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, p, nil)
|
|
}
|
|
}
|
|
|
|
// --- остальной контент ---
|
|
|
|
func (a *API) reviews(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.Reviews(r.Context(), r.URL.Query().Get("doctor"), queryInt(r, "limit", 50))
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
|
|
func (a *API) faq(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.FAQ(r.Context(), r.URL.Query().Get("service"))
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
|
|
func (a *API) documents(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.Documents(r.Context(), r.URL.Query().Get("kind"))
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
|
|
func (a *API) partners(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.Partners(r.Context())
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
|
|
func (a *API) vacancies(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.Vacancies(r.Context())
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
|
|
func (a *API) branches(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.Branches(r.Context())
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
|
|
func (a *API) checkups(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.Checkups(r.Context(), r.URL.Query().Get("audience"))
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
|
|
func (a *API) checkup(w http.ResponseWriter, r *http.Request) {
|
|
c, err := a.store.CheckupBySlug(r.Context(), r.PathValue("slug"))
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, c, nil)
|
|
}
|
|
|
|
func (a *API) page(w http.ResponseWriter, r *http.Request) {
|
|
p, err := a.store.PageBySlug(r.Context(), r.PathValue("slug"))
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, p, nil)
|
|
}
|
|
|
|
func (a *API) gallery(w http.ResponseWriter, r *http.Request) {
|
|
list, err := a.store.Gallery(r.Context())
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, list, map[string]any{"total": len(list)})
|
|
}
|
|
|
|
func (a *API) settings(w http.ResponseWriter, r *http.Request) {
|
|
m, err := a.store.Settings(r.Context())
|
|
if err != nil {
|
|
handleErr(w, err)
|
|
return
|
|
}
|
|
ok(w, m, nil)
|
|
}
|