on master help sign in
Added address to faculty
7ae2ee7iko
denis/src/Data/Faculty.hs+9−6
@@ -21,8 +21,8 @@ import qualified Data.Vector as V
21import Servant.Docs
21import Servant.Docs
22
22
23instance ToSample Faculty where
23instance ToSample Faculty where
24− toSamples _ = singleSample $ Faculty "name" "cs.hse.ru/bse" "ФКН -> ПИ" "Москва" "193729"
24+ toSamples _ = singleSample $ Faculty "ПИ" "cs.hse.ru/bse" "ФКН -> ПИ" "Москва" "193729"
25− (V.fromList ["Программирование", "Естсественные науки"])
25+ (V.fromList ["Программирование", "Естсественные науки"]) "Настоящий адрес факультета"
26
26
27type FacultyUrl = T.Text
27type FacultyUrl = T.Text
28
28
@@ -32,17 +32,19 @@ data Faculty = Faculty {
32 facultyPath :: T.Text,
32 facultyPath :: T.Text,
33 facultyCampusName :: T.Text,
33 facultyCampusName :: T.Text,
34 facultyCampusCode :: T.Text,
34 facultyCampusCode :: T.Text,
35− facultyTags :: V.Vector T.Text
35+ facultyTags :: V.Vector T.Text,
36+ facultyAddress :: T.Text
36} deriving (GHC.Generic, Show, SOP.Generic, SOP.HasDatatypeInfo)
37} deriving (GHC.Generic, Show, SOP.Generic, SOP.HasDatatypeInfo)
37
38
38instance ToJSON Faculty where
39instance ToJSON Faculty where
39− toJSON (Faculty name url p campusName campusCode tags) = object [
40+ toJSON (Faculty name url p campusName campusCode tags address) = object [
40 "name" .= name,
41 "name" .= name,
41 "url" .= url,
42 "url" .= url,
42 "path" .= p,
43 "path" .= p,
43 "campusName" .= campusName,
44 "campusName" .= campusName,
44 "campusCode" .= campusCode,
45 "campusCode" .= campusCode,
45− "tags" .= tags
46+ "tags" .= tags,
47+ "address" .= address
46 ]
48 ]
47
49
48instance FromJSON Faculty where
50instance FromJSON Faculty where
@@ -53,4 +55,5 @@ instance FromJSON Faculty where
53 e .: "path" <*>
55 e .: "path" <*>
54 e .: "campusName" <*>
56 e .: "campusName" <*>
55 e .: "campusCode" <*>
57 e .: "campusCode" <*>
56− e .: "tags"
58+ e .: "tags" <*>
59+ e .: "address"
denis/src/Data/Faculty/Parser.hs+2−1
@@ -64,7 +64,8 @@ getFacultiesForCampus (Campus cName cCode) = do
64 else Just ()
64 else Just ()
65 let tags = map (T.strip . snd) . texts' mempty . map (NodeElement) . filter (classIs "with-indent small tag-set") $ els
65 let tags = map (T.strip . snd) . texts' mempty . map (NodeElement) . filter (classIs "with-indent small tag-set") $ els
66 let path = T.unwords . map (T.strip . snd) . texts' mempty . map (NodeElement) . filter (classIs "small") $ els
66 let path = T.unwords . map (T.strip . snd) . texts' mempty . map (NodeElement) . filter (classIs "small") $ els
67+ let address = T.unwords . map (T.strip . snd) . texts' mempty . map (NodeElement) . filter (classIs "link link_dark i") $ els
67− return $ Faculty name url path cName cCode (V.fromList tags)
68+ return $ Faculty name url path cName cCode (V.fromList tags) address
68
69
69classIs :: T.Text -> Element -> Bool
70classIs :: T.Text -> Element -> Bool
70classIs c = (== (Just c)) . HM.lookup "class" . eltAttrs
71classIs c = (== (Just c)) . HM.lookup "class" . eltAttrs
denis/src/Data/Query.hs+10−5
@@ -192,7 +192,8 @@ getUsersQ uIds = case idsToColumn uIds of
192 #faculties ! #facultyPath `as` #userRowFacultyPath :*
192 #faculties ! #facultyPath `as` #userRowFacultyPath :*
193 #faculties ! #facultyCampusName `as` #userRowFacultyCampusName :*
193 #faculties ! #facultyCampusName `as` #userRowFacultyCampusName :*
194 #faculties ! #facultyCampusCode `as` #userRowFacultyCampusCode :*
194 #faculties ! #facultyCampusCode `as` #userRowFacultyCampusCode :*
195− #faculties ! #facultyTags `as` #userRowFacultyTags
195+ #faculties ! #facultyTags `as` #userRowFacultyTags :*
196+ #faculties ! #facultyAddress `as` #userRowFacultyAddress
196 ) (from (subquery (idQ `As` #ids) &
197 ) (from (subquery (idQ `As` #ids) &
197 innerJoin (table #users)
198 innerJoin (table #users)
198 (#ids ! #id .== #users ! #userRowId) &
199 (#ids ! #id .== #users ! #userRowId) &
@@ -215,7 +216,8 @@ getAllUsersQ = select (
215 #faculties ! #facultyPath `as` #userRowFacultyPath :*
216 #faculties ! #facultyPath `as` #userRowFacultyPath :*
216 #faculties ! #facultyCampusName `as` #userRowFacultyCampusName :*
217 #faculties ! #facultyCampusName `as` #userRowFacultyCampusName :*
217 #faculties ! #facultyCampusCode `as` #userRowFacultyCampusCode :*
218 #faculties ! #facultyCampusCode `as` #userRowFacultyCampusCode :*
218− #faculties ! #facultyTags `as` #userRowFacultyTags
219+ #faculties ! #facultyTags `as` #userRowFacultyTags :*
220+ #faculties ! #facultyAddress `as` #userRowFacultyAddress
219 ) (from ((table #users) &
221 ) (from ((table #users) &
220 innerJoin (table #faculties)
222 innerJoin (table #faculties)
221 (#users ! #userRowFacultyUrl .== #faculties ! #facultyUrl))&
223 (#users ! #userRowFacultyUrl .== #faculties ! #facultyUrl))&
@@ -295,7 +297,8 @@ updateFacultyQ = insertRow #faculties
295 Set (param @3) `as` #facultyPath :*
297 Set (param @3) `as` #facultyPath :*
296 Set (param @4) `as` #facultyCampusName :*
298 Set (param @4) `as` #facultyCampusName :*
297 Set (param @5) `as` #facultyCampusCode :*
299 Set (param @5) `as` #facultyCampusCode :*
298− Set (param @6) `as` #facultyTags
300+ Set (param @6) `as` #facultyTags :*
301+ Set (param @7) `as` #facultyAddress
299 )
302 )
300 (OnConflictDoNothing)
303 (OnConflictDoNothing)
301 (Returning Nil)
304 (Returning Nil)
@@ -949,7 +952,8 @@ data UserRow = UserRow {
949 userRowFacultyPath :: T.Text,
952 userRowFacultyPath :: T.Text,
950 userRowFacultyCampusName :: T.Text,
953 userRowFacultyCampusName :: T.Text,
951 userRowFacultyCampusCode :: T.Text,
954 userRowFacultyCampusCode :: T.Text,
952− userRowFacultyTags :: V.Vector T.Text
955+ userRowFacultyTags :: V.Vector T.Text,
956+ userRowFacultyAddress :: T.Text
953} deriving (GHC.Generic, SOP.Generic, SOP.HasDatatypeInfo)
957} deriving (GHC.Generic, SOP.Generic, SOP.HasDatatypeInfo)
954
958
955rowToUser :: UserRow -> User Faculty
959rowToUser :: UserRow -> User Faculty
@@ -964,7 +968,8 @@ rowToUser UserRow{..} = User {
964 facultyPath = userRowFacultyPath,
968 facultyPath = userRowFacultyPath,
965 facultyCampusName = userRowFacultyCampusName,
969 facultyCampusName = userRowFacultyCampusName,
966 facultyCampusCode = userRowFacultyCampusCode,
970 facultyCampusCode = userRowFacultyCampusCode,
967− facultyTags = userRowFacultyTags
971+ facultyTags = userRowFacultyTags,
972+ facultyAddress = userRowFacultyAddress
968 },
973 },
969 userEmail = userRowEmail
974 userEmail = userRowEmail
970 }
975 }
denis/src/Data/Schema.hs+4−2
@@ -29,7 +29,8 @@ type Schema =
29 "facultyPath" ::: 'NoDef :=> 'NotNull 'PGtext,
29 "facultyPath" ::: 'NoDef :=> 'NotNull 'PGtext,
30 "facultyCampusName" ::: 'NoDef :=> 'NotNull 'PGtext,
30 "facultyCampusName" ::: 'NoDef :=> 'NotNull 'PGtext,
31 "facultyCampusCode" ::: 'NoDef :=> 'NotNull 'PGtext,
31 "facultyCampusCode" ::: 'NoDef :=> 'NotNull 'PGtext,
32− "facultyTags" ::: 'NoDef :=> 'NotNull ('PGvararray ('NotNull 'PGtext))
32+ "facultyTags" ::: 'NoDef :=> 'NotNull ('PGvararray ('NotNull 'PGtext)),
33+ "facultyAddress" ::: 'NoDef :=> 'NotNull 'PGtext
33 ]),
34 ]),
34 "users" ::: 'Table ( '[
35 "users" ::: 'Table ( '[
35 "pk_users" ::: 'PrimaryKey '["userRowId"],
36 "pk_users" ::: 'PrimaryKey '["userRowId"],
@@ -195,7 +196,8 @@ createTables = createTable #faculties (
195 notNullable text `as` #facultyPath :*
196 notNullable text `as` #facultyPath :*
196 notNullable text `as` #facultyCampusName :*
197 notNullable text `as` #facultyCampusName :*
197 notNullable text `as` #facultyCampusCode :*
198 notNullable text `as` #facultyCampusCode :*
198− notNullable (vararray text) `as` #facultyTags
199+ notNullable (vararray text) `as` #facultyTags :*
200+ notNullable text `as` #facultyAddress
199 ) (
201 ) (
200 primaryKey #facultyUrl `as` #pk_faculties
202 primaryKey #facultyUrl `as` #pk_faculties
201 ) >>> createTable #users (
203 ) >>> createTable #users (