session.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "git.andreafazzi.eu/andrea/probo/cmd/textinput"
  6. "git.andreafazzi.eu/andrea/probo/pkg/sessionmanager"
  7. "git.andreafazzi.eu/andrea/probo/pkg/store/file"
  8. tea "github.com/charmbracelet/bubbletea"
  9. "github.com/urfave/cli/v2"
  10. )
  11. func push(cCtx *cli.Context) error {
  12. pStore, err := file.NewDefaultParticipantFileStore()
  13. if err != nil {
  14. return cli.Exit(fmt.Sprintf("An error occurred: %v", err), 1)
  15. }
  16. participants := pStore.ReadAll()
  17. if len(participants) == 0 {
  18. return cli.Exit("No participants found!", 1)
  19. }
  20. sessionName := cCtx.Args().First()
  21. if cCtx.Args().Len() < 1 {
  22. input := textinput.NewTextInput("My exam session")
  23. p := tea.NewProgram(input)
  24. if _, err := p.Run(); err != nil {
  25. log.Fatal(err)
  26. }
  27. sessionName = input.Value()
  28. }
  29. sStore, err := file.NewDefaultSessionFileStore()
  30. if err != nil {
  31. log.Fatalf("An error occurred: %v", err)
  32. }
  33. qStore, err := file.NewDefaultQuizFileStore()
  34. if err != nil {
  35. log.Fatalf("An error occurred: %v", err)
  36. }
  37. sm, err := sessionmanager.NewSessionManager(
  38. "http://localhost:8080/",
  39. pStore.Storer,
  40. qStore.Storer,
  41. nil,
  42. nil,
  43. )
  44. if err != nil {
  45. log.Fatalf("An error occurred: %v", err)
  46. }
  47. session, err := sm.Push(sessionName)
  48. if err != nil {
  49. log.Fatalf("An error occurred: %v", err)
  50. }
  51. _, err = sStore.Create(session)
  52. if err != nil {
  53. log.Fatalf("An error occurred: %v", err)
  54. }
  55. log.Println("Session upload completed with success!")
  56. for _, p := range pStore.ReadAll() {
  57. log.Printf("http://localhost:8080/%v/%v", session.ID, p.Token)
  58. }
  59. return nil
  60. }
  61. func pull(cCtx *cli.Context) error {
  62. if cCtx.Args().Len() < 1 {
  63. log.Fatalf("Please provide a session ID as first argument of pull.")
  64. }
  65. rStore, err := file.NewDefaultResponseFileStore()
  66. if err != nil {
  67. log.Fatalf("An error occurred: %v", err)
  68. }
  69. pStore, err := file.NewDefaultParticipantFileStore()
  70. if err != nil {
  71. log.Fatalf("An error occurred: %v", err)
  72. }
  73. qStore, err := file.NewDefaultQuizFileStore()
  74. if err != nil {
  75. log.Fatalf("An error occurred: %v", err)
  76. }
  77. sm, err := sessionmanager.NewSessionManager(
  78. "http://localhost:8080/",
  79. pStore.Storer,
  80. qStore.Storer,
  81. nil,
  82. nil,
  83. )
  84. if err != nil {
  85. log.Fatalf("An error occurred: %v", err)
  86. }
  87. err = sm.Pull(rStore, cCtx.Args().First())
  88. if err != nil {
  89. log.Fatalf("An error occurred: %v", err)
  90. }
  91. log.Println("Responses download completed with success!")
  92. return nil
  93. }
  94. func scores(cCtx *cli.Context) error {
  95. if cCtx.Args().Len() < 1 {
  96. log.Fatalf("Please provide a session name as first argument of 'score'.")
  97. }
  98. sStore, err := file.NewDefaultSessionFileStore()
  99. if err != nil {
  100. log.Fatalf("An error occurred: %v", err)
  101. }
  102. session, err := sStore.Read(cCtx.Args().First())
  103. if err != nil {
  104. log.Fatalf("An error occurred: %v", err)
  105. }
  106. rStore, err := file.NewDefaultResponseFileStore()
  107. if err != nil {
  108. log.Fatalf("An error occurred: %v", err)
  109. }
  110. scores, err := sessionmanager.NewScores(rStore, session)
  111. if err != nil {
  112. log.Fatalf("An error occurred: %v", err)
  113. }
  114. fmt.Println(scores)
  115. return nil
  116. }