main.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "git.andreafazzi.eu/andrea/probo/sessionmanager"
  7. "git.andreafazzi.eu/andrea/probo/store/file"
  8. "github.com/urfave/cli/v2"
  9. )
  10. func main() {
  11. file.DefaultBaseDir = "testdata"
  12. sStore, err := file.NewDefaultSessionFileStore()
  13. if err != nil {
  14. log.Fatalf("An error occurred: %v", err)
  15. }
  16. pStore, err := file.NewParticipantDefaultFileStore()
  17. if err != nil {
  18. log.Fatalf("An error occurred: %v", err)
  19. }
  20. qStore, err := file.NewDefaultQuizFileStore()
  21. if err != nil {
  22. log.Fatalf("An error occurred: %v", err)
  23. }
  24. sm, err := sessionmanager.NewSessionManager(
  25. "http://localhost:8080/",
  26. pStore.Storer,
  27. qStore.Storer,
  28. nil,
  29. nil,
  30. )
  31. if err != nil {
  32. log.Fatalf("An error occurred: %v", err)
  33. }
  34. app := &cli.App{
  35. Name: "probo-cli",
  36. Usage: "Quiz Management System for Hackers!",
  37. Commands: []*cli.Command{
  38. {
  39. Name: "init",
  40. Aliases: []string{"i"},
  41. Usage: "Initialize the current directory",
  42. Action: func(cCtx *cli.Context) error {
  43. return nil
  44. },
  45. },
  46. {
  47. Name: "session",
  48. Aliases: []string{"s"},
  49. Usage: "options for command 'session'",
  50. Subcommands: []*cli.Command{
  51. {
  52. Name: "create",
  53. Usage: "Create a new exam session",
  54. Action: func(cCtx *cli.Context) error {
  55. if cCtx.Args().Len() < 1 {
  56. log.Fatalf("Please provide a session name as first argument of create.")
  57. }
  58. session, err := sm.Push(cCtx.Args().First())
  59. if err != nil {
  60. log.Fatalf("An error occurred: %v", err)
  61. }
  62. _, err = sStore.Create(session)
  63. if err != nil {
  64. log.Fatalf("An error occurred: %v", err)
  65. }
  66. log.Println("Session upload completed with success!")
  67. for _, p := range pStore.ReadAll() {
  68. log.Printf("http://localhost:8080/%v/%v", session.ID, p.Token)
  69. }
  70. return nil
  71. },
  72. },
  73. {
  74. Name: "pull",
  75. Usage: "Download responses from a session",
  76. Action: func(cCtx *cli.Context) error {
  77. if cCtx.Args().Len() < 1 {
  78. log.Fatalf("Please provide a session ID as first argument of pull.")
  79. }
  80. rStore, err := file.NewDefaultResponseFileStore()
  81. if err != nil {
  82. log.Fatalf("An error occurred: %v", err)
  83. }
  84. err = sm.Pull(rStore, cCtx.Args().First())
  85. if err != nil {
  86. log.Fatalf("An error occurred: %v", err)
  87. }
  88. log.Println("Responses download completed with success!")
  89. return nil
  90. },
  91. },
  92. {
  93. Name: "scores",
  94. Usage: "Show the scores for the given session",
  95. Action: func(cCtx *cli.Context) error {
  96. if cCtx.Args().Len() < 1 {
  97. log.Fatalf("Please provide a session name as first argument of 'score'.")
  98. }
  99. session, err := sStore.Read(cCtx.Args().First())
  100. if err != nil {
  101. log.Fatalf("An error occurred: %v", err)
  102. }
  103. rStore, err := file.NewDefaultResponseFileStore()
  104. if err != nil {
  105. log.Fatalf("An error occurred: %v", err)
  106. }
  107. scores, err := sessionmanager.NewScores(rStore, session)
  108. if err != nil {
  109. log.Fatalf("An error occurred: %v", err)
  110. }
  111. fmt.Println(scores)
  112. return nil
  113. },
  114. },
  115. },
  116. },
  117. },
  118. }
  119. if err := app.Run(os.Args); err != nil {
  120. log.Fatal(err)
  121. }
  122. }