• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Courseography / courseography / 6ca2fc21-e28e-4b1f-931e-25ce91baa664

16 Sep 2025 02:22AM UTC coverage: 54.687%. Remained the same
6ca2fc21-e28e-4b1f-931e-25ce91baa664

push

circleci

web-flow
Refactored Database files to MVC architecture (#1604)

* created Program file in models folder
* created Meeting file in models folder
* removed CourseQueries.hs and CourseInsertion.hs
* renamed post -> program across the codebase, excluding database tables and route names

485 of 952 branches covered (50.95%)

Branch coverage included in aggregate %.

31 of 87 new or added lines in 6 files covered. (35.63%)

2 existing lines in 1 file now uncovered.

2187 of 3934 relevant lines covered (55.59%)

160.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

48.65
/app/Controllers/Generate.hs
1
module Controllers.Generate
2
    (generateResponse, findAndSavePrereqsResponse) where
3

4
import Control.Monad ()
5
import Control.Monad.IO.Class (liftIO)
6
import Data.Aeson (decode, object, (.=))
7
import Data.List (nub)
8
import Data.Maybe (fromJust, isNothing, mapMaybe)
9
import qualified Data.Text.Lazy as TL
10
import DynamicGraphs.GraphOptions (CourseGraphOptions (..), GraphOptions (..))
11
import DynamicGraphs.WriteRunDot (generateAndSavePrereqResponse, getBody)
12
import Happstack.Server
13
import MasterTemplate
14
import Models.Program (reqsForProgram, returnProgram)
15
import Scripts
16
import Text.Blaze ((!))
17
import qualified Text.Blaze.Html5 as H
18
import qualified Text.Blaze.Html5.Attributes as A
19
import Util.Happstack (createJSONResponse)
20

21
generateResponse :: ServerPart Response
22
generateResponse =
23
    ok $ toResponse $
×
24
        masterTemplate "Courseography - Generate"
×
25
                    []
×
26
                    (do
×
27
                        H.div ! A.id "navbar" $ ""
×
28
                        generatePrerequisites
×
29
                    )
30
                    generateScripts
×
31

32
generatePrerequisites :: H.Html
33
generatePrerequisites =
34
    H.html $ do
×
35
        H.head $
×
36
            H.title "Generate Prerequisites!"
×
37
        H.div ! A.id "generateRoot" $ ""
×
38

39
findAndSavePrereqsResponse :: ServerPart Response
40
findAndSavePrereqsResponse = do
1✔
41
    method PUT
1✔
42
    requestBody <- getBody
1✔
43
    let coursesOptions :: CourseGraphOptions = fromJust $ decode requestBody
2✔
44

45
    postResults <- liftIO $ mapM (\code -> do
2✔
NEW
46
                        post <- returnProgram (TL.toStrict code)
×
47
                        return (TL.toStrict code, post))
×
48
                   (programs coursesOptions)
2✔
49

50
    let invalidPrograms = map fst $ filter (isNothing . snd) postResults
×
51
        validPrograms = mapMaybe snd postResults
×
52

53
    allCourses <- liftIO $ nub <$>
2✔
54
        if all (== TL.empty) (courses coursesOptions)
2!
NEW
55
            then return $ map TL.pack (concatMap reqsForProgram validPrograms)
×
56
            else return $ courses coursesOptions
2✔
57

58
    let updatedCoursesOptions = coursesOptions
2✔
59
            { courses = map TL.toUpper allCourses
2✔
60
            , graphOptions = (graphOptions coursesOptions)
2✔
61
                { taken = map TL.toUpper (taken (graphOptions coursesOptions))
2✔
62
                , departments = map TL.toUpper (departments (graphOptions coursesOptions))
2✔
63
                }
64
            }
65

66
    if all (== TL.empty) (courses coursesOptions) && not (null invalidPrograms)
2!
67
        then return $ createJSONResponse $ object ["error" .= object ["invalidPrograms" .= invalidPrograms]]
×
68
        else liftIO $ generateAndSavePrereqResponse updatedCoursesOptions
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc