book.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package libamuse
  2. import (
  3. "notabug.org/apiote/amuse/accounts"
  4. "notabug.org/apiote/amuse/datastructure"
  5. "notabug.org/apiote/amuse/inventaire"
  6. "notabug.org/apiote/amuse/wikidata"
  7. "notabug.org/apiote/amuse/db"
  8. "errors"
  9. "notabug.org/apiote/gott"
  10. )
  11. func getBook(args ...interface{}) (interface{}, error) {
  12. data := args[0].(*RequestData)
  13. result := args[1].(*Result)
  14. languages := result.languages
  15. var (
  16. book *datastructure.Book
  17. err error
  18. )
  19. if data.id[:2] == "wd" {
  20. book, err = wikidata.GetBook(data.id, languages[0].String(), data.connection)
  21. } else if data.id[:3] == "inv" {
  22. book, err = inventaire.GetBook(data.id, languages[0].String(), data.connection)
  23. } else {
  24. err = errors.New("Wrong scheme")
  25. }
  26. result.result = book
  27. return gott.Tuple(args), err
  28. }
  29. func getCover(args ...interface{}) (interface{}, error) {
  30. data := args[0].(*RequestData)
  31. result := args[1].(*Result)
  32. book := result.result.(*datastructure.Book)
  33. languages := result.languages
  34. cover, err := wikidata.GetCover(data.id, languages[0].String(), data.connection)
  35. book.Cover = cover
  36. return gott.Tuple(args), err
  37. }
  38. func getBookExperiences(args ...interface{}) (interface{}, error) {
  39. data := args[0].(*RequestData)
  40. result := args[1].(*Result)
  41. book := result.result.(*datastructure.Book)
  42. if result.user.IsEmpty() {
  43. return gott.Tuple(args), nil
  44. }
  45. exp, err := db.GetItemExperiences(result.user.Username, data.id, datastructure.ItemTypeBook)
  46. book.Experiences = exp[data.id]
  47. return gott.Tuple(args), err
  48. }
  49. func renderBook(args ...interface{}) interface{} {
  50. result := args[1].(*Result)
  51. book := result.result.(*datastructure.Book)
  52. result.page = result.renderer.RenderBook(*book, result.languages)
  53. return gott.Tuple(args)
  54. }
  55. func ShowBook(id, language, mimetype string, auth accounts.Authentication) (string, error) {
  56. auth.Necessary = false
  57. r, err := gott.
  58. NewResult(gott.Tuple{&RequestData{id: id, language: language, mimetype: mimetype, auth: auth}, &Result{}}).
  59. Bind(parseLanguage).
  60. Bind(verifyToken).
  61. Bind(getBook).
  62. Bind(getDescription).
  63. Bind(getCover).
  64. Bind(getBookExperiences).
  65. Bind(isOnWantList).
  66. Bind(createRenderer).
  67. Map(renderBook).
  68. Finish()
  69. if err != nil {
  70. return "", err
  71. } else {
  72. return r.(gott.Tuple)[1].(*Result).page, nil
  73. }
  74. }