on master help sign in
Added address to faculty
commit7ae2ee74dd6dc34173ac2f7314ce9feacbf78098 authoriko <ilyakooo0@gmail.com> dateSat 11 May 2019, 13:01 (7 years ago) parent110d394
4 files changed+25−14
denis/src/Data/Faculty.hs+9−6 denis/src/Data/Faculty/Parser.hs+2−1 denis/src/Data/Query.hs+10−5 denis/src/Data/Schema.hs+4−2
denis/src/Data/Faculty.hs+9−6
@@ -21,8 +21,8 @@ import qualified Data.Vector as V
2121import Servant.Docs
2222
2323instance ToSample Faculty where
24− toSamples _ = singleSample $ Faculty "name" "cs.hse.ru/bse" "ФКН -> ПИ" "Москва" "193729"
25− (V.fromList ["Программирование", "Естсественные науки"])
24+ toSamples _ = singleSample $ Faculty "ПИ" "cs.hse.ru/bse" "ФКН -> ПИ" "Москва" "193729"
25+ (V.fromList ["Программирование", "Естсественные науки"]) "Настоящий адрес факультета"
2626
2727type FacultyUrl = T.Text
2828
@@ -32,17 +32,19 @@ data Faculty = Faculty {
3232 facultyPath :: T.Text,
3333 facultyCampusName :: T.Text,
3434 facultyCampusCode :: T.Text,
35− facultyTags :: V.Vector T.Text
35+ facultyTags :: V.Vector T.Text,
36+ facultyAddress :: T.Text
3637} deriving (GHC.Generic, Show, SOP.Generic, SOP.HasDatatypeInfo)
3738
3839instance ToJSON Faculty where
39− toJSON (Faculty name url p campusName campusCode tags) = object [
40+ toJSON (Faculty name url p campusName campusCode tags address) = object [
4041 "name" .= name,
4142 "url" .= url,
4243 "path" .= p,
4344 "campusName" .= campusName,
4445 "campusCode" .= campusCode,
45− "tags" .= tags
46+ "tags" .= tags,
47+ "address" .= address
4648 ]
4749
4850instance FromJSON Faculty where
@@ -53,4 +55,5 @@ instance FromJSON Faculty where
5355 e .: "path" <*>
5456 e .: "campusName" <*>
5557 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
6464 else Just ()
6565 let tags = map (T.strip . snd) . texts' mempty . map (NodeElement) . filter (classIs "with-indent small tag-set") $ els
6666 let path = T.unwords . map (T.strip . snd) . texts' mempty . map (NodeElement) . filter (classIs "small") $ els
67− return $ Faculty name url path cName cCode (V.fromList tags)
67+ let address = T.unwords . map (T.strip . snd) . texts' mempty . map (NodeElement) . filter (classIs "link link_dark i") $ els
68+ return $ Faculty name url path cName cCode (V.fromList tags) address
6869
6970classIs :: T.Text -> Element -> Bool
7071classIs c = (== (Just c)) . HM.lookup "class" . eltAttrs
denis/src/Data/Query.hs+10−5
@@ -192,7 +192,8 @@ getUsersQ uIds = case idsToColumn uIds of
192192 #faculties ! #facultyPath `as` #userRowFacultyPath :*
193193 #faculties ! #facultyCampusName `as` #userRowFacultyCampusName :*
194194 #faculties ! #facultyCampusCode `as` #userRowFacultyCampusCode :*
195− #faculties ! #facultyTags `as` #userRowFacultyTags
195+ #faculties ! #facultyTags `as` #userRowFacultyTags :*
196+ #faculties ! #facultyAddress `as` #userRowFacultyAddress
196197 ) (from (subquery (idQ `As` #ids) &
197198 innerJoin (table #users)
198199 (#ids ! #id .== #users ! #userRowId) &
@@ -215,7 +216,8 @@ getAllUsersQ = select (
215216 #faculties ! #facultyPath `as` #userRowFacultyPath :*
216217 #faculties ! #facultyCampusName `as` #userRowFacultyCampusName :*
217218 #faculties ! #facultyCampusCode `as` #userRowFacultyCampusCode :*
218− #faculties ! #facultyTags `as` #userRowFacultyTags
219+ #faculties ! #facultyTags `as` #userRowFacultyTags :*
220+ #faculties ! #facultyAddress `as` #userRowFacultyAddress
219221 ) (from ((table #users) &
220222 innerJoin (table #faculties)
221223 (#users ! #userRowFacultyUrl .== #faculties ! #facultyUrl))&
@@ -295,7 +297,8 @@ updateFacultyQ = insertRow #faculties
295297 Set (param @3) `as` #facultyPath :*
296298 Set (param @4) `as` #facultyCampusName :*
297299 Set (param @5) `as` #facultyCampusCode :*
298− Set (param @6) `as` #facultyTags
300+ Set (param @6) `as` #facultyTags :*
301+ Set (param @7) `as` #facultyAddress
299302 )
300303 (OnConflictDoNothing)
301304 (Returning Nil)
@@ -949,7 +952,8 @@ data UserRow = UserRow {
949952 userRowFacultyPath :: T.Text,
950953 userRowFacultyCampusName :: T.Text,
951954 userRowFacultyCampusCode :: T.Text,
952− userRowFacultyTags :: V.Vector T.Text
955+ userRowFacultyTags :: V.Vector T.Text,
956+ userRowFacultyAddress :: T.Text
953957} deriving (GHC.Generic, SOP.Generic, SOP.HasDatatypeInfo)
954958
955959rowToUser :: UserRow -> User Faculty
@@ -964,7 +968,8 @@ rowToUser UserRow{..} = User {
964968 facultyPath = userRowFacultyPath,
965969 facultyCampusName = userRowFacultyCampusName,
966970 facultyCampusCode = userRowFacultyCampusCode,
967− facultyTags = userRowFacultyTags
971+ facultyTags = userRowFacultyTags,
972+ facultyAddress = userRowFacultyAddress
968973 },
969974 userEmail = userRowEmail
970975 }
denis/src/Data/Schema.hs+4−2
@@ -29,7 +29,8 @@ type Schema =
2929 "facultyPath" ::: 'NoDef :=> 'NotNull 'PGtext,
3030 "facultyCampusName" ::: 'NoDef :=> 'NotNull 'PGtext,
3131 "facultyCampusCode" ::: 'NoDef :=> 'NotNull 'PGtext,
32− "facultyTags" ::: 'NoDef :=> 'NotNull ('PGvararray ('NotNull 'PGtext))
32+ "facultyTags" ::: 'NoDef :=> 'NotNull ('PGvararray ('NotNull 'PGtext)),
33+ "facultyAddress" ::: 'NoDef :=> 'NotNull 'PGtext
3334 ]),
3435 "users" ::: 'Table ( '[
3536 "pk_users" ::: 'PrimaryKey '["userRowId"],
@@ -195,7 +196,8 @@ createTables = createTable #faculties (
195196 notNullable text `as` #facultyPath :*
196197 notNullable text `as` #facultyCampusName :*
197198 notNullable text `as` #facultyCampusCode :*
198− notNullable (vararray text) `as` #facultyTags
199+ notNullable (vararray text) `as` #facultyTags :*
200+ notNullable text `as` #facultyAddress
199201 ) (
200202 primaryKey #facultyUrl `as` #pk_faculties
201203 ) >>> createTable #users (